summaryrefslogtreecommitdiff
path: root/wrappers
diff options
context:
space:
mode:
authorIsabella Bastaja <isabella@sorre.xyz>2026-06-15 07:06:01 +0200
committerIsabella Bastaja <isabella@sorre.xyz>2026-06-15 07:26:50 +0200
commite6e4d53bf0fbf54d9e1413163913d3152bf1e82b (patch)
tree27a45c2a0a0e34112be352069ccd45259156aec9 /wrappers
parent8752d056ead6b60c8d1a14829db3d8f7f3ed59c2 (diff)
wrappers: wrap helix
Diffstat (limited to 'wrappers')
-rw-r--r--wrappers/helix/config.nix164
-rw-r--r--wrappers/helix/default.nix16
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"
+ ];
+ };
+}