From e997a83c93100ec4ccc8d2ef5753bf31b0426bb5 Mon Sep 17 00:00:00 2001 From: DannyDannyDanny Date: Mon, 30 Mar 2026 18:03:37 +0200 Subject: [PATCH] refactor(neovim): migrate to extraLuaConfig :art: Move Lua config out of VimScript heredoc into proper extraLuaConfig. Use vim.opt and vim.keymap.set instead of legacy set/nnoremap. Keep VimScript only for settings that are simpler in vim (colorscheme, netrw, let g: vars). --- nixos/neovim.nix | 88 +++++++++++++++++++++--------------------------- 1 file changed, 38 insertions(+), 50 deletions(-) diff --git a/nixos/neovim.nix b/nixos/neovim.nix index ce8bb5c..8f65b29 100644 --- a/nixos/neovim.nix +++ b/nixos/neovim.nix @@ -4,74 +4,62 @@ programs.neovim = { enable = true; defaultEditor = true; - # TODO: refactor (some parts) to extraLuaConfig + + # VimScript settings (options that have no Lua equivalent or are simpler in vim) extraConfig = '' set title - set mouse=a set nohlsearch set number let mapleader="," - lua << EOF - local config_file = os.getenv("HOME")..'/.local/share/nvim_color_scheme' - local f = io.open(config_file, "r") - if f ~= nil then - local system_theme = f:read("*l") - io.close(f) - if system_theme then - system_theme = system_theme:gsub("^%s+", ""):gsub("%s+$", "") - end - if system_theme == 'dark' then - vim.cmd("set bg=dark") - elseif system_theme == 'light' then - vim.cmd("set bg=light") - else - print('warning: expected value "light" or "dark"') - print(' got:', system_theme) - print(' expected path:', config_file) - end - else - print('warning: nvim color scheme not found') - print(' expected path:', config_file) - end - EOF - - colorscheme catppuccin " catppuccin-latte, catppuccin-frappe, catppuccin-macchiato, catppuccin-mocha + colorscheme catppuccin " netrw (dir listing) settings let g:netrw_liststyle = 3 let g:netrw_banner = 0 let g:netrw_browse_split = 3 - let g:netrw_winsize = 25 " % of page + let g:netrw_winsize = 25 + ''; - set listchars=tab:→\ ,space:·,nbsp:␣,trail:•,eol:¶,precedes:«,extends:» - set clipboard+=unnamedplus + extraLuaConfig = '' + -- Auto-detect system theme (dark/light) from marker file + local config_file = os.getenv("HOME") .. "/.local/share/nvim_color_scheme" + local f = io.open(config_file, "r") + if f then + local theme = f:read("*l") + f:close() + if theme then + theme = theme:gsub("^%s+", ""):gsub("%s+$", "") + end + if theme == "dark" or theme == "light" then + vim.opt.background = theme + else + vim.notify("nvim_color_scheme: expected 'light' or 'dark', got: " .. tostring(theme), vim.log.levels.WARN) + end + end - " Replace-all is aliased to S. - nnoremap S :%s//g + -- General options + vim.opt.mouse = "a" + vim.opt.listchars = { tab = "→ ", space = "·", nbsp = "␣", trail = "•", eol = "¶", precedes = "«", extends = "»" } + vim.opt.clipboard:append("unnamedplus") + vim.opt.spell = true + vim.opt.spelllang = "en_us" - " save file with ,w - map w :w - - " spellcheck - set spell spelllang=en_us - setlocal spell! spelllang=en_us + -- Keymaps + vim.keymap.set("n", "S", ":%s//g", { desc = "Replace all" }) + vim.keymap.set("n", "w", ":w", { desc = "Save file" }) ''; plugins = with pkgs.vimPlugins; [ - vim-surround # shortcuts for setting () {} etc. - vim-gitgutter # git diff in sign column - # vim-airline # nice and light status bar # doesn't work nicely with tmux - # coc-nvim coc-git coc-highlight coc-python coc-rls coc-vetur coc-vimtex coc-yaml coc-html coc-json # auto completion - vim-nix # nix highlight - # vimtex # latex stuff - disabled due to build check issue - fzf-lua # fuzzy finder through lua - nerdtree # file structure inside nvim - rainbow # color parenthesis - # gruvbox-nvim # theme + vim-surround # shortcuts for setting () {} etc. + vim-gitgutter # git diff in sign column + vim-nix # nix highlight + fzf-lua # fuzzy finder through lua + nerdtree # file structure inside nvim + rainbow # color parenthesis catppuccin-nvim # theme - goyo-vim # write prose - limelight-vim # prose paragraph highlighter + goyo-vim # write prose + limelight-vim # prose paragraph highlighter ]; }; }