diff --git a/docs/conventions.md b/docs/conventions.md index 5896703..78df889 100644 --- a/docs/conventions.md +++ b/docs/conventions.md @@ -172,7 +172,7 @@ The integration block at the bottom of `modules/system/users.nix` turns the cata **New NixOS leaf:** export `flake.nixosModules.whatever`, wire from `system/default.nix` or `desktop/default.nix` if it's global, or only from a host `configuration.nix` if it's not. `nix flake check`. Git-add new paths if eval uses the git tree. -**New HM slice:** add `modules/wisdom/.../foo.nix` exporting `flake.homeManagerModules.wisdomFoo` (import-tree picks it up; `wisdomCatalogExtraModules` includes every `wisdom*` export except `wisdom` / `wisdomShellBash`). Gate packages on `chiasson.home.*.enable`, set `mkDefault true` in `desktop-home-base.nix` if shared, or `enable = true` in a host `home.nix`. Upstream HM deps stay imported unconditionally — use `mkIf` on `cfg.enable` for config (never `config`-dependent `imports`; that recurses). +**New HM slice:** add `modules/wisdom/.../foo.nix` exporting `flake.homeManagerModules.wisdomFoo` (import-tree picks it up; `wisdomCatalogExtraModules` includes every `wisdom*` export except `wisdom` / `wisdomShellBash`). Gate packages on `chiasson.home.*.enable`, and set the slice's own `enable` default (`mkEnableOption "…" // { default = true/false }`) in that same module — defaults live with the option that owns them, not in a shared defaults file. Hosts flip toggles in `home.nix`. Upstream HM deps stay imported unconditionally — use `mkIf` on `cfg.enable` for config (never `config`-dependent `imports`; that recurses). **Derivations:** `let` inside a fragment, or `flake.packages` / `flake.lib` — not a bare `mkDerivation` file import-tree will try to load. diff --git a/modules/hosts/desktop-home-base.nix b/modules/hosts/desktop-home-base.nix index f55a32c..0df1744 100644 --- a/modules/hosts/desktop-home-base.nix +++ b/modules/hosts/desktop-home-base.nix @@ -17,10 +17,6 @@ userCli.enable = true; }; - chiasson.users.extraModules.olivier = - self.lib.wisdomCatalogExtraModules self - ++ [ - self.homeManagerModules.desktopHomeDefaults - ]; + chiasson.users.extraModules.olivier = self.lib.wisdomCatalogExtraModules self; }; } diff --git a/modules/hosts/desktop-home-defaults.nix b/modules/hosts/desktop-home-defaults.nix deleted file mode 100644 index 566f1e9..0000000 --- a/modules/hosts/desktop-home-defaults.nix +++ /dev/null @@ -1,77 +0,0 @@ -# Shared HM defaults for desktop hosts (git identity, wisdom catalog toggles). -{ ... }: { - flake.homeManagerModules.desktopHomeDefaults = - { lib, pkgs, ... }: - let - aarch64 = pkgs.stdenv.hostPlatform.isAarch64; - in - { - programs.git = { - enable = lib.mkDefault true; - settings.user = { - name = "OlivierChiasson"; - email = "olivierchiasson@hotmail.fr"; - }; - }; - - #TODO[epic=Moderate] Check if git-crypt should belong in desktop-home-base. - home.packages = [ pkgs.git-crypt pkgs.feishin ]; - - chiasson.home = { - shell = { - fish.enable = lib.mkDefault true; - ohMyPosh.enable = lib.mkDefault true; - yazi.enable = lib.mkDefault true; - }; - - terminals.kitty.enable = lib.mkDefault true; - - filebrowsers.nemo.enable = lib.mkDefault true; - - browsers = { - chrome.enable = lib.mkDefault false; - chromiumHevc = { - enable = lib.mkDefault true; - packages = lib.mkDefault ( - if aarch64 then - [ "chromium" ] - else - [ "google-chrome" ] - ); - } // lib.optionalAttrs (!aarch64) { - vaapi.gpu = lib.mkDefault "intel"; - }; - edge.enable = lib.mkDefault false; - flow.enable = lib.mkDefault false; - orion.enable = lib.mkDefault false; - zen.enable = lib.mkDefault false; - }; - - editors = { - cursor.enable = lib.mkDefault true; - kate.enable = lib.mkDefault false; - obsidian.enable = lib.mkDefault true; - }; - - apps = { - discord.enable = lib.mkDefault false; - localsend.enable = lib.mkDefault true; - pokeclicker.enable = lib.mkDefault false; - spotify = { - enable = lib.mkDefault false; - openDiscoveryFirewall = lib.mkDefault false; - }; - }; - - desktop = { - screenshot = { - enable = lib.mkDefault true; - swiftshareApiKeyFile = "/run/secrets/swiftshare/API_KEY"; #TODO[epic=sops] redo this by passing sops file output directly - }; - theming.enable = lib.mkDefault true; - }; - - hardware.uconsoleGamepad.enable = lib.mkDefault false; - }; - }; -} diff --git a/modules/wisdom/apps/discord.nix b/modules/wisdom/apps/discord.nix index fe991d1..34ec317 100644 --- a/modules/wisdom/apps/discord.nix +++ b/modules/wisdom/apps/discord.nix @@ -12,7 +12,9 @@ options.chiasson.home.apps.discord.enable = lib.mkEnableOption '' Vesktop (nixcord). Needs nixpkgs `discord` — breaks on e.g. aarch64-linux. - ''; + '' // { + default = false; + }; config = lib.mkIf root.enable (lib.mkMerge [ { diff --git a/modules/wisdom/apps/localsend.nix b/modules/wisdom/apps/localsend.nix index b0312ed..0dab2a6 100644 --- a/modules/wisdom/apps/localsend.nix +++ b/modules/wisdom/apps/localsend.nix @@ -29,7 +29,9 @@ options.chiasson.home.apps.localsend = { enable = lib.mkEnableOption '' LocalSend client; open the firewall on NixOS with `system.localsend` if you want inbound. - ''; + '' // { + default = true; + }; package = lib.mkPackageOption pkgs "localsend" { }; }; diff --git a/modules/wisdom/apps/pokeclicker/default.nix b/modules/wisdom/apps/pokeclicker/default.nix index 9edad47..428e5b3 100644 --- a/modules/wisdom/apps/pokeclicker/default.nix +++ b/modules/wisdom/apps/pokeclicker/default.nix @@ -7,7 +7,9 @@ pokeclickerPkg = pkgs.callPackage ./package { }; in { - options.chiasson.home.apps.pokeclicker.enable = lib.mkEnableOption "PokéClicker desktop (Farigh fork .deb → nix)."; + options.chiasson.home.apps.pokeclicker.enable = lib.mkEnableOption "PokéClicker desktop (Farigh fork .deb → nix)." // { + default = false; + }; config = lib.mkIf (root.enable && cfg.enable) { home.packages = [ pokeclickerPkg ]; diff --git a/modules/wisdom/browsers/chrome.nix b/modules/wisdom/browsers/chrome.nix index 7ea487c..3834e91 100644 --- a/modules/wisdom/browsers/chrome.nix +++ b/modules/wisdom/browsers/chrome.nix @@ -8,7 +8,9 @@ { options.chiasson.home.browsers.chrome.enable = lib.mkEnableOption '' Chrome (unfree, needs `allowUnfree`); skipped if nixpkgs has no build for this platform. - ''; + '' // { + default = false; + }; config = lib.mkIf (root.enable && cfg.enable) { home.packages = lib.optional ( diff --git a/modules/wisdom/browsers/chromium-hevc.nix b/modules/wisdom/browsers/chromium-hevc.nix index 0ae3f7b..868d4ab 100644 --- a/modules/wisdom/browsers/chromium-hevc.nix +++ b/modules/wisdom/browsers/chromium-hevc.nix @@ -155,13 +155,15 @@ `failed Initialize()ing the frame pool` in Jellyfin. Requires `chiasson.system.chromiumHevc.enable` on NixOS. - ''; + '' // { + default = true; + }; packages = lib.mkOption { type = lib.types.listOf ( lib.types.enum (lib.attrNames browserCatalog) ); - default = [ "google-chrome" ]; + default = if pkgs.stdenv.hostPlatform.isAarch64 then [ "chromium" ] else [ "google-chrome" ]; description = "Chromium-based browsers to wrap."; }; diff --git a/modules/wisdom/browsers/edge.nix b/modules/wisdom/browsers/edge.nix index 637b6e6..590198c 100644 --- a/modules/wisdom/browsers/edge.nix +++ b/modules/wisdom/browsers/edge.nix @@ -6,7 +6,9 @@ cfg = config.chiasson.home.browsers.edge; in { - options.chiasson.home.browsers.edge.enable = lib.mkEnableOption "Edge (unfree); skipped if unavailable on this platform."; + options.chiasson.home.browsers.edge.enable = lib.mkEnableOption "Edge (unfree); skipped if unavailable on this platform." // { + default = false; + }; config = lib.mkIf (root.enable && cfg.enable) { home.packages = lib.optional ( diff --git a/modules/wisdom/browsers/flow.nix b/modules/wisdom/browsers/flow.nix index e9c0670..af79ccd 100644 --- a/modules/wisdom/browsers/flow.nix +++ b/modules/wisdom/browsers/flow.nix @@ -56,7 +56,9 @@ { options.chiasson.home.browsers.flow.enable = lib.mkEnableOption '' [Flow](https://github.com/MultiboxLabs/flow-browser) — upstream AppImage wrapped for NixOS. - ''; + '' // { + default = false; + }; config = lib.mkIf (root.enable && cfg.enable) { home.packages = lib.optional ( diff --git a/modules/wisdom/browsers/orion.nix b/modules/wisdom/browsers/orion.nix index 860b498..56ca9a8 100644 --- a/modules/wisdom/browsers/orion.nix +++ b/modules/wisdom/browsers/orion.nix @@ -31,7 +31,9 @@ { options.chiasson.home.browsers.orion.enable = lib.mkEnableOption '' [Orion](https://orionbrowser.com/) (Kagi) — installs the upstream Flatpak bundle and provides `oriongtk`. - ''; + '' // { + default = false; + }; config = lib.mkIf (root.enable && cfg.enable) { home.packages = [ oriongtk ]; diff --git a/modules/wisdom/browsers/zen.nix b/modules/wisdom/browsers/zen.nix index 2af2e74..22de030 100644 --- a/modules/wisdom/browsers/zen.nix +++ b/modules/wisdom/browsers/zen.nix @@ -8,7 +8,9 @@ { imports = [ inputs.zen-browser.homeModules.beta ]; - options.chiasson.home.browsers.zen.enable = lib.mkEnableOption "Zen Browser + locked-down policies / extensions."; + options.chiasson.home.browsers.zen.enable = lib.mkEnableOption "Zen Browser + locked-down policies / extensions." // { + default = false; + }; config = lib.mkIf (root.enable && cfg.enable) { programs.zen-browser = { diff --git a/modules/wisdom/default.nix b/modules/wisdom/default.nix index fa1ecd3..d65abf1 100644 --- a/modules/wisdom/default.nix +++ b/modules/wisdom/default.nix @@ -3,7 +3,7 @@ # Root module: chiasson.home.enable + bash. Other `wisdom*` slices auto-wire via # `lib.wisdomCatalogExtraModules`; hosts flip `chiasson.home.*.enable` rather than re-importing. flake.homeManagerModules.wisdom = - { config, lib, ... }: + { config, lib, pkgs, ... }: let cfg = config.chiasson.home; in @@ -29,6 +29,20 @@ }; }; - config = lib.mkIf cfg.enable { home.packages = cfg.extraPackages; }; + config = lib.mkIf cfg.enable (lib.mkMerge [ + { home.packages = cfg.extraPackages; } + + # Base git identity + encryption/player tools shared by every HM user. + { + programs.git = { + enable = true; + settings.user = { + name = "OlivierChiasson"; + email = "olivierchiasson@hotmail.fr"; + }; + }; + home.packages = [ pkgs.git-crypt pkgs.feishin ]; + } + ]); }; } diff --git a/modules/wisdom/desktop/gtk-qt-theming.nix b/modules/wisdom/desktop/gtk-qt-theming.nix index 094e568..0cacb37 100644 --- a/modules/wisdom/desktop/gtk-qt-theming.nix +++ b/modules/wisdom/desktop/gtk-qt-theming.nix @@ -12,7 +12,9 @@ enable = lib.mkEnableOption '' WhiteSur GTK + icon themes, Phinger cursor, and Qt via qt6ct (DMS) or KDE platform theme. Matugen accent colors load via gtk3/gtk4 extraCss when matugenGtkColors is enabled. - ''; + '' // { + default = true; + }; matugenGtkColors = lib.mkOption { type = lib.types.bool; diff --git a/modules/wisdom/desktop/screenshot.nix b/modules/wisdom/desktop/screenshot.nix index 4541929..1f28883 100644 --- a/modules/wisdom/desktop/screenshot.nix +++ b/modules/wisdom/desktop/screenshot.nix @@ -13,11 +13,13 @@ { options.chiasson.home.desktop.screenshot.enable = lib.mkEnableOption '' grim/slurp/swappy + SwiftShare helpers; Hyprland binds if HM Hyprland is on. - ''; + '' // { + default = true; + }; options.chiasson.home.desktop.screenshot.swiftshareApiKeyFile = lib.mkOption { type = lib.types.nullOr lib.types.str; - default = null; + default = "/run/secrets/swiftshare/API_KEY"; description = '' File with SwiftShare API key (sops path is fine). Required when screenshot module is on. ''; diff --git a/modules/wisdom/editors/cursor.nix b/modules/wisdom/editors/cursor.nix index 5fd2f89..4f3f012 100644 --- a/modules/wisdom/editors/cursor.nix +++ b/modules/wisdom/editors/cursor.nix @@ -33,7 +33,9 @@ in { options.chiasson.home.editors.cursor = { - enable = lib.mkEnableOption "Cursor editor from the `cursor` flake input."; + enable = lib.mkEnableOption "Cursor editor from the `cursor` flake input." // { + default = true; + }; setAsDefaultEditor = lib.mkOption { type = lib.types.bool; default = true; diff --git a/modules/wisdom/editors/kate.nix b/modules/wisdom/editors/kate.nix index 734ef1a..b13ebda 100644 --- a/modules/wisdom/editors/kate.nix +++ b/modules/wisdom/editors/kate.nix @@ -6,7 +6,9 @@ cfg = config.chiasson.home.editors.kate; in { - options.chiasson.home.editors.kate.enable = lib.mkEnableOption "Kate."; + options.chiasson.home.editors.kate.enable = lib.mkEnableOption "Kate." // { + default = false; + }; config = lib.mkIf (root.enable && cfg.enable) { home.packages = lib.optional ( diff --git a/modules/wisdom/editors/obsidian.nix b/modules/wisdom/editors/obsidian.nix index 59d77a8..875890d 100644 --- a/modules/wisdom/editors/obsidian.nix +++ b/modules/wisdom/editors/obsidian.nix @@ -8,7 +8,9 @@ { options.chiasson.home.editors.obsidian.enable = lib.mkEnableOption '' Obsidian (unfree); skipped if unavailable here. - ''; + '' // { + default = true; + }; config = lib.mkIf (root.enable && cfg.enable) { home.packages = lib.optional ( diff --git a/modules/wisdom/filebrowsers/nemo.nix b/modules/wisdom/filebrowsers/nemo.nix index 8c032c8..7907656 100644 --- a/modules/wisdom/filebrowsers/nemo.nix +++ b/modules/wisdom/filebrowsers/nemo.nix @@ -8,7 +8,9 @@ { options.chiasson.home.filebrowsers.nemo.enable = lib.mkEnableOption '' Nemo file manager (GTK). Colors come from DMS matugen via GTK settings — no KDE/Qt bridge needed. - ''; + '' // { + default = true; + }; config = lib.mkIf (root.enable && cfg.enable) { home.packages = [pkgs.nemo]; diff --git a/modules/wisdom/hardware/uconsole-gamepad.nix b/modules/wisdom/hardware/uconsole-gamepad.nix index 01f03b1..95df5bf 100644 --- a/modules/wisdom/hardware/uconsole-gamepad.nix +++ b/modules/wisdom/hardware/uconsole-gamepad.nix @@ -8,7 +8,9 @@ { options.chiasson.home.hardware.uconsoleGamepad.enable = lib.mkEnableOption '' uConsole gamepad antimicrox profile + Hyprland exec-once when HM Hyprland is on. - ''; + '' // { + default = false; + }; config = lib.mkIf (root.enable && cfg.enable) (lib.mkMerge [ { diff --git a/modules/wisdom/shells/fish.nix b/modules/wisdom/shells/fish.nix index 582e0dd..25fd000 100644 --- a/modules/wisdom/shells/fish.nix +++ b/modules/wisdom/shells/fish.nix @@ -8,7 +8,9 @@ in { options.chiasson.home.shell.fish = { - enable = lib.mkEnableOption "Fish + grc, quiet greeting, rbw SSH socket defaults."; + enable = lib.mkEnableOption "Fish + grc, quiet greeting, rbw SSH socket defaults." // { + default = true; + }; nixYourShell = { enable = lib.mkEnableOption '' diff --git a/modules/wisdom/shells/oh-my-posh.nix b/modules/wisdom/shells/oh-my-posh.nix index 63cfacd..dbcb663 100644 --- a/modules/wisdom/shells/oh-my-posh.nix +++ b/modules/wisdom/shells/oh-my-posh.nix @@ -7,7 +7,9 @@ in { options.chiasson.home.shell.ohMyPosh = { - enable = lib.mkEnableOption "[Oh My Posh](https://ohmyposh.dev/) prompt."; + enable = lib.mkEnableOption "[Oh My Posh](https://ohmyposh.dev/) prompt." // { + default = true; + }; builtinTheme = lib.mkOption { type = lib.types.str; diff --git a/modules/wisdom/shells/yazi.nix b/modules/wisdom/shells/yazi.nix index 6c99cb2..4e846ba 100644 --- a/modules/wisdom/shells/yazi.nix +++ b/modules/wisdom/shells/yazi.nix @@ -7,7 +7,9 @@ cfg = config.chiasson.home.shell.yazi; in { - options.chiasson.home.shell.yazi.enable = lib.mkEnableOption "Yazi as `y` + 7zz with rar."; + options.chiasson.home.shell.yazi.enable = lib.mkEnableOption "Yazi as `y` + 7zz with rar." // { + default = true; + }; config = lib.mkIf (root.enable && cfg.enable) { programs.yazi = { diff --git a/modules/wisdom/terminals/kitty.nix b/modules/wisdom/terminals/kitty.nix index 47d3023..42bd3fe 100644 --- a/modules/wisdom/terminals/kitty.nix +++ b/modules/wisdom/terminals/kitty.nix @@ -15,7 +15,9 @@ { options.chiasson.home.terminals.kitty.enable = lib.mkEnableOption '' Kitty + DMS includes; activation strips `*-theme.auto.conf` so matugen colors stick. - ''; + '' // { + default = true; + }; config = lib.mkIf (root.enable && cfg.enable) { programs.kitty = {