summary refs log tree commit diff
path: root/modules/home/zed.nix
diff options
context:
space:
mode:
authorMel <mel@rnrd.eu>2025-04-26 16:25:25 +0200
committerMel <mel@rnrd.eu>2025-04-26 16:25:25 +0200
commitbca04b418838998c183b4e087ded86856c88a062 (patch)
tree3b7c0b0edefd6c9435748f916bfbcaa84dcf2b4a /modules/home/zed.nix
parentcfd5cbe46a27a11013fe7b7a5345d82272a5f130 (diff)
downloadminerals-bca04b418838998c183b4e087ded86856c88a062.tar.zst
minerals-bca04b418838998c183b4e087ded86856c88a062.zip
Add Zed Editor configuration
Signed-off-by: Mel <mel@rnrd.eu>
Diffstat (limited to 'modules/home/zed.nix')
-rw-r--r--modules/home/zed.nix158
1 files changed, 158 insertions, 0 deletions
diff --git a/modules/home/zed.nix b/modules/home/zed.nix
new file mode 100644
index 0000000..b8f08a5
--- /dev/null
+++ b/modules/home/zed.nix
@@ -0,0 +1,158 @@
+{ pkgs, lib, ... }:
+
+let
+  inherit (pkgs)
+    clang-tools
+    go
+    gopls
+    nixd
+    nil
+    nixfmt-rfc-style
+    rust-analyzer
+    elixir-ls
+    elixir
+    ;
+
+  tool = package: lib.getExe package;
+in
+{
+  programs.zed-editor = {
+    enable = true;
+    extensions = [
+      "nix"
+      "elixir"
+      "hare"
+      "make"
+      "meson"
+
+      "catppuccin"
+    ];
+
+    userSettings = {
+      # i. general behaviour
+
+      autosave = "on_focus_change";
+      format_on_save = "on";
+      base_keymap = "VSCode";
+      vim_mode = true;
+      load_direnv = "shell_hook"; # load direnv through shell
+
+      auto_update = false;
+      auto_install_extensions = { };
+
+      # ii. pretties
+
+      ui_font_size = 16;
+      buffer_font_size = 16;
+      buffer_font_family = "Berkeley Mono";
+      show_whitespaces = "selection";
+      hour_format = "hour24";
+      relative_line_numbers = true;
+
+      theme = {
+        mode = "system";
+        light = "Catppuccin Latte";
+        dark = "Catppuccin Mocha";
+      };
+
+      tabs = {
+        # show both the file type icon and
+        # git status on the current file tab.
+        file_icons = true;
+        git_status = true;
+      };
+
+      # iii. the terminal
+
+      terminal = {
+        alternate_scroll = "off";
+        blinking = "off";
+        copy_on_select = false;
+        dock = "bottom";
+        env = {
+          TERM = "alacritty";
+        };
+        font_family = "Berkeley Mono";
+        font_size = 16;
+        line_height = "comfortable";
+        option_as_meta = false;
+        shell = "system";
+        toolbar = {
+          title = true;
+        };
+        working_directory = "current_project_directory";
+      };
+
+      # iv. all the language support
+
+      languages = {
+        "C" = {
+          language_servers = [ "clangd" ];
+          formatter = "language_server";
+        };
+        "C++" = {
+          language_servers = [ "clangd" ];
+          formatter = "language_server";
+        };
+        "Nix" = {
+          language_servers = [
+            "nixd"
+            "!nil"
+          ];
+          formatter.external = {
+            command = tool nixfmt-rfc-style;
+            arguments = [
+              "--quiet"
+              "--"
+            ];
+          };
+        };
+        "Go" = {
+          language_servers = [ "gopls" ];
+          formatter.external = {
+            command = lib.getExe' go "gofmt";
+            arguments = [ ];
+          };
+        };
+        "Rust" = {
+          language_servers = [ "rust-analyzer" ];
+          formatter = "language_server";
+        };
+        "Elixir" = {
+          language_servers = [
+            "!lexical"
+            "elixir-ls"
+            "!next-ls"
+          ];
+          formatter = {
+            external = {
+              command = lib.getExe' elixir "mix";
+              arguments = [
+                "format"
+                "--stdin-filename"
+                "{buffer_path}"
+                "-"
+              ];
+            };
+          };
+        };
+      };
+
+      lsp = {
+        clangd.binary.path = lib.getExe' clang-tools "clangd";
+        gopls.binary.path = tool gopls;
+        nixd.binary.path = tool nixd;
+        nil.binary.path = tool nil;
+        rust-analyzer.binary.path = tool rust-analyzer;
+        elixir-ls.binary.path = tool elixir-ls;
+      };
+
+      # v. yuck
+
+      telemetry = {
+        diagnostics = false;
+        metrics = false;
+      };
+    };
+  };
+}