{ 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 = { neogit.enable = true; dropbar.enable = true; lspconfig.enable = true; guess-indent.enable = true; gitsigns = { enable = true; settings = { sign_priority = 15; }; }; oil.enable = true; trouble.enable = true; web-devicons.enable = true; lualine.enable = true; mini-pairs.enable = true; snacks = { enable = true; settings = { picker = { ui_select = true; actions = { __raw = "require('trouble.sources.snacks').actions"; }; win.input.keys = { "" = { __unkeyed = "trouble_open"; mode = [ "n" "i" ]; }; }; }; }; }; 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() debug_current_test() end ''; } ] ]; } ]; }; }; keymaps = [ { key = "o"; action = "Oil"; } { key = "f"; action = "lua require('snacks').picker.files()"; } { key = "l"; action = "lua require('snacks').picker.grep()"; } { key = "h"; action = "lua require('snacks').picker.help()"; } { key = "r"; action = "lua require('snacks').picker.resume()"; } { key = "i"; action = "lua vim.lsp.buf.format()"; } { key = "a"; action = "lua vim.lsp.buf.code_action()"; } { key = "[d"; action = "lua vim.diagnostic.goto_prev({ float = true })"; } { key = "]d"; action = "lua vim.diagnostic.goto_next({ float = true })"; } { key = "q"; action = "Trouble diagnostics"; } { key = "k"; action = "lua require('harpoon'):list():add()"; } { key = ""; 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 = "j"; action = "lua require('harpoon').ui:toggle_quick_menu(require('harpoon'):list())"; } { key = "p"; action = "CopyRelativePath"; } { key = "go"; action = "Neogit"; } { key = "gb"; action = "Gitsigns blame"; } { key = "gd"; action = "Gitsigns diffthis"; } { key = "grr"; action = "Trouble lsp_references toggle focus=true"; } { key = "gd"; action = "Trouble lsp_definitions toggle focus=true"; } { key = "gi"; action = "Trouble lsp_implementations toggle focus=true"; } { key = "gy"; action = "Trouble lsp_type_definitions toggle focus=true"; } ]; globals.mapleader = " "; opts = { number = true; relativenumber = true; ignorecase = true; smartcase = true; swapfile = false; exrc = true; }; colorschemes.catppuccin = { enable = true; settings = { custom_highlights = { __raw = '' function(colors) return { LineNr = { fg = colors.subtext0 }, } end ''; }; }; }; 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; lua_ls.enable = true; }; }; }; }