blob: 2ce403dc3e6a9e37557b5f52a60a5548e9919f85 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
;;; Desktop service definitions for PantherX
;;;
;;; Reza Alizadeh Majd <r.majd@pantherx.org>
;;; Franz Geffke <franz@pantherx.org>
;;;
(define-module (px services desktop)
#:use-module (gnu packages admin)
#:use-module (gnu packages base)
#:use-module (gnu packages linux)
#:use-module (gnu packages xdisorg)
#:use-module (gnu services)
#:use-module (gnu services avahi)
#:use-module (gnu services base)
#:use-module (gnu services cups)
#:use-module (gnu services dbus)
#:use-module (gnu services desktop)
#:use-module (gnu packages gnome)
#:use-module (gnu packages lxqt)
#:use-module (gnu services networking)
#:use-module (gnu services shepherd)
#:use-module (gnu services sddm)
#:use-module (gnu services ssh)
#:use-module (gnu services xorg)
#:use-module (gnu system)
#:use-module (gnu system setuid)
#:use-module (guix build utils)
#:use-module (guix gexp)
#:use-module (guix packages)
#:use-module (guix records)
#:use-module (px packages desktop)
#:use-module (srfi srfi-1)
#:use-module (ice-9 match)
#:export (px-desktop-configuration
px-desktop-configuration?
px-desktop-service-type
polkit-network-manager-service
polkit-elogind-service
create-swap-space-service))
;;
;; PantherX desktop service type
;;
(define-record-type* <px-desktop-configuration> px-desktop-configuration
make-px-desktop-configuration
px-desktop-configuration?
(lxqt px-config-package
(default lxqt-modified))
(default-packages px-config-default-packages
(default (list px-desktop-defaults))))
(define (px-desktop-polkit-settings config)
"Return the list of LXQt dependencies that provide polkit actions and
rules."
(list lxqt-admin))
(define px-desktop-profile-packages
(lambda (config)
(append
(list (px-config-package config))
(px-config-default-packages config))))
(define px-desktop-service-type
(service-type
(name 'px-desktop)
(extensions
(list (service-extension polkit-service-type
px-desktop-polkit-settings)
(service-extension profile-service-type
px-desktop-profile-packages)))
(default-value (px-desktop-configuration))
(description "Run LXQt desktop environment on PantherX.")))
;;
;; allow netdev group to control network manger
;;
(define polkit-network-manager
(file-union
"polkit-nm"
`(("share/polkit-1/rules.d/50-org.freedesktop.NetworkManager.rules"
,(plain-file
"nm.rules"
"polkit.addRule(function(action, subject) {
if (action.id.indexOf(\"org.freedesktop.NetworkManager.\") == 0 && subject.isInGroup(\"netdev\")) {
return polkit.Result.YES;
}
});
")))))
;; primarily for ARM
(define polkit-network-manager-service
(simple-service 'polkit-nm polkit-service-type (list polkit-network-manager)))
;;
;; Allow users group to perform reboot/poweroff
;; primarily for ARM
;;
(define polkit-loginctl
(file-union
"polkit-loginctl"
`(("share/polkit-1/rules.d/10-enable-session-power.rules"
,(plain-file
"login.rules"
"polkit.addRule(function(action, subject) {
if ( (action.id == \"org.freedesktop.login1.reboot\" ||
action.id == \"org.freedesktop.login1.reboot-multiple-sessions\" ||
action.id == \"org.freedesktop.login1.power-off\" ||
action.id == \"org.freedesktop.login1.power-off-multiple-sessions\")
&& subject.isInGroup(\"users\") ) {
return polkit.Result.YES;
}
});
")))))
(define polkit-elogind-service
(simple-service 'polkit-login polkit-service-type (list polkit-loginctl)))
|