Skip to content

feat: neovim — explicit lazy.nvim config (no LazyVim)#3

Open
davidstosik wants to merge 4 commits intov5-reduxfrom
v5-redux-nvim
Open

feat: neovim — explicit lazy.nvim config (no LazyVim)#3
davidstosik wants to merge 4 commits intov5-reduxfrom
v5-redux-nvim

Conversation

@davidstosik
Copy link
Copy Markdown
Owner

What is this?

Neovim configuration using lazy.nvim (the plugin manager) directly, with every plugin explicitly configured. No LazyVim framework — full control, no hidden magic.

Note: This PR targets v5-redux and layers on top of the base dotfiles setup.

Plugins

Each plugin lives in its own file under config/nvim/lua/plugins/:

Plugin Purpose
Tokyo Night Colorscheme (matches tmux + Ghostty)
Telescope + fzf-native Fuzzy finder (files, grep, buffers, symbols)
Treesitter Syntax highlighting (Ruby, Lua, JS/TS, Bash, YAML, Markdown, etc.)
Mason + lspconfig LSP servers (ruby_lsp, lua_ls auto-installed)
nvim-cmp Completion (LSP, buffer, path, snippets with Tab)
Lualine Statusline
Oil.nvim File explorer (press - to browse filesystem)
Gitsigns Git gutter + hunk navigation
Fugitive :Git commands
Comment.nvim Toggle comments (gc/gcc)
nvim-surround Add/change/delete surrounding chars
nvim-autopairs Auto-close brackets/quotes
nvim-treesitter-endwise Auto-add end in Ruby/Lua
Trouble Better diagnostics list
Todo-comments Highlight TODO/FIXME in code
Which-key Keybinding hints popup
Indent blankline Visual indent guides
vim-sleuth Auto-detect indentation

Key mappings

  • Leader: , (comma)
  • C-p: Find files (Telescope)
  • <leader>fg: Live grep
  • <leader>fb: Buffers
  • -: Open file explorer (Oil)
  • gd/gr/K: LSP go-to-definition, references, hover
  • gc/gcc: Toggle comments
  • ]d/[d: Next/prev diagnostic

Structure

config/nvim/
├── init.lua              # lazy.nvim bootstrap
└── lua/
    ├── options.lua       # Editor options
    ├── keymaps.lua       # Key mappings
    ├── autocmds.lua      # Autocommands
    └── plugins/
        ├── init.lua          # lazy.nvim bootstrap + spec
        ├── colorscheme.lua   # Tokyo Night
        ├── telescope.lua     # Fuzzy finder
        ├── treesitter.lua    # Syntax highlighting
        ├── lsp.lua           # Language servers
        ├── completion.lua    # nvim-cmp
        ├── ui.lua            # Statusline, file explorer, git signs
        └── editor.lua        # Comments, pairs, surround, etc.

Commits

  1. feat: neovim — explicit lazy.nvim config (no LazyVim) — full neovim setup
  2. fix: enable treesitter-endwise in treesitter config — endwise needs explicit opt-in in treesitter setup

mitamae is a single static binary (mruby compiled in) that provides a
Chef-like DSL for package management. Its `package` resource auto-detects
the system package manager (Homebrew on macOS, apt on Linux), so one
recipe works everywhere.

bootstrap.sh downloads the right mitamae binary for the current platform
(macOS/Linux, x86_64/aarch64) and runs the recipe.

Packages installed: neovim, gh, tmux, ripgrep, fzf, mise.
Ghostty (brew cask) is macOS-only.

mitamae handles package installation; install.sh stays for symlinking.
Clean separation of concerns.
Complete Neovim configuration using lazy.nvim as plugin manager,
with every plugin explicitly configured. No LazyVim framework.

Structure:
  config/nvim/
  ├── init.lua           — entry point
  └── lua/
      ├── options.lua    — editor options
      ├── keymaps.lua    — key mappings
      ├── autocmds.lua   — autocommands
      └── plugins/
          ├── init.lua         — lazy.nvim bootstrap
          ├── colorscheme.lua  — Tokyo Night
          ├── telescope.lua    — fuzzy finder
          ├── treesitter.lua   — syntax highlighting
          ├── lsp.lua          — language servers (Mason + lspconfig)
          ├── completion.lua   — nvim-cmp
          ├── ui.lua           — lualine, oil.nvim, gitsigns, which-key, indent guides
          └── editor.lua       — comments, pairs, surround, endwise, fugitive, trouble

Plugin choices:
- Tokyo Night colorscheme (consistent with tmux + ghostty theme)
- Telescope with fzf-native (replaces fzf.vim from v3)
- Treesitter for Ruby, Lua, JS/TS, Bash, YAML, Markdown, and more
- LSP via Mason: ruby_lsp and lua_ls pre-configured
- nvim-cmp with Tab completion (LSP, buffer, path, snippets)
- Lualine statusline with Tokyo Night theme
- Oil.nvim as file explorer (press - to open parent dir)
- Gitsigns for git gutter decorations + hunk navigation
- vim-fugitive for :Git commands (carried from v1-v3 vim config)
- Comment.nvim (replaces vim-commentary from v3)
- nvim-surround, nvim-autopairs (replaces auto-pairs from v3)
- nvim-treesitter-endwise (replaces vim-endwise from v1-v3)
- Trouble for diagnostics list
- Todo-comments for TODO/FIXME highlighting
- Which-key for keybinding discovery
- vim-sleuth for auto-indentation detection (from v3)

Key mappings:
- Leader: , (comma, same as v1-v3 vim config)
- C-p: find files (same as v1-v3 vim config)
- Leader+f*: telescope pickers (files, grep, buffers, etc.)
- gd/gr/gi/K: LSP navigation
- Leader+ca: code action, Leader+rn: rename
- gc/gcc: toggle comments
- -: open file explorer (oil.nvim)
- ]/[h: next/prev git hunk
- Leader+xx: diagnostics list (Trouble)

Design decisions:
- No LazyVim — full control over every plugin and mapping
- Lazy-load where sensible (events, commands, keys) but don't be extreme
- Mason for LSP server management (auto-install, cross-platform)
- Oil.nvim over nvim-tree — lighter, feels more like editing a buffer
- Explicit over implicit — every option documented in its file
The endwise plugin requires explicit activation in the treesitter
setup opts, not just being listed as a dependency.
Adds the nvim symlink to install.sh and documents the neovim
plugin setup in README.md.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant