summaryrefslogtreecommitdiff
path: root/px/services/desktop.scm
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)))