{ inputs, pkgs, config, lib, ... }: { imports = [ inputs.nixvim.homeManagerModules.nixvim ]; home.packages = with pkgs; [ alejandra ripgrep ]; programs.nixvim = { enable = true; package = inputs.neovim-nightly-overlay.packages.${pkgs.system}.default; defaultEditor = true; vimdiffAlias = true; colorschemes = { modus = { enable = true; }; }; globals = { mapleader = " "; maplocalleader = " "; }; opts = { number = true; relativenumber = true; mouse = "a"; showmode = false; laststatus = 3; swapfile = false; breakindent = true; undofile = true; ignorecase = true; smartcase = true; signcolumn = "yes"; updatetime = 50; timeoutlen = 300; inccommand = "split"; cursorline = true; scrolloff = 10; hlsearch = true; foldlevel = 99; }; keymaps = [ { mode = "n"; key = "fe"; action = "Oil"; } { mode = "n"; key = "ff"; action = "Pick files"; } { mode = "n"; key = "fg"; action = "Pick grep_live"; } { mode = "n"; key = "u"; action = "UndotreeToggle"; } { mode = "n"; key = "zf"; action = "ZkNotes"; } { mode = "n"; key = "zt"; action = "ZkTags"; } { mode = "n"; key = "zn"; action = "ZkNew"; } # quickfix/location list { mode = "n"; key = "]q"; action = "cnextzz"; } { mode = "n"; key = "[q"; action = "cprevzz"; } { mode = "n"; key = "]l"; action = "lnextzz"; } { mode = "n"; key = "[l"; action = "lprevzz"; } # gitsigns { mode = "n"; key = "]c"; action.__raw = '' function() if vim.wo.diff then vim.cmd.normal { ']c', bang = true } else require('gitsigns').nav_hunk 'next' end end ''; options = { desc = "Jump to next git [C]hange"; }; } { mode = "n"; key = "[c"; action.__raw = '' function() if vim.wo.diff then vim.cmd.normal { '[c', bang = true } else require('gitsigns').nav_hunk 'prev' end end ''; options = { desc = "Jump to previous git [C]hange"; }; } { mode = "v"; key = "hs"; action.__raw = '' function() require('gitsigns').stage_hunk { vim.fn.line '.', vim.fn.line 'v' } end ''; options = { desc = "stage git hunk"; }; } { mode = "v"; key = "hr"; action.__raw = '' function() require('gitsigns').reset_hunk { vim.fn.line '.', vim.fn.line 'v' } end ''; options = { desc = "reset git hunk"; }; } { mode = "n"; key = "hs"; action.__raw = '' function() require('gitsigns').stage_hunk() end ''; options = { desc = "git [s]tage hunk"; }; } { mode = "n"; key = "hr"; action.__raw = '' function() require('gitsigns').reset_hunk() end ''; options = { desc = "git [r]eset hunk"; }; } { mode = "n"; key = "hS"; action.__raw = '' function() require('gitsigns').stage_buffer() end ''; options = { desc = "git [S]tage buffer"; }; } { mode = "n"; key = "hu"; action.__raw = '' function() require('gitsigns').undo_stage_hunk() end ''; options = { desc = "git [u]ndo stage hunk"; }; } { mode = "n"; key = "hR"; action.__raw = '' function() require('gitsigns').reset_buffer() end ''; options = { desc = "git [R]eset buffer"; }; } { mode = "n"; key = "hp"; action.__raw = '' function() require('gitsigns').preview_hunk() end ''; options = { desc = "git [p]review hunk"; }; } { mode = "n"; key = "hb"; action.__raw = '' function() require('gitsigns').blame_line() end ''; options = { desc = "git [b]lame line"; }; } { mode = "n"; key = "hd"; action.__raw = '' function() require('gitsigns').diffthis() end ''; options = { desc = "git [d]iff against index"; }; } { mode = "n"; key = "hD"; action.__raw = '' function() require('gitsigns').diffthis '@' end ''; options = { desc = "git [D]iff against last commit"; }; } # Toggles { mode = "n"; key = "tb"; action.__raw = '' function() require('gitsigns').toggle_current_line_blame() end ''; options = { desc = "[T]oggle git show [b]lame line"; }; } { mode = "n"; key = "tD"; action.__raw = '' function() require('gitsigns').toggle_deleted() end ''; options = { desc = "[T]oggle git show [D]eleted"; }; } ]; plugins = { web-devicons.enable = true; sleuth = { enable = true; }; spectre = { enable = true; }; treesitter = { enable = true; folding = true; settings = { highlight = { enable = true; additional_vim_regex_highlighting = true; }; indent = { enable = true; }; autotag = { enable = true; }; }; }; gitsigns = { enable = true; settings = { signs = { add = {text = "+";}; change = {text = "~";}; delete = {text = "_";}; topdelete = {text = "‾";}; changedelete = {text = "~";}; }; }; }; harpoon = { enable = true; keymaps = { addFile = "a"; toggleQuickMenu = "e"; navNext = "k"; navPrev = "j"; }; }; mini = { enable = true; modules = { ai = { n_lines = 500; }; splitjoin = {}; surround = {}; statusline = { use_icons = true; }; comment = {}; trailspace = {}; pick = {}; jump = {}; }; }; zk = { enable = true; settings = { picker = "minipick"; }; }; render-markdown = { enable = true; }; friendly-snippets = { enable = true; }; lspkind = { enable = true; cmp = { enable = true; }; }; luasnip = { enable = true; }; cmp = { enable = true; settings = { snippet = { expand = '' function(args) require('luasnip').lsp_expand(args.body) end ''; }; completion = { completeopt = "menu,menuone,noinsert"; }; mapping = { "" = "cmp.mapping.select_next_item()"; "" = "cmp.mapping.select_prev_item()"; "" = "cmp.mapping.scroll_docs(-4)"; "" = "cmp.mapping.scroll_docs(4)"; "" = "cmp.mapping.confirm { select = true }"; "" = "cmp.mapping.complete {}"; "" = '' cmp.mapping(function() local luasnip = require('luasnip') if luasnip.expand_or_locally_jumpable() then luasnip.expand_or_jump() end end, { 'i', 's' }) ''; "" = '' cmp.mapping(function() local luasnip = require('luasnip') if luasnip.locally_jumpable(-1) then luasnip.jump(-1) end end, { 'i', 's' }) ''; }; sources = [ { name = "luasnip"; } { name = "nvim_lsp"; } { name = "path"; } ]; }; }; oil = { enable = true; }; undotree = { enable = true; }; tmux-navigator = { enable = true; }; cmp-nvim-lsp = { enable = true; }; fidget = { enable = true; }; lsp = { enable = true; servers = { nixd = { enable = true; settings = { nixpkgs = { expr = "(builtins.getFlake (\"git+file://\" + toString ./.)).inputs.nixpkgs { }"; }; formatting = { command = ["alejandra"]; }; options = { nixos = { expr = "(builtins.getFlake (\"git+file://\" + toString ./.)).nixosConfigurations.desktop.options"; }; nix-darwin = { expr = "(builtins.getFlake (\"git+file://\" + toString ./.)).darwinConfigurations.macbook.options"; }; }; }; }; hls = { enable = true; installGhc = true; }; ts_ls = { enable = true; }; eslint = { enable = true; }; html = { enable = true; }; cssls = { enable = true; }; stylelint_lsp = { enable = true; }; volar = { enable = true; tslsIntegration = true; }; angularls = { enable = true; }; gopls = { enable = true; }; bashls = { enable = true; }; clangd = { enable = true; }; }; keymaps = { diagnostic = { "[d" = "goto_next"; "]d" = "goto_prev"; "d" = "open_float"; }; lspBuf = { "K" = "hover"; "gd" = "definition"; "gr" = "references"; "rn" = "rename"; "ca" = "code_action"; }; }; }; neotest = { enable = true; adapters = { jest = { enable = true; }; go = { enable = true; }; }; }; nvim-jdtls = { enable = true; cmd = [ (lib.getExe pkgs.jdt-language-server) ]; }; }; }; }