Install update-system script
This commit is contained in:
parent
63c086197c
commit
5cc42dac77
|
@ -9,37 +9,16 @@
|
||||||
modeFile = "${config.home.homeDirectory}/.mode";
|
modeFile = "${config.home.homeDirectory}/.mode";
|
||||||
modeDir = "${config.home.homeDirectory}/.volatile/modes";
|
modeDir = "${config.home.homeDirectory}/.volatile/modes";
|
||||||
configPath = "${config.home.homeDirectory}/git/config";
|
configPath = "${config.home.homeDirectory}/git/config";
|
||||||
configGit = "${pkgs.git}/bin/git -C ${configPath}";
|
configGit = "${lib.getExe pkgs.git} -C ${configPath}";
|
||||||
in {
|
in {
|
||||||
home.packages = builtins.attrValues rec {
|
home.packages = builtins.attrValues rec {
|
||||||
updateSystem = pkgs.writeShellScriptBin "update-system" ''
|
|
||||||
remote_host=$1
|
|
||||||
host=''${remote_host:-${hostName}}
|
|
||||||
|
|
||||||
echo "Building configuration for $host …"
|
|
||||||
output=$(nom build --builders @$(builders-configurator) ~/git/config#nixosConfigurations.$host.config.system.build.toplevel --no-link --print-out-paths)
|
|
||||||
|
|
||||||
if [[ -z "$remote_host" ]]; then
|
|
||||||
on_target() {
|
|
||||||
/run/wrappers/bin/sudo $@
|
|
||||||
}
|
|
||||||
else
|
|
||||||
on_target() {
|
|
||||||
${lib.getExe pkgs.openssh} root@$host $@
|
|
||||||
}
|
|
||||||
echo "Uploading configuration to $host …"
|
|
||||||
${lib.getExe pkgs.nix} copy $output --to ssh://$host
|
|
||||||
fi
|
|
||||||
on_target ${pkgs.nix}/bin/nix-env -p /nix/var/nix/profiles/system --set $output
|
|
||||||
on_target $output/bin/switch-to-configuration switch
|
|
||||||
'';
|
|
||||||
maintenance = pkgs.writeShellScriptBin "maintenance" ''
|
maintenance = pkgs.writeShellScriptBin "maintenance" ''
|
||||||
set -e
|
set -e
|
||||||
${configGit} pull --ff-only
|
${configGit} pull --ff-only
|
||||||
echo "Running update-modes …"
|
echo "Running update-modes …"
|
||||||
${lib.getExe updateModes}
|
${lib.getExe updateModes}
|
||||||
echo "Updating system …"
|
echo "Updating system …"
|
||||||
${lib.getExe updateSystem}
|
${lib.getExe pkgs.updateSystem}
|
||||||
echo "Maintenance finished."
|
echo "Maintenance finished."
|
||||||
'';
|
'';
|
||||||
activateMode = pkgs.writeHaskellScript {name = "activate-mode";} ''
|
activateMode = pkgs.writeHaskellScript {name = "activate-mode";} ''
|
||||||
|
@ -63,7 +42,7 @@ in {
|
||||||
main = do
|
main = do
|
||||||
say "Building ~/.modes for ${hostName}"
|
say "Building ~/.modes for ${hostName}"
|
||||||
builders <- builders_configurator |> captureTrim
|
builders <- builders_configurator |> captureTrim
|
||||||
nom ["build", "--builders", [i|@#{builders}|], "/home/maralorn/git/config#homeModes.${hostName}", "-o", "${modeDir}"]
|
nom ["build", "--builders", [i|@#{builders}|], "${configPath}#homeModes.${hostName}", "-o", "${modeDir}"]
|
||||||
activate_mode
|
activate_mode
|
||||||
'';
|
'';
|
||||||
quickUpdateMode =
|
quickUpdateMode =
|
||||||
|
@ -79,7 +58,7 @@ in {
|
||||||
mode <- getMode
|
mode <- getMode
|
||||||
say [i|Quick switching to mode #{mode} ...|]
|
say [i|Quick switching to mode #{mode} ...|]
|
||||||
builders <- builders_configurator |> captureTrim
|
builders <- builders_configurator |> captureTrim
|
||||||
path :: Text <- decodeUtf8 <$> (nom ["build", "--builders", [i|@#{builders}|], "--print-out-paths", "--no-link", [i|/home/maralorn/git/config\#homeConfigurations.${hostName}-#{mode}.activationPackage|]] |> captureTrim)
|
path :: Text <- decodeUtf8 <$> (nom ["build", "--builders", [i|@#{builders}|], "--print-out-paths", "--no-link", [i|${configPath}\#homeConfigurations.${hostName}-#{mode}.activationPackage|]] |> captureTrim)
|
||||||
exe ([i|#{path}/activate|] :: String)
|
exe ([i|#{path}/activate|] :: String)
|
||||||
update_modes
|
update_modes
|
||||||
'';
|
'';
|
||||||
|
|
|
@ -28,9 +28,12 @@
|
||||||
# permitRootLogin = "prohibit-password"; Default
|
# permitRootLogin = "prohibit-password"; Default
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.etc."nix/machines".source = toString (pkgs.runCommand "nix-machines" {} ''
|
environment = {
|
||||||
cp $(${pkgs.builders-configurator}/bin/builders-configurator ${config.networking.hostName} --without-connection) $out
|
systemPackages = [pkgs.updateSystem];
|
||||||
'');
|
etc."nix/machines".source = toString (pkgs.runCommand "nix-machines" {} ''
|
||||||
|
cp $(${pkgs.builders-configurator}/bin/builders-configurator ${config.networking.hostName} --without-connection) $out
|
||||||
|
'');
|
||||||
|
};
|
||||||
|
|
||||||
nix = {
|
nix = {
|
||||||
distributedBuilds = lib.mkDefault true;
|
distributedBuilds = lib.mkDefault true;
|
||||||
|
|
22
overlays/update-system.nix
Normal file
22
overlays/update-system.nix
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
final: _: {
|
||||||
|
updateSystem = final.writeShellScriptBin "update-system" ''
|
||||||
|
set -e
|
||||||
|
remote_host=$1
|
||||||
|
host=''${remote_host:-$(hostName)}
|
||||||
|
echo "Building configuration for $host …"
|
||||||
|
output=$(nom build --builders @$(builders-configurator) /home/maralorn/git/config#nixosConfigurations.$host.config.system.build.toplevel --no-link --print-out-paths)
|
||||||
|
if [[ -z "$remote_host" ]]; then
|
||||||
|
on_target() {
|
||||||
|
/run/wrappers/bin/sudo $@
|
||||||
|
}
|
||||||
|
else
|
||||||
|
on_target() {
|
||||||
|
${final.lib.getExe final.openssh} root@$host $@
|
||||||
|
}
|
||||||
|
echo "Uploading configuration to $host …"
|
||||||
|
${final.lib.getExe final.nix} copy $output --to ssh://$host
|
||||||
|
fi
|
||||||
|
on_target ${final.nix}/bin/nix-env -p /nix/var/nix/profiles/system --set $output
|
||||||
|
on_target $output/bin/switch-to-configuration switch
|
||||||
|
'';
|
||||||
|
}
|
Loading…
Reference in a new issue