188 lines
5.0 KiB
Nix
188 lines
5.0 KiB
Nix
{ inputs, ... }:
|
|
{
|
|
flake.modules.nixos.helix = {
|
|
nix.settings = {
|
|
extra-substituters = [ "https://helix.cachix.org" ];
|
|
extra-trusted-public-keys = [
|
|
"helix.cachix.org-1:ejp9KQpR1FBI2onstMQ34yogDm4OgU2ru6lIwPvuCVs="
|
|
];
|
|
};
|
|
};
|
|
|
|
flake.modules.homeManager.helix =
|
|
{ pkgs, ... }:
|
|
let
|
|
svelteLanguageServer = pkgs.svelte-language-server.overrideAttrs (
|
|
finalAttrs: previousAttrs: {
|
|
version = "0.18.3";
|
|
|
|
src = pkgs.fetchFromGitHub {
|
|
owner = "sveltejs";
|
|
repo = "language-tools";
|
|
tag = "svelte-language-server@${finalAttrs.version}";
|
|
hash = "sha256-FTOkJPXbsG6R53yr4n0/IR2lzFCovrdV0+epOi07lBQ=";
|
|
};
|
|
|
|
pnpmDeps = pkgs.fetchPnpmDeps {
|
|
inherit (finalAttrs)
|
|
pname
|
|
version
|
|
src
|
|
pnpmWorkspaces
|
|
;
|
|
pnpm = pkgs.pnpm_10;
|
|
fetcherVersion = 3;
|
|
hash = "sha256-fY3hrCkr/soJk1gp39/jec8lT2ZJI27xRBCZi006oWA=";
|
|
};
|
|
|
|
postInstall = (previousAttrs.postInstall or "") + ''
|
|
substituteInPlace \
|
|
"$out/lib/node_modules/svelte-language-server/packages/language-server/node_modules/@vscode/emmet-helper/lib/cjs/emmetHelper.js" \
|
|
--replace-fail \
|
|
"'jsx.enabled': syntax === 'jsx'," \
|
|
"'jsx.enabled': syntax === 'jsx' || syntax === 'html',"
|
|
|
|
ln -s ../packages/typescript-plugin \
|
|
"$out/lib/node_modules/svelte-language-server/node_modules/typescript-svelte-plugin"
|
|
'';
|
|
}
|
|
);
|
|
in
|
|
{
|
|
programs.helix = {
|
|
enable = true;
|
|
defaultEditor = true;
|
|
package = inputs.helix.packages.${pkgs.stdenv.hostPlatform.system}.default;
|
|
extraPackages = with pkgs; [
|
|
vtsls
|
|
svelteLanguageServer
|
|
tailwindcss-language-server
|
|
|
|
nixd
|
|
nixfmt
|
|
oxfmt
|
|
|
|
simple-completion-language-server
|
|
|
|
odin
|
|
ols
|
|
|
|
rust-analyzer
|
|
rustfmt
|
|
cargo
|
|
];
|
|
|
|
settings = {
|
|
theme = "kanagawa-custom";
|
|
editor = {
|
|
soft-wrap.enable = true;
|
|
lsp = {
|
|
auto-document-highlight = true;
|
|
display-inlay-hints = false;
|
|
};
|
|
rainbow-brackets = true;
|
|
line-number = "relative";
|
|
cursorline = true;
|
|
gutters = [
|
|
"code-action-hint"
|
|
"diagnostics"
|
|
"spacer"
|
|
"line-numbers"
|
|
"spacer"
|
|
"diff"
|
|
];
|
|
color-modes = true;
|
|
cursor-shape = {
|
|
insert = "bar";
|
|
normal = "block";
|
|
select = "underline";
|
|
};
|
|
};
|
|
};
|
|
|
|
themes.kanagawa-custom = {
|
|
inherits = "kanagawa";
|
|
"ui.highlight".underline = {
|
|
color = "dragonBlue";
|
|
style = "line";
|
|
};
|
|
};
|
|
|
|
languages = {
|
|
language-server.scls = {
|
|
command = "simple-completion-language-server";
|
|
environment.SNIPPETS_PATH = "${pkgs.vimPlugins.friendly-snippets}/snippets";
|
|
};
|
|
|
|
language-server.vtsls.config.vtsls.tsserver.globalPlugins = [
|
|
{
|
|
name = "typescript-svelte-plugin";
|
|
location = "${svelteLanguageServer}/lib/node_modules/svelte-language-server";
|
|
enableForWorkspaceTypeScriptVersions = true;
|
|
}
|
|
];
|
|
|
|
language = [
|
|
{
|
|
name = "javascript";
|
|
language-servers = [
|
|
"vtsls"
|
|
"scls"
|
|
];
|
|
auto-format = true;
|
|
}
|
|
{
|
|
name = "jsx";
|
|
language-servers = [
|
|
"vtsls"
|
|
"scls"
|
|
];
|
|
auto-format = true;
|
|
}
|
|
{
|
|
name = "typescript";
|
|
language-servers = [
|
|
"vtsls"
|
|
"scls"
|
|
];
|
|
auto-format = true;
|
|
}
|
|
{
|
|
name = "tsx";
|
|
language-servers = [
|
|
"vtsls"
|
|
"scls"
|
|
];
|
|
auto-format = true;
|
|
}
|
|
{
|
|
name = "svelte";
|
|
formatter = {
|
|
command = "${pkgs.coreutils}/bin/env";
|
|
args = [
|
|
"NODE_PATH=%{workspace_directory}/node_modules"
|
|
"oxfmt"
|
|
"--stdin-filepath=%{buffer_name}"
|
|
];
|
|
};
|
|
auto-format = true;
|
|
language-servers = [
|
|
"scls"
|
|
"svelteserver"
|
|
"tailwindcss-ls"
|
|
];
|
|
}
|
|
{
|
|
name = "nix";
|
|
auto-format = true;
|
|
}
|
|
{
|
|
name = "rust";
|
|
auto-format = true;
|
|
}
|
|
];
|
|
};
|
|
};
|
|
};
|
|
}
|