149 lines
4.1 KiB
Nix
149 lines
4.1 KiB
Nix
{ self, inputs, ... }:
|
|
{
|
|
flake.modules.nixos.rebuild =
|
|
{ config, pkgs, lib, ... }:
|
|
let
|
|
flakeDir = config.rebuild.flakeDir;
|
|
echoCmd = lib.getExe' pkgs.coreutils "echo";
|
|
hostnameCmd = "$(${lib.getExe pkgs.hostname} -s)";
|
|
|
|
nfs = with pkgs; writeShellApplication {
|
|
name = "nfs";
|
|
runtimeInputs = [ coreutils hostname nh ];
|
|
text = ''
|
|
HOSTNAME=$(hostname -s)
|
|
echo "Switching to the $HOSTNAME nixos profile"
|
|
nh os switch "$@" "${flakeDir}#$HOSTNAME"
|
|
'';
|
|
};
|
|
nfsu = with pkgs; writeShellApplication {
|
|
name = "nfsu";
|
|
runtimeInputs = [ nfs pkgs.git ];
|
|
text = ''nfs --refresh "$@"'';
|
|
};
|
|
in
|
|
{
|
|
options.rebuild = {
|
|
flakeDir = lib.mkOption {
|
|
description = "Path to the flake directory.";
|
|
type = lib.types.str;
|
|
default = "/etc/nixos";
|
|
};
|
|
};
|
|
|
|
config = {
|
|
environment.systemPackages = with pkgs; [ nfs nfsu ];
|
|
};
|
|
};
|
|
|
|
flake.modules.homeManager.rebuild =
|
|
{ config, pkgs, lib, ... }:
|
|
let
|
|
flakeDir = config.homeManagerFlakeDir;
|
|
|
|
flake-parts-check = with pkgs; writeShellApplication {
|
|
name = "flake-parts-check";
|
|
runtimeInputs = [ nix ];
|
|
text = ''
|
|
cd ${flakeDir}
|
|
nix run "${flakeDir}#write-flake"
|
|
nix flake check
|
|
'';
|
|
};
|
|
|
|
test-build = with pkgs; writeShellApplication {
|
|
name = "test-build";
|
|
runtimeInputs = [ coreutils nix hostname ];
|
|
text = ''
|
|
if [ -z "$1" ]; then
|
|
HOSTNAME=$(hostname -s)
|
|
else
|
|
HOSTNAME="$1"
|
|
fi
|
|
echo "Testing the evaulation of the nixos config for $HOSTNAME"
|
|
nix eval "${flakeDir}#nixosConfigurations.$HOSTNAME.config.system.build.toplevel.drvPath"
|
|
'';
|
|
};
|
|
in
|
|
{
|
|
options = {
|
|
homeManagerFlakeDir = lib.mkOption {
|
|
description = "Path to the home-manager flake directory.";
|
|
type = lib.types.str;
|
|
default = "${config.xdg.configHome}/home-manager";
|
|
};
|
|
};
|
|
|
|
config = {
|
|
home.activation.printFlakeDir = lib.hm.dag.entryAfter ["writeBoundary"] ''
|
|
run echo "Home Manager flake directory: ${flakeDir}"
|
|
'';
|
|
|
|
home.packages = with pkgs; [
|
|
home-manager
|
|
(symlinkJoin {
|
|
name = "build-tools";
|
|
paths = [
|
|
flake-parts-check
|
|
test-build
|
|
(inputs.self.wrappers.home-switch.apply {
|
|
inherit pkgs flakeDir;
|
|
}).wrapper
|
|
(inputs.self.wrappers.home-switch.apply {
|
|
binName = lib.mkForce "nhmu";
|
|
inherit pkgs flakeDir;
|
|
extraOptions = [ "--update" ];
|
|
}).wrapper
|
|
(inputs.wrappers.lib.wrapPackage {
|
|
binName = "cleanup";
|
|
inherit pkgs;
|
|
package = nh;
|
|
args = [ "clean" "user" "--keep-since" "3days" ];
|
|
})
|
|
];
|
|
})
|
|
];
|
|
};
|
|
};
|
|
|
|
flake.wrappers.home-switch = inputs.wrappers.lib.wrapModule ({config, lib, wlib, ... }: {
|
|
options = {
|
|
flakeDir = lib.mkOption {
|
|
type = lib.types.str;
|
|
};
|
|
user = lib.mkOption {
|
|
type = lib.types.str;
|
|
default = "$(whoami)";
|
|
};
|
|
hostname = lib.mkOption {
|
|
type = lib.types.str;
|
|
default = "$(hostname -s)";
|
|
};
|
|
configuration = lib.mkOption {
|
|
type = lib.types.str;
|
|
default = "${config.user}@${config.hostname}";
|
|
};
|
|
extraOptions = lib.mkOption {
|
|
type = lib.types.listOf lib.types.str;
|
|
default = [ ];
|
|
};
|
|
};
|
|
|
|
config = {
|
|
binName = "nhms";
|
|
extraPackages = with config.pkgs; [ coreutils hostname nh ];
|
|
preHook = ''
|
|
CONFIG=${config.configuration}
|
|
echo "Switching to $CONFIG from ${config.flakeDir}"
|
|
'';
|
|
package = config.pkgs.nh;
|
|
args = [
|
|
"home" "switch"
|
|
"--configuration" "${config.configuration}"
|
|
"$@"
|
|
"${config.flakeDir}"
|
|
] ++ config.extraOptions;
|
|
};
|
|
});
|
|
}
|