diff options
| author | Isabella Bastaja <isabella@sorre.xyz> | 2026-06-15 07:06:01 +0200 |
|---|---|---|
| committer | Isabella Bastaja <isabella@sorre.xyz> | 2026-06-15 07:26:50 +0200 |
| commit | e6e4d53bf0fbf54d9e1413163913d3152bf1e82b (patch) | |
| tree | 27a45c2a0a0e34112be352069ccd45259156aec9 /wrappers | |
| parent | 8752d056ead6b60c8d1a14829db3d8f7f3ed59c2 (diff) | |
wrappers: wrap helix
Diffstat (limited to 'wrappers')
| -rw-r--r-- | wrappers/helix/config.nix | 164 | ||||
| -rw-r--r-- | wrappers/helix/default.nix | 16 |
2 files changed, 180 insertions, 0 deletions
diff --git a/wrappers/helix/config.nix b/wrappers/helix/config.nix new file mode 100644 index 0000000..70f9349 --- /dev/null +++ b/wrappers/helix/config.nix @@ -0,0 +1,164 @@ +{ + lib, + formats, + concatTextFile, + writeTextDir, + symlinkJoin, +}: +let + tomlFormat = formats.toml { }; + + config = { + theme = "tokyonight"; + editor = { + line-number = "relative"; + indent-guides = { + render = true; + character = "┆"; + skip-levels = 1; + }; + cursor-shape = { + insert = "bar"; + normal = "block"; + select = "underline"; + }; + whitespace.render = { + space = "all"; + tab = "all"; + newline = "none"; + }; + whitespace.characters = { + space = "·"; + nbsp = "⍽"; + tab = "→"; + newline = "⏎"; + tabpad = "·"; # Tabs will look like "→···" (depending on tab width) + }; + cursorline = true; + lsp.display-messages = true; + }; + keys.normal."space" = { + "f" = "file_picker_in_current_directory"; + "F" = "file_picker"; + }; + }; + + languages = { + language-server.emmet-ls = { + command = "emmet-ls"; + args = [ "--stdio" ]; + }; + # language-server.astro-ls = { + # command = "astro-ls"; + # args = [ "--stdio" ]; + # config = { + # typescript.tsdk = "${pkgs.typescript}/lib/node_modules/typescript/lib"; + # environment = "node"; + # }; + # }; + + language = [ + { + name = "html"; + language-servers = [ + "vscode-html-language-server" + "emmet-ls" + ]; + } + { + name = "php"; + language-servers = [ + "emmet-ls" + ]; + } + { + name = "astro"; + scope = "source.astro"; + injection-regex = "astro"; + file-types = [ "astro" ]; + roots = [ + "package.json" + "astro.config.mjs" + ]; + language-servers = [ + "astro-ls" + "emmet-ls" + ]; + auto-format = true; + } + { + name = "nix"; + auto-format = true; + formatter = { + command = "nixfmt"; + args = [ "-" ]; + }; + } + { + name = "cpp"; + auto-format = true; + formatter.command = "clang-format"; + } + { + name = "cmake"; + auto-format = true; + formatter = { + command = "cmake-format"; + args = [ "-" ]; + }; + } + { + name = "svelte"; + language-servers = [ + "svelteserver" + "emmet-ls" + ]; + } + { + name = "vue"; + language-servers = [ + "vue-language-server" + "emmet-ls" + ]; + } + ]; + }; + + ignores = [ + "*.lock" + "!.gitignore" + "!.cargo" + + # Common binary file formats + "*.exe" + "*.bin" + "*.png" + "*.jpeg" + "*.jpg" + "*.webp" + ]; + + config-file = concatTextFile { + name = "helix-config-toml"; + files = [ + (tomlFormat.generate "helix-config" config) + ]; + destination = "/helix/config.toml"; + }; + languages-file = concatTextFile { + name = "helix-languages-toml"; + files = [ + (tomlFormat.generate "helix-languages" languages) + ]; + destination = "/helix/languages.toml"; + }; + ignore-file = writeTextDir "helix/ignore" (lib.strings.concatLines ignores); +in +symlinkJoin { + name = "helix-config"; + paths = [ + config-file + languages-file + ignore-file + ]; +} diff --git a/wrappers/helix/default.nix b/wrappers/helix/default.nix new file mode 100644 index 0000000..276318e --- /dev/null +++ b/wrappers/helix/default.nix @@ -0,0 +1,16 @@ +{ pkgs, ... }: +let + config = pkgs.callPackage ./config.nix { }; +in +{ + wrappers.helix = { + basePackage = pkgs.helix; + # helix apparently doesn't support the XDG spec yet 🥀 + # https://github.com/helix-editor/helix/pull/2135 + # env.XDG_CONFIG_HOME.value = "${config}"; + prependFlags = [ + "--config" + "${config}/helix/config.toml" + ]; + }; +} |
