My personal configs for macOS, Linux and Windows, managed with Dotter.
Configs are grouped by tool. Dotter symlinks each one into place based on a per-OS profile, so the same repo drives macOS, Linux and Windows.
- Shells & terminals: Bash, Zsh, Fish, NuShell, Ghostty, Kitty
- Editors: Neovim, Helix, VSCode. Neovim configs shamelessly stolen from Blonteractor 😼
- Keyboard: Karabiner-Elements (macOS), keyd (Linux)
- macOS automation: Hammerspoon (menu-bar Spaces + window tricks)
- Tooling & misc: Git, Starship, Atuin, Neofetch, Tmux
- Desktop: Grub, GNOME Shell (not managed by Dotter; see the gnome-shell configs)
- Hardware profiles: system-profiles (syncs USB autosuspend, GPU clocks and lid behavior with GNOME Power Mode)
The quickest path on a fresh Linux box is the bootstrap script, which pulls the repo and deploys everything for you:
# Linux one-liner
curl https://raw.githubusercontent.com/vyogami/dotfiles/main/linux-install.sh | shOn macOS or Windows (or if you'd rather do it by hand), use the manual steps below.
Manual install (all platforms)
-
Clone (needs Dotter installed):
git clone --recursive https://github.com/vyogami/dotfiles.git && cd dotfiles
-
Pick your OS profile (
linux/macos/windows) and deploy:cp .dotter/<os>.toml .dotter/local.toml ./dotter deploy # ./dotter.arm (Unix arm) | ./dotter.exe (Windows)
Safe to re-run; add
-fto overwrite existing files.
macOS extras (Karabiner + Hammerspoon)
The macos profile manages ghostty, karabiner and hammerspoon.
-
Karabiner loads
karabiner.jsonautomatically; no build step. -
Hammerspoon needs its space-switch helper compiled once (binary is git-ignored):
./hammerspoon/build.sh # -> ~/.hammerspoon/bin/spaceswitch (needs Xcode CLT) -
Grant Hammerspoon Accessibility, and enable Move left/right a space under System Settings → Keyboard → Keyboard Shortcuts → Mission Control.
Hammerspoon is split into independent modules under hammerspoon/modules. Toggle
any feature with the features flags at the top of hammerspoon/init.lua
(scroll-to-switch-Spaces, click-for-Mission-Control, Cmd+Tab monitor focus);
turning one off never affects the others.
Most of my muscle memory lives in the keyboard remaps. Karabiner covers macOS, keyd mirrors the important bits on Linux, and Hammerspoon adds window and Spaces automation on top. Expand a section for the full mapping.
Karabiner (macOS)
| Keys | Action |
|---|---|
| Space (hold) + h/j/i/k/l/; … | vim-style arrow motion layer |
| Caps Lock (tap / hold) | Esc / Ctrl |
| Esc | Caps Lock |
| ⌥ tapped alone | Mission Control |
| Ctrl + V | ⌘ + V (paste) everywhere |
| Ctrl + C | ⌘ + C (copy) everywhere except terminals and IDEs |
| Zen: Ctrl + T/F/W/L/R/S/C/X/Z/1 to 0/-/=/, | ⌘ + equivalent (Ctrl + Tab & Ctrl + Alt + * preserved) |
| External Redgear keyboard | Swaps left ⌘/⌥, maps left Ctrl → ⌘ |
Hammerspoon (macOS)
| Input | Action |
|---|---|
| Scroll over the menu bar | Switch Spaces (up = prev, down = next) |
| Click empty menu-bar area | Toggle Mission Control (active screen only) |
| ⌘ + Tab | Focus (and move cursor to) the frontmost window on the next monitor |
keyd (Linux)
| Keys | Action |
|---|---|
| Space (tap / hold) | Space / arrow layer |
| Caps Lock (tap / hold) | Esc / Ctrl |
| Esc | Caps Lock |
| Right Alt ⇄ Right Ctrl | Swapped |
Arrow layer (hold Space): j/i/k/l → arrows · h/; → Home/End · u/d → PgUp/PgDn · m/n → Delete/Backspace
These are my configs. Use them as it is or stitch bits together into your own unholy creation 😉
Unlicense. Do whatever you want.
