feat(nixos-anywhere): add deploy script and docs in README.md
This commit is contained in:
parent
9a84dbf525
commit
8a272b6410
4 changed files with 87 additions and 13 deletions
23
README.md
23
README.md
|
@ -12,6 +12,29 @@ Secrets are stored in secrets/secrets.yaml. You can edit these secrets with `sop
|
||||||
|
|
||||||
To decrypt these secrets with sops-nix during a rebuild, you must add your host public key to the `.sops.yaml` file. Generate it with `cat /etc/ssh/ssh_host_ed25519_key.pub | ssh-to-age`, add it to the file, then run `sops updatekeys secrets/secrets.yaml`.
|
To decrypt these secrets with sops-nix during a rebuild, you must add your host public key to the `.sops.yaml` file. Generate it with `cat /etc/ssh/ssh_host_ed25519_key.pub | ssh-to-age`, add it to the file, then run `sops updatekeys secrets/secrets.yaml`.
|
||||||
|
|
||||||
|
# Provisioning A New Machine
|
||||||
|
|
||||||
|
On the target system, boot into the NixOS installer and run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Create a password for the nixos user for SSH access.
|
||||||
|
passwd
|
||||||
|
|
||||||
|
# Start wpa_supplicant and connect to a wifi network.
|
||||||
|
sudo systemctl start wpa_supplicant
|
||||||
|
wpa_cli
|
||||||
|
> add_network
|
||||||
|
> set_network 0 ssid "SSID"
|
||||||
|
> set_network 0 psk "password"
|
||||||
|
> enable_network 0
|
||||||
|
> quit
|
||||||
|
|
||||||
|
# Get the IP address of the target system.
|
||||||
|
ip addr
|
||||||
|
```
|
||||||
|
|
||||||
|
On the host machine, run the command `deploy --flake .#<hostname> --target-host <username>@<ip_address>` to build the new system configuration and copy it over SSH along with the sops age key and ssh keys.
|
||||||
|
|
||||||
# Acknowledgements
|
# Acknowledgements
|
||||||
|
|
||||||
- https://www.youtube.com/watch?v=CwfKlX3rA6E for piquing my interest in this OS in the first place
|
- https://www.youtube.com/watch?v=CwfKlX3rA6E for piquing my interest in this OS in the first place
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
|
|
||||||
(pkgs.writeShellScriptBin "rebuild" (builtins.readFile ./rebuild.sh))
|
(pkgs.writeShellScriptBin "rebuild" (builtins.readFile ./rebuild.sh))
|
||||||
(pkgs.writeShellScriptBin "byebye" (builtins.readFile ./byebye.sh))
|
(pkgs.writeShellScriptBin "byebye" (builtins.readFile ./byebye.sh))
|
||||||
|
(pkgs.writeShellScriptBin "deploy" (builtins.readFile ./deploy.sh))
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
43
configs/shell/scripts/deploy.sh
Executable file
43
configs/shell/scripts/deploy.sh
Executable file
|
@ -0,0 +1,43 @@
|
||||||
|
# Set default values
|
||||||
|
flake=".#default" # Default flake attribute if none is provided
|
||||||
|
target_host="nixos@<hostname>" # Default target host
|
||||||
|
|
||||||
|
# Process command-line arguments
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
--flake)
|
||||||
|
flake="$2"
|
||||||
|
shift # past argument
|
||||||
|
shift # past value
|
||||||
|
;;
|
||||||
|
--target-host)
|
||||||
|
target_host="$2"
|
||||||
|
shift # past argument
|
||||||
|
shift # past value
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown option: $1" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Prepare temporary directory and copy necessary files
|
||||||
|
root=$(mktemp -d)
|
||||||
|
sudo mkdir -p ${root}/home/rafiq/.config/sops/age
|
||||||
|
sudo cp ~/.config/sops/age/keys.txt "${root}/home/rafiq/.config/sops/age/keys.txt"
|
||||||
|
sudo mkdir -p ${root}/home/rafiq/.ssh
|
||||||
|
sudo cp ~/.ssh/id_ed25519 "${root}/home/rafiq/.ssh/id_ed25519"
|
||||||
|
sudo cp ~/.ssh/id_ed25519.pub "${root}/home/rafiq/.ssh/id_ed25519.pub"
|
||||||
|
|
||||||
|
# Run nixos-anywhere
|
||||||
|
sudo nix run github:nix-community/nixos-anywhere -- \
|
||||||
|
--flake "${flake}" \
|
||||||
|
--target-host "${target_host}" \
|
||||||
|
--copy-host-keys \
|
||||||
|
--extra-files "${root}" \
|
||||||
|
--chown /home/rafiq/.config 1000:100 \
|
||||||
|
--chown /home/rafiq/.ssh 1000:100
|
||||||
|
|
||||||
|
# Clean up the temporary directory
|
||||||
|
sudo rm -rf "$root"
|
|
@ -18,12 +18,19 @@
|
||||||
time.timeZone = "Asia/Singapore";
|
time.timeZone = "Asia/Singapore";
|
||||||
i18n.defaultLocale = "en_SG.UTF-8";
|
i18n.defaultLocale = "en_SG.UTF-8";
|
||||||
|
|
||||||
users.mutableUsers = false; # Always reset users on system activation
|
users = {
|
||||||
|
mutableUsers = false; # Always reset users on system activation
|
||||||
|
|
||||||
users.users.rafiq = {
|
groups.users = {
|
||||||
|
gid = 100;
|
||||||
|
members = [ "rafiq" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
users.rafiq = {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
description = "rafiq";
|
description = "rafiq";
|
||||||
hashedPasswordFile = config.sops.secrets.password.path;
|
hashedPasswordFile = config.sops.secrets.password.path;
|
||||||
|
uid = 1000;
|
||||||
extraGroups = [
|
extraGroups = [
|
||||||
"networkmanager"
|
"networkmanager"
|
||||||
"wheel"
|
"wheel"
|
||||||
|
@ -32,11 +39,11 @@
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILdsZyY3gu8IGB8MzMnLdh+ClDxQQ2RYG9rkeetIKq8n"
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILdsZyY3gu8IGB8MzMnLdh+ClDxQQ2RYG9rkeetIKq8n"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
home-manager.users.rafiq.home = {
|
home-manager.users.rafiq.home = {
|
||||||
username = "rafiq";
|
username = "rafiq";
|
||||||
homeDirectory = "/home/rafiq";
|
homeDirectory = "/home/rafiq";
|
||||||
stateVersion = "25.05";
|
stateVersion = "25.05";
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue