{ inputs, pkgs, ... }: { imports = [ inputs.nixvim.homeManagerModules.nixvim ]; # Nixvim programs.nixvim = { enable = true; viAlias = true; vimAlias = true; keymaps = [{ action = "Oil"; key = "e"; options = { silent = true; }; }]; options = { hlsearch = false; incsearch = true; number = true; relativenumber = true; tabstop = 4; softtabstop = 4; shiftwidth = 4; expandtab = true; smartindent = true; mouse = ""; breakindent = true; undofile = true; swapfile = true; ignorecase = true; smartcase = true; signcolumn = "yes"; completeopt = "menuone,noselect"; updatetime = 50; timeoutlen = 300; colorcolumn = "80"; showmode = false; laststatus = 3; splitbelow = true; splitright = true; }; globals = { mapleader = " "; maplocalleader = ";"; }; extraConfigLuaPre = '' vim.loader.enable() ''; extraConfigLuaPost = '' vim.notify = require("mini.notify").make_notify() ''; plugins = { harpoon = { enable = true; keymaps = { addFile = "a"; toggleQuickMenu = ""; navFile = { "1" = ""; "2" = ""; "3" = ""; "4" = ""; }; }; }; oil = { enable = true; defaultFileExplorer = true; extraOptions = { show_hidden = true; }; }; treesitter.enable = true; gitsigns = { enable = true; signs = { add.text = "▎"; change.text = "▎"; changedelete.text = "▎"; delete.text = "▎"; topdelete.text = "▎"; untracked.text = "▎"; }; onAttach.function = '' function(buffer) local gs = package.loaded.gitsigns local function map(mode, l, r, desc) vim.keymap.set(mode, l, r, { buffer = buffer, desc = desc }) end -- stylua: ignore start map("n", "]g", gs.next_hunk, "Next git hunk") map("n", "[g", gs.prev_hunk, "Previous git hunk") end ''; }; mini = { enable = true; modules = { statusline = { set_vim_settings = false; }; comment = { }; notify = { }; }; }; telescope = { enable = true; extensions = { fzf-native = { enable = true; fuzzy = true; overrideGenericSorter = true; overrideFileSorter = true; caseMode = "smart_case"; }; ui-select.enable = true; }; keymaps = { "pf" = "find_files"; "" = "git_files"; "vh" = "help_tags"; "ps" = "grep_string"; }; }; lsp = { enable = true; servers = { lua-ls.enable = true; nil_ls.enable = true; marksman.enable = true; }; keymaps = { diagnostic = { "vd" = "open_float"; "[d" = "goto_next"; "]d" = "goto_prev"; }; lspBuf = { K = "hover"; gd = "definition"; gD = "declaration"; gi = "implementation"; "lca" = "code_action"; "lrn" = "rename"; "" = "signature_help"; }; }; preConfig = '' local function sign_define(args) vim.fn.sign_define(args.name, { texthl = args.name, text = args.text, numhl = "", }) end sign_define({ name = "DiagnosticSignError", text = "E" }) sign_define({ name = "DiagnosticSignWarn", text = "W" }) sign_define({ name = "DiagnosticSignHint", text = "H" }) sign_define({ name = "DiagnosticSignInfo", text = "I" }) ''; }; nvim-cmp = { enable = true; autoEnableSources = true; sources = [ { name = "nvim_lsp"; } { name = "path"; } { name = "snippy"; } ]; snippet.expand = "snippy"; mapping = { "" = "cmp.mapping.confirm({ select = false })"; "" = { action = '' function(fallback) if cmp.visible then cmp.select_next_item() else fallback() end end ''; modes = [ "i" "s" ]; }; "" = { action = '' function(fallback) if cmp.visible then cmp.select_prev_item() else fallback() end end ''; modes = [ "i" "s" ]; }; }; }; }; colorschemes.catppuccin = { enable = true; flavour = "frappe"; styles = { functions = [ "bold" ]; keywords = [ "bold" ]; }; }; extraPlugins = with pkgs.vimPlugins; [ vim-snippets ]; }; }