{ 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'," ''; } ); 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 rust-analyzer 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 = [ { name = "javascript"; language-servers = [ "vtsls" "scls" ]; } { name = "jsx"; language-servers = [ "vtsls" "scls" ]; } { name = "typescript"; language-servers = [ "vtsls" "scls" ]; } { name = "tsx"; language-servers = [ "vtsls" "scls" ]; } { 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; } ]; }; }; }; }