summaryrefslogtreecommitdiff
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
parentcfd5cbe46a27a11013fe7b7a5345d82272a5f130 (diff)
downloadminerals-bca04b418838998c183b4e087ded86856c88a062.tar.zst
minerals-bca04b418838998c183b4e087ded86856c88a062.zip
Add Zed Editor configuration
Signed-off-by: Mel <mel@rnrd.eu>
-rw-r--r--modules/home/common.nix1
-rw-r--r--modules/home/zed.nix158
2 files changed, 159 insertions, 0 deletions
diff --git a/modules/home/common.nix b/modules/home/common.nix
index bf2d347..e2b57f7 100644
--- a/modules/home/common.nix
+++ b/modules/home/common.nix
@@ -6,6 +6,7 @@
./shell.nix
./code.nix
+ ./zed.nix
];
programs = {
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;
+ };
+ };
+ };
+}