Personal configuration files.
| Tool | Description |
|---|---|
| Neovim | IDE-like editor with LSP, completion, Treesitter, DAP debugger |
| Fish | Shell with vi bindings, Tide prompt, Gruvbox theme, fzf integration |
| Ghostty | GPU-accelerated terminal with Gruvbox theme |
| Git | Aliases, commit signing, color configuration |
git clone https://github.com/spiffcs/dotfiles.git ~/dotfiles
cd ~/dotfiles
./install.sh --all- macOS (tested on Sonoma)
- Homebrew - Install Homebrew
./install.shPresents a menu to choose what to install.
./install.sh --all # Install everything (deps + rust + LSP + fish + symlinks)
./install.sh --deps # Install Homebrew packages only
./install.sh --rust # Install Rust stable toolchain
./install.sh --lsp # Install LSP servers (gopls, pyright, ruff, rust-analyzer, metals)
./install.sh --fish # Build fish from source
./install.sh --symlink # Create symlinks only
./install.sh --clean-backups # Remove *.backup.* files left by previous runs
./install.sh --dry-run # Preview changes without applyingmake all # Install everything (deps + rust + lsp + fish + symlinks)
make deps # Install Homebrew packages
make rust # Install Rust toolchain
make lsp # Install LSP servers (gopls, pyright, ruff, rust-analyzer, metals)
make fish # Build fish from source
make symlink # Create symlinks only
make clean # Remove symlinks
make clean-backups # Remove *.backup.* files left by install.sh
make dry-run # Preview changesFull IDE experience with plugin management via lazy.nvim. Uses native vim.lsp.config() / vim.lsp.enable() (nvim 0.11+).
Plugins:
gruvboxcolorscheme withlualinestatus linenvim-cmpautocompletion with LSP, buffer, and path sourcesnvim-treesitterfor syntax highlighting and indentationnvim-tree+fzf/fzf.vimfor file navigation and searchconform.nvimfor format-on-save,nvim-lintfor lintingnvim-metalsfor Scala LSP (worksheet evaluation, build import, scalafmt)nvim-dap+nvim-dap-gofor debuggingtodo-comments.nvimfor highlighted TODO/HACK/FIX commentscommittia.vimfor split-view commit message editingvim-better-whitespacefor trailing whitespace highlighting
LSP Support:
- Go (
goplswith staticcheck) - Scala (
metalsvia nvim-metals) - Python (
pyrightfor types +rufffor linting/formatting) - Lua (
lua_ls) - Rust (
rust_analyzer) - R (
r_language_server) - OCaml (
ocamllsp)
Leader is ,.
LSP (nvim 0.11 provides K, grr, grn, gri, gra by default):
| Key | Action |
|---|---|
gd |
Go to definition |
K |
Hover docs (built-in) |
grr |
References (built-in) |
grn |
Rename (built-in) |
gri |
Implementation (built-in) |
gra |
Code action (built-in) |
<leader>rn |
Rename (alias) |
<leader>d |
Show diagnostic float |
[d / ]d |
Prev/next diagnostic (built-in) |
File Navigation:
| Key | Action |
|---|---|
<leader>r |
Fuzzy find files (FZF) |
<leader>fw |
Ripgrep search (:Rg) |
<leader>n |
Focus file tree |
<C-n> |
Toggle file tree |
<C-f> |
Find current file in tree |
Completion:
| Key | Action |
|---|---|
<C-Space> |
Trigger completion |
<Tab> / <S-Tab> |
Cycle through items |
<CR> |
Confirm selection |
Debugging (DAP):
| Key | Action |
|---|---|
<F5> |
Start / continue |
<F6> |
Debug nearest Go test |
<F10> |
Step over |
<F11> / <F12> |
Step into / out |
<leader>db |
Toggle breakpoint |
<leader>dB |
Conditional breakpoint |
Windows, Buffers, and Tabs:
| Key | Action |
|---|---|
<Space> |
Search (/) |
<C-h/j/k/l> |
Navigate windows (left/down/up/right) |
<leader>= |
Equalize window sizes |
<leader>h / <leader>l |
Previous / next buffer |
<C-t>h / <C-t>l |
Previous / next tab |
<C-t>k / <C-t>j |
First / last tab |
Other:
| Key | Action |
|---|---|
gcc |
Toggle comment on line (built-in) |
gc + motion |
Comment selection (built-in) |
<leader>w |
Quick save |
<leader><CR> |
Clear search highlight |
:Glow |
Preview markdown |
:TodoQuickFix |
List all TODO/HACK/FIX comments |
Built from source via --fish. Managed by Fisher with plugins declared in fish_plugins.
Features:
- Tide prompt with Gruvbox colors
- Vi key bindings enabled by default
- uv shell completions
- fzf key bindings for fuzzy search
- Custom PATH setup for Homebrew, Go, opam
Aliases:
xdg-open->open(Linux compatibility)
Font: FiraCode Nerd Font
Theme: Gruvbox Dark
Cursor: Underline
Background: #1c2022
Keybindings:
Shift+Enter- Insert literal newline
Aliases:
| Alias | Command |
|---|---|
git l |
Pretty log with dates |
git s |
Short status |
git d |
Diff |
git co |
Checkout |
git cob |
Checkout new branch |
git b |
List branches by date |
git la |
List all aliases |
Settings:
- SSH commit signing enabled
- Auto whitespace fixing
- Colored output
Everything below is installed automatically via make deps (Brewfile), make rust, and make lsp.
| Tool | Description |
|---|---|
| bat | cat clone with syntax highlighting and git integration |
| fzf | Fuzzy finder for files, history, and anything piped to it |
| ripgrep | Extremely fast recursive grep (powers :Rg in nvim) |
| tree | Directory listing as a tree |
| jq | JSON processor for the command line |
| jless | Interactive JSON viewer in the terminal |
| glow | Render markdown in the terminal (also an nvim plugin) |
| tmux | Terminal multiplexer for persistent sessions |
| wget | HTTP file downloader |
| coreutils | GNU core utilities (gdate, greadlink, etc.) |
| Tool | Description |
|---|---|
| btop | Resource monitor — CPU, memory, disks, network, processes |
| dust | Intuitive disk usage viewer (like du but better) |
| ncdu | Interactive disk usage analyzer with ncurses UI |
| procs | Modern replacement for ps with color and tree view |
| Tool | Description |
|---|---|
| gh | GitHub CLI — PRs, issues, actions, repos from the terminal |
| git-lfs | Large file storage for git |
| git-filter-repo | Fast, safe history rewriting (replaces filter-branch) |
| bfg | Fast cleaner for removing secrets/large files from git history |
| difftastic | Structural diff tool that understands syntax |
| Tool | Description |
|---|---|
| dive | Explore Docker image layers and find wasted space |
| crane | Interact with container registries (pull, push, copy images) |
| skopeo | Inspect and copy container images between registries |
| oras | Push and pull OCI artifacts to/from registries |
| cosign | Sign and verify container images and artifacts |
| grype | Vulnerability scanner for container images and filesystems |
| trivy | Comprehensive security scanner (images, IaC, secrets) |
| zizmor | GitHub Actions security linter |
| docker-compose | Multi-container orchestration |
| Tool | Description |
|---|---|
| go | Go programming language |
| rustup | Rust toolchain installer and manager |
| node | JavaScript runtime |
| pnpm | Fast, disk-efficient JavaScript package manager |
| uv | Extremely fast Python package and project manager |
| coursier | Scala/JVM artifact fetcher and launcher |
Installed via make lsp and the Brewfile:
| Tool | Language | Description |
|---|---|---|
| gopls | Go | Official Go language server |
| rust-analyzer | Rust | Rust language server (via rustup) |
| pyright | Python | Static type checker and language server |
| ruff | Python | Linter and formatter |
| metals | Scala | Scala language server |
| lua-language-server | Lua | Lua language server |
| shellcheck | Bash | Static analysis for shell scripts |
| stylua | Lua | Opinionated Lua formatter |
| tree-sitter | All | Parser generator for syntax highlighting |
| Tool | Description |
|---|---|
| Ghostty | GPU-accelerated terminal emulator |
| Docker Desktop | Container runtime and management UI |
| Bruno | Offline-first API client (alternative to Postman) |
| GIMP | Image editor |
| Rectangle | Window management via keyboard shortcuts |
| Claude Code | Anthropic's AI coding assistant |
-
Set up Git signing: Copy the template and fill in your identity:
cp .gitconfig.local.example ~/.gitconfig.local -
Install additional LSP servers not covered by
--lsp(lua, R, OCaml):brew install lua-language-server
dotfiles/
├── .config/
│ ├── fish/
│ │ ├── config.fish
│ │ ├── conf.d/
│ │ │ ├── gruvbox-theme.fish # Gruvbox color palette for fish
│ │ │ ├── tide-config.fish # Tide prompt configuration
│ │ │ └── rustup.fish # Rust/cargo PATH setup
│ │ ├── functions/
│ │ │ ├── cat.fish # cat -> bat alias
│ │ │ └── fish_greeting.fish # Custom greeting
│ │ └── fish_plugins # Fisher plugin list
│ ├── ghostty/
│ │ └── config
│ ├── git/
│ │ └── ignore # Global gitignore (XDG default)
│ └── nvim/
│ ├── init.lua
│ ├── lazy-lock.json # Plugin version lockfile
│ └── lua/
│ └── dap-config.lua # DAP debugger setup
├── lib/ # install.sh modules
│ ├── common.sh # Output helpers and spinner
│ ├── deps.sh # Homebrew dependency installation
│ ├── fish.sh # Build fish from source
│ ├── fisher.sh # Fisher plugin manager bootstrap
│ ├── lsp.sh # LSP server installation
│ ├── rust.sh # Rust toolchain setup
│ └── symlink.sh # Symlink creation and cleanup
├── .gitattributes
├── .gitconfig
├── .gitconfig.local.example # Template for machine-specific git identity
├── .commit-template.txt
├── Brewfile
├── install.sh # Thin dispatcher (sources lib/*.sh)
├── sync-brewfile.sh
├── Makefile
└── README.md
MIT