diff options
Diffstat (limited to 'pkgs/desktops/gnome/extensions/systemd-manager/default.nix')
-rw-r--r-- | pkgs/desktops/gnome/extensions/systemd-manager/default.nix | 68 |
1 files changed, 68 insertions, 0 deletions
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 + ]; + }; +} |