nichts/packages/helix/languages.nix

340 lines
7.8 KiB
Nix
Raw Normal View History

2024-09-01 21:37:24 +02:00
{
sources,
2025-04-10 22:01:10 +02:00
basedpyright,
2024-11-06 00:11:11 +01:00
bash-language-server,
callPackage,
2024-11-06 00:11:11 +01:00
clang-tools,
2025-01-11 13:00:12 +01:00
cmake-format,
2024-11-06 00:11:11 +01:00
cmake-language-server,
2025-06-04 08:26:52 +02:00
deadnix,
2025-01-11 13:00:12 +01:00
deno,
2024-11-06 00:11:11 +01:00
dprint,
fetchFromGitHub,
2025-01-11 13:00:12 +01:00
formats,
gdb,
2025-06-04 08:26:52 +02:00
kdePackages,
2025-01-11 13:00:12 +01:00
lib,
2025-04-10 22:01:10 +02:00
ruff,
nixVersions,
rustPlatform,
2025-01-11 13:00:12 +01:00
shfmt,
2024-11-06 00:11:11 +01:00
typescript-language-server,
2025-04-06 21:22:27 +02:00
vscode-langservers-extracted,
2025-05-21 00:21:11 +02:00
zls,
2024-09-01 21:37:24 +02:00
...
}:
let
2025-05-21 00:21:11 +02:00
inherit (lib.meta) getExe getExe';
toml = formats.toml { };
2025-04-16 22:34:25 +02:00
nixfmt = callPackage "${sources.nixfmt}/default.nix" { };
nil = rustPlatform.buildRustPackage {
pname = "nil";
version = "unstable";
src = sources.nil;
cargoLock = {
lockFile = "${sources.nil}/Cargo.lock";
allowBuiltinFetchGit = false;
2025-06-04 08:26:52 +02:00
};
nativeBuildInputs = [ nixVersions.latest ];
doInstallCheck = false;
};
2025-06-04 08:26:52 +02:00
new-deadnix = deadnix.overrideAttrs (
finalAttrs: previousAttrs: {
version = "unstable-15-07-2025";
src = fetchFromGitHub {
owner = "astro";
repo = "deadnix";
rev = "d75457b95d7cfa82fcd60970939f76fccfce19e5";
hash = "sha256-O/z2neAXL8JNkGosvxC+DyZnnJ8zYP9XHApxHVmlzfY=";
};
doInstallCheck = false;
cargoDeps = rustPlatform.fetchCargoVendor {
inherit (new-deadnix) src;
hash = "sha256-O8yhqyPflOvQXAA19k1XpbrHysgV5VNWLBX0l5Q5GkM=";
2024-11-05 23:30:23 +01:00
};
meta.mainProgram = "nil";
}
);
helix-languages = {
language =
let
mark = lang: {
command = getExe deno;
args = [
"fmt"
"-"
"--ext"
lang
2024-11-05 23:30:23 +01:00
];
};
in
[
{
name = "bash";
auto-format = true;
formatter = {
command = getExe shfmt;
args = [
"-i"
"2"
];
};
}
{
name = "clojure";
injection-regex = "(clojure|clj|edn|boot|yuck)";
file-types = [
"clj"
"cljs"
"cljc"
"clje"
"cljr"
"cljx"
"edn"
"boot"
"yuck"
];
}
{
name = "cmake";
auto-format = true;
language-servers = [ "cmake-language-server" ];
formatter = {
command = getExe cmake-format;
args = [ "-" ];
};
}
{
name = "javascript";
auto-format = true;
language-servers = [
"dprint"
"typescript-language-server"
];
}
{
name = "json";
formatter = mark "json";
}
{
name = "markdown";
auto-format = true;
formatter = mark "md";
language-servers = [ "taplo" ];
}
{
name = "nix";
language-servers = [ "nil" ];
}
{
name = "qml";
language-servers = [ "qmlls" ];
}
{
name = "python";
auto-format = true;
language-servers = [
"basedpyright"
"ruff"
];
}
{
name = "typescript";
auto-format = true;
language-servers = [
"dprint"
"typescript-language-server"
];
}
{
name = "rust";
}
{
name = "c";
auto-format = true;
language-servers = [ "clangd" ];
}
{
name = "zig";
auto-format = true;
}
{
name = "c";
debugger = {
name = "gdb";
command = getExe gdb;
transport = "stdio";
templates = [
{
name = "binary";
request = "launch";
completion = [
{
name = "binary";
completion = "filename";
}
];
args = {
program = "{0}";
runInTerminal = true;
};
}
];
};
}
];
2024-11-05 23:30:23 +01:00
language-server = {
bash-language-server = {
2024-11-06 00:11:11 +01:00
command = getExe bash-language-server;
args = [ "start" ];
2024-11-05 23:30:23 +01:00
};
2025-03-31 11:05:13 +02:00
rust-analyzer = {
config.rust-analyzer = {
checkOnSave.command = "clippy";
procMacro.enable = true;
cargo = {
loadOutDirsFromCheck = true;
features = "all";
};
assist = {
preferSelf = true;
};
2025-05-05 11:06:51 +02:00
check = {
command = "clippy";
extraArgs = [
"--"
"-W"
"clippy::pedantic"
"-W"
"clippy::nursery"
"-W"
"clippy::perf"
];
2025-05-05 11:06:51 +02:00
};
lens = {
references = true;
methodReferences = true;
};
completion.autoimport.enable = true;
experimental.procAttrMacros = true;
interpret.tests = true;
2025-03-31 11:05:13 +02:00
};
};
2024-11-05 23:30:23 +01:00
clangd = {
2024-11-06 00:11:11 +01:00
command = "${clang-tools}/bin/clangd";
clangd.fallbackFlags = [ "-std=c++2b" ];
2024-11-05 23:30:23 +01:00
};
cmake-language-server = {
2024-11-06 00:11:11 +01:00
command = getExe cmake-language-server;
2024-11-05 23:30:23 +01:00
};
2025-04-06 21:22:27 +02:00
deno-lsp = {
2025-05-21 00:21:11 +02:00
command = getExe deno;
args = [ "lsp" ];
2025-04-06 21:22:27 +02:00
environment.NO_COLOR = "1";
config.deno = {
enable = true;
lint = true;
unstable = true;
suggest = {
completeFunctionCalls = false;
imports = {
hosts."https://deno.land" = true;
};
2025-04-06 21:22:27 +02:00
};
inlayHints = {
enumMemberValues.enabled = true;
functionLikeReturnTypes.enabled = true;
parameterNames.enabled = "all";
parameterTypes.enabled = true;
propertyDeclarationTypes.enabled = true;
variableTypes.enabled = true;
};
};
};
2024-11-05 23:30:23 +01:00
dprint = {
2024-11-06 00:11:11 +01:00
command = getExe dprint;
args = [ "lsp" ];
2024-11-05 23:30:23 +01:00
};
nil = {
command = getExe nil;
config.nil = {
formatting.command = [ "${getExe nixfmt}" ];
diagnostics = {
bindingEndHintMinLines = 3;
};
nix.flake = {
autoArchive = true;
# autoEvalInputs = true;
nixpkgsInputName = "nixpkgs";
};
};
2024-11-05 23:30:23 +01:00
};
2025-06-04 08:26:52 +02:00
deadnix = {
2025-07-13 22:51:22 +02:00
command = getExe new-deadnix;
2025-06-04 08:26:52 +02:00
};
2024-11-05 23:30:23 +01:00
typescript-language-server = {
2025-05-21 00:21:11 +02:00
command = getExe typescript-language-server;
args = [ "--stdio" ];
2025-04-06 21:22:27 +02:00
config = {
2024-11-05 23:30:23 +01:00
typescript-language-server.source = {
addMissingImports.ts = true;
fixAll.ts = true;
organizeImports.ts = true;
removeUnusedImports.ts = true;
sortImports.ts = true;
};
2025-04-06 21:22:27 +02:00
};
};
ruff = {
2025-05-21 00:21:11 +02:00
command = getExe ruff;
args = [ "server" ];
2025-04-06 21:22:27 +02:00
};
qmlls = {
2025-05-21 00:21:11 +02:00
command = getExe' kdePackages.qtdeclarative "qmlls";
args = [ "-E" ];
};
2025-04-06 21:22:27 +02:00
basedpyright.command = "${basedpyright}/bin/basedpyright-langserver";
2024-11-05 23:30:23 +01:00
2025-04-06 21:22:27 +02:00
vscode-css-language-server = {
2025-04-09 15:31:18 +02:00
command = "${vscode-langservers-extracted}/bin/vscode-css-language-server";
args = [ "--stdio" ];
2025-04-06 21:22:27 +02:00
config = {
provideFormatter = true;
css.validate.enable = true;
scss.validate.enable = true;
2024-11-05 23:30:23 +01:00
};
};
2025-05-21 00:21:11 +02:00
zls = {
command = getExe zls;
config = {
enable_build_on_save = true;
build_on_save_args = [
"check"
"-fincremental"
"--watch"
];
2025-05-21 00:21:11 +02:00
enable_autofix = false;
warn_style = true;
highlight_global_var_declarations = true;
};
};
2024-11-05 23:30:23 +01:00
};
};
2024-11-06 00:11:11 +01:00
in
toml.generate "languages.toml" helix-languages