Tools
Collection of custom tools and utilities for system management and automation.
Shell Scripts
DNS Management
show-dns.sh
Display DNS zone configuration from NixOS bind configuration with enhanced formatting.
Usage:
# Show compact summary view (default)
./show-dns.sh
# Show full zone files with syntax highlighting
./show-dns.sh --verbose
# Check zones for specific host
./show-dns.sh athena
# Or via make target
make dns-show
Features:
- Compact summary view with record counts by default
- Color-coded DNS record types (SOA, NS, A, PTR, etc.)
- Column-aligned output for easy scanning
- Groups records by type with spacing
- Shows TTL values when present
- Verbose mode for full zone file output
- Statistics summary at the end
- Useful for verifying DNS configuration before sync
update-gandi-dns.sh
Synchronize DNS records from NixOS configuration to Gandi Live DNS.
Usage:
# Dry run to preview changes (requires GANDIV5_PERSONAL_TOKEN)
./update-gandi-dns.sh --dry-run
# Apply changes to Gandi DNS
./update-gandi-dns.sh
# Or via make targets
make dns-update-gandi-dry-run
make dns-update-gandi
Features:
- Extracts A records from NixOS DNS zone configuration
- Syncs records to Gandi Live DNS API using Bearer token authentication
- Dry-run mode for safe preview of changes
- Skips unchanged records to minimize API calls
- Supports wildcard DNS records
Requirements:
GANDIV5_PERSONAL_TOKENenvironment variable (Gandi Personal Access Token)- On rhea:
source /run/agenix/gandi.envto load token
Python Scripts
Media Management (*arr Stack)
lidarr-update-paths.py
Update artist paths in Lidarr to use a ’library’ subdirectory.
Usage:
# Dry run to preview changes
./lidarr-update-paths.py http://localhost:8686 API_KEY /data/music --dry-run
# Apply changes
./lidarr-update-paths.py http://localhost:8686 API_KEY /data/music
Features:
- Migrates artists from
/music/<artist>to/music/library/<artist> - Dry-run mode for safe preview
- Categorizes artists by current location
- Bulk path updates via Lidarr API
lidarr-rename-albums.py
Rename albums in Lidarr with interactive confirmation.
Usage:
# Dry run to preview renames
./lidarr-rename-albums.py http://localhost:8686 API_KEY --dry-run
# Interactive mode (asks y/n for each artist)
./lidarr-rename-albums.py http://localhost:8686 API_KEY
# Auto-confirm all renames (--yolo or --no-confirm)
./lidarr-rename-albums.py http://localhost:8686 API_KEY --yolo
Features:
- Checks all artists for albums with files needing rename
- Shows preview of up to 10 file renames per artist
- Interactive confirmation before applying changes
- Dry-run and auto-confirm (–yolo/–no-confirm) modes
lidarr-retag-albums.py
Retag albums in Lidarr with interactive confirmation.
Usage:
# Dry run to preview retags
./lidarr-retag-albums.py http://localhost:8686 API_KEY --dry-run
# Interactive mode (asks y/n for each artist)
./lidarr-retag-albums.py http://localhost:8686 API_KEY
# Auto-confirm all retags (--yolo or --no-confirm)
./lidarr-retag-albums.py http://localhost:8686 API_KEY --yolo
Features:
- Checks all artists for albums with files needing retag
- Shows preview of up to 5 file retags per artist with tag changes
- Displays old → new values for each modified tag
- Interactive confirmation before applying changes
- Dry-run and auto-confirm (–yolo/–no-confirm) modes
sonarr-rename-series.py
Rename TV series episodes in Sonarr with interactive confirmation.
Usage:
# Dry run to preview renames
./sonarr-rename-series.py http://localhost:8989 API_KEY --dry-run
# Interactive mode (asks y/n for each series)
./sonarr-rename-series.py http://localhost:8989 API_KEY
# Auto-confirm all renames (--yolo or --no-confirm)
./sonarr-rename-series.py http://localhost:8989 API_KEY --yolo
Features:
- Checks all series for episodes needing rename
- Shows preview of up to 10 episode renames per series
- Interactive confirmation before applying changes
- Dry-run and auto-confirm (–yolo/–no-confirm) modes
radarr-rename-movies.py
Rename movies in Radarr with interactive confirmation.
Usage:
# Dry run to preview renames
./radarr-rename-movies.py http://localhost:7878 API_KEY --dry-run
# Interactive mode (asks y/n for each movie)
./radarr-rename-movies.py http://localhost:7878 API_KEY
# Auto-confirm all renames (--yolo or --no-confirm)
./radarr-rename-movies.py http://localhost:7878 API_KEY --yolo
Features:
- Checks all movies for files needing rename
- Shows preview of all file renames per movie
- Interactive confirmation before applying changes
- Dry-run and auto-confirm (–yolo/–no-confirm) modes
Go Tools
arr
Unified CLI for managing *arr services (Sonarr, Radarr, Lidarr) and Jellyfin with Spotify playlist sync.
See arr/README.md for detailed documentation.
battery-monitor
Battery monitoring daemon and notification system for laptops.
cliphist-cleanup
Clipboard history cleanup utility for cliphist.
gh-pr
GitHub pull request management tool for approving and managing PRs.
Python Tools
music-playlist-dl
Automated downloader for electronic music podcasts from Mixcloud/SoundCloud with M3U playlist generation.
See music-playlist-dl/README.md for detailed documentation.
download-kiwix-zim
Browse and download ZIM files from the Kiwix library using fzf.
Other Tools
org-manager
Org-mode management utilities for programmatic org file manipulation.
Directories
emacs/
Emacs configuration and custom packages.
fedora-vm/
Fedora VM setup and configuration scripts.
Notes
All Python scripts use the uv tool with inline script metadata (PEP 723).
They require only the requests library and will automatically manage
dependencies when run with uv.
All scripts are executable and include built-in help:
./script-name.py --help