From e054c89f9964686670e7716c820ca9ebb9f41543 Mon Sep 17 00:00:00 2001 From: Petr Hodina Date: Sat, 18 Sep 2021 13:11:18 +0200 Subject: [PATCH v4 2/2] services: Add a service for bolt. * gnu/services/linux.scm (bolt-service-type) (bolt-shepherd-service, bolt-dbus-service) (bolt-configuration, bolt-configuration?): New procedures. diff --git a/gnu/services/linux.scm b/gnu/services/linux.scm index 60e2093e1d..37dcd14f97 100644 --- a/gnu/services/linux.scm +++ b/gnu/services/linux.scm @@ -5,6 +5,7 @@ ;;; Copyright © 2021 raid5atemyhomework ;;; Copyright © 2021 B. Wilson ;;; Copyright © 2022 Josselin Poiret +;;; Copyright © 2021-2022 Petr Hodina ;;; ;;; This file is part of GNU Guix. ;;; @@ -29,15 +30,21 @@ (define-module (gnu services linux) #:use-module (guix i18n) #:use-module (guix ui) #:use-module (gnu services) + #:use-module (gnu services dbus) #:use-module (gnu services base) #:use-module (gnu services shepherd) + #:use-module (gnu system shadow) #:use-module (gnu packages linux) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (srfi srfi-34) #:use-module (srfi srfi-35) #:use-module (ice-9 match) - #:export (earlyoom-configuration + #:export (bolt-configuration + bolt-configuration? + bolt-service-type + + earlyoom-configuration earlyoom-configuration? earlyoom-configuration-earlyoom earlyoom-configuration-minimum-available-memory @@ -65,6 +72,76 @@ (define-module (gnu services linux) zram-device-configuration-priority zram-device-service-type)) + +;;; +;;; Thunderbolt daemon. +;;; + +(define-record-type* + bolt-configuration make-bolt-configuration bolt-configuration? + (package bolt-configuration-package ; package + (default bolt))) + +(define bolt-shepherd-service + (match-lambda + (($ package) + (with-imported-modules (source-module-closure + '((gnu build shepherd))) + (shepherd-service + (documentation "Thunderbolt daemon") + (provision '(thunderbolt)) + (requirement '(networking)) + (modules '((gnu build shepherd))) + (start #~(make-forkexec-constructor/container + (list #$(file-append package "/libexec/boltd")) + )) + (stop #~(make-kill-destructor))))))) + +(define %bolt-activation + #~(begin + (use-modules (guix build utils)) + (mkdir-p "/var/lib/boltd"))) + +(define (bolt-dbus-service config) + (list (wrapped-dbus-service (bolt-configuration-bolt config) + "libexec/boltd" + `(("BOLT_CONF_FILE_NAME" + '("share/dbus-1/interfaces/org.freedesktop.bolt.xml")))))) + +(define %bolt-accounts + (list (user-group (name "boltd") (system? #t)) + (user-account + (name "boltd") + (group "boltd") + (system? #t) + (comment "Boltd daemon user") + (home-directory "/var/empty") + (shell "/run/current-system/profile/sbin/nologin")))) + +(define bolt-udev-rule + (match-lambda + (($ package) + (file->udev-rule "90-bolt.rules" (file-append package "/lib/udev/rules.d/90-bolt.rules"))))) + +(define bolt-service-type + (service-type + (name 'boltd) + (description + "Thunderbolt daemon") + (extensions + (list (service-extension udev-service-type + (compose list bolt-udev-rule)) + (service-extension activation-service-type + (const %bolt-activation)) + (service-extension dbus-root-service-type + (compose list bolt-configuration-package)) + ; bolt-dbus-service) + (service-extension account-service-type + (const %bolt-accounts)) + (service-extension shepherd-root-service-type + (compose list bolt-shepherd-service)))) + (default-value (bolt-configuration)))) + ;;; ;;; Early OOM daemon. -- 2.37.0