I want to share how I’m installing home-manager from my NixOS configuration.nix
. I think my solution is a similar to home-manager-template, but focused on NixOS users.
The installation is done from the following function, for more details I wrote a blog post about it (https://www.lafuente.me/posts/installing-home-manager/):
let
user = "john";
userHome = "/home/${user}";
hostName = "laptop";
home-manager = { home-manager-path, config-path }:
assert builtins.typeOf home-manager-path == "string";
assert builtins.typeOf config-path == "string";
(
pkgs.callPackage
(/. + home-manager-path + "/home-manager") { path = "${home-manager-path}"; }
).overrideAttrs (old: {
nativeBuildInputs = [ pkgs.makeWrapper ];
buildCommand =
let
home-mananger-bootstrap = pkgs.writeTextFile {
name = "home-manager-bootstrap.nix";
text = ''
{ config, pkgs, ... }:
{
# Home Manager needs a bit of information about you and the
# paths it should manage.
home.username = "${user}";
home.homeDirectory = "${userHome}";
home.sessionVariables.HOSTNAME = "${hostName}";
imports = [ ${config-path} ];
}
'';
}; in
''
${old.buildCommand}
wrapProgram $out/bin/home-manager --set HOME_MANAGER_CONFIG "${home-mananger-bootstrap}"
'';
});
in
{
users.users.${user} = {
home = userHome;
packages = [
(home-manager {
home-manager-path = "${userHome}/home-manager";
config-path = builtins.toString ../home-manager + "/${hostName}.nix";
})
];
};
}
Maybe someone else will find it useful. Questions and feedback are welcome