280 lines
7 KiB
Nix
280 lines
7 KiB
Nix
{
|
|
lib,
|
|
pkgs,
|
|
config,
|
|
...
|
|
}:
|
|
let
|
|
cfg = config.youthlic.programs.helix;
|
|
defaultLanguagesSettings = config.programs.helix.package.passthru.languages.language;
|
|
in
|
|
{
|
|
options = {
|
|
youthlic.programs.helix = {
|
|
enable = lib.mkEnableOption "helix";
|
|
languageSettings = lib.mkOption {
|
|
type = lib.types.attrsOf (
|
|
lib.types.submodule (
|
|
{ ... }:
|
|
{
|
|
freeformType = lib.types.anything;
|
|
options = {
|
|
language-servers = lib.mkOption {
|
|
type = lib.types.listOf (lib.types.either lib.types.str lib.types.anything);
|
|
default = [ "typos-lsp" ];
|
|
example = [ "rust-analyzer" ];
|
|
apply = lib.unique;
|
|
};
|
|
};
|
|
}
|
|
)
|
|
);
|
|
default = lib.pipe defaultLanguagesSettings [
|
|
(map (lang: lib.nameValuePair lang.name (lib.removeAttrs lang [ "name" ])))
|
|
lib.listToAttrs
|
|
];
|
|
apply = lib.mapAttrsToList (name: value: { inherit name; } // value);
|
|
};
|
|
extraPackages = lib.mkOption {
|
|
type = lib.types.listOf lib.types.package;
|
|
default = [ ];
|
|
example = (
|
|
with pkgs;
|
|
[
|
|
deno
|
|
]
|
|
);
|
|
description = ''
|
|
extra packages for helix lsp and formatter
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
config = lib.mkMerge [
|
|
(lib.mkIf cfg.enable {
|
|
programs.helix = {
|
|
enable = true;
|
|
defaultEditor = true;
|
|
extraPackages = cfg.extraPackages;
|
|
settings = ./config.toml |> builtins.readFile |> builtins.fromTOML;
|
|
languages = lib.recursiveUpdate {
|
|
language-server = {
|
|
neocmakelsp = {
|
|
command = "neocmakelsp";
|
|
args = [
|
|
"stdio"
|
|
];
|
|
};
|
|
fish-lsp = {
|
|
command = "fish-lsp";
|
|
args = [
|
|
"start"
|
|
];
|
|
};
|
|
ty = {
|
|
command = "ty";
|
|
args = [
|
|
"server"
|
|
];
|
|
};
|
|
typos-lsp = {
|
|
command = "typos-lsp";
|
|
};
|
|
};
|
|
} { language = cfg.languageSettings; };
|
|
};
|
|
})
|
|
(lib.mkIf cfg.enable {
|
|
youthlic.programs.helix.languageSettings = lib.pipe defaultLanguagesSettings [
|
|
(map ({ name, ... }: lib.nameValuePair name { language-servers = [ "typos-lsp" ]; }))
|
|
lib.listToAttrs
|
|
];
|
|
})
|
|
(lib.mkIf cfg.enable {
|
|
youthlic.programs.helix.languageSettings =
|
|
lib.recursiveUpdate
|
|
(lib.pipe defaultLanguagesSettings [
|
|
(map (lang: lib.nameValuePair lang.name (lib.removeAttrs lang [ "name" ])))
|
|
lib.listToAttrs
|
|
])
|
|
{
|
|
cmake = {
|
|
language-servers = [
|
|
"neocmakelsp"
|
|
"cmake-language-server"
|
|
];
|
|
};
|
|
kdl = {
|
|
formatter = {
|
|
command = "kdlfmt";
|
|
args = [
|
|
"format"
|
|
"-"
|
|
];
|
|
};
|
|
};
|
|
just = {
|
|
formatter = {
|
|
command = "just";
|
|
args = [
|
|
"--dump"
|
|
];
|
|
};
|
|
};
|
|
nix = {
|
|
formatter = {
|
|
command = "nixfmt";
|
|
};
|
|
};
|
|
xml = {
|
|
formatter = {
|
|
command = "xmllint";
|
|
args = [
|
|
"--format"
|
|
"-"
|
|
];
|
|
};
|
|
};
|
|
typst = {
|
|
formatter = {
|
|
command = "typstyle";
|
|
};
|
|
};
|
|
c = {
|
|
formatter = {
|
|
command = "clang-format";
|
|
};
|
|
};
|
|
cpp = {
|
|
formatter = {
|
|
command = "clang-format";
|
|
};
|
|
};
|
|
python = {
|
|
formatter = {
|
|
command = "ruff";
|
|
args = [
|
|
"format"
|
|
"-s"
|
|
"--line-length"
|
|
"88"
|
|
"-"
|
|
];
|
|
};
|
|
language-servers = [
|
|
"pyright"
|
|
"ruff"
|
|
"ty"
|
|
];
|
|
};
|
|
go = {
|
|
formatter = {
|
|
command = "goimports";
|
|
};
|
|
};
|
|
awk = {
|
|
formatter = {
|
|
command = "awk";
|
|
timeout = 5;
|
|
args = [
|
|
"--file=/dev/stdin"
|
|
"--pretty-print=/dev/stdout"
|
|
];
|
|
};
|
|
};
|
|
fish = {
|
|
language-servers = [
|
|
"fish-lsp"
|
|
];
|
|
};
|
|
yaml = {
|
|
formatter = {
|
|
command = "deno";
|
|
args = [
|
|
"fmt"
|
|
"-"
|
|
"--ext"
|
|
"yaml"
|
|
];
|
|
};
|
|
};
|
|
html = {
|
|
formatter = {
|
|
command = "deno";
|
|
args = [
|
|
"fmt"
|
|
"-"
|
|
"--ext"
|
|
"html"
|
|
];
|
|
};
|
|
language-servers = [
|
|
"vscode-html-language-server"
|
|
];
|
|
};
|
|
css = {
|
|
formatter = {
|
|
command = "deno";
|
|
args = [
|
|
"fmt"
|
|
"-"
|
|
"--ext"
|
|
"css"
|
|
];
|
|
};
|
|
language-servers = [
|
|
"vscode-css-language-server"
|
|
];
|
|
};
|
|
toml = {
|
|
formatter = {
|
|
command = "taplo";
|
|
args = [
|
|
"fmt"
|
|
"-"
|
|
];
|
|
};
|
|
};
|
|
markdown = {
|
|
formatter = {
|
|
command = "deno";
|
|
args = [
|
|
"fmt"
|
|
"-"
|
|
"--ext"
|
|
"md"
|
|
];
|
|
};
|
|
};
|
|
json = {
|
|
language-servers = [
|
|
"vscode-json-language-server"
|
|
];
|
|
formatter = {
|
|
command = "deno";
|
|
args = [
|
|
"fmt"
|
|
"-"
|
|
"--ext"
|
|
"json"
|
|
];
|
|
};
|
|
};
|
|
jsonc = {
|
|
language-servers = [
|
|
"vscode-json-language-server"
|
|
];
|
|
formatter = {
|
|
command = "deno";
|
|
args = [
|
|
"fmt"
|
|
"-"
|
|
"--ext"
|
|
"jsonc"
|
|
];
|
|
};
|
|
};
|
|
};
|
|
})
|
|
];
|
|
}
|