My personal, opinionated development environment — managed with GNU Stow and designed to get a new machine feeling like home in a single command.
Platform target: This repo is specifically designed for macOS. Some pieces may work elsewhere, but the installer flow, package assumptions, and defaults are macOS-first.
Fair warning: These dotfiles reflect my workflow and preferences. They ship with specific tool choices (Ghostty, Starship, fzf), a Tokyo Night Starship/VS Code theme direction, rebase-oriented Git defaults, and an alias vocabulary that makes sense to me. Feel free to fork and bend them to your own taste, but don't expect a neutral starting point — this is a setup that works for one person and is shared in the spirit of "steal what's useful."
~/.dotfiles/
├── ghostty/ # Ghostty terminal emulator config
├── gitconfig/ # Git settings, aliases, and merge strategy
├── shell/ # Shared aliases, exports, and shell-specific rc files
│ └── .config/shell/
│ ├── shelldefs # Core env vars and general aliases
│ ├── tools/ # Modular tool configs (auto-sourced)
│ │ ├── bun.sh
│ │ ├── deno.sh
│ │ ├── docker.sh
│ │ ├── golang.sh
│ │ ├── kubernetes.sh
│ │ ├── nvm.sh
│ │ ├── python.sh
│ │ └── rust.sh
│ ├── zshrc # Zsh-specific config
│ └── bashrc # Bash-specific config
├── starship/ # Starship cross-shell prompt theme
├── vscode/ # VS Code base settings (merged into local user settings)
├── zed/ # Zed base settings (merged into local user settings)
├── AGENTS.md # Agent-oriented repo guide and maintenance notes
├── install.sh # Interactive installer with tool selection
├── scripts/ # Repository maintenance helpers
│ └── smoke-check.sh # Syntax + stow + installer smoke checks
└── setup.sh # One-liner: clone, install deps, hand off to install.sh
Each top-level directory is a Stow package — running stow <package> symlinks its contents into the corresponding location under $HOME. Most files are symlinked only; the VS Code and Zed installers intentionally merge tracked base configs into your local settings files so local edits stay out of this repo.
These dotfiles target macOS and use Homebrew throughout setup and tool installation.
If you want everything at once — clone the repo, install dependencies, stow all packages, and set up your Git identity — run:
curl -fsSL https://raw.githubusercontent.com/raine-works/.dotfiles/master/setup.sh | bashThe setup script will:
- On macOS, auto-install Homebrew first if it's missing
- Install base dependencies — Git, GNU Stow, Starship, and fzf — via Homebrew
- Clone this repo to
~/.dotfiles(or pull latest if it already exists) - Hand off to the interactive installer (
install.sh), which then:- ensures GNU Stow is available (defensive check; installs via Homebrew if needed)
- stows the core packages (
shell,starship,gitconfig) into$HOME - backs up conflicting files to
~/.dotfiles-backups/beforestow --restow, with an interactive restore prompt if stowing fails - injects a single
sourceline into your existing~/.zshrcor~/.bashrc(your current config is never overwritten) - launches an interactive tool picker for Ghostty, NVM, Bun, Deno, Go, Rust, Python, Docker, Kubernetes, VS Code, Zed, and GitHub CLI Copilot
- prompts you to create a local
~/.gitconfig.localfor your Git identity
| Dependency | Purpose |
|---|---|
| Git | Version control |
| GNU Stow | Symlink manager for dotfiles |
| Starship | Cross-shell prompt |
| fzf | Fuzzy finder used by shell aliases and completions |
# macOS
brew install git stow starship fzf-
Clone the repo into your home directory:
git clone https://github.com/raine-works/.dotfiles.git ~/.dotfiles cd ~/.dotfiles
-
Run the install script — it stows packages, then launches an interactive menu to pick which dev tools to install:
./install.sh
On macOS, this script will auto-install Homebrew first if it is not already installed.
The menu uses arrow keys to navigate, spacebar to toggle, and enter to confirm. Tools already detected on your system are pre-selected:
```text ❯ [ ] Ghostty GPU-accelerated terminal emulator [✔] NVM Node Version Manager [✔] Bun JavaScript runtime & bundler [ ] Deno Secure JavaScript/TypeScript runtime [ ] Go Go programming language [ ] Rust Rust programming language and Cargo [ ] Python Python 3 via pyenv version manager [ ] Docker Docker Desktop for containers [ ] Kubernetes kubectl + kubectx/kubens aliases [ ] VS Code Visual Studio Code editor [ ] Zed High-performance code editor [ ] GitHub CLI Copilot GitHub CLI with Copilot integration ↑/↓ navigate · space toggle · enter confirm ``` If you deselect a tool that is currently installed, the installer offers to remove it (and its managed data/config where applicable). It also asks whether to run a deeper package-manager purge when supported.Flags:
./install.sh --all— select every tool without the menu./install.sh --no-tools— skip tool selection entirely (stow + shell config only)
Current installer tools (source of truth:
install.shTOOL_REGISTRY):- Ghostty — GPU-accelerated terminal emulator
- NVM — Node Version Manager
- Bun — JavaScript runtime & bundler
- Deno — Secure JavaScript/TypeScript runtime
- Go — Go programming language
- Rust — Rust programming language and Cargo
- Python — Python 3 via pyenv version manager
- Docker — Docker Desktop for containers
- Kubernetes — kubectl + kubectx/kubens aliases
- VS Code — Visual Studio Code editor
- Zed — High-performance code editor
- GitHub CLI Copilot — GitHub CLI with Copilot integration
Or stow individual packages manually if you only want parts of the config:
stow shell # aliases, exports, PATH, shell rc files stow starship # prompt theme stow gitconfig # git settings + aliases stow vscode # VS Code base settings (Tokyo Night defaults) stow zed # Zed base settings
Ghostty config is stowed automatically when selected in the tool picker. For VS Code and Zed, prefer ./install.sh over manual stow: the installer migrates older symlinked settings directories if needed, cleans up any leaked local editor settings from the dotfiles package, then merges the tracked base file into your live settings.json so editor-written settings stay local.
-
The installer will also prompt you to create your local Git identity (not tracked by this repo). You can skip this and create it manually later:
cat > ~/.gitconfig.local << 'EOF' [user] email = you@example.com name = Your Name EOF
Symlinks to ~/.config/shell/. The shell config is split into a core file, modular tool configs, and shell-specific rc files:
| File | Role |
|---|---|
shelldefs |
Core exports, general aliases, and auto-sources everything in tools/ |
tools/*.sh |
One file per tool — self-guarding modules that only activate when the tool is installed |
zshrc |
Zsh completions (case-insensitive, menu-select, colored), fzf integration, and Starship init |
bashrc |
Bash equivalents of the above |
The HOST_IP variable is auto-detected from your active network interface.
General aliases (always active):
../.../....— navigate up directoriescl— clear,lsa—ls -a,ip— show local IPfzfp— fzf with a bat file preview
Tool modules (activate when the tool is on your PATH):
| Module | Aliases / Config |
|---|---|
tools/nvm.sh |
NVM initialization and PATH setup |
tools/bun.sh |
Bun shell completions |
tools/deno.sh |
Deno install path export ($DENO_INSTALL) and PATH setup |
tools/docker.sh |
d, dps, dstop (safe stop-all helper), dc, dcu, dcd |
tools/golang.sh |
GOPATH defaulting ($HOME/go when unset) and GOPATH/bin PATH setup |
tools/kubernetes.sh |
k, ka, ke, kg, kd, kgpo, kgd, kgs, kgpow, kc/kns, kl, klp/klns (fzf pod log selector), kdel, kdelp (fzf pod deletion) |
tools/python.sh |
pyenv initialization and PATH setup |
tools/rust.sh |
Sources ~/.cargo/env when present |
Symlinks to ~/.config/ghostty/config.
- Font size: 19px
- Font family: JetBrainsMono Nerd Font
- Background opacity: 0.8 with a 50px blur radius
- macOS option key mapped as Alt (not Meta) for proper keybinds
- Mouse cursor hides while typing
Symlinks to ~/.gitconfig. Identity is kept out of version control via an [include] of ~/.gitconfig.local.
Key opinions baked in:
- Editor: VS Code (
code --wait) - Default branch:
master - Pull strategy: rebase (no merge bubbles)
- Merge conflict style:
zdiff3(shows common ancestor for clearer diffs) - Diff algorithm:
histogram - Rerere: enabled — Git remembers how you resolved conflicts
- Auto push setup:
autoSetupRemote = true(no more--set-upstreamon first push) - Fetch: auto-prunes deleted remote branches
- Autocorrect: enabled (10 decisecond delay)
- Delta: commented-out config ready to enable if delta is installed
Aliases: st, co, ci, br, df, cp, unstage, undo, amend, lg (pretty graph log), aliases (list all aliases)
Symlinks to ~/.config/starship/starship.toml.
- Theme: Tokyo Night palette (configured as
tokyo_nightin the Starship palette block) - Prompt layout: single segmented prompt line (directory → git branch/status → language runtimes → time), then input character on a new line
- Prompt character: blue icon on success, red icon on error,
[N] >>>in vi normal mode - Kubernetes module: enabled with context/namespace display when active
Symlinks a base file at ~/Library/Application Support/Code/User/dotfiles.settings.json on macOS.
When VS Code is selected in install.sh, the installer merges this base file into your local settings.json with local values taking precedence. That means editing settings from inside VS Code updates your local file, not this repo.
- Theme:
Tokyo Night - Extension:
enkia.tokyo-night(installed automatically when VS Code is selected in the installer)
Symlinks a base file at ~/.config/zed/dotfiles.settings.json.
When Zed is selected in install.sh, the installer first makes sure ~/.config/zed is a real local directory, then merges this base file into your local settings.json with local values taking precedence. That means editing settings from inside Zed updates your local file, not this repo.
- Font: JetBrainsMono Nerd Font (buffer: 15pt, UI: 16pt, terminal: 15pt)
- Panels: Docks configured (left: project/outline/git/collaboration, right: agent)
- Features: Copilot completions enabled; Git commit messages use Zed's Agent model configuration via
agent.commit_message_model
smoke-check.sh— runs the repository's existing syntax, stow simulation, and non-interactive installer smoke checks
To remove core dotfile packages, unstow them:
cd ~/.dotfiles
stow -D shell
stow -D ghostty
stow -D starship
stow -D gitconfig
stow -D vscode
stow -D zedThis deletes only the symlinks — your original files are untouched. You may also want to remove the # dotfiles-managed:raine-works source line from your ~/.zshrc or ~/.bashrc.
For development tools (Ghostty, NVM, Bun, Deno, Python/pyenv, Docker, Kubernetes, VS Code, Zed, and GitHub CLI Copilot), the easiest path is to rerun ./install.sh and deselect the tools you want removed. The script will prompt you before uninstalling anything.
This project is licensed under the MIT License. See the LICENSE file for details.