{"id":22870246,"url":"https://github.com/dadav/schreibmaschine.nvim","last_synced_at":"2026-05-01T15:32:28.400Z","repository":{"id":234854622,"uuid":"705290861","full_name":"dadav/schreibmaschine.nvim","owner":"dadav","description":"This plugin maps events and keys to sound files. ","archived":false,"fork":false,"pushed_at":"2023-10-20T18:38:04.000Z","size":1465,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-13T02:03:22.067Z","etag":null,"topics":["hacktoberfest","lazy","neovim","nvim","plugin"],"latest_commit_sha":null,"homepage":"https://github.com/dadav/schreibmaschine.nvim","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dadav.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-10-15T15:54:26.000Z","updated_at":"2024-02-12T14:38:50.000Z","dependencies_parsed_at":"2024-04-21T06:14:42.289Z","dependency_job_id":"cd78c971-6ecf-4862-9847-47ebf1edb97e","html_url":"https://github.com/dadav/schreibmaschine.nvim","commit_stats":null,"previous_names":["dadav/schreibmaschine.nvim"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/dadav/schreibmaschine.nvim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dadav%2Fschreibmaschine.nvim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dadav%2Fschreibmaschine.nvim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dadav%2Fschreibmaschine.nvim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dadav%2Fschreibmaschine.nvim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dadav","download_url":"https://codeload.github.com/dadav/schreibmaschine.nvim/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dadav%2Fschreibmaschine.nvim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32503036,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacktoberfest","lazy","neovim","nvim","plugin"],"created_at":"2024-12-13T13:14:18.105Z","updated_at":"2026-05-01T15:32:28.383Z","avatar_url":"https://github.com/dadav.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e🔊schreibmaschine.nvim\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"logo.jpg\" width=\"400\" /\u003e\n  \u003cbr /\u003e\n  This plugin maps events and keys to sound files.\n\u003c/p\u003e\n\n## ⭐Installation\n\n### [lazy.nvim](https://github.com/folke/lazy.nvim)\n\n```lua\n{\n  \"dadav/schreibmaschine.nvim\",\n  lazy = false,\n  init = function()\n    vim.keymap.set('n', '\u003cleader\u003eTt', '\u003ccmd\u003eSchreibmaschineToggle\u003ccr\u003e')\n    vim.keymap.set('n', '\u003cleader\u003eTp', '\u003ccmd\u003eSchreibmaschineProfilePicker\u003ccr\u003e')\n  end,\n  opts = {\n    -- your configuration comes here\n    -- or leave it empty to use the default settings\n    -- refer to the configuration section below\n  }\n}\n```\n\n### Requirements\n\n- [mpv](https://github.com/mpv-player/mpv)\n\n## 🎨 Configuration\n\n```lua\n{\n  -- set the active profile, which must be defined in `profiles`\n  active_profile = \"typewriter\",\n  -- group multiple events together, see `:h autocmd-events` for more informations\n  -- if a non existent event is used, it's treated as a pattern (see `:h nvim_create_autocmd`)\n  event_groups = {\n    yank = { \"TextYankPost\" },\n    typing = { \"InsertCharPre\" },\n    start = { \"VimEnter\" },\n    exit = { \"VimLeavePre\" },\n    save = { \"BufWritePost\" },\n    load = { \"BufReadPost\" },\n    create = { \"BufNewFile\" },\n    suspend = { \"VimSuspend\" },\n    resume = { \"VimResume\" },\n    lazy_update = { \"LazyUpdate\" },\n    lazy_clean = { \"LazyClean\" },\n    lazy_check = { \"LazyCheck\" },\n    lazy_reload = { \"LazyReload\" },\n    lazy_install = { \"LazyInstall\" },\n    lazy_sync = { \"LazySync\" },\n  },\n  -- profiles map events/keys to sounds\n  profiles = {\n    typewriter = {\n      by_event_group = {\n        -- if the filenames are relative, the will be resolved to:\n        -- $PLUGIN/profiles/$profile/$filename\n        typing = {\n          \"key1.mp3\",\n          \"key2.mp3\",\n          \"key3.mp3\",\n          \"key4.mp3\",\n          \"key5.mp3\",\n          \"key6.mp3\",\n          \"key7.mp3\",\n          \"key8.mp3\",\n          \"key9.mp3\",\n          \"key10.mp3\",\n        },\n        save = \"save.mp3\",\n      },\n      by_key = {\n        -- see `:h key-notation` for more keys\n        [\"\u003cCR\u003e\"] = \"enter.mp3\",\n      },\n    },\n    kid = {\n      by_event_group = {\n        typing = { \"pew1.mp3\", \"pew2.mp3\" },\n      },\n      by_key = {\n        [\"\u003cCR\u003e\"] = \"enter.mp3\",\n      },\n    },\n    whistle = {\n      by_event_group = {\n        start = \"start.mp3\",\n        exit = \"exit.mp3\",\n      },\n    },\n    bubble = {\n      by_event_group = {\n        typing = \"beep.wav\",\n        exit = \"exit.wav\",\n      },\n      by_key = {\n        [\"\u003cCR\u003e\"] = \"boop.wav\",\n      },\n    },\n    pop = {\n      by_event_group = {\n        typing = { \"pop1.mp3\", \"pop2.mp3\", \"pop3.mp3\", \"pop4.mp3\" },\n      },\n      by_key = {\n        [\"\u003cCR\u003e\"] = \"pop5.mp3\",\n        [\"\u003cESC\u003e\"] = \"pop6.mp3\",\n        [\"\u003cBS\u003e\"] = \"pop7.mp3\",\n      },\n    },\n    fart = {\n      by_event_group = {\n        typing = { \"fart1.mp3\", \"fart2.mp3\" },\n      },\n      by_key = {\n        [\"\u003cCR\u003e\"] = { \"fart3.mp3\", \"fart4.mp3\" },\n      },\n    },\n    instrumental = {\n      by_event_group = {\n        -- you can use multiple sounds for one event or key\n        -- they will be randomly choosen\n        typing = { \"short1.mp3\", \"short2.mp3\", \"short3.mp3\" },\n        exit = \"goodbye.mp3\",\n      },\n      by_key = {\n        [\"\u003cCR\u003e\"] = \"enter.mp3\",\n      },\n      settings = {\n        randomize = {\n          order = {\n            enable = true,\n          },\n        },\n      },\n    },\n    [\"tts/en\"] = {\n      settings = {\n        discard_when_busy = false,\n        max_parallel_sounds = 1,\n        randomize = {\n          volume = {\n            enable = false,\n          },\n          speed = {\n            enable = false,\n          },\n        },\n      },\n      by_event_group = {\n        save = \"file_saved.mp3\",\n        -- load = \"file_loaded.mp3\",\n        create = \"file_created.mp3\",\n        start = \"whats_up.mp3\",\n        exit = \"goodbye.mp3\",\n        suspend = \"dont_forget_me.mp3\",\n        resume = \"glad_you_didnt_forget_me.mp3\",\n        lazy_install = \"install_complete.mp3\",\n        lazy_update = \"update_complete.mp3\",\n        lazy_sync = \"sync_complete.mp3\",\n        lazy_reload = \"reload_complete.mp3\",\n        lazy_check = \"check_complete.mp3\",\n      },\n    },\n    [\"tts/jp\"] = {\n      settings = {\n        discard_when_busy = false,\n        max_parallel_sounds = 1,\n        randomize = {\n          volume = {\n            enable = false,\n          },\n          speed = {\n            enable = false,\n          },\n        },\n      },\n      by_event_group = {\n        save = \"file_saved.mp3\",\n        -- load = \"file_loaded.mp3\",\n        create = \"file_created.mp3\",\n        start = \"whats_up.mp3\",\n        exit = \"goodbye.mp3\",\n        suspend = \"dont_forget_me.mp3\",\n        resume = \"glad_you_didnt_forget_me.mp3\",\n        lazy_install = \"install_complete.mp3\",\n        lazy_update = \"update_complete.mp3\",\n        lazy_sync = \"sync_complete.mp3\",\n        lazy_reload = \"reload_complete.mp3\",\n        lazy_check = \"check_complete.mp3\",\n      },\n    },\n    nsfw = {\n      settings = {\n        max_parallel_sounds = 1,\n        -- disable randomizations completely\n        randomize = { {} },\n        cleanup = true,\n      },\n      by_event_group = {\n        start = \"https://www.youtube.com/watch?v=dQw4w9WgXcQ\",\n      },\n    },\n  },\n  -- the default profile options.\n  -- overwrite them in profiles.$name.settings\n  defaults = {\n    -- default volume; may be changed by the randomize.volume settings\n    -- 1 means 100%\n    volume = 1,\n    -- kill remaining processes on VimLeavePre\n    cleanup = false,\n    -- if enabled, sounds will be discarded if `max_parallel_sounds` is reached\n    discard_when_busy = true,\n    -- limits the parallel sounds (mpv processes)\n    max_parallel_sounds = 3,\n    -- adds some randomization to the sounds\n    randomize = {\n      -- randomize the volume of the sound file\n      volume = {\n        enable = true,\n        -- 0 means silent, 1 means full volume\n        min = 0.75,\n        max = 1,\n      },\n      -- randomize the speed of the sound file\n      speed = {\n        enable = true,\n        -- 0.1 means super slow, 1 means normal speed, 2 means double\n        min = 0.75,\n        max = 1,\n      },\n      -- if enabled, play the sounds in order (in a loop)\n      order = {\n        enable = false,\n      },\n      -- remember the played sound for the events or keys\n      -- relevant if multiple sounds per event/key were configured\n      persistent_assignment = {\n        enable = false,\n      },\n    },\n  },\n}\n```\n\n## ⚡Commands\n\nThere are two commands you can use:\n\n- **SchreibmaschineToggle**: Toggle the functionality of this plugin.\n- **SchreibmaschineProfilePicker**: Start a profile selector.\n\nThere are no mappings shipped, you need to create them yourself\n(for example in the `init` function, see the installation section).\n\n## 🔑 License\n\n[MIT](./LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdadav%2Fschreibmaschine.nvim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdadav%2Fschreibmaschine.nvim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdadav%2Fschreibmaschine.nvim/lists"}