Personal dotfiles for my macOS development environment.
Note
This project is still a work in progress! Use at your own risk.
- Quick Start
- Repository Structure
- Install Script
- ZSH Configuration
- Neovim
- Tmux
- Terminal Emulators
- Utility Scripts
- Docker
- Preferred Apps and Tools
Note
Requires the Xcode Command Line Tools.
xcode-select --install
git clone https://github.com/akoken/dotfiles.git ~/dotfiles
cd ~/dotfiles
./install.sh backup # optional — backs up existing dotfiles first
./install.sh alldotfiles/
├── Brewfile # Homebrew packages, casks, and VS Code extensions
├── Dockerfile # Linux test environment
├── install.sh # Setup & installation script
├── bin/ # Custom shell scripts (symlinked to ~/bin)
└── config/
├── aerospace/ # Tiling window manager
├── bat/ # bat themes
├── delta/ # Git diff pager themes
├── ghostty/ # Ghostty terminal config + shaders
├── git/ # Global gitconfig, gitignore, commit template
├── nvim/ # Neovim (lazy.nvim + kickstart-based)
├── oh-my-posh/ # Prompt theme
├── ripgrep/ # ripgrep defaults
├── starship/ # Starship prompt config
├── tmux/ # Tmux config + plugins + scripts
├── wezterm/ # WezTerm terminal config
└── zsh/ # Zsh config (zshrc, aliases, functions, env)
./install.sh {backup|clean|link|copy|git|homebrew|shell|macos|all}| Command | Description |
|---|---|
backup |
Back up existing dotfiles to ~/dotfiles-backup/ |
clean |
Remove symlinks created by link |
link |
Create symlinks from config/ → ~/.config/ and bin/ → ~/bin |
copy |
Copy configs instead of symlinking (useful for containers) |
git |
Set up Git identity and credential helper |
homebrew |
Install Homebrew and run brew bundle from the Brewfile |
shell |
Set Zsh as the default shell |
macos |
Apply macOS system preferences (Finder, keyboard, Safari, etc.) |
all |
Run link → homebrew → shell → git → macos |
Note
backup and clean must be run manually — they are not included in all.
The shell environment is managed through Zinit and organized across several files in config/zsh/:
| File | Purpose |
|---|---|
.zshenv |
Sets XDG_CONFIG_HOME, EDITOR, DOTFILES, history, and PATH |
.zshrc |
Loads plugins, completions, key bindings, and tool integrations |
.zsh_aliases |
Shell, git, tmux, and tool aliases |
.zsh_functions |
Helper functions (g, md, docker open/close/flush, etc.) |
.zprofile |
Homebrew and tool-specific PATH setup |
- Oh My Posh — prompt theme engine (config in
config/oh-my-posh/) - zoxide — smart
cd - fzf — fuzzy finder with key bindings
- direnv — per-directory environment variables
Configuration lives in config/nvim/ and is symlinked to ~/.config/nvim. Built on a kickstart.nvim foundation with custom plugins.
Warning
The first time you run nvim, lazy.nvim will automatically install all plugins. Expect some initial errors until installation completes.
Plugins can be synced headlessly from the command line:
vu # alias for: nvim --headless "+Lazy! sync" +qaTelescope, Treesitter, LSP (via lspconfig), blink-cmp, conform, nvim-tree, flash, trouble, gitsigns, todo-comments, vim-tmux-navigator, and language-specific setups for Go and Rust.
Configuration is in config/tmux/tmux.conf with a Catppuccin theme. Prefix is set to Ctrl-A.
# Install the plugin manager
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
# Inside tmux, install plugins with:
# prefix + Itmux-sensible, tmux-yank, tmux-resurrect, tmux-continuum, tmux-thumbs, tmux-fzf, tmux-fzf-url, tmux-sessionx, catppuccin-tmux, and vim-tmux-navigator.
Primary terminal. Config in config/ghostty/ with custom cursor shaders, Vesper dark / Catppuccin Latte theme, and MonoLisa font.
Secondary GPU-accelerated terminal. Config in config/wezterm/wezterm.lua.
Custom scripts in bin/ are symlinked to ~/bin and available on $PATH:
| Script | Description |
|---|---|
brew-why |
List installed packages and their dependents |
extract |
Extract any archive format automatically |
git-bare-clone |
Clone a repo as a bare repository for worktrees |
git-create-worktree |
Create a new git worktree |
git-graph |
Visual git log graph |
ip |
Print your public IP address |
jwt |
Decode a JWT token |
update |
Update Homebrew packages and Neovim plugins |
wgh |
Clean up ghost windows in AeroSpace |
wtfport |
Find which process is listening on a given port |
A Dockerfile is provided to test the dotfiles setup in a Linux environment:
docker build -t dotfiles --force-rm .
docker run -it --rm dotfilesI almost exclusively work on macOS, but many of these are cross-platform.
| Category | Tool | Description |
|---|---|---|
| Terminal | Ghostty | Fast, native terminal emulator |
| Terminal | WezTerm | GPU-accelerated terminal emulator |
| Shell | Zsh | Default shell |
| Prompt | Oh My Posh | Cross-platform prompt theme engine |
| Window Manager | AeroSpace | Tiling window manager for macOS |
| Launcher | Raycast | Spotlight replacement |
| Fonts | Nerd Fonts | MonoLisa + SF Mono Nerd Font fallback |
| Navigation | zoxide | Smarter cd |
| File Listing | eza | Modern ls replacement |
| File Viewing | bat | cat with syntax highlighting |
| Search | ripgrep | Fast grep replacement |
| Search | fd | Fast find replacement |
| Filtering | fzf | Fuzzy finder |
MIT © Abdurrahman Alp Köken

