{ pkgs, config, lib, ... }: let inherit (config.grimmShared) enable tooling; inherit (lib) mkOption types getExe mkIf concatLines ; in { config = mkIf (enable && tooling.enable) { environment.systemPackages = with pkgs; [ dos2unix neovim-remote ]; programs.git.config.core.editor = getExe pkgs.neovim; grimmShared.tooling.nvim = { plugins = with pkgs.vimPlugins; [ vim-monokai-pro ]; # extraLuaRC = [ "vim.lsp.inlay_hint.enable(true)" ]; }; programs.neovim = { enable = true; viAlias = true; defaultEditor = true; withPython3 = true; configure = { customRC = let luarc = pkgs.writeText "init.lua" (concatLines tooling.nvim.extraLuaRC); in '' set number set hidden set fileencodings=utf-8 set nocompatible set clipboard+=unnamedplus set ff=unix set termguicolors colorscheme monokai_pro hi Normal guibg=NONE ctermbg=NONE hi NonText guibg=NONE ctermbg=NONE " Toggle transparent background let t:is_transparent = 1 function! Toggle_transparent() if t:is_transparent == 0 hi Normal guibg=NONE ctermbg=NONE hi NonText guibg=NONE ctermbg=NONE let t:is_transparent = 1 else set background=dark hi EndOfBuffer ctermfg=bg let t:is_transparent = 0 endif endfunction nnoremap : call Toggle_transparent() luafile ${luarc} if filereadable($HOME . "/.vimrc") source ~/.vimrc endif ''; packages.myVimPackage = { start = tooling.nvim.plugins; opt = [ ]; }; }; }; }; options.grimmShared.tooling.nvim = { plugins = mkOption { type = types.listOf types.package; default = [ ]; description = "Extra vim plugins to include"; }; extraLuaRC = mkOption { type = types.listOf types.nonEmptyStr; default = [ ]; description = "Extra init LUA scripts"; }; }; }