{ lib, config, ... }: { options = { custom.neovim.enable = lib.mkEnableOption "My neovim config"; }; config = lib.mkIf config.custom.neovim.enable { home = { sessionVariables = { EDITOR = "nvim"; }; }; programs.nixvim = { enable = true; plugins = { dropbar.enable = true; lspconfig.enable = true; guess-indent.enable = true; oil.enable = true; mini-statusline.enable = true; mini-pairs.enable = true; mini-pick.enable = true; mini-diff.enable = true; mini-indentscope.enable = true; mini-surround.enable = true; ts-autotag.enable = true; blink-cmp = { enable = true; settings = { signature = { enabled = true; }; }; }; treesitter = { enable = true; highlight.enable = true; indent.enable = true; }; harpoon.enable = true; dap.enable = true; dap-virtual-text.enable = true; dap-view = { enable = true; settings = { winbar = { default_section = "scopes"; }; }; }; dap-python.enable = true; hydra = { enable = true; hydras = [ { body = "d"; config = { color = "pink"; hint = { hide_on_load = true; }; on_enter = '' function() require("dap-view").open() end ''; on_exit = '' function() require("dap-view").close() end ''; }; heads = [ [ "o" "" ] [ "c" "DapContinue" ] [ "b" "DapToggleBreakpoint" ] [ "n" "DapStepOver" ] [ "i" "DapStepInto" ] [ "x" "DapDisconnect" ] [ "t" { __raw = '' function() test_method() end ''; } ] ]; } ]; }; }; keymaps = [ { action = "Oil"; key = "o"; } { action = "lua require('mini.pick').builtin.files()"; key = "f"; } { action = "lua require('mini.pick').builtin.grep_live()"; key = "g"; } { action = "lua require('mini.pick').builtin.help()"; key = "h"; } { action = "lua require('mini.pick').builtin.resume()"; key = "r"; } { action = "lua vim.lsp.buf.format()"; key = "i"; } { action = "lua vim.lsp.buf.code_action()"; key = "a"; } { action = "lua vim.diagnostic.goto_prev({ float = true })"; key = "[d"; } { action = "lua vim.diagnostic.goto_next({ float = true })"; key = "]d"; } { action = "lua vim.diagnostic.setqflist()"; key = "q"; } { action = "lua require('harpoon'):list():add()"; key = "k"; } { action = "lua require('harpoon'):list():select(1)"; key = ""; } { action = "lua require('harpoon'):list():select(2)"; key = ""; } { action = "lua require('harpoon'):list():select(3)"; key = ""; } { action = "lua require('harpoon'):list():select(4)"; key = ""; } { action = "lua require('harpoon').ui:toggle_quick_menu(require('harpoon'):list())"; key = "j"; } { action = "CopyRelativePath"; key = "p"; } ]; globals.mapleader = " "; opts = { number = true; relativenumber = true; ignorecase = true; smartcase = true; swapfile = false; exrc = true; }; colorschemes.catppuccin.enable = true; clipboard.register = "unnamedplus"; userCommands = { CopyRelativePath = { command = "call setreg('+', expand('%'))"; }; }; lsp.servers = { basedpyright.enable = true; gopls.enable = true; nil_ls.enable = true; rust_analyzer.enable = true; html.enable = true; jsonls.enable = true; yamlls.enable = true; cssls.enable = true; tailwindcss.enable = true; vtsls.enable = true; }; }; }; }