about summary refs log tree commit diff
path: root/pkgs/desktops
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/desktops')
-rw-r--r--pkgs/desktops/deepin/core/dpa-ext-gnomekeyring/default.nix2
-rw-r--r--pkgs/desktops/gnome/extensions/manuallyPackaged.nix1
-rw-r--r--pkgs/desktops/gnome/extensions/systemd-manager/default.nix68
3 files changed, 69 insertions, 2 deletions
diff --git a/pkgs/desktops/deepin/core/dpa-ext-gnomekeyring/default.nix b/pkgs/desktops/deepin/core/dpa-ext-gnomekeyring/default.nix
index febfa41711e06..82c183ca00d58 100644
--- a/pkgs/desktops/deepin/core/dpa-ext-gnomekeyring/default.nix
+++ b/pkgs/desktops/deepin/core/dpa-ext-gnomekeyring/default.nix
@@ -9,7 +9,6 @@
 , dde-polkit-agent
 , qt5integration
 , libsecret
-, libgnome-keyring
 }:
 
 stdenv.mkDerivation rec {
@@ -39,7 +38,6 @@ stdenv.mkDerivation rec {
     dtkwidget
     dde-polkit-agent
     qt5integration
-    libgnome-keyring
     libsecret
   ];
 
diff --git a/pkgs/desktops/gnome/extensions/manuallyPackaged.nix b/pkgs/desktops/gnome/extensions/manuallyPackaged.nix
index 376a4a09bad8e..fa5d72cb1c49b 100644
--- a/pkgs/desktops/gnome/extensions/manuallyPackaged.nix
+++ b/pkgs/desktops/gnome/extensions/manuallyPackaged.nix
@@ -11,6 +11,7 @@
   "pidgin@muffinmad" = callPackage ./pidgin-im-integration { };
   "pop-shell@system76.com" = callPackage ./pop-shell { };
   "sound-output-device-chooser@kgshank.net" = callPackage ./sound-output-device-chooser { };
+  "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 { };
diff --git a/pkgs/desktops/gnome/extensions/systemd-manager/default.nix b/pkgs/desktops/gnome/extensions/systemd-manager/default.nix
new file mode 100644
index 0000000000000..0b8e52af802b1
--- /dev/null
+++ b/pkgs/desktops/gnome/extensions/systemd-manager/default.nix
@@ -0,0 +1,68 @@
+{
+  lib,
+  stdenvNoCC,
+  fetchFromGitHub,
+  glib,
+  # These loosen security a bit, so we don't install them by default. See also:
+  # https://github.com/hardpixel/systemd-manager?tab=readme-ov-file#without-password-prompt
+  allowPolkitPolicy ? "none",
+  config,
+  systemd ? config.systemd.package,
+}:
+
+assert lib.elem allowPolkitPolicy [
+  "none"
+  "pkexec"
+  "systemctl"
+];
+
+stdenvNoCC.mkDerivation rec {
+  pname = "gnome-shell-extension-systemd-manager";
+  version = "16";
+
+  # Upstream doesn't post new versions in extensions.gnome.org anymore, see also:
+  # https://github.com/hardpixel/systemd-manager/issues/19
+  src = fetchFromGitHub {
+    owner = "hardpixel";
+    repo = "systemd-manager";
+    rev = "v${version}";
+    hash = "sha256-JecSIRj582jJWdrCQYBWFRkIhosxRhD3BxSAy8/0nVw=";
+  };
+
+  nativeBuildInputs = [ glib ];
+
+  postInstall =
+    ''
+      rm systemd-manager@hardpixel.eu/schemas/gschemas.compiled
+      glib-compile-schemas systemd-manager@hardpixel.eu/schemas
+
+      mkdir -p $out/share/gnome-shell/extensions
+      mv systemd-manager@hardpixel.eu $out/share/gnome-shell/extensions
+    ''
+    + lib.optionalString (allowPolkitPolicy == "pkexec") ''
+      local bn=org.freedesktop.policykit.pkexec.systemctl.policy
+      mkdir -p $out/share/polkit-1/actions
+      substitute systemd-policies/$bn $out/share/polkit-1/actions/$bn \
+        --replace-fail /usr/bin/systemctl ${lib.getBin systemd}/bin/systemctl
+    ''
+    + lib.optionalString (allowPolkitPolicy == "systemctl") ''
+      install -Dm0644 \
+        systemd-policies/10-service_status.rules \
+        $out/share/polkit-1/rules.d/10-gnome-extension-systemd-manager.rules
+    '';
+
+  passthru = {
+    extensionUuid = "systemd-manager@hardpixel.eu";
+    extensionPortalSlug = "systemd-manager";
+  };
+
+  meta = with lib; {
+    description = "GNOME Shell extension to manage systemd services";
+    homepage = "https://github.com/hardpixel/systemd-manager";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [
+      linsui
+      doronbehar
+    ];
+  };
+}