{ inputs, pkgs, ... }: { imports = [ inputs.nixvim.homeManagerModules.nixvim ]; # Nixvim programs.nixvim = { enable = true; viAlias = true; vimAlias = true; keymaps = [ { action = "Oil"; key = "e"; options = { silent = true; }; } { action = "lua require('conform').format({ bufnr = buf, lsp_fallback = true })"; key = "f"; options = { silent = true; }; } ]; opts = { 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 = '' local autocmd = vim.api.nvim_create_autocmd local augroup = vim.api.nvim_create_augroup -- General Settings local general = augroup("General Settings", { clear = true }) autocmd("BufEnter", { callback = function() vim.opt.formatoptions:remove { "c", "r", "o" } end, group = general, desc = "Disable New Line Comment", }) ''; extraConfigLuaPost = '' vim.notify = require("mini.notify").make_notify() ''; extraPackages = with pkgs; [ stylua isort black nixfmt-classic jq shfmt ripgrep prettierd perl538Packages.PerlTidy perl538Packages.PerlCritic ]; plugins = { comment.enable = true; ts-context-commentstring.enable = true; todo-comments.enable = true; lspkind = { enable = true; cmp.enable = true; }; indent-blankline = { enable = true; settings.scope.enabled = false; }; cmp = { enable = true; settings = { mapping = { "" = "cmp.mapping.confirm({ select = true })"; "" = '' function(fallback) if cmp.visible then cmp.select_next_item() else fallback() end end ''; "" = '' function(fallback) if cmp.visible then cmp.select_prev_item() else fallback() end end ''; "" = "cmp.mapping.complete()"; "" = "cmp.mapping.abort()"; "" = "cmp.mapping.scroll_docs(-4)"; "" = "cmp.mapping.scroll_docs(4)"; }; snippet.expand = '' function(args) require('snippy').expand_snippet(args.body) end ''; sources = [ { name = "nvim_lsp"; } { name = "path"; } { name = "snippy"; } ]; }; }; conform-nvim = { enable = true; formattersByFt = { json = [ "jq" ]; lua = [ "stylua" ]; python = [ "isort" "black" ]; nix = [ "nixfmt" ]; sh = [ "shfmt" ]; bash = [ "shfmt" ]; zsh = [ "zsh" ]; html = [ "prettierd" ]; css = [ "prettierd" ]; perl = [ "perltidy" ]; }; }; lint = { enable = true; lintersByFt = { python = [ "mypy" ]; ruby = [ "ruby" ]; # sh = [ "shellcheck" ]; # bash = [ "shellcheck" ]; # zsh = [ "shellcheck" ]; perl = [ "perlcritic" ]; }; }; harpoon = { enable = true; keymaps = { addFile = "a"; toggleQuickMenu = ""; navFile = { "1" = ""; "2" = ""; "3" = ""; "4" = ""; }; }; }; oil = { enable = true; settings = { show_hidden = true; default_file_explorer = true; }; }; treesitter.enable = true; gitsigns = { enable = true; settings.signs = { add.text = "▎"; change.text = "▎"; changedelete.text = "▎"; delete.text = "▎"; topdelete.text = "▎"; untracked.text = "▎"; on_attach = '' 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; }; notify = { }; }; }; telescope = { enable = true; extensions = { fzf-native = { enable = true; settings = { fuzzy = true; override_generic_sorter = true; override_file_sorter = true; case_mode = "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; gopls.enable = true; pyright.enable = true; html.enable = true; emmet_ls.enable = true; cssls.enable = true; bashls.enable = true; perlpls.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" }) ''; }; }; colorschemes.catppuccin = { enable = true; settings = { flavour = "frappe"; styles = { functions = [ "bold" ]; keywords = [ "bold" ]; }; }; }; extraPlugins = with pkgs.vimPlugins; [ vim-snippets ]; }; }