- Lua 92.3%
- Shell 7.7%
| fish | ||
| ghostty | ||
| lazygit | ||
| nvim | ||
| tmux | ||
| wezterm | ||
| yazi | ||
| README.md | ||
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
2. Symlink configs
# 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 |
Completion (blink.cmp)
| 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-clirequired for building parsers:sudo pacman -S tree-sitter-cli- Set
TMUX_TMPDIR=/tmpin fish config to prevent log files in cwd - Claude Code binary path:
~/.local/bin/claude
macOS
- Ghostty:
macos-titlebar-style = transparentin ghostty config - No
wl-clipboardneeded — macOS clipboard works natively - Alt key for pane navigation: add
macos-option-as-alt = leftto ghostty config - LazyGit config path:
~/Library/Application Support/lazygit/config.yml - Claude Code binary path:
~/.local/bin/claude