diff --git a/modules/rosenthal/home/services/gtk.scm b/modules/rosenthal/home/services/gtk.scm new file mode 100644 index 0000000..56f307f --- /dev/null +++ b/modules/rosenthal/home/services/gtk.scm @@ -0,0 +1,78 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2026 Hilton Chain + +(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}"))) diff --git a/modules/rosenthal/services/desktop.scm b/modules/rosenthal/services/desktop.scm index 5614aee..ce242f3 100644 --- a/modules/rosenthal/services/desktop.scm +++ b/modules/rosenthal/services/desktop.scm @@ -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 (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 + (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.")))