{ modulesPath, lib, pkgs, ... }: let inherit (lib.mod) ctrl; inherit (lib.nix2lua) pipe1 require call0 nf var; in { imports = [ "${modulesPath}/profiles/recommended.nix" ./snippets.nix ./configs ./plugins ]; vim.opt = { list = true; formatoptions = "roqnlj"; }; buffer.filetype = { text-options = { pattern = [ "txt" "markdown" "mail" "man" ]; opt = { formatoptions = "roqwnjp"; }; }; }; filetype.detect = { d2 = "*.d2"; nickel = "*.ncl"; psql = "*.psql"; sql = "*.pgsql"; }; # Enable fast navigation between windows vim.keymap.set = map (k: { mode = "n"; lhs = ctrl k; rhs = "${ctrl "w"}${k}"; }) [ "h" "l" "j" "k" ]; plugins.style.nvim-treesitter = { extraGrammars = { tree-sitter-d2 = rec { language = "d2"; version = "1e6d8ca3d85c0031ff010759bb60804dd47b95f2"; src = pkgs.fetchFromGitea { domain = "git.pleshevski.ru"; owner = "pleshevskiy"; repo = "tree-sitter-d2"; rev = version; sha256 = "sha256-ld9zlJ7tXl/SyrHJXwPKviDHePbw/jhI9WPT3aNntt8="; }; }; }; # Source: https://github.com/DariusCorvus/tree-sitter-language-injection.nvim/blob/main/lua/tree-sitter-language-injection/init.lua extraQueries.javascript.injections = let lang = "sql"; langMatch = ''^//+( )*${lang}( )*|^/[*]+( )*${lang}( )*[*]+/$''; in '' ((comment) @comment . ([ (string(string_fragment) @injection.content) (template_string(string_fragment) @injection.content) ] @injection.content ) (#match? @comment "${langMatch}") (#set! injection.language "${lang}") ) ''; }; plugins.style.neoformat.autoformat = { enable = true; pattern = [ "*.ts" "*.tsx" "*.rs" "flake.nix" ]; }; plugins.navigation = { nvim-tree.settings = { renderer = { group_empty = true; full_name = true; }; tab.sync = { open = true; close = true; }; }; telescope.extensions.telescope-live-grep-args-nvim.settings = { auto_quoting = true; mappings.i = { "${ctrl "k"}" = pipe1 (require "telescope-live-grep-args.actions") (call0 "quote_prompt") ; }; }; }; plugins.snippet.luasnip.settings = { ext_opts = [ (nf (var "luasnip_types.choiceNode") { active.virt_text = [ [ "●" "WarningMsg" ] ]; }) (nf (var "luasnip_types.insertNode") { active.virt_text = [ [ "●" "Title" ] ]; }) ]; }; }