Welcome to my dotfiles repository! This repository is managed using chezmoi, a tool designed to manage your dotfiles across multiple machines.
- CLI Tools π οΈ
- GUI Tools π₯οΈ
- Applications π¦
- SetApp Applications π―
- Aliases & Functions π§
- Shortcuts & Keybindings β¨οΈ
- Zed Configuration β‘
- Installation π₯
- Acknowledgments π
- License π
Command-line tools are installed declaratively via Nix +
Home Manager (see
nix-config/home.nix). Homebrew is kept only for GUI
casks and a few system/exclusive packages. This replaces the previous
ASDF + Homebrew setup (see MIGRATION_NIX.md).
-
Package Management
- Nix + Home Manager: Declarative package & dotfile management
- Chezmoi: Dotfiles manager
- Homebrew: GUI casks + system tools (managed outside this repo)
-
Core Utilities
-
Shell & Terminal
-
Languages & Runtimes
- Node.js 24 + Bun + Deno + pnpm: JavaScript/TypeScript
- Go: Programming language
- Rust:
rustc,cargo,rust-analyzer,clippy,rustfmt - Python 3.13: Programming language
- PHP 8.4 + Symfony CLI: PHP ecosystem (pcov + redis extensions)
- Neovim: Hyperextensible Vim-based editor
-
Development Tools
-
Kubernetes & Cloud
-
Media
- ffmpeg / ImageMagick / poppler: Media & document processing
Essential graphical tools:
-
Window Management (migrated from Yabai + skhd β see MIGRATION-YABAI-TO-AEROSPACE.md)
- AeroSpace: i3-like tiling window manager (8 workspaces, native bindings)
- Karabiner-Elements: Keyboard remapper β maps right β₯ to F18, the AeroSpace leader key
- JankyBorders: Active window borders
- SketchyVim: Vim keybindings in native text fields
- SwipeAeroSpace: Trackpad swipe gestures to switch AeroSpace workspaces
-
UI Enhancement
- Sketchybar: Custom menu bar (AeroSpace + SketchyVim integration)
- Open Island: Notch companion to monitor & control AI coding agents (Claude Code, Codexβ¦)
- SF Symbols: Apple system symbols
- Sketchybar App Font: Icon font
Key applications:
-
Development
-
Browsers & Communication
- Helium: Privacy-first Chromium browser
- Mattermost: Team communication
- Discord: Community platform
- WhatsApp: Messaging
-
Productivity
Premium applications via SetApp:
-
Development
- TablePlus: Database management
-
Productivity
- CleanShot X: Screenshot tool
- PixelSnap: Measurement tool
- Sip: Color management
-
System Tools
- CleanMyMac X: System cleaner
- Spark Mail: Email client
Aliases and functions are defined in
nix-config/home.nix(programs.zsh.shellAliases/initExtra), not in a standalone.zshrc.
| Alias | Command | Description |
|---|---|---|
x |
exit |
Exit terminal |
config |
cd $XDG_CONFIG_HOME |
Navigate to config directory |
edit-config |
$EDITOR $XDG_CONFIG_HOME |
Edit config directory |
reload-zsh |
source ~/.zshrc |
Reload ZSH configuration |
| Alias | Command | Description |
|---|---|---|
reload-nix |
home-manager switch --flake ~/nix-config |
Apply the Home Manager config |
edit-nix |
$EDITOR ~/nix-config/home.nix |
Edit home.nix |
edit-flake |
$EDITOR ~/nix-config/flake.nix |
Edit flake.nix |
| Alias | Command | Description |
|---|---|---|
py |
python3 |
Python 3 (Nix) |
python |
/usr/bin/python3 |
System Python 3 |
pa, laravel |
php artisan |
Laravel Artisan CLI |
a, adonis |
node ace |
AdonisJS Ace CLI |
ls |
eza --color=always --long --git --no-filesize --icons=always --no-time --no-user --no-permissions --group-directories-first |
Enhanced listing |
lg |
lazygit |
Terminal UI for Git |
lzd |
lazydocker |
Terminal UI for Docker |
f |
fzf --tmux top,50% |
Fuzzy finder in a Tmux popup (top, 50% height) |
| Alias | Command | Description |
|---|---|---|
gcs |
gh copilot suggest |
Get command suggestions |
gce |
gh copilot explain |
Explain commands |
gcc |
gh copilot config |
Configure Copilot |
gca |
gh copilot alias |
Manage Copilot aliases |
| Alias | Command | Description |
|---|---|---|
cc |
claude --dangerously-skip-permissions |
Claude Code (skip permission prompts) |
cca |
claude --enable-auto-mode |
Claude Code in auto mode |
ccc |
claude --dangerously-skip-permissions --chrome |
Claude Code with Chrome |
ccv |
claude --dangerously-skip-permissions --verbose |
Claude Code verbose |
| Alias | Command | Description |
|---|---|---|
reload-sketchybar |
brew services restart sketchybar |
Restart Sketchybar |
edit-sketchybar |
$EDITOR $XDG_CONFIG_HOME/sketchybar |
Edit Sketchybar config |
reload-borders |
brew services restart borders |
Restart JankyBorders |
edit-borders |
$EDITOR $XDG_CONFIG_HOME/borders |
Edit JankyBorders config |
AeroSpace has no reload alias β it reloads in-config via β₯β β§R (see keybindings).
| Alias | Command | Description |
|---|---|---|
t |
tmux -2 |
Launch Tmux with 256 colors |
reload-tmux |
tmux source-file ~/.tmux.conf |
Reload Tmux configuration |
ad |
TMUX="" agent-deck |
Launch Agent Deck (outside a nested tmux) |
| Function | Description |
|---|---|
y [dir] |
Open Yazi and cd into the last visited directory on exit |
ccp [path] |
Launch Claude Code in a new tmux window of the main session (opens Ghostty if needed) |
awsp [filter] |
Interactive AWS profile picker (fzf), exports AWS_PROFILE, runs aws sso login if the session expired |
awst |
SSM port-forwarding tunnel to an RDS instance through an SSM-managed bastion (fzf pickers) |
zen |
Toggle the Sketchybar "zen" plugin |
edit-zsh / edit-tmux / edit-git |
Jump $EDITOR straight to the matching section of home.nix |
AeroSpace leader key. Karabiner maps right β₯ β F18, which enters AeroSpace's
aeromode. Each shortcut below is press β₯β (right Option), then the key. A ββ₯ + key fallback exists for external keyboards. Workspace keys map letters to numbers:1 2 3β 1-3,Q W Eβ 4-6,Oβ 7 (Obsidian),Cβ 8 (Claude).
| Shortcut | Action |
|---|---|
| β₯β 1/2/3 Β· Q/W/E Β· O/C | Focus workspace 1-8 |
| β₯β Tab | Back-and-forth between the last two workspaces |
| β₯β H/J/K/L (or arrows) | Focus window left/down/up/right |
| Shortcut | Action |
|---|---|
| β₯β β§H/J/K/L (or arrows) | Move window left/down/up/right |
β₯β β§ + workspace key (1-3, Q W E, O, C) |
Move window to workspace 1-8 |
| Shortcut | Action |
|---|---|
| β₯β / | Tiles layout (toggle horizontal/vertical) |
| β₯β , | Accordion layout |
| β₯β β§Space | Toggle floating / tiling |
| β₯β F | Fullscreen |
| β₯β -/= | Resize smart β/οΌ50 |
| β₯β R | Enter resize mode (H/J/K/L to resize, Enter/Esc to exit) |
| Shortcut | Action |
|---|---|
| β₯β β§R | Reload AeroSpace config |
| β₯β β§X | Close focused window |
| β₯β β§= | Balance window sizes |
| β₯β Enter | Open Ghostty |
| β₯β β§; | Enter service mode (R flatten tree, Backspace close others, H/V/S/W/T layouts, Esc reload + exit) |
Prefix is β + a (replaces the default β + b). Mouse enabled, vi copy mode, windows/panes 1-indexed.
| Shortcut | Action | Description |
|---|---|---|
| prefix T | sesh connect (fzf) |
Smart session picker (sesh) |
| prefix L | sesh last |
Switch to last session |
| prefix r | source-file ~/.tmux.conf |
Reload configuration |
| prefix c | new-window |
New window (current path) |
| prefix b / n | previous/next-window |
Previous / next window |
| prefix X | kill-window |
Close window |
| Shortcut | Action | Description |
|---|---|---|
| prefix h/j/k/l | select-pane |
Focus pane left/down/up/right |
| β h/j/k/l | vim-aware select-pane |
Focus pane (tmux.nvim, no prefix) |
| prefix H/J/K/L | resize-pane (repeatable) |
Resize pane |
| prefix v / s | split-window -h / -v |
Split horizontal / vertical (current path) |
| prefix x | kill-pane |
Close pane |
| prefix V | copy-mode |
Enter vi copy mode |
| prefix u | fzf-url |
Pick a URL from the pane |
Note
Plugins (TPM): tmux-sensible, tmux-yank, tmux-cpu, tmux-battery, tmux-fzf-url. The prefix key (β + a) must be pressed and released before most commands.
My Zed editor configuration with custom keybindings and tasks.
| Shortcut | Context | Action | Description |
|---|---|---|---|
| β + h | Editor | workspace::ActivatePaneLeft |
Focus left pane |
| β + j | Editor | workspace::ActivatePaneDown |
Focus down pane |
| β + k | Editor | workspace::ActivatePaneUp |
Focus up pane |
| β + l | Editor | workspace::ActivatePaneRight |
Focus right pane |
| β + @ | Editor | editor::RestartLanguageServer |
Restart language server |
| β + ΓΉ | Editor | git_panel::ToggleFocus |
Toggle Git panel |
| β + < | Editor | editor::ToggleInlayHints |
Toggle inlay hints |
| β + β§ + k | Editor | editor::DeleteLine |
Delete current line |
| β + g | Editor | editor::SelectLargerSyntaxNode |
Select larger syntax node |
| β + β§ + g | Editor | editor::SelectSmallerSyntaxNode |
Select smaller syntax node |
| β + i | Editor | assistant::InlineAssist |
Inline AI assist |
| β + ; | Editor | go_to_line::Toggle |
Toggle go to line |
| β + β§ + r | Editor | editor::Rename |
Rename symbol |
| Shortcut | Context | Action | Description |
|---|---|---|---|
| β₯ + β§ + f | Editor | editor::Format |
Format current file |
| β₯ + k | Editor | editor::MoveLineUp |
Move line up |
| β₯ + j | Editor | editor::MoveLineDown |
Move line down |
| β₯ + β | Editor | editor::MoveLineUp |
Move line up |
| β₯ + β | Editor | editor::MoveLineDown |
Move line down |
| β₯ + β§ + p | Editor | markdown::OpenPreview |
Open markdown preview |
| Shortcut | Context | Action | Description |
|---|---|---|---|
| β + β§ + t | Workspace | task::Spawn |
Open task launcher |
| β₯ + f | Workspace | task::Spawn "Files: FZF" |
Open FZF file finder |
| β₯ + y | Workspace | task::Spawn "Files: Yazi" |
Open Yazi file manager |
| β₯ + g | Workspace | task::Spawn "Git: Lazygit" |
Open Lazygit |
| β₯ + r | Workspace | task::Spawn "Files: Rename Files (Script)" |
Run file rename script |
| β₯ + d | Workspace | task::Spawn "Database: Redis CLI" |
Open Redis CLI |
| β₯ + β§ + d | Workspace | task::Spawn "Docker: Lazydocker" |
Open Lazydocker |
| β₯ + β§ + k | Workspace | task::Spawn "Kubernetes: Lazykube" |
Open Lazykube |
| β₯ + t | Workspace | task::Spawn "Laravel: Test" |
Run Laravel tests |
| β₯ + β§ + t | Workspace | task::Spawn "Laravel: Test (coverage)" |
Run Laravel tests with coverage |
| β₯ + β§ + m | Workspace | task::Spawn "Laravel: Migrate (fresh and seed)" |
Run Laravel migration fresh with seed |
| β₯ + p | Workspace | task::Spawn "Files: Generate Project Structure file" |
Generate project structure file |
| Shortcut | Context | Action | Description |
|---|---|---|---|
| β + β₯ + i | Workspace | assistant::ToggleFocus |
Toggle AI assistant |
| β + Esc | Terminal | terminal::ToggleViMode |
Toggle Vi mode in terminal |
Note
See the Zed Keybindings Documentation for more information.
| Shortcut | Action | Description |
|---|---|---|
| z + a | editor::ToggleFold |
Toggle fold at cursor |
| z + l | editor::Fold |
Fold at cursor |
| z + L | editor::FoldAll |
Fold all regions |
| z + h | editor::UnfoldLines |
Unfold at cursor |
| z + H | editor::UnfoldAll |
Unfold all regions |
| β + n | pane::ActivateNextItem |
Next tab/buffer |
| β + b | pane::ActivatePreviousItem |
Previous tab/buffer |
| β + x | pane::CloseActiveItem |
Close active tab/buffer |
| β + - | pane::SplitRight |
Split pane right |
| β + = | pane::SplitDown |
Split pane down |
| Shortcut | Action | Description |
|---|---|---|
| Space + ; | go_to_line::Toggle |
Toggle go to line |
| Space + R | editor::Rename |
Rename symbol |
| Space + @ | editor::RestartLanguageServer |
Restart language server |
| Space + g | editor::SelectLargerSyntaxNode |
Select larger syntax node |
| Space + G | editor::SelectSmallerSyntaxNode |
Select smaller syntax node |
| Space + j | terminal_panel::ToggleFocus |
Toggle terminal panel |
| Space + ΓΉ | git_panel::ToggleFocus |
Toggle Git panel |
| Space + 0 | vim::StartOfDocument |
Go to start of document |
| Space + o | editor::Hover |
Show hover information |
| Space + Tab | pane::ActivateNextItem |
Next tab/buffer |
| Space + β§ + Tab | pane::ActivatePreviousItem |
Previous tab/buffer |
| Space + β§ + s | project_symbols::Toggle |
Toggle project symbols |
| Space + . | editor::ToggleCodeActions |
Toggle code actions |
| Space + β§ + a | editor::FindAllReferences |
Find all references |
| Space + w + d | pane::CloseActiveItem |
Close active item |
| Space + * | vim::MoveToNext (partial_word) |
Move to next occurrence of word |
| Space + Β¨ | vim::MoveToPrevious (partial_word) |
Move to previous occurrence of word |
| Shortcut | Action | Description |
|---|---|---|
| Space + t + r | task::Spawn "Files: Rename Files (Script)" |
Run file rename script |
| Space + t + f | task::Spawn "Files: FZF" |
Open FZF file finder |
| Space + t + y | task::Spawn "Files: Yazi" |
Open Yazi file manager |
| Space + t + d | task::Spawn "Docker: Lazydocker" |
Open Lazydocker |
| Space + t + k | task::Spawn "Kubernetes: Lazykube" |
Open Lazykube |
| Space + t + p | task::Spawn "Files: Generate Project Structure file" |
Generate project structure file |
| Space + t + l | task::Spawn "Git: Generate Git Logs file" |
Generate Git logs file |
| Space + t + L | task::Spawn "Git: Generate Git Logs file (All)" |
Generate all Git logs file |
| Space + g + g | task::Spawn "Git: Lazygit" |
Open Lazygit |
| Space + t + t | task::Spawn "Laravel: Test" |
Run Laravel tests |
| Space + t + T | task::Spawn "Laravel: Test (coverage)" |
Run Laravel tests with coverage |
| Space + M | task::Spawn "Laravel: Migrate (fresh and seed)" |
Run Laravel migration fresh with seed |
| Shortcut | Action | Description |
|---|---|---|
| Space + f + f | file_finder::Toggle |
Toggle file finder |
| Space + f + p | projects::OpenRecent |
Open recent project |
| Space + f + b | vim::Search |
Search in current file |
| Space + f + s | outline::Toggle |
Toggle outline view |
| Space + f + r | search::ToggleReplace |
Toggle search & replace |
| Space + f + l | go_to_line::Toggle |
Toggle go to line |
| Space + d | editor::SelectAllMatches |
Select all matches |
| Space + e | project_panel::ToggleFocus |
Toggle project panel |
| Space + b + f | editor::Format |
Format current file |
| Shortcut | Action | Description |
|---|---|---|
| Space + i | assistant::InlineAssist |
Inline AI assist |
| Space + c + c + o | assistant::ToggleFocus |
Toggle AI assistant |
| Space + c + c + p | assistant::QuoteSelection |
Quote selected text to assistant |
| Shortcut | Action | Description |
|---|---|---|
| Space + s + k | zed::OpenKeymap |
Open keymap settings |
| Space + s + s | zed::OpenSettings |
Open settings |
| Space + s + t | zed::OpenTasks |
Open tasks |
| Space + s + T | theme_selector::Toggle |
Toggle theme selector |
| Space + s + d | diagnostics::Deploy |
Deploy diagnostics |
Note
You can use the default Vim keybindings in Zed by enabling Vim mode in the settings. See the Zed Vim Documentation for more information.
| Task Name | Command | Description |
|---|---|---|
| Git: Generate Git Logs file | ~/.config/zed/tasks/generate_git_log.sh $(git rev-parse --abbrev-ref HEAD) 400 |
Generate Git logs for current branch (limited entries) |
| Git: Generate Git Logs file (All) | ~/.config/zed/tasks/generate_git_log.sh $(git rev-parse --abbrev-ref HEAD) 999999 |
Generate Git logs for current branch (all entries) |
| Git: Lazygit | lazygit -p $ZED_WORKTREE_ROOT |
Open Lazygit in project root |
| Files: Rename Files (Script) | ~/.config/zed/tasks/rename_files.sh "${1:Path}" "${2:Pattern}" "${3:Find}" "${4:Replace}" |
Interactive batch file renaming with parameters |
| Files: FZF | fzf with preview and custom bindings |
Advanced file finder with preview and syntax highlighting |
| Files: Yazi | yazi |
Terminal file manager in project root |
| Files: Generate Project Structure | eza --tree --level=5 --git-ignore |
Generate project structure avoiding vendor/node_modules |
| Laravel: Test | php artisan test |
Run Laravel tests |
| Laravel: Test (coverage) | php artisan test --coverage |
Run Laravel tests with coverage |
| Laravel: Migrate (fresh and seed) | php artisan migrate:fresh --seed |
Fresh database migration with seed |
| Laravel: Migrate (fresh) | php artisan migrate:fresh |
Fresh database migration without seed |
| Docker: Lazydocker | lazydocker |
Terminal UI for Docker |
| Kubernetes: Lazykube | lazykube |
Terminal UI for Kubernetes |
| Database: Redis CLI | redis-cli |
Redis command line interface |
Note
The tasks are executed in the context of the current workspace. The ZED_WORKTREE_ROOT environment variable is set to the root directory of the current workspace.
See the Zed Tasks Documentation for more information.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/kbrdn1/dotfiles/main/install.sh)"- Install Command Line Tools
xcode-select --install- Install Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"- Install Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"- Clone and Apply Dotfiles
chezmoi init https://github.com/kbrdn1/dotfiles.git
chezmoi apply- Install Nix & Home Manager (CLI tools, shell, aliases β see MIGRATION_NIX.md)
# Install Nix (multi-user daemon)
sh <(curl -L https://nixos.org/nix/install) --daemon
# Apply the Home Manager config
nix run home-manager/release-24.11 -- switch --flake ~/nix-config
# thereafter: reload-nix- Configure system preferences:
# Keyboard
defaults write NSGlobalDomain KeyRepeat -int 1
# Screenshots
mkdir ~/Screenshots
defaults write com.apple.screencapture location ~/Screenshots
defaults write com.apple.screencapture type png
defaults write com.apple.screencapture disable-shadow -bool true
# Menu Bar
defaults write NSGlobalDomain _HIHideMenuBar -bool true
# Dock
defaults write com.apple.dock autohide -bool true
defaults write com.apple.dock autohide-time-modifier -float 0.15- Grant accessibility permissions to AeroSpace and Karabiner-Elements
- Install SetApp applications manually
- Restart your computer
Special thanks to:
- FelixKratz for window management setup inspiration
- The Chezmoi team for the dotfiles management tool
This project is licensed under the MIT License - see the LICENSE file for details.
