# tools Various tools I have been using throughout the years. | tool | description | | ----------------------------- | ----------------------------------------------------------------- | | [bandano](bandano/) | Bandcamp RSS feed proxy | | [diggah](diggah/) | find files modified within a time range, locally or over SSH | | [dam](dam/) | line-file syncer with rsync and coloured diff | | [hue](hue/) | Ruby library and CLI for Philips Hue | | [lastfm_rs](lastfm_rs/) | Last.fm scrobble exporter to CSV | | [lazymaster](lazymaster/) | 2-pass audio loudness normalization via ffmpeg | | [mpd](mpd/) | MPD utility tools | | [nts](nts/) | NTS show tracklist fetcher | | [pmn](pmn/) | password selection utility for pass (Wayland, X11, macOS) | | [pracomer](pracomer/) | Pomodoro timer | | [shuffle](shuffle/) | random album picker for MPD | | [speediness](speediness/) | network speed test | | [tempfox](tempfox/) | Firefox user.js preference overrides | | [wrd](wrd/) | full-text search and reader for an offline web archive | | [plants](plants/) | bluetooth battery monitoring for linux | | [reflink-snap](reflink-snap/) | reflink (copy-on-write) snapshot manager for XFS | | [rem2org](rem2org/) | Remind to org-agenda exporter | | [kundali](kundali/) | scans track metadata and builds a sequence around an anchor track | | [backup](backup/) | backup helper for git, tarsnap, plakar and rclone | | [tpswitch](tpswitch/) | toggle the touchpad by holding an evdev grab | ## Toolchains | language | version | pinned by | | -------- | ------- | ---------------------------------------------------------------------- | | Rust | nightly | `rust-toolchain.toml` (rustup) | | Zig | 0.17.0 | `build.zig.zon` (`minimum_zig_version`) | | Python | 3.14 | system | | Go | 1.26 | `go.mod` | | Ruby | >= 3.0 | `hue.gemspec` (`required_ruby_version`). reflink-snap uses stdlib only | | Janet | 1.41.2 | system | ## Building Install [knit](https://github.com/zyedidia/knit) and the native toolchains. Knit orchestrates `cargo`, `zig build`, `go build`, `cc`, and a shared Python virtualenv. All common tasks are available via `just`: ```sh just all # build every tool into bin/ just build # build a specific tool, e.g. just build lazymaster just run # build and run a tool ``` ## Deploying Knit builds and copies binaries to `$HOME/.local/bin`: ```sh knit deploy/ knit deploy/all # build and install every tool ``` The equivalent convenience wrapper is `just deploy `. `knit deploy/mpd` (or `just deploy mpd`) installs the configured `mpd_*` binaries. Deployed Python tools (diggah, lazymaster, nts, shuffle) are thin shims that run out of this repository's `.venv`, and deployed Ruby tools (hue, reflink-snap) run straight from the checkout. Both need the checkout to stay in place. ## Development ```sh just test # run the Rust, Zig, Go, and MPD test suites just clippy # run Clippy over the Cargo workspace just rustfmt # format the Cargo workspace with rustfmt just clang-tidy # run clang-tidy over the C sources just lint # run Clippy and clang-tidy ``` rust-analyzer works out of the box against the Cargo workspace. ## Other ```sh just cargo-lockfile # update Cargo.lock just pip-update # update requirements.txt (Python lockfile) just clean # remove build artifacts and caches ```