My custom ghostty + neovim + tmux dotfiles
  • Lua 92.3%
  • Shell 7.7%
Find a file
2026-05-27 15:57:08 -04:00
fish Fix mousewheel scroll - limit to ~3 lines at a time 2026-05-25 19:25:57 -04:00
ghostty feat(nvim,ghostty,wezterm): restore nvim-tree sidebar and add Nerd Font fallback 2026-05-27 15:57:08 -04:00
lazygit Add Claude commit message generation + update README 2026-05-25 20:01:49 -04:00
nvim feat(nvim,ghostty,wezterm): restore nvim-tree sidebar and add Nerd Font fallback 2026-05-27 15:57:08 -04:00
tmux Initial dotfiles — nvim, tmux, ghostty, fish 2026-05-25 00:40:39 -04:00
wezterm feat(nvim,ghostty,wezterm): restore nvim-tree sidebar and add Nerd Font fallback 2026-05-27 15:57:08 -04:00
yazi feat(nvim,wezterm,yazi): add package-info plugin, remap split key, add yazi config 2026-05-27 09:39:26 -04:00
README.md feat(nvim): replace nvim-tree/notify/ibl with snacks.nvim, add claudecode and markdown-preview 2026-05-26 11:47:40 -04:00

neovim-dotfiles

My personal Neovim + Ghostty dotfiles. Built around a custom Neovim distro called Phosphor using the Phosphor Ember Dusk colorscheme.

Stack

  • Editor: Neovim 0.11+ with lazy.nvim
  • Colorscheme: Phosphor Ember Dusk (custom lush.nvim theme)
  • Terminal: Ghostty
  • Shell: fish
  • File Manager: Yazi
  • Fonts: Monaspace Radon (primary) + Monaspace Xenon (italic/bold)

Prerequisites

Install these before setting up the dotfiles.

Neovim 0.11+

# Arch/CachyOS
sudo pacman -S neovim

# macOS
brew install neovim

Core tools

# Arch/CachyOS
sudo pacman -S git curl unzip ripgrep fd tree-sitter-cli nodejs npm lazygit wl-clipboard

# macOS
brew install git curl ripgrep fd node lazygit

Rust

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# fish shell — add cargo to PATH
fish_add_path ~/.cargo/bin

Go

# Arch/CachyOS
sudo pacman -S go

# macOS
brew install go

Yazi (file manager)

# Arch/CachyOS
cargo install yazi-fm yazi-cli

# macOS
brew install yazi

Ghostty

Download from https://ghostty.org/download

Monaspace Fonts

# Arch/CachyOS (AUR)
paru -S otf-monaspace
# or
yay -S otf-monaspace

# macOS
brew install --cask font-monaspace

# Manual (all platforms)
# Download from https://github.com/githubnext/monaspace/releases/latest
# Copy OTF files to:
#   Linux: ~/.local/share/fonts/ then run fc-cache -fv
#   macOS: ~/Library/Fonts/

Additional formatters

# stylua (Lua formatter)
cargo install stylua

# ruff (Python formatter/linter)
# Arch/CachyOS
sudo pacman -S ruff
# or: pip install ruff

# goimports (Go formatter)
go install golang.org/x/tools/cmd/goimports@latest

# prettier (JS/TS/CSS/HTML formatter) — installed via Mason automatically

Installation

1. Clone the repo

git clone ssh://git.codeni.wiki:2222/codeni/neovim-dotfiles.git ~/nvim-dotfiles
# Neovim
ln -s ~/nvim-dotfiles/nvim ~/.config/nvim

# Ghostty
mkdir -p ~/.config/ghostty
ln -s ~/nvim-dotfiles/ghostty/config ~/.config/ghostty/config

# fish
mkdir -p ~/.config/fish
ln -s ~/nvim-dotfiles/fish/config.fish ~/.config/fish/config.fish

# Yazi theme
mkdir -p ~/.config/yazi
ln -s ~/nvim-dotfiles/yazi/theme.toml ~/.config/yazi/theme.toml

3. Install the Claude commit message script

Requires Claude Code CLI (claude) to be installed and authenticated.

mkdir -p ~/.local/bin
cp ~/nvim-dotfiles/lazygit/claude-commit.sh ~/.local/bin/claude-commit
chmod +x ~/.local/bin/claude-commit

# Add ~/.local/bin to PATH (fish)
fish_add_path ~/.local/bin

Then symlink the LazyGit config — path differs by OS:

# macOS
mkdir -p ~/Library/Application\ Support/lazygit
ln -s ~/nvim-dotfiles/lazygit/config.yml ~/Library/Application\ Support/lazygit/config.yml

# Linux
mkdir -p ~/.config/lazygit
ln -s ~/nvim-dotfiles/lazygit/config.yml ~/.config/lazygit/config.yml

Inside LazyGit, press G in the files panel with staged changes to generate a commit message via Claude Code. You'll be prompted to accept (y), edit (e), or abort (n).

4. First launch

nvim

Lazy.nvim will bootstrap and install all plugins automatically. Wait for it to complete, then:

:TSUpdate        — install treesitter parsers
:Copilot auth    — authenticate GitHub Copilot (follow browser flow)

Mason will auto-install LSP servers and formatters in the background.


Usage

Workflow

Open Ghostty, cd into your project, open nvim. For a terminal alongside nvim, open a Ghostty split manually (Cmd+D on macOS). Ghostty inherits the working directory automatically.

Neovim keybinds

Leader key: Space

Files & Navigation

Key Action
<leader>e Open Yazi (current file)
<leader>E Open Yazi (cwd)
<leader>ff Fuzzy find files
<leader>fg Live grep
<leader>fb Find buffers
<leader>fr Recent files
<leader>fs Document symbols
<leader>fS Workspace symbols
<leader>fd Document diagnostics
<leader>fD Workspace diagnostics
Tab Next buffer
Shift+Tab Previous buffer
<leader>bd Delete buffer

Claude Code

Key Action
<leader>cc Toggle Claude Code panel
<leader>cs Send selection to Claude (visual)
<leader>cf Focus Claude Code panel

LSP

Key Action
gd Go to definition
gD Go to declaration
gr Go to references
gi Go to implementation
K Hover documentation
<leader>lr Rename symbol
<leader>la Code actions
<leader>lf Format buffer

Git

Key Action
<leader>gg Open LazyGit
<leader>gs Git status (fzf)
<leader>gc Git commits (fzf)
]h Next hunk
[h Previous hunk
<leader>ghs Stage hunk
<leader>ghr Reset hunk
<leader>gb Toggle line blame

Editing

Key Action
Ctrl+a Accept Copilot suggestion
> (visual) Indent (stay in visual)
< (visual) Unindent (stay in visual)
gcc Toggle line comment
gc (visual) Toggle comment
sa Add surrounding
sd Delete surrounding
sr Replace surrounding
Key Action
Enter Accept completion
Ctrl+j Next item
Ctrl+k Previous item
Ctrl+Space Show/hide completion
Ctrl+e Hide completion

Markdown

Key Action
<leader>mp Toggle browser markdown preview

Languages Supported

Language LSP Formatter Linter
JavaScript ts_ls Prettier eslint_d
TypeScript ts_ls Prettier eslint_d
Svelte svelte Prettier eslint_d
Python pyright ruff ruff
Rust rust_analyzer rustfmt
Go gopls goimports + gofmt golangcilint
Lua lua_ls stylua
HTML html Prettier
CSS/SCSS cssls + tailwindcss Prettier
JSON/JSONC jsonls Prettier
YAML yamlls Prettier

Platform Notes

Linux (Arch/CachyOS)

  • Clipboard requires wl-clipboard (Wayland): sudo pacman -S wl-clipboard
  • tree-sitter-cli required for building parsers: sudo pacman -S tree-sitter-cli
  • Set TMUX_TMPDIR=/tmp in fish config to prevent log files in cwd
  • Claude Code binary path: ~/.local/bin/claude

macOS

  • Ghostty: macos-titlebar-style = transparent in ghostty config
  • No wl-clipboard needed — macOS clipboard works natively
  • Alt key for pane navigation: add macos-option-as-alt = left to ghostty config
  • LazyGit config path: ~/Library/Application Support/lazygit/config.yml
  • Claude Code binary path: ~/.local/bin/claude