NixOS-Config/home-manager/shared/shell/helix/default.nix

129 lines
3.1 KiB
Nix

{
config,
lib,
pkgs,
...
}: {
programs.helix = {
enable = true;
defaultEditor = true;
settings = {
theme = "catppuccin_macchiato";
editor = {
line-number = "relative";
lsp.display-messages = true;
lsp.display-inlay-hints = true;
cursor-shape = {
insert = "bar";
normal = "block";
select = "underline";
};
cursorline = true;
bufferline = "always";
color-modes = true;
soft-wrap = {
enable = true;
max-wrap = 25;
wrap-indicator = "";
};
};
};
languages = {
language = [
{
name = "python";
language-id = "python";
auto-format = true;
file-types = ["py"];
language-servers = ["ruff" "scls" "pylsp"];
}
{
name = "typst";
language-id = "typst";
auto-format = false;
file-types = ["typ"];
language-servers = ["typst-lsp" "scls"];
}
{
name = "rust";
language-id = "rust";
auto-format = true;
file-types = ["rs"];
roots = ["Cargo.lock"];
language-servers = ["rust-analyzer" "scls"];
}
{
name = "stub";
scope = "text.stub";
file-types = [];
shebangs = [];
roots = [];
auto-format = false;
language-servers = ["scls"];
}
{
name = "nix";
language-id = "nix";
auto-format = true;
file-types = ["nix"];
roots = ["flake.lock" "flake.nix"];
language-servers = ["nil" "scls"];
formatter = {
command = "alejandra";
args = ["-q"];
};
}
];
language-server = {
pylsp = {
config.pylsp.plugins = {
flake8 = {enabled = false;};
autopep8 = {enabled = false;};
mccabe = {enabled = false;};
pycodestyle = {enabled = false;};
pyflakes = {enabled = false;};
pylint = {enabled = false;};
yapf = {enabled = false;};
ruff = {
enabled = true;
select = ["E" "F" "UP" "B" "SIM" "I" "PD"];
ignore = ["F401"];
lineLength = 120;
};
};
};
ruff = {
command = "ruff-lsp";
};
typst-lsp = {
command = "typst-lsp";
};
rust-analyzer = {
command = "rust-analyzer";
};
nil = {
command = "nil";
};
scls = {
command = "simple-completion-language-server";
config = {
max_completion_items = 20;
snippets_first = true;
feature_words = true;
feature_snippets = true;
feature_unicode_input = true;
feature_paths = true;
};
};
};
};
};
home.file = {
"helix" = {
source = ./snippets.toml;
target = ".config/helix/external-snippets.toml";
};
};
}