gnomeExtensions: bump 2026-07-19 (#543561)

This commit is contained in:
Jan Tojnar
2026-07-22 17:14:48 +00:00
committed by GitHub
32 changed files with 3060 additions and 2081 deletions
+1 -1
View File
@@ -146,7 +146,7 @@
machine.succeed(f"${run "gnome-extensions enable {extension}"}")
wait_time = 5
while getState(extension) == "ACTIVATING" and (wait_time := wait_time - 1) > 0:
while "ACTIVATING" in getState(extension) and (wait_time := wait_time - 1) > 0:
machine.log(f"Extension {extension} is still activating, waiting {wait_time} more seconds")
machine.sleep(1)
checkState("ACTIVE", extension)
@@ -0,0 +1,2 @@
# cache file with scraped data from https://extensions.gnome.org
extension-index-*.json
@@ -1,6 +1,6 @@
{
lib,
stdenv,
stdenvNoCC,
fetchFromGitHub,
replaceVars,
glib,
@@ -8,17 +8,18 @@
gettext,
jq,
intltool,
nix-update-script,
}:
stdenv.mkDerivation (finalAttrs: {
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "gnome-shell-extension-EasyScreenCast";
version = "1.12.0";
version = "1.13.2";
src = fetchFromGitHub {
owner = "EasyScreenCast";
repo = "EasyScreenCast";
rev = finalAttrs.version;
hash = "sha256-+DVuUClLhPEVN2VIBkJJI51V9TTS5Q9y6wflEGyt6AY=";
hash = "sha256-VYf5RHZHe6QIzQRW/oZ2tEHIo184xPqqx+hKAcCwOMg=";
};
patches = [
@@ -36,7 +37,10 @@ stdenv.mkDerivation (finalAttrs: {
makeFlags = [ "INSTALLBASE=$(out)/share/gnome-shell/extensions" ];
passthru.extensionUuid = "EasyScreenCast@iacopodeenosee.gmail.com";
passthru = {
extensionUuid = "EasyScreenCast@iacopodeenosee.gmail.com";
updateScript = nix-update-script { };
};
meta = {
description = "Simplifies the use of the video recording function integrated in gnome shell";
@@ -1,8 +1,8 @@
diff --git a/extension.js b/extension.js
index 32a7c7c..a7ed98e 100644
index ef82bdc..2cdeab7 100644
--- a/extension.js
+++ b/extension.js
@@ -720,7 +720,7 @@ const EasyScreenCastIndicator = GObject.registerClass({
@@ -731,7 +731,7 @@ const EasyScreenCastIndicator = GObject.registerClass({
Lib.TalkativeLog('-*-execute post command');
// launch cmd after registration
@@ -12,25 +12,15 @@ index 32a7c7c..a7ed98e 100644
const mapObj = {
_fpath: pathFile,
diff --git a/prefs.js b/prefs.js
index b58b160..2298d5a 100644
index 7e21b53..730eec3 100644
--- a/prefs.js
+++ b/prefs.js
@@ -709,7 +709,7 @@ const EasyScreenCastSettingsWidget = GObject.registerClass({
Lib.TalkativeLog('-^-NOT SET xdg-user video');
ctx.CtrlExe.Execute(
- '/usr/bin/sh -c "echo $HOME"',
+ '/bin/sh -c "echo $HOME"',
true,
(success, out) => {
Lib.TalkativeLog(`-^-CALLBACK sync S: ${success} out: ${out}`);
@@ -879,7 +879,7 @@ const EasyScreenCastSettingsWidget = GObject.registerClass({
);
@@ -834,7 +834,7 @@ const EasyScreenCastSettingsWidget = GObject.registerClass({
refBufferLog.text = '';
ctx.CtrlExe.Execute(
- 'journalctl /usr/bin/gnome-shell --since "15 min ago" --output=cat --no-pager',
+ 'journalctl @gnomeShell@/bin/.gnome-shell-wrapped --since "15 min ago" --output=cat --no-pager',
false,
success => {
Lib.TalkativeLog(`-^-CALLBACK async S= ${success}`);
(result, stdout) => {
Lib.TalkativeLog(`-^-CALLBACK async S= ${result}`);
refBufferLog.text = stdout;
@@ -1,19 +1,18 @@
{
fetchFromGitHub,
lib,
stdenv,
unstableGitUpdater,
stdenvNoCC,
}:
stdenv.mkDerivation {
stdenvNoCC.mkDerivation {
pname = "argos";
version = "unstable-2025-09-25";
version = "50";
src = fetchFromGitHub {
owner = "p-e-w";
repo = "argos";
rev = "c0dc23880e52a2f78b7a5c35b5b3781d5b1366f7";
hash = "sha256-A/ugbKxnUJdoMN724ECtRm0QWwCVopmbltt+fUKBp7E=";
tag = "GNOME-50";
hash = "sha256-KwW4Hzp+0TqFU1ygPURNbbT+ZzQN7eocn2R4IJFmNZQ=";
};
installPhase = ''
@@ -24,7 +23,6 @@ stdenv.mkDerivation {
passthru = {
extensionUuid = "argos@pew.worldwidemann.com";
extensionPortalSlug = "argos";
updateScript = unstableGitUpdater { };
};
meta = {
@@ -1,50 +0,0 @@
{
lib,
stdenv,
fetchzip,
gnome-shell,
gettext,
glib,
}:
stdenv.mkDerivation rec {
pname = "gnome-shell-extension-clock-override";
version = "12";
src = fetchzip {
url = "https://extensions.gnome.org/extension-data/clock-overridegnomeshell.kryogenix.org.v${version}.shell-extension.zip";
sha256 = "1cyaszks6bwnbgacqsl1pmr24mbj05mad59d4253la9am8ibb4m6";
stripRoot = false;
};
passthru = {
extensionUuid = "clock-override@gnomeshell.kryogenix.org";
extensionPortalSlug = "clock-override";
};
nativeBuildInputs = [
gettext
glib
];
buildPhase = ''
runHook preBuild
glib-compile-schemas --strict --targetdir=schemas schemas
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p "$out/share/gnome-shell/extensions/clock-override@gnomeshell.kryogenix.org"
cp -r {convenience.js,extension.js,format.js,locale,metadata.json,prefs.js,schemas} "$out/share/gnome-shell/extensions/clock-override@gnomeshell.kryogenix.org"
runHook postInstall
'';
meta = {
description = "Customize the date and time format displayed in clock in the top bar in GNOME Shell";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ rhoriguchi ];
homepage = "https://github.com/stuartlangridge/gnome-shell-clock-override";
broken = lib.versionOlder gnome-shell.version "3.18";
};
}
+30 -1
View File
@@ -12,6 +12,18 @@
"battery-time@eetumos.github.com",
"batterytime@typeof.pw"
],
"clipboard-history": [
"clipboard-history@Diyar1877",
"clipboard-history@alexsaveau.dev"
],
"clipboard-line-cleaner": [
"clipboard-line-cleaner@epiphanius.github.io",
"clipboard-line-cleaner@example.com"
],
"fuzzy-clock": [
"FuzzyClock@fire-man-x",
"FuzzyClock@johngoetz"
],
"internet-speed-meter": [
"InternetSpeedMeter@alshakib.dev",
"speed-meter@mojahid.lunecode.com"
@@ -36,10 +48,18 @@
"night-light-toggle@egoistpizza.github.com",
"nightlighttoggle@sam"
],
"panel-workspace-scroll": [
"panel-scroll@taygun86",
"panel-workspace-scroll@polymeilex.github.io"
],
"persian-calendar": [
"PersianCalendar@oxygenws.com",
"persian-calendar@iamrezamousavi.gmail.com"
],
"proxy-switcher": [
"ProxySwitcher@flannaghan.com",
"proxy-switcher@seydef"
],
"public-ip-address": [
"public-ip-address@fire-man-x",
"public-ip-address@theophilediot.github.io"
@@ -48,10 +68,19 @@
"System_Monitor@bghome.gmail.com",
"sysmonitor@talhasiddique7",
"system-monitor@axet.github.com",
"system-monitor@gnome-shell-extensions.gcampax.github.com"
"system-monitor@gnome-shell-extensions.gcampax.github.com",
"system-monitor@jtourteau"
],
"systemquest": [
"system-rpg@conan513",
"system-rpg@gnome-rpg.local"
],
"tailscale-qs": [
"tailscale-gnome-qs@tailscale-qs.github.io",
"tailscale@joaophi.github.com"
],
"workspace-wallpapers": [
"workspace-wallpapers@ero",
"workspace-wallpapers@jonathan.aljl.eu"
]
}
+11 -1
View File
@@ -96,10 +96,20 @@ rec {
unite-shell = gnomeExtensions.unite; # added 2021-01-19
arc-menu = gnomeExtensions.arcmenu; # added 2021-02-14
clock-override = throw "'gnomeExtensions.clock-override' has been removed due to lack of upstream maintenance";
drop-down-terminal = throw "'gnomeExtensions.drop-down-terminal' has been removed due to lack of upstream maintenance";
icon-hider = throw "gnomeExtensions.icon-hider was removed on 2024-03-15. The extension has not received any updates since 2020/3.34.";
nohotcorner = throw "gnomeExtensions.nohotcorner removed since 2019-10-09: Since 3.34, it is a part of GNOME Shell configurable through GNOME Tweaks.";
mediaplayer = throw "gnomeExtensions.mediaplayer deprecated since 2019-09-23: retired upstream https://github.com/JasonLG1979/gnome-shell-extensions-mediaplayer/blob/master/README.md";
no-title-bar = throw "'gnomeExtensions.no-title-bar' has been removed due to lack of upstream maintenance";
nohotcorner = throw "gnomeExtensions.nohotcorner removed since 2019-10-09: Since 3.34, it is a part of GNOME Shell configurable through GNOME Tweaks.";
pano = throw "'gnomeExtensions.pano' has been removed due to lack of upstream maintenance";
pidgin-im-integration = throw "'gnomeExtensions.pidgin-im-integration' has been removed due to lack of upstream maintenance";
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.";
sound-output-device-chooser = throw "'gnomeExtensions.sound-output-device-chooser' has been removed due to lack of upstream maintenance";
taskwhisperer = throw "'gnomeExtensions.taskwhisperer' has been removed due to lack of upstream maintenance";
tilingnome = throw "'gnomeExtensions.tilingnome' has been removed due to lack of upstream maintenance";
topicons-plus = throw "'gnomeExtensions.topicons-plus' has been removed due to lack of upstream maintenance";
window-corner-preview = throw "'gnomeExtensions.window-corner-preview' has been removed due to lack of upstream maintenance";
}
)
# Export buildShellExtension function
@@ -1,46 +0,0 @@
{
lib,
stdenv,
fetchFromGitHub,
replaceVars,
gjs,
vte,
gnome,
}:
stdenv.mkDerivation {
pname = "gnome-shell-extension-drop-down-terminal";
version = "unstable-2020-03-25";
src = fetchFromGitHub {
owner = "zzrough";
repo = "gs-extensions-drop-down-terminal";
rev = "a59669afdb395b3315619f62c1f740f8b2f0690d";
sha256 = "0igfxgrjdqq6z6xg4rsawxn261pk25g5dw2pm3bhwz5sqsy4bq3i";
};
passthru = {
extensionUuid = "drop-down-terminal@gs-extensions.zzrough.org";
extensionPortalSlug = "drop-down-terminal";
};
patches = [
(replaceVars ./fix_vte_and_gjs.patch {
inherit gjs vte;
})
];
installPhase = ''
runHook preInstall
mkdir -p $out/share/gnome-shell/extensions
cp -r "drop-down-terminal@gs-extensions.zzrough.org" $out/share/gnome-shell/extensions/
runHook postInstall
'';
meta = {
description = "Configurable drop down terminal shell";
license = lib.licenses.gpl3;
maintainers = with lib.maintainers; [ ericdallo ];
homepage = "https://github.com/zzrough/gs-extensions-drop-down-terminal";
};
}
@@ -1,32 +0,0 @@
--- a/drop-down-terminal@gs-extensions.zzrough.org/extension.js
+++ b/drop-down-terminal@gs-extensions.zzrough.org/extension.js
@@ -15,6 +15,8 @@
// Author: Stéphane Démurget <stephane.demurget@free.fr>
+imports.gi.GIRepository.Repository.dup_default().prepend_search_path('@vte@/lib/girepository-1.0')
+
const Lang = imports.lang;
const Gettext = imports.gettext.domain("drop-down-terminal");
const Mainloop = imports.mainloop;
@@ -653,7 +655,7 @@ const DropDownTerminalExtension = new Lang.Class({
this._killingChild = false;
// finds the forking arguments
- let args = ["gjs", GLib.build_filenamev([Me.path, "terminal.js"]), Me.path];
+ let args = ["@gjs@/bin/gjs", GLib.build_filenamev([Me.path, "terminal.js"]), Me.path];
// forks the process
debug("forking '" + args.join(" ") + "'");
--- a/drop-down-terminal@gs-extensions.zzrough.org/terminal.js
+++ b/drop-down-terminal@gs-extensions.zzrough.org/terminal.js
@@ -14,6 +14,9 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// Author: Stéphane Démurget <stephane.demurget@free.fr>
+
+imports.gi.GIRepository.Repository.dup_default().prepend_search_path('@vte@/lib/girepository-1.0')
+
const Lang = imports.lang;
const Pango = imports.gi.Pango;
@@ -32,6 +32,8 @@
gtk4,
desktop-file-utils,
xdg-user-dirs,
libglycin,
libglycin-gtk4,
}:
let
# Helper method to reduce redundancy
@@ -109,7 +111,6 @@ lib.trivial.pipe super [
xdg_utils = xdg-utils;
gtk3_gsettings_path = glib.getSchemaPath gtk3;
nautilus_gsettings_path = glib.getSchemaPath nautilus;
typelib_path = "${gtk3}/lib/girepository-1.0";
})
];
}))
@@ -222,12 +223,23 @@ lib.trivial.pipe super [
(patchExtension "system-monitor-next@paradoxxx.zero.gmail.com" (old: {
patches = [
(replaceVars ./extensionOverridesPatches/system-monitor-next_at_paradoxxx.zero.gmail.com.patch {
gtop_path = "${libgtop}/lib/girepository-1.0";
typelibPath = lib.makeSearchPath "/lib/girepository-1.0" [ libgtop ];
})
];
meta.maintainers = with lib.maintainers; [ andersk ];
}))
(patchExtension "user-theme-x@tuberry.github.io" (old: {
patches = [
(replaceVars ./extensionOverridesPatches/user-theme-x_at_tuberry.github.io.patch {
typelibPath = lib.makeSearchPath "/lib/girepository-1.0" [
libglycin
libglycin-gtk4
];
})
];
}))
(patchExtension "Vitals@CoreCoding.com" (old: {
patches = [
(replaceVars ./extensionOverridesPatches/vitals_at_corecoding.com.patch {
@@ -9,23 +9,15 @@ index 56875b5..3216e79 100755
/* DING: Desktop Icons New Generation for GNOME Shell
*
diff --git a/app/ding.js b/app/ding.js
index 9a1550a..7bd25fc 100755
index 6bf7309..923e0b6 100755
--- a/app/ding.js
+++ b/app/ding.js
@@ -1,4 +1,4 @@
-#!/usr/bin/env gjs
+#!@gjs@/bin/gjs
/* DING: Desktop Icons New Generation for GNOME Shell
*
@@ -18,6 +18,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
'use strict';
+imports.gi.GIRepository.Repository.dup_default().prepend_search_path('@typelib_path@');
imports.gi.versions.Gtk = '3.0';
const Gtk = imports.gi.Gtk;
const Gio = imports.gi.Gio;
diff --git a/app/fileItemMenu.js b/app/fileItemMenu.js
index 4fae9ef..5127eff 100644
--- a/app/fileItemMenu.js
@@ -67,26 +59,18 @@ index 94ec3c7..823dd5c 100644
nautilusCompression = null;
} else {
diff --git a/extension.js b/extension.js
index 0f8a317..c768649 100644
index d6cb19c..ea9a93a 100644
--- a/extension.js
+++ b/extension.js
@@ -17,6 +17,7 @@
*/
'use strict';
import Clutter from 'gi://Clutter'
+import GIRepository from 'gi://GIRepository';
import GLib from 'gi://GLib'
import Gio from 'gi://Gio'
import Meta from 'gi://Meta'
@@ -396,9 +397,9 @@ export default class DING extends Extension {
@@ -297,9 +297,9 @@ export default class DING extends Extension {
contents += String.fromCharCode(readData[i]);
}
}
- let path = `gjs ${GLib.build_filenamev([this.path, 'app', 'ding.js'])}`;
+ let path = `@gjs@/bin/gjs ${GLib.build_filenamev([this.path, 'app', 'ding.js'])}`;
if (contents.startsWith(path)) {
- let proc = new Gio.Subprocess({argv: ['/bin/kill', filename]});
+ let proc = new Gio.Subprocess({argv: ['@util_linux@/bin/kill', filename]});
- let proc = new Gio.Subprocess({ argv: ['/bin/kill', filename] });
+ let proc = new Gio.Subprocess({ argv: ['@util_linux@/bin/kill', filename] });
proc.init(null);
proc.wait(null);
}
@@ -1,30 +1,21 @@
diff --git a/__nix-prepend-search-paths.js b/__nix-prepend-search-paths.js
new file mode 100644
index 0000000..bd477f1
--- /dev/null
+++ b/__nix-prepend-search-paths.js
@@ -0,0 +1,2 @@
+import GIRepository from "gi://GIRepository";
+"@typelibPath@".split(':').forEach(path => GIRepository.Repository.dup_default().prepend_search_path(path));
diff --git a/extension.js b/extension.js
index ee8c3a9..ca72885 100644
index dfa8118..f2950b4 100644
--- a/extension.js
+++ b/extension.js
@@ -21,6 +21,7 @@
@@ -18,6 +18,8 @@
// Author: Florian Mounier aka paradoxxxzero
+import './__nix-prepend-search-paths.js';
+
import { Extension, gettext as _ } from "resource:///org/gnome/shell/extensions/extension.js";
import Clutter from "gi://Clutter";
+import GIRepository from "gi://GIRepository";
import GLib from "gi://GLib";
import GObject from "gi://GObject";
@@ -28,7 +29,6 @@ import Gio from "gi://Gio";
import Shell from "gi://Shell";
import St from "gi://St";
import UPowerGlib from "gi://UPowerGlib";
-import GTop from "gi://GTop";
import NM from "gi://NM";
import * as ModalDialog from "resource:///org/gnome/shell/ui/modalDialog.js";
@@ -41,6 +41,9 @@ import * as PopupMenu from "resource:///org/gnome/shell/ui/popupMenu.js";
import * as Util from "resource:///org/gnome/shell/misc/util.js";
+GIRepository.Repository.dup_default().prepend_search_path('@gtop_path@');
+const GTop = (await import("gi://GTop")).default;
+
const NetworkManager = NM;
const UPower = UPowerGlib;
// Copied as of https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/5fa08fe53376f5dca755360bd005a4a51ca78917/js/ui/panel.js#L45
@@ -0,0 +1,22 @@
diff --git a/__nix-prepend-search-paths.js b/__nix-prepend-search-paths.js
new file mode 100644
index 0000000..bd477f1
--- /dev/null
+++ b/__nix-prepend-search-paths.js
@@ -0,0 +1,2 @@
+import GIRepository from "gi://GIRepository";
+"@typelibPath@".split(":").forEach(path => GIRepository.Repository.dup_default().prepend_search_path(path));
diff --git a/prefs.js b/prefs.js
index 456827c..4849e92 100644
--- a/prefs.js
+++ b/prefs.js
@@ -1,6 +1,8 @@
// SPDX-FileCopyrightText: tuberry
// SPDX-License-Identifier: GPL-3.0-or-later
+import './__nix-prepend-search-paths.js';
+
import Adw from 'gi://Adw';
import Gdk from 'gi://Gdk';
import Gio from 'gi://Gio';
@@ -7,20 +7,24 @@
"Applications_Menu@rmy.pobox.com" = "frippery-applications-menu";
"apps-menu@gnome-shell-extensions.gcampax.github.com" = "applications-menu";
"persian-calendar@iamrezamousavi.gmail.com" = "persian-calendar-2";
"PersianCalendar@oxygenws.com" = "persian-calendar";
"system-monitor@gnome-shell-extensions.gcampax.github.com" = "system-monitor";
"System_Monitor@bghome.gmail.com" = "system-monitor-2";
"system-monitor@axet.github.com" = "system-monitor-3";
"sysmonitor@talhasiddique7" = "system-monitor-4";
"autoselectheadset@josephlbarnett.github.com" = "auto-select-headset";
"autoselectheadset@Anduril97.github.com" = "auto-select-headset-2";
"battery-time@eetumos.github.com" = "battery-time-3";
"batterytime@typeof.pw" = "battery-time-2";
"batime@martin.zurowietz.de" = "battery-time";
"nepali-date@biplab" = "nepali-calendar";
"nepali-calendar-gs-extension@subashghimire.info.np" = "nepali-calendar-2";
"clipboard-history@alexsaveau.dev" = "clipboard-history";
"clipboard-history@Diyar1877" = "clipboard-history-2";
"clipboard-line-cleaner@example.com" = "clipboard-line-cleaner";
"clipboard-line-cleaner@epiphanius.github.io" = "clipboard-line-cleaner-2";
"FuzzyClock@johngoetz" = "fuzzy-clock";
"FuzzyClock@fire-man-x" = "fuzzy-clock-3"; # '-3' preserves backwards compatibility
"InternetSpeedMeter@alshakib.dev" = "internet-speed-meter";
"speed-meter@mojahid.lunecode.com" = "internet-speed-meter-2";
"lockkeys@febueldo.test" = "lock-keys";
"lockkeys@vaina.lt" = "lock-keys-2";
@@ -28,24 +32,42 @@
"memento-mori@paveloom" = "memento-mori";
"memento-mori@vedeshpadal" = "memento-mori-2";
"nepali-date@biplab" = "nepali-calendar";
"nepali-calendar-gs-extension@subashghimire.info.np" = "nepali-calendar-2";
"netspeed@alynx.one" = "net-speed";
"netspeed@shivamksharma.github.io" = "net-speed-2";
"night-light-toggle@egoistpizza.github.com" = "night-light-toggle";
"nightlighttoggle@sam" = "night-light-toggle-2";
"autoselectheadset@josephlbarnett.github.com" = "auto-select-headset";
"autoselectheadset@Anduril97.github.com" = "auto-select-headset-2";
"panel-workspace-scroll@polymeilex.github.io" = "panel-workspace-scroll";
"panel-scroll@taygun86" = "panel-workspace-scroll-2";
"InternetSpeedMeter@alshakib.dev" = "internet-speed-meter";
"speed-meter@mojahid.lunecode.com" = "internet-speed-meter-2";
"persian-calendar@iamrezamousavi.gmail.com" = "persian-calendar-2";
"PersianCalendar@oxygenws.com" = "persian-calendar";
"ProxySwitcher@flannaghan.com" = "proxy-switcher";
"proxy-switcher@seydef" = "proxy-switcher-2";
"public-ip-address@fire-man-x" = "public-ip-address";
"public-ip-address@theophilediot.github.io" = "public-ip-address-2";
"system-monitor@gnome-shell-extensions.gcampax.github.com" = "system-monitor";
"System_Monitor@bghome.gmail.com" = "system-monitor-2";
"system-monitor@axet.github.com" = "system-monitor-3";
"sysmonitor@talhasiddique7" = "system-monitor-4";
"system-monitor@jtourteau" = "system-monitor-5";
"system-rpg@conan513" = "systemquest";
"system-rpg@gnome-rpg.local" = "systemquest-2";
"tailscale-gnome-qs@tailscale-qs.github.io" = "tailscale-qs";
"tailscale@joaophi.github.com" = "tailscale-qs-2";
"workspace-wallpapers@jonathan.aljl.eu" = "workspace-wallpapers";
"workspace-wallpapers@ero" = "workspace-wallpapers-2";
# ############################################################################
# These extensions no longer collide. We preserve the old attribute name for backwards compatibility.
"floatingDock@sun.wxg@gmail.com" = "floating-dock-2";
@@ -54,7 +76,6 @@
"openweather-extension@penguin-teal.github.io" = "openweather-refined";
"fullscreen-to-empty-workspace2@corgijan.dev" = "fullscreen-to-empty-workspace-2";
"power-profile@fthx" = "power-profile-indicator-2";
"FuzzyClock@fire-man-x" = "fuzzy-clock-3";
"mouse-follows-focus@crisidev.org" = "mouse-follows-focus-2";
# ############################################################################
@@ -64,8 +85,6 @@
# The manually packaged ones:
"EasyScreenCast@iacopodeenosee.gmail.com" = "easyScreenCast"; # extensionPortalSlug is "easyscreencast"
"gnome-fuzzy-app-search@gnome-shell-extensions.Czarlie.gitlab.com" = "fuzzy-app-search"; # extensionPortalSlug is "gnome-fuzzy-app-search"
"TopIcons@phocean.net" = "topicons-plus"; # extensionPortalSlug is "topicons"
"no-title-bar@jonaspoehler.de" = "no-title-bar"; # extensionPortalSlug is "no-title-bar-forked"
# These extensions are automatically packaged at the moment. We preserve the old attribute name
# for backwards compatibility.
"appindicatorsupport@rgcjonas.gmail.com" = "appindicator"; # extensionPortalSlug is "appindicator-support"
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
{
stdenv,
stdenvNoCC,
lib,
fetchFromGitLab,
glib,
@@ -7,15 +7,15 @@
# We package this manually because upstream stopped updating the package to
# extensions.gnome.org. See:
# https://gitlab.com/ente76/guillotine/-/issues/17
stdenv.mkDerivation (finalAttrs: {
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "gnome-shell-extension-guillotine";
version = "26";
version = "27-unstable-2026-04-08";
src = fetchFromGitLab {
owner = "ente76";
repo = "guillotine";
rev = "v${finalAttrs.version}";
hash = "sha256-6RuHargk7sq6oUKj+aGPFp3t0LJCpj6RwLhNzAM5wVA=";
rev = "3bccda1d189ed0525daa12f6b12b4ebea4222fc5";
hash = "sha256-G8u+g1pnitAgGz4+yldIGSNiasgOj32P/M6CVMMDfJY=";
};
nativeBuildInputs = [ glib ];
@@ -1,19 +1,19 @@
{
lib,
stdenv,
stdenvNoCC,
fetchFromGitHub,
glib,
}:
stdenv.mkDerivation {
stdenvNoCC.mkDerivation {
pname = "gnome-shell-extension-impatience";
version = "0.5.3-unstable-2025-10-06";
version = "0.5.3-unstable-2026-03-11";
src = fetchFromGitHub {
owner = "timbertson";
repo = "gnome-shell-impatience";
rev = "593f9cd52ffd7875265e7cfa2d03e0309fec55b1"; # shows gnome 49 support
hash = "sha256-Slcd47DX1Gdl5H1kkrn19s95eDpftyS2Wn25UpYCjYQ=";
rev = "f3f145d33d88a46abcfd77f84665bc64b8c0e01c"; # shows gnome 50 support
hash = "sha256-3ejg1UZcFDakwsx4RCHqLhUtZypP/x/8pbkoQDurdlg=";
};
buildInputs = [
@@ -2,25 +2,16 @@
{
"arcmenu@arcmenu.com" = callPackage ./arcmenu { };
"argos@pew.worldwidemann.com" = callPackage ./argos { };
"clock-override@gnomeshell.kryogenix.org" = callPackage ./clock-override { };
"drop-down-terminal@gs-extensions.zzrough.org" = callPackage ./drop-down-terminal { };
"EasyScreenCast@iacopodeenosee.gmail.com" = callPackage ./EasyScreenCast { };
"forge@jmmaranan.com" = callPackage ./forge { };
"gsconnect@andyholmes.github.io" = callPackage ./gsconnect { };
"guillotine@fopdoodle.net" = callPackage ./guillotine { };
"impatience@gfxmonk.net" = callPackage ./impatience { };
"no-title-bar@jonaspoehler.de" = callPackage ./no-title-bar { };
"pidgin@muffinmad" = callPackage ./pidgin-im-integration { };
"pop-shell@system76.com" = callPackage ./pop-shell { };
"sound-output-device-chooser@kgshank.net" = callPackage ./sound-output-device-chooser { };
# hardpixel extensions won't receive updates on extensions.gnome.org:
# - https://github.com/hardpixel/systemd-manager/issues/19
# - https://github.com/hardpixel/unite-shell/issues/353
"systemd-manager@hardpixel.eu" = callPackage ./systemd-manager { };
"taskwhisperer-extension@infinicode.de" = callPackage ./taskwhisperer { };
"tilingnome@rliang.github.com" = callPackage ./tilingnome { };
"TopIcons@phocean.net" = callPackage ./topicons-plus { };
# Can be removed when https://github.com/hardpixel/unite-shell/issues/353 resolved
"unite@hardpixel.eu" = callPackage ./unite { };
"valent@andyholmes.ca" = callPackage ./valent { };
"window-corner-preview@fabiomereu.it" = callPackage ./window-corner-preview { };
# Can be removed when https://github.com/oae/gnome-shell-pano/issues/271 resolved
"pano@elhan.io" = callPackage ./pano { };
}
@@ -1,48 +0,0 @@
{
lib,
stdenv,
fetchFromGitHub,
replaceVars,
glib,
gettext,
xwininfo,
xprop,
}:
stdenv.mkDerivation rec {
pname = "gnome-shell-extension-no-title-bar";
version = "11";
src = fetchFromGitHub {
owner = "poehlerj";
repo = "no-title-bar";
rev = "V_${version}";
sha256 = "07ddw47binlsbyvgy4xkdjvd40zyp7nwd17r6k7w54d50vmnwhvb";
};
nativeBuildInputs = [
glib
gettext
];
patches = [
(replaceVars ./fix-paths.patch {
xprop = "${xprop}/bin/xprop";
xwininfo = "${xwininfo}/bin/xwininfo";
})
];
makeFlags = [ "INSTALLBASE=$(out)/share/gnome-shell/extensions" ];
passthru = {
extensionUuid = "no-title-bar@jonaspoehler.de";
};
meta = {
description = "Integrates maximized windows with the top panel";
homepage = "https://github.com/poehlerj/no-title-bar";
license = lib.licenses.gpl2;
maintainers = with lib.maintainers; [ svsdep ];
platforms = lib.platforms.linux;
};
}
@@ -1,56 +0,0 @@
diff --git a/decoration.js b/decoration.js
index d1ff3dd..ff4193f 100644
--- a/decoration.js
+++ b/decoration.js
@@ -223,7 +223,7 @@ var Decoration = class {
let winId = this._guessWindowXID(win);
- let xprops = GLib.spawn_command_line_sync(`xprop -id ${winId}`);
+ let xprops = GLib.spawn_command_line_sync(`@xprop@ -id ${winId}`);
if (!xprops[0]) {
Utils.log_debug(`Unable to determine windows '${win.get_title()}' original state`);
return win._noTitleBarOriginalState = WindowState.UNKNOWN;
@@ -237,7 +237,7 @@ var Decoration = class {
let prop = '_MOTIF_WM_HINTS';
let value = '0x2, 0x0, %s, 0x0, 0x0'.format(hide ? '0x2' : '0x1');
- GLib.spawn_command_line_sync(`xprop -id ${windId} -f ${prop} 32c -set ${prop} "${value}"`);
+ GLib.spawn_command_line_sync(`@xprop@ -id ${windId} -f ${prop} 32c -set ${prop} "${value}"`);
if (!hide && !win.titlebar_is_onscreen()) {
Utils.log_debug(`Shoving titlebar onscreen for window '${win.get_title()}'`);
win.shove_titlebar_onscreen();
@@ -354,7 +354,7 @@ var Decoration = class {
let act = win.get_compositor_private();
let xwindow = act && act['x-window'];
if (xwindow) {
- let xwininfo = GLib.spawn_command_line_sync('xwininfo -children -id 0x%x'.format(xwindow));
+ let xwininfo = GLib.spawn_command_line_sync('@xwininfo@ -children -id 0x%x'.format(xwindow));
if (xwininfo[0]) {
let str = ByteArray.toString(xwininfo[1]);
@@ -384,7 +384,7 @@ var Decoration = class {
// Try enumerating all available windows and match the title. Note that this
// may be necessary if the title contains special characters and `x-window`
// is not available.
- let result = GLib.spawn_command_line_sync('xprop -root _NET_CLIENT_LIST');
+ let result = GLib.spawn_command_line_sync('@xprop@ -root _NET_CLIENT_LIST');
if (result[0]) {
let str = ByteArray.toString(result[1]);
@@ -395,7 +395,7 @@ var Decoration = class {
// For each window ID, check if the title matches the desired title.
for (var i = 0; i < windowList.length; ++i) {
- let cmd = 'xprop -id "' + windowList[i] + '" _NET_WM_NAME _NO_TITLE_BAR_ORIGINAL_STATE';
+ let cmd = '@xprop@ -id "' + windowList[i] + '" _NET_WM_NAME _NO_TITLE_BAR_ORIGINAL_STATE';
let result = GLib.spawn_command_line_sync(cmd);
if (result[0]) {
@@ -455,4 +455,4 @@ var Decoration = class {
let styleContent = this._updateUserStyles();
GLib.file_set_contents(this._userStylesPath, styleContent);
}
-}
\ No newline at end of file
+}
@@ -1,55 +0,0 @@
{
lib,
stdenv,
fetchzip,
glib,
libgda6,
gsound,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "gnome-shell-extension-pano";
version = "23-alpha5";
src = fetchzip {
url = "https://github.com/oae/gnome-shell-pano/releases/download/v${finalAttrs.version}/pano@elhan.io.zip";
hash = "sha256-kTaJOSyFtBa/fl3Mot8Q8qyhwJwhcbBY4FvdztqUP4w=";
stripRoot = false;
};
nativeBuildInputs = [
glib
];
buildPhase = ''
runHook preBuild
glib-compile-schemas --strict schemas
runHook postBuild
'';
preInstall = ''
substituteInPlace extension.js \
--replace-fail "import Gda from 'gi://Gda?version>=5.0'" "imports.gi.GIRepository.Repository.prepend_search_path('${libgda6}/lib/girepository-1.0'); const Gda = (await import('gi://Gda')).default" \
--replace-fail "import GSound from 'gi://GSound'" "imports.gi.GIRepository.Repository.prepend_search_path('${gsound}/lib/girepository-1.0'); const GSound = (await import('gi://GSound')).default"
'';
installPhase = ''
runHook preInstall
mkdir -p $out/share/gnome-shell/extensions
cp -r -T . $out/share/gnome-shell/extensions/pano@elhan.io
runHook postInstall
'';
passthru = {
extensionPortalSlug = "pano";
extensionUuid = "pano@elhan.io";
};
meta = {
description = "Next-gen Clipboard Manager for Gnome Shell";
homepage = "https://github.com/oae/gnome-shell-pano";
license = lib.licenses.gpl2Plus;
maintainers = with lib.maintainers; [ honnip ];
platforms = lib.platforms.linux;
};
})
@@ -1,45 +0,0 @@
{
lib,
stdenv,
fetchFromGitHub,
glib,
gnome-shell,
}:
stdenv.mkDerivation rec {
pname = "gnome-shell-extension-pidgin-im-integration";
version = "32";
src = fetchFromGitHub {
owner = "muffinmad";
repo = "pidgin-im-gnome-shell-extension";
rev = "v${version}";
sha256 = "1jyg8r0s1v83sgg6y0jbsj2v37mglh8rvd8vi27fxnjq9xmg8kpc";
};
dontConfigure = true;
dontBuild = true;
installPhase = ''
runHook preInstall
share_dir="$prefix/share"
extensions_dir="$share_dir/gnome-shell/extensions/pidgin@muffinmad"
mkdir -p "$extensions_dir"
mv *.js metadata.json dbus.xml schemas locale "$extensions_dir"
runHook postInstall
'';
passthru = {
extensionUuid = "pidgin@muffinmad";
extensionPortalSlug = "pidgin-im-integration";
};
meta = {
homepage = "https://github.com/muffinmad/pidgin-im-gnome-shell-extension";
description = "Make Pidgin IM conversations appear in the Gnome Shell message tray";
license = lib.licenses.gpl2;
platforms = lib.platforms.linux;
maintainers = [ ];
broken = lib.versionAtLeast gnome-shell.version "3.32"; # Doesn't support 3.34
};
}
@@ -1,51 +0,0 @@
{
lib,
stdenv,
replaceVars,
fetchFromGitHub,
libpulseaudio,
python3,
}:
stdenv.mkDerivation {
pname = "gnome-shell-extension-sound-output-device-chooser";
# For gnome 42 support many commits not tagged yet are needed.
version = "unstable-2022-03-29";
src = fetchFromGitHub {
owner = "kgshank";
repo = "gse-sound-output-device-chooser";
rev = "76f7f59d23f5ffcd66555c7662f43c9cc1ce4742";
sha256 = "sha256-iPc95LmDsYizLg45wpU+vFx/N6MR2hewSHqoRsePC/4=";
};
patches = [
# Fix paths to libpulse and python
(replaceVars ./fix-paths.patch {
libpulse = "${libpulseaudio}/lib/libpulse.so";
python = python3.interpreter;
})
];
dontBuild = true;
passthru = {
extensionUuid = "sound-output-device-chooser@kgshank.net";
extensionPortalSlug = "sound-output-device-chooser";
};
makeFlags = [
"INSTALL_DIR=${placeholder "out"}/share/gnome-shell/extensions"
];
preInstall = ''
mkdir -p ${placeholder "out"}/share/gnome-shell/extensions
'';
meta = {
description = "GNOME Shell extension adding audio device chooser to panel";
license = lib.licenses.gpl3Plus;
maintainers = [ ];
homepage = "https://github.com/kgshank/gse-sound-output-device-chooser";
};
}
@@ -1,26 +0,0 @@
diff --git a/sound-output-device-chooser@kgshank.net/convenience.js b/sound-output-device-chooser@kgshank.net/convenience.js
index 54ad06f..0860531 100644
--- a/sound-output-device-chooser@kgshank.net/convenience.js
+++ b/sound-output-device-chooser@kgshank.net/convenience.js
@@ -142,7 +142,7 @@ function refreshCards() {
if (newProfLogic) {
_log("New logic");
let pyLocation = Me.dir.get_child("utils/pa_helper.py").get_path();
- let pythonExec = ["python", "python3", "python2"].find(cmd => isCmdFound(cmd));
+ let pythonExec = '@python@';
if (!pythonExec) {
_log("ERROR: Python not found. fallback to default mode");
_settings.set_boolean(Prefs.NEW_PROFILE_ID, false);
diff --git a/sound-output-device-chooser@kgshank.net/utils/libpulse_introspect.py b/sound-output-device-chooser@kgshank.net/utils/libpulse_introspect.py
index c4d2484..262608d 100644
--- a/sound-output-device-chooser@kgshank.net/utils/libpulse_introspect.py
+++ b/sound-output-device-chooser@kgshank.net/utils/libpulse_introspect.py
@@ -82,7 +82,7 @@ else:
_libraries = {}
-libpulse_library_name = find_library('pulse')
+libpulse_library_name = '@libpulse@'
if libpulse_library_name is None:
raise Exception('No libpulse.so library found!')
@@ -1,51 +0,0 @@
{
lib,
stdenv,
replaceVars,
fetchFromGitHub,
taskwarrior2,
gettext,
runtimeShell,
}:
stdenv.mkDerivation rec {
pname = "gnome-shell-extension-taskwhisperer";
version = "20";
src = fetchFromGitHub {
owner = "cinatic";
repo = "taskwhisperer";
rev = "v${version}";
sha256 = "sha256-UVBLFXsbOPRXC4P5laZ82Rs08yXnNnzJ+pp5fbx6Zqc=";
};
nativeBuildInputs = [
gettext
];
buildInputs = [
taskwarrior2
];
passthru = {
extensionUuid = "taskwhisperer-extension@infinicode.de";
extensionPortalSlug = "taskwhisperer";
};
makeFlags = [
"INSTALLBASE=${placeholder "out"}/share/gnome-shell/extensions"
];
patches = [
(replaceVars ./fix-paths.patch {
task = "${taskwarrior2}/bin/task";
})
];
meta = {
description = "GNOME Shell TaskWarrior GUI";
license = lib.licenses.gpl3Plus;
maintainers = [ ];
homepage = "https://github.com/cinatic/taskwhisperer";
};
}
@@ -1,99 +0,0 @@
diff --git a/taskwhisperer-extension@infinicode.de/metadata.json b/taskwhisperer-extension@infinicode.de/metadata.json
index 2f1471c..a84bdf4 100644
--- a/taskwhisperer-extension@infinicode.de/metadata.json
+++ b/taskwhisperer-extension@infinicode.de/metadata.json
@@ -6,7 +6,8 @@
"3.32",
"3.36",
"3.38",
- "40"
+ "40",
+ "41"
],
"url": "https://github.com/cinatic/taskwhisperer",
"uuid": "taskwhisperer-extension@infinicode.de",
diff --git a/taskwhisperer-extension@infinicode.de/services/taskService.js b/taskwhisperer-extension@infinicode.de/services/taskService.js
index df09cdf..df68c60 100644
--- a/taskwhisperer-extension@infinicode.de/services/taskService.js
+++ b/taskwhisperer-extension@infinicode.de/services/taskService.js
@@ -63,7 +63,7 @@ var loadTaskData = async ({ taskStatus, project, taskOrder }) => {
await syncTasks()
- const command = ['task', 'rc.json.array=on', statusFilter, projectFilter, 'export'].join(' ')
+ const command = ['@task@', 'rc.json.array=on', statusFilter, projectFilter, 'export'].join(' ')
let { output, error } = await run({ command })
@@ -110,7 +110,7 @@ var loadProjectsData = async taskStatus => {
await syncTasks()
- const command = ['task', 'rc.json.array=on', statusFilter, 'export'].join(' ')
+ const command = ['@task@', 'rc.json.array=on', statusFilter, 'export'].join(' ')
const { output: allTheTasks } = await run({ command })
let sortedUniqueProjects = []
@@ -129,7 +129,7 @@ var setTaskDone = async taskID => {
return
}
- const command = ['task', taskID.toString(), 'done'].join(' ')
+ const command = ['@task@', taskID.toString(), 'done'].join(' ')
const result = await run({ command, asJson: false })
if (!result.error) {
@@ -146,7 +146,7 @@ var setTaskUndone = async taskUUID => {
return
}
- const command = ['task', `uuid:${taskUUID}`, 'modify', 'status:pending'].join(' ')
+ const command = ['@task@', `uuid:${taskUUID}`, 'modify', 'status:pending'].join(' ')
const result = await run({ command, asJson: false })
if (!result.error) {
@@ -163,7 +163,7 @@ var startTask = async taskID => {
return
}
- const command = ['task', taskID.toString(), 'start'].join(' ')
+ const command = ['@task@', taskID.toString(), 'start'].join(' ')
const result = await run({ command, asJson: false })
if (!result.error) {
@@ -180,7 +180,7 @@ var stopTask = async taskID => {
return
}
- const command = ['task', taskID.toString(), 'stop'].join(' ')
+ const command = ['@task@', taskID.toString(), 'stop'].join(' ')
const result = await run({ command, asJson: false })
if (!result.error) {
@@ -195,7 +195,7 @@ var stopTask = async taskID => {
var createTask = async task => {
const params = _convertTaskToParams(task)
- const command = ['task', 'add', ...params].join(' ')
+ const command = ['@task@', 'add', ...params].join(' ')
const result = await run({ command, asJson: false })
if (!result.error) {
@@ -212,7 +212,7 @@ var modifyTask = async (taskUUID, task) => {
const params = _convertTaskToParams(task)
- const command = ['task', `uuid:${taskUUID}`, 'modify', ...params].join(' ')
+ const command = ['@task@', `uuid:${taskUUID}`, 'modify', ...params].join(' ')
const result = await run({ command, asJson: false })
if (!result.error) {
@@ -227,7 +227,7 @@ var syncTasks = async () => {
return
}
- const command = ['task', 'sync'].join(' ')
+ const command = ['@task@', 'sync'].join(' ')
const result = await run({ command, asJson: false })
_showProcessErrorNotificationIfError(result, 'Sync Tasks')
@@ -1,47 +0,0 @@
{
stdenv,
lib,
fetchFromGitHub,
glib,
gnome-shell,
}:
stdenv.mkDerivation {
pname = "gnome-shell-extension-tilingnome";
version = "unstable-2019-09-19";
src = fetchFromGitHub {
owner = "rliang";
repo = "gnome-shell-extension-tilingnome";
rev = "f401c20c9721d85e6b3e30d1e822a200db370407";
sha256 = "1hq9g9bxqpzqrdj9zm0irld8r6q4w1m4b00jya7wsny8rzb1s0y2";
};
nativeBuildInputs = [ glib ];
buildPhase = ''
runHook preBuild
glib-compile-schemas .
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p "$out/share/gnome-shell/extensions/tilingnome@rliang.github.com"
cp -r * "$out/share/gnome-shell/extensions/tilingnome@rliang.github.com/"
runHook postInstall
'';
passthru = {
extensionUuid = "tilingnome@rliang.github.com";
extensionPortalSlug = "tilingnome";
};
meta = {
description = "Tiling window management for GNOME Shell";
license = lib.licenses.gpl2;
maintainers = with lib.maintainers; [ benley ];
homepage = "https://github.com/rliang/gnome-shell-extension-tilingnome";
platforms = gnome-shell.meta.platforms;
};
}
@@ -1,34 +0,0 @@
{
lib,
stdenv,
fetchFromGitHub,
glib,
gettext,
}:
stdenv.mkDerivation rec {
pname = "gnome-shell-extension-topicons-plus";
version = "27";
src = fetchFromGitHub {
owner = "phocean";
repo = "TopIcons-plus";
rev = version;
sha256 = "1p3jlvs4zgnrvy8am7myivv4rnnshjp49kg87rd22qqyvcz51ykr";
};
buildInputs = [ glib ];
nativeBuildInputs = [ gettext ];
makeFlags = [ "INSTALL_PATH=$(out)/share/gnome-shell/extensions" ];
passthru.extensionUuid = "TopIcons@phocean.net";
meta = {
description = "Brings all icons back to the top panel, so that it's easier to keep track of apps running in the backround";
license = lib.licenses.gpl2Only;
maintainers = with lib.maintainers; [ eperuffo ];
homepage = "https://github.com/phocean/TopIcons-plus";
};
}
@@ -1,21 +1,21 @@
{
lib,
stdenv,
stdenvNoCC,
gnome-shell,
fetchFromGitHub,
xprop,
glib,
}:
stdenv.mkDerivation rec {
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "gnome-shell-extension-unite";
version = "84";
version = "85";
src = fetchFromGitHub {
owner = "hardpixel";
repo = "unite-shell";
rev = "v${version}";
hash = "sha256-ZaZs+PqnwMHfCejPt4wBZttT4J5gUlFQ8NjhaOPWGqQ=";
tag = "v${finalAttrs.version}";
hash = "sha256-SN5DYyyZux3jeGgrOc/fd9QcjPRReb2rVZk987saXmQ=";
};
passthru = {
@@ -47,4 +47,4 @@ stdenv.mkDerivation rec {
homepage = "https://github.com/hardpixel/unite-shell";
broken = lib.versionOlder gnome-shell.version "3.32";
};
}
})
@@ -15,6 +15,7 @@ import subprocess
import urllib.error
import urllib.request
from contextlib import contextmanager
from datetime import datetime
from operator import itemgetter
from pathlib import Path
from typing import Any
@@ -39,6 +40,11 @@ supported_versions = {
# shell versions that we want to put into the gnomeExtensions attr set
versions_to_merge = ["48", "49", "50"]
# badly packaged extensions that are known to break `process_extension`
ignored_extensions = [
"wandathefish@ke.labrie.gmail.com",
]
# Some type alias to increase readability of complex compound types
PackageName = str
ShellVersion = str
@@ -201,6 +207,10 @@ def process_extension(extension: dict[str, Any]) -> dict[str, Any] | None:
"""
uuid = extension["uuid"]
# skip known bad extensions
if uuid in ignored_extensions:
return None
# Yeah, there are some extensions without any releases
if not extension["shell_version_map"]:
return None
@@ -294,7 +304,19 @@ def scrape_extensions_index() -> list[dict[str, Any]]:
def fetch_extensions() -> list[dict[str, Any]]:
raw_extensions = scrape_extensions_index()
raw_extensions: list[dict[str, Any]] = []
# cache the extension index, to avoid re-fetching it when processing an extension fails.
cache_path = f"extension-index-{datetime.today().strftime('%Y-%m-%d')}.json"
try:
with open(cache_path, "r") as f:
logging.info(f"Using cached extension index at {cache_path}.")
raw_extensions = json.load(f)
except FileNotFoundError:
logging.info("No existing extension index found, re-scraping data.")
raw_extensions = scrape_extensions_index()
with open(cache_path, "w") as f:
json.dump(raw_extensions, f)
logging.info(f"Downloaded {len(raw_extensions)} extensions. Processing …")
processed_extensions: list[dict[str, Any]] = []
@@ -1,40 +0,0 @@
{
lib,
stdenv,
fetchFromGitHub,
gnome-shell,
}:
stdenv.mkDerivation {
pname = "gnome-shell-extension-window-corner-preview";
version = "unstable-2019-04-03";
src = fetchFromGitHub {
owner = "medenagan";
repo = "window-corner-preview";
rev = "a95bb1389d94474efab7509aac592fb58fff6006";
sha256 = "03v18j9l0fb64xrg3swf1vcgl0kpgwjlp8ddn068bpvghrsvgfah";
};
dontBuild = true;
passthru = {
extensionUuid = "window-corner-preview@fabiomereu.it";
extensionPortalSlug = "window-corner-preview";
};
installPhase = ''
runHook preInstall
mkdir -p $out/share/gnome-shell/extensions
cp -r "window-corner-preview@fabiomereu.it" $out/share/gnome-shell/extensions
runHook postInstall
'';
meta = {
description = "GNOME Shell extension showing a video preview on the corner of the screen";
license = lib.licenses.mit;
maintainers = [ ];
homepage = "https://github.com/medenagan/window-corner-preview";
broken = lib.versionAtLeast gnome-shell.version "3.32"; # Doesn't support 3.34
};
}