{ config, lib, ... }: let homeModules = config.flake.modules.homeManager; metaLib = config.meta.lib; mkNoctaliaSettings = { lib, terminalPackage, }: import ./_noctalia-config.nix { inherit lib terminalPackage ; }; mkPortableSettings = baseSettings: lib.recursiveUpdate baseSettings { bar.widgets.right = lib.concatMap ( widget: if widget.id == "ControlCenter" then [ { id = "Network"; } { id = "Battery"; showPowerProfiles = true; displayMode = "graphic"; } widget ] else [ widget ] ) baseSettings.bar.widgets.right; }; in { flake.modules.homeManager.noctalia-base = { config, lib, pkgs, ... }: let terminal = metaLib.resolveRepoTerminal { inherit pkgs; }; baseSettings = if terminal.hasPackage then mkNoctaliaSettings { inherit lib; terminalPackage = terminal.package; } else { }; in { options.meta.lib.noctaliaBaseSettings = lib.mkOption { type = lib.types.attrs; internal = true; readOnly = true; }; config = { meta.lib.noctaliaBaseSettings = baseSettings; assertions = metaLib.mkTerminalAssertions { inherit terminal; }; }; }; flake.modules.homeManager.noctalia = { config, inputs, lib, pkgs, ... }: { imports = [ homeModules.noctalia-base inputs.noctalia.homeModules.default ]; programs.noctalia-shell = { enable = true; package = lib.mkForce ( inputs.noctalia.packages.${pkgs.stdenv.hostPlatform.system}.default.override { calendarSupport = true; } ); settings = config.meta.lib.noctaliaBaseSettings; }; }; flake.modules.homeManager.noctalia-portable = { config, lib, ... }: { imports = [ homeModules.noctalia ]; programs.noctalia-shell.settings = lib.mkForce ( if config.meta.lib.noctaliaBaseSettings == { } then { } else mkPortableSettings config.meta.lib.noctaliaBaseSettings ); }; }