{ config, pkgs, inputs, ... }: { imports = [ inputs.nixvim.homeManagerModules.nixvim ]; programs.nixvim = { performance.combinePlugins.enable = false; performance.byteCompileLua.enable = true; performance.byteCompileLua.nvimRuntime = true; performance.byteCompileLua.plugins = true; enable = true; defaultEditor = true; colorschemes.gruvbox.enable = true; extraPlugins = [ pkgs.vimPlugins.todo-txt-vim ]; plugins = { flash.enable = true; oil.enable = true; neogit.enable = true; hardtime.enable = true; lsp = { enable = true; servers = { tsserver.enable = true; # TS/JS biome.enable = true; # TS/JS pyright.enable = true; # Python ruff.enable = true; # python }; keymaps.lspBuf = { gd = { action = "definition"; desc = "Goto Definition"; }; gr = { action = "references"; desc = "Goto References"; }; gD = { action = "declaration"; desc = "Goto Declaration"; }; gI = { action = "implementation"; desc = "Goto Implementation"; }; gT = { action = "type_definition"; desc = "Type Definition"; }; K = { action = "hover"; desc = "Hover"; }; "rn" = { action = "rename"; desc = "Rename"; }; }; keymaps.extra = [ { action.__raw = "vim.lsp.buf.code_action"; key = "la"; } { action.__raw = "function() vim.lsp.buf.format { async = true } end"; key = "lf"; } ]; keymaps.diagnostic = { "cd" = { action = "open_float"; desc = "Line Diagnostics"; }; "[d" = { action = "goto_next"; desc = "Next Diagnostic"; }; "]d" = { action = "goto_prev"; desc = "Previous Diagnostic"; }; }; }; trouble.enable = true; cmp = { enable = true; autoEnableSources = true; settings = { sources = [ { name = "nvim_lsp"; } { name = "nvim_lua"; } { name = "emoji"; } { name = "emoji"; } { name = "buffer"; option.get_bufnrs.__raw = "vim.api.nvim_list_bufs"; keywordLength = 3; } { name = "path"; keywordLength = 3; } { name = "luasnip"; keywordLength = 3; } ]; window = { # completion = { border = "solid"; }; # documentation = { border = "solid"; }; }; mapping = { "" = "cmp.mapping.select_next_item()"; "" = "cmp.mapping.select_prev_item()"; "" = "cmp.mapping.abort()"; "" = "cmp.mapping.scroll_docs(-4)"; "" = "cmp.mapping.scroll_docs(4)"; "" = "cmp.mapping.complete()"; "" = "cmp.mapping.confirm({ select = true })"; "" = "cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true })"; }; }; }; cmp-nvim-lsp.enable = true; cmp-nvim-lua.enable = true; cmp-buffer.enable = true; cmp-path.enable = true; cmp_luasnip.enable = true; cmp-cmdline.enable = true; nvim-tree = { enable = true; view.side = "right"; updateFocusedFile.enable = true; }; luasnip.enable = true; bufferline.enable = true; treesitter = { enable = true; folding = true; settings = { ensure_installed = "all"; highlight.enable = true; indent.enable = true; }; }; treesitter-context.enable = true; treesitter-textobjects.enable = true; ts-autotag.enable = true; which-key.enable = true; telescope = { enable = true; extensions.fzf-native.enable = true; settings = { defaults = { mappings = { i = { "".__raw = "require('trouble.sources.telescope').open"; }; n = { "".__raw = "require('trouble.sources.telescope').open"; }; }; }; }; }; project-nvim = { enable = true; enableTelescope = true; }; }; opts = { number = true; relativenumber = true; signcolumn = "yes"; updatetime = 250; undofile = true; ignorecase = true; smartcase = true; swapfile = false; foldlevel = 9; smartindent = true; tabstop = 2; shiftwidth = 2; softtabstop = 0; expandtab = true; smarttab = true; scrolloff = 5; termguicolors = true; }; globals = { mapleader = " "; maplocalleader = " "; }; keymaps = [ { action = ":"; key = ";"; mode = [ "n" ]; } # { action = "gj"; key = "j"; mode = [ "n" ]; } # { action = "gk"; key = "k"; mode = [ "n" ]; } { action = ""; key = "jk"; mode = [ "i" ]; } { action = "Telescope find_files"; key = ""; options.desc = "Find Files"; } { action = "Telescope live_grep"; key = "fg"; options.desc = "Grep";} { action = "Telescope buffers"; key = "fb"; options.desc = "Find Buffers";} { action = "Telescope projects"; key = "pp"; options.desc = "Switch Projects";} { action = "Trouble diagnostics toggle"; key = "tr"; } { action = "Neogit"; key = "gg"; options.desc = "Open Git"; } { action = "NvimTreeToggle"; key = "tt"; options.desc = "Tree View";} { action.__raw = "function() require('flash').jump() end"; key = "s"; mode = [ "n" "x" "o" ]; options.desc = "Flash"; } { action.__raw = "function() require('flash').treesitter() end"; key = "S"; mode = [ "n" "x" "o" ]; options.desc = "Flash Treesitter"; } { action.__raw = "function() require('flash').remote() end"; key = "r"; mode = [ "o" ]; options.desc = "Remote Flash"; } { action.__raw = "function() require('flash').treesitter_search() end"; key = "R"; mode = [ "o" ]; options.desc = "Treesitter Search"; } ]; }; }