ADR-014 — Mac Audit: Current State and Cleanup Opportunities
Date: 2026-04-16 Context: Full scan of installed apps, brew packages, shell config, SSH, LaunchAgents, and disk usage. Goal: identify what's dead weight, what's misconfigured, and what others do better.
1. Brew: Deprecated and Orphaned Packages
Deprecated (brew doctor flagged these)
| Package | Problem | Action |
|---|---|---|
[email protected] |
Deprecated, EOL. Nothing depends on it. | brew uninstall [email protected] |
icu4c@76 |
Deprecated. Only node depends on it. |
Will go away when node upgrades |
icu4c@77 |
Deprecated. boost, mkvtoolnix, qt depend on it. |
Will resolve on next brew upgrade |
aegisub (cask) |
Deprecated cask, project is dead. | Uninstall if not actively using |
Orphaned leaf packages (manually installed, questionable)
| Package | What it is | Verdict |
|---|---|---|
automake |
Build tool. Were you compiling something? | Probably a one-time dep. Safe to remove unless you build C/C++ |
coreutils |
GNU coreutils (gls, gdate, etc.) | Keep — useful for scripts that need GNU behavior |
kompose |
Converts docker-compose to Kubernetes manifests | Remove unless you're planning k8s migration |
libksba |
Crypto library. Nothing depends on it. | brew uninstall libksba |
librsvg |
SVG rendering library. Leaf with no dependents. | Probably pulled in by something you uninstalled. Safe to remove |
libtool |
Build tool | Same as automake — one-time build dep |
media-info |
Media file metadata CLI | Keep if you use it for media management |
mkvtoolnix |
MKV video container tools | Keep if you remux video |
[email protected] |
See above | Remove |
pkgconf |
pkg-config replacement. Nothing depends on it. | brew uninstall pkgconf |
pwgen |
Password generator | Keep — useful for homelab |
sshpass |
Non-interactive SSH password auth | Keep — Ansible uses it for password-based SSH |
testdisk |
Data recovery tool | Keep — useful for emergencies, small footprint |
wget |
HTTP downloader | Keep (or replace with curl which is built-in, but wget syntax is convenient) |
zlib |
Compression library. Nothing depends on it. | brew uninstall zlib |
Quick cleanup command
brew uninstall [email protected] libksba pkgconf zlib
# Then review:
brew autoremove # removes orphaned dependencies
brew cleanup # removes old versions and cache
44 packages are outdated
Run brew upgrade — you have 44 outdated packages including ansible, git, node, terraform, and netbird. This is a lot of drift.
2. Applications: 87 Apps, Only 13 Managed by Brew
You have 87 apps in /Applications/ but only 13 brew casks. That means 74 apps were installed manually (drag-to-Applications, Mac App Store, or direct download). This is the biggest gap in reproducibility.
Apps that should be brew casks (easy wins)
These are in /Applications/ but not managed by brew. Adding them to brew makes them reproducible:
| App | Brew cask name | Notes |
|---|---|---|
| Arc | arc |
Browser |
| Bitwarden | bitwarden |
Password manager |
| BetterDisplay | betterdisplay |
Display management |
| Betterbird | betterbird |
Thunderbird fork |
| Discord | Already a cask | OK |
| Dropbox | dropbox |
Cloud sync |
| Firefox | firefox |
Browser |
| Google Chrome | google-chrome |
Browser |
| IINA | iina |
Media player |
| Jellyfin | jellyfin-media-player |
Media client |
| Joplin | joplin |
Note-taking |
| LibreOffice | libreoffice |
Office suite |
| Obsidian | obsidian |
Notes |
| Proton Mail | proton-mail |
|
| Proton Mail Bridge | proton-mail-bridge |
IMAP bridge |
| qBittorrent | qbittorrent |
Torrent client |
| RustDesk | rustdesk |
Remote desktop |
| Spark | spark |
Email client |
| Steam | steam |
Gaming |
| Termius | termius |
SSH client |
| Thunderbird | thunderbird |
|
whatsapp |
Messaging | |
| WireGuard | wireguard-tools |
Already a formula, cask also available |
| balenaEtcher | balenaetcher |
USB flashing |
| Spacedrive | spacedrive |
File manager |
Apps that look abandoned or redundant
| App | Concern |
|---|---|
| Criptext | Email service shut down in 2023. Dead app. Delete. |
| Omnivore | Read-it-later service shut down Jan 2025 (acquired by ElevenLabs). You have Karakeep now. Delete. |
| Pocket / Pocket Sync | You use Karakeep for bookmarks. Redundant. Delete unless actively using. |
| Raindrop.io / Save to Raindrop.io | Another bookmark manager. Redundant with Karakeep. Delete? |
| Folx | Download manager — when was the last time you used this? |
| MacDroid | Android file transfer — Android File Transfer also installed. Pick one. |
| Android File Transfer | Google's own tool, buggy and abandoned. MacDroid is better if you need it. |
| Habbo Launcher | The hotel game? |
| DittoDex | Pokemon app? |
| Pale Moon / Waterfox | You have Arc, Firefox, Chrome, Safari. Five browsers is a lot. |
| Paperparrot | What is this for? Might be unused. |
| Duplicate File Finder | One-time-use tool. Keep only if actively deduplicating. |
| Disk Drill | Data recovery. Testdisk does the same thing (CLI). Redundant? |
| Listy | Spotlight replacement? Questionable value. |
| QSpace | File manager. You have ForkLift and Commander One already. Three file managers? |
| Push to Kindle | Niche. Keep if used. |
| Google Docs/Sheets/Slides | PWA wrappers — just use the browser. These are unnecessary apps. |
| Tuta Mail | Another email client. You have Proton Mail + Bridge + Betterbird/Thunderbird. How many email apps? |
| Things3 | Todo app. Are you using it or Obsidian/Drafts for tasks? |
| Fantastical | Calendar. Are you using this or Apple Calendar? |
Email clients — you have 5
- Proton Mail (desktop app)
- Proton Mail Bridge + Betterbird
- Thunderbird
- Spark
- Tuta Mail
Pick one or two. Most people use Bridge + one desktop client (Betterbird or Thunderbird, not both).
Browsers — you have 5
- Arc
- Firefox
- Google Chrome
- Pale Moon
- Waterfox (+ Safari)
Unless you're testing web compatibility, 2-3 is plenty.
File managers — you have 3
- Commander One (brew cask)
- ForkLift (brew cask)
- QSpace
Pick one. ForkLift is generally the best macOS file manager.
3. Shell Config: Nearly Empty
.zshrc (current)
# Add RVM to PATH for scripting. Make sure this is the last PATH variable change.
export PATH="$PATH:$HOME/.rvm/bin"
export PATH="/opt/homebrew/opt/ruby/bin:$PATH"
Problems:
- RVM PATH is loaded but RVM has zero rubies installed (~/.rvm/rubies/ is empty). This is dead weight.
- No prompt customization
- No aliases
- No completion
- No history configuration
- No tool integrations (fzf, zoxide, etc.)
- ~/bin/ is not in PATH (your scripts exist but can't be called without ./ or full path)
.bashrc (current)
# Add RVM to PATH for scripting. Make sure this is the last PATH variable change.
export PATH="$PATH:$HOME/.rvm/bin"
Same problem — RVM reference to nothing. This file is irrelevant since you use zsh.
.zprofile (current)
eval "$(/opt/homebrew/bin/brew shellenv)"
This is correct. Homebrew init belongs in .zprofile.
.gitconfig (current)
[user]
name = miltongz
email = [email protected]
Missing (what others configure):
- core.editor — defaults to vim, set to your preference
- init.defaultBranch = main
- pull.rebase = true (or false, but set it explicitly to avoid the warning)
- push.autoSetupRemote = true — auto-tracks remote branches
- credential.helper — not set! You're probably getting prompted for passwords
- diff.colorMoved = default — highlights moved lines differently
- Git aliases (optional but common: st, co, br, lg)
- Forgejo remote config (insteadOf for URL shortcuts)
Suggested .gitconfig
[user]
name = miltongz
email = [email protected]
[init]
defaultBranch = main
[pull]
rebase = true
[push]
autoSetupRemote = true
[core]
editor = code --wait
[diff]
colorMoved = default
[credential "https://git.eva-00.network"]
helper = store
[url "[email protected]:"]
insteadOf = forgejo:
The insteadOf lets you clone with: git clone forgejo:holo/chizuru-v2
4. SSH Config: Minimal
Current
Host *
AddKeysToAgent yes
UseKeyChain yes
IdentityFile ~/.ssh/id_ed25519_github
Host code.eva-00.network
HostName code.eva-00.network
User git
IdentityFile ~/.ssh/id_ed25519_forgejo
Problems
- No homelab host aliases. You type
ssh [email protected]every time instead ofssh chizuru. - No ServerAliveInterval. SSH sessions to homelab drop after idle timeout.
- Default key for everything. The GitHub key is sent to every host (wildcard
IdentityFile). Not a security risk per se, but messy. - 4 SSH keys but only 2 configured:
id_ed25519_github— configured (wildcard)id_ed25519_forgejo— configuredid_ed25519_cajita— not in config (only used in backup script via-iflag)homelab_claude— not in config (Claude's key, loaded in agent)- 110 entries in known_hosts — probably full of stale LXC entries from recreated containers. Consider trimming.
See terminal ADR section 5 for the recommended expanded config.
5. RVM: Dead Installation
RVM is installed (~/.rvm/ exists, function is loaded via shell init) but:
- Zero rubies installed (~/.rvm/rubies/ is empty)
- Brew Ruby 3.4.2 is what's actually used (/opt/homebrew/opt/ruby/bin/ruby)
- Both .zshrc and .bashrc add RVM to PATH for nothing
Action: Remove RVM entirely.
rvm implode # removes ~/.rvm
# Then remove these lines from .zshrc and .bashrc:
# export PATH="$PATH:$HOME/.rvm/bin"
6. Joplin: Abandoned Config
~/.config/joplin-desktop/ exists with a 23MB SQLite database, last modified March 2024 (over 2 years ago). You use Obsidian now. The Joplin app is also installed.
Action: If you've migrated everything to Obsidian, delete the config and app:
rm -rf ~/.config/joplin-desktop/
# And remove Joplin.app from /Applications
7. Dropbox: Still Active?
Dropbox is running with LaunchAgents (com.dropbox.DropboxUpdater.wake.plist, etc.) and has data in ~/Dropbox/ (emulator saves, a screenshot). Google Drive is also mounted (~/Library/CloudStorage/[email protected]).
Question: Are you actively using Dropbox and Google Drive, or are these leftover from before your homelab storage setup? You now have Filebrowser, NFS/SMB mounts, and restic backups.
8. LaunchAgents
| Agent | Status | Notes |
|---|---|---|
com.holo.backup-to-cajita |
Loaded, exit 127 | Failing silently. Exit 127 = command not found. Likely restic not in PATH when launchd runs it (launchd doesn't source .zprofile). |
com.homelab.mount-nfs-wake |
Loaded, exit 0 | Working |
com.homelab.mount-smb-wake |
Not loaded | Not running. Needs launchctl load or check if it errors on load |
Proton Mail Bridge |
Loaded | OK |
com.dropbox.* (3 agents) |
Loaded | See Dropbox question above |
com.valvesoftware.steamclean |
Loaded | Steam cleanup agent. Fine. |
backup-to-cajita exit 127 fix
The plist calls /Users/gabriel/bin/backup-to-cajita.sh which uses restic, but launchd doesn't have Homebrew in its PATH. Fix by using the full path in the script:
# In backup-to-cajita.sh, change:
# restic backup ...
# To:
# /opt/homebrew/bin/restic backup ...
Or add a PATH export at the top of the script:
export PATH="/opt/homebrew/bin:$PATH"
9. Disk Usage: 701GB / 926GB Used (80%)
| Location | Size | Notes |
|---|---|---|
~/Pictures |
173GB | Largest. Photos? Screenshots? Check if this overlaps with Immich. |
~/Library |
147GB | App caches, mail, etc. brew cleanup + clear caches can help. |
~/Downloads |
73GB | Probably old downloads never cleaned up. |
~/Documents |
67GB | Check for large files that should be on NAS. |
~/Desktop |
1.2GB | Fine |
~/git |
728MB | Fine |
Quick wins:
# See what's eating ~/Library
du -sh ~/Library/Caches ~/Library/Application\ Support ~/Library/Mail ~/Library/Containers 2>/dev/null | sort -hr
# Clear brew cache
brew cleanup --prune=all
# Check ~/Downloads for old large files
find ~/Downloads -size +100M -mtime +90 -exec ls -lh {} \;
At 80% disk usage, you should consider offloading ~/Pictures to Immich or NAS if not already mirrored.
10. compare_old_unohana.sh
This script compares old storage migration data between unohana and dlbox mounts. The storage migration completed on 2026-04-05. If the comparison showed everything matched, this script is done — delete it.
Summary: Priority Actions
High priority (fix broken things)
- Fix backup-to-cajita LaunchAgent (exit 127 — add PATH)
- Load mount-smb-wake LaunchAgent (not running)
- Run
brew upgrade(44 outdated packages)
Medium priority (cleanup dead weight)
- Remove RVM (
rvm implode, clean .zshrc/.bashrc) - Uninstall deprecated brew packages:
[email protected],libksba,pkgconf,zlib - Run
brew autoremove && brew cleanup - Delete dead apps: Criptext, Omnivore, Google Docs/Sheets/Slides
- Delete Joplin config if fully migrated to Obsidian
- Delete compare_old_unohana.sh if migration verified
Lower priority (improve setup)
- Decide on email clients (pick 2 from 5)
- Decide on browsers (pick 2-3 from 5)
- Decide on file managers (pick 1 from 3)
- Move manually-installed apps to brew casks (25 candidates listed above)
- Expand .gitconfig (credential helper, default branch, rebase, etc.)
- Expand .ssh/config with homelab aliases
- Investigate
~/Pictures173GB — offload to Immich/NAS? - Clean
~/Downloads(73GB, likely stale files)