Personal machine setup for macOS and Linux (GNOME). Covers package management, Docker, GitHub SSH/signing, window management, keyboard firmware, and key remapping.
# 1. Install Homebrew (if not already installed)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 2. Install packages
brew bundle
# 3. Install rosetta
softwareupdate --install-rosetta
# 4. Post-Homebrew tweaks (adds libpq to PATH)
./scripts/postbrew.sh
# 5. Docker
./docker/setup.sh
# 6. GitHub SSH key and commit signing
./github/setup_github_ssh.sh
# 7. Runtime version manager (Python, Go, Node, Rust)
./asdf/setup.sh
# 8. App switcher (requires Hammerspoon from step 2)
./window-switcher-mac/setup.sh
# 9. (Optional) Sofle v2 keyboard firmware
./keyboard/setup.sh
./keyboard/compile.sh# 1. Docker
./docker/setup.sh
# 2. GitHub SSH key and commit signing
./github/setup_github_ssh.sh
# 3. Runtime version manager (Python, Go, Node, Rust)
./asdf/setup.sh
# 4. System-wide key remapping (Super as Cmd)
./xremap/setup.sh
# 5. App switcher
./window-switcher/setup.sh
# 6. Window tiling (requires gTile GNOME extension)
./tiling/setup.sh
# 7. Cedilla fix (ç via RALT+C)
./scripts/fix_cedilla.sh
# 8. Lock screen shortcut (Ctrl+Super+Q)
./scripts/setup_lock_shortcut.sh
# 9. (Optional) Sofle v2 keyboard firmware
./keyboard/setup.sh
./keyboard/compile.shInstalls Homebrew packages: libpq (PostgreSQL CLI tools) and xz (compression), plus the hammerspoon cask for macOS automation.
Run with:
brew bundlescripts/postbrew.sh — Run after brew bundle. Adds libpq binaries (psql, pg_dump, etc.) to PATH in ~/.zshrc. Required because Homebrew installs libpq keg-only to avoid conflicting with the postgresql formula.
scripts/fix_cedilla.sh (Linux) — Configures the keyboard to produce ç via RALT+C using a custom XKB symbols file and GNOME input source registration.
scripts/setup_lock_shortcut.sh (Linux/GNOME) — Binds Ctrl+Super+Q to lock the screen.
Installs asdf and sets up plugins for Python, Go, Node.js, and Rust. Installs the latest version of each and sets it as the global default.
./asdf/setup.shSupports install via Homebrew, Zypper, AUR, or a direct binary download.
macOS: Removes Docker Desktop, installs Docker CLI + Colima as a lightweight runtime, configures docker-credential-osxkeychain, and installs Docker Compose as a plugin.
Linux: Adds the official Docker apt repository, installs docker-ce and related packages, adds the current user to the docker group, and enables the systemd service.
./docker/setup.shGenerates an ed25519 SSH key, adds it to the SSH agent, and walks you through registering it on GitHub as both an authentication key and a signing key. Configures Git to sign all commits automatically via SSH.
./github/setup_github_ssh.shCustom firmware for a Sofle v2 split keyboard with 5 layers:
| Layer | Contents |
|---|---|
| QWERTY | Base layer with home-row combos (D+F = Left Shift, etc.) |
| SYMBOLS | Symbols, brackets, cedilla (ç) |
| NUMPAD | Numpad, arrows |
| FUNCTION | F-keys |
| NAV | Navigation, media |
OLED display support and per-key encoder mappings are included.
./keyboard/setup.sh # install QMK CLI and copy keymap files
./keyboard/compile.sh # compile firmware and print flashing instructionsHammerspoon scripts that bind Hyper (Shift+Ctrl+Alt+Cmd) + a key to focus an app or launch it if it isn't running. Repeated presses within 2 seconds cycle through the app's open windows in most-recently-used order.
Default bindings: a Calendar, b Chrome, c Slack, e VS Code, f Finder, m Spotify, n Obsidian, p 1Password, t Terminal, u Cursor, w WhatsApp, and more.
./window-switcher-mac/setup.shTo add a shortcut without re-running setup:
./window-switcher-mac/add-shortcutGNOME custom keybindings equivalent to window-switcher-mac. Uses wmctrl and xdotool to focus or launch apps, cycling through windows by most-recently-used order on repeated presses.
Modifier: Ctrl+Alt+Shift+Super. Same key layout as the macOS module.
./window-switcher/setup.sh
./window-switcher/add-shortcut # add a single shortcut without re-running setup
./window-switcher/remove-shortcuts # remove all registered shortcutsmacOS: Uses Rectangle for window tiling. Install it via Homebrew or directly from the website.
Linux/GNOME: Configures gTile preset layouts on a 6×4 grid via Ctrl+Alt shortcuts:
| Keys | Layout |
|---|---|
| Arrow keys | Halves (left/right/top/bottom) |
| U / I / J / K | Quarters |
| D / F / G | Thirds |
| E / R / T | Two-thirds |
| Return | Fullscreen |
./tiling/setup.sh
./tiling/rollback.sh # restore original GNOME keybindingsMakes Super+C/V behave like macOS Cmd+C/V everywhere. Terminals receive Ctrl+Shift+C/V instead to avoid conflicts. Also remaps Super+X/A/Z/W/Q and Alt+Left/Right to their expected macOS equivalents.
./xremap/setup.shInstalls xremap as a systemd user service that starts on login.