{"id":13470721,"url":"https://github.com/zevv/bucklespring","last_synced_at":"2025-05-14T13:05:51.328Z","repository":{"id":41274763,"uuid":"50997736","full_name":"zevv/bucklespring","owner":"zevv","description":"Nostalgia bucklespring keyboard sound","archived":false,"fork":false,"pushed_at":"2025-03-21T06:10:50.000Z","size":16440,"stargazers_count":1482,"open_issues_count":37,"forks_count":87,"subscribers_count":26,"default_branch":"master","last_synced_at":"2025-05-08T21:54:01.495Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zevv.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,"publiccode":null,"codemeta":null}},"created_at":"2016-02-03T12:20:04.000Z","updated_at":"2025-04-30T07:05:55.000Z","dependencies_parsed_at":"2024-09-21T05:01:01.820Z","dependency_job_id":"2e44b6b3-1a08-4da0-986a-39f82a3aa994","html_url":"https://github.com/zevv/bucklespring","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevv%2Fbucklespring","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevv%2Fbucklespring/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevv%2Fbucklespring/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevv%2Fbucklespring/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zevv","download_url":"https://codeload.github.com/zevv/bucklespring/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254149944,"owners_count":22022851,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-07-31T16:00:35.089Z","updated_at":"2025-05-14T13:05:51.307Z","avatar_url":"https://github.com/zevv.png","language":"C","funding_links":[],"categories":["C","\u003ca name=\"funny\"\u003e\u003c/a\u003eFunny tools"],"sub_categories":[],"readme":"Nostalgia bucklespring keyboard sound\n=====================================\n\nCopyright 2016 Ico Doornekamp\n\nThis project emulates the sound of my old faithful IBM Model-M space saver\nbucklespring keyboard while typing on my notebook, mainly for the purpose of\nannoying the hell out of my coworkers.\n\n![Model M](img/model-m.jpg)\n![Buckle](img/buckle.gif)\n\nBucklespring runs as a background process and plays back the sound of each key\npressed and released on your keyboard, just as if you were using an IBM\nModel-M. The sound of each key has carefully been sampled, and is played back\nwhile simulating the proper distance and direction for a realistic 3D sound\npalette of pure nostalgic bliss.\n\nTo temporarily silence bucklespring, for example to enter secrets, press\nScrollLock twice (but be aware that those ScrollLock events _are_ delivered to\nthe application); same to unmute. The keycode for muting can be changed with\nthe `-m` option. Use keycode 0 to disable the mute function.\n\nInstallation\n------------\n\n[![Packaging status](https://repology.org/badge/tiny-repos/bucklespring.svg)](https://repology.org/project/bucklespring/versions)\n\n### Debian\n\nBucklespring is available in the latest Debian and Ubuntu dev-releases, so you can\ninstall with\n\n```\n$ sudo apt-get install bucklespring\n```\n\n### VoidLinux\n\nBucklespring is available in the VoidLinux repositories, so you can install with\n\n```\n$ sudo xbps-install -S bucklespring\n```\n\n### FreeBSD\n\nBucklespring can be installed via package:\n\n```\n$ pkg install bucklespring\n```\n\nor built via port:\n\n```\n$ cd /usr/ports/games/bucklespring\n$ make install clean\n```\n\n### Linux, building from source\n\nTo compile on debian-based linux distributions, first make sure the require\nlibraries and header files are installed, then simply run `make`:\n\n#### Dependencies on Debian\n```\n$ sudo apt-get install libopenal-dev libalure-dev libxtst-dev pkg-config\n```\n\n#### Dependencies on Arch Linux\n```\n$ sudo pacman -S openal alure libxtst\n```\n\n#### Dependencies on Fedora Linux\n```\n$ sudo dnf install gcc openal-soft-devel alure-devel libX11-devel libXtst-devel\n```\n\n#### Building\n```\n$ make\n$ ./buckle\n```\n\nThe default Linux build requires X11 for grabbing events. If you want to use\nBucklespring on the linux console or Wayland display server, you can configure\nbuckle to read events from the raw input devices in /dev/input. This will\nrequire special permissions for buckle to open the devices, though. Build with\n\n```\n$ make libinput=1\n```\n\n#### Using snap on Ubuntu (since 16.04) and other distros\n\n```\n$ sudo snap install bucklespring\n$ bucklespring.buckle\n```\n\nThe snap includes the OpenAL configuration tweaks mentioned in this README.\nSee http://snapcraft.io/ for more info about Snap packages\n\n\n### MacOS\n\nI've heard rumours that bucklespring also runs on MacOS. I've been told that\nthe following should do:\n\n```\n$ brew install alure pkg-config\n$ git clone https://github.com/zevv/bucklespring.git \u0026\u0026 cd bucklespring\n$ sed -i '' 's/-Wall -Werror/-Wall/' Makefile\n$ make\n$ ./buckle\n```\n\nNote that you need superuser privileges to create the event tap on Mac OS X.\nAlso give your terminal Accessibility rights: system preferences -\u003e security -\u003e privacy -\u003e accessibility\n\nIf you want to use buckle while doing normal work, add an \u0026 behind the command.\n```\n$ sudo ./buckle \u0026\n```\n\n### Windows\n\nI think the windows build is currently broken, it seems that switching from\nFreelut to Alure broke windows, I might fix this one day.\n\nI suspect there is something wrong with `alureCreateBufferFromFile()` getting\ncalled from another thread in the key capture callback, but my knowledge of the\nwin32 platform is so poor I'm not even able to run a debugger to see what is\nhappening. Help from an expert is much appreciated.\n\n\nUsage\n-----\n\n````\nusage: ./buckle [options]\n\noptions:\n\n  -d DEVICE use OpenAL audio device DEVICE\n  -f        use a fallback sound for unknown keys\n  -g GAIN   set playback gain [0..100]\n  -m CODE   use CODE as mute key (default 0x46 for scroll lock)\n  -M        start the program muted\n  -h        show help\n  -l        list available openAL audio devices\n  -p PATH   load .wav files from directory PATH\n  -s WIDTH  set stereo width [0..100]\n  -v        increase verbosity / debugging\n````\n\nOpenAL notes\n------------\n\n\nBucklespring uses the OpenAL library for mixing samples and providing a\nrealistic 3D audio playback. This section contains some tips and tricks for\nproperly tuning OpenAL for bucklespring.\n\n* The default OpenAL settings can cause a slight delay in playback. Edit or create\n  the OpenAL configuration file `~/.alsoftrc` and add the following options:\n\n ````\n period_size = 32\n periods = 4\n ````\n\n* If you are using headphones, enabling the head-related-transfer functions in OpenAL\n  for a better 3D sound:\n\n ````\n hrtf = true\n ````\n\n* When starting an OpenAL application, the internal sound card is selected for output,\n  and you might not be able to change the device using pavucontrol. The option to select\n  an alternate device is present, but choosing the device has no effect. To solve this,\n  add the following option to the OpenAL configuration file:\n\n ````\n allow-moves = true\n ````\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzevv%2Fbucklespring","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzevv%2Fbucklespring","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzevv%2Fbucklespring/lists"}