Personal collection of shell scripts, Python tools, and configuration files accumulated over the years — everything from provisioning a fresh Ubuntu workstation to scraping language-learning resources off the web.
This repo doubles as a Claude Code plugin marketplace. It publishes the tool-permissions PreToolUse hook as the tool-permissions plugin:
claude plugin marketplace add lena-miyamoto/UtilityScripts
claude plugin install tool-permissions@lena-miyamotoThe hook enforces a regex-based allow/ask/deny policy (schema and a full example in agent-templates/claude-global/permissions.json) on every tool call. It requires Python 3.13+ and uv; on first use uv run provisions the virtualenv and downloads rable automatically. The marketplace manifest lives in .claude-plugin/marketplace.json.
The statusline plugin ships the custom Claude Code statusline as stdlib-only Python run through uv — the main bottom bar (model, context bar, git branch/worktree, vim mode, rate limits, cost) plus a per-row subagentStatusLine. Both bars are wired into ~/.claude/settings.json by the bundled install-statusline skill (a plugin cannot enable the main statusLine declaratively).
claude plugin install statusline@lena-miyamotoubuntu-setup.sh is the centerpiece. It can take a fresh Ubuntu 24.04 or 26.04 install from stock desktop to a fully configured development and gaming environment in one shot. Two main modes:
--basic-setup— the essentials (CLI tools, fonts, Flatpak, snap packages, dev toolchains)--lenas-setup— everything in--basic-setupplus Godot, Java/Gradle, and other personal preferences
What both modes set up: Flatpak + Flatseal, GNOME Shell preferences, essential CLI tools (curl, jq, rhash, ffmpeg, imagemagick, fish, yt-dlp, eza, bat, difftastic, fd, ripgrep, fzf), system utilities (File Roller, GParted), multimedia codecs, MS Core + proprietary fonts, snap apps (Discord, Spotify, Thunderbird), Firefox ESR (apt, replaces the snap build), Flatpak apps (VLC, Cine, GIMP, Inkscape), Tor Browser, Steam + ProtonUp-Qt, dev toolchains (Python via uv, Rust via rustup, Node via fnm, VS Code), the UFW firewall, and the recommended graphics drivers. All downloads are checksum-verified.
--lenas-setup additionally sets up: KeePassXC, Brave/Edge/Signal, Veracrypt, Podman, gaming launchers and emulators (Heroic, Azahar, Mupen64Plus), custom fonts, Blender + Element, Java/Gradle, and Godot.
Standalone flags — mutually exclusive with the two modes — cover the rest: --install-local-ai (local LLM stack), --install-godot, --install-openssh-server, plus the --configure-* and --reconfigure-* maintenance flags. See Quick start for the full list.
| Script | What it does |
|---|---|
ubuntu-setup.sh |
Full Ubuntu workstation provisioning |
manjaro-setup |
Older Manjaro Linux setup script (pacman-based, less comprehensive) |
install-ollama.sh |
Standalone Ollama + OpenCode + Claude Code installer configured for local Qwen 2.5 Coder |
clean-home.sh |
Nuclear home directory cleanup — prompts for confirmation, preserves critical dotfiles and XDG dirs |
untrace.sh |
Linux: clear file-access traces (thumbnail cache, recently-used.xbel) |
untrace.bat |
Windows: clear Explorer file-access history |
vscode-file-history.mjs |
Restore files from VS Code's local history into a restored/ directory |
Python scripts for building annotated vocabulary lists across Spanish, English, and German.
| Script | What it does |
|---|---|
wordanalyzer.py |
Original monolithic analyzer — CSV parsing, dictionary lookups, IPA transcription, verb conjugation, duplicate/new-word detection |
wordanalyzer/ |
Refactored modular version — arguments.py, translators.py, utils.py, wordanalyzer.py, plus large Spanish/English word lists |
vocabdiff.py |
Diff two CSV vocab lists — output rows new to the second file |
latincheck.py |
Validate modified Latin vocabulary CSV against an original |
russ.py |
Parse custom Russian vocabulary text format into CSV |
csv-converter.py |
Convert two-line-per-entry CSV to proper semicolon-separated format |
csvreader.py |
Minimal educational CSV parser class |
omitlines.py |
Print every Nth line from a text file |
Dictionaries scraped: SpanishDict, DixOsola (ES↔DE, ES↔EN), dict.cc, German/English Wiktionary, Oxford Dictionary.
Python scripts for parsing bank account CSV exports (easybank, Sparkasse) and grouping expenses into categories.
| Script | What it does |
|---|---|
finance-tools/parse-kontoauszug.py |
Parse easybank (Girokonto, Kreditkarte) and Sparkasse CSV exports, categorize expenses by regex, print monthly totals/averages and list unrecognized merchants |
finance-tools/categories.py |
Category definitions — regex patterns mapped to categories (groceries, restaurants, medical, …) plus the ordered category list and fallback |
| Script | What it does |
|---|---|
wikicommons-dl.py |
Download Japanese character stroke-order images from Wikimedia Commons (hiragana, katakana, kanji) |
wiki-parsers/wikipedia-maps.py |
Download SVG/PNG maps of Japanese prefectures from Wikipedia |
srttools |
Manipulate SRT subtitle files — shift times forward/back, stretch end times |
webp2gif |
Convert animated WebP to GIF |
webp2png |
Convert WebP to PNG (or animated APNG for multi-frame images) |
fetch-instagram-post.snippet.js |
Browser snippet — auto-advance Instagram slideshows, log image URLs |
# Clone and run
git clone https://github.com/lena-miyamoto/UtilityScripts.git
cd UtilityScripts
# Generic: core tooling and apps
./ubuntu-setup.sh --basic-setup
# Full: adds Godot, Java/Gradle, and personal tweaks
./ubuntu-setup.sh --lenas-setupThe script is designed to be idempotent and safe to re-run.
| Flag | Effect |
|---|---|
-h, --help |
Print help text and exit |
--basic-setup |
Full install — essentials only |
--lenas-setup |
Full install — everything in --basic-setup plus Godot, Java/Gradle, and Lena's extras |
--install-local-ai |
Local LLM stack (Node.js + Claude Code) |
--install-godot |
Godot 4.5 via Friendly Godot Version Manager (fgvm) |
--install-openssh-server |
OpenSSH Server container for local testing (requires Podman 5) |
--configure-gsettings |
Apply the GNOME settings |
--configure-lenas-gsettings |
Same, plus Lena's private extra settings |
--reconfigure-git |
Reset ~/.gitconfig and rebuild it from scratch |
--reconfigure-lenas-git |
Same, plus Lena's private extra settings |
--reconfigure-vscode |
Reset the VS Code config and rebuild it from scratch |
--reconfigure-lenas-vscode |
Same, plus Lena's private extra settings |
--basic-setup and --lenas-setup are mutually exclusive. Each standalone --install-* flag is mutually exclusive with both modes, but combinable with the --configure-* / --reconfigure-* flags. --install-openssh-server also requires an existing ~/.ssh/id_ed25519.pub.
WTFPL — Do What The Fuck You Want To Public License v3.