nixos-config/home/editors/helix/default.nix

257 lines
6.2 KiB
Nix
Raw Normal View History

{ pkgs, ... }:
2022-08-02 20:10:44 +02:00
let
prettier = parser: {
command = "prettier";
2024-05-26 16:45:38 +02:00
args = [
"--parser"
parser
];
};
typescriptLanguageServers = [
{
name = "typescript-language-server";
except-features = [ "format" ];
}
"vscode-eslint-language-server"
];
2024-05-26 16:45:38 +02:00
in
{
# HINT for direnv to work needs to be started from project folder
2022-08-02 20:10:44 +02:00
programs.helix = {
enable = true;
package = pkgs.unstable.helix;
2023-05-31 17:25:46 +02:00
languages.language = [
{
name = "c-sharp";
language-servers = [ "roslyn" ];
auto-format = true;
}
{
name = "javascript";
2024-05-26 12:59:38 +02:00
language-servers = typescriptLanguageServers;
# TODO also configure eslint for diagnostics
# formatter.command = "eslint_d --fix";
formatter = prettier "typescript";
auto-format = true;
}
{
name = "jsx";
language-servers = typescriptLanguageServers;
formatter = prettier "typescript";
auto-format = true;
}
{
name = "typescript";
language-servers = typescriptLanguageServers;
formatter = prettier "typescript";
auto-format = true;
}
{
name = "tsx";
language-servers = typescriptLanguageServers;
formatter = prettier "typescript";
auto-format = true;
}
2024-05-26 12:59:38 +02:00
{
name = "python";
language-servers = [ "pyright" ];
}
2023-05-31 16:03:24 +02:00
{
name = "nix";
# `nix fmt` does not support stdin
2023-05-31 16:03:24 +02:00
formatter.command = "nixfmt";
2024-05-26 16:45:38 +02:00
language-servers = [
"nixd"
"statix"
];
auto-format = true;
2023-05-31 16:03:24 +02:00
}
{
name = "nickel";
formatter.command = "topiary";
auto-format = true;
}
{
name = "protobuf";
formatter.command = "buf format -w";
2024-05-26 16:45:38 +02:00
language-servers = [
"bufls"
"buf-lint"
];
}
{
name = "graphql";
formatter = prettier "graphql";
auto-format = true;
}
{
name = "toml";
auto-format = true;
}
{
name = "json";
formatter = prettier "json";
}
{
name = "yaml";
formatter = prettier "yaml";
auto-format = true;
}
{
name = "css";
formatter = prettier "css";
auto-format = true;
}
{
name = "html";
formatter = prettier "html";
auto-format = true;
}
{
name = "markdown";
formatter = prettier "markdown";
auto-format = true;
}
2024-05-26 12:59:38 +02:00
# newer versions of bash-language-server already integrate shfmt
{
name = "bash";
formatter = {
command = "shfmt";
2024-05-26 16:45:38 +02:00
args = [
"-i"
"2"
"-"
];
};
2024-05-26 12:59:38 +02:00
auto-format = true;
2023-05-31 16:03:24 +02:00
}
];
languages.language-server = {
rust-analyzer = {
config.rust-analyzer = {
cargo.buildScripts.enable = true;
checkOnSave.command = "clippy";
procMacro.enable = true;
procMacro.ignored = {
# See https://github.com/rust-lang/rust-analyzer/issues/15800
# core = [ "cfg_eval" ];
# cfg_eval = [ "cfg_eval" ];
};
};
};
roslyn.command = "roslyn-language-server";
statix = {
command = "efm-langserver";
config = {
languages = {
2024-05-26 16:45:38 +02:00
nix = [
{
# https://github.com/creativenull/efmls-configs-nvim/blob/ddc7c542aaad21da594edba233c15ae3fad01ea0/lua/efmls-configs/linters/statix.lua
lintCommand = "statix check --stdin --format=errfmt";
lintStdIn = true;
lintIgnoreExitCode = true;
lintFormats = [ "<stdin>>%l:%c:%t:%n:%m" ];
rootMarkers = [
"flake.nix"
"shell.nix"
"default.nix"
];
}
];
};
};
};
buf-lint = {
command = "efm-langserver";
2024-05-26 16:45:38 +02:00
config.languages.protobuf = [
{
lintCommand = "buf lint --path";
rootMarkers = [ "buf.yaml" ];
}
];
};
nixd.command = "nixd";
# does not support formatting
vscode-eslint-language-server = {
# https://github.com/helix-editor/helix/issues/3520#issuecomment-1439987347
command = "vscode-eslint-language-server";
args = [ "--stdio" ];
config = {
validate = "on";
experimental.useFlatConfig = false; # required for old configs
rulesCustomizations = [ ];
run = "onType";
problems.shortenToSingleLine = false;
nodePath = "";
quiet = false;
format = true;
codeAction = {
disableRuleComment = {
enable = true;
location = "separateLine";
};
showDocumentation.enable = true;
};
codeActionOnSave.mode = "problems";
workingDirectory.mode = "auto";
};
};
2024-05-26 12:59:38 +02:00
pyright = {
command = "pyright-langserver";
args = [ "--stdio" ];
};
lua-language-server = {
config = {
runtime = {
version = "LuaJIT";
2024-05-26 16:45:38 +02:00
path = [
"?.lua"
"?/init.lua"
];
};
};
};
};
settings = {
theme = "dark_plus";
2023-05-31 16:03:24 +02:00
editor = {
color-modes = true;
cursor-shape.insert = "bar";
completion-trigger-len = 1;
line-number = "relative";
2023-05-31 16:03:24 +02:00
statusline = {
left = [
"mode"
"version-control"
"spinner"
"file-name"
"file-modification-indicator"
];
right = [
"diagnostics"
"file-encoding"
"file-line-ending"
"file-type"
"selections"
"position"
];
};
};
keys = {
normal = {
"H" = "goto_line_start";
"L" = "goto_line_end";
};
select = {
"H" = "goto_line_start";
"L" = "goto_line_end";
};
2024-05-26 16:45:38 +02:00
insert = {
"C-space" = "completion";
};
};
};
2022-08-02 20:10:44 +02:00
};
}