1{
2 lib,
3 stdenvNoCC,
4 fetchFromGitHub,
5 glib,
6 # These loosen security a bit, so we don't install them by default. See also:
7 # https://github.com/hardpixel/systemd-manager?tab=readme-ov-file#without-password-prompt
8 allowPolkitPolicy ? "none",
9 config,
10 systemd ? config.systemd.package,
11}:
12
13assert lib.elem allowPolkitPolicy [
14 "none"
15 "pkexec"
16 "systemctl"
17];
18
19stdenvNoCC.mkDerivation rec {
20 pname = "gnome-shell-extension-systemd-manager";
21 version = "18";
22
23 # Upstream doesn't post new versions in extensions.gnome.org anymore, see also:
24 # https://github.com/hardpixel/systemd-manager/issues/19
25 src = fetchFromGitHub {
26 owner = "hardpixel";
27 repo = "systemd-manager";
28 rev = "v${version}";
29 hash = "sha256-V4vYv1nAjFjvkSYdOpcpt8h9L+g0ch4V2VZRVSbtSKE=";
30 };
31
32 nativeBuildInputs = [ glib ];
33
34 postInstall = ''
35 rm systemd-manager@hardpixel.eu/schemas/gschemas.compiled
36 glib-compile-schemas systemd-manager@hardpixel.eu/schemas
37
38 mkdir -p $out/share/gnome-shell/extensions
39 mv systemd-manager@hardpixel.eu $out/share/gnome-shell/extensions
40 ''
41 + lib.optionalString (allowPolkitPolicy == "pkexec") ''
42 local bn=org.freedesktop.policykit.pkexec.systemctl.policy
43 mkdir -p $out/share/polkit-1/actions
44 substitute systemd-policies/$bn $out/share/polkit-1/actions/$bn \
45 --replace-fail /usr/bin/systemctl ${lib.getBin systemd}/bin/systemctl
46 ''
47 + lib.optionalString (allowPolkitPolicy == "systemctl") ''
48 install -Dm0644 \
49 systemd-policies/10-service_status.rules \
50 $out/share/polkit-1/rules.d/10-gnome-extension-systemd-manager.rules
51 '';
52
53 passthru = {
54 extensionUuid = "systemd-manager@hardpixel.eu";
55 extensionPortalSlug = "systemd-manager";
56 };
57
58 meta = with lib; {
59 description = "GNOME Shell extension to manage systemd services";
60 homepage = "https://github.com/hardpixel/systemd-manager";
61 license = licenses.gpl3Only;
62 maintainers = with maintainers; [
63 linsui
64 doronbehar
65 ];
66 };
67}