80 lines
2.8 KiB
Scheme
80 lines
2.8 KiB
Scheme
(define-module (services)
|
|
#:use-module (ice-9 match)
|
|
|
|
#:use-module (guix gexp)
|
|
#:use-module (guix packages)
|
|
|
|
#:use-module (gnu services)
|
|
#:use-module (gnu services configuration)
|
|
#:use-module (gnu services shepherd)
|
|
#:use-module (gnu services dbus)
|
|
|
|
#:use-module (gnu home-services-utils)
|
|
|
|
#:use-module (gnu packages networking)
|
|
|
|
#:use-module (packages)
|
|
|
|
#:export (iwd-configuration))
|
|
|
|
(define-configuration/no-serialization iwd-configuration
|
|
(package (package iwd) "")
|
|
(config (ini-config '()) ""))
|
|
|
|
|
|
(define (iwd-shepherd-service config)
|
|
"Return a shepherd service for iwd"
|
|
(let ((pkg (iwd-configuration-package config)))
|
|
(list (shepherd-service
|
|
(documentation "Run iwd")
|
|
(provision '(networking))
|
|
(requirement '(user-processes dbus-system loopback))
|
|
(start #~(make-forkexec-constructor
|
|
(list (string-append #$pkg "/libexec/iwd"))
|
|
#:log-file "/var/log/iwd.log"))
|
|
(stop #~(make-kill-destructor))))))
|
|
|
|
(define (iwd-etc-service config)
|
|
(define (serialize-field key val)
|
|
(let ((val (cond
|
|
((list? val) (string-join (map maybe-object->string val) ";"))
|
|
(else val))))
|
|
(format #f "~a=~a\n" key val)))
|
|
|
|
(let ((cfg (iwd-configuration-config config)))
|
|
`(("iwd/main.conf"
|
|
,(mixed-text-file
|
|
"main.conf"
|
|
(generic-serialize-ini-config
|
|
#:serialize-field serialize-field
|
|
#:fields cfg))))))
|
|
|
|
(define-public iwd-service-type
|
|
(let ((iwd-package (compose list iwd-configuration-package)))
|
|
(service-type (name 'iwd)
|
|
(extensions
|
|
(list (service-extension shepherd-root-service-type
|
|
iwd-shepherd-service)
|
|
(service-extension dbus-root-service-type
|
|
iwd-package)
|
|
(service-extension etc-service-type
|
|
iwd-etc-service)
|
|
(service-extension profile-service-type
|
|
iwd-package)))
|
|
(default-value (iwd-configuration))
|
|
(description
|
|
"Run @url{https://01.org/iwd,iwd},
|
|
a wpa-supplicant replacemennt."))))
|
|
|
|
;; (define-record-type* <doas-configuration>
|
|
;; doas-configuration make-doas-configuration
|
|
;; doas-configuration?
|
|
;; (doas doas-configuration-doas (default doas))
|
|
;; (rules doas-configuration-rules
|
|
;; (default '("permit :wheel"))))
|
|
|
|
;; permit persist setenv { PKG_CACHE PKG_PATH } aja cmd pkg_add
|
|
;; permit setenv { -ENV PS1=$DOAS_PS1 SSH_AUTH_SOCK } :wheel
|
|
;; permit nopass tedu as root cmd /usr/sbin/procmap
|
|
;; permit nopass keepenv setenv { PATH } root as root
|