diff --git a/nixos/modules/services/desktop-managers/lomiri.nix b/nixos/modules/services/desktop-managers/lomiri.nix index 57b38f81f0f3..364acd2dfde2 100644 --- a/nixos/modules/services/desktop-managers/lomiri.nix +++ b/nixos/modules/services/desktop-managers/lomiri.nix @@ -7,6 +7,9 @@ let cfg = config.services.desktopManager.lomiri; + nixos-gsettings-overrides = pkgs.lomiri.lomiri-gsettings-overrides.override { + inherit (cfg) extraGSettingsOverrides extraGSettingsOverridePackages; + }; in { options.services.desktopManager.lomiri = { @@ -22,6 +25,18 @@ in type = lib.types.bool; default = config.services.xserver.displayManager.lightdm.greeters.lomiri.enable || cfg.enable; }; + + extraGSettingsOverrides = lib.mkOption { + description = "Additional GSettings overrides."; + type = lib.types.lines; + default = ""; + }; + + extraGSettingsOverridePackages = lib.mkOption { + description = "List of packages for which GSettings are overridden."; + type = lib.types.listOf lib.types.path; + default = [ ]; + }; }; config = lib.mkMerge [ @@ -43,10 +58,17 @@ in "/share/wallpapers" ]; - systemPackages = with pkgs.lomiri; [ - lomiri-wallpapers # default + additional wallpaper - suru-icon-theme # basic indicator icons - ]; + # Override GSettings defaults + sessionVariables.NIX_GSETTINGS_OVERRIDES_DIR = "${nixos-gsettings-overrides}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas"; + + systemPackages = + [ + nixos-gsettings-overrides # GSettings default overrides + ] + ++ (with pkgs.lomiri; [ + lomiri-wallpapers # default + additional wallpaper + suru-icon-theme # basic indicator icons + ]); }; fonts.packages = with pkgs; [ diff --git a/pkgs/desktops/lomiri/data/lomiri-gsettings-overrides/default.nix b/pkgs/desktops/lomiri/data/lomiri-gsettings-overrides/default.nix new file mode 100644 index 000000000000..672c7adbeb8b --- /dev/null +++ b/pkgs/desktops/lomiri/data/lomiri-gsettings-overrides/default.nix @@ -0,0 +1,51 @@ +{ + lib, + runCommand, + glib, + lomiri-schemas, + lomiri-wallpapers, + nixos-icons, + writeText, + extraGSettingsOverrides ? "", + extraGSettingsOverridePackages ? [ ], + nixos-artwork, +}: + +let + # Overriding the background picture should be possible, but breaks within the VM tests. + # It results in either a grey background (prolly indicating an error somewhere) + # or hangs the session (also happens when using LSS, which sets it via AccountsService). + # + # So we can only override the launcher button details. + # Button colour: https://github.com/NixOS/nixos-artwork/blob/51a27e4a011e95cb559e37d32c44cf89b50f5154/logo/README.md#colours + gsettingsOverrides = writeText "lomiri-gschema-overrides" '' + [com.lomiri.Shell.Launcher] + logo-picture-uri='file://${nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake-white.svg' + home-button-background-color='#5277C3' + + ${extraGSettingsOverrides} + ''; + + gsettingsOverridePackages = [ + lomiri-schemas + ] ++ extraGSettingsOverridePackages; +in +runCommand "lomiri-gsettings-overrides" { preferLocalBuild = true; } '' + dataDir="$out/share/gsettings-schemas/nixos-gsettings-overrides" + schemaDir="$dataDir/glib-2.0/schemas" + mkdir -p "$schemaDir" + + ${lib.strings.concatMapStringsSep "\n" ( + pkg: + "cp -rf \"${glib.getSchemaPath pkg}\"/*.xml \"${glib.getSchemaPath pkg}\"/*.gschema.override \"$schemaDir\"" + ) gsettingsOverridePackages} + + chmod -R a+w "$dataDir" + cp --no-preserve=mode "${gsettingsOverrides}" "$schemaDir/zz-nixos-defaults.gschema.override" + + ${lib.getExe' glib.dev "glib-compile-schemas"} --strict "$schemaDir" | tee gcs.log + + if grep 'No schema files found' gcs.log >/dev/null; then + exit 1 + fi +'' diff --git a/pkgs/desktops/lomiri/default.nix b/pkgs/desktops/lomiri/default.nix index 893165171bb5..fbcb046f2caa 100644 --- a/pkgs/desktops/lomiri/default.nix +++ b/pkgs/desktops/lomiri/default.nix @@ -31,6 +31,7 @@ let teleports = callPackage ./applications/teleports { }; #### Data + lomiri-gsettings-overrides = callPackage ./data/lomiri-gsettings-overrides { }; lomiri-schemas = callPackage ./data/lomiri-schemas { }; lomiri-session = callPackage ./data/lomiri-session { }; lomiri-sounds = callPackage ./data/lomiri-sounds { };