gtk.cursorTheme.name gives errors when rebuilt as part of system

I have noticed a bizarre quirk of home manager. Namely, I have this in my home.nix file:

{ config, pkgs, ... }:

{
  # Home Manager needs a bit of information about you and the paths it should
  # manage.
  home.username = "fusion809";
  home.homeDirectory = "/home/fusion809";

  # This value determines the Home Manager release that your configuration is
  # compatible with. This helps avoid breakage when a new Home Manager release
  # introduces backwards incompatible changes.
  #
  # You should not change this value, even if you update Home Manager. If you do
  # want to update the value, then make sure to first check the Home Manager
  # release notes.
  home.stateVersion = "24.11"; # Please read the comment before changing.

  # The home.packages option allows you to install Nix packages into your
  # environment.
  home.packages = [
    # # Adds the 'hello' command to your environment. It prints a friendly
    # # "Hello, world!" when run.
    # pkgs.hello

    # # It is sometimes useful to fine-tune packages, for example, by applying
    # # overrides. You can do that directly here, just don't forget the
    # # parentheses. Maybe you want to install Nerd Fonts with a limited number of
    # # fonts?
    # (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; })

    # # You can also create simple shell scripts directly inside your
    # # configuration. For example, this adds a command 'my-hello' to your
    # # environment:
    # (pkgs.writeShellScriptBin "my-hello" ''
    #   echo "Hello, ${config.home.username}!"
    # '')
  ];

  # Home Manager is pretty good at managing dotfiles. The primary way to manage
  # plain files is through 'home.file'.
  home.file = {
    # # Building this configuration will create a copy of 'dotfiles/screenrc' in
    # # the Nix store. Activating the configuration will then make '~/.screenrc' a
    # # symlink to the Nix store copy.
    # ".screenrc".source = dotfiles/screenrc;

    # # You can also set the file content immediately.
    # ".gradle/gradle.properties".text = ''
    #   org.gradle.console=verbose
    #   org.gradle.daemon.idletimeout=3600000
    # '';
  };

  # Home Manager can also manage your environment variables through
  # 'home.sessionVariables'. These will be explicitly sourced when using a
  # shell provided by Home Manager. If you don't want to manage your shell
  # through Home Manager then you have to manually source 'hm-session-vars.sh'
  # located at either
  #
  #  ~/.nix-profile/etc/profile.d/hm-session-vars.sh
  #
  # or
  #
  #  ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
  #
  # or
  #
  #  /etc/profiles/per-user/fusion809/etc/profile.d/hm-session-vars.sh
  #
  home.sessionVariables = {
    EDITOR = "vim";
  };

  # Let Home Manager install and manage itself.
  programs.home-manager.enable = true;
  programs.git = {
    enable = true;
    userName = "fusion809";
    userEmail = "brentonhorne77@gmail.com";
  };
  programs.bash = {
    enable = true;
    bashrcExtra = "
function sbash {
	source $HOME/.bashrc
}

function vcf {
	sudo vim /etc/nixos/configuration.nix
}

function nixcg {
	sudo nix-collect-garbage -d
}

function nixcu {
	sudo nix-channel --update
}

function nixrsu {
	sudo nixos-rebuild switch --upgrade
}

function update {
	nixcu
	nixrsu
	nixcg
}

function rebuild {
	sudo nixos-rebuild switch
}

alias nixrb=rebuild
    ";
  };
  programs.zsh = {
    enable = true;
    initExtra = "
source $HOME/NixOS-configs/hnixos.zsh-theme
source $HOME/.bashrc

function szsh {
	source $HOME/.zshrc
}

function clipf {
	xclip -sel clip < $1
}

function rainbowfastfetch {
	hyfetch -p rainbow -b fastfetch --args='--localip-show-ipv4 false'
}

export NIXPKGS_ALLOW_INSECURE=1

function sclipf {
	sudo xclip -sel clip < $1
}

function git-branch {
  if ! [[ -n \"$1\" ]]; then
        git rev-parse --abbrev-ref HEAD
  else
        git -C \"$1\" rev-parse --abbrev-ref HEAD
  fi
}

function push {
	git add --all
	git commit -m \"$@\"
	git push origin $(git-branch)
}

function cdnc {
	cd $HOME/NixOS-configs/$1
}

function hmr {
        home-manager switch
}

   ";
 };
 programs.gnome-shell.theme.name = "WhiteSur-Dark-solid";
 gtk.theme.name = "WhiteSur-Dark-solid";
 gtk.iconTheme.name = "WhiteSur-Dark";
 gtk.cursorTheme.name = "WhiteSur-cursors";
}

Interestingly, when I build this config with home-manager switch, I get no errors. But when I import it into my system configuration.nix file with this start to that file:

{ config, pkgs, ... }:
{
  imports =
    [ # Include the results of the hardware scan.
      ./hardware-configuration.nix
      ./home.nix
    ];
...
}

I get this error from nixos-rebuild switch:

error:
       … while evaluating the attribute 'config'
         at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:1:12284:
       … while calling the 'seq' builtin
         at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:1:12293:
       (stack trace truncated; use '--show-trace' to show the full, detailed trace)

       error: The option `gtk.cursorTheme' does not exist. Definition values:
       - In `/home/fusion809/NixOS-configs/home.nix':
           {
             name = "WhiteSur-cursors";
           }
building Nix...

any ideas what I need to do to this fix this error?

Because you need to import home manager first and pass it as a home manager import.

See: Home Manager Manual

The imports = part of my configuration.nix is now:

  imports =
    [ # Include the results of the hardware scan.
      ./hardware-configuration.nix
      <home-manager/nixos>
      ./home.nix
    ];

Which I added based on this part of that manual:

Was this what I was meant to do? It’s not fixing the error, so I’m guessing not.

Now you need to move home.nix to home-manager like:

home-manager.users.username = {
        imports =
          [
            home.nix
          ]
 };

Where you need to substitute username with your username.

Hmm, I renamed home.nix as home-manager.nix and replaced home. in it with it home-manager. as I thought that’s what you meant (at most, I wasn’t sure whether you also meant renaming the file). And yes, I updated /etc/nixos/configuration.nix to incorporate this new home-manager.nix file. Yet I still get the error:

error: The option `gtk.cursorTheme' does not exist. Definition values:
       - In `/home/fusion809/NixOS-configs/home-manager.nix':
           {
             name = "WhiteSur-cursors";
           }

from rebuilding my system.

Before you changed anything your configuration.nix should have looked something like this:

imports =
    [ # Include the results of the hardware scan.
      ./hardware-configuration.nix
      <home-manager/nixos>
    ];

home-manager.users.username = {
        imports =
          [
            ./home.nix
          ];
 };

But you need to change the username according the one you create in your config.

Now it’s complaining about the }; at the end of this code snippet I quoted giving this error:

      error: syntax error, unexpected '}', expecting ';'
       at /home/fusion809/NixOS-configs/configuration.nix:18:3:
           17|           ]
           18|   };
             |   ^

Because I missed a semicolon at the end of the line before. I edit my post accordingly.

Now it’s giving the error:

error: undefined variable 'home'
       at /home/fusion809/NixOS-configs/configuration.nix:16:13:
           15|           [
           16|             home.nix
             |             ^
           17|           ];

Does home.nix need to be in quotes?

It probably needs to be ./home.nix

Now I am getting this error:

error: The option `home-manager.users.fusion809.programs.home' does not exist. Definition values:
       - In `/home/fusion809/NixOS-configs/home.nix':
           {
             enable = true;
           }

Is there a nice simple way to change all the settings over to suit the system configuration file? Or is this going to be a tedious matter of looking them all up in the documentation and changing them from there?

I only used home-manger in my NixOS configuration before. But if I recall correctly you should not need to change your home.nix in between stand alone and as a module. So you say that your home.nix works fine when using it with stand alone home-manager? Can you post it?

Sure, here it is. NixOS-configs/home.nix at f47cebf9ba541963916b057d5a044fd94c29c338 · fusion809/NixOS-configs · GitHub

And yes it builds fine with home-manager.

Oops, my apologies @eblechschmidt. I had done a mass replace of home-manager with home in this file and it was responsible for this error. I had previously had programs.home-manager.enable = true; but that became programs.home.enable = true; which was causing this error. It now builds fine, including as part of my system config. Thank you for your help!

1 Like

No worries. Would you maybe mark the answer above as the solution so some else that stumbles upon this finds it easier to find the solution?

I marked this one as the solution as it included the final fix I needed.