You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
My personal development environment. Built by hand, maintained over time.
β οΈ Warning: Breaking changes may occur. I'll stop when I get bored.
π‘ This Is a Garden
There are two kinds of development environments: the ones given to you, and the ones you grow.
Using someone else's defaults is easy. Everyone installs the same editor with the same extensions, pressing the same keybindings. It might be efficient β but it's fundamentally different from choosing your own tools, sharpening them, and arranging them yourself. Installing something convenient and consuming it is not the same as composing your own environment with your own hands. What stays with you afterward is completely different.
Writing dotfiles means building your own workspace from the ground up. π οΈ
A garden never turns out exactly as planned. What you plant doesn't always grow the way you expect, and sometimes things take root on their own. Dotfiles are the same way. Neovim keymaps settle into muscle memory over years, while AI integration configs get rewritten monthly. Fish abbreviations need time before your fingers learn them, and sometimes β like migrating to Ghostty β you have to tear up the soil entirely. Multiple timelines overlap in a single place, and you can't control all of them at once.
And that's fine. π±
A perfectly managed environment is, by definition, someone else's managed environment. It becomes your place precisely because it contains parts you can't fully tame. Deciding whether to pull the weeds or let them stay β that's part of tending it with your own hands. What you build up over time like that becomes the foundation of who you are as someone who writes code.
If all you want is efficiency, off-the-shelf is fine. But if you want to leave traces of how you think and how you move your hands β you have no choice but to keep a garden. πͺ΄
π Structure
dotfiles/
# π’ Active (2026)
βββ fish/ # π Fish shell
βββ nvim/ # βοΈ Neovim (LazyVim)
βββ ghostty/ # π» Ghostty terminal
βββ starship/ # π Prompt
βββ git/ # π Git scripts
β
# π¦ Archive (kept for reference, all under archive/)
βββ archive/
β βββ warp/ # Warp terminal β migrated to Ghostty
β βββ bash/ # Bash β migrated to Fish
β βββ zsh/ # Zsh β migrated to Fish
β βββ vim/ # Vim β migrated to Neovim
β βββ tmux/ # tmux β migrated to Ghostty splits
β βββ lvim/ # LunarVim β migrated to LazyVim
β βββ nvchad/ # NvChad β migrated to LazyVim
β βββ nvchad-v2.5/# NvChad v2.5 (2026-03γΎγ§δ½Ώη¨)
β βββ dockerfile/ # Dockerfile examples
β βββ ssh/ # SSH config examples
update_all # Update everything: brew + mise + rustup + uv + Fisher + nvim plugins
mkcd <dir># mkdir + cd
port 8080 # Check process using port
z <substring># zoxide jump
π Modern CLI Replacements
Legacy
Replacement
Notes
ls
eza
ll (detailed+Git), la (hidden), lt (tree)
cat
bat
Syntax highlighting
grep
ripgrep
-t rust "fn", -C 3 "error"
find
fd
fd "*.rs", fd -t d config
cd
zoxide
z <path> (learning)
history
atuin
Search with Ctrl+R
git diff
delta
Auto (GIT_PAGER=delta)
π» Ghostty Terminal
πͺ Panes
Key
Action
Cmd+D
Split right
Cmd+Shift+D
Split down
Ctrl+H/J/K/L
Navigate panes (Vim-style)
Cmd+W
Close pane
Cmd+Shift+Return
Toggle zoom
π Tabs & Windows
Key
Action
Cmd+T
New tab
Cmd+N
New window
Cmd+Shift+] / [
Switch tabs
π Scrolling
Key
Action
Ctrl+U
Half page up
Alt+B
Full page up
Alt+G
Scroll to top
Alt+Shift+G
Scroll to bottom
Ctrl+Shift+Up/Down
Jump between prompts
Cmd+Shift+Space
Quick terminal
Config: Hack Nerd Font Mono 24pt / Tokyo Night / Bar cursor π¨
βοΈ Neovim
LazyVim base. Minimal UI with no statusline (cmdheight=0, incline.nvim for floating buffer names). catppuccin mocha + blink.cmp.