module(helix): Add typos-lsp to all languages' ls, and pass default lang settings via passthru in package
This commit is contained in:
parent
0bb321f2c5
commit
a3a4265b96
2 changed files with 130 additions and 93 deletions
|
|
@ -3,10 +3,31 @@
|
||||||
pkgs,
|
pkgs,
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: {
|
}: let
|
||||||
|
cfg = config.youthlic.programs.helix;
|
||||||
|
defaultLanguagesSettings = config.programs.helix.package.passthru.languages.language;
|
||||||
|
in {
|
||||||
options = {
|
options = {
|
||||||
youthlic.programs.helix = {
|
youthlic.programs.helix = {
|
||||||
enable = lib.mkEnableOption "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 {
|
extraPackages = lib.mkOption {
|
||||||
type = lib.types.listOf lib.types.package;
|
type = lib.types.listOf lib.types.package;
|
||||||
default = [];
|
default = [];
|
||||||
|
|
@ -21,45 +42,61 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
config = let
|
config = lib.mkMerge [
|
||||||
cfg = config.youthlic.programs.helix;
|
(lib.mkIf cfg.enable {
|
||||||
in {
|
programs.helix = {
|
||||||
programs.helix = lib.mkIf cfg.enable {
|
enable = true;
|
||||||
enable = true;
|
defaultEditor = true;
|
||||||
defaultEditor = true;
|
extraPackages = cfg.extraPackages;
|
||||||
extraPackages = cfg.extraPackages;
|
settings = ./config.toml |> builtins.readFile |> builtins.fromTOML;
|
||||||
settings = ./config.toml |> builtins.readFile |> builtins.fromTOML;
|
languages =
|
||||||
languages = {
|
lib.recursiveUpdate
|
||||||
language-server = {
|
|
||||||
neocmakelsp = {
|
|
||||||
command = "neocmakelsp";
|
|
||||||
args = [
|
|
||||||
"stdio"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
fish-lsp = {
|
|
||||||
command = "fish-lsp";
|
|
||||||
args = [
|
|
||||||
"start"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
ty = {
|
|
||||||
command = "ty";
|
|
||||||
args = [
|
|
||||||
"server"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
language = [
|
|
||||||
{
|
{
|
||||||
name = "cmake";
|
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 = [
|
language-servers = [
|
||||||
"neocmakelsp"
|
"neocmakelsp"
|
||||||
"cmake-language-server"
|
"cmake-language-server"
|
||||||
];
|
];
|
||||||
}
|
};
|
||||||
{
|
kdl = {
|
||||||
name = "kdl";
|
|
||||||
formatter = {
|
formatter = {
|
||||||
command = "kdlfmt";
|
command = "kdlfmt";
|
||||||
args = [
|
args = [
|
||||||
|
|
@ -67,24 +104,21 @@
|
||||||
"-"
|
"-"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
{
|
just = {
|
||||||
name = "just";
|
|
||||||
formatter = {
|
formatter = {
|
||||||
command = "just";
|
command = "just";
|
||||||
args = [
|
args = [
|
||||||
"--dump"
|
"--dump"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
{
|
nix = {
|
||||||
name = "nix";
|
|
||||||
formatter = {
|
formatter = {
|
||||||
command = "alejandra";
|
command = "alejandra";
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
{
|
xml = {
|
||||||
name = "xml";
|
|
||||||
formatter = {
|
formatter = {
|
||||||
command = "xmllint";
|
command = "xmllint";
|
||||||
args = [
|
args = [
|
||||||
|
|
@ -92,27 +126,23 @@
|
||||||
"-"
|
"-"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
{
|
typst = {
|
||||||
name = "typst";
|
|
||||||
formatter = {
|
formatter = {
|
||||||
command = "typstyle";
|
command = "typstyle";
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
{
|
c = {
|
||||||
name = "c";
|
|
||||||
formatter = {
|
formatter = {
|
||||||
command = "clang-format";
|
command = "clang-format";
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
{
|
cpp = {
|
||||||
name = "cpp";
|
|
||||||
formatter = {
|
formatter = {
|
||||||
command = "clang-format";
|
command = "clang-format";
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
{
|
python = {
|
||||||
name = "python";
|
|
||||||
formatter = {
|
formatter = {
|
||||||
command = "ruff";
|
command = "ruff";
|
||||||
args = [
|
args = [
|
||||||
|
|
@ -128,15 +158,13 @@
|
||||||
"ruff"
|
"ruff"
|
||||||
"ty"
|
"ty"
|
||||||
];
|
];
|
||||||
}
|
};
|
||||||
{
|
go = {
|
||||||
name = "go";
|
|
||||||
formatter = {
|
formatter = {
|
||||||
command = "goimports";
|
command = "goimports";
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
{
|
awk = {
|
||||||
name = "awk";
|
|
||||||
formatter = {
|
formatter = {
|
||||||
command = "awk";
|
command = "awk";
|
||||||
timeout = 5;
|
timeout = 5;
|
||||||
|
|
@ -145,15 +173,13 @@
|
||||||
"--pretty-print=/dev/stdout"
|
"--pretty-print=/dev/stdout"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
{
|
fish = {
|
||||||
name = "fish";
|
|
||||||
language-servers = [
|
language-servers = [
|
||||||
"fish-lsp"
|
"fish-lsp"
|
||||||
];
|
];
|
||||||
}
|
};
|
||||||
{
|
yaml = {
|
||||||
name = "yaml";
|
|
||||||
formatter = {
|
formatter = {
|
||||||
command = "deno";
|
command = "deno";
|
||||||
args = [
|
args = [
|
||||||
|
|
@ -163,9 +189,8 @@
|
||||||
"yaml"
|
"yaml"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
{
|
html = {
|
||||||
name = "html";
|
|
||||||
formatter = {
|
formatter = {
|
||||||
command = "deno";
|
command = "deno";
|
||||||
args = [
|
args = [
|
||||||
|
|
@ -178,9 +203,8 @@
|
||||||
language-servers = [
|
language-servers = [
|
||||||
"vscode-html-language-server"
|
"vscode-html-language-server"
|
||||||
];
|
];
|
||||||
}
|
};
|
||||||
{
|
css = {
|
||||||
name = "css";
|
|
||||||
formatter = {
|
formatter = {
|
||||||
command = "deno";
|
command = "deno";
|
||||||
args = [
|
args = [
|
||||||
|
|
@ -193,9 +217,8 @@
|
||||||
language-servers = [
|
language-servers = [
|
||||||
"vscode-css-language-server"
|
"vscode-css-language-server"
|
||||||
];
|
];
|
||||||
}
|
};
|
||||||
{
|
toml = {
|
||||||
name = "toml";
|
|
||||||
formatter = {
|
formatter = {
|
||||||
command = "taplo";
|
command = "taplo";
|
||||||
args = [
|
args = [
|
||||||
|
|
@ -203,9 +226,8 @@
|
||||||
"-"
|
"-"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
{
|
markdown = {
|
||||||
name = "markdown";
|
|
||||||
formatter = {
|
formatter = {
|
||||||
command = "deno";
|
command = "deno";
|
||||||
args = [
|
args = [
|
||||||
|
|
@ -215,9 +237,8 @@
|
||||||
"md"
|
"md"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
{
|
json = {
|
||||||
name = "json";
|
|
||||||
language-servers = [
|
language-servers = [
|
||||||
"vscode-json-language-server"
|
"vscode-json-language-server"
|
||||||
];
|
];
|
||||||
|
|
@ -230,9 +251,8 @@
|
||||||
"json"
|
"json"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
{
|
jsonc = {
|
||||||
name = "jsonc";
|
|
||||||
language-servers = [
|
language-servers = [
|
||||||
"vscode-json-language-server"
|
"vscode-json-language-server"
|
||||||
];
|
];
|
||||||
|
|
@ -245,9 +265,8 @@
|
||||||
"jsonc"
|
"jsonc"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
];
|
};
|
||||||
};
|
})
|
||||||
};
|
];
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,14 +4,27 @@
|
||||||
callPackage,
|
callPackage,
|
||||||
symlinkJoin,
|
symlinkJoin,
|
||||||
makeWrapper,
|
makeWrapper,
|
||||||
|
lib,
|
||||||
}: let
|
}: let
|
||||||
inherit (inputs.helix.packages."${system}") helix;
|
inherit (inputs.helix.packages."${system}") helix;
|
||||||
|
helixWithPassthru =
|
||||||
|
helix
|
||||||
|
// {
|
||||||
|
passthru =
|
||||||
|
helix.passthru
|
||||||
|
// {
|
||||||
|
languages = lib.pipe "${helix.src}/languages.toml" [
|
||||||
|
builtins.readFile
|
||||||
|
builtins.fromTOML
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
runtime = callPackage ./runtime.nix {};
|
runtime = callPackage ./runtime.nix {};
|
||||||
in
|
in
|
||||||
symlinkJoin {
|
symlinkJoin {
|
||||||
name = "helix-wrapped";
|
name = "helix-wrapped";
|
||||||
paths = [helix];
|
paths = [helixWithPassthru];
|
||||||
inherit (helix) meta;
|
inherit (helixWithPassthru) meta;
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
makeWrapper
|
makeWrapper
|
||||||
];
|
];
|
||||||
|
|
@ -19,4 +32,9 @@ in
|
||||||
wrapProgram $out/bin/hx \
|
wrapProgram $out/bin/hx \
|
||||||
--set HELIX_RUNTIME ${runtime}
|
--set HELIX_RUNTIME ${runtime}
|
||||||
'';
|
'';
|
||||||
|
passthru =
|
||||||
|
helixWithPassthru.passthru
|
||||||
|
// {
|
||||||
|
helix-unwrapped = helixWithPassthru;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue