QOL scripts and utilities created during a transition from Windows to Linux (CachyOS). These provide wrappers or functionality for various tasks that weren't immediately available out of the box.
A couple of projects that may be of broader interest—either as standalone utilities or as code references/learning vehicles:
| Project | Description |
|---|---|
| audio-source-switcher | Superseded by ototo, its Go port: one binary, no Python. Kept here as it was: a PyQt6 audio manager with priority auto-switching, mic association, Bluetooth device management, JamesDSP integration, global hotkeys, and a custom on-screen volume indicator (OSD). Still a readable example of PipeWire/PulseAudio graph manipulation and KDE Wayland window rules. |
| peripheral-battery-monitor | Compact always-on-top dashboard for Logitech, Keychron, Arctis, and AirPods battery monitoring, plus configurable real-time/cumulative network bandwidth with Tailscale exit-node awareness and AIO liquid-cooler thermals plus RGB control via OpenLinkHub. Demonstrates BLE scanning, upower/solaar integration, /proc/net/dev parsing, and KDE Wayland window rules. |
| game-desktop-creator | PyQt6 GUI for creating start menu launchers for Steam, Epic (via Heroic), and GOG games. Useful for Linux gaming setups. |
| claude-code-global | Global CLAUDE.md config implementing the Ralph Wiggum autonomous coding methodology—spec-driven, iterative development with quality gates and fresh context per iteration. |
| Project | Description |
|---|---|
| alacritty-maximizer | PyQt6 GUI to launch Alacritty windows fully maximized on specific monitors without titlebars. Manages KWin rules automatically. |
| audio-source-switcher | Superseded by ototo. Audio manager with priority auto-switching, mic association, Bluetooth device management, JamesDSP integration, global hotkeys, and a custom on-screen volume indicator (OSD). |
| bluetooth-reset | Resets the Linux Bluetooth stack when BlueZ becomes unresponsive. Fixes stuck daemon issues from AirPods connect/disconnect cycles. |
| browser-router | Routes URLs to different browsers based on domain patterns. Workaround for Chromium lacking PipeWire camera support on Wayland. |
| claude-code-global | Global CLAUDE.md config implementing the Ralph Wiggum autonomous coding methodology. |
| claude-code-setup | Setup script for Claude Code CLI. Installs/updates Node.js and @anthropic-ai/claude-code globally. |
| claude-usage-widget-windows | Cross-platform (macOS + Windows) PySide6 floating widget and menu-bar/tray icon displaying Claude Code usage from the Anthropic OAuth API. Color-coded progress bar, countdown timer, model breakdowns, selectable font size; macOS .app reads credentials from the login Keychain. Also a Qt-free terminal mode (--tui full-width dashboard / --line one-shot) for tmux/herd helper panes, with a cooperative cross-process cache so many panes share ~1 API request per interval. Autodetects every configured Claude login and reports one line per account, labeled by profile and plan type. |
| display-mirror-toggle | Toggles a KDE Plasma 6 / Wayland display mirror on/off, disabling/enabling the source output in the same atomic kscreen-doctor call. Designed for the FUERAN-dummy + Philips-OLED pixel-clean workaround. |
| docker-setup | Sets up Docker for the current user. Installs Docker if missing, enables the service, and adds user to the docker group. |
| fake-screensaver | PyQt-based fake screensaver that keeps the mouse cursor visible, plus a simple HTML blank page fallback. |
| foghorn-leghorn | Always-on-top countdown timer with system tray integration, desktop notifications, and attention-grabbing alarm sounds (foghorn, Wilhelm scream, air horn). |
| game-desktop-creator | PyQt6 GUI for creating start menu launchers for Steam, Epic, and GOG games. Discovers games from Steam and Heroic Games Launcher. |
| kvm-setup | Setup scripts for KVM (QEMU/libvirt) on CachyOS. Configures libvirt group and permissions. |
| megabonker | PyQt6 save editor for the Steam game Megabonk. Decrypts the AES-256-CBC save files into an editable JSON tree with typed edits, backups and atomic writes, and can re-derive the game's baked-in encryption key from its own IL2CPP metadata when an update rotates it. |
| misc | General utilities for NTFS mount fixing and fstab generation during Windows-to-Linux migration. |
| peripheral-battery-monitor | Compact always-on-top dashboard for Logitech, Keychron, Arctis, and AirPods battery monitoring, plus configurable real-time/cumulative network bandwidth with Tailscale exit-node awareness and AIO liquid-cooler thermals plus RGB control via OpenLinkHub. |
| pinball-fx | Tiny gamescope wrapper for Heroic-launched Pinball FX. Heroic handles Wine/Proton + Epic auth + DLC; this adds gamescope, HDR, and KWin pinning to the portrait monitor. Configured in Heroic's per-game "Wrapper Command" setting. |
| plasmashell-restart | Restarts or refreshes the KDE Plasma 6 shell via systemd or D-Bus. |
| qbittorrent-vpn-wrapper | Secure wrapper for qBittorrent with VPN binding, IP geolocation check, idle auto-shutdown, and status dashboard. |
| set-rgb | Controls RGB lighting on hardware devices via OpenRGB, liquidctl, and ckb-next. |
| slack-presence-toggle | Tray utility that auto-toggles Slack presence and custom status based on Slack window focus on KDE Plasma 6 / Wayland. Forces away after a configurable grace period when focus leaves Slack; restores active when focus returns. |
| ssh-agent-setup | Automatic SSH key loading on Plasma desktop login using KWallet for secure passphrase storage. |
| the-great-cachyos-move | Migration toolkit for moving CachyOS (Btrfs) installations between drives using btrfs send/receive. |
| ufw-config | UFW/iptables configuration documentation and backups for a gateway/router setup with Pi-hole and VPN forwarding. |
| vscode-gather | Gathers all VS Code windows onto a single monitor and maximizes them. Cross-platform: KWin scripting via D-Bus on KDE Plasma 6 / Wayland (Linux), AppleScript via osascript on macOS (requires Accessibility access). |
| vscode-launcher | PyQt6 tray-resident daemon to bulk-launch VSCode workspaces. Reads the list live from VSCode's own Recent history, auto-maximizes windows on the primary monitor via vscode-gather, attaches each workspace's integrated terminal to its configured tmux session via a zsh hook, and ships a global Alt-Tab-style quick-launcher popup behind a configurable hotkey. Primary platform is Linux/KDE; macOS is supported as a roaming platform (menu bar + CLI). |
| vpn-toggle | VPN manager with event-driven health monitoring, auto-reconnect, metrics dashboard, and persistent PyQt6 GUI for NetworkManager + OpenVPN3. Ships a systemd user unit with auto-restart on crash. |
| whoapipe | GUI launcher manager for waypipe SSH remote Wayland applications. Profile management, remote app browser with icon grid, failure detection with diagnostic hints, and dark theme support. |
Refer to individual scripts for specific usage instructions. Most Python scripts use argparse and support -h/--help.