feat(helix): update config

Set up most of the language servers & formatters that I've used in
neovim.
This commit is contained in:
Felix Schröter 2024-04-30 23:00:05 +02:00
parent f2270f35f2
commit b6db738c4f
Signed by: felschr
GPG key ID: 671E39E6744C807D
2 changed files with 151 additions and 5 deletions

View file

@ -1,22 +1,109 @@
{ pkgs, ... }: { pkgs, ... }:
{ let
# @TODO for direnv to work needs to be started from project folder prettier = parser: {
command = "prettier";
args = [ "--parser" parser ];
};
typescriptLanguageServers = [
{
name = "typescript-language-server";
except-features = [ "format" ];
}
"vscode-eslint-language-server"
];
in {
# HINT for direnv to work needs to be started from project folder
programs.helix = { programs.helix = {
enable = true; enable = true;
package = pkgs.unstable.helix; package = pkgs.unstable.helix;
languages.language = [ languages.language = [
{ name = "rust"; } {
name = "javascript";
# TODO also configure eslint for diagnostics
# formatter.command = "eslint_d --fix";
formatter = prettier "typescript";
language-servers = typescriptLanguageServers;
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;
}
{ {
name = "nix"; name = "nix";
# `nix fmt` does not support stdin
formatter.command = "nixfmt"; formatter.command = "nixfmt";
language-servers = [ "nil" "statix" ];
auto-format = true;
} }
{ {
name = "nickel"; name = "nickel";
formatter.command = "topiary"; formatter.command = "topiary";
auto-format = true;
}
{
name = "protobuf";
formatter.command = "buf format -w";
language-servers = [ "bufls" "buf-lint" ];
}
{
name = "graphql";
formatter = prettier "graphql";
auto-format = true;
}
{
name = "toml";
auto-format = true;
}
{
name = "json";
formatter = prettier "json";
auto-format = true;
}
{
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;
}
{
name = "bash";
formatter = {
command = "shfmt";
args = [ "-i" "2" "-" ];
};
} }
]; ];
languages.language_server = { languages.language-server = {
rust-analyzer = { rust-analyzer = {
config.rust-analyzer = { config.rust-analyzer = {
cargo.buildScripts.enable = true; cargo.buildScripts.enable = true;
@ -29,13 +116,70 @@
}; };
}; };
}; };
statix = {
command = "efm-langserver";
config = {
languages = {
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";
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";
};
};
lua-language-server = {
config = {
runtime = {
version = "LuaJIT";
path = [ "?.lua" "?/init.lua" ];
};
};
};
}; };
settings = { settings = {
theme = "github_dark"; theme = "dark_plus";
editor = { editor = {
color-modes = true; color-modes = true;
cursor-shape.insert = "bar"; cursor-shape.insert = "bar";
completion-trigger-len = 1; completion-trigger-len = 1;
line-number = "relative";
statusline = { statusline = {
left = [ left = [
"mode" "mode"
@ -64,6 +208,7 @@
"H" = "goto_line_start"; "H" = "goto_line_start";
"L" = "goto_line_end"; "L" = "goto_line_end";
}; };
insert = { "C-space" = "completion"; };
}; };
}; };
}; };

View file

@ -3,6 +3,7 @@
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
# language servers # language servers
efm-langserver
omnisharp-roslyn omnisharp-roslyn
nil nil
nls nls