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.

piegames 2c063fe2 18ce2af9

+33 -9
+5 -2
pkgs/desktops/gnome/extensions/buildGnomeExtension.nix
··· 36 echo "${metadata}" | base64 --decode > $out/metadata.json 37 ''; 38 }; 39 - buildCommand = '' 40 mkdir -p $out/share/gnome-shell/extensions/ 41 - cp -r -T $src $out/share/gnome-shell/extensions/${uuid} 42 ''; 43 meta = { 44 description = builtins.head (lib.splitString "\n" description);
··· 36 echo "${metadata}" | base64 --decode > $out/metadata.json 37 ''; 38 }; 39 + dontBuild = true; 40 + installPhase = '' 41 + runHook preInstall 42 mkdir -p $out/share/gnome-shell/extensions/ 43 + cp -r -T . $out/share/gnome-shell/extensions/${uuid} 44 + runHook postInstall 45 ''; 46 meta = { 47 description = builtins.head (lib.splitString "\n" description);
+14 -7
pkgs/desktops/gnome/extensions/default.nix
··· 60 gnome38Extensions = mapUuidNames (produceExtensionsList "38"); 61 gnome40Extensions = mapUuidNames (produceExtensionsList "40"); 62 63 - gnomeExtensions = lib.recurseIntoAttrs ( 64 - (mapReadableNames 65 - (lib.attrValues (gnome40Extensions // (callPackages ./manuallyPackaged.nix {}))) 66 - ) 67 - // lib.optionalAttrs (config.allowAliases or true) { 68 unite-shell = gnomeExtensions.unite; # added 2021-01-19 69 arc-menu = gnomeExtensions.arcmenu; # added 2021-02-14 70 71 nohotcorner = throw "gnomeExtensions.nohotcorner removed since 2019-10-09: Since 3.34, it is a part of GNOME Shell configurable through GNOME Tweaks."; 72 mediaplayer = throw "gnomeExtensions.mediaplayer deprecated since 2019-09-23: retired upstream https://github.com/JasonLG1979/gnome-shell-extensions-mediaplayer/blob/master/README.md"; 73 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 - ); 76 }
··· 60 gnome38Extensions = mapUuidNames (produceExtensionsList "38"); 61 gnome40Extensions = mapUuidNames (produceExtensionsList "40"); 62 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) { 73 unite-shell = gnomeExtensions.unite; # added 2021-01-19 74 arc-menu = gnomeExtensions.arcmenu; # added 2021-02-14 75 76 nohotcorner = throw "gnomeExtensions.nohotcorner removed since 2019-10-09: Since 3.34, it is a part of GNOME Shell configurable through GNOME Tweaks."; 77 mediaplayer = throw "gnomeExtensions.mediaplayer deprecated since 2019-09-23: retired upstream https://github.com/JasonLG1979/gnome-shell-extensions-mediaplayer/blob/master/README.md"; 78 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."; 79 + }) 80 + # Make the set "public" 81 + lib.recurseIntoAttrs 82 + ]; 83 }
+14
pkgs/desktops/gnome/extensions/extensionPatches.nix
···
··· 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 + }