| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 | |
| 10 | |
| 11 | |
| 12 | |
| 13 | |
| 14 | |
| 15 | |
| 16 | |
| 17 | |
| 18 |
|
| 19 |
|
| 20 | (define-module (gnu home services gnome)
|
| 21 | #:use-module (guix gexp)
|
| 22 | #:use-module (guix packages)
|
| 23 | #:use-module (gnu packages admin)
|
| 24 | #:use-module (gnu packages gnome)
|
| 25 | #:use-module (gnu system accounts)
|
| 26 | #:use-module (gnu services configuration)
|
| 27 | #:use-module (gnu home services)
|
| 28 | #:use-module (gnu home services shepherd)
|
| 29 | #:export (gcr-ssh-agent-configuration
|
| 30 | gcr-ssh-agent-configuration?
|
| 31 | gcr-ssh-agent-configuration-fields
|
| 32 | gcr-ssh-agent-configuration-package
|
| 33 | gcr-ssh-agent-configuration-log-file
|
| 34 |
|
| 35 | home-gcr-ssh-agent-log-file
|
| 36 | home-gcr-ssh-agent-shepherd-service
|
| 37 |
|
| 38 | home-gcr-ssh-agent-service-type))
|
| 39 |
|
| 40 | (define-maybe/no-serialization string)
|
| 41 |
|
| 42 | (define-configuration/no-serialization gcr-ssh-agent-configuration
|
| 43 | (package
|
| 44 | (package gcr)
|
| 45 | "The @code{gcr} package to use.")
|
| 46 | (log-file
|
| 47 | (maybe-string)
|
| 48 | "Where the service will write its logs. If unset, it defaults to
|
| 49 | @file{$HOME/.local/state/shepherd/gcr-ssh-agent.log}."))
|
| 50 |
|
| 51 | (define (home-gcr-ssh-agent-log-file config)
|
| 52 | (define maybe-log-file (gcr-ssh-agent-configuration-log-file config))
|
| 53 | (if (maybe-value-set? maybe-log-file)
|
| 54 | maybe-log-file
|
| 55 | #~(string-append %user-log-dir "/gcr-ssh-agent.log")))
|
| 56 |
|
| 57 | (define (home-gcr-ssh-agent-shepherd-service config)
|
| 58 | (let ((package
|
| 59 | (gcr-ssh-agent-configuration-package config))
|
| 60 | (log-file (home-gcr-ssh-agent-log-file config)))
|
| 61 | (list
|
| 62 | (shepherd-service
|
| 63 | (provision '(gcr-ssh-agent ssh-agent))
|
| 64 | (modules
|
| 65 | |
| 66 | '((shepherd support)))
|
| 67 | (start
|
| 68 | #~(let* ((socket-directory
|
| 69 | (string-append %user-runtime-dir
|
| 70 | "/gcr"))
|
| 71 | (socket-endpoint
|
| 72 | (endpoint
|
| 73 | (make-socket-address
|
| 74 | AF_UNIX
|
| 75 | (string-append socket-directory "/ssh"))
|
| 76 | #:name "ssh"
|
| 77 | #:socket-directory-permissions #o700)))
|
| 78 | (make-systemd-constructor
|
| 79 | (list #$(file-append package
|
| 80 | "/libexec/gcr-ssh-agent")
|
| 81 | "-d" socket-directory)
|
| 82 | (list socket-endpoint)
|
| 83 | |
| 84 | |
| 85 | #:lazy-start? #f
|
| 86 | #:log-file #$log-file)))
|
| 87 | (stop #~(make-systemd-destructor))))))
|
| 88 |
|
| 89 | (define (home-gcr-ssh-agent-environment-variables config)
|
| 90 | `(("SSH_AUTH_SOCK" . "${XDG_RUNTIME_DIR}/gcr/ssh")))
|
| 91 |
|
| 92 | (define home-gcr-ssh-agent-service-type
|
| 93 | (service-type
|
| 94 | (name 'home-gcr-ssh-agent)
|
| 95 | (extensions
|
| 96 | (list (service-extension
|
| 97 | home-shepherd-service-type
|
| 98 | home-gcr-ssh-agent-shepherd-service)
|
| 99 | (service-extension home-environment-variables-service-type
|
| 100 | home-gcr-ssh-agent-environment-variables)))
|
| 101 | (default-value (gcr-ssh-agent-configuration))
|
| 102 | (description
|
| 103 | "Provides @code{gcr-ssh-agent} Shepherd service and installs
|
| 104 | @code{gcr} in the system profile.")))
|