Customizing gnome using guix-home

Hi everyone!

I’m truly struggling to make my guix GUI look more cool/modern. I like the nordic theme (found through toys.whereis.social) for example, so I installed it in my guix home as package, and I also used 3 ways to set it up:

  • gnome-tweaks: I can only use nordic in one of the settings not all of them. Even when I change that setting nothing happens

  • I installed (list glib “bin”) which contains gsettings and run the normal commands you would use to set up the theme and nothing changed

  • I used a service I found posted on r/guix to try to setup everything from guix home with dconf

None of the 3 approaches work. I have evaluated moving to sway where @daviwil has video tutorials, or even going to Hyprland. But I would like to keep things simple and just customize my gnome from my guile files.

Any tutorials, ideas, tips on this?

1 Like

What service did you use?

(define (dconf-load-gexp settings)
  #~(begin
      (use-modules (ice-9 popen))
      
      (define (alist-value-print value)
        (define (list-vals lv) (string-join (map alist-value-print lv) ", "))
        ((@ (ice-9 match) match) value
          [#t "true"]
          [#f "false"]
          [(? string? str) (format #f "'~a'" str)]
          [(entries ...)
           (format #f "(~a)" (list-vals entries))]
          [#(entries ...)
           (format #f "[~a]" (list-vals entries))]
          [v (format #f "~a" v)]))
     
      (define (alist->ini al)
        (string-concatenate
         (map
          ((@ (ice-9 match) match-lambda)
            [(top-level-path entries ...)
             (format #f "[~a]~%~a~%" top-level-path
	             (string-concatenate
		      (map
		       ((@ (ice-9 match) match-lambda)
		         [(var value)
		          (format #f "~a=~a~%" var (alist-value-print value))])
		       entries)))]) al)))
      
      (let ([dc-pipe (open-pipe* OPEN_WRITE #$(file-append dconf "/bin/dconf") "load" "/")])
	display (alist->ini '#$settings) dc-pipe)))

(define home-dconf-load-service-type
  (service-type (name 'dconf-load-service)
		(extensions
		 (list
		  (service-extension
		   home-activation-service-type
		   dconf-load-gexp)))
		(default-value '())
		(description "Loads an Alist of INI Dconf entries on activation")))

(service
    home-dconf-load-service-type
    '(("org/gnome/desktop/interface"
       ("gtk-theme" "Nordic")
       ("icon-theme" "Papirus")
       ("cursor-theme" "default") ; or whatever you prefer
       ("color-scheme" "prefer-dark"))

      ("org/gnome/desktop/wm/preferences"
       ;; This is for window decorations (title bars)
       ("theme" "Nordic"))

      ;; This section is for the GNOME Shell theme itself.
      ;; It requires the "User Themes" extension to be enabled.
      ("org/gnome/shell/extensions/user-theme"
       ("name" "Nordic"))))

Plus the due module imports. (taken from a service I saw in r/guix)

So I managed to make the theme work with:

home.scm

```

(home-environment
 (packages

  (list (list glib “bin”)
        gnome-tweaks
        gnome-shell-extensions
        nordic-theme
  )
...
 (services
  (list
   (simple-service 'gtk-theme-env
                   home-shell-profile-service-type
                   (list (plain-file "gtk-theme-profile"
                                     "export GTK_THEME=Nordic")))
))

The available nordic-theme seemed a bit outdated (not really sure about this) so I customized its definition

(define-module (packages nordic-theme)
  #:use-module (guix build-system copy)
  #:use-module (guix git-download)
  #:use-module (guix packages)
  #:use-module (guix utils)
  #:use-module ((guix licenses) #:prefix license:))

(define-public nordic-theme
  (let ((commit "b50d932713915cb29b25fa54a66286a7170861e6")
        (revision "0"))
  (package
   (name "nordic-theme")
   (version (git-version "2.2.0" revision commit))
   (source
     (origin
      (method git-fetch)
      (uri (git-reference
             (url "https://github.com/EliverLara/Nordic")
             (commit commit)))
     (sha256
       (base32
         "0l0i2jc0la0q9qr9b78bycjyxcvpj2pfbafvb20hpp5v4j2zdy1k"))
     (file-name (git-file-name name version))))
   (build-system copy-build-system)
   (arguments
    `(#:install-plan
      `(("." "share/themes/Nordic"
         #:exclude ("README.md" "LICENSE" "Art/" "package.json"
                    "package-lock.json" "Gulpfile.js" ".github")))))
   (home-page "https://github.com/EliverLara/Nordic")
   (synopsis "Dark Gtk3.20+ theme using the Nord color palette")
   (description "Nordic is a Gtk3.20+ theme created using the Nord color
palette.")
   (license license:gpl3))))

1 Like