guix/gnu/home/services/gnome.scm
Giacomo Leidi 17fdce75ec
gnu: Add home-gcr-ssh-agent-service-type.
GNOME Keyring used to be able to act as a wrapper over ssh-agent.
It would display a GUI password entry dialog, including a checkbox to remember
the password, which, if selected, would allow fully passwordless use of that key.

The SSH functionality is disabled by default in gnome-keyring-daemon
builds since version 1.46
(commit 25c5a1982467802fa12c6852b03c57924553ba73).
It has been moved
(https://gitlab.gnome.org/GNOME/gcr/-/merge_requests/67)
into gcr-ssh-agent, which is part of the gcr package.

* gnu/home/services/gnome.scm: New file.
(gcr-ssh-agent-log-file,gcr-ssh-agent-shepherd-services): New public
procedures.
(gcr-ssh-agent-configuration): New configuration record.
(home-gcr-ssh-agent-service-type): New service type.
* gnu/local.mk: Add it.
* doc/guix.texi: Document it.

Change-Id: Idd3e40f544d40bb4c6682255f877cb79f0c70850
Signed-off-by: Maxim Cournoyer <maxim@guixotic.coop>
Reviewed-by: Dariqq <dariqq@posteo.net>
Reviewed-by: Liliana Marie Prikler <liliana.prikler@gmail.com>
Modified-by: Maxim Cournoyer <maxim@guixotic.coop>
2025-12-01 17:20:55 +09:00

104 lines
3.8 KiB
Scheme

;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2025 Giacomo Leidi <goodoldpaul@autistici.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published by
;;; the Free Software Foundation, either version 3 of the License, or
;;; (at your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful,
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu home services gnome)
#:use-module (guix gexp)
#:use-module (guix packages)
#:use-module (gnu packages admin)
#:use-module (gnu packages gnome)
#:use-module (gnu system accounts)
#:use-module (gnu services configuration)
#:use-module (gnu home services)
#:use-module (gnu home services shepherd)
#:export (gcr-ssh-agent-configuration
gcr-ssh-agent-configuration?
gcr-ssh-agent-configuration-fields
gcr-ssh-agent-configuration-package
gcr-ssh-agent-configuration-log-file
home-gcr-ssh-agent-log-file
home-gcr-ssh-agent-shepherd-service
home-gcr-ssh-agent-service-type))
(define-maybe/no-serialization string)
(define-configuration/no-serialization gcr-ssh-agent-configuration
(package
(package gcr)
"The @code{gcr} package to use.")
(log-file
(maybe-string)
"Where the service will write its logs. If unset, it defaults to
@file{$HOME/.local/state/shepherd/gcr-ssh-agent.log}."))
(define (home-gcr-ssh-agent-log-file config)
(define maybe-log-file (gcr-ssh-agent-configuration-log-file config))
(if (maybe-value-set? maybe-log-file)
maybe-log-file
#~(string-append %user-log-dir "/gcr-ssh-agent.log")))
(define (home-gcr-ssh-agent-shepherd-service config)
(let ((package
(gcr-ssh-agent-configuration-package config))
(log-file (home-gcr-ssh-agent-log-file config)))
(list
(shepherd-service
(provision '(gcr-ssh-agent ssh-agent))
(modules
;;for '%user-log-dir' and '%user-runtime-dir'
'((shepherd support)))
(start
#~(let* ((socket-directory
(string-append %user-runtime-dir
"/gcr"))
(socket-endpoint
(endpoint
(make-socket-address
AF_UNIX
(string-append socket-directory "/ssh"))
#:name "ssh"
#:socket-directory-permissions #o700)))
(make-systemd-constructor
(list #$(file-append package
"/libexec/gcr-ssh-agent")
"-d" socket-directory)
(list socket-endpoint)
;; With #:lazy-start #t the first ssh connection
;; hangs indefinitely.
#:lazy-start? #f
#:log-file #$log-file)))
(stop #~(make-systemd-destructor))))))
(define (home-gcr-ssh-agent-environment-variables config)
`(("SSH_AUTH_SOCK" . "${XDG_RUNTIME_DIR}/gcr/ssh")))
(define home-gcr-ssh-agent-service-type
(service-type
(name 'home-gcr-ssh-agent)
(extensions
(list (service-extension
home-shepherd-service-type
home-gcr-ssh-agent-shepherd-service)
(service-extension home-environment-variables-service-type
home-gcr-ssh-agent-environment-variables)))
(default-value (gcr-ssh-agent-configuration))
(description
"Provides @code{gcr-ssh-agent} Shepherd service and installs
@code{gcr} in the system profile.")))