Personal dotfiles managed with GNU Stow.
| Tool | Purpose |
|---|---|
| AeroSpace | Tiling window manager |
| Fish | Shell |
| Ghostty | Terminal emulator |
| Homebrew | Package manager |
| Starship | Prompt |
| Yazi | File manager |
| Zellij | Terminal multiplexer |
| App | Purpose |
|---|---|
| BetterTouchTool | Keyboard/trackpad customization |
| Karabiner-Elements | Key remapping |
See keybindings.md for a full keybinding reference across all apps.
Defined in themes/ as YAML files. Set active theme in config.yaml:
theme: onedark # or catppuccin-mochaAvailable themes:
onedark— based on One Dark Procatppuccin-mocha— based on Catppuccin Mocha
Template files (.tmpl) generate app configs with theme colors.
Affected apps: Ghostty, Zellij, Yazi, Bat.
Re-apply theme after changes:
./setup.sh --themegit clone https://github.com/LazyRen/dotfiles.git
cd dotfiles
# Edit config.yaml to enable/disable apps before running
./setup.shconfig.yaml controls which apps are installed. Comment out any
app to skip it.
setup.sh will:
- Render theme templates from
themes/<name>.yamlinto app configs - Install Homebrew packages from
brew/list.yaml - Symlink configured apps to
$HOMEvia stow - Run per-app
setup.shhooks (fisher plugins, yazi packages, zellij plugins, etc.)
Re-run after pulling config-only changes:
./setup.sh --skip-brewApply theme only (no brew, stow, or hooks):
./setup.sh --themeconfig.yaml # Apps to install + active theme
brew/list.yaml # Homebrew formulas, casks, and link targets
setup.sh # Main installer
themes/ # Color theme definitions (YAML)
# Stow packages (symlinked to $HOME)
aerospace/ # AeroSpace tiling window manager config
atuin/ # Atuin shell history config
bat/ # Bat syntax highlighter config
fish/ # Fish shell config, functions, fisher plugins
ghostty/ # Ghostty terminal config
karabiner/ # Karabiner-Elements key remapping
starship/ # Starship prompt config
yazi/ # Yazi file manager config and plugins
zellij/ # Zellij multiplexer config, layouts, plugins
# macOS-specific (hook-only, not stowed)
os/mac/ # macOS defaults, xcode-select, app imports
# App config imports (not stowed, referenced by os/mac/setup.sh)
bettertouchtool/ # BetterTouchTool preset
Each directory mirrors $HOME for stow (e.g., fish/.config/fish/ → ~/.config/fish/).
Nested paths like os/mac are hook-only — they run setup.sh but are not stowed.
- Create
<app>/.config/<app>/with your config files - Add
- <app>toconfig.yaml - Run
./setup.sh
If the app needs post-stow setup, add an executable setup.sh in the app directory and create a .stow-local-ignore file (see fish/.stow-local-ignore for reference).
os/mac/setup.sh configures macOS system preferences via defaults write, including:
- Appearance, Dock, Mission Control, Finder
- Keyboard repeat, function keys, shortcuts (desktop switching, input sources, Spotlight)
- Trackpad gestures, accessibility (drag lock)
- Screenshots location, window management
- Imports BetterTouchTool preset
Ghostty uses xterm-ghostty as its TERM value, in case remote hosts won't recognize by default.
Copy the terminfo entry before connecting:
infocmp -x | ssh <user@address> -- tic -x -See Ghostty SSH documentation for details.
Fish supports per-machine overrides via ~/.config/fish/conf.d/local.fish.
This file is gitignored and created automatically by fish/setup.sh on fresh clones.
Edit it freely — changes stay local and won't appear in git status.
