home: services: Add home-gtk[234]-service-type.

* modules/rosenthal/home/services/gtk.scm
(home-gtk2-xdg-configuration-files)
(home-gtk3-xdg-configuration-files
(home-gtk4-xdg-configuration-files): New procedures.
(home-gtk2-environment-variables)
(home-gtk2-service-type)
(home-gtk3-service-type)
(home-gtk4-service-type): New variables.
* modules/rosenthal/services/desktop.scm
(home-theme-gtk2, home-theme-gtk3): New procedures.
(%home-theme-xdg-config): Delete procedure.
(home-theme-service-type) [extensions]:
Replace home-xdg-configuration-files-service-type to these new services.
This commit is contained in:
Hilton Chain 2026-04-10 12:46:52 +08:00
parent 3bc7d1cc35
commit d74dd005cf
No known key found for this signature in database
GPG Key ID: ACC66D09CA528292
2 changed files with 102 additions and 12 deletions

View File

@ -0,0 +1,78 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Copyright © 2026 Hilton Chain <hako@ultrarare.space>
(define-module (rosenthal home services gtk)
;; Guilt builtins
#:use-module (srfi srfi-1)
;; Utilities
#:use-module (guix gexp)
#:use-module (guix records)
#:use-module (rosenthal utils file)
;; Guix Home - services
#:use-module (gnu home services)
#:export (home-gtk2-service-type
home-gtk3-service-type
home-gtk4-service-type))
(define home-gtk2-environment-variables
;; https://wiki.archlinux.org/title/XDG_Base_Directory
'(("GTK2_RC_FILES" . "$XDG_CONFIG_HOME/gtk-2.0/gtkrc")))
(define (home-gtk2-xdg-configuration-files config)
`(("gtk-2.0/gtkrc"
,(computed-file "gtkrc"
#~(begin
(use-modules (ice-9 match))
(call-with-output-file #$output
(lambda (port)
(for-each (match-lambda
((key . val)
(format port "~a = ~a~%" key val)))
'#$config))))
#:options '(#:substitutable? #f)))))
(define (home-gtk3-xdg-configuration-files config)
`(("gtk-3.0/settings.ini"
,(ini-file "settings.ini" #~'(("Settings" #$@config))))))
(define (home-gtk4-xdg-configuration-files config)
`(("gtk-4.0/settings.ini"
,(ini-file "settings.ini" #~'(("Settings" #$@config))))))
(define home-gtk2-service-type
(service-type
(name 'home-gtk2)
(extensions
(list (service-extension home-environment-variables-service-type
(const home-gtk2-environment-variables))
(service-extension home-xdg-configuration-files-service-type
home-gtk2-xdg-configuration-files)))
(compose concatenate)
(extend
(lambda (config extension)
(delete-duplicates
;; Allow overriding extensions via configuration.
(append config extension)
equal?)))
(description "Set up GTK2 settings in @file{~/.config/gtk-2.0/gtkrc}")
(default-value '())))
(define home-gtk3-service-type
(service-type
(inherit home-gtk2-service-type)
(name 'home-gtk3)
(extensions
(list (service-extension home-xdg-configuration-files-service-type
home-gtk3-xdg-configuration-files)))
(description
"Set up GTK3 settings in @file{~/.config/gtk-3.0/settings.ini}")))
(define home-gtk4-service-type
(service-type
(inherit home-gtk2-service-type)
(name 'home-gtk4)
(extensions
(list (service-extension home-xdg-configuration-files-service-type
home-gtk4-xdg-configuration-files)))
(description
"Set up GTK4 settings in @file{~/.config/gtk-4.0/settings.ini}")))

View File

@ -32,6 +32,7 @@
#:use-module (gnu home services desktop)
#:use-module (gnu home services shepherd)
#:use-module (gnu home services sound)
#:use-module (rosenthal home services gtk)
;; Guix packages
#:use-module (gnu packages fcitx5)
#:use-module (gnu packages fonts)
@ -506,18 +507,25 @@ compositor.")))
#~'(("icon theme"
("Inherits" . #$icon-theme))))))))
(define %home-theme-xdg-config
(define home-theme-gtk2
(match-record-lambda <home-theme-configuration>
(icon-theme font cursor-theme cursor-size key-theme)
(let ((config
#~'(("Settings"
("gtk-theme-name" . "Adwaita")
("gtk-icon-theme-name" . #$icon-theme)
("gtk-font-name" . #$font)
("gtk-cursor-theme-name" . #$cursor-theme)
("gtk-cursor-theme-size" . #$cursor-size)
("gtk-key-theme-name" . #$key-theme)))))
`(("gtk-3.0/settings.ini" ,(ini-file "settings.ini" config))))))
`(("gtk-theme-name" . ,(format #f "~s" "Adwaita"))
("gtk-icon-theme-name" . ,(format #f "~s" icon-theme))
("gtk-font-name" . ,(format #f "~s" font))
("gtk-cursor-theme-name" . ,(format #f "~s" cursor-theme))
("gtk-cursor-theme-size" . ,cursor-size)
("gtk-key-theme-name" . ,(format #f "~s" key-theme)))))
(define home-theme-gtk3
(match-record-lambda <home-theme-configuration>
(icon-theme font cursor-theme cursor-size key-theme)
`(("gtk-theme-name" . "Adwaita")
("gtk-icon-theme-name" . ,icon-theme)
("gtk-font-name" . ,font)
("gtk-cursor-theme-name" . ,cursor-theme)
("gtk-cursor-theme-size" . ,cursor-size)
("gtk-key-theme-name" . ,key-theme))))
(define home-theme-service-type
(service-type
@ -529,8 +537,12 @@ compositor.")))
%home-theme-profile)
(service-extension home-files-service-type
%home-theme-files)
(service-extension home-xdg-configuration-files-service-type
%home-theme-xdg-config)))
(service-extension home-gtk2-service-type
home-theme-gtk2)
(service-extension home-gtk3-service-type
home-theme-gtk3)
(service-extension home-gtk4-service-type
home-theme-gtk3)))
(default-value (home-theme-configuration))
(description "Set up desktop themes.")))