about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJan Tojnar <jtojnar@gmail.com>2022-09-25 20:31:34 +0200
committerJan Tojnar <jtojnar@gmail.com>2022-09-26 00:52:08 +0200
commit1d4bddaed58c23fbfb4df0bf80d5ffd6803a6a34 (patch)
treeacd11b52c5ff62728e62967d4ef30d55609fd4f1
parentf677051b8dc0b5e2a9348941c99eea8c4b0ff28f (diff)
gnome.nixos-gsettings-override: extract from NixOS module
This will clean up the module slightly and bring it more in line with Pantheon & Cinnamon.
While at it do some other refactoring inspired by those modules:

- Correct a typo in light background attribute name.
- Rename the attribute name.
- Quote arguments.
- Extract the overridden package list and override text into variables.
- Avoid having separate copy commands for overrides from packages.
- Avoid `with` statements.
- Use `concatMapStringsSep`.
-rw-r--r--nixos/modules/services/x11/desktop-managers/gnome.nix42
-rw-r--r--pkgs/desktops/gnome/default.nix2
-rw-r--r--pkgs/desktops/gnome/nixos/gsettings-overrides/default.nix55
3 files changed, 64 insertions, 35 deletions
diff --git a/nixos/modules/services/x11/desktop-managers/gnome.nix b/nixos/modules/services/x11/desktop-managers/gnome.nix
index 7bb7ef27ed572..d3db98cb4e2ae 100644
--- a/nixos/modules/services/x11/desktop-managers/gnome.nix
+++ b/nixos/modules/services/x11/desktop-managers/gnome.nix
@@ -22,42 +22,14 @@ let
     favorite-apps=[ 'org.gnome.Epiphany.desktop', 'org.gnome.Geary.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Photos.desktop', 'org.gnome.Nautilus.desktop' ]
   '';
 
-  nixos-background-ligtht = pkgs.nixos-artwork.wallpapers.simple-blue;
+  nixos-background-light = pkgs.nixos-artwork.wallpapers.simple-blue;
   nixos-background-dark = pkgs.nixos-artwork.wallpapers.simple-dark-gray;
 
-  nixos-gsettings-desktop-schemas = let
-    defaultPackages = with pkgs; [ gsettings-desktop-schemas gnome.gnome-shell ];
-  in
-  pkgs.runCommand "nixos-gsettings-desktop-schemas" { preferLocalBuild = true; }
-    ''
-     mkdir -p $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas
-
-     ${concatMapStrings
-        (pkg: "cp -rf ${pkg}/share/gsettings-schemas/*/glib-2.0/schemas/*.xml $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas\n")
-        (defaultPackages ++ cfg.extraGSettingsOverridePackages)}
-
-     cp -f ${pkgs.gnome.gnome-shell}/share/gsettings-schemas/*/glib-2.0/schemas/*.gschema.override $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas
-
-     ${optionalString flashbackEnabled ''
-       cp -f ${pkgs.gnome.gnome-flashback}/share/gsettings-schemas/*/glib-2.0/schemas/*.gschema.override $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas
-     ''}
-
-     chmod -R a+w $out/share/gsettings-schemas/nixos-gsettings-overrides
-     cat - > $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/nixos-defaults.gschema.override <<- EOF
-       [org.gnome.desktop.background]
-       picture-uri='file://${nixos-background-ligtht.gnomeFilePath}'
-       picture-uri-dark='file://${nixos-background-dark.gnomeFilePath}'
-
-       [org.gnome.desktop.screensaver]
-       picture-uri='file://${nixos-background-dark.gnomeFilePath}'
-
-       ${cfg.favoriteAppsOverride}
-
-       ${cfg.extraGSettingsOverrides}
-     EOF
-
-     ${pkgs.glib.dev}/bin/glib-compile-schemas $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/
-    '';
+  # TODO: Having https://github.com/NixOS/nixpkgs/issues/54150 would supersede this
+  nixos-gsettings-desktop-schemas = pkgs.gnome.nixos-gsettings-overrides.override {
+    inherit (cfg) extraGSettingsOverrides extraGSettingsOverridePackages favoriteAppsOverride;
+    inherit flashbackEnabled nixos-background-dark nixos-background-light;
+  };
 
   nixos-background-info = pkgs.writeTextFile rec {
     name = "nixos-background-info";
@@ -67,7 +39,7 @@ let
       <wallpapers>
         <wallpaper deleted="false">
           <name>Blobs</name>
-          <filename>${nixos-background-ligtht.gnomeFilePath}</filename>
+          <filename>${nixos-background-light.gnomeFilePath}</filename>
           <filename-dark>${nixos-background-dark.gnomeFilePath}</filename-dark>
           <options>zoom</options>
           <shade_type>solid</shade_type>
diff --git a/pkgs/desktops/gnome/default.nix b/pkgs/desktops/gnome/default.nix
index a0561ca00300b..1169bae6d67e4 100644
--- a/pkgs/desktops/gnome/default.nix
+++ b/pkgs/desktops/gnome/default.nix
@@ -123,6 +123,8 @@ lib.makeScope pkgs.newScope (self: with self; {
     withGnome = true;
   };
 
+  nixos-gsettings-overrides = callPackage ./nixos/gsettings-overrides { };
+
   rygel = callPackage ./core/rygel { };
 
   simple-scan = callPackage ./core/simple-scan { };
diff --git a/pkgs/desktops/gnome/nixos/gsettings-overrides/default.nix b/pkgs/desktops/gnome/nixos/gsettings-overrides/default.nix
new file mode 100644
index 0000000000000..3110fc7939bbb
--- /dev/null
+++ b/pkgs/desktops/gnome/nixos/gsettings-overrides/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, runCommand
+, gsettings-desktop-schemas
+, gnome-shell
+, glib
+, gnome-flashback
+, nixos-artwork
+, nixos-background-light ? nixos-artwork.wallpapers.simple-blue
+, nixos-background-dark ? nixos-artwork.wallpapers.simple-dark-gray
+, extraGSettingsOverrides ? ""
+, extraGSettingsOverridePackages ? [ ]
+, favoriteAppsOverride ? ""
+, flashbackEnabled ? false
+}:
+
+let
+
+  inherit (lib) concatMapStringsSep;
+
+  gsettingsOverridePackages = [
+    gsettings-desktop-schemas
+    gnome-shell
+  ] ++ lib.optionals flashbackEnabled [
+    gnome-flashback
+  ] ++ extraGSettingsOverridePackages;
+
+  gsettingsOverrides = ''
+    [org.gnome.desktop.background]
+    picture-uri='file://${nixos-background-light.gnomeFilePath}'
+    picture-uri-dark='file://${nixos-background-dark.gnomeFilePath}'
+
+    [org.gnome.desktop.screensaver]
+    picture-uri='file://${nixos-background-dark.gnomeFilePath}'
+
+    ${favoriteAppsOverride}
+
+    ${extraGSettingsOverrides}
+  '';
+
+in
+
+runCommand "gnome-gsettings-overrides" { preferLocalBuild = true; } ''
+  data_dir="$out/share/gsettings-schemas/nixos-gsettings-overrides"
+  schema_dir="$data_dir/glib-2.0/schemas"
+  mkdir -p "$schema_dir"
+
+  ${concatMapStringsSep "\n" (pkg: "cp -rf \"${glib.getSchemaPath pkg}\"/*.xml \"${glib.getSchemaPath pkg}\"/*.gschema.override \"$schema_dir\"") gsettingsOverridePackages}
+
+  chmod -R a+w "$data_dir"
+  cat - > "$schema_dir/nixos-defaults.gschema.override" <<- EOF
+  ${gsettingsOverrides}
+  EOF
+
+  ${glib.dev}/bin/glib-compile-schemas "$schema_dir"
+''