bucklespring 2.0.0-1
Package Information
| Description | Nostalgia bucklespring keyboard sound - libinput flavour Bucklespring emulates the sound of an old IBM Model-M space saver bucklespring keyboard while typing. It runs as a background process and plays back the sound of each key pressed and released on the keyboard, just as if using an IBM Model-M. The sound of each key has carefully been sampled, and is played back while simulating the proper distance and direction for a realistic 3D sound palette of pure nostalgic bliss. This flavour reads the key events straight from the raw input devices in /dev/input through libinput instead of from X11, so it also works under a Wayland compositor and on the console. Those devices are not readable for ordinary users out of the box; a debconf question, asked at medium priority and answered no by default, offers to grant the access to the user at the local seat, see README.Debian. It is registered as an alternative for /usr/games/buckle. |
|---|---|
| Maintainer | Barak A. Pearlmutter <bap@debian.org> |
| Changed By | Barak A. Pearlmutter <bap@debian.org> |
| Distribution | unstable |
| Architecture | any all |
| VCS | git: https://salsa.debian.org/debian/bucklespring.git (browse) |
| Closes | #1150643, #1152011 |
| Popcon Installs | 104 |
| Binary NEW | Yes (new binary packages of a source already in sid) |
| Tracker | https://tracker.debian.org/pkg/bucklespring |
| Uploaded | 2 hours ago |
New Package Report
.changes
| Version | 2.0.0-1 |
|---|---|
| Changed-By | Barak A. Pearlmutter <bap@debian.org> |
| Architecture | source all amd64 |
| Distribution | unstable |
| Date | Sun, 11 Oct 2026 17:09:08 +0100 |
| Source | bucklespring |
Changelog
bucklespring (2.0.0-1) unstable; urgency=medium
.
* New upstream version 2.0.0
- many bug fixes, including crashes
- many improvements
- upstream ChangeLog
* Build-depend on libsndfile1-dev rather than libalure-dev
* Split clip sets out of bucklespring-data, which would otherwise have
grown from 3 MB to 18. (Model M recordings are in bucklespring-data.
This is the default, so it's a hard dependency. The others borrow
from it for keys they don't have clips for. Other keyboard sound sets
are in bucklespring-data-vain, bucklespring-data-sequential and
bucklespring-data-synth.)
* Suggest gnome-shell-extension-appindicator, for a tray icon under
GNOME. See also README.Debian.
* Drop debian/patches/0001-version.patch, unnecessary.
* debian/copyright, updated for new keyboard sound sets.
* Bump to debhelper compat level 14.
* Updated German debconf translation by Helge Kreutzmann
(closes: #1150643)
* Spanish debconf translation by Fierro Viejo (closes: #1152011).dsc
| Package-List | bucklespring deb oldlibs optional arch=all bucklespring-data deb games optional arch=all bucklespring-data-sequential deb games optional arch=all bucklespring-data-synth deb games optional arch=all bucklespring-data-vain deb games optional arch=all bucklespring-libinput deb games optional arch=linux-any profile=!pkg.bucklespring.nolibinput profile:v1=!pkg.bucklespring.nolibinput bucklespring-x11 deb games optional arch=any profile=!pkg.bucklespring.nox11 profile:v1=!pkg.bucklespring.nox11 |
|---|---|
| Section | oldlibs |
| Priority | optional |
| Component | main |
debian/copyright
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: bucklespring
Source: https://github.com/zevv/bucklespring
Files: *
Copyright: 2016-2025 Ico Doornekamp <ico@zevv.nl>
License: GPL-2+
Files: scan-mac.c
Copyright: 2016-2025 Ico Doornekamp <ico@zevv.nl>
License: GPL-2+
Comment: The table mapping Mac virtual keycodes to set-1 scancodes is taken
from VirtualBox,
https://www.virtualbox.org/svn/vbox/trunk/src/VBox/Frontends/VirtualBox/src/platform/darwin/DarwinKeyboard.cpp
and the event tap callback is adapted from
https://danielbeard.wordpress.com/2010/10/29/listening-for-global-keypresses-in-osx/
.
This file is only compiled on macOS; it is not built by, or shipped in,
any of the Debian binary packages.
Files: configure.ac
Makefile.am
tray.c
wl-repeat.c
tools/make-clips.py
systemd/*
udev/*
Copyright: 2026 Barak A. Pearlmutter <bap@debian.org>
License: GPL-2+
Comment: The build system, the system tray icon, the Wayland repeat rate
query, the systemd user units and the uaccess udev rule began as Debian
packaging and have since moved upstream.
Files: man/*
Copyright: 2016-2017 Dominik George <nik@naturalnet.de>
2026 Barak A. Pearlmutter <bap@debian.org>
License: GPL-2+
Comment: The pages for the executables are generated from their own --help
and --version output by help2man(1); the prose around the option list, in
the matching .h2m include files, was first written for the Debian package
by Dominik George.
Files: clips/bucklespring/*
Copyright: 2016-2025 Ico Doornekamp <ico@zevv.nl>
License: GPL-2+
Comment: The IBM Model M recordings the program began with, transcoded from
wav to FLAC without loss.
Files: clips/vain-qwertz/*
Copyright: 2017 vain <vain@uninformativ.de>
License: GPL-2+
Comment: A full QWERTZ layout with two to four takes of every key,
contributed to the upstream project through its pull requests and carried
on its samplesets branch; transcoded from wav to FLAC without loss.
Files: clips/sequential/*
Copyright: 2025 SequentialDesign <https://github.com/SequentialDesign>
License: GPL-2+
Comment: Recorded on a fork of this project and offered through its pull
request 135, under no terms of their own, so taken under the project's;
transcoded from wav to FLAC without loss.
Files: clips/beeper/*
Copyright: 2020 mejs <https://github.com/mejs>
License: GPL-2+
Comment: The single beep of the beepykeyboard fork, for a Model M with its
PC speaker wired up. Recorded on a fork of this project under no terms of
its own, so taken under the project's; transcoded without loss.
Files: clips/drums/*
clips/piano/*
clips/slapstick/*
Copyright: 2026 Barak A. Pearlmutter <bap@debian.org>
License: GPL-2+
Comment: Not recordings of anything: these are synthesised by
tools/make-clips.py, which is in the source and can remake them.
Files: debian/*
Copyright: 2016-2017 Dominik George <nik@naturalnet.de>
2025 Chris Hofstaedtler <zeha@debian.org>,
Andreas Tille <tille@debian.org>
2026 Barak A. Pearlmutter <bap@debian.org>
License: GPL-2+
License: GPL-2+
This package is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
.
This package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>
.
On Debian systems, the complete text of the GNU General
Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".
DFSG Assistant LLM REVIEW 0 blocker, 1 important, 3 minor
This is an LLM based review using a Debian Inference based workflow. It was not written by a member of the DFSG team and has not been checked by one. It is not a decision on the package: it may be wrong, and it may have missed things.
Reviewed 1 hour ago.
Report
DFSG NEW review for bucklespring version 2.0.0-1
Summary
- Licensing is DFSG-compliant and
debian/copyrightis accurate: No - Packaging is of good quality: Yes
- Issues: 0 blocker, 1 important, 3 minor
- debian/watch: version 5
- debian/copyright: machine-readable
- Scan before the review: nothing found
Licensing
The tree is DFSG-free: GPL-2+ throughout, with the GPL-2 text in LICENSE and the pointer to /usr/share/common-licenses/GPL-2 in debian/copyright, sources for every generated artefact (man pages, systemd units, udev rule, synthesised clips) present in the tree, and no non-free, field-of-use or no-modification terms anywhere. debian/copyright is DEP-5 with a stanza per contributor and clip set, but two stanzas do not name every holder the covered files themselves name: the generated man pages carry Ico Doornekamp's copyright and debian/po carries four translators', and both are overridden by stanzas that leave them out. That makes the file incomplete rather than wrong about any licence.
Packaging
Good quality: debhelper compat 14 with hardening and two build profiles that are gated consistently in control and rules, working and idempotent alternatives/udev/systemd-user-unit/debconf integration, correct Multi-Arch and dependency fields, a current Standards-Version and a changelog that closes its bugs. The one defect found is factual: the bucklespring-data-synth description calls beeper one of the generated clip sets and says make-clips.py makes it, though it was recorded by mejs.
Issues
1. [important] [licensing] debian/copyright's man/* stanza omits Ico Doornekamp, whose copyright the two .1 pages carry
- Files:
debian/copyright:34-36,man/buckle-x11.1:176-177,man/buckle-libinput.1:204-205 - Basis: checked, in the package or with a reference tool
- Evidence: debian/copyright:
Files: man/*/Copyright: 2016-2017 Dominik George <nik@naturalnet.de>/2026 Barak A. Pearlmutter <bap@debian.org>; the pages it matches contain.SH COPYRIGHT/Copyright \(co 2016\-2025 Ico Doornekampand.SH AUTHOR/Written by Ico Doornekamp. - Problem: DEP-5 stanzas replace earlier ones for the files they match (copyright-format 6.9), so this stanza, not the
Files: *stanza that names Ico Doornekamp, is the one that describes man/*. The two .1 pages are generated from the program's own--helpand--versionoutput, so most of their text and the copyright line in them are Ico's; the Copyright field therefore does not describe the copyright of these files. - Fix: Add
2016-2025 Ico Doornekamp <ico@zevv.nl>to the Copyright field of theFiles: man/*stanza.
2. [minor] [licensing] debian/copyright's debian/* stanza names no debconf translator, whose copyright is stated in debian/po
- Files:
debian/copyright:78-80,debian/po/ca.po:2,debian/po/de.po:3,debian/po/es.po:2,8,debian/po/pt.po:5 - Basis: checked, in the package or with a reference tool
- Evidence: debian/po/ca.po:
# Copyright © 2026 poc senderi <pocsenderi@protonmail.com>; de.po:# Helge Kreutzmann <debian@helgefjell.de>, 2026.; es.po:# Copyright (C) 2026 Software in the Public Interest, Inc.andFierro Viejo <fierroviejo@fierroviejo.com>, 2026.; pt.po:# SPDX-FileCopyrightText: 2026 Américo Monteiro <a_monteiro@gmx.com>. TheFiles: debian/*stanza lists onlyDominik George,Chris Hofstaedtler,Andreas TilleandBarak A. Pearlmutter, and its four po files' licence is settled by# This file is distributed under the same license as the bucklespring package. - Problem: The later
Files: debian/*stanza replacesFiles: *for debian/po, so the copyright holders stated in the translation files appear nowhere in debian/copyright. The licence is right (GPL-2+, same as the package), but the copyright record for those four files is incomplete; aFiles: debian/po/*stanza is the usual Debian form. - Fix: Add the translators (and SPI for es.po) to the
debian/*Copyright field, or add a separateFiles: debian/po/*stanza listing them.
3. [minor] [packaging] bucklespring-data-synth description calls the recorded beeper set one of the generated ones
- Files:
debian/control:139-147,tools/make-clips.py:169-172,debian/copyright:63-64 - Basis: checked, in the package or with a reference tool
- Evidence: debian/control:
This package contains the clip sets which are generated rather than recorded: ... and "beeper", a single beep ...andThey are made by tools/make-clips.py in the source, so any of them can be remade or altered.; tools/make-clips.py:SETS = { "piano": piano, "drums": drums, "slapstick": slapstick, }; debian/copyright:Files: clips/beeper/*/Copyright: 2020 mejs <https://github.com/mejs>withThe single beep ... Recorded on a fork of this project. - Problem: beeper is a recording by mejs and cannot be regenerated or altered with tools/make-clips.py, which offers only piano, drums and slapstick. The description thus contradicts debian/copyright and misleads users about what the package contains and what the script can remake.
- Fix: Reword the stanza: describe piano, drums and slapstick as the generated sets made by tools/make-clips.py, and name beeper separately as a recording contributed on a fork (or move it to another data package).
4. [minor] [packaging] uscan finds only upstream versions older than the packaged one
- Files:
debian/watch - Basis: found by the review tooling's own checks
- Evidence: upstream
1.5.1, packaged2.0.0 - Problem: The newest version uscan finds with
debian/watchis older than the version indebian/changelog, so the watch file does not find the packaged release: it may look in the wrong place, or the versions may need mangling to compare. - Fix: Check where
debian/watchlooks and how it mangles versions.
Verified
- Read every file in debian/ (control, rules, changelog, copyright, all six .install files, both .alternatives, .dirs, all .lintian-overrides, postinst, postrm, config, templates, the po headers, both README.Debian, source/format, upstream/metadata); there is no debian/patches or debian/tests, and source/format is
3.0 (quilt). - debian/copyright is DEP-5 with the canonical Format URL, nine Files stanzas and one stand-alone
GPL-2+License paragraph that refers to /usr/share/common-licenses/GPL-2; every short name used matches the licence text (README.md, main.c:475-477 and tray.c:216 all say GPL v2 or later, soGPL-2+is right). - Inventoried all 32 non-clip upstream files and the 7 clip directories; apart from the two stanza omissions reported above, every file is matched by a stanza that states its holder and licence. LICENSE is the verbatim GPL-2 text, whose only notice (FSF) is the licence itself.
- clips/bucklespring, clips/vain-qwertz, clips/sequential and clips/beeper are recordings with their own per-set stanza and holder; clips/drums, clips/piano and clips/slapstick are generated by tools/make-clips.py, which is shipped and can remake them, so their preferred form for modification is present (README.md and debian/control agree).
- man/.1 are generated by help2man from the programs' --help/--version; the .h2m include files and the
update-manrule (Makefile.am:124-146) are in the tree, and man/.service.8 document the units. systemd/.service and udev/.rules are generated at build time from the shipped .in files. - The images img/buckle.gif, img/icon.png, img/icon128.ico and img/model-m.jpg are documentation artwork listed in EXTRA_DIST (Makefile.am:147-148), installed by no binary package, and covered by
Files: *(Ico Doornekamp); they were recorded by name and not opened. mac/lib/pkgconfig/openal.pc is a 109-byte pkg-config stub for macOS builds, also only in EXTRA_DIST. - scan-mac.c is macOS-only and built by no Debian binary; the copyright file's Comment discloses its two sources (VirtualBox's DarwinKeyboard.cpp and a blog post). No other file contains a third-party licence statement; playback uses libsndfile/OpenAL and no library is embedded.
- The prescan's author check found no holder unnamed in debian/copyright; I confirmed Ico Doornekamp, Barak A. Pearlmutter, Dominik George, vain, SequentialDesign and mejs are all named there. The stanza-level omissions reported above were not visible to that check.
- The orig tarball is a git snapshot (barak-bucklespring-c94ea63) with no configure or Makefile.in; at compat 14 dh runs dh_autoreconf automatically (SequencerUtil.pm:392-393) and debhelper Depends dh-autoreconf, which Depends autoconf, automake, autopoint and libtool, so autoconf/automake need not be in Build-Depends and a clean unstable chroot has them. pkgconf supplies pkg.m4.
- Build profiles are consistent between control and rules;
--bindir=/usr/gamesand the default unit/udev directories match the .install paths; the alternatives Dependents lines are 3-tuples as dh_installalternatives(1) requires;dh_installsystemduser --no-enableis a valid option; Standards-Version 4.7.4 matches the reviewing Policy's 4.7.4.1. - Maintainer scripts are idempotent: the debconf question defaults to false at medium priority, postinst re-creates or removes /etc/bucklespring/uaccess from the answer and re-triggers udev only where /run/udev and udevadm exist, postrm cleans the flag and directory again. Both flavours carry Breaks+Replaces against the old bucklespring; all arch:all data packages are Multi-Arch: foreign. gnome-shell-extension-appindicator named in Suggests exists (66-1).
- Every pointer of
debian/copyrightto /usr/share/common-licenses names a file that is there (GPL-2).
Not confirmed
- The orig tarball extracts to
barak-bucklespring-c94ea63/while Homepage and debian/upstream/metadata name https://github.com/zevv/bucklespring; whether 2.0.0 exists there and whether this snapshot matches it could not be checked without network access. - The binary contents of img/* and of the several hundred clips/**/*.flac were not inspected; that the clips are lossless FLAC is stated only by README.md and debian/copyright.
- scan-mac.c's copied keycode table and event-tap callback: their provenance and licensing (VirtualBox is GPL-2; the linked blog post states no licence) rest on the maintainer's Comment; I did not verify either upstream text or whether the table is copyrightable.
debian/watchlooks atgithub.com/zevv/@package@, but theSourcefield ofdebian/copyrightnamesgithub.com/zevv/bucklespring. Whether these are the same upstream was not checked.debian/watchlooks atgithub.com/zevv/@package@, butRepositoryindebian/upstream/metadatanamesgithub.com/zevv/bucklespring. Whether these are the same upstream was not checked.
Proposed changes
None.
Uploader's response to the LLM review
Those are really minor issues, please go ahead and accept; I'll fix them for 2.0.1-1 which is otherwise ready to upload as soon as this goes through.
— Barak A. Pearlmutter (bap), 0 hours ago
Other Reviews of this Package
| Version | Hash | Allocated | Completed | Reviewer | Status | Details |
|---|---|---|---|---|---|---|
| 1.5.1-2 | 0be7ccdb… | 2026-09-04 18:51 | 2026-09-04 20:38 | babelouest | accepted | VIEW |