222 lines
5.6 KiB
Nix
222 lines
5.6 KiB
Nix
{ modulesPath, lib, pkgs, ... }:
|
|
|
|
let
|
|
inherit (lib.mod) ctrl localLeader Bs;
|
|
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" ];
|
|
|
|
plugin.nvim-surround = {
|
|
enable = true;
|
|
setupSettings = {};
|
|
};
|
|
|
|
plugin.nvim-treesitter-textobjects.enable = true;
|
|
|
|
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}")
|
|
)
|
|
'';
|
|
|
|
settings = {
|
|
incremental_selection = {
|
|
enable = true;
|
|
keymaps = {
|
|
init_selection = ctrl "s";
|
|
node_incremental = ctrl "s";
|
|
scope_incremental = "grs";
|
|
node_decremental = Bs;
|
|
};
|
|
};
|
|
textobjects =
|
|
let
|
|
inner = v: "${v}.inner";
|
|
outer = v: "${v}.outer";
|
|
any' = v: "${v}.*";
|
|
|
|
# 1 @assignment.inner
|
|
# 2 @assignment.lhs
|
|
# 3 @assignment.outer
|
|
# 4 @assignment.rhs
|
|
ass = "@assignment";
|
|
#-5 @attribute.inner
|
|
#-6 @attribute.outer
|
|
att = "@attribute";
|
|
# 7 @block.inner
|
|
# 8 @block.outer
|
|
blo = "@block";
|
|
# 9 @call.inner
|
|
# 10 @call.outer
|
|
cal = "@call";
|
|
# 11 @class.inner
|
|
# 12 @class.outer
|
|
cla = "@class";
|
|
#-13 @comment.inner
|
|
# 14 @comment.outer
|
|
com = "@comment";
|
|
# 15 @conditional.inner
|
|
# 16 @conditional.outer
|
|
con = "@conditional";
|
|
#-17 @frame.inner
|
|
#-18 @frame.outer
|
|
fra = "@frame";
|
|
# 19 @function.inner
|
|
# 20 @function.outer
|
|
fun = "@function";
|
|
# 21 @loop.inner
|
|
# 22 @loop.outer
|
|
loo = "@loop";
|
|
# 23 @number.inner
|
|
num = "@number";
|
|
# 24 @parameter.inner
|
|
# 25 @parameter.outer
|
|
par = "@parameter";
|
|
# 26 @regex.inner
|
|
# 27 @regex.outer
|
|
reg = "@regex";
|
|
# 28 @return.inner
|
|
# 29 @return.outer
|
|
ret = "@return";
|
|
#-30 @scopename.inner
|
|
# 31 @statement.outer
|
|
sta = "@statement";
|
|
in
|
|
{
|
|
select = {
|
|
enable = true;
|
|
lookahead = true;
|
|
selection_modes = {
|
|
"@parameter.outer" = "v"; # charwise
|
|
"@function.outer" = "V"; # linewise
|
|
"@class.outer" = ctrl "v"; # blockwise
|
|
};
|
|
};
|
|
swap = {
|
|
enable = true;
|
|
swap_next = {
|
|
"${localLeader "a"}" = {
|
|
query = [
|
|
(inner par)
|
|
(outer fun)
|
|
];
|
|
};
|
|
"${localLeader "f"}" = any' fun;
|
|
};
|
|
swap_previous = {
|
|
"${localLeader "A"}" = {
|
|
query = [
|
|
(inner par)
|
|
(outer fun)
|
|
];
|
|
};
|
|
"${localLeader "F"}" = any' fun;
|
|
};
|
|
};
|
|
move = {
|
|
enable = true;
|
|
set_jumps = true;
|
|
|
|
goto_next = {
|
|
"]q" = { query = map outer [ cla fun con loo ]; };
|
|
};
|
|
goto_previous = {
|
|
"[q" = { query = map outer [ cla fun con loo ]; };
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
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" ] ];
|
|
})
|
|
];
|
|
};
|
|
}
|