From e6b7269b3cb851c4707579290dea8bf568514698 Mon Sep 17 00:00:00 2001 From: Bernardo Magri Date: Sun, 31 May 2026 15:44:50 +0100 Subject: [PATCH] feat: move core apps to downstream and make app modules opt-in --- core/home/options.nix | 25 ++++++--- docs/AGENT.md | 4 +- docs/MIGRATION.md | 17 +++++- docs/OPTIONS.md | 50 ++++++++++++++++-- features/apps/alacritty/default.nix | 40 ++++++++------- features/apps/btop/default.nix | 5 +- features/apps/elephant/default.nix | 8 +-- features/apps/ghostty/default.nix | 4 +- features/apps/kitty/default.nix | 5 +- features/apps/lazygit/default.nix | 5 +- features/apps/swayosd.nix | 74 +++++++++++++------------- features/apps/tmux/default.nix | 5 +- features/apps/vscode.nix | 12 +---- features/apps/walker.nix | 80 +++++++++++++++-------------- features/default.nix | 8 --- flake.nix | 57 ++++++++++++++++++++ installer/install.sh | 43 ++++++++++++---- 17 files changed, 297 insertions(+), 145 deletions(-) diff --git a/core/home/options.nix b/core/home/options.nix index 53fb390..b0a18be 100644 --- a/core/home/options.nix +++ b/core/home/options.nix @@ -144,14 +144,25 @@ in }; apps = { - opencode = { - enable = lib.mkEnableOption '' - opencode AI coding CLI integration. When on, deploys - ~/.config/opencode/opencode.json. The `opencode` package itself - is not installed by Nomarchy — add it to your home.nix if you - want it on PATH. - ''; + alacritty.enable = lib.mkEnableOption "Alacritty terminal integration"; + btop.enable = lib.mkEnableOption "btop resource monitor integration"; + ghostty.enable = lib.mkEnableOption "Ghostty terminal integration"; + kitty.enable = lib.mkEnableOption "Kitty terminal integration"; + lazygit.enable = lib.mkEnableOption "lazygit integration"; + tmux.enable = lib.mkEnableOption "tmux integration"; + elephant.enable = lib.mkEnableOption "Elephant menu provider integration"; + walker.enable = lib.mkEnableOption "Walker launcher integration"; + swayosd.enable = lib.mkEnableOption "SwayOSD integration"; + vscode = { + enable = lib.mkEnableOption "VSCode integration"; + devExtensions = lib.mkEnableOption "Nomarchy's curated VSCode extension pack (language servers + git + editor enhancements)"; }; + opencode.enable = lib.mkEnableOption '' + opencode AI coding CLI integration. When on, deploys + ~/.config/opencode/opencode.json. The `opencode` package itself + is not installed by Nomarchy — add it to your home.nix if you + want it on PATH. + ''; }; gaming = { diff --git a/docs/AGENT.md b/docs/AGENT.md index dfac11a..49c631d 100644 --- a/docs/AGENT.md +++ b/docs/AGENT.md @@ -64,10 +64,12 @@ bin/ Convenience wrappers for testing (nomarchy-test-installer, …). When you add a new feature: -- A new app → `features/apps//default.nix` (+ optional `config/`), import it from `features/default.nix`. +- A new app → `features/apps//default.nix` (+ optional `config/`), import it from `features/default.nix`. **All app modules must be opt-in** via a `nomarchy.apps..enable` option defined in `core/home/options.nix`. Enabling the module should also handle the `programs..enable` or `home.packages` installation where applicable. - A new system service → `core/system/.nix`, import from `core/default.nix`. - A new toggle → add to `core/system/options.nix` or `core/home/options.nix`, wire it into the relevant module, document it in `docs/OPTIONS.md`. +Core user-facing apps (browsers, file managers, media players) are **not** installed by the `features/default.nix` module list. Instead, they are managed in the downstream `home.nix` (which the installer pre-fills with defaults like `firefox` and `thunar`). This keeps the Nomarchy core modules focused on the desktop environment while giving the user explicit control over their app set. + --- ## 3. Guardrails (non-negotiable unless the user overrides) diff --git a/docs/MIGRATION.md b/docs/MIGRATION.md index 5d68162..b15f7dc 100644 --- a/docs/MIGRATION.md +++ b/docs/MIGRATION.md @@ -123,11 +123,24 @@ create minimal versions to start: { pkgs, ... }: { home.packages = with pkgs; [ - btop + firefox + xfce.thunar + imv + mpv fastfetch chromium - # …add anything you want; firefox/thunar/mpv/mako/etc. ship with Nomarchy. + # …add anything you want; mako/hyprlock/swww/rofi/etc. ship with Nomarchy. ]; + + # Enable Nomarchy's curated app configurations + nomarchy.apps = { + alacritty.enable = true; + btop.enable = true; + elephant.enable = true; + swayosd.enable = true; + walker.enable = true; + vscode.enable = true; + }; } ``` diff --git a/docs/OPTIONS.md b/docs/OPTIONS.md index 6005e09..e74e0c7 100644 --- a/docs/OPTIONS.md +++ b/docs/OPTIONS.md @@ -253,6 +253,50 @@ Without prime config, supergfxd still switches modes but render-offload via `nvi `nullOr path`, default `null`. Path to a replacement config directory. When set, the items listed in `core/home/configs.nix` (`fastfetch`, `fcitx5`, `fontconfig`, `git`, `imv`, `nautilus-python`, `nomarchy`, `nomarchy-skill`, `uwsm`, `wiremix`, plus the loose files) are read from `/` instead of the bundled defaults. Distinct from `nomarchy.overrides.*` below — `configOverrides` is a working *bulk* redirect; `overrides.paths` is a *per-file* attrset map. +### `nomarchy.apps.alacritty.enable` + +`bool`, default `false`. Enables Nomarchy's curated Alacritty configuration. The installer enables this by default. + +### `nomarchy.apps.btop.enable` + +`bool`, default `false`. Enables Nomarchy's curated btop configuration (themed color scheme, vim keys). The installer enables this by default. + +### `nomarchy.apps.ghostty.enable` + +`bool`, default `false`. Deploys Nomarchy's curated Ghostty configuration. + +### `nomarchy.apps.kitty.enable` + +`bool`, default `false`. Deploys Nomarchy's curated Kitty configuration. + +### `nomarchy.apps.lazygit.enable` + +`bool`, default `false`. Deploys Nomarchy's curated lazygit configuration. + +### `nomarchy.apps.tmux.enable` + +`bool`, default `false`. Deploys Nomarchy's curated tmux configuration. + +### `nomarchy.apps.elephant.enable` + +`bool`, default `false`. Enables Nomarchy's curated Elephant menu provider integration (required for the theme picker and background selector). The installer enables this by default. + +### `nomarchy.apps.walker.enable` + +`bool`, default `false`. Enables Nomarchy's curated Walker launcher configuration. The installer enables this by default. + +### `nomarchy.apps.swayosd.enable` + +`bool`, default `false`. Enables Nomarchy's curated SwayOSD configuration. The installer enables this by default. + +### `nomarchy.apps.vscode.enable` + +`bool`, default `false`. Enables Nomarchy's curated VSCode configuration (theming, fonts). The installer enables this by default. + +### `nomarchy.apps.vscode.devExtensions` + +`bool`, default `false`. Install Nomarchy's curated VSCode extension pack (language servers + git + editor enhancements). The palette theme extensions are *always* installed when `vscode.enable` is true — every palette except `ethereal`, `hackerman`, and `vantablack` resolves its `workbench.colorTheme` via either `pkgs.vscode-extensions` (catppuccin/nord/tokyo-night/rose-pine/gruvbox) or `pkgs.vscode-utils.extensionFromVscodeMarketplace` with version + sha256 pinned (sainnhe.everforest, qufiwefefwoyn.kanagawa, monokai.theme-monokai-pro-vscode, oldjobobo.{lumon,miasma,retro-82}, shadesOfBuntu.flexoki-light, jovejonovski.ocean-green, TahaYVR.matteblack, Bjarne.white-theme). The three palettes whose theme extension isn't on the marketplace fall back to VSCode's default theme; see the ROADMAP Later row. + ### `nomarchy.apps.opencode.enable` `bool`, default `false`. opencode AI coding CLI integration. Deploys `~/.config/opencode/opencode.json`. The `opencode` package itself is **not** installed by Nomarchy — add it to your `home.packages`. @@ -263,11 +307,7 @@ Without prime config, supergfxd still switches modes but render-offload via `nvi ### `nomarchy.accessibility.enable` -`bool`, default `false`. Home-side companion to `nomarchy.system.accessibility.enable`. Three Hyprland-side adjustments: slows `input.repeat_rate` to `25` (default `40`) and `input.repeat_delay` to `1000` ms (default `600`) so holding a key isn't a runaway machine-gun for low-mobility users; binds `SUPER+ALT+S` to launch the Orca screen reader (the system preset already puts `orca` on PATH). Set to the same value as the system option. Update the bullet in `docs/ROADMAP.md` if a high-contrast palette ships as a `themes/palettes/` entry — it'll be gated on this option. - -### `nomarchy.vscode.devExtensions` - -`bool`, default `false`. Install Nomarchy's curated VSCode extension pack (language servers + git + editor enhancements). The palette theme extensions are *always* installed regardless of this flag — every palette except `ethereal`, `hackerman`, and `vantablack` resolves its `workbench.colorTheme` via either `pkgs.vscode-extensions` (catppuccin/nord/tokyo-night/rose-pine/gruvbox) or `pkgs.vscode-utils.extensionFromVscodeMarketplace` with version + sha256 pinned (sainnhe.everforest, qufiwefefwoyn.kanagawa, monokai.theme-monokai-pro-vscode, oldjobobo.{lumon,miasma,retro-82}, shadesOfBuntu.flexoki-light, jovejonovski.ocean-green, TahaYVR.matteblack, Bjarne.white-theme). The three palettes whose theme extension isn't on the marketplace fall back to VSCode's default theme; see the ROADMAP Later row. +`bool`, default `false`. Home-side companion to `nomarchy.system.accessibility.enable`. Three Hyprland-side adjustments: slows `input.repeat_rate` to `25` (default `40`) and `input.repeat_delay` to `1000` ms (from `600`) so holding a key isn't a runaway machine-gun for low-mobility users; binds `SUPER+ALT+S` to launch the Orca screen reader (the system preset already puts `orca` on PATH). Set to the same value as the system option. Update the bullet in `docs/ROADMAP.md` if a high-contrast palette ships as a `themes/palettes/` entry — it'll be gated on this option. ### `nomarchy.themeLoader.enable` diff --git a/features/apps/alacritty/default.nix b/features/apps/alacritty/default.nix index 6a1e678..3f6f277 100644 --- a/features/apps/alacritty/default.nix +++ b/features/apps/alacritty/default.nix @@ -1,25 +1,27 @@ { config, pkgs, lib, ... }: { - programs.alacritty = { - enable = lib.mkDefault true; - settings = lib.mkDefault { - env = { - TERM = "xterm-256color"; - }; - terminal = { - osc52 = "CopyPaste"; - }; - window = { - padding = { x = 14; y = 14; }; - decorations = "None"; - }; - keyboard = { - bindings = [ - { key = "Insert"; mods = "Shift"; action = "Paste"; } - { key = "Insert"; mods = "Control"; action = "Copy"; } - { key = "Return"; mods = "Shift"; chars = "\\u001B\\r"; } - ]; + config = lib.mkIf config.nomarchy.apps.alacritty.enable { + programs.alacritty = { + enable = lib.mkDefault true; + settings = lib.mkDefault { + env = { + TERM = "xterm-256color"; + }; + terminal = { + osc52 = "CopyPaste"; + }; + window = { + padding = { x = 14; y = 14; }; + decorations = "None"; + }; + keyboard = { + bindings = [ + { key = "Insert"; mods = "Shift"; action = "Paste"; } + { key = "Insert"; mods = "Control"; action = "Copy"; } + { key = "Return"; mods = "Shift"; chars = "\\u001B\\r"; } + ]; + }; }; }; }; diff --git a/features/apps/btop/default.nix b/features/apps/btop/default.nix index 4e79aca..07772cb 100644 --- a/features/apps/btop/default.nix +++ b/features/apps/btop/default.nix @@ -1,5 +1,8 @@ { config, pkgs, lib, ... }: { - xdg.configFile."btop/btop.conf".source = ./config/btop.conf; + config = lib.mkIf config.nomarchy.apps.btop.enable { + programs.btop.enable = lib.mkDefault true; + xdg.configFile."btop/btop.conf".source = ./config/btop.conf; + }; } diff --git a/features/apps/elephant/default.nix b/features/apps/elephant/default.nix index 71079ed..defb2f0 100644 --- a/features/apps/elephant/default.nix +++ b/features/apps/elephant/default.nix @@ -1,8 +1,10 @@ { config, pkgs, lib, ... }: { - xdg.configFile."elephant" = { - source = ./config; - recursive = true; + config = lib.mkIf config.nomarchy.apps.elephant.enable { + xdg.configFile."elephant" = { + source = ./config; + recursive = true; + }; }; } diff --git a/features/apps/ghostty/default.nix b/features/apps/ghostty/default.nix index 61b4c3f..5b7d82b 100644 --- a/features/apps/ghostty/default.nix +++ b/features/apps/ghostty/default.nix @@ -1,5 +1,7 @@ { config, pkgs, lib, ... }: { - xdg.configFile."ghostty/config".source = ./config/config; + config = lib.mkIf config.nomarchy.apps.ghostty.enable { + xdg.configFile."ghostty/config".source = ./config/config; + }; } diff --git a/features/apps/kitty/default.nix b/features/apps/kitty/default.nix index b96d9fa..a7641a6 100644 --- a/features/apps/kitty/default.nix +++ b/features/apps/kitty/default.nix @@ -1,5 +1,8 @@ { config, pkgs, lib, ... }: { - xdg.configFile."kitty/kitty.conf".source = ./config/kitty.conf; + config = lib.mkIf config.nomarchy.apps.kitty.enable { + programs.kitty.enable = lib.mkDefault true; + xdg.configFile."kitty/kitty.conf".source = ./config/kitty.conf; + }; } diff --git a/features/apps/lazygit/default.nix b/features/apps/lazygit/default.nix index bc5aa5d..d49d1b1 100644 --- a/features/apps/lazygit/default.nix +++ b/features/apps/lazygit/default.nix @@ -1,5 +1,8 @@ { config, pkgs, lib, ... }: { - xdg.configFile."lazygit/config.yml".source = ./config/config.yml; + config = lib.mkIf config.nomarchy.apps.lazygit.enable { + home.packages = [ pkgs.lazygit ]; + xdg.configFile."lazygit/config.yml".source = ./config/config.yml; + }; } diff --git a/features/apps/swayosd.nix b/features/apps/swayosd.nix index 6681125..6ea6c6f 100644 --- a/features/apps/swayosd.nix +++ b/features/apps/swayosd.nix @@ -1,41 +1,43 @@ { config, pkgs, lib, ... }: { - services.swayosd = { - enable = lib.mkDefault true; - stylePath = lib.mkDefault "${config.home.homeDirectory}/.config/swayosd/style.css"; + config = lib.mkIf config.nomarchy.apps.swayosd.enable { + services.swayosd = { + enable = lib.mkDefault true; + stylePath = lib.mkDefault "${config.home.homeDirectory}/.config/swayosd/style.css"; + }; + + xdg.configFile."swayosd/style.css".text = lib.mkDefault '' + @define-color background-color #${config.colorScheme.palette.base00}; + @define-color border-color #${config.colorScheme.palette.base0E}; + @define-color label #${config.colorScheme.palette.base05}; + @define-color image #${config.colorScheme.palette.base05}; + @define-color progress #${config.colorScheme.palette.base0B}; + + window { + border-radius: 0; + opacity: 0.97; + border: 2px solid @border-color; + background-color: @background-color; + } + + label { + font-family: '${config.nomarchy.fonts.monospace}'; + font-size: 11pt; + color: @label; + } + + image { + color: @image; + } + + progressbar { + border-radius: 0; + } + + progress { + background-color: @progress; + } + ''; }; - - xdg.configFile."swayosd/style.css".text = lib.mkDefault '' - @define-color background-color #${config.colorScheme.palette.base00}; - @define-color border-color #${config.colorScheme.palette.base0E}; - @define-color label #${config.colorScheme.palette.base05}; - @define-color image #${config.colorScheme.palette.base05}; - @define-color progress #${config.colorScheme.palette.base0B}; - - window { - border-radius: 0; - opacity: 0.97; - border: 2px solid @border-color; - background-color: @background-color; - } - - label { - font-family: '${config.nomarchy.fonts.monospace}'; - font-size: 11pt; - color: @label; - } - - image { - color: @image; - } - - progressbar { - border-radius: 0; - } - - progress { - background-color: @progress; - } - ''; } diff --git a/features/apps/tmux/default.nix b/features/apps/tmux/default.nix index b8ec5e1..ab5d4fd 100644 --- a/features/apps/tmux/default.nix +++ b/features/apps/tmux/default.nix @@ -1,5 +1,8 @@ { config, pkgs, lib, ... }: { - xdg.configFile."tmux/tmux.conf".source = ./config/tmux.conf; + config = lib.mkIf config.nomarchy.apps.tmux.enable { + programs.tmux.enable = lib.mkDefault true; + xdg.configFile."tmux/tmux.conf".source = ./config/tmux.conf; + }; } diff --git a/features/apps/vscode.nix b/features/apps/vscode.nix index 134e3ec..fbfef15 100644 --- a/features/apps/vscode.nix +++ b/features/apps/vscode.nix @@ -96,15 +96,7 @@ let ]; in { - options.nomarchy.vscode = { - devExtensions = lib.mkOption { - type = lib.types.bool; - default = false; - description = "Whether to install development extensions for VSCode."; - }; - }; - - config = { + config = lib.mkIf config.nomarchy.apps.vscode.enable { programs.vscode = { enable = lib.mkDefault true; package = lib.mkDefault pkgs.vscode; @@ -118,7 +110,7 @@ in }; extensions = lib.mkDefault ( themeExtensions - ++ lib.optionals config.nomarchy.vscode.devExtensions devExtensions + ++ lib.optionals config.nomarchy.apps.vscode.devExtensions devExtensions ); }; }; diff --git a/features/apps/walker.nix b/features/apps/walker.nix index 3862dfb..11ea3e6 100644 --- a/features/apps/walker.nix +++ b/features/apps/walker.nix @@ -1,49 +1,51 @@ { config, pkgs, lib, ... }: { - home.packages = [ pkgs.lua ]; + config = lib.mkIf config.nomarchy.apps.walker.enable { + home.packages = [ pkgs.lua ]; - programs.walker = { - enable = lib.mkDefault true; - runAsService = lib.mkDefault true; - config = lib.mkDefault { - theme = "nomarchy"; - ui = { - anchors = { - top = true; + programs.walker = { + enable = lib.mkDefault true; + runAsService = lib.mkDefault true; + config = lib.mkDefault { + theme = "nomarchy"; + ui = { + anchors = { + top = true; + }; + }; + selection_wrap = true; + hide_action_hints = true; + placeholders = { + "default" = { input = " Search..."; list = "No Results"; }; + }; + keybinds = { + quick_activate = []; + }; + columns = { + symbols = 1; + }; + providers = { + max_results = 256; + default = [ + "desktopapplications" + "websearch" + ]; + prefixes = [ + { prefix = "/"; provider = "providerlist"; } + { prefix = "."; provider = "files"; } + { prefix = ":"; provider = "symbols"; } + { prefix = "="; provider = "calc"; } + { prefix = "@"; provider = "websearch"; } + { prefix = "$"; provider = "clipboard"; } + ]; }; }; - selection_wrap = true; - hide_action_hints = true; - placeholders = { - "default" = { input = " Search..."; list = "No Results"; }; + themes."nomarchy" = lib.mkDefault { + style = '' + @import "${config.home.homeDirectory}/.config/nomarchy/current/theme/apps/walker/style.css"; + ''; }; - keybinds = { - quick_activate = []; - }; - columns = { - symbols = 1; - }; - providers = { - max_results = 256; - default = [ - "desktopapplications" - "websearch" - ]; - prefixes = [ - { prefix = "/"; provider = "providerlist"; } - { prefix = "."; provider = "files"; } - { prefix = ":"; provider = "symbols"; } - { prefix = "="; provider = "calc"; } - { prefix = "@"; provider = "websearch"; } - { prefix = "$"; provider = "clipboard"; } - ]; - }; - }; - themes."nomarchy" = lib.mkDefault { - style = '' - @import "${config.home.homeDirectory}/.config/nomarchy/current/theme/apps/walker/style.css"; - ''; }; }; } diff --git a/features/default.nix b/features/default.nix index bb95f76..ebeba5f 100644 --- a/features/default.nix +++ b/features/default.nix @@ -44,14 +44,6 @@ in # the installer's profile packages), silently removing firefox, mako, # hyprlock, mpv, etc. — which broke notifications and the lock screen. home.packages = (with pkgs; [ - # Core applications - firefox - xfce.thunar - - # Media - imv # Image viewer - mpv # Video player - # Hyprland ecosystem swww # Wallpaper daemon mako # Notification daemon diff --git a/flake.nix b/flake.nix index 6ab225e..da5b63f 100644 --- a/flake.nix +++ b/flake.nix @@ -88,6 +88,25 @@ modules = [{ nomarchy.theme = lib.mkForce themeName; nomarchy.wallpaper = lib.mkForce ""; + nomarchy.apps = { + alacritty.enable = true; + btop.enable = true; + elephant.enable = true; + swayosd.enable = true; + walker.enable = true; + vscode.enable = true; + kitty.enable = true; + lazygit.enable = true; + tmux.enable = true; + }; + home.packages = with pkgs; [ + firefox + xfce.thunar + imv + mpv + fastfetch + chromium + ]; }]; }).activationPackage; allThemeVariants = pkgs.linkFarm "nomarchy-all-theme-variants" @@ -169,6 +188,25 @@ home-manager.users.nixos = { imports = [ ./features ]; home.stateVersion = "25.11"; + nomarchy.apps = { + alacritty.enable = true; + btop.enable = true; + elephant.enable = true; + swayosd.enable = true; + walker.enable = true; + vscode.enable = true; + kitty.enable = true; + lazygit.enable = true; + tmux.enable = true; + }; + home.packages = with pkgs; [ + firefox + xfce.thunar + imv + mpv + fastfetch + chromium + ]; # Live-ISO-only welcome. Pops a notification a few seconds # after the graphical session is up and opens a terminal @@ -221,6 +259,25 @@ home-manager.users.nomarchy = { imports = [ ./features ]; home.stateVersion = "25.11"; + nomarchy.apps = { + alacritty.enable = true; + btop.enable = true; + elephant.enable = true; + swayosd.enable = true; + walker.enable = true; + vscode.enable = true; + kitty.enable = true; + lazygit.enable = true; + tmux.enable = true; + }; + home.packages = with pkgs; [ + firefox + xfce.thunar + imv + mpv + fastfetch + chromium + ]; }; } ]; diff --git a/installer/install.sh b/installer/install.sh index 2a17b1b..417ad1c 100755 --- a/installer/install.sh +++ b/installer/install.sh @@ -1729,13 +1729,16 @@ EOF # User-level packages (Home Manager). # - # Nomarchy already ships a minimal desktop (firefox, thunar, mpv, imv, mako, - # hyprlock, swww, wl-clipboard, grim, slurp, rofi-wayland, etc.). The list - # below is a menu of extras — uncomment what you want and run - # \`nomarchy-env-update\`. + # Nomarchy already ships the core Hyprland ecosystem (mako, hyprlock, swww, + # wl-clipboard, grim, slurp, rofi, etc.). The list below includes the + # default user apps and a menu of extras — uncomment what you want and + # run \`nomarchy-env-update\`. home.packages = with pkgs; [ # --- Enabled by default --- - btop # Resource monitor (TUI) + firefox + xfce.thunar + imv # Image viewer + mpv # Video player fastfetch # System info at login chromium # Secondary browser $PROFILE_HOME_PACKAGES @@ -1797,12 +1800,32 @@ EOF # tldr ]; - # --- Optional Nomarchy app modules --- + # --- Nomarchy app modules --- - # opencode AI coding CLI integration (deploys ~/.config/opencode/opencode.json). - # The \`opencode\` package itself is not installed automatically — add it to - # \`home.packages\` above if you want it on PATH. - # nomarchy.apps.opencode.enable = true; + # These enable Nomarchy's curated configurations for the respective apps. + # Most are enabled by default to give you a complete desktop experience. + # Enabling the module also installs the corresponding package. + nomarchy.apps = { + alacritty.enable = true; + btop.enable = true; + elephant.enable = true; + swayosd.enable = true; + walker.enable = true; + vscode.enable = true; + kitty.enable = true; + lazygit.enable = true; + tmux.enable = true; + + # opencode AI coding CLI integration (deploys ~/.config/opencode/opencode.json). + # The \`opencode\` package itself is not installed automatically — add it to + # \`home.packages\` above if you want it on PATH. + # opencode.enable = true; + + # Deploys themed config if you install the package (Ghostty is not in nixpkgs) + # ghostty.enable = true; + }; + + # --- Optional Nomarchy app modules --- # Extra Home Manager modules go here (program configs, services, etc.). }