From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp10.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms5.migadu.com with LMTPS id uApEDS4QQ2PI3AAAbAwnHQ (envelope-from ) for ; Sun, 09 Oct 2022 20:17:18 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp10.migadu.com with LMTPS id qK1SDC4QQ2N2UgEAG6o9tA (envelope-from ) for ; Sun, 09 Oct 2022 20:17:18 +0200 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 6C5D237DD7 for ; Sun, 9 Oct 2022 20:17:17 +0200 (CEST) Received: from localhost ([::1]:37766 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oharT-0001yM-K2 for larch@yhetil.org; Sun, 09 Oct 2022 14:17:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45814) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oharG-0001yC-7Q for guix-patches@gnu.org; Sun, 09 Oct 2022 14:17:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:45827) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oharF-0001Vh-Vp for guix-patches@gnu.org; Sun, 09 Oct 2022 14:17:01 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1oharF-0008EC-Jy for guix-patches@gnu.org; Sun, 09 Oct 2022 14:17:01 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#57721] [PATCH v3] gnu: base: Add greetd-wlgreet-sway-session. References: <20220910202903.17482-1-paren@disroot.org> In-Reply-To: <20220910202903.17482-1-paren@disroot.org> Resent-From: "(" Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sun, 09 Oct 2022 18:17:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 57721 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 57721@debbugs.gnu.org Cc: "\(" Received: via spool by 57721-submit@debbugs.gnu.org id=B57721.166533942131619 (code B ref 57721); Sun, 09 Oct 2022 18:17:01 +0000 Received: (at 57721) by debbugs.gnu.org; 9 Oct 2022 18:17:01 +0000 Received: from localhost ([127.0.0.1]:44905 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oharE-0008Du-8B for submit@debbugs.gnu.org; Sun, 09 Oct 2022 14:17:00 -0400 Received: from knopi.disroot.org ([178.21.23.139]:46528) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ohar9-0008Dj-Dd for 57721@debbugs.gnu.org; Sun, 09 Oct 2022 14:16:59 -0400 Received: from localhost (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 0FA9A4C3FE; Sun, 9 Oct 2022 20:16:54 +0200 (CEST) X-Virus-Scanned: SPAM Filter at disroot.org Received: from knopi.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavisd-new, port 10024) with UTF8SMTP id CPD8cJAF6f8m; Sun, 9 Oct 2022 20:16:52 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1665339410; bh=EyFFFVbbDG56hh8BnWd5UD6V9hSRFHBbC/yVVjfbSTs=; h=From:To:Cc:Subject:Date; b=Q9LOodNyVIY4hhgOdkeMNhShvdoCaG8QW3iA/WaPTPTQMhDCkmb5wURrRWHp1XdZr VgAZCuU8Sfry30hOFol98hP74Ub4z7EfsXuo44TTjcVslAhey/YCiABw0KrMhdWKAP 2tsP04jLgrmbGmU1WrkQwisuBQvphOh1cRRDBFGnyOikbaCJ33t8Dum49Zy/tWDVCW t0uz5UkoEyv8MrWc8c9Vp1552w+A9AA2YGTCgtAYNr7IwI/wdu4YDJPXvRHgNMIAQf eahltoY6GyXZpn4zFz3xI+z9GTFkY41HhVW2HjdWSTzeWEbyxyB9+Wegsgfq6sw8Sd s8mCHgB95Cidw== Date: Sun, 9 Oct 2022 19:16:46 +0100 Message-Id: <20221009181646.22436-1-paren@disroot.org> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: "Guix-patches" Reply-to: "\(" X-ACL-Warn: , "\( via Guix-patches" From: "\( via Guix-patches" via X-Migadu-Flow: FLOW_IN X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1665339438; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:resent-cc: resent-from:resent-sender:resent-message-id:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=HDdm/FRpaMgVvFDGoSjRHvEIZ41lsn64yjyYhEsZPvc=; b=WvoE1wB/T9CB68uSpRTYdJb4bq8t8v/PbPhIkwXS6qmqOUmgjkpZ5oT3BIPCNwBXCI8rQD xoNccdMo88NsWwBUSsxt1vcL4b+8vu8yM8F+F+iWzOE2R4xPX3xcZJ8VHH2oKOh8UpxHFe wIIfkHo/Dq5v2JNJU5JQJn+zciEm//8/l10YNCweudzE8TH2T3n9CySSiCuEQgZAL6Kpiq beWTg/eI6KOWdatKl2FBvi4oOk7NiKgPihxiDoza5yDDmMQsviYnnk19X1PYlq/8BPVIzj TH0FA4o3TUILNt4rRpy08CIhT2+aybt50AjAFJ9wPZLGHLmBX/Om7kza/MK4tw== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1665339438; a=rsa-sha256; cv=none; b=QnCnTb8qWXozBROny6/YfpEQiffqdKcJMFq+5NGtO+oZDK5FSgqxRFLkTBgEjceqyWBP9z pyQyJnOaf9+q40M8rRUHgnyc3DGhrfgbhUSJodOSYAiiHRwiIqvTnael0M9V0yVDyHnjgl utX5arHpxFPtgGlX3xSx09/uceDbaUtpsQ8yyrPdb2dIsK9ts/b8AKfR37wxzqeEJhv8EU eeIsC5vRMIlXxGQaHx4j8i2Y6nHHZ99joPa32QuX9Pr5/g+trNgLgMMnsOmKulMaE8JQx4 TUOowf+0KFU1fdZntDLURSXAti5Tu1jgWU1AxQqhTjBuxdUOtxSNtoPDOGC6mA== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=disroot.org header.s=mail header.b=Q9LOodNy; dmarc=pass (policy=none) header.from=gnu.org; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: -1.38 Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=disroot.org header.s=mail header.b=Q9LOodNy; dmarc=pass (policy=none) header.from=gnu.org; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: 6C5D237DD7 X-Spam-Score: -1.38 X-Migadu-Scanner: scn1.migadu.com X-TUID: hnsi+Os9UqrH * gnu/services/base.scm (greetd-wlgreet-session): New data type. (greetd-wlgreet-sway-session): Likewise. * doc/guix.texi ("Base Services")[greetd-service-type]: Document them. --- doc/guix.texi | 75 +++++++++++++++++++++++++++++ gnu/services/base.scm | 109 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 184 insertions(+) diff --git a/doc/guix.texi b/doc/guix.texi index 14592142dd..d5cffc8905 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -18681,6 +18681,81 @@ are set right after mentioned variables, so that they can be overriden. @end table @end deftp +@deftp {Data Type} greetd-wlgreet-session +Generic configuration record for the wlgreet greetd greeter. + +@table @asis +@item @code{wlgreet} (default: @code{wlgreet}) +The package with the @command{/bin/wlgreet} command. + +@item @code{command} (default: @code{(file-append sway "/bin/sway")}) +Command to be started by @command{/bin/wlgreet} on successful login. + +@item @code{command-args} (default: @code{'()}) +Command arguments to pass to command. + +@item @code{output-mode} (default: @code{"all"}) +Option to use for @code{outputMode} in the TOML configuration file. + +@item @code{scale} (default: @code{1}) +Option to use for @code{scale} in the TOML configuration file. + +@item @code{background} (default: @code{'(0 0 0 0.9)}) +RGBA list to use as the background colour of the login prompt. + +@item @code{headline} (default: @code{'(1 1 1 1)}) +RGBA list to use as the headline colour of the UI popup. + +@item @code{prompt} (default: @code{'(1 1 1 1)}) +RGBA list to use as the prompt colour of the UI popup. + +@item @code{prompt-error} (default: @code{'(1 1 1 1)}) +RGBA list to use as the error colour of the UI popup. + +@item @code{border} (default: @code{'(1 1 1 1)}) +RGBA list to use as the border colour of the UI popup. + +@item @code{extra-env} (default: @code{'()}) +Extra environment variables to set on login. + +@end table +@end deftp + +@deftp {Data Type} greetd-wlgreet-sway-session +Sway-specific configuration record for the wlgreet greetd greeter. + +@table @asis +@item @code{wlgreet-session} (default: @code{(greetd-wlgreet-session)}) +A @code{greetd-wlgreet-session} record for generic wlgreet configuration, +on top of the Sway-specific @code{greetd-wlgreet-sway-session}. + +@item @code{sway} (default: @code{sway}) +The package providing the @command{/bin/sway} command. + +@item @code{sway-configuration} (default: #f) +File-like object providing an additional Sway configuration file to be +prepended to the mandatory part of the configuration. + +@end table + +Here is an example of a greetd configuration that uses wlgreet and Sway: + +@lisp + (greetd-configuration + ;; We need to give the greeter user these permissions, otherwise + ;; Sway will crash on launch. + (greeter-supplementary-groups (list "video" "input" "seat")) + (terminals + (list (greetd-terminal-configuration + (terminal-vt "1") + (terminal-switch #t) + (default-session-command + (greetd-wlgreet-sway-session + (sway-configuration + (local-file "sway-greetd.conf")))))))) +@end lisp +@end deftp + @node Scheduled Job Execution @subsection Scheduled Job Execution diff --git a/gnu/services/base.scm b/gnu/services/base.scm index 3f662f1a6c..d3e3335030 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -19,6 +19,7 @@ ;;; Copyright © 2021 muradm ;;; Copyright © 2022 Guillaume Le Vaillant ;;; Copyright © 2022 Justin Veilleux +;;; Copyright © 2022 ( ;;; ;;; This file is part of GNU Guix. ;;; @@ -71,6 +72,7 @@ (define-module (gnu services base) #:use-module ((gnu packages file-systems) #:select (bcachefs-tools exfat-utils jfsutils zfs)) #:use-module (gnu packages terminals) + #:use-module ((gnu packages wm) #:select (sway)) #:use-module ((gnu build file-systems) #:select (mount-flags->bit-mask swap-space->flags-bit-mask)) @@ -237,6 +239,8 @@ (define-module (gnu services base) greetd-configuration greetd-terminal-configuration greetd-agreety-session + greetd-wlgreet-session + greetd-wlgreet-sway-session %base-services)) @@ -2902,6 +2906,109 @@ (define (make-greetd-agreety-session-command config command) "agreety-command" #~(execl #$agreety #$agreety "-c" #$command)))) +(define-record-type* + greetd-wlgreet-session make-greetd-wlgreet-session + greetd-wlgreet-session? + (wlgreet greetd-wlgreet (default wlgreet)) + (command greetd-wlgreet-command + (default (file-append sway "/bin/sway"))) + (command-args greetd-wlgreet-command-args (default '())) + (output-mode greetd-wlgreet-output-mode (default "all")) + (scale greetd-wlgreet-scale (default 1)) + (background greetd-wlgreet-background (default '(0 0 0 0.9))) + (headline greetd-wlgreet-headline (default '(1 1 1 1))) + (prompt greetd-wlgreet-prompt (default '(1 1 1 1))) + (prompt-error greetd-wlgreet-prompt-error (default '(1 1 1 1))) + (border greetd-wlgreet-border (default '(1 1 1 1))) + (extra-env greetd-wlgreet-extra-env (default '()))) + +(define (greetd-wlgreet-wayland-session-command session) + (program-file "wlgreet-session-command" + #~(let* ((username (getenv "USER")) + (useruid (number->string + (passwd:uid (getpwuid username)))) + (command #$(greetd-wlgreet-command session))) + (use-modules (ice-9 match)) + (setenv "XDG_SESSION_TYPE" "wayland") + (setenv "XDG_RUNTIME_DIR" (string-append "/run/user/" useruid)) + (for-each (lambda (env) (setenv (car env) (cdr env))) + '(#$@(greetd-wlgreet-extra-env session))) + (apply execl command command + (list #$@(greetd-wlgreet-command-args session)))))) + +(define (make-wlgreet-config-color section-name color) + (match color + ((red green blue opacity) + (string-append + "[" section-name "]\n" + "red = " (number->string red) "\n" + "green = " (number->string green) "\n" + "blue = " (number->string blue) "\n" + "opacity = " (number->string opacity) "\n")))) + +(define (make-wlgreet-configuration-file session) + (let ((command (greetd-wlgreet-wayland-session-command session)) + (output-mode (greetd-wlgreet-output-mode session)) + (scale (greetd-wlgreet-scale session)) + (background (greetd-wlgreet-background session)) + (headline (greetd-wlgreet-headline session)) + (prompt (greetd-wlgreet-prompt session)) + (prompt-error (greetd-wlgreet-prompt-error session)) + (border (greetd-wlgreet-border session))) + (mixed-text-file "wlgreet.toml" + "command = \"" command "\"\n" + "outputMode = \"" output-mode "\"\n" + "scale = " (number->string scale) "\n" + (apply string-append + (map (match-lambda + ((section-name . color) + (make-wlgreet-config-color section-name color))) + `(("background" . ,background) + ("headline" . ,headline) + ("prompt" . ,prompt) + ("prompt-error" . ,prompt-error) + ("border" . ,border))))))) + +(define-record-type* + greetd-wlgreet-sway-session make-greetd-wlgreet-sway-session + greetd-wlgreet-sway-session? + (wlgreet-session greetd-wlgreet-sway-session-wlgreet-session ; + (default (greetd-wlgreet-session))) + (sway greetd-wlgreet-sway-session-sway (default sway)) ; + (sway-configuration greetd-wlgreet-sway-session-sway-configuration ;file-like + (default (plain-file "wlgreet-sway-config" "")))) + +(define (make-wlgreet-sway-configuration-file session) + (let* ((wlgreet-session (greetd-wlgreet-sway-session-wlgreet-session session)) + (wlgreet-config (make-wlgreet-configuration-file wlgreet-session)) + (wlgreet (file-append (greetd-wlgreet wlgreet-session) "/bin/wlgreet")) + (sway-config (greetd-wlgreet-sway-session-sway-configuration session)) + (swaymsg (file-append (greetd-wlgreet-sway-session-sway session) + "/bin/swaymsg"))) + (mixed-text-file "wlgreet-sway.conf" + "include " sway-config "\n" + "xwayland disable\n" + "exec \"" wlgreet " --config " wlgreet-config "; " + swaymsg " exit\"\n"))) + +(define (greetd-wlgreet-sway-session-command session) + (let ((sway (file-append (greetd-wlgreet-sway-session-sway session) + "/bin/sway")) + (config (make-wlgreet-sway-configuration-file session))) + (program-file "wlgreet-sway-session-command" + #~(let* ((log-file (open-output-file + (string-append "/tmp/sway-greeter." + (number->string (getpid)) + ".log"))) + (username (getenv "USER")) + (useruid (number->string (passwd:uid (getpwuid username))))) + ;; redirect stdout/err to log-file + (dup2 (fileno log-file) 1) + (dup2 1 2) + (sleep 1) ;give seatd/logind some time to start up + (setenv "XDG_RUNTIME_DIR" (string-append "/run/user/" useruid)) + (execl #$sway #$sway "-d" "-c" #$config))))) + (define (make-greetd-default-session-command config-or-command) (cond ((greetd-agreety-session? config-or-command) (cond ((greetd-agreety-xdg-env? config-or-command) @@ -2912,6 +3019,8 @@ (define (make-greetd-default-session-command config-or-command) (make-greetd-agreety-session-command config-or-command (greetd-agreety-tty-session-command config-or-command))))) + ((greetd-wlgreet-sway-session? config-or-command) + (greetd-wlgreet-sway-session-command config-or-command)) (#t config-or-command))) (define-record-type* -- 2.38.0