git.iko.soy/typeable/nixpkgs
on master help sign in
gnomeExtensions: add patch framework

It's like Haskell's overlay system, but way more primitive. We simply pre-define some package overrides that are required for an automatically packaged extension to work. Ideally, all (or almost all) currently manually pacakged extensions will work this way. Since these are mostly just a few lines each, there is no need to split this up into a lot of small files.

commit2c063fe250e019a44eba31e4f7857d0e35065b5b authorpiegames <git@piegames.de> dateWed 8 Sep 2021, 22:49 (5 years ago) parent18ce2af
3 files changed+33−9
pkgs/desktops/gnome/extensions/buildGnomeExtension.nix+5−2 pkgs/desktops/gnome/extensions/default.nix+14−7 pkgs/desktops/gnome/extensions/extensionPatches.nix+14
pkgs/desktops/gnome/extensions/buildGnomeExtension.nix+5−2
@@ -36,9 +36,12 @@ let
3636 echo "${metadata}" | base64 --decode > $out/metadata.json
3737 '';
3838 };
39− buildCommand = ''
39+ dontBuild = true;
40+ installPhase = ''
41+ runHook preInstall
4042 mkdir -p $out/share/gnome-shell/extensions/
41− cp -r -T $src $out/share/gnome-shell/extensions/${uuid}
43+ cp -r -T . $out/share/gnome-shell/extensions/${uuid}
44+ runHook postInstall
4245 '';
4346 meta = {
4447 description = builtins.head (lib.splitString "\n" description);
pkgs/desktops/gnome/extensions/default.nix+14−7
@@ -60,17 +60,24 @@ in rec {
6060 gnome38Extensions = mapUuidNames (produceExtensionsList "38");
6161 gnome40Extensions = mapUuidNames (produceExtensionsList "40");
6262
63− gnomeExtensions = lib.recurseIntoAttrs (
64− (mapReadableNames
65− (lib.attrValues (gnome40Extensions // (callPackages ./manuallyPackaged.nix {})))
66− )
67− // lib.optionalAttrs (config.allowAliases or true) {
63+ gnomeExtensions = lib.trivial.pipe gnome40Extensions [
64+ # Apply some custom patches for automatically packaged extensions
65+ (callPackage ./extensionPatches.nix {})
66+ # Add all manually packaged extensions
67+ (extensions: extensions // (callPackages ./manuallyPackaged.nix {}))
68+ # Map the extension UUIDs to readable names
69+ (lib.attrValues)
70+ (mapReadableNames)
71+ # Add some aliases
72+ (extensions: extensions // lib.optionalAttrs (config.allowAliases or true) {
6873 unite-shell = gnomeExtensions.unite; # added 2021-01-19
6974 arc-menu = gnomeExtensions.arcmenu; # added 2021-02-14
7075
7176 nohotcorner = throw "gnomeExtensions.nohotcorner removed since 2019-10-09: Since 3.34, it is a part of GNOME Shell configurable through GNOME Tweaks.";
7277 mediaplayer = throw "gnomeExtensions.mediaplayer deprecated since 2019-09-23: retired upstream https://github.com/JasonLG1979/gnome-shell-extensions-mediaplayer/blob/master/README.md";
7378 remove-dropdown-arrows = throw "gnomeExtensions.remove-dropdown-arrows removed since 2021-05-25: The extensions has not seen an update sine GNOME 3.34. Furthermore, the functionality it provides is obsolete as of GNOME 40.";
74− }
75− );
79+ })
80+ # Make the set "public"
81+ lib.recurseIntoAttrs
82+ ];
7683}
pkgs/desktops/gnome/extensions/extensionPatches.nixnew file+14
@@ -0,0 +1,14 @@
1+{
2+ lib,
3+ ddcutil,
4+ gjs,
5+}:
6+# A set of overrides for automatically packaged extensions that require some small fixes.
7+# The input must be an attribute set with the extensions' UUIDs as keys and the extension
8+# derivations as values. Output is the same, but with patches applied.
9+#
10+# Note that all source patches refer to the built extension as published on extensions.gnome.org, and not
11+# the upstream repository's sources.
12+super: super // {
13+
14+}