# tools
[](https://builds.sr.ht/~mtmn/tools?)
Various tools I have been using throughout the years.
| tool | description |
|---|---|
| [bandeno](bandeno/) | 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 |
## Toolchains
| language | version | pinned by |
|---|---|---|
| Rust | nightly (2026-07-05) | `rust-toolchain.toml` (rustup) |
| Zig | 0.16.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 |
## Building
Install [redo](http://news.dieweltistgarnichtso.net/bin/redo-sh.html)
and the native toolchains; redo 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 <target> # build a specific tool, e.g. just build lazymaster
just run <target> # build and run a tool
```
## Deploying
Builds and copies binaries to `$HOME/.local/bin`:
```sh
just deploy <target>
```
`deploy mpd` installs all five `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, and Go test suites
just clippy # run Clippy over the Cargo workspace
just rustfmt # format the Cargo workspace with rustfmt
```
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
```