system/neovim/dev.nix

107 lines
2.6 KiB
Nix

{ 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" "*.mts" "*.cts" "*.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" ] ];
})
];
};
}