moar progress
This commit is contained in:
parent
99605585e1
commit
135236685a
6 changed files with 83 additions and 55 deletions
|
@ -20,7 +20,7 @@
|
||||||
efi.canTouchEfiVariables = true;
|
efi.canTouchEfiVariables = true;
|
||||||
grub = {
|
grub = {
|
||||||
enable = true;
|
enable = true;
|
||||||
device = "/dev/nvme0n1"; # [managed by install.sh]
|
device = ""; # [managed by install.sh]
|
||||||
efiSupport = true;
|
efiSupport = true;
|
||||||
gfxmodeEfi = "1920x1080";
|
gfxmodeEfi = "1920x1080";
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
disk = {
|
disk = {
|
||||||
master = {
|
master = {
|
||||||
type = "disk";
|
type = "disk";
|
||||||
device = "/dev/nvme0n1"; # [managed by install.sh]
|
device = ""; # [managed by install.sh]
|
||||||
content = {
|
content = {
|
||||||
type = "gpt";
|
type = "gpt";
|
||||||
partitions = {
|
partitions = {
|
||||||
|
@ -30,13 +30,6 @@
|
||||||
content = {
|
content = {
|
||||||
type = "btrfs";
|
type = "btrfs";
|
||||||
extraArgs = [ "-f" "-L nixos" ];
|
extraArgs = [ "-f" "-L nixos" ];
|
||||||
postCreateHook = ''
|
|
||||||
TMP_MNT=$(mktemp -d)
|
|
||||||
MNT_PART="/dev/nvme0n1" # [managed by install.sh]
|
|
||||||
mount "$MNT_PART" "$TMP_MNT" -o subvol=/
|
|
||||||
trap 'umount "$TMP_MNT"; rm -rf "$TMP_MNT"' EXIT
|
|
||||||
btrfs subvolume snapshot "$TMP_MNT/root" "$TMP_MNT/blank"
|
|
||||||
'';
|
|
||||||
subvolumes = {
|
subvolumes = {
|
||||||
"/root" = {
|
"/root" = {
|
||||||
mountpoint = "/";
|
mountpoint = "/";
|
||||||
|
|
|
@ -30,13 +30,6 @@
|
||||||
content = {
|
content = {
|
||||||
type = "btrfs";
|
type = "btrfs";
|
||||||
extraArgs = [ "-f" "-L nixos" ];
|
extraArgs = [ "-f" "-L nixos" ];
|
||||||
postCreateHook = ''
|
|
||||||
TMP_MNT=$(mktemp -d)
|
|
||||||
MNT_PART="/dev/sda2" # [managed by install.sh]
|
|
||||||
mount "$MNT_PART" "$TMP_MNT" -o subvol=/
|
|
||||||
trap 'umount "$TMP_MNT"; rm -rf "$TMP_MNT"' EXIT
|
|
||||||
btrfs subvolume snapshot "$TMP_MNT/root" "$TMP_MNT/blank"
|
|
||||||
'';
|
|
||||||
subvolumes = {
|
subvolumes = {
|
||||||
"/root" = {
|
"/root" = {
|
||||||
mountpoint = "/";
|
mountpoint = "/";
|
||||||
|
|
110
install.sh
110
install.sh
|
@ -32,6 +32,7 @@ args() {
|
||||||
echo " -h|--help Print this and exit"
|
echo " -h|--help Print this and exit"
|
||||||
echo " -d|--device [device] (required) The device you want to install NixOS on to"
|
echo " -d|--device [device] (required) The device you want to install NixOS on to"
|
||||||
echo " -o|--host [hostname] (required) The host from ./hosts you want to install"
|
echo " -o|--host [hostname] (required) The host from ./hosts you want to install"
|
||||||
|
echo " -b|--build Build the system without installing"
|
||||||
echo ""
|
echo ""
|
||||||
echo "origin: https://github.com/c4em/dotnix"
|
echo "origin: https://github.com/c4em/dotnix"
|
||||||
echo ""
|
echo ""
|
||||||
|
@ -60,6 +61,10 @@ args() {
|
||||||
DOTNIX_HOSTNAME="$2"
|
DOTNIX_HOSTNAME="$2"
|
||||||
shift 2
|
shift 2
|
||||||
;;
|
;;
|
||||||
|
"-b" | "--build")
|
||||||
|
DOTNIX_DO_ONLY_BUILD=1
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
>&2 echo "Unrecognized argument '$1'. Run with --help to view accepted arguments."
|
>&2 echo "Unrecognized argument '$1'. Run with --help to view accepted arguments."
|
||||||
|
@ -68,8 +73,10 @@ args() {
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
args_ensure_is_set "--device" "$DOTNIX_INSTALL_DEVICE"
|
|
||||||
args_ensure_is_set "--host" "$DOTNIX_HOSTNAME"
|
args_ensure_is_set "--host" "$DOTNIX_HOSTNAME"
|
||||||
|
if [ -z "$DOTNIX_DO_ONLY_BUILD" ]; then
|
||||||
|
args_ensure_is_set "--device" "$DOTNIX_INSTALL_DEVICE"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
sed_safe () {
|
sed_safe () {
|
||||||
|
@ -77,54 +84,77 @@ sed_safe () {
|
||||||
printf "%s" "$1" | sed -r 's/([\$\.\*\/\[\\^])/\\\1/g' | sed 's/[]]/\[]]/g'
|
printf "%s" "$1" | sed -r 's/([\$\.\*\/\[\\^])/\\\1/g' | sed 's/[]]/\[]]/g'
|
||||||
}
|
}
|
||||||
|
|
||||||
partition_num_for_device() {
|
|
||||||
parent_dir="$(basename "$(dirname "$1")")"
|
|
||||||
if [ "$parent_dir" = "disk" ]; then
|
|
||||||
>&2 echo "Don't use persistent device names. They will automatically be set later on."
|
|
||||||
exit 1
|
|
||||||
elif [ "$parent_dir" = "mapper" ]; then
|
|
||||||
>&2 echo "lvm volumes are not supported."
|
|
||||||
exit 1
|
|
||||||
elif [ "$parent_dir" != "dev" ]; then
|
|
||||||
>&2 echo "Block device directory not recognized: $parent_dir"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "$(basename "$1")" in
|
|
||||||
"nvme"* | "mmcblk"*)
|
|
||||||
printf "%s" "${1}p${2}"
|
|
||||||
;;
|
|
||||||
"sda"* | "vda"* | "hda"*)
|
|
||||||
printf "%s" "${1}${2}"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
>&2 echo "Invalid block device type '$(basename "$1")'"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
update_managed_values() {
|
update_managed_values() {
|
||||||
sed -i 's/\( *device = \)".*"\(; #.*\)/\1"'"$(sed_safe "$DOTNIX_INSTALL_DEVICE")"'"\2/' "./hosts/$DOTNIX_HOSTNAME/default.nix"
|
sed -i 's/\( *device = \)".*"\(; #.*\)/\1"'"$(sed_safe "$DOTNIX_INSTALL_DEVICE")"'"\2/' "./hosts/$DOTNIX_HOSTNAME/default.nix"
|
||||||
sed -i 's/\( *device = \)".*"\(; #.*\)/\1"'"$(sed_safe "$DOTNIX_INSTALL_DEVICE")"'"\2/' "./hosts/$DOTNIX_HOSTNAME/disko.nix"
|
sed -i 's/\( *device = \)".*"\(; #.*\)/\1"'"$(sed_safe "$DOTNIX_INSTALL_DEVICE")"'"\2/' "./hosts/$DOTNIX_HOSTNAME/disko.nix"
|
||||||
sed -i 's/\( *MNT_PART=\)".*"\( #.*\)/\1"'"$(sed_safe \
|
sed -i 's/\( *system.stateVersion = \)".*"\(; #.*\)/\1"'"$(sed_safe "$(nixos-version | cut -f1,2 -d '.')")"'"\2/' "./hosts/$DOTNIX_HOSTNAME/default.nix"
|
||||||
"$(partition_num_for_device "$DOTNIX_INSTALL_DEVICE" "2")")"'"\2/' "./hosts/$DOTNIX_HOSTNAME/disko.nix"
|
}
|
||||||
|
|
||||||
|
build() {
|
||||||
|
nix build ".#nixosConfigurations.${DOTNIX_HOSTNAME}.config.system.build.toplevel"
|
||||||
|
}
|
||||||
|
|
||||||
|
permissions() {
|
||||||
|
if [ "$(id -u)" = "0" ]; then
|
||||||
|
sudo () {
|
||||||
|
true
|
||||||
|
}
|
||||||
|
else
|
||||||
|
sudo -v
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
ensure_confirmation() {
|
||||||
|
printf "\e[1;31m=== ARE YOU SURE YOU WANT TO CONTINUE WITH THE INSTALLATION ===\e[0m\n\n"
|
||||||
|
printf "This will \e[1;31mIRREVERSIBLY\e[0m wipe all data in '%s'\n" "$DOTNIX_INSTALL_DEVICE"
|
||||||
|
printf "This disk contains following partitions:\n\n"
|
||||||
|
lsblk -o NAME,SIZE,TYPE,FSTYPE "$DOTNIX_INSTALL_DEVICE"
|
||||||
|
printf "\n"
|
||||||
|
lsblk -no NAME "$DOTNIX_INSTALL_DEVICE" | tail -n +2 | tr -cd '[:alnum:][:space:]' | xargs -I {} -- df -h "/dev/{}"
|
||||||
|
printf "\n"
|
||||||
|
|
||||||
|
printf "Please write 'Yes, do as I say!' to continue with the installation\n> "
|
||||||
|
read -r install_prompt
|
||||||
|
if [ "$install_prompt" != "Yes, do as I say!" ]; then
|
||||||
|
echo "Cancelling installation"
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
DOTNIX_CONFIRM_DISK_NUKE="yes"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
partition_disk() {
|
||||||
|
if [ "$DOTNIX_CONFIRM_DISK_NUKE" = "yes" ]; then
|
||||||
|
sudo nix run github:nix-community/disko/latest -- --mode destroy,format,mount "./hosts/$DOTNIX_HOSTNAME/disko.nix"
|
||||||
|
else
|
||||||
|
>&2 echo "Aborted installation due to invalid state in the partitioning step."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
generate_config() {
|
||||||
|
nixos-generate-config --no-filesystems --root /mnt
|
||||||
}
|
}
|
||||||
|
|
||||||
main () {
|
main () {
|
||||||
args "$@"
|
args "$@"
|
||||||
|
permissions
|
||||||
|
|
||||||
if [ "$(id -u)" != "0" ]; then
|
if [ -n "$DOTNIX_DO_ONLY_BUILD" ]; then
|
||||||
>&2 echo "The installation script must be run as root to work."
|
if [ -n "$DOTNIX_INSTALL_DEVICE" ]; then
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -d /sys/firmware/efi ]; then
|
|
||||||
>&2 echo "Legacy BIOS is unsupported"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
update_managed_values
|
update_managed_values
|
||||||
|
fi
|
||||||
|
|
||||||
|
build
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
ensure_confirmation
|
||||||
|
update_managed_values
|
||||||
|
partition_disk
|
||||||
|
generate_config
|
||||||
|
|
||||||
|
# todo run the install
|
||||||
}
|
}
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
{
|
{
|
||||||
boot.initrd.postDeviceCommands = lib.mkAfter ''
|
boot.initrd.postDeviceCommands = lib.mkAfter ''
|
||||||
mkdir /btrfs_tmp
|
mkdir /btrfs_tmp
|
||||||
mount ${config.fileSystems."/".device} /btrfs_tmp
|
mount "${config.fileSystems."/".device}" /btrfs_tmp
|
||||||
if [[ -e /btrfs_tmp/root ]]; then
|
if [[ -e /btrfs_tmp/root ]]; then
|
||||||
mkdir -p /btrfs_tmp/old_roots
|
mkdir -p /btrfs_tmp/old_roots
|
||||||
timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S")
|
timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S")
|
||||||
|
|
12
shell.nix
Normal file
12
shell.nix
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{ pkgs ? import <nixpkgs> {} }:
|
||||||
|
|
||||||
|
pkgs.mkShell {
|
||||||
|
buildInputs = with pkgs; [
|
||||||
|
age
|
||||||
|
];
|
||||||
|
|
||||||
|
shellHook = ''
|
||||||
|
alias nix="nix --experimental-features 'nix-command flakes'"
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue