My NixOS configuration and other infrastructure related things
Find a file
2020-08-24 11:19:30 +02:00
.git-crypt Add 1 git-crypt collaborator 2020-08-22 17:45:46 +02:00
machines/nunotaba Use the same restic password for all machines 2020-08-24 09:27:16 +02:00
modules Use the same restic password for all machines 2020-08-24 09:27:16 +02:00
profiles Initial commit 2020-08-22 17:44:39 +02:00
secrets Use the same restic password for all machines 2020-08-24 09:27:16 +02:00
users/simon Initial commit 2020-08-22 17:44:39 +02:00
.envrc Initial commit 2020-08-22 17:44:39 +02:00
.gitattributes Initial commit 2020-08-22 17:44:39 +02:00
.gitignore Initial commit 2020-08-22 17:44:39 +02:00
LICENSE Initial commit 2020-08-22 17:44:39 +02:00
pre-commit-hook Initial commit 2020-08-22 17:44:39 +02:00
README.md Fix comment about symlinking the hardware config 2020-08-24 11:19:30 +02:00
shell.nix Initial commit 2020-08-22 17:44:39 +02:00

NixOS configuration

How to install

This guide describes how to install this configuration (or any NixOS configuration) with GPT and legacy (BIOS) boot.

If you do not have a wired connection, first set up wifi

wpa_passphrase "SSID" "PSK" | sudo wpa_supplicant -B -i wlp4s0 -c/dev/stdin

Create the partition table (enter the indented lines in the repl).

sudo parted /dev/sdX
  mktable GPT
  mkpart primary 1MiB 2MiB
  mkpart primary 2MiB 500MiB
  mkpart primary 500MiB 100%
  set 1 bios_grub on
  disk_toggle pmbr_boot
  quit

Format encrypted partition and open it

sudo cryptsetup luksFormat /dev/sdX3
sudo cryptsetup luksOpen /dev/sdX3 HOSTNAME-pv

Create LVM (replace 8G with desired swap size)

sudo pvcreate /dev/mapper/HOSTNAME-pv
sudo vgcreate HOSTNAME-vg /dev/mapper/HOSTNAME-pv
sudo lvcreate -L 8G -n swap HOSTNAME-vg
sudo lvcreate -l '100%FREE' -n root HOSTNAME-vg

Hint: If you have to reboot to the installation system later because something went wrong and you need access to the LVM (but dont know LVM), do the following after opening the luks partition: sudo vgchange -ay

Create filesystems

sudo mkfs.ext2 /dev/sdX2
sudo mkfs.ext4 -L root /dev/HOSTNAME-vg/root
sudo mkswap -L swap /dev/HOSTNAME-vg/swap

Mount the file systems and activate swap

sudo mount /dev/HOSTNAME-vg/root /mnt
sudo mkdir /mnt/boot
sudo mount /dev/sdX2 /mnt/boot
sudo swapon /dev/HOSTNAME-vg/swap

Create the configuration (see below) and copy this repository to your new home directory (e.g. /mnt/home/simon/nixos).

Add a symlink as the global configuration

sudo mkdir -p /mnt/etc/nixos/
sudo ln -s /mnt/home/simon/nixos/machines/nunotaba/configuration.nix /mnt/etc/nixos/configuration.nix

Generate hardware configuration and link it to the installation system (symlinking required because of absolute paths)

sudo nixos-generate-config --root /mnt/
sudo ln -s /mnt/etc/nixos/hardware-configuration.nix /etc/nixos/hardware-configuration.nix

Install NixOS and reboot (if you do not have another machine, omit --no-root-passwd)

sudo nixos-install --no-root-passwd
sudo reboot

Hint: If you need to reboot to the installation system because something didnt work, first open the luks partition like in the setup script, run sudo vgchange -ay to scan for LVM VGs and then mount the other filesystems like in the script.

SSH into the machine (or login locally if you set a root password), fix the configuration.nix symlink, set a user password and clone the dotfiles

ssh root@machine
rm /etc/nixos/configuration.nix
ln -s /home/simon/nixos/machines/nunotaba/configuration.nix /etc/nixos/configuration.nix
passwd simon
^D
ssh simon@machine
# press “q” to get rid of zsh-newuser-install
git clone https://github.com/andsens/homeshick.git $HOME/.homesick/repos/homeshick
source $HOME/.homesick/repos/homeshick/homeshick.sh
homeshick clone https://git.sbruder.de/simon/dotfiles

How to add new device

  • Copy the config from the device that is similar to the new one
  • Import profiles/modules you want
  • Change settings in configuration.nix
  • Change secrets

License

MIT License