Subject: bug report: XFCE cannot change the theme because of missing dconf package to satisfy the ca.desrt.dconf service in dbus

From: Yacine Cheikhrouhou <[email-masked]>
Date: Thu, 17 Apr 2025 11:43:35 +0200

Hi all,

I started using Guix with XFCE on Xorg (with the default desktop 
configuration), and couldn't change the theme. I fixed the issue by 
installing dconf, which is needed by xfce to edit its own configuration.
I think the problem could be fixed by adding dconf as a dependency of 
the xfce package.

What I did:
Editing the ThemeName property directly in 
~/.config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml or using the 
GTK_THEME="Greybird:dark" environment variable did not work (the xml 
edit was reverted after restarting the session, and the environment 
variable was only followed by my web browser, Librewolf, and not xfce 
utilities like Thunar or xfce4-terminal).

By running xfsettingsd manually with `xfsettingsd --replace 
--no-daemon`, I got a Dbus warning about not being able to commit the 
configuration changes due to a missing `ca.desrt.dconf` .service file 
when I tried changeing the theme in the XFCE settings.

After googling hard and configuring guix home to have a user dbus 
service, I learnt about the dconf-service and fixed the issue by simply 
installing the dconf package. After removing what I added, it turns out 
the guix home dbus service was not needed, but removing dconf and 
restarting makes the theme impossible to change again.

My system is a VM installed from the iso following the manual 
installation, running on a baremetal LUKS-encrypted LVM logical volume.

My system configuration (based on the desktop example):
```
;; This is an operating system configuration template
;; for a "desktop" setup with GNOME and Xfce where the
;; root partition is encrypted with LUKS, and a swap file.

(use-modules (gnu) (gnu system nss) (guix utils))
(use-service-modules desktop sddm xorg ssh spice)
(use-modules (gnu home services desktop))
(use-package-modules certs gnome ssh password-utils emacs gnome-xyz 
librewolf libreoffice)
; sshfs -> (gnu packages linux) ???
(use-package-modules linux)

(operating-system
   (host-name "geeksos")
   (timezone "Europe/Paris")
   (locale "fr_FR.utf8")

   ;; Choose US English keyboard layout.  The "altgr-intl"
   ;; variant provides dead keys for accented characters.
   (keyboard-layout (keyboard-layout "fr" "bepo"))

   ;; Use the UEFI variant of GRUB with the EFI System
   ;; Partition mounted on /boot/efi.
   (bootloader (bootloader-configuration
                 (bootloader grub-efi-bootloader)
                 (targets '("/boot/efi"))
                 (keyboard-layout keyboard-layout)))

   ;; Specify a mapped device for the encrypted root partition.
   ;; The UUID is that returned by 'cryptsetup luksUUID'.
   ;(mapped-devices
   ; (list (mapped-device
   ;        (source (uuid "12345678-1234-1234-1234-123456789abc"))
   ;        (target "my-root")
   ;        (type luks-device-mapping))))

   (file-systems (append
                  (list (file-system
                          (device (file-system-label "root"))
                          (mount-point "/")
                          (type "btrfs"))
                        (file-system
                          (device (uuid "04AB-4473" 'fat))
                          (mount-point "/boot/efi")
                          (type "vfat")))
                  %base-file-systems))

   ;; Specify a swap file for the system, which resides on the
   ;; root file system.
   (swap-devices (list (swap-space
                        (target "/swapfile"))))

   ;; Create user `bob' with `alice' as its initial password.
   (users (cons (user-account
                 (name "yacine")
                 ;(comment "Alice's brother")
                 ;(password #f)
                 (group "yacine")
                 (supplementary-groups '("wheel" "netdev"
                                         "audio" "video")))
                %base-user-accounts))

   ;; Add the `students' group
   (groups (cons* (user-group
                   (name "yacine"))
                  %base-groups))

   ;; This is where we specify system-wide packages.
   (packages (append (list
                      ;; for HTTPS access
                      ;nss-certs
                      ;; for user mounts
              gvfs

              ; does not work
              greybird-gtk-theme
              ; core
              openssh
              emacs
              librewolf
              libreoffice

              ; user utils
              sshfs
              password-store)
                     %base-packages))

   ;; Add GNOME and Xfce---we can choose at the log-in screen
   ;; by clicking the gear.  Use the "desktop" services, which
   ;; include the X11 log-in service, networking with
   ;; NetworkManager, and more.
   (services
     (append
       (list
     ;(service home-dbus-service-type                    ; only works in 
guix home configurations
     ;     (home-dbus-configuration))
     (service spice-vdagent-service-type
          (spice-vdagent-configuration))
     ; TODO: add authorized keys
     (service openssh-service-type
          (openssh-configuration
            (x11-forwarding? #t)
            (permit-root-login 'prohibit-password)
            (gateway-ports? #t))))
       (if (target-x86-64?)
                 (append (list ;(service gnome-desktop-service-type)
                               (service xfce-desktop-service-type)
                               (set-xorg-configuration
                                (xorg-configuration
                                 (keyboard-layout keyboard-layout))))
                         %desktop-services)

                 ;; FIXME: Since GDM depends on Rust (gdm -> gnome-shell 
-> gjs
                 ;; -> mozjs -> rust) and Rust is currently unavailable on
                 ;; non-x86_64 platforms, we use SDDM and Mate here 
instead of
                 ;; GNOME and GDM.
                 (append (list ;(service mate-desktop-service-type)
                               (service xfce-desktop-service-type)
                               (set-xorg-configuration
                                (xorg-configuration
                                 (keyboard-layout keyboard-layout))
                                sddm-service-type))
                         %desktop-services))))

   ;; Allow resolution of '.local' host names with mDNS.
   (name-service-switch %mdns-host-lookup-nss))
```

My home configuration:
```
(use-modules (gnu)
              (gnu home)
              (gnu home services shells))
(use-modules (gnu home services desktop))
(use-modules (gnu home services dotfiles))

(home-environment
;  (packages
;    (specifications->packages
;      (list
;    "xfce4-settings")))
   (services
     (list
       (service home-dotfiles-service-type
            (home-dotfiles-configuration
          (layout 'stow)
          (packages '("ssh"))
          (directories
            '("."))))
                ; excluding .git does not work, and keeping it breaks 
project management in doom emacs
          ; hack solution: using stow to whitelist directories to deploy
          ;(excluded '("./\\.git" "config\\.scm"))))
;      (service home-dbus-service-type
;           (home-dbus-configuration))
       (service home-bash-service-type
            (home-bash-configuration
          (environment-variables '(("PS1" . "\\[\\e[1;32m\\]\\u 
\\[\\e[1;34m\\]\\w \\[\\e[0m\\]λ ")
                                                     ("EDITOR" . 
"emacsclient"))))))))
          ;(aliases '(("gs" . "git status"))))))))
  ;(packages (specifications->packages
  ;           (list "git"
  ;                 "emacs-no-x-toolkit")))

  ;(services (list (service home-bash-service-type
  ;                         (home-bash-configuration
  ;                          (environment-variables '(("PS1" . 
"\\[\\e[1;32m\\]\\u \\[\\e[1;34m\\]\\w \\[\\e[0m\\]λ ")
  ;                                                   ("EDITOR" . 
"emacsclient")))
  ;                          (aliases '(("gs" . "git status"))))))))
```

Thank you