diff --git a/kat/users/default.nix b/kat/users/default.nix index ea85066..68d5038 100644 --- a/kat/users/default.nix +++ b/kat/users/default.nix @@ -1,4 +1,4 @@ -{ config, sources, ... }: +{ config, sources, pkgs, ... }: let zsh = import ./zsh.nix; in @@ -15,7 +15,10 @@ in # ssh = mkEnableOption "ssh configuration"; # }; config = { - home.stateVersion = config.system.stateVersion; + home = { + stateVersion = config.system.stateVersion; + packages = [ pkgs.rlwrap ]; + }; }; } ]; diff --git a/kat/users/neovim.nix b/kat/users/neovim.nix index 6b9f46c..4c4690f 100644 --- a/kat/users/neovim.nix +++ b/kat/users/neovim.nix @@ -4,6 +4,208 @@ ... }: with lib; +let + basecfg = { + enable = true; + defaultEditor = true; + vimdiffAlias = true; + vimAlias = true; + viAlias = true; + colorschemes.dracula-nvim = { + enable = true; + settings = { + colors = { + bg = "#000000"; + black = "#000000"; + }; + transparent_bg = true; + overrides.__raw = '' + function (colors) return { + LineNr = { bg = "#181818", fg = colors.purple }, + CursorLine = { }, + CursorLineNr = { fg = "#FFFF00", bg = colors.black, bold = true }, + StatusLine = { fg = colors.bright_white, bg = colors.black }, + } end + ''; + }; + }; + + opts = { + foldlevelstart = 99; + number = true; + relativenumber = true; + cursorline = true; + tabstop = 2; + shiftwidth = 2; + expandtab = true; + }; + globals.mapleader = ","; + + autoCmd = [ + { + command = "set relativenumber"; + event = [ "InsertLeave" ]; + } + { + command = "set norelativenumber"; + event = [ "InsertEnter" ]; + } + ]; + + keymaps = [ + { + action = ":set number!"; + key = ""; + } + { + action = ":set relativenumber!"; + key = ""; + } + { + action = ''"*ygv''; + key = ""; + mode = [ "v" ]; + } + ]; + + plugins = { + nix.enable = true; + + treesitter = { + enable = true; + folding = true; + settings.highlight.enable = true; + }; + + telescope = { + enable = true; + keymaps = { + "ff".action = "find_files"; + "fg".action = "live_grep"; + "fb".action = "buffers"; + }; + settings.pickers.buffers.mappings = rec { + i."".__raw = "require('telescope.actions').delete_buffer"; + n = i; + }; + }; + + web-devicons.enable = true; + + which-key = { + enable = true; + settings.triggers = + [ + { + __unkeyed-1 = ""; + mode = "nxsot"; + } + { + __unkeyed-1 = "f"; + mode = "nxsot"; + } + ]; + }; + + todo-comments = { + enable = true; + keymaps.todoTelescope.key = "ft"; + }; + + markview.enable = true; + + nvim-surround.enable = true; + }; + }; + adv-editor = { + plugins = { + which-key.settings.spec = [ + { + __unkeyed = "l"; + desc = "Lsp keymaps"; + } + { + __unkeyed = "lK"; + desc = "Hover information"; + } + { + __unkeyed = "la"; + desc = "Apply code action"; + } + { + __unkeyed = "ls"; + desc = "Show signature help"; + } + { + __unkeyed = "lg"; + desc = "Go to"; + } + { + __unkeyed = "lgD"; + desc = "References"; + } + { + __unkeyed = "lgd"; + desc = "Definition"; + } + { + __unkeyed = "lgi"; + desc = "Implementation"; + } + { + __unkeyed = "lgt"; + desc = "Type definition"; + } + ]; + + lsp-lines.enable = true; + + lsp = { + enable = true; + keymaps = { + diagnostic = { + "lj" = "goto_next"; + "lk" = "goto_prev"; + }; + lspBuf = { + "lK" = "hover"; + "la" = "code_action"; + "ls" = "signature_help"; + "lgD" = "references"; + "lgd" = "definition"; + "lgi" = "implementation"; + "lgt" = "type_definition"; + }; + extra = [ + { + action = "LspStop"; + key = "lx"; + } + { + action = "LspStart"; + key = "ls"; + } + { + action = "LspRestart"; + key = "lr"; + } + ]; + }; + servers = { + nixd.enable = true; + pylsp.enable = true; + clangd.enable = true; + ltex.enable = true; + rust_analyzer = { + enable = true; + installCargo = true; + installRustc = true; + }; + }; + }; + }; + }; +in { options.kat.neovim = { enable = mkEnableOption "neovim configuration" // { @@ -12,136 +214,9 @@ with lib; lsp = mkEnableOption "neovim LSPs"; }; config = mkIf config.kat.neovim.enable { - programs.nixvim = { - enable = true; - defaultEditor = true; - vimdiffAlias = true; - vimAlias = true; - viAlias = true; - colorschemes.dracula-nvim = { - enable = true; - settings = { - colors = { - bg = "#000000"; - black = "#000000"; - }; - transparent_bg = true; - overrides.__raw = '' - function (colors) return { - LineNr = { bg = "#181818", fg = colors.purple }, - CursorLine = { }, - CursorLineNr = { fg = "#FFFF00", bg = colors.black, bold = true }, - StatusLine = { fg = colors.bright_white, bg = colors.black }, - } end - ''; - }; - }; - - opts = { - foldlevelstart = 99; - number = true; - relativenumber = true; - cursorline = true; - tabstop = 2; - shiftwidth = 2; - expandtab = true; - }; - - autoCmd = [ - { - command = "set relativenumber"; - event = [ "InsertLeave" ]; - } - { - command = "set norelativenumber"; - event = [ "InsertEnter" ]; - } - ]; - - keymaps = [ - { - action = ":set number!"; - key = ""; - } - { - action = ":set relativenumber!"; - key = ""; - } - { - action = ''"*ygv''; - key = ""; - mode = [ "v" ]; - } - ]; - - plugins = { - nix.enable = true; - - treesitter = { - enable = true; - folding = true; - settings.highlight.enable = true; - }; - - telescope = { - enable = true; - keymaps = { - "ff".action = "find_files"; - "fg".action = "live_grep"; - "fb".action = "buffers"; - }; - settings.pickers.buffers.mappings = rec { - i."".__raw = "require('telescope.actions').delete_buffer"; - n = i; - }; - }; - - web-devicons.enable = true; - - lsp = mkIf config.kat.neovim.lsp { - enable = true; - keymaps = { - diagnostic = { - "lj" = "goto_next"; - "lk" = "goto_prev"; - }; - lspBuf = { - K = "hover"; - lgD = "references"; - lgd = "definition"; - lgi = "implementation"; - lgt = "type_definition"; - la = "code_action"; - ls = "signature_help"; - }; - extra = [ - { - action = "LspStop"; - key = "lx"; - } - { - action = "LspStart"; - key = "ls"; - } - { - action = "LspRestart"; - key = "lr"; - } - ]; - }; - servers = { - nixd.enable = true; - pylsp.enable = true; - clangd.enable = true; - ltex.enable = true; - rust_analyzer = { - enable = true; - installCargo = true; - installRustc = true; - }; - }; - }; - }; - }; + programs.nixvim = mkMerge [ + basecfg + (mkIf config.kat.neovim.lsp adv-editor) + ]; }; }