Add NixOS 24.11
This commit is contained in:
Executable
+41
@@ -0,0 +1,41 @@
|
||||
#!env bash
|
||||
set -exo pipefail
|
||||
|
||||
# Name of the file to write out
|
||||
name="${0%.sh}"
|
||||
|
||||
version="24.11"
|
||||
|
||||
# Base URL
|
||||
base="https://channels.nixos.org/nixos-${version}/latest-nixos-minimal-x86_64-linux.iso"
|
||||
|
||||
# Working directory
|
||||
tmp="$(mktemp -d)"
|
||||
checksums="${tmp}/checksums"
|
||||
|
||||
# Read the SHA256 sum value
|
||||
curl -L -o "${checksums}" "${base}.sha256"
|
||||
until curl -f -L -o "${checksums}" "${base}.sha256"; do
|
||||
sleep 1
|
||||
done
|
||||
sha="$(grep -e minimal "${checksums}" | cut -d' ' -f 1)"
|
||||
|
||||
# Write out HCL file
|
||||
cat << EOF > "${name}"
|
||||
distro = "nixos"
|
||||
version = "${version}"
|
||||
iso = {
|
||||
url = "${base}"
|
||||
checksum = "${sha}"
|
||||
}
|
||||
boot_command = [
|
||||
"curl -o /tmp/install.sh http://{{ .HTTPIP }}:{{ .HTTPPort }}/install.sh<enter>",
|
||||
"<wait>",
|
||||
"sudo bash /tmp/install.sh {{ .HTTPPort }} {{ .HTTPIP }}<enter>"
|
||||
]
|
||||
http_directory = "distros/nixos/${version}/http/"
|
||||
boot_wait = "90s"
|
||||
EOF
|
||||
|
||||
rm -r "${tmp}"
|
||||
rm -f "cache/latest-nixos-minimal-x86_64-linux.iso"
|
||||
@@ -0,0 +1,2 @@
|
||||
#!/usr/bin/env bash
|
||||
set -ex
|
||||
@@ -0,0 +1,73 @@
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
./guest-agent.nix
|
||||
];
|
||||
|
||||
system.stateVersion = "24.11";
|
||||
|
||||
# Packages installed on the whole system
|
||||
environment.systemPackages = with pkgs; [
|
||||
curl
|
||||
nano
|
||||
python3
|
||||
];
|
||||
# Services that are running
|
||||
services = {
|
||||
openssh.enable = true;
|
||||
#xserver.enable = true;
|
||||
};
|
||||
# User setup
|
||||
users.groups.vagrant = { };
|
||||
users.users.vagrant = {
|
||||
isNormalUser = true;
|
||||
group = "vagrant";
|
||||
extraGroups = [ "wheel" ];
|
||||
password = "vagrant";
|
||||
};
|
||||
security.sudo.extraRules = [
|
||||
{
|
||||
users = [ "vagrant" ];
|
||||
groups = [ "vagrant" ];
|
||||
commands = [
|
||||
{
|
||||
command = "ALL";
|
||||
options = [ "NOPASSWD" ];
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
|
||||
boot.loader = {
|
||||
systemd-boot = {
|
||||
enable = true;
|
||||
};
|
||||
efi.canTouchEfiVariables = true;
|
||||
};
|
||||
networking = {
|
||||
hostName = "vagrant";
|
||||
networkmanager.enable = true;
|
||||
#proxy.default = "http://user:password@proxy:port/";
|
||||
#proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
||||
};
|
||||
time.timeZone = "UTC";
|
||||
|
||||
i18n.defaultLocale = "en_US.UTF-8";
|
||||
console = {
|
||||
font = "Lat2-Terminux16";
|
||||
keyMap = lib.mkForce "us";
|
||||
useXkbConfig = true;
|
||||
};
|
||||
|
||||
nix = {
|
||||
settings = {
|
||||
experimental-features = "nix-command flakes";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
description = "A basic NixOS Vagrant install";
|
||||
|
||||
inputs = {
|
||||
nixstable.url = "github:nixos/nixpkgs/nixos-24.11";
|
||||
};
|
||||
|
||||
outputs =
|
||||
{ nixstable, ... }:
|
||||
{
|
||||
nixosConfigurations.vagrant = nixstable.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
modules = [ ./configuration.nix ];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{ ... }:
|
||||
{
|
||||
services.qemuGuest.enable = true;
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{ ... }:
|
||||
{
|
||||
virtualisation.hypervGuest.enable = true;
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{ ... }:
|
||||
{
|
||||
virtualisation.virtualbox.guest = {
|
||||
enable = true;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{ ... }:
|
||||
{
|
||||
services.qemuGuest.enable = true;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{ ... }:
|
||||
{
|
||||
virtualisation.vmware.guest = {
|
||||
enable = true;
|
||||
headless = false;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
set -ex
|
||||
|
||||
# Set passwords
|
||||
echo "vagrant:vagrant" | chpasswd
|
||||
echo "root:vagrant" | chpasswd
|
||||
|
||||
# Set ownership of things vagrant should own
|
||||
chown -R vagrant:vagrant ~vagrant/
|
||||
chown -R vagrant:wheel /etc/nixos
|
||||
@@ -0,0 +1,64 @@
|
||||
#!/usr/bin/env bash
|
||||
#vim: set ft=bash:
|
||||
set -ex
|
||||
|
||||
port="${1}" # HTTP port that packer is running on
|
||||
host="${2}"
|
||||
|
||||
if [ -e /dev/vda ]; then
|
||||
disk="/dev/vda"
|
||||
elif [ -e /dev/sda ]; then
|
||||
disk="/dev/sda"
|
||||
else
|
||||
exit 1 # Need to teach the script which device to use in this case
|
||||
fi
|
||||
|
||||
# The sed bit is just to strip out the extra fluff, like comments
|
||||
sed -e 's/\s*\([\+0-9a-zA-Z]*\).*/\1/' << EOF | fdisk ${disk}
|
||||
g # create new GPT partition table
|
||||
n # new
|
||||
# default partition number
|
||||
# default start
|
||||
+512M # size
|
||||
t # set type
|
||||
1 # EFI system partition
|
||||
n # second partition
|
||||
# default partition number
|
||||
# start at first free sector
|
||||
# default to full disk
|
||||
p # print, for debugging
|
||||
w # write the partition table and exit
|
||||
EOF
|
||||
|
||||
sleep 10 # Let me at least read it!
|
||||
#t # set partition type
|
||||
#1 # on partition 1
|
||||
#4 # BIOS boot
|
||||
|
||||
# Format and mount partitions
|
||||
mkfs.vfat "${disk}1"
|
||||
mkfs.ext4 "${disk}2"
|
||||
|
||||
mount "${disk}2" /mnt
|
||||
mkdir -p /mnt/boot
|
||||
mount "${disk}1" /mnt/boot
|
||||
|
||||
# Bootstrap system
|
||||
virt="$(systemd-detect-virt)"
|
||||
nixos-generate-config --root /mnt
|
||||
curl -o /mnt/etc/nixos/configuration.nix "http://${host}:${port}/configuration.nix"
|
||||
curl -o /mnt/etc/nixos/flake.nix "http://${host}:${port}/flake.nix"
|
||||
curl -o /mnt/etc/nixos/guest-agent.nix "http://${host}:${port}/ga-${virt}.nix"
|
||||
sed -i -E -e "s,@BOOT_DEVICE@,${disk}," /mnt/etc/nixos/configuration.nix
|
||||
|
||||
nixos-install --no-root-password --flake "/mnt/etc/nixos/#vagrant"
|
||||
|
||||
# Run stuff in the chroot
|
||||
curl -o /mnt/root/in-chroot.sh "http://${host}:${port}/in-chroot.sh"
|
||||
nixos-enter --root /mnt -c 'bash /root/in-chroot.sh'
|
||||
rm /mnt/root/in-chroot.sh
|
||||
|
||||
umount /mnt/boot
|
||||
umount /mnt
|
||||
efibootmgr --bootnext "$(efibootmgr | grep Linux | awk '{print $1}' | sed -E 's/[^0-9]//g')"
|
||||
reboot
|
||||
@@ -0,0 +1,2 @@
|
||||
#!/usr/bin/env bash
|
||||
set -ex
|
||||
@@ -0,0 +1,2 @@
|
||||
#!/usr/bin/env bash
|
||||
set -ex
|
||||
@@ -0,0 +1,2 @@
|
||||
#!/usr/bin/env bash
|
||||
set -ex
|
||||
@@ -14,4 +14,9 @@
|
||||
arch = "amd64";
|
||||
eol = false;
|
||||
}
|
||||
{
|
||||
version = "24.11";
|
||||
arch = "amd64";
|
||||
eol = false;
|
||||
}
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user