Skip to content

spiffcs/dotfiles

Repository files navigation

.dotfiles

Personal configuration files.

What's Included

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

Quick Start

git clone https://github.com/spiffcs/dotfiles.git ~/dotfiles
cd ~/dotfiles
./install.sh --all

Prerequisites

Installation

Interactive Mode

./install.sh

Presents a menu to choose what to install.

Command Line Options

./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 applying

Using Make

make 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 changes

Configuration Details

Neovim

Full IDE experience with plugin management via lazy.nvim. Uses native vim.lsp.config() / vim.lsp.enable() (nvim 0.11+).

Plugins:

  • gruvbox colorscheme with lualine status line
  • nvim-cmp autocompletion with LSP, buffer, and path sources
  • nvim-treesitter for syntax highlighting and indentation
  • nvim-tree + fzf/fzf.vim for file navigation and search
  • conform.nvim for format-on-save, nvim-lint for linting
  • nvim-metals for Scala LSP (worksheet evaluation, build import, scalafmt)
  • nvim-dap + nvim-dap-go for debugging
  • todo-comments.nvim for highlighted TODO/HACK/FIX comments
  • committia.vim for split-view commit message editing
  • vim-better-whitespace for trailing whitespace highlighting

LSP Support:

  • Go (gopls with staticcheck)
  • Scala (metals via nvim-metals)
  • Python (pyright for types + ruff for linting/formatting)
  • Lua (lua_ls)
  • Rust (rust_analyzer)
  • R (r_language_server)
  • OCaml (ocamllsp)

Key Mappings

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

Fish Shell

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)

Ghostty Terminal

Font:       FiraCode Nerd Font
Theme:      Gruvbox Dark
Cursor:     Underline
Background: #1c2022

Keybindings:

  • Shift+Enter - Insert literal newline

Git

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

Installed Tools

Everything below is installed automatically via make deps (Brewfile), make rust, and make lsp.

Core

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.)

System Monitoring

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

Git

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

Container and Supply-Chain Security

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

Languages and Runtimes

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

LSP Servers and Formatters

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

GUI Applications

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

Manual Steps

  1. Set up Git signing: Copy the template and fill in your identity:

    cp .gitconfig.local.example ~/.gitconfig.local
  2. Install additional LSP servers not covered by --lsp (lua, R, OCaml):

    brew install lua-language-server

File Structure

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

License

MIT

About

Workstation dotfiles

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published