feat: nixvim + zsh, fix: warnings

This commit is contained in:
2026-02-20 16:41:18 +00:00
parent 63a7fd716f
commit f93e12accd
4 changed files with 252 additions and 1 deletions

View File

@@ -0,0 +1,197 @@
{
inputs,
flake,
self,
}: {
pkgs,
lib,
config,
...
}: let
cfg = config.hectic.program.nixvim;
in {
imports = [
inputs.nixvim.nixosModules.nixvim
];
options.hectic.program.nixvim.enable = lib.mkEnableOption "Enable hectic nixvim config";
config = lib.mkIf cfg.enable {
programs.nixvim = {
enable = true;
extraPackages = with pkgs; [ gcc ];
colorschemes.kanagawa = {
enable = true;
settings.colors.theme.all = {};
};
opts = {
spell = true;
spelllang = [ "en" "ru" "it" ];
tabstop = 2;
shiftwidth = 2;
softtabstop = 2;
expandtab = true;
};
extraFiles = {
"spell/ru.utf-8.spl".source = pkgs.fetchurl {
url = "https://ftp.nluug.nl/vim/runtime/spell/ru.utf-8.spl";
sha256 = "sha256-6y0714ogILMLzAp8/r2s6/t6QnWBEU9muIpXeubaxU0=";
};
"spell/ru.utf-8.sug".source = pkgs.fetchurl {
url = "https://ftp.nluug.nl/vim/runtime/spell/ru.utf-8.sug";
sha256 = "sha256-6r2GForYXVv7gGiAjPeYK6sDdK/CmctJ7MidcWFvOTs=";
};
"spell/it.utf-8.spl".source = pkgs.fetchurl {
url = "https://ftp.nluug.nl/vim/runtime/spell/it.utf-8.spl";
hash = "sha256-2AczkD6DbVN5DAq4wcLyn2Y8oqd67ns4Guprh2KudBM=";
};
"spell/it.utf-8.sug".source = pkgs.fetchurl {
url = "https://ftp.nluug.nl/vim/runtime/spell/it.utf-8.sug";
hash = "sha256-4LsXYaeScJJrdaj69PTQ2EDVWis0UY/Y5RKSfCckzko=";
};
"ftdetect/hemar.vim".text = ''
au BufRead,BufNewFile *.hemar setfiletype hemar
'';
"queries/hemar/highlights.scm".text = ''
(interpolation) @keyword
(for "for" @keyword)
(for "in" @keyword)
(done "done" @keyword)
(path) @field
(string) @string
(text) @text
(for
"{[" @punctuation.bracket
"]}" @punctuation.bracket)
(done
"{[" @punctuation.bracket
"]}" @punctuation.bracket)
(interpolation
"{[" @punctuation.bracket
"]}" @punctuation.bracket)
'';
};
extraConfigLuaPre = /* lua */ ''
-- map leader
vim.api.nvim_set_keymap("", "<Space>", "<Nop>", { noremap = true, silent = true })
vim.g.mapleader = ' '
-- render markdown
require('render-markdown').setup({
link = {
enabled = true,
render_modes = false,
},
})
-- nowrap for *.nowrap.* markdown files
vim.api.nvim_create_autocmd("FileType", {
pattern = "markdown",
callback = function()
if vim.fn.expand("%:t"):find("%.nowrap%.") then vim.opt_local.wrap = false end
end,
})
-- toggle conceallevel
vim.keymap.set("n", "<leader>tc", ":setlocal <C-R>=&conceallevel ? 'conceallevel=0' : 'conceallevel=2'<CR><CR>", { desc = "[T]oggle [C]onceallevel" })
-- tree-sitter: register hemar parser
local parser_config = require("nvim-treesitter.parsers").get_parser_configs()
parser_config.hemar = {
install_info = {
url = "https://github.com/hectic-lab/util.nix",
files = { "package/hemar/grammar/tree-sitter/src/parser.c" },
generate_requires_npm = false,
requires_generate_from_grammar = false,
},
filetype = "hemar",
}
'';
extraConfigLuaPost = /* lua */ ''
vim.cmd [[
hi Normal guibg=none ctermbg=none
hi NonText guibg=none ctermbg=none
]]
'';
keymaps = [
{ mode = "n"; key = "<leader>o"; options.silent = true; action = "<cmd>Oil<CR>"; }
{ mode = "n"; key = "<leader>dd"; action = "<cmd>lua vim.diagnostic.open_float()<CR>"; }
{ mode = "n"; key = "<leader>dn"; action = "<cmd>lua vim.diagnostic.goto_next()<CR>"; }
{ mode = "n"; key = "<leader>dp"; action = "<cmd>lua vim.diagnostic.goto_prev()<CR>"; }
];
extraPlugins = with pkgs.vimPlugins; [
nvim-treesitter-parsers.templ
vim-shellcheck
vim-grammarous
];
plugins = {
render-markdown.enable = true;
fidget.enable = true;
oil.enable = true;
treesitter = {
enable = true;
settings = {
ensure_installed = [ "hemar" ];
highlight.enable = true;
};
};
lsp = {
enable = true;
keymaps.lspBuf = {
"<leader>lh" = "hover";
"<leader>ld" = "definition";
"<leader>lD" = "references";
"<leader>lr" = "rename";
"<leader>li" = "implementation";
"<leader>lt" = "type_definition";
"<leader>lf" = "format";
"<leader>la" = "code_action";
};
servers = {
rust_analyzer = {
enable = true;
installRustc = false;
installCargo = false;
};
nixd = {
enable = true;
};
nil_ls = {
enable = true;
extraOptions.formatting.command = [ "nixpkgs-fmt" ];
};
clangd.enable = true;
ts_ls.enable = true;
gopls.enable = true;
templ.enable = true;
bashls.enable = true;
kotlin_language_server.enable = true;
metals = {
enable = true;
cmd = [ "metals" ];
};
sqls.enable = true;
java_language_server.enable = true;
pyright.enable = true;
};
};
};
};
};
}