Centralized development tool configurations for Neovim, tmux and Ghostty, with Nix/Home Manager for shared system packages and dotfiles and one writable native owner for coding CLIs.
This repository contains the actual configuration files for Neovim, tmux, and Ghostty. Your home directory contains symlinks that point to these files, allowing you to:
- ✅ Version control your configs
- ✅ Share configs across multiple machines
- ✅ Backup and restore easily
- ✅ Track changes over time
- ✅ Experiment safely with branches
Architecture:
~/.config/nvim/ → symlink to ~/Projects/dev-config/nvim/
~/.tmux.conf → symlink to ~/Projects/dev-config/tmux/tmux.conf
~/Library/Application Support/com.mitchellh.ghostty/config → symlink to ~/Projects/dev-config/ghostty/config
~/.zshrc → symlink to ~/Projects/dev-config/zsh/.zshrc
~/.zprofile → symlink to ~/Projects/dev-config/zsh/.zprofile
~/.p10k.zsh → symlink to ~/Projects/dev-config/zsh/.p10k.zsh
~/Projects/dev-config/ (Git repo - source of truth)
├── nvim/ (actual files, version controlled)
├── tmux/tmux.conf (actual file, version controlled)
├── ghostty/config (actual file, version controlled)
└── zsh/ (shell configuration, version controlled)
├── .zshrc (main zsh config)
├── .zprofile (login shell config)
└── .p10k.zsh (Powerlevel10k theme config)
- Operating System: macOS (Intel/ARM), Linux (Debian, Ubuntu, Fedora, Arch, openSUSE)
- Shell: Bash (stock macOS Bash supports native bootstrap) or Zsh; changing the login shell is opt-in
- Build Tools: C compiler (for Treesitter parsers and blink.cmp)
- macOS: Xcode Command Line Tools (
xcode-select --install) - Linux:
build-essential(Debian/Ubuntu) or equivalent
- macOS: Xcode Command Line Tools (
These are the bare minimum to run the installer:
- Git - Version control (for cloning repository)
- curl - For the Nix installer and missing native CLIs
Shared Darwin/Linux system tools come from pkgs/default.nix; their executable
checks are enumerated in pkgs/tool-checks.json. Nix source revisions are
locked by flake.lock; Mac host extras in pkgs/Brewfile are opt-in, not part
of automatic activation. Held third-party sources need an explicit trust
decision before installation. An existing helm@3 is preserved, not the
fresh-host Helm pin.
Core Tools:
- Docker (≥ 20.10) - Container platform
- Neovim (≥ 0.9.0) - Text editor
- tmux (≥ 1.9) - Terminal multiplexer
- Zsh - Shell (sets as default login shell)
- fzf - Fuzzy finder (Telescope, tmux-fzf)
- ripgrep (rg) - Fast grep (Telescope live_grep)
- lazygit - Git TUI
- make - Build tools (telescope-fzf-native)
- node - Node.js runtime (Mermaid CLI)
- npm - Node package manager
- imagemagick - Image processing
Shell Framework:
- Oh My Zsh - Zsh plugin framework
- Powerlevel10k - Modern Zsh theme
- zsh-autosuggestions - Fish-like autosuggestions
Neovim editor tools (via Nix/Home Manager):
- LSP servers: TypeScript (
ts_ls), Python (pyright), Lua (lua_ls), Biome and Nix (nixd) - Formatters: stylua, prettier, ruff, Biome and alejandra
Plugin Managers:
- Lazy.nvim - Neovim plugin manager (auto-configured)
- tmux plugins - installed from the Nix store by Home Manager (no TPM)
Neovim Plugins (60+ plugins via Lazy.nvim): All Neovim plugins are auto-installed on first run, including:
- LSP support (nvim-lspconfig)
- Completion (blink.cmp with 2ms latency)
- Telescope (fuzzy finder)
- Treesitter (syntax highlighting)
- Git integration (Gitsigns, Lazygit, Octo, Diffview, Git-conflict)
- Markdown tools (Obsidian, render-markdown, markdown-preview)
- File explorer (Neo-tree)
- Many more...
See nvim/README.md for complete plugin list.
Tmux Plugins (9 plugins via Home Manager / Nix store): All tmux plugins are installed declaratively (no TPM), including:
tmux-resurrect+tmux-continuum- Session persistencevim-tmux-navigator- Seamless Vim/tmux navigationtmux-fzf- Fuzzy finder for sessions/windows/panescatppuccin/tmux- Beautiful themetmux-yank- Enhanced clipboard integrationtmux-battery+tmux-cpu- Status bar info
LSP servers and formatters: Home Manager declares editor executables once and supplies them through Neovim's wrapper, independently of the launching shell's PATH. The same tools remain available to the user's shell. Neovim enables configured LSP servers directly; Conform runs the declared formatters. Lazy.nvim manages plugins, not tool binaries. The shared flake supplies these tools on Mac, headless Linux and Rex profiles. Standalone Neovim users must provide the executables themselves.
Treesitter Parsers: Auto-installed syntax parsers for:
- bash, c, lua, vim, markdown, python, javascript, typescript, tsx, json, yaml, html, css, and more
Install additional parsers with :TSInstall <language> in Neovim.
Platform-specific extras: Homebrew and pkgs/Brewfile are opt-in on macOS;
they are not run by scripts/install.sh.
These provide enhanced features but are not required:
For Container Development:
- Docker Compose (standalone) - If not bundled with Docker Desktop
For GitHub Integration (Octo.nvim):
- GitHub CLI (
gh) - PR/issue management from Neovim# macOS brew install gh # Linux (Debian/Ubuntu) sudo apt install gh # Authenticate after installing gh auth login
For Image Rendering (image.nvim):
- ImageMagick - Image processing library
Use the shared Nix package set when available; these commands are manual alternatives.
# macOS brew install imagemagick # Linux (Debian/Ubuntu) sudo apt install imagemagick
For Mermaid Diagrams (render-markdown.nvim):
- npm - Node.js package manager
- Mermaid CLI - Diagram rendering
This npm command is optional and is not run by
npm add -g @mermaid-js/mermaid-cli
scripts/install.sh.
For AI Features (Optional):
- ZHIPUAI_API_KEY environment variable
- Powers GLM-based features (Minuet completion, CodeCompanion)
- Add to
~/.zshrc.local:export ZHIPUAI_API_KEY="your-api-key" - Features remain offline until configured
For blink.cmp Rust Optimization (Optional):
- pkg-config - Build configuration tool
Without this, blink.cmp uses Lua fuzzy matcher (still fast, just not Rust-optimized).
# macOS brew install pkg-config # Linux (Debian/Ubuntu) sudo apt install pkg-config
If install.sh fails to install a package, install manually:
macOS:
brew install git zsh neovim tmux fzf ripgrep lazygit imagemagick
brew install gh # Optional: GitHub CLILinux (Debian/Ubuntu):
sudo apt update
sudo apt install git zsh neovim tmux fzf ripgrep imagemagick build-essential
sudo apt install gh # Optional: GitHub CLI
# lazygit (may need manual install)
# See: https://github.com/jesseduffield/lazygit#installationLinux (Fedora):
sudo dnf install git zsh neovim tmux fzf ripgrep lazygit ImageMagick
sudo dnf install gh # Optional: GitHub CLILinux (Arch):
sudo pacman -S git zsh neovim tmux fzf ripgrep lazygit imagemagick
sudo pacman -S github-cli # Optional: GitHub CLIThen re-run bash scripts/install.sh.
After installation, verify dependencies:
# Check versions
nvim --version # Should be ≥ 0.9.0
tmux -V # Should be ≥ 1.9
git --version
zsh --version
fzf --version
rg --version
lazygit --version
# Check optional tools
gh --version # Optional: GitHub CLI
mmdc --version # Optional: Mermaid CLI
convert --version # Optional: ImageMagickOr run the validation script:
cd ~/Projects/dev-config
bash scripts/validate.shQuick reference for all dependencies and their purposes:
| Tool | Auto-Installed? | Purpose | Used By |
|---|---|---|---|
| git | ✅ Yes | Version control | Repository cloning, plugin management |
| zsh | ✅ Yes | Shell | Login shell, Oh My Zsh |
| neovim (≥0.9.0) | ✅ Yes | Text editor | Core application |
| tmux (≥1.9) | ✅ Yes | Terminal multiplexer | Core application |
| fzf | ✅ Yes | Fuzzy finder | Telescope, tmux-fzf, shell fuzzy search |
| ripgrep (rg) | ✅ Yes | Fast grep | Telescope live_grep, code search |
| lazygit | ✅ Yes | Git TUI | Neovim git integration |
| make | ✅ Yes | Build tools | telescope-fzf-native compilation |
| node | ✅ Yes | Node.js runtime | Mermaid CLI, npm ecosystem |
| npm | ✅ Yes | Package manager | Mermaid CLI installation |
| imagemagick | ✅ Best effort | Image processing | image.nvim (Neovim image rendering) |
| mmdc | Mermaid renderer | render-markdown.nvim diagrams | |
| gh | GitHub CLI | Octo.nvim (PR/issue management) | |
| pkg-config | Build tool | blink.cmp Rust optimization | |
| C compiler | Code compilation | Treesitter parsers, blink.cmp | |
| Oh My Zsh | ✅ Yes | Zsh framework | Shell plugin system |
| Powerlevel10k | ✅ Yes | Zsh theme | Shell prompt |
| zsh-autosuggestions | ✅ Yes | Zsh plugin | Shell autosuggestions |
| tmux plugins | ✅ Yes | via Home Manager (Nix store) | Tmux plugins (no TPM) |
| Lazy.nvim | ✅ Yes | Neovim plugin manager | Neovim plugin management |
| Home Manager | ✅ Yes | Editor tool binaries | LSP servers, formatters, build tools |
* C compiler required for Treesitter. On macOS: xcode-select --install. On Linux: build-essential package.
Legend:
- ✅ Yes - Provisioned by the selected Home Manager profile, where enabled
⚠️ Optional - Enhances features but not required⚠️ Required* - Must be present on system (not auto-installed)
Recommended: Use Nix for reproducible, declarative package management:
cd ~/Projects/dev-config
bash scripts/install.sh # Nix + selected Home Manager profileThen restart your terminal. Home Manager installs missing enabled native CLIs, not provider OAuth or upgrades to working CLIs.
See: Nix Quick Start Guide for detailed instructions.
-
Clone this repository:
git clone https://github.com/samuelho-dev/dev-config ~/Projects/dev-config -
Run the Nix installer:
cd ~/Projects/dev-config bash scripts/install.sh # Nix + selected Home Manager profile
-
Restart your terminal
Nix package source revisions follow flake.lock; writable native CLIs and MCP
stdio packages are not pinned by that file or guaranteed to be latest.
Modern, reproducible package management with automatic dependency installation via Nix Flakes:
cd ~/Projects/dev-config
bash scripts/install.shWhat this does:
- Installs Nix (if absent) and enables flakes
- Runs this flake's selected Home Manager app (
nix run .#home-manager -- switch --flake .) - Provisions shared system packages and dotfiles; the selected profile writes
~/.config/dev-config/native-toolsand installs missing writable OMP, Pi, Claude, OpenCode, Codex and Vercel CLIs throughai/bootstrap.sh - Links missing curated skills without replacing physical user directories, edits or unmanaged symlinks; tracked links advance only while still owned
Benefits:
- ✅ Reproducible Nix sources:
flake.locklocks flake inputs, not native CLI releases - ✅ Declarative selection: Profile enables system packages, native tools and MCP targets
- ✅ Nix rollback: Previous Home Manager generations do not roll back writable native CLIs
- ✅ Isolated: Per-project environments with zero conflicts
- ✅ Cross-platform: Works on macOS (Intel/ARM) and Linux
- ✅ Binary cache: 20x faster builds with Cachix (10 minutes → 30 seconds)
- ✅ AI integration: Writable native coding CLIs, separately configured MCP and existing account credentials
After installation:
cd ~/Projects/dev-config # direnv auto-activates Nix environment
claude "What should I work on today?" # Terminal: Existing Claude configuration is preserved
nvim # Editor: `:AvanteAsk` for Cursor-like AI coding assistant
# Claude proxy routing is explicit opt-in, not configured by Home ManagerDocumentation:
- Native tool provisioning and auth
- Quick Start Guide - Setup and non-activating checks
- Nix Concepts - Understanding Nix
- Daily Usage - Common workflows
- Troubleshooting - Fix issues
- 1Password + Secrets - 1Password CLI, secrets, SSH agent
- Advanced Guide - Customization
- LiteLLM Proxy Setup - Team AI management with cost tracking
Time to install: 10-15 minutes (first time), 30 seconds (subsequent machines with cache)
Secure GitHub authentication and Git commit signing using 1Password SSH Agent. This approach stores SSH private keys in your encrypted 1Password vault instead of on disk.
Security Benefits:
- ✅ Private keys never touch disk (encrypted in 1Password vault)
- ✅ Biometric unlock (Touch ID/Face ID/Windows Hello)
- ✅ No secrets committed to Git (safe for public repositories)
- ✅ Keys sync across devices via 1Password cloud
- ✅ Automatic key rotation and management
Developer Experience:
- ✅ Single setup for both SSH authentication and commit signing
- ✅ No manual SSH key management or backup
- ✅ Works seamlessly with Git, GitHub, and SSH connections
- ✅ Integrates with existing 1Password workflow
1Password Vault (Encrypted Cloud Storage)
├── SSH Private Key (never exported to disk)
└── SSH Public Key
↓
1Password SSH Agent (Local Socket)
↓
SSH Client / Git Signing
↓
GitHub (Authentication + Commit Signing)
Configuration Files:
✅ modules/home-manager/programs/ssh.nix (SSH agent integration)
✅ modules/home-manager/programs/git.nix (commit signing config)
✅ ~/.config/home-manager/secrets.nix (machine-specific, gitignored)
Public Repository (Safe to commit):
✅ SSH configuration modules
✅ Git signing configuration
❌ Private keys (stored in 1Password only)
Prerequisites:
- 1Password account (free for personal use)
- 1Password desktop app installed
Setup Steps:
- Enable 1Password SSH Agent (Settings → Developer)
- Create SSH key in 1Password (New Item → SSH Key)
- Add public key to GitHub (Settings → SSH and GPG keys)
- Add as Authentication key (required)
- Add same key as Signing key (recommended)
- Create secrets.nix with your Git identity and public key
- Test authentication:
ssh -T git@github.com
Total time: 5-10 minutes
Clone repositories (auto-converts HTTPS to SSH):
# Even with HTTPS URL, Git uses SSH automatically
git clone https://github.com/username/repo.git
# Behind the scenes: Rewritten to ssh://git@github.com/username/repo.gitCommit with automatic signing:
git commit -m "Your commit message"
# No -S flag needed - commits automatically signed with your SSH key
# 1Password prompts for biometric authentication on first usePush to GitHub:
git push origin main
# Uses SSH authentication via 1Password agent
# Biometric unlock if session expiredVerify commit signatures:
git log --show-signature
# Shows "Good signature" with your SSH keyWhat's stored where:
| Data | Location | Committed to Git? |
|---|---|---|
| SSH Private Key | 1Password vault (encrypted) | ❌ Never |
| SSH Public Key | GitHub + secrets.nix | |
| SSH Agent Config | modules/home-manager/programs/ssh.nix | ✅ Yes (safe - no secrets) |
| Git Signing Config | modules/home-manager/programs/git.nix | ✅ Yes (safe - no secrets) |
| Git User Info | secrets.nix | ❌ No (gitignored) |
secrets.nix example (machine-specific, not committed):
{
gitUserName = "Your Name";
gitUserEmail = "your-email@example.com";
sshSigningKey = "ssh-ed25519 AAAAC3... your-email@example.com";
}Same SSH key works across all your devices via 1Password sync:
First machine:
- Generate SSH key in 1Password
- Add to GitHub
- Create secrets.nix
Additional machines:
- Install 1Password desktop app
- Sign in (SSH keys auto-sync)
- Enable SSH agent
- Create secrets.nix (same public key)
- Done!
No manual key copying or transfer needed.
Complete guides:
- 1Password SSH Setup Guide - Comprehensive step-by-step instructions,
opCLI auth, and CI service accounts - Installation Guide - Setup during installation
Troubleshooting:
- "Could not open a connection to your authentication agent" → Check 1Password SSH agent enabled
- "Permission denied (publickey)" → Verify SSH key added to GitHub as Authentication key
- "Bad signature" → Ensure SSH key added as Signing key (not just Authentication)
See docs/nix/09-1password-ssh.md for detailed troubleshooting.
- Cross-platform installation (macOS, Linux)
- Docker Desktop for macOS via Homebrew
- Docker Engine for Linux with multiple package manager support
- Docker Compose support (standalone and plugin versions)
- Machine-specific aliases in
~/.zshrc.local - Version validation (Docker ≥ 20.10)
- Daemon status checking and auto-start
NEW Diagnostic Copy Feature (for Claude Code workflows):
<leader>ce- Copy Errors only to clipboard<leader>cd- Copy all Diagnostics to clipboard
Formatted output includes file path, line numbers, and severity grouping. Perfect for pasting into Claude Code or other AI assistants.
Other Key Features:
- Kickstart.nvim base configuration
- LSP support (TypeScript, Python, Lua)
- Telescope fuzzy finder
- Auto-formatting with Conform
- Git integration with Gitsigns
- Neo-tree file explorer
- Blink.cmp completion
Markdown & Obsidian Support:
- Full Obsidian vault integration (wikilinks, daily notes, tags)
- In-buffer markdown rendering with
render-markdown.nvim - Browser preview with
<leader>mp - Task management with auto-formatting bullets
- Document outline with
<leader>o
See docs/KEYBINDINGS_NEOVIM.md for complete keybinding reference.
Your leader key is <space> (spacebar)
Staging & Commits (lazygit):
<leader>gg- Open lazygit TUI (staging, commits, push, pull, stash, branches)<leader>gf- Lazygit for current file onlyprefix + g(in tmux) - Lazygit popup
GitHub PRs & Issues (octo.nvim):
<leader>gp- List and review Pull Requests<leader>gi- Manage Issues- Review PRs, add comments, approve/request changes - all from Neovim
- Uses GitHub CLI (
gh)
Diff & History (diffview.nvim):
<leader>gd- Open diff view<leader>gh- File history for current file<leader>gH- Full branch history
Merge Conflicts (git-conflict.nvim):
<leader>gco- Choose Ours<leader>gct- Choose Theirs<leader>gcb- Choose Both<leader>gc0- Choose None<leader>gcn/<leader>gcp- Next/Previous conflict<leader>gcl- List all conflicts
Git Hunks (gitsigns):
- Git changes shown in gutter
- Stage/unstage hunks
- Git blame
- Hunk preview
Configuration Highlights:
- Prefix:
C-a(instead ofC-b) - Split panes:
|(horizontal),-(vertical) - Navigation: Vim-style with
h/j/k/lvia vim-tmux-navigator - Popups:
!(shell),`(session switcher),g(lazygit) - Theme: Catppuccin Mocha
- Plugins: Resurrect, Continuum, tmux-fzf
See docs/KEYBINDINGS_TMUX.md for complete keybinding reference.
Configuration Highlights:
- Theme: Cursor Dark
- Custom Keybinds:
cmd+shift+r- Prompt surface title - Modern GPU-accelerated terminal emulator
- Written in Zig for performance
Configuration file: ghostty/config
This repository provides enterprise-grade linting configurations for TypeScript monorepos:
Biome Configuration (80+ rules):
biome.json- Strict TypeScript/JavaScript linting (source of truth)- Enforce
import type, no barrel files, cognitive complexity limits - GritQL custom patterns for Effect-TS and anti-patterns
Infrastructure-as-Code Linting:
.kube-linter.yaml- Kubernetes manifests (resource limits, no :latest).hadolint.yaml- Dockerfiles (version pinning, non-root).tflint.hcl- Terraform (snake_case, documented variables).github/actionlint.yaml- GitHub Actions workflows
Pre-commit Integration:
pre-commit install # Enable hooks
pre-commit run --all-files # Run manuallySee docs/nix/11-strict-linting-guide.md for comprehensive guide.
Configuration Highlights:
- Framework: Oh My Zsh with Powerlevel10k theme
- EDITOR/VISUAL: Set to
nvim(git commits, crontab, etc. use Neovim) - Plugins: git, zsh-autosuggestions
- Features:
- Instant prompt for fast shell startup
- Fish-like autosuggestions
- Customized PATH (includes bun, pnpm, Python, Homebrew)
- Claude Code work profile alias:
claude-work
Configuration files:
.zshrc- Main shell configuration.zprofile- Login shell PATH setup.p10k.zsh- Powerlevel10k theme customization
All shell configurations are version controlled and sync across machines!
bash scripts/install.sh installs Nix if absent, enables flakes, and invokes
the Home Manager app selected by this flake. The profile provisions shared
Darwin/Linux system commands (see pkgs/tool-checks.json), dotfiles and
Nix-managed tmux plugins. It writes ~/.config/dev-config/native-tools and
calls ai/bootstrap.sh install for enabled native CLIs, including Rex Worktrees
on the personal Mac and headless Rex profiles. Existing working installations
are preserved; Rex Worktrees uses verified GitHub release archives for
macOS arm64 and Linux x64, not npm or a Nix-built binary. Its managed launcher
is ~/.local/bin/rex-worktrees; native settings/OAuth remain separate. Skill
sync fills individual links while preserving entire physical user skill
directories, edited skills and unmanaged links; only recorded owned links
still pointing at their previous target can
advance.
bash ai/bootstrap.sh check # selected executables, not provider authorization
bash ai/bootstrap.sh update # deliberate native upgrades, not a startup hookWith no local enabled-tools manifest the bootstrap selects the original six;
explicit tool names override that selection. Rex Worktrees is opt-in and the
selected profiles add it as a seventh tool. Native OAuth enrollment and MCP
child credentials are separate steps. flake.lock governs Nix sources, not
the latest native release; plugin and system flake updates are deliberate.
Mac host extras are opt-in via pkgs/Brewfile, not installed by Nix
activation. Existing helm@3 is left in place, not a fresh-host version pin.
Held third-party package sources are not automatically trusted or installed.
The installer does not silently switch the default shell, install Homebrew,
or overwrite existing conflicting dotfiles. Do not treat package presence
as proof of authorization; verify the intended account/team/project
separately. See Configuration for explicit MCP
credential sources and native Vercel versus MCP identities.
Simply edit files in ~/Projects/dev-config/:
# Edit Neovim config
nvim ~/Projects/dev-config/nvim/init.lua
# Edit tmux config
nvim ~/Projects/dev-config/tmux/tmux.conf
# Edit Ghostty config
nvim ~/Projects/dev-config/ghostty/config
# Edit shell configs
nvim ~/Projects/dev-config/zsh/.zshrc # Main shell config
nvim ~/Projects/dev-config/zsh/.zprofile # Login shell config
nvim ~/Projects/dev-config/zsh/.p10k.zsh # Powerlevel10k themeChanges take effect immediately (Neovim requires restart, shell requires source ~/.zshrc).
cd ~/Projects/dev-config
git add .
git commit -m "Add custom keybinding"
git push origin mainOn a machine with this repo installed, pull reviewed source changes, then deliberately activate the selected profile:
cd ~/Projects/dev-config
git pull
nix run .#home-manager -- switch --flake .Upgrade native CLIs separately with bash ai/bootstrap.sh update. Neither
command supplies provider OAuth or MCP child credentials.
scripts/install.sh bootstraps Nix and activates the flake-selected Home
Manager profile; it is not a standalone symlink/backup installer.
bash scripts/install.shai/bootstrap.sh install|update|check [tool ...] owns writable native CLI
provisioning. scripts/README.md documents the installer and safe
non-activating verification commands. Do not run old symlink
uninstall.sh/update.sh procedures for Home Manager profiles.
After Home Manager activation, update-neovim-plugins updates configured
plugins manually; launchd on macOS and a systemd user timer on Linux run it
daily. Lazy writes the local lock to $XDG_STATE_HOME/nvim/lazy-lock.json
(normally ~/.local/state/nvim/lazy-lock.json), not this repository. Plugin
branch/version bounds still apply. The updater does not activate Home Manager
or update Nix-managed tools. Headless Linux containers without a user systemd
manager need a manual run or their own scheduler.
dev-config/
├── README.md # This file
├── .gitignore # Ignore swap files, .DS_Store
├── nvim/ # Neovim configuration
│ ├── init.lua # Main config file
│ ├── lua/
│ │ ├── custom/
│ │ │ └── plugins/
│ │ │ └── diagnostics-copy.lua # Diagnostic clipboard feature
│ │ └── kickstart/ # Kickstart.nvim modules
│ ├── update-plugins.lua # Headless Lazy updater (local lock in XDG state)
│ └── .stylua.toml # Lua formatter config
├── tmux/
│ └── tmux.conf # Tmux configuration
├── ghostty/
│ └── config # Ghostty terminal configuration
├── zsh/ # Shell configuration
│ ├── .zshrc # Main zsh config (Oh My Zsh, plugins, aliases)
│ ├── .zprofile # Login shell config (PATH settings)
│ └── .p10k.zsh # Powerlevel10k theme configuration
├── biome/ # Biome linting configuration
│ ├── biome.json # Strict rules (80+ enabled) - source of truth
│ └── gritql-patterns/ # Custom GritQL lint patterns
├── scripts/
│ ├── install.sh # Create symlinks
│ ├── uninstall.sh # Remove symlinks
│ └── update.sh # Pull and reload
└── docs/
├── NEOVIM.md # Complete Neovim keybinding reference
└── TMUX.md # Complete tmux keybinding reference
Verify symlinks:
ls -la ~/.config/nvim
ls -la ~/.tmux.conf
ls -la ~/Library/Application\ Support/com.mitchellh.ghostty/config
ls -la ~/.zshrc
ls -la ~/.zprofile
ls -la ~/.p10k.zshAll should show -> pointing to ~/Projects/dev-config/.
- Ensure symlink is correct
- Restart Neovim completely
- Run
:Lazy syncto reinstall plugins
Reload tmux config:
tmux source-file ~/.tmux.confOr restart tmux:
tmux kill-server- Ensure you're in a file with LSP diagnostics
- Check that custom module exists:
ls ~/Projects/dev-config/nvim/lua/custom/plugins/diagnostics-copy.lua - Check for Lua errors:
:messagesin Neovim
Run the validation script to diagnose:
cd ~/Projects/dev-config
bash scripts/validate.shThis checks:
- Repository structure
- Symlinks
- Core dependencies (git, zsh, neovim, tmux, fzf, ripgrep, lazygit)
- Tool versions (Neovim ≥ 0.9.0, tmux ≥ 1.9)
- Oh My Zsh, Powerlevel10k, tmux plugins (Nix store)
- Provides actionable fix suggestions
Check LSP server status:
:LspInfo " Show connected LSP servers
:checkhealth " Full diagnostic checkCommon issues:
- LSP server missing: Check the Home Manager Neovim wrapper's PATH and the package declaration in
modules/home-manager/programs/neovim.nix; standalone users must install the executable themselves. - Node.js required: Some LSP servers need Node.js (install with
brew install nodeorapt install nodejs) - Python required:
pyrightneeds Python (usually pre-installed)
Ensure C compiler is installed:
# macOS
xcode-select --install
# Linux (Debian/Ubuntu)
sudo apt install build-essential
# Then reinstall parsers
nvim --headless "+TSInstall all" +qaImageMagick required:
# macOS
brew install imagemagick
# Linux
sudo apt install imagemagickInstall Mermaid CLI:
npm add -g @mermaid-js/mermaid-cli
# Verify
mmdc --versionInstall and authenticate GitHub CLI:
# macOS
brew install gh
# Linux (Debian/Ubuntu)
sudo apt install gh
# Authenticate
gh auth loginThen in Neovim:
<leader>gp- List PRs<leader>gi- List issues
This is a personal configuration repository, but feel free to fork and adapt for your own use!
If you find a bug or have a suggestion:
- Open an issue
- Submit a pull request
- Or just fork and customize for yourself
MIT License - See LICENSE for details.
- Kickstart.nvim - Neovim base config
- Catppuccin - Color scheme
- tmux-plugins - Tmux plugin ecosystem