{ pkgs, inputs, lib, ... }: { imports = [ inputs.nixvim.homeManagerModules.nixvim ]; programs.nixvim = { nixpkgs.pkgs = pkgs; performance.combinePlugins.enable = false; performance.byteCompileLua.enable = false; 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 = false; image = { enable = true; settings = { backend = "kitty"; }; }; none-ls = { enable = true; sources.formatting.ocamlformat.enable = true; }; lsp = { # package = pkgs.vimUtils.buildVimPlugin { # name = "lsp"; # src = pkgs.fetchFromGitHub { # owner = "neovim"; # repo = "nvim-lspconfig"; # rev = "541f3a2781de481bb84883889e4d9f0904250a56"; # hash = "sha256-f9CqwKBWZgC2ystm+g7FmsHR0fLcM6Wj+GkSwoUIanw="; # }; # }; enable = true; servers = { gleam.enable = true; ts_ls.enable = true; # TS/JS biome.enable = true; # TS/JS pyright.enable = true; # Python ruff.enable = true; # python nil_ls.enable = true; # nix rust_analyzer.enable = true; rust_analyzer.installCargo = false; rust_analyzer.installRustc = false; cssls.enable = true; jsonls.enable = true; html.enable = true; denols.enable = true; denols.autostart = false; gopls.enable = true; ziggy = { enable = false; package = inputs.ziggy.outputs.packages.aarch64-darwin.ziggy; }; ziggy_schema = { enable = false; package = inputs.ziggy.outputs.packages.aarch64-darwin.ziggy; }; zls= { package = null; enable = true; }; superhtml = { enable = true; package = inputs.superhtml.outputs.packages.aarch64-darwin.superhtml; }; ocamllsp = { enable = true; package = null; }; }; 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 = "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; }; friendly-snippets.enable = true; luasnip = { enable = true; settings = { enable_autosnippets = true; store_selection_keys = ""; }; fromVscode = [ { lazyLoad = true; paths = "${pkgs.vimPlugins.friendly-snippets}"; } ]; }; bufferline.enable = true; treesitter = { enable = true; folding = true; grammarPackages = with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [ bash json lua make markdown nix regex toml vim vimdoc xml yaml javascript go typescript ]; settings = { highlight.enable = true; indent.enable = true; }; }; treesitter-context.enable = true; treesitter-textobjects = { enable = true; move = { enable = true; gotoNextStart = { "]m" = {query = "@function.outer";}; "]]" = { query = "@class.outer"; desc = "Next class start"; }; "]o" = {query = "@loop.*";}; "]s" = { query = "@scope"; queryGroup = "locals"; desc = "Next scope"; }; "]z" = { query = "@fold"; queryGroup = "folds"; desc = "Next fold"; }; }; gotoNextEnd = { "]M" = {query = "@function.outer";}; "][" = {query = "@class.outer";}; }; gotoPreviousStart = { "[m" = {query = "@function.outer";}; "[[" = {query = "@class.outer";}; }; gotoPreviousEnd = { "[M" = {query = "@function.outer";}; "[]" = {query = "@class.outer";}; }; gotoNext = { "]d" = {query = "@conditional.outer";}; }; gotoPrevious = { "[d" = {query = "@conditional.outer";}; }; }; }; 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; }; web-devicons.enable = true; lean = { enable = true; }; copilot-vim.enable = 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; foldmethod = lib.mkForce "expr"; foldexpr = lib.mkForce "v:lua.vim.treesitter.foldexpr()"; }; 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.__raw = "function() require('telescope.builtin').lsp_document_symbols({symbols='method'}) end"; key = "fm"; options.desc = "Find Methods"; } { action = "Telescope live_grep"; key = "fg"; options.desc = "Grep"; } { action = "Telescope buffers"; key = "fb"; options.desc = "Find Buffers"; } { 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"; } { action.__raw = "function() require('flash').toggle() end"; key = ""; mode = ["c"]; options.desc = "Toggle Flash"; } ]; extraConfigLua = '' vim.api.nvim_create_autocmd('FileType', { group = vim.api.nvim_create_augroup('ziggy', {}), pattern = 'ziggy', callback = function() vim.lsp.start { name = 'Ziggy LSP', cmd = { 'ziggy', 'lsp' }, root_dir = vim.loop.cwd(), flags = { exit_timeout = 1000 }, } end, }) vim.api.nvim_create_autocmd('FileType', { group = vim.api.nvim_create_augroup('ziggy_schema', {}), pattern = 'ziggy_schema', callback = function() vim.lsp.start { name = 'Ziggy LSP', cmd = { 'ziggy', 'lsp', '--schema' }, root_dir = vim.loop.cwd(), flags = { exit_timeout = 1000 }, } end, }) vim.api.nvim_create_autocmd('FileType', { group = vim.api.nvim_create_augroup('superhtml', {}), pattern = 'superhtml', callback = function() vim.lsp.start { name = 'SuperHTML LSP', cmd = { 'superhtml', 'lsp' }, root_dir = vim.loop.cwd(), flags = { exit_timeout = 1000 }, } end, }) local parser_config = require( 'nvim-treesitter.parsers' ).get_parser_configs() parser_config.ziggy = { install_info = { url = 'https://github.com/kristoff-it/ziggy', includes = { 'tree-sitter-ziggy/src' }, files = { 'tree-sitter-ziggy/src/parser.c' }, branch = 'main', generate_requires_npm = false, requires_generate_from_grammar = false, }, filetype = 'ziggy', } parser_config.ziggy_schema = { install_info = { url = 'https://github.com/kristoff-it/ziggy', files = { 'tree-sitter-ziggy-schema/src/parser.c' }, branch = 'main', generate_requires_npm = false, requires_generate_from_grammar = false, }, filetype = 'ziggy-schema', } parser_config.supermd = { install_info = { url = 'https://github.com/kristoff-it/supermd', includes = { 'tree-sitter/supermd/src' }, files = { 'tree-sitter/supermd/src/parser.c', 'tree-sitter/supermd/src/scanner.c' }, branch = 'main', generate_requires_npm = false, requires_generate_from_grammar = false, }, filetype = 'supermd', } parser_config.supermd_inline = { install_info = { url = 'https://github.com/kristoff-it/supermd', includes = { 'tree-sitter/supermd-inline/src' }, files = { 'tree-sitter/supermd-inline/src/parser.c', 'tree-sitter/supermd-inline/src/scanner.c' }, branch = 'main', generate_requires_npm = false, requires_generate_from_grammar = false, }, filetype = 'supermd_inline', } parser_config.superhtml = { install_info = { url = 'https://github.com/kristoff-it/superhtml', includes = { 'tree-sitter-superhtml/src' }, files = { 'tree-sitter-superhtml/src/parser.c', 'tree-sitter-superhtml/src/scanner.c' }, branch = 'main', generate_requires_npm = false, requires_generate_from_grammar = false, }, filetype = 'superhtml', } vim.filetype.add { extension = { smd = 'supermd', shtml = 'superhtml', ziggy = 'ziggy', ['ziggy-schema'] = 'ziggy_schema', }, } ''; }; }