From ec9f483c45557a111e48aecad2e71475bc2642dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9C=BF=20corey?= Date: Thu, 4 Jun 2026 13:15:11 -0700 Subject: [PATCH 1/6] feat: add zed editor module with opinionated defaults Adds modules/darwin/programs/zed.nix following the cmux pattern, with enable (installs cask + writes settings.json) and enableDefaults (populates current settings as overridable mkDefault values). Enabled on Rhizome and lobtop. Co-Authored-By: Claude Sonnet 4.6 Entire-Checkpoint: aa2a5f458650 --- hosts/Rhizome/programs.nix | 5 + hosts/lobtop/programs.nix | 5 + modules/darwin/programs/default.nix | 1 + modules/darwin/programs/zed.nix | 271 ++++++++++++++++++++++++++++ 4 files changed, 282 insertions(+) create mode 100644 modules/darwin/programs/zed.nix diff --git a/hosts/Rhizome/programs.nix b/hosts/Rhizome/programs.nix index 257e54e9..aee0af21 100644 --- a/hosts/Rhizome/programs.nix +++ b/hosts/Rhizome/programs.nix @@ -97,4 +97,9 @@ enable = true; enableDefaults = true; }; + + programs.zed = { + enable = true; + enableDefaults = true; + }; } diff --git a/hosts/lobtop/programs.nix b/hosts/lobtop/programs.nix index 3041941d..c052765b 100644 --- a/hosts/lobtop/programs.nix +++ b/hosts/lobtop/programs.nix @@ -60,4 +60,9 @@ enable = true; enableDefaults = true; }; + + programs.zed = { + enable = true; + enableDefaults = true; + }; } diff --git a/modules/darwin/programs/default.nix b/modules/darwin/programs/default.nix index 9e40cdfc..009a2718 100644 --- a/modules/darwin/programs/default.nix +++ b/modules/darwin/programs/default.nix @@ -12,5 +12,6 @@ ./roon.nix ./scroll-reverser.nix ./soundsource.nix + ./zed.nix ]; } diff --git a/modules/darwin/programs/zed.nix b/modules/darwin/programs/zed.nix new file mode 100644 index 00000000..32fe738e --- /dev/null +++ b/modules/darwin/programs/zed.nix @@ -0,0 +1,271 @@ +{ + config, + lib, + pkgs, + username, + ... +}: +with lib; let + cfg = config.programs.zed; + + jsonFormat = pkgs.formats.json {}; +in { + options.programs.zed = { + enable = mkEnableOption "Zed editor"; + + enableDefaults = mkEnableOption "Zed opinionated defaults"; + + settings = mkOption { + inherit (jsonFormat) type; + default = {}; + description = '' + Configuration written to {file}`~/.config/zed/settings.json`. + Keys map directly to Zed JSON config fields. + ''; + }; + }; + + config = mkMerge [ + (mkIf cfg.enableDefaults { + programs.zed.settings = { + auto_update = mkDefault false; + theme = mkDefault { + mode = "system"; + light = "Nova Light"; + dark = "Nova Dark"; + }; + icon_theme = mkDefault { + mode = "light"; + light = "Zed (Default)"; + dark = "Zed (Default)"; + }; + + ui_font_size = mkDefault 15.0; + ui_font_family = mkDefault ".SystemUIFont"; + buffer_font_size = mkDefault 12.0; + buffer_font_family = mkDefault "MesloLGSDZ Nerd Font Mono"; + buffer_line_height = mkDefault "comfortable"; + show_wrap_guides = mkDefault true; + use_system_path_prompts = mkDefault false; + diff_view_style = mkDefault "unified"; + + title_bar = mkDefault { + show_branch_icon = true; + show_branch_name = true; + show_project_items = true; + show_onboarding_banner = false; + show_user_picture = false; + show_user_menu = true; + show_sign_in = true; + show_menus = false; + }; + + current_line_highlight = mkDefault "all"; + gutter = mkDefault { + line_numbers = true; + runnables = false; + breakpoints = false; + folds = true; + min_line_number_digits = 3; + }; + + indent_guides = mkDefault { + enabled = true; + line_width = 1; + active_line_width = 1; + coloring = "indent_aware"; + background_coloring = "disabled"; + }; + sticky_scroll = mkDefault {enabled = true;}; + git = mkDefault { + inline_blame = { + enabled = true; + delay_ms = 0; + min_column = 0; + padding = 10; + show_commit_summary = true; + }; + }; + toolbar = mkDefault { + breadcrumbs = true; + quick_actions = false; + selections_menu = false; + agent_review = false; + code_actions = false; + }; + + max_tabs = mkDefault null; + + tab_bar = mkDefault { + show = true; + show_nav_history_buttons = false; + show_tab_bar_buttons = false; + }; + tabs = mkDefault { + git_status = true; + close_position = "left"; + show_close_button = "hover"; + file_icons = true; + show_diagnostics = "errors"; + activate_on_close = "left_neighbour"; + }; + extend_comment_on_newline = mkDefault false; + + status_bar = mkDefault { + active_language_button = true; + cursor_position_button = true; + line_endings_button = false; + active_encoding_button = "non_utf8"; + }; + + snippet_sort_order = mkDefault "inline"; + show_completions_on_input = mkDefault true; + show_completion_documentation = mkDefault true; + auto_signature_help = mkDefault false; + show_signature_help_after_edits = mkDefault false; + inline_code_actions = mkDefault true; + lsp_document_colors = mkDefault "inlay"; + completion_menu_scrollbar = mkDefault "system"; + colorize_brackets = mkDefault true; + + diagnostics_max_severity = mkDefault "all"; + diagnostics = mkDefault { + button = true; + include_warnings = false; + inline = {enabled = true;}; + }; + + edit_predictions = mkDefault { + provider = "copilot"; + mode = "eager"; + enabled_in_text_threads = true; + }; + show_edit_predictions = mkDefault true; + + load_direnv = mkDefault "shell_hook"; + double_click_in_multibuffer = mkDefault "open"; + + file_finder = mkDefault { + file_icons = true; + modal_max_width = "small"; + git_status = true; + include_ignored = "smart"; + }; + + project_panel = mkDefault { + button = true; + default_width = 240; + dock = "right"; + entry_spacing = "standard"; + file_icons = true; + folder_icons = true; + git_status = true; + indent_size = 16; + auto_reveal_entries = true; + auto_fold_dirs = true; + bold_folder_labels = false; + sticky_scroll = true; + drag_and_drop = true; + scrollbar = {show = null;}; + show_diagnostics = "errors"; + indent_guides = {show = "always";}; + sort_mode = "directories_first"; + hide_root = false; + hide_hidden = false; + }; + git_panel = mkDefault { + tree_view = true; + button = true; + dock = "right"; + status_style = "label_color"; + fallback_branch_name = "main"; + sort_by_path = false; + collapse_untracked_diff = false; + scrollbar = {show = null;}; + }; + terminal = mkDefault { + toolbar = {breadcrumbs = false;}; + dock = "bottom"; + button = true; + blinking = "terminal_controlled"; + cursor_shape = "block"; + env = {}; + scrollbar = {show = null;}; + font_family = "MesloLGSDZ Nerd Font Mono"; + max_scroll_history_lines = 10000; + }; + collaboration_panel = mkDefault { + dock = "right"; + button = true; + }; + outline_panel = mkDefault { + dock = "right"; + button = false; + }; + notification_panel = mkDefault {button = false;}; + debugger = mkDefault {button = false;}; + + prettier = mkDefault {allowed = true;}; + languages = mkDefault { + "Plain Text" = {show_edit_predictions = false;}; + "JavaScript" = { + tab_size = 2; + formatter = { + external = { + command = "prettier"; + arguments = ["--stdin-filepath" "{buffer_path}"]; + }; + }; + format_on_save = "on"; + }; + "Nix" = { + language_servers = ["nil" "!nixd"]; + formatter = { + external = { + command = "alejandra"; + arguments = ["--quiet" "--"]; + }; + }; + }; + }; + lsp = mkDefault { + eslint = { + settings = { + workingDirectory = {mode = "auto";}; + }; + }; + }; + + agent_servers = mkDefault { + "claude-acp" = {type = "registry";}; + }; + + agent = mkDefault { + dock = "left"; + enable_feedback = false; + default_model = { + provider = "anthropic"; + model = "claude-sonnet-4-6-1m-context-thinking-latest"; + enable_thinking = true; + }; + favorite_models = []; + model_parameters = []; + commit_message_model = { + provider = "anthropic"; + model = "claude-sonnet-4-6-latest"; + }; + }; + }; + }) + + (mkIf cfg.enable { + homebrew.casks = ["zed"]; + + home-manager.users.${username} = { + xdg.configFile."zed/settings.json" = { + source = jsonFormat.generate "zed-settings" cfg.settings; + }; + }; + }) + ]; +} From c9d50edb10f58b7e8fbeb7423587fceb0e7f8ead Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9C=BF=20corey?= Date: Thu, 4 Jun 2026 13:23:42 -0700 Subject: [PATCH 2/6] feat(lobtop): add lobtop-specific zed settings Adds lobtop overrides for language_models (Bedrock), agent tool permissions (git allow-list + glyph MCP tools), and ssh_connections. Co-Authored-By: Claude Sonnet 4.6 Entire-Checkpoint: 6c3aa3f8a452 --- hosts/lobtop/programs.nix | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/hosts/lobtop/programs.nix b/hosts/lobtop/programs.nix index c052765b..b65b53e9 100644 --- a/hosts/lobtop/programs.nix +++ b/hosts/lobtop/programs.nix @@ -64,5 +64,28 @@ programs.zed = { enable = true; enableDefaults = true; + settings = { + language_models = { + bedrock = { + authentication_method = "named_profile"; + region = "us-west-2"; + profile = "bedrock"; + allow_extended_context = true; + }; + }; + agent.tool_permissions = { + tools = { + terminal = { + always_allow = [ + {pattern = "^git\\s+status(\\s|$)";} + {pattern = "^git\\b";} + {pattern = "^gt\\s+track(\\s|$)";} + ]; + }; + "mcp:glyph:basic-memory__build_context" = {default = "allow";}; + "mcp:glyph:basic-memory__search_notes" = {default = "allow";}; + }; + }; + }; }; } From 037b136c34a648ce9616bb6a4d526006207fbbc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9C=BF=20corey?= Date: Thu, 4 Jun 2026 13:41:13 -0700 Subject: [PATCH 3/6] feat(zed): add nil LSP autoArchive default Co-Authored-By: Claude Sonnet 4.6 Entire-Checkpoint: 88cb5b615992 --- modules/darwin/programs/zed.nix | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/modules/darwin/programs/zed.nix b/modules/darwin/programs/zed.nix index 32fe738e..787f80fe 100644 --- a/modules/darwin/programs/zed.nix +++ b/modules/darwin/programs/zed.nix @@ -234,6 +234,17 @@ in { workingDirectory = {mode = "auto";}; }; }; + nil = { + settings = { + nil = { + nix = { + flake = { + autoArchive = true; + }; + }; + }; + }; + }; }; agent_servers = mkDefault { From 3ae4fdcfbeefbf2dffd0df7e4dfdd92ea1c1342c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9C=BF=20corey?= Date: Thu, 4 Jun 2026 13:47:52 -0700 Subject: [PATCH 4/6] feat(zed): add zed-nova-theme flake input and themes option Adds zed-nova-theme as a flake input (flake = false) and a `themes` option to the zed module. enableDefaults wires in the nova theme by default. Run `nix flake update zed-nova-theme` to pin the lock. Co-Authored-By: Claude Sonnet 4.6 Entire-Checkpoint: d5d1b7b69aa1 --- flake.lock | 17 +++++++++++++++++ flake.nix | 4 ++++ modules/darwin/programs/zed.nix | 19 +++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/flake.lock b/flake.lock index 9c474196..6c9367bd 100644 --- a/flake.lock +++ b/flake.lock @@ -545,6 +545,7 @@ "nixpkgs": "nixpkgs_2", "nixpkgs-stable-24-05": "nixpkgs-stable-24-05", "systems": "systems_2", + "zed-nova-theme": "zed-nova-theme", "zx-dev": "zx-dev" } }, @@ -593,6 +594,22 @@ "type": "github" } }, + "zed-nova-theme": { + "flake": false, + "locked": { + "lastModified": 1778631800, + "narHash": "sha256-tO7TiyjOyqFLYGaJdoE/eSndyqLEsyLKK0qYSl7vtWg=", + "owner": "stackptr", + "repo": "zed-nova-theme", + "rev": "484ab792b9544a49eb93cdd5e5e5a0c853f8216d", + "type": "github" + }, + "original": { + "owner": "stackptr", + "repo": "zed-nova-theme", + "type": "github" + } + }, "zx-dev": { "inputs": { "anemone": "anemone", diff --git a/flake.nix b/flake.nix index 484e4390..e60ba532 100644 --- a/flake.nix +++ b/flake.nix @@ -79,6 +79,10 @@ url = "github:stackptr/llm-profile"; flake = false; }; + zed-nova-theme = { + url = "github:stackptr/zed-nova-theme"; + flake = false; + }; }; outputs = inputs @ {flake-parts, ...}: diff --git a/modules/darwin/programs/zed.nix b/modules/darwin/programs/zed.nix index 787f80fe..3dafe544 100644 --- a/modules/darwin/programs/zed.nix +++ b/modules/darwin/programs/zed.nix @@ -1,5 +1,6 @@ { config, + inputs, lib, pkgs, username, @@ -23,10 +24,23 @@ in { Keys map directly to Zed JSON config fields. ''; }; + + themes = mkOption { + type = types.attrsOf types.path; + default = {}; + description = '' + Extra theme files linked into {file}`~/.config/zed/themes/`. + Attribute name is the filename; value is the source path. + ''; + }; }; config = mkMerge [ (mkIf cfg.enableDefaults { + programs.zed.themes = { + "zed-nova-theme.json" = mkDefault (inputs.zed-nova-theme + "/theme.json"); + }; + programs.zed.settings = { auto_update = mkDefault false; theme = mkDefault { @@ -276,6 +290,11 @@ in { xdg.configFile."zed/settings.json" = { source = jsonFormat.generate "zed-settings" cfg.settings; }; + + xdg.configFile = + mapAttrs' (name: src: + nameValuePair "zed/themes/${name}" {inherit src;}) + cfg.themes; }; }) ]; From 1e7832ed63a615f4da34795a9c3c57f10e358ac7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9C=BF=20corey?= Date: Thu, 4 Jun 2026 16:01:59 -0700 Subject: [PATCH 5/6] fix(zed): fix duplicate xdg.configFile definition and theme source attr Co-Authored-By: Claude Sonnet 4.6 Entire-Checkpoint: 4576acab4bb2 --- modules/darwin/programs/zed.nix | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/modules/darwin/programs/zed.nix b/modules/darwin/programs/zed.nix index 3dafe544..0099c538 100644 --- a/modules/darwin/programs/zed.nix +++ b/modules/darwin/programs/zed.nix @@ -287,13 +287,12 @@ in { homebrew.casks = ["zed"]; home-manager.users.${username} = { - xdg.configFile."zed/settings.json" = { - source = jsonFormat.generate "zed-settings" cfg.settings; - }; - xdg.configFile = - mapAttrs' (name: src: - nameValuePair "zed/themes/${name}" {inherit src;}) + { + "zed/settings.json".source = jsonFormat.generate "zed-settings" cfg.settings; + } + // mapAttrs' (name: src: + nameValuePair "zed/themes/${name}" {source = src;}) cfg.themes; }; }) From f5c12a1a08b952af821adbdbbb4bf73b54518b74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9C=BF=20corey?= Date: Fri, 5 Jun 2026 10:26:11 -0700 Subject: [PATCH 6/6] feat(lobtop): add lobtop-specific zed settings Co-Authored-By: Claude Sonnet 4.6 Entire-Checkpoint: fc1901e5e44a --- hosts/lobtop/programs.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hosts/lobtop/programs.nix b/hosts/lobtop/programs.nix index b65b53e9..3ff8af57 100644 --- a/hosts/lobtop/programs.nix +++ b/hosts/lobtop/programs.nix @@ -73,6 +73,11 @@ allow_extended_context = true; }; }; + agent.default_model = { + provider = "amazon-bedrock"; + model = "us.anthropic.claude-sonnet-4-6"; + effort = "max"; + }; agent.tool_permissions = { tools = { terminal = {