* [bug#58585] [PATCH 0/2] gnu: home: Add home-mako-service-type.
@ 2022-10-17 16:28 ( via Guix-patches via
2022-10-17 16:47 ` [bug#58585] [PATCH 1/2] gnu: mako: Patch makoctl to refer directly to binaries ( via Guix-patches via
0 siblings, 1 reply; 6+ messages in thread
From: ( via Guix-patches via @ 2022-10-17 16:28 UTC (permalink / raw)
To: 58585; +Cc: (
Heya,
This patchset adds a home service for configuring the Mako notification
daemon.
( (2):
gnu: mako: Patch makoctl to refer directly to binaries.
gnu: home: Add home-mako-service-type.
gnu/home/services/desktop.scm | 338 +++++++++++++++++++++++++++++++++-
gnu/packages/wm.scm | 36 +++-
2 files changed, 362 insertions(+), 12 deletions(-)
--
2.38.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* [bug#58585] [PATCH 1/2] gnu: mako: Patch makoctl to refer directly to binaries.
2022-10-17 16:28 [bug#58585] [PATCH 0/2] gnu: home: Add home-mako-service-type ( via Guix-patches via
@ 2022-10-17 16:47 ` ( via Guix-patches via
2022-10-17 16:47 ` [bug#58585] [PATCH 2/2] gnu: home: Add home-mako-service-type ( via Guix-patches via
2022-11-10 12:59 ` [bug#58585] [PATCH 1/2] gnu: mako: Patch makoctl to refer directly to binaries Andrew Tropin
0 siblings, 2 replies; 6+ messages in thread
From: ( via Guix-patches via @ 2022-10-17 16:47 UTC (permalink / raw)
To: 58585; +Cc: (
* gnu/packages/wm.scm (mako)[arguments]<#:phases>{'patch-makoctl}:
New phase.
[inputs]: Add jq.
---
gnu/packages/wm.scm | 36 ++++++++++++++++++++++++++----------
1 file changed, 26 insertions(+), 10 deletions(-)
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index af406ed2ed..d96846a21c 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -58,6 +58,7 @@
;;; Copyright © 2022 Elais Player <elais@fastmail.com>
;;; Copyright © 2022 Trevor Richards <trev@trevdev.ca>
;;; Copyright © 2022 Fredrik Salomonsson <plattfot@posteo.net>
+;;; Copyright © 2022 ( <paren@disroot.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -1807,17 +1808,32 @@ (define-public mako
(package
(name "mako")
(version "1.7.1")
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/emersion/mako")
- (commit (string-append "v" version))))
- (file-name (git-file-name name version))
- (sha256
- (base32 "0vpar1a7zafkd2plmyaackgba6fyg35s9zzyxmj8j7v2q5zxirgz"))))
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/emersion/mako")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0vpar1a7zafkd2plmyaackgba6fyg35s9zzyxmj8j7v2q5zxirgz"))))
(build-system meson-build-system)
- (inputs (list basu cairo gdk-pixbuf pango wayland))
+ (arguments
+ (list #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'patch-makoctl
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "makoctl"
+ (("^BUSCTL=.*$")
+ (string-append
+ "BUSCTL="
+ (search-input-file inputs "bin/basuctl")
+ "\n"))
+ (("jq ")
+ (string-append
+ (search-input-file inputs "bin/jq")
+ " "))))))))
+ (inputs (list basu cairo gdk-pixbuf jq pango wayland))
(native-inputs (list pkg-config scdoc wayland-protocols))
(home-page "https://wayland.emersion.fr/mako")
(synopsis "Lightweight Wayland notification daemon")
--
2.38.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [bug#58585] [PATCH 2/2] gnu: home: Add home-mako-service-type.
2022-10-17 16:47 ` [bug#58585] [PATCH 1/2] gnu: mako: Patch makoctl to refer directly to binaries ( via Guix-patches via
@ 2022-10-17 16:47 ` ( via Guix-patches via
2022-11-10 13:16 ` Andrew Tropin
2022-11-10 12:59 ` [bug#58585] [PATCH 1/2] gnu: mako: Patch makoctl to refer directly to binaries Andrew Tropin
1 sibling, 1 reply; 6+ messages in thread
From: ( via Guix-patches via @ 2022-10-17 16:47 UTC (permalink / raw)
To: 58585; +Cc: (
* gnu/home/services/desktop.scm (home-mako-section,
home-mako-configuration): New record types.
(%home-mako-default-section, %home-mako-default-grouped-section,
home-mako-service-type): New variables.
Unfortunately, there is no way to actually use this service to
run the daemon itself, as Mako tries to connect to Wayland, which
is impossible as WAYLAND_DISPLAY is almost never set in session
Shepherd's environment. So, this service simply writes the
configuration file to $XDG_CONFIG_HOME/mako/config, and leave the
actual execution of ``mako'' to the user.
---
gnu/home/services/desktop.scm | 338 +++++++++++++++++++++++++++++++++-
1 file changed, 336 insertions(+), 2 deletions(-)
diff --git a/gnu/home/services/desktop.scm b/gnu/home/services/desktop.scm
index a2ab2b4d07..a929a7533a 100644
--- a/gnu/home/services/desktop.scm
+++ b/gnu/home/services/desktop.scm
@@ -22,17 +22,26 @@ (define-module (gnu home services desktop)
#:use-module (gnu home services shepherd)
#:use-module (gnu services configuration)
#:autoload (gnu packages glib) (dbus)
+ #:autoload (gnu packages wm) (mako)
#:autoload (gnu packages xdisorg) (redshift)
- #:use-module (guix records)
#:use-module (guix gexp)
+ #:use-module (guix records)
#:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-26)
+ #:use-module (ice-9 format)
#:use-module (ice-9 match)
#:export (home-redshift-configuration
home-redshift-configuration?
home-redshift-service-type
home-dbus-configuration
- home-dbus-service-type))
+ home-dbus-service-type
+
+ home-mako-section
+ %home-mako-default-section
+ %home-mako-default-grouped-section
+ home-mako-configuration
+ home-mako-service-type))
\f
;;;
@@ -224,3 +233,328 @@ (define home-dbus-service-type
(default-value (home-dbus-configuration))
(description
"Run the session-specific D-Bus inter-process message bus.")))
+
+\f
+;;;
+;;; Mako.
+;;;
+
+(define-record-type* <home-mako-section>
+ home-mako-section make-home-mako-section
+ home-mako-section?
+
+ (if-app-name home-mako-if-app-name ;string | #f
+ (default #f))
+ (if-app-icon home-mako-if-app-icon ;string | #f
+ (default #f))
+ (if-summary home-mako-if-summary ;string | #f
+ (default #f))
+ (if-summary-regex? home-mako-if-summary-regex? ;boolean
+ (default #f))
+ (if-body home-mako-if-body ;string | #f
+ (default #f))
+ (if-body-regex? home-mako-if-body-regex? ;boolean
+ (default #f))
+ (if-urgency home-mako-if-urgency ;'low | 'normal | 'critical | #f
+ (default #f))
+ (if-category home-mako-if-category ;string | #f
+ (default #f))
+ (if-desktop-entry home-mako-if-desktop-entry ;string | #f
+ (default #f))
+ (if-actionable? home-mako-if-actionable? ;boolean | '()
+ (default '()))
+ (if-expiring? home-mako-if-expiring? ;boolean | '()
+ (default '()))
+ (if-mode home-mako-if-mode ;string | #f
+ (default #f))
+ (if-grouped? home-mako-if-grouped? ;boolean | '()
+ (default '()))
+ (if-group-index home-mako-if-group-index ;integer | #f
+ (default #f))
+ (if-hidden? home-mako-if-hidden? ;boolean | '()
+ (default '()))
+ (if-output home-mako-if-output ;string | #f
+ (default #f))
+ (if-anchor home-mako-if-anchor ;'top-right | 'top-center | 'top-left | 'bottom-right | 'bottom-center | 'bottom-left | 'center-right | 'center-left | 'center | #f
+ (default #f))
+
+ (on-button-left home-mako-on-button-left ;#f | 'default | 'dismiss | 'dismiss-all | 'dismiss-group | list of (file-like | string)
+ (default 'default))
+ (on-button-middle home-mako-on-button-middle ;#f | 'default | 'dismiss | 'dismiss-all | 'dismiss-group | string | list of (file-like | string)
+ (default #f))
+ (on-button-right home-mako-on-button-right ;#f | 'default | 'dismiss | 'dismiss-all | 'dismiss-group | list of (file-like | string)
+ (default 'dismiss))
+ (on-touch home-mako-on-touch ;#f | 'default | 'dismiss | 'dismiss-all | 'dismiss-group | list of (file-like | string)
+ (default 'dismiss))
+ (on-notify home-mako-on-notify ;#f | 'default | 'dismiss | 'dismiss-all | 'dismiss-group | list of (file-like | string)
+ (default #f))
+
+ (font home-mako-font ;string
+ (default "monospace"))
+ (font-size home-mako-font-size ;number
+ (default 10))
+
+ (background-color home-mako-background-color ;string
+ (default "285577FF"))
+ (text-color home-mako-text-color ;string
+ (default "FFFFFFFF"))
+
+ (width home-mako-width ;integer
+ (default 300))
+ (height home-mako-height ;integer
+ (default 100))
+ (outer-margin home-mako-outer-margin ;list of integer
+ (default '(0)))
+ (margin home-mako-margin ;list of integer
+ (default '(10)))
+ (padding home-mako-padding ;list of integer
+ (default '(5)))
+
+ (border-size home-mako-border-size ;integer
+ (default 2))
+ (border-color home-mako-border-color ;string
+ (default "4C7899FF"))
+ (border-radius home-mako-border-radius ;integer
+ (default 0))
+
+ (progress-color home-mako-progress-color ;string
+ (default "5588AAFF"))
+ (progress-style home-mako-progress-style ;'over | 'source
+ (default 'over))
+
+ (icons? home-mako-icons? ;boolean
+ (default #t))
+ (max-icon-size home-mako-max-icon-size ;integer
+ (default 64))
+ (icon-path home-mako-icon-path ;list of string
+ (default '()))
+ (icon-location home-mako-icon-location ;'left | 'right | 'top | 'bottom
+ (default 'left))
+
+ (markup? home-mako-markup? ;boolean
+ (default #t))
+ (actions? home-mako-actions? ;boolean
+ (default #t))
+ (history? home-mako-history? ;boolean
+ (default #t))
+ (invisible? home-mako-invisible? ;boolean
+ (default #f))
+
+ (format home-mako-format
+ (default "<b>%s</b>\\n%b"))
+ (text-alignment home-mako-text-alignment ;'left | 'center | 'right
+ (default 'left))
+
+ (default-timeout home-mako-default-timeout ;integer
+ (default 0))
+ (ignore-timeout? home-mako-ignore-timeout? ;boolean
+ (default #f))
+
+ (group-by home-mako-group-by ;list of string
+ (default #f))
+ (max-visible home-mako-max-visible ;integer
+ (default #f))
+
+ (output home-mako-output ;string
+ (default #f))
+ (layer home-mako-layer ;'background | 'bottom | 'top | 'overlay
+ (default 'top))
+ (anchor home-mako-anchor ;'top-right | 'top-center | 'top-left | 'bottom-right | 'bottom-center | 'bottom-left | 'center-right | 'center-left | 'center
+ (default #f)))
+
+(define (home-mako-configuration-header-attributes section)
+ (define (boolean-clause name field)
+ (let ((value (field section)))
+ (cond ((null? value) '())
+ (value (list "!" name " "))
+ (else (list name)))))
+
+ (define (string-clause name field)
+ (let ((value (field section)))
+ (if value
+ (list name "=\"" value "\" ")
+ '())))
+
+ (define (symbol-clause name field)
+ (if (field section)
+ (string-clause name (compose symbol->string field))
+ '()))
+
+ (define (number-clause name field)
+ (if (field section)
+ (string-clause name (compose number->string field))
+ '()))
+
+ (append (string-clause "app-name" home-mako-if-app-name)
+ (string-clause "app-icon" home-mako-if-app-icon)
+ (string-clause (if (home-mako-if-summary-regex? section)
+ "summary~"
+ "summary")
+ home-mako-if-summary)
+ (string-clause (if (home-mako-if-body-regex? section)
+ "body~"
+ "body")
+ home-mako-if-body)
+ (symbol-clause "urgency" home-mako-if-urgency)
+ (string-clause "category" home-mako-if-category)
+ (string-clause "desktop-entry" home-mako-if-desktop-entry)
+ (boolean-clause "actionable" home-mako-if-actionable?)
+ (boolean-clause "expiring" home-mako-if-expiring?)
+ (string-clause "mode" home-mako-if-mode)
+ (boolean-clause "grouped" home-mako-if-grouped?)
+ (number-clause "group-index" home-mako-if-group-index)
+ (boolean-clause "hidden" home-mako-if-hidden?)
+ (string-clause "output" home-mako-if-output)
+ (symbol-clause "anchor" home-mako-if-anchor)))
+
+(define (home-mako-configuration-header section)
+ (match (home-mako-configuration-header-attributes section)
+ (() '())
+ ((attributes ...)
+ (append (list "\n[ ") attributes (list "]\n")))))
+
+(define (home-mako-configuration-body section)
+ (define (string-clause name field)
+ (let ((value (field section)))
+ (if value
+ (list name "=" (field section) "\n")
+ '())))
+
+ (define (boolean-clause name field)
+ (list name "=" (if (field section) "1" "0") "\n"))
+
+ (define (number-clause name field)
+ (if (field section)
+ (string-clause name (compose number->string field))
+ '()))
+
+ (define (symbol-clause name field)
+ (if (field section)
+ (string-clause name (compose symbol->string field))
+ '()))
+
+ (define (colour-clause name field)
+ (string-clause name (compose (cute string-append "#" <>)
+ field)))
+
+ (define (directional-clause name field)
+ (if (field section)
+ (string-clause name (compose (cute string-join <> ",")
+ (cute map number->string <>)
+ field))
+ '()))
+
+ (define (event-clause name field)
+ (append (list name "=")
+ (match (field section)
+ ('default (list "invoke-default-action"))
+ ('dismiss (list "dismiss"))
+ ('dismiss-all (list "dismiss-all"))
+ ('dismiss-group (list "dismiss-group"))
+ ((args ...)
+ (append (list "exec")
+ (append-map (cute list " \"" <> "\"")
+ args)))
+ (#f (list "none")))
+ (list "\n")))
+
+ (append (event-clause "on-button-left" home-mako-on-button-left)
+ (event-clause "on-button-middle" home-mako-on-button-middle)
+ (event-clause "on-button-right" home-mako-on-button-right)
+ (event-clause "on-touch" home-mako-on-touch)
+ (event-clause "on-notify" home-mako-on-notify)
+ (list "font=" (home-mako-font section) " "
+ (number->string (home-mako-font-size section)) "\n")
+ (colour-clause "background-color" home-mako-background-color)
+ (colour-clause "text-color" home-mako-text-color)
+ (number-clause "width" home-mako-width)
+ (number-clause "height" home-mako-height)
+ (directional-clause "outer-margin" home-mako-outer-margin)
+ (directional-clause "margin" home-mako-margin)
+ (directional-clause "padding" home-mako-padding)
+ (number-clause "border-size" home-mako-border-size)
+ (colour-clause "border-color" home-mako-border-color)
+ (number-clause "border-radius" home-mako-border-radius)
+ (list "progress-color="
+ (symbol->string (home-mako-progress-style section))
+ " #" (home-mako-progress-color section) "\n")
+ (boolean-clause "icons" home-mako-icons?)
+ (number-clause "max-icon-size" home-mako-max-icon-size)
+ (string-clause "icon-path"
+ (compose (cute string-join <> ":")
+ home-mako-icon-path))
+ (symbol-clause "icon-location" home-mako-icon-location)
+ (boolean-clause "markup" home-mako-markup?)
+ (boolean-clause "actions" home-mako-actions?)
+ (boolean-clause "history" home-mako-history?)
+ (boolean-clause "invisible" home-mako-invisible?)
+ (string-clause "format" home-mako-format)
+ (symbol-clause "text-alignment" home-mako-text-alignment)
+ (number-clause "default-timeout" home-mako-default-timeout)
+ (boolean-clause "ignore-timeout" home-mako-ignore-timeout?)
+ (boolean-clause "ignore-timeout" home-mako-ignore-timeout?)
+ (if (home-mako-group-by section)
+ (string-clause "group-by"
+ (compose (cute string-join <> ",")
+ home-mako-group-by))
+ '())
+ (number-clause "max-visible" home-mako-max-visible)
+ (string-clause "output" home-mako-output)
+ (symbol-clause "layer" home-mako-layer)
+ (symbol-clause "anchor" home-mako-anchor)))
+
+(define (home-mako-configuration-section section)
+ (append (home-mako-configuration-header section)
+ (home-mako-configuration-body section)))
+
+(define %home-mako-default-section (home-mako-section))
+
+(define %home-mako-default-grouped-section
+ (home-mako-section
+ (if-grouped? #t)
+ (format "(%g) <b>%s</b>\\n%b")))
+
+(define-record-type* <home-mako-configuration>
+ home-mako-configuration make-home-mako-configuration
+ home-mako-configuration?
+
+ (mako home-mako-configuration-mako ;file-like
+ (default mako))
+ (sections home-mako-configuration-sections ;list of <home-mako-section>
+ (default (list %home-mako-default-section
+ %home-mako-default-grouped-section)))
+
+ (max-history home-mako-configuration-max-history ;integer
+ (default 5))
+ (sort home-mako-configuration-sort ;'time | 'priority
+ (default 'time))
+ (sort-order home-mako-configuration-sort-order ;'ascending | 'descending
+ (default 'descending)))
+
+(define (home-mako-configuration-file config)
+ (apply mixed-text-file "mako-config"
+ (append (list "max-history="
+ (number->string
+ (home-mako-configuration-max-history config))
+ "\n"
+ "sort="
+ (match (home-mako-configuration-sort-order config)
+ ('ascending "+")
+ ('descending "-"))
+ (symbol->string (home-mako-configuration-sort config))
+ "\n")
+ (append-map home-mako-configuration-section
+ (home-mako-configuration-sections config)))))
+
+(define (home-mako-xdg-configuration-files config)
+ `(("mako/config" ,(home-mako-configuration-file config))))
+
+(define home-mako-service-type
+ (service-type
+ (name 'home-mako)
+ (extensions
+ (list (service-extension home-xdg-configuration-files-service-type
+ home-mako-xdg-configuration-files)))
+ (default-value (home-mako-configuration))
+ (description
+ "Install and configure the @code{mako} notification daemon.")))
--
2.38.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [bug#58585] [PATCH 1/2] gnu: mako: Patch makoctl to refer directly to binaries.
2022-10-17 16:47 ` [bug#58585] [PATCH 1/2] gnu: mako: Patch makoctl to refer directly to binaries ( via Guix-patches via
2022-10-17 16:47 ` [bug#58585] [PATCH 2/2] gnu: home: Add home-mako-service-type ( via Guix-patches via
@ 2022-11-10 12:59 ` Andrew Tropin
1 sibling, 0 replies; 6+ messages in thread
From: Andrew Tropin @ 2022-11-10 12:59 UTC (permalink / raw)
To: 58585; +Cc: (, Nicolas Graves
[-- Attachment #1: Type: text/plain, Size: 2725 bytes --]
On 2022-10-17 17:47, guix-patches@gnu.org wrote:
> * gnu/packages/wm.scm (mako)[arguments]<#:phases>{'patch-makoctl}:
> New phase.
> [inputs]: Add jq.
> ---
> gnu/packages/wm.scm | 36 ++++++++++++++++++++++++++----------
> 1 file changed, 26 insertions(+), 10 deletions(-)
>
> diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
> index af406ed2ed..d96846a21c 100644
> --- a/gnu/packages/wm.scm
> +++ b/gnu/packages/wm.scm
> @@ -58,6 +58,7 @@
> ;;; Copyright © 2022 Elais Player <elais@fastmail.com>
> ;;; Copyright © 2022 Trevor Richards <trev@trevdev.ca>
> ;;; Copyright © 2022 Fredrik Salomonsson <plattfot@posteo.net>
> +;;; Copyright © 2022 ( <paren@disroot.org>
> ;;;
> ;;; This file is part of GNU Guix.
> ;;;
> @@ -1807,17 +1808,32 @@ (define-public mako
> (package
> (name "mako")
> (version "1.7.1")
> - (source
> - (origin
> - (method git-fetch)
> - (uri (git-reference
> - (url "https://github.com/emersion/mako")
> - (commit (string-append "v" version))))
> - (file-name (git-file-name name version))
> - (sha256
> - (base32 "0vpar1a7zafkd2plmyaackgba6fyg35s9zzyxmj8j7v2q5zxirgz"))))
> + (source (origin
> + (method git-fetch)
> + (uri (git-reference
> + (url "https://github.com/emersion/mako")
> + (commit (string-append "v" version))))
> + (file-name (git-file-name name version))
> + (sha256
> + (base32
> + "0vpar1a7zafkd2plmyaackgba6fyg35s9zzyxmj8j7v2q5zxirgz"))))
> (build-system meson-build-system)
> - (inputs (list basu cairo gdk-pixbuf pango wayland))
> + (arguments
> + (list #:phases
> + #~(modify-phases %standard-phases
> + (add-after 'unpack 'patch-makoctl
> + (lambda* (#:key inputs #:allow-other-keys)
> + (substitute* "makoctl"
> + (("^BUSCTL=.*$")
> + (string-append
> + "BUSCTL="
> + (search-input-file inputs "bin/basuctl")
> + "\n"))
> + (("jq ")
> + (string-append
> + (search-input-file inputs "bin/jq")
> + " "))))))))
> + (inputs (list basu cairo gdk-pixbuf jq pango wayland))
> (native-inputs (list pkg-config scdoc wayland-protocols))
> (home-page "https://wayland.emersion.fr/mako")
> (synopsis "Lightweight Wayland notification daemon")
Applied this patch and pushed, thank you.
--
Best regards,
Andrew Tropin
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* [bug#58585] [PATCH 2/2] gnu: home: Add home-mako-service-type.
2022-10-17 16:47 ` [bug#58585] [PATCH 2/2] gnu: home: Add home-mako-service-type ( via Guix-patches via
@ 2022-11-10 13:16 ` Andrew Tropin
2022-11-10 15:36 ` ( via Guix-patches via
0 siblings, 1 reply; 6+ messages in thread
From: Andrew Tropin @ 2022-11-10 13:16 UTC (permalink / raw)
To: 58585; +Cc: (, Nicolas Graves
[-- Attachment #1: Type: text/plain, Size: 18043 bytes --]
On 2022-10-17 17:47, "\( via Guix-patches" via wrote:
> * gnu/home/services/desktop.scm (home-mako-section,
> home-mako-configuration): New record types.
> (%home-mako-default-section, %home-mako-default-grouped-section,
> home-mako-service-type): New variables.
>
> Unfortunately, there is no way to actually use this service to
> run the daemon itself, as Mako tries to connect to Wayland, which
> is impossible as WAYLAND_DISPLAY is almost never set in session
> Shepherd's environment. So, this service simply writes the
> configuration file to $XDG_CONFIG_HOME/mako/config, and leave the
> actual execution of ``mako'' to the user.
After recent updates to shepherd service
https://git.savannah.gnu.org/cgit/guix.git/commit/?id=70d58d1556
https://git.savannah.gnu.org/cgit/guix.git/commit/?id=6cdde65bb5
it's now possible to start shepherd manually.
In rde we start shepherd by sway, so it inherits all wayland related
variables.
https://git.sr.ht/~abcdw/rde/tree/101313a691/rde/features/wm.scm#L137
It's not a perfect solution, but good enough.
> ---
> gnu/home/services/desktop.scm | 338 +++++++++++++++++++++++++++++++++-
> 1 file changed, 336 insertions(+), 2 deletions(-)
>
> diff --git a/gnu/home/services/desktop.scm b/gnu/home/services/desktop.scm
> index a2ab2b4d07..a929a7533a 100644
> --- a/gnu/home/services/desktop.scm
> +++ b/gnu/home/services/desktop.scm
> @@ -22,17 +22,26 @@ (define-module (gnu home services desktop)
> #:use-module (gnu home services shepherd)
> #:use-module (gnu services configuration)
> #:autoload (gnu packages glib) (dbus)
> + #:autoload (gnu packages wm) (mako)
> #:autoload (gnu packages xdisorg) (redshift)
> - #:use-module (guix records)
> #:use-module (guix gexp)
> + #:use-module (guix records)
> #:use-module (srfi srfi-1)
> + #:use-module (srfi srfi-26)
> + #:use-module (ice-9 format)
> #:use-module (ice-9 match)
> #:export (home-redshift-configuration
> home-redshift-configuration?
> home-redshift-service-type
>
> home-dbus-configuration
> - home-dbus-service-type))
> + home-dbus-service-type
> +
> + home-mako-section
> + %home-mako-default-section
> + %home-mako-default-grouped-section
> + home-mako-configuration
> + home-mako-service-type))
>
> \f
> ;;;
> @@ -224,3 +233,328 @@ (define home-dbus-service-type
> (default-value (home-dbus-configuration))
> (description
> "Run the session-specific D-Bus inter-process message bus.")))
> +
> +\f
> +;;;
> +;;; Mako.
> +;;;
> +
> +(define-record-type* <home-mako-section>
> + home-mako-section make-home-mako-section
> + home-mako-section?
> +
> + (if-app-name home-mako-if-app-name ;string | #f
> + (default #f))
> + (if-app-icon home-mako-if-app-icon ;string | #f
> + (default #f))
> + (if-summary home-mako-if-summary ;string | #f
> + (default #f))
> + (if-summary-regex? home-mako-if-summary-regex? ;boolean
> + (default #f))
> + (if-body home-mako-if-body ;string | #f
> + (default #f))
> + (if-body-regex? home-mako-if-body-regex? ;boolean
> + (default #f))
> + (if-urgency home-mako-if-urgency ;'low | 'normal | 'critical | #f
> + (default #f))
> + (if-category home-mako-if-category ;string | #f
> + (default #f))
> + (if-desktop-entry home-mako-if-desktop-entry ;string | #f
> + (default #f))
> + (if-actionable? home-mako-if-actionable? ;boolean | '()
> + (default '()))
> + (if-expiring? home-mako-if-expiring? ;boolean | '()
> + (default '()))
> + (if-mode home-mako-if-mode ;string | #f
> + (default #f))
> + (if-grouped? home-mako-if-grouped? ;boolean | '()
> + (default '()))
> + (if-group-index home-mako-if-group-index ;integer | #f
> + (default #f))
> + (if-hidden? home-mako-if-hidden? ;boolean | '()
> + (default '()))
> + (if-output home-mako-if-output ;string | #f
> + (default #f))
> + (if-anchor home-mako-if-anchor ;'top-right | 'top-center | 'top-left | 'bottom-right | 'bottom-center | 'bottom-left | 'center-right | 'center-left | 'center | #f
> + (default #f))
> +
> + (on-button-left home-mako-on-button-left ;#f | 'default | 'dismiss | 'dismiss-all | 'dismiss-group | list of (file-like | string)
> + (default 'default))
> + (on-button-middle home-mako-on-button-middle ;#f | 'default | 'dismiss | 'dismiss-all | 'dismiss-group | string | list of (file-like | string)
> + (default #f))
> + (on-button-right home-mako-on-button-right ;#f | 'default | 'dismiss | 'dismiss-all | 'dismiss-group | list of (file-like | string)
> + (default 'dismiss))
> + (on-touch home-mako-on-touch ;#f | 'default | 'dismiss | 'dismiss-all | 'dismiss-group | list of (file-like | string)
> + (default 'dismiss))
> + (on-notify home-mako-on-notify ;#f | 'default | 'dismiss | 'dismiss-all | 'dismiss-group | list of (file-like | string)
> + (default #f))
> +
> + (font home-mako-font ;string
> + (default "monospace"))
> + (font-size home-mako-font-size ;number
> + (default 10))
> +
> + (background-color home-mako-background-color ;string
> + (default "285577FF"))
> + (text-color home-mako-text-color ;string
> + (default "FFFFFFFF"))
> +
> + (width home-mako-width ;integer
> + (default 300))
> + (height home-mako-height ;integer
> + (default 100))
> + (outer-margin home-mako-outer-margin ;list of integer
> + (default '(0)))
> + (margin home-mako-margin ;list of integer
> + (default '(10)))
> + (padding home-mako-padding ;list of integer
> + (default '(5)))
> +
> + (border-size home-mako-border-size ;integer
> + (default 2))
> + (border-color home-mako-border-color ;string
> + (default "4C7899FF"))
> + (border-radius home-mako-border-radius ;integer
> + (default 0))
> +
> + (progress-color home-mako-progress-color ;string
> + (default "5588AAFF"))
> + (progress-style home-mako-progress-style ;'over | 'source
> + (default 'over))
> +
> + (icons? home-mako-icons? ;boolean
> + (default #t))
> + (max-icon-size home-mako-max-icon-size ;integer
> + (default 64))
> + (icon-path home-mako-icon-path ;list of string
> + (default '()))
> + (icon-location home-mako-icon-location ;'left | 'right | 'top | 'bottom
> + (default 'left))
> +
> + (markup? home-mako-markup? ;boolean
> + (default #t))
> + (actions? home-mako-actions? ;boolean
> + (default #t))
> + (history? home-mako-history? ;boolean
> + (default #t))
> + (invisible? home-mako-invisible? ;boolean
> + (default #f))
> +
> + (format home-mako-format
> + (default "<b>%s</b>\\n%b"))
> + (text-alignment home-mako-text-alignment ;'left | 'center | 'right
> + (default 'left))
> +
> + (default-timeout home-mako-default-timeout ;integer
> + (default 0))
> + (ignore-timeout? home-mako-ignore-timeout? ;boolean
> + (default #f))
> +
> + (group-by home-mako-group-by ;list of string
> + (default #f))
> + (max-visible home-mako-max-visible ;integer
> + (default #f))
> +
> + (output home-mako-output ;string
> + (default #f))
> + (layer home-mako-layer ;'background | 'bottom | 'top | 'overlay
> + (default 'top))
> + (anchor home-mako-anchor ;'top-right | 'top-center | 'top-left | 'bottom-right | 'bottom-center | 'bottom-left | 'center-right | 'center-left | 'center
> + (default #f)))
> +
> +(define (home-mako-configuration-header-attributes section)
> + (define (boolean-clause name field)
> + (let ((value (field section)))
> + (cond ((null? value) '())
> + (value (list "!" name " "))
> + (else (list name)))))
> +
> + (define (string-clause name field)
> + (let ((value (field section)))
> + (if value
> + (list name "=\"" value "\" ")
> + '())))
> +
> + (define (symbol-clause name field)
> + (if (field section)
> + (string-clause name (compose symbol->string field))
> + '()))
> +
> + (define (number-clause name field)
> + (if (field section)
> + (string-clause name (compose number->string field))
> + '()))
> +
> + (append (string-clause "app-name" home-mako-if-app-name)
> + (string-clause "app-icon" home-mako-if-app-icon)
> + (string-clause (if (home-mako-if-summary-regex? section)
> + "summary~"
> + "summary")
> + home-mako-if-summary)
> + (string-clause (if (home-mako-if-body-regex? section)
> + "body~"
> + "body")
> + home-mako-if-body)
> + (symbol-clause "urgency" home-mako-if-urgency)
> + (string-clause "category" home-mako-if-category)
> + (string-clause "desktop-entry" home-mako-if-desktop-entry)
> + (boolean-clause "actionable" home-mako-if-actionable?)
> + (boolean-clause "expiring" home-mako-if-expiring?)
> + (string-clause "mode" home-mako-if-mode)
> + (boolean-clause "grouped" home-mako-if-grouped?)
> + (number-clause "group-index" home-mako-if-group-index)
> + (boolean-clause "hidden" home-mako-if-hidden?)
> + (string-clause "output" home-mako-if-output)
> + (symbol-clause "anchor" home-mako-if-anchor)))
> +
> +(define (home-mako-configuration-header section)
> + (match (home-mako-configuration-header-attributes section)
> + (() '())
> + ((attributes ...)
> + (append (list "\n[ ") attributes (list "]\n")))))
> +
> +(define (home-mako-configuration-body section)
> + (define (string-clause name field)
> + (let ((value (field section)))
> + (if value
> + (list name "=" (field section) "\n")
> + '())))
> +
> + (define (boolean-clause name field)
> + (list name "=" (if (field section) "1" "0") "\n"))
> +
> + (define (number-clause name field)
> + (if (field section)
> + (string-clause name (compose number->string field))
> + '()))
> +
> + (define (symbol-clause name field)
> + (if (field section)
> + (string-clause name (compose symbol->string field))
> + '()))
> +
> + (define (colour-clause name field)
> + (string-clause name (compose (cute string-append "#" <>)
> + field)))
> +
> + (define (directional-clause name field)
> + (if (field section)
> + (string-clause name (compose (cute string-join <> ",")
> + (cute map number->string <>)
> + field))
> + '()))
> +
> + (define (event-clause name field)
> + (append (list name "=")
> + (match (field section)
> + ('default (list "invoke-default-action"))
> + ('dismiss (list "dismiss"))
> + ('dismiss-all (list "dismiss-all"))
> + ('dismiss-group (list "dismiss-group"))
> + ((args ...)
> + (append (list "exec")
> + (append-map (cute list " \"" <> "\"")
> + args)))
> + (#f (list "none")))
> + (list "\n")))
> +
> + (append (event-clause "on-button-left" home-mako-on-button-left)
> + (event-clause "on-button-middle" home-mako-on-button-middle)
> + (event-clause "on-button-right" home-mako-on-button-right)
> + (event-clause "on-touch" home-mako-on-touch)
> + (event-clause "on-notify" home-mako-on-notify)
> + (list "font=" (home-mako-font section) " "
> + (number->string (home-mako-font-size section)) "\n")
> + (colour-clause "background-color" home-mako-background-color)
> + (colour-clause "text-color" home-mako-text-color)
> + (number-clause "width" home-mako-width)
> + (number-clause "height" home-mako-height)
> + (directional-clause "outer-margin" home-mako-outer-margin)
> + (directional-clause "margin" home-mako-margin)
> + (directional-clause "padding" home-mako-padding)
> + (number-clause "border-size" home-mako-border-size)
> + (colour-clause "border-color" home-mako-border-color)
> + (number-clause "border-radius" home-mako-border-radius)
> + (list "progress-color="
> + (symbol->string (home-mako-progress-style section))
> + " #" (home-mako-progress-color section) "\n")
> + (boolean-clause "icons" home-mako-icons?)
> + (number-clause "max-icon-size" home-mako-max-icon-size)
> + (string-clause "icon-path"
> + (compose (cute string-join <> ":")
> + home-mako-icon-path))
> + (symbol-clause "icon-location" home-mako-icon-location)
> + (boolean-clause "markup" home-mako-markup?)
> + (boolean-clause "actions" home-mako-actions?)
> + (boolean-clause "history" home-mako-history?)
> + (boolean-clause "invisible" home-mako-invisible?)
> + (string-clause "format" home-mako-format)
> + (symbol-clause "text-alignment" home-mako-text-alignment)
> + (number-clause "default-timeout" home-mako-default-timeout)
> + (boolean-clause "ignore-timeout" home-mako-ignore-timeout?)
> + (boolean-clause "ignore-timeout" home-mako-ignore-timeout?)
> + (if (home-mako-group-by section)
> + (string-clause "group-by"
> + (compose (cute string-join <> ",")
> + home-mako-group-by))
> + '())
> + (number-clause "max-visible" home-mako-max-visible)
> + (string-clause "output" home-mako-output)
> + (symbol-clause "layer" home-mako-layer)
> + (symbol-clause "anchor" home-mako-anchor)))
> +
> +(define (home-mako-configuration-section section)
> + (append (home-mako-configuration-header section)
> + (home-mako-configuration-body section)))
> +
> +(define %home-mako-default-section (home-mako-section))
> +
> +(define %home-mako-default-grouped-section
> + (home-mako-section
> + (if-grouped? #t)
> + (format "(%g) <b>%s</b>\\n%b")))
> +
> +(define-record-type* <home-mako-configuration>
> + home-mako-configuration make-home-mako-configuration
> + home-mako-configuration?
> +
> + (mako home-mako-configuration-mako ;file-like
> + (default mako))
> + (sections home-mako-configuration-sections ;list of <home-mako-section>
> + (default (list %home-mako-default-section
> + %home-mako-default-grouped-section)))
> +
> + (max-history home-mako-configuration-max-history ;integer
> + (default 5))
> + (sort home-mako-configuration-sort ;'time | 'priority
> + (default 'time))
> + (sort-order home-mako-configuration-sort-order ;'ascending | 'descending
> + (default 'descending)))
> +
> +(define (home-mako-configuration-file config)
> + (apply mixed-text-file "mako-config"
> + (append (list "max-history="
> + (number->string
> + (home-mako-configuration-max-history config))
> + "\n"
> + "sort="
> + (match (home-mako-configuration-sort-order config)
> + ('ascending "+")
> + ('descending "-"))
> + (symbol->string (home-mako-configuration-sort config))
> + "\n")
> + (append-map home-mako-configuration-section
> + (home-mako-configuration-sections config)))))
> +
> +(define (home-mako-xdg-configuration-files config)
> + `(("mako/config" ,(home-mako-configuration-file config))))
> +
> +(define home-mako-service-type
> + (service-type
> + (name 'home-mako)
> + (extensions
> + (list (service-extension home-xdg-configuration-files-service-type
> + home-mako-xdg-configuration-files)))
> + (default-value (home-mako-configuration))
> + (description
> + "Install and configure the @code{mako} notification daemon.")))
In the coming days, I won't have time to try and check all the options
provided here, sorry, maybe someone else would jump in and review this
service in the meantime.
--
Best regards,
Andrew Tropin
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* [bug#58585] [PATCH 2/2] gnu: home: Add home-mako-service-type.
2022-11-10 13:16 ` Andrew Tropin
@ 2022-11-10 15:36 ` ( via Guix-patches via
0 siblings, 0 replies; 6+ messages in thread
From: ( via Guix-patches via @ 2022-11-10 15:36 UTC (permalink / raw)
To: andrew, 58585; +Cc: Nicolas Graves
Heya,
On Thu Nov 10, 2022 at 1:16 PM GMT, Andrew Tropin wrote:
> It's not a perfect solution, but good enough.
Actually, I recently realised there's a better way: modify HOME-DBUS-SERVICE-TYPE
to support D-Bus services, like the system DBUS-SERVICE-TYPE does. I'll try to do
that at some point in the future.
-- (
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2022-11-10 15:38 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-10-17 16:28 [bug#58585] [PATCH 0/2] gnu: home: Add home-mako-service-type ( via Guix-patches via
2022-10-17 16:47 ` [bug#58585] [PATCH 1/2] gnu: mako: Patch makoctl to refer directly to binaries ( via Guix-patches via
2022-10-17 16:47 ` [bug#58585] [PATCH 2/2] gnu: home: Add home-mako-service-type ( via Guix-patches via
2022-11-10 13:16 ` Andrew Tropin
2022-11-10 15:36 ` ( via Guix-patches via
2022-11-10 12:59 ` [bug#58585] [PATCH 1/2] gnu: mako: Patch makoctl to refer directly to binaries Andrew Tropin
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).