feat(helix): update config
Set up most of the language servers & formatters that I've used in neovim.
This commit is contained in:
parent
f2270f35f2
commit
b6db738c4f
|
@ -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"; };
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue