niksos/modules/tui/helix.nix

102 lines
3.7 KiB
Nix

{
config,
lib,
inputs,
pkgs,
...
}: let
cfg = config.myOptions.programs.helix;
inherit (config.myOptions.other.system) username;
inherit (lib) getExe getExe' mkEnableOption mkIf;
clangd = getExe' pkgs.clang-tools "clangd";
css-languageserver = getExe pkgs.nodePackages.vscode-css-languageserver-bin;
in {
options.myOptions.programs.helix.enable = mkEnableOption "helix";
config = mkIf cfg.enable {
home-manager.users.${username} = {
programs.helix = {
enable = true;
package = inputs.helix.packages.${pkgs.system}.default.overrideAttrs (self: {
makeWrapperArgs = with pkgs;
self.makeWrapperArgs
or []
++ [
"--suffix"
"PATH"
":"
(lib.makeBinPath [
rustfmt
rust-analyzer
nil
clang-tools
nodePackages.bash-language-server
nodePackages.vscode-css-languageserver-bin
nodePackages.vscode-langservers-extracted
])
];
});
settings = {
theme = "catppuccin_mocha";
editor = {
scrolloff = 7;
mouse = false;
middle-click-paste = false;
line-number = "relative";
auto-completion = false;
auto-format = false;
completion-replace = true;
true-color = true;
undercurl = true;
rulers = [ 80 ];
bufferline = "multiple";
color-modes = true;
lsp = {
display-messages = true;
display-inlay-hints = true;
};
cursor-shape = {
normal = "block";
insert = "bar";
select = "underline";
};
auto-pairs = false;
whitespace.render.newline = "all";
indent-guides.render = true;
};
};
languages = {
language-server = {
nil = {
command = lib.getExe pkgs.nil;
config.nil.formatting.command = [ "${lib.getExe pkgs.alejandra}" "-q" ];
};
clangd = {
command = clangd;
clangd.fallbackFlags = [ "-std=c++2b" ];
};
vscode-css-language-server = {
command = css-languageserver;
args = [ "--stdio" ];
};
};
language = [
{
name = "rust";
auto-format = false;
}
{
name = "html";
file-types = [ "html" ];
}
{
name = "c";
}
];
};
};
};
};
}