Commit Briefs

e7697784f3 mtmn

rust: pin toolchains to nightly (master)


40eb679a7c mtmn

Merge branch 'redo'


613596b6a4 mtmn

bump rust deps


be0cdd0b55 mtmn

remove wlr-river-title and wlr-sway-title


14501dcb6d mtmn

bazel --> redo


55821ddce8 mtmn

pmn: exact fzf matching


1cedf543a9 mtmn

remove wlr-river-title and wlr-sway-title


4fc826c2d4 mtmn

add wlr-sway-title


c9f58cc425 mtmn

pmn: exact fzf matching


f625c3f4b4 mtmn

docs: remove sudo from bootstrap cmd


Branches

Tags

This repository contains no tags

Tree

.build.ymlcommits | blame
.cargo/
.gitignorecommits | blame
.pre-commit-config.yamlcommits | blame
Cargo.lockcommits | blame
Cargo.tomlcommits | blame
LICENSEcommits | blame
README.mdcommits | blame
all.docommits | blame
bandeno/
bin/
dam/
diggah/
hue/
justfilecommits | blame
lastfm_rs/
lazymaster/
mpd/
nts/
plants/
pmn/
pracomer/
reflink-snap/
requirements.incommits | blame
requirements.txtcommits | blame
rust-toolchain.tomlcommits | blame
rustfmt.tomlcommits | blame
shuffle/
speediness/
tempfox/
wrd/

README.md

# tools
[![builds.sr.ht status](https://builds.sr.ht/~mtmn/tools.svg)](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 | `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
```