GTK settings suddenly not applying

Hey, I’ve been using NixOS for about 7 months now, and halfway through I switched my config to Flakes+Home Manager, where, in the latter I set up my GTK theme and icon theme. All was working until yesterday, when I was moving the configuration.nix options around different files for better organization, suddenly, nothing recognizes the home manager options for the GTK themes and I don’t know what to do anymore.
I also (in the midst of a panic attack given how pipewire had been re-enabled and causing my waybar to consume 100% of RAM) had enabled home-manager in the home directory (currently, my flake.nix, configuration.nix and home.nix are all in the /etc/nixos folder), but uninstalled it and nothing seemed to happen.
For more info: I’m using NixOS 24.11, with the Hyprland flake, all packages in unstable.
Here’s my home.nix:

{config, pkgs, default, ...}:
{
  home.username = "hytx";
  home.homeDirectory = "/home/hytx";
  home.sessionVariables.GTK_THEME = "Catppuccin-Macchiato-Compact-Pink-Dark";
  gtk = {
    enable = true;
    theme = {
      name = "Catppuccin-Macchiato-Compact-Pink-Dark";
      package = pkgs.catppuccin-gtk.override {
        accents = [ "pink" ];
        size = "compact";
        tweaks = [ "rimless" "black" ];
        variant = "macchiato";
      };
    };
    iconTheme = {
      name = "colloid-icon-theme";
      package = pkgs.colloid-icon-theme;
    };
    gtk3.extraConfig = {
      Settings = ''
        gtk-application-prefer-dark-theme=1
      '';
    };

    gtk4.extraConfig = {
      Settings = ''
        gtk-application-prefer-dark-theme=1
      '';
    };
  };
  #dconf.settings = {
  #  "org/gtk/settings/file-chooser" = {
  #    sort-directories-first = true;
  #  };

  #  # GTK4 Setup
  #  "org/gnome/desktop/interface" = {
  #    gtk-theme = "Catppuccin-Macchiato-Compact-Pink-Dark";
  #    color-scheme = "prefer-dark";
  #  };
  #};
.
.
.

Below this is zsh config and such, which aren’t relevant, as well as dconf, which unfortunately did nothing.
What’s weird as well is that, using nwg-look, it resets every time I reboot the machine, but it applies a theme to certain applications (for example, nm-applet doesn’t recognize the theme but thunar does), yet not the one that is installed, but a previous one I had (Colloid Dracula Theme).
Also don’t know if it’s important or not, but looking at the ~/.config/gtk-4.0/gtk.css it contains @import url("file:///nix/store/j74wqf4c0h50rx0598g1scs3avi0qva5-catppuccin-gtk-1.0.3/share/themes/Catppuccin-Macchiato-Compact-Pink-Dark/gtk-4.0/gtk.css");, but when I try to look into that directory it’s empty:


Sorry for the long post, it’s just driving me crazy how, for exaple, home.pointerCursor is working flawlessly without any hiccup and anything gtk is not. Thank you for your patience and for any help you might give me :')

Possibly related to Mouse Cursors broke after Recent NixOS Rebuild - #2 by eljamm

Unfortunately not, I’m using home.pointerCursor options:

home.pointerCursor = {
    gtk.enable = true;
    x11.enable = true;
    name = "Bibata-Modern-Ice";
    package = default.bibata-cursors;
    size = 24;
  };

They work as expected, GTK doesn’t, for some reason :confused: :

Well, the issue was with Catppuccin icon theme so perhaps the same applies to the GTK one.

catppuccin-gtk broke after colloid was updated. A fix came here catppuccin-gtk: use vendored colloid-gtk-theme by Aleksanaa · Pull Request #321293 · NixOS/nixpkgs · GitHub.

2 Likes

I should also note that this will have to change when you update to v1.0.3, its now lower case. (I can’t remember if we removed the -dark or anything since that was just insanity)

Okok, I will try this later as I’m afk right now, but would this colloid update also explain how my icon theme disappeared? (somehow I understand Nix but anything related to customizing things like these go straight over my head, sorry for bothering)

Not too sure if that will fix your icons, but ctp gtk will certainly be fixed.

1 Like

Yup, updated recently and that fixed the broken theme for me. Here is an overlay for those that want to do the same until the PR is merged in nixos-unstable:

  nixpkgs.overlays = [
    (final: prev: {
      catppuccin-gtk = prev.catppuccin-gtk.overrideAttrs (old: {
        src = prev.fetchFromGitHub {
          owner = "catppuccin";
          repo = "gtk";
          rev = "v${old.version}";
          fetchSubmodules = true;
          hash = "sha256-q5/VcFsm3vNEw55zq/vcM11eo456SYE5TQA3g2VQjGc=";
        };
        postUnpack = "";
      });
    })
  ];

Edit: Besides lower case, removing Dark and flipping the size and variant in the name, I also had to add +default:

   gtk = {
     enable = true;
     theme = {
-      name = "Catppuccin-Macchiato-Standard-Blue-Dark";
+      name = "catppuccin-macchiato-blue-standard+default";
      package = pkgs.catppuccin-gtk.override {
        accents = [ "blue" ];
        size = "standard";
        variant = "macchiato";
      };
    };
    ...

Does this line need to be changed in cattppuccin-nix?

Edit 2: Opened a PR #239

1 Like

Unfortunately, seems like I can’t get catppuccin back for now :')
I did get the overlay in home-manager and the names were right (according to the github specs), yet the theme wasn’t applying, even after a nix flake update, which did change the inputs for home-manager and when I rebuilt the system the catppuccin package did change, yet to no avail…
In another note, it was on me for the icons being broken, somehow the name changed from colloid-icon-theme to just Colloid (yes I did take a guess) and yeah, I just got the colloid theme working for now until the catppuccin package is updated in the unstable version.
Thank you all for your help though! Please let me know if I should mark this last post as the solution or not, even though it did not work for me, it might for someone else (?)

1 Like

TL;DR

I think it’s because the output path depends on the tweaks you have. I didn’t have any tweaks, so it appended default to the theme name. Because you have tweaks = [ "rimless" "black" ];, you need to append +rimless,black to the theme.name:

gtk.theme.name = "catppuccin-macchiato-pink-compact+rimless,black";

Debugging Steps

I tried to build your theme with the theme.name = "catppuccin-macchiato-pink-compact+default" and this is what the derivation I get:

$ cat /nix/store/bhxh9h7f384q5p68vnpby04ljwgpr4lf-hm_gtk4.0gtk.css.drv
... @import url(\"file:///nix/store/yq6zfi0d2sa94a156zlc0liq4h6gymsw-catppuccin-gtk-1.0.3/share/themes/catppuccin-macchiato-pink-compact+default/gtk-4.0/gtk.css\")

When we examine it, we can see that it’s trying to import gtk-4.0/gtk.css using the catppuccin-gtk-1.0.3 store path and whatever theme.name we pass in the config. We can see the same behavior in your first post where it’s trying to import from Catppuccin-Macchiato-Compact-Pink-Dark.

The nix store directory does exist for me, though, and it has the correct theme name that you should use:

/nix/store/yq6zfi0d2sa94a156zlc0liq4h6gymsw-catppuccin-gtk-1.0.3/share/themes/catppuccin-macchiato-pink-compact+rimless,black

We correct the theme name and build again:

    theme = {
-     name = "Catppuccin-Macchiato-Compact-Pink-Dark";
+     name = "catppuccin-macchiato-pink-compact+rimless,black";
      package = pkgs.catppuccin-gtk.override {
        accents = [ "pink" ];

We get the following derivation:

cat /nix/store/ywwy88g0x3nnn1xf6bh9q4sswa3ckv0d-hm_gtk4.0gtk.css.drv
... @import url(\"file:///nix/store/yq6zfi0d2sa94a156zlc0liq4h6gymsw-catppuccin-gtk-1.0.3/share/themes/catppuccin-macchiato-pink-compact+rimless,black/gtk-4.0/gtk.css\")

We can see that it’s finally pointing to the correct file.

Can I confirm something here?

I simply installed catppuccin-gtk, and when I look at the active install folder, I see:

❯ ls /nix/store/6qlvai62fi3ww0h0qs5vmkn7aizp1lgn-catppuccin-gtk-1.0.3/share/themes/
0555 dr-xr-xr-x - root 31 Dec  1969  catppuccin-frappe-blue-standard+default
0555 dr-xr-xr-x - root 31 Dec  1969  catppuccin-frappe-blue-standard+default-hdpi
0555 dr-xr-xr-x - root 31 Dec  1969  catppuccin-frappe-blue-standard+default-xhdpi

Now is we look at each folder:

❯ ls /nix/store/6qlvai62fi3ww0h0qs5vmkn7aizp1lgn-catppuccin-gtk-1.0.3/share/themes/*/
/nix/store/6qlvai62fi3ww0h0qs5vmkn7aizp1lgn-catppuccin-gtk-1.0.3/share/themes/catppuccin-frappe-blue-standard+default-hdpi/:
0555 dr-xr-xr-x - root 31 Dec  1969  xfwm4

/nix/store/6qlvai62fi3ww0h0qs5vmkn7aizp1lgn-catppuccin-gtk-1.0.3/share/themes/catppuccin-frappe-blue-standard+default-xhdpi/:
0555 dr-xr-xr-x - root 31 Dec  1969  xfwm4

/nix/store/6qlvai62fi3ww0h0qs5vmkn7aizp1lgn-catppuccin-gtk-1.0.3/share/themes/catppuccin-frappe-blue-standard+default/:
0555 dr-xr-xr-x   - root 31 Dec  1969  cinnamon
0555 dr-xr-xr-x   - root 31 Dec  1969  gnome-shell
0555 dr-xr-xr-x   - root 31 Dec  1969  gtk-3.0
0555 dr-xr-xr-x   - root 31 Dec  1969  gtk-4.0
0444 .r--r--r-- 371 root 31 Dec  1969  index.theme
0555 dr-xr-xr-x   - root 31 Dec  1969  metacity-1
0555 dr-xr-xr-x   - root 31 Dec  1969  plank
0555 dr-xr-xr-x   - root 31 Dec  1969  xfwm4

seems like catppuccin-frappe-blue-standard+default is my only option.

Why might I not have access to the other items in the theme?

And I assume I then have to set:

theme = {
      name = "catppuccin-frappe-blue-standard+default";

Am I looking at this the right way?

I was looking to use the “macchiato” with the default “mauve” accent.

PS - setting for use in sway.

If tweaks is empty, then yes, at least until this PR reaches the appropriate releases after which you can just have theme.name="catppuccin-frappe-blue-standard".

This is all assuming you haven’t set any tweaks. If you have, then the name should be catppuccin-<flavor>-<accent>-<size>+tweak1,tweak2,... where tweaks = [ "tweak1" "tweak2" ... ]

What do you mean?

Did you choose those but got “frappe” and “blue” instead?

PS: We can get the catppuccin directory using nix repl:

$ nix repl

nix-repl> :lf .

nix-repl> outputs.nixosConfigurations.<hostname>.config.home-manager.users.<user>.gtk.theme.package.outPath
"/nix/store/i6q7g44bfq2xhkhmzgq7c9pn386na4g2-catppuccin-gtk-1.0.3"

You must build your system if you want to access this, though, so the derivation is built and the directory is created.

1 Like

Sorry, should’ve been more clear. I mean the other tweaks and accents, etc.

When I looked in the directory that was created as a result of my build… I only saw the described options above. Basically Frappe with Blue.

I wonder if this will ever be merged. I saw that the upstream repo for the GTK theme is no longer being worked on. And has been archived. Then on a rebuild the other day I noticed that the options in catoouccin nix warned me that they’re going to be deprecated in the future.

Yeah, catppuccin-gtk doesn’t give you all the variations as it will only be compiled with the options you choose (accent, flavor, tweaks, …).

The change has reached nixos-unstable, but it’s still not merged for 24.05 yet.

It’s quite understandable that upstream was archived since it’s quite a pain to theme gtk.

As for the catppuccin-nix module, even though it will be removed in the future (also understandable), it’s still possible for you to implement it yourself as the package won’t be removed from nixpkgs.

I recently migrated my chezmoi dotfiles to flakes and home manager (unstable) and now there’s a border on Firefox I can’t get rid of. Is there anything I can check to see if there’s a larger related issue with GTK and home manager? I’m not very experienced in debugging X issues.

EDIT: My issue may not be related, it looks like it was just an issue with Firefox using GTK 3 and needing some extra config.

1 Like