Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

users: Initial home-manager only configurations(non-nixos systems) #93

Merged
merged 3 commits into from
Jan 27, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,43 @@ They are placed in the git staging area automatically because they would be
invisible to the flake otherwise, but it is best to move what you need from
them directly into your hosts file and commit that instead.

## Home Manager Integration
The home-manager nixos module is available for each host. It is meant
to be used in the user profiles, you can find an example in the nixos user profile

The home-manager configuration for each user in each system is available in the
outputs as homeConfigurations and the activation packages in hmActivationPackages.

This allows you to just build the home-manager environment without the rest of the
system configuration. The feature is useful on systems without nixos or root access.

Lets say you want to activate the home configuration for the user `nixos` in the
host `NixOS`.

With the flk script:
```sh
# You can build it using
flk home NixOS nixos
# and activate with
./result/activate

# Or do both like this
flk home NixOS nixos switch
```

This can also be done manually:
```sh

# With hmActivationPackages, what the flk script uses
nix build ./#hmActivationPackages.NixOS.nixos

# Or with homeConfigurations,
nix build ./#homeConfigurations.NixOS.nixos.home.activationPackage
# this is hard to debug though, due to nix build's fallback to packages

# The configuration can then be activated like before
```

## Build an ISO

You can make an ISO and customize it by modifying the [niximg](./hosts/niximg.nix)
Expand Down
23 changes: 18 additions & 5 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@
inherit (builtins) attrValues;
inherit (flake-utils.lib) eachDefaultSystem flattenTreeSystem;
inherit (nixos.lib) recursiveUpdate;
inherit (self.lib) overlays nixosModules genPackages pkgImport;
inherit (self.lib) overlays nixosModules genPackages pkgImport
genHomeActivationPackages;

externOverlays = [ nur.overlay devshell.overlay ];
externModules = [
Expand All @@ -52,6 +53,11 @@
inherit (pkgs) lib;
});

homeConfigurations =
builtins.mapAttrs
(_: config: config.config.home-manager.users)
self.nixosConfigurations;

overlay = import ./pkgs;

lib = import ./lib {
Expand Down Expand Up @@ -90,10 +96,17 @@
in
pkgImport nixos overlays system;

packages = flattenTreeSystem system
(genPackages {
inherit self pkgs;
});
packages =
let
packages' = flattenTreeSystem system
(genPackages {
inherit self pkgs;
});

homeActivationPackages = genHomeActivationPackages
self.homeConfigurations;
in
recursiveUpdate packages' homeActivationPackages;
in
{
inherit packages;
Expand Down
9 changes: 9 additions & 0 deletions lib/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,15 @@ in
(recursiveUpdate cachixAttrs modulesAttrs)
profilesAttrs;

genHomeActivationPackages = hmConfigs: {
hmActivationPackages =
builtins.mapAttrs
(_: x: builtins.mapAttrs
(_: cfg: cfg.home.activationPackage)
x)
hmConfigs;
};

genPackages = { self, pkgs }:
let
inherit (self) overlay overlays;
Expand Down
7 changes: 6 additions & 1 deletion shell/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ let

flk = pkgs.writeShellScriptBin "flk" ''
if [[ -z "$1" ]]; then
echo "Usage: $(basename "$0") [ iso | up | install {host} | {host} [switch|boot|test] ]"
echo "Usage: $(basename "$0") [ iso | up | install {host} | {host} [switch|boot|test] | home {host} {user} [switch] ]"
elif [[ "$1" == "up" ]]; then
mkdir -p $DEVSHELL_ROOT/up
hostname=$(hostname)
Expand All @@ -27,6 +27,11 @@ let
nix build $DEVSHELL_ROOT#nixosConfigurations.niximg.${build}.isoImage "${"\${@:2}"}"
elif [[ "$1" == "install" ]]; then
sudo nixos-install --flake "$DEVSHELL_ROOT#$2" "${"\${@:3}"}"
elif [[ "$1" == "home" ]]; then
nix build ./#hmActivationPackages.$2.$3
if [[ "$4" == "switch" ]]; then
./result/activate && unlink result
fi
else
sudo nixos-rebuild --flake "$DEVSHELL_ROOT#$1" "${"\${@:2}"}"
fi
Expand Down