From 88eecddab5a0ad213986927e748d141c6b940b94 Mon Sep 17 00:00:00 2001 From: Pacman99 Date: Wed, 13 Jan 2021 23:20:00 -0800 Subject: [PATCH 1/3] users: home-manager only configurations for non-root users or non-nixos systems --- flake.nix | 23 ++++++++++++++++++----- lib/default.nix | 9 +++++++++ 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/flake.nix b/flake.nix index 9ff8496..a5bdcb5 100644 --- a/flake.nix +++ b/flake.nix @@ -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 = [ @@ -52,6 +53,11 @@ inherit (pkgs) lib; }); + homeConfigurations = + builtins.mapAttrs + (_: config: config.config.home-manager.users) + self.nixosConfigurations; + overlay = import ./pkgs; lib = import ./lib { @@ -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; diff --git a/lib/default.nix b/lib/default.nix index 77f89d6..f2f6a2b 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -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; From bbcf4123b2d7dd4ceb80c4f5b8c1d62202cfd1ef Mon Sep 17 00:00:00 2001 From: Pacman99 Date: Sat, 16 Jan 2021 10:28:20 -0800 Subject: [PATCH 2/3] flk script: add home-manager only configuration support --- shell/default.nix | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/shell/default.nix b/shell/default.nix index 31e01c2..ba8f7e3 100644 --- a/shell/default.nix +++ b/shell/default.nix @@ -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) @@ -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 From b1734b4e53b866b0ea212ae5fb1dc18753141254 Mon Sep 17 00:00:00 2001 From: Pacman99 Date: Sat, 16 Jan 2021 11:24:58 -0800 Subject: [PATCH 3/3] doc: Document home-manager integration and home-manager only configurations --- README.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/README.md b/README.md index fbb0acd..46e74a6 100644 --- a/README.md +++ b/README.md @@ -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)