My NixOS configuration and other infrastructure related things
Find a file
Simon Bruder daf867dcb9
machines: Add vueko
This only adds a minimal configuration.
2021-02-01 17:33:29 +01:00
.git-crypt Add 1 git-crypt collaborator 2020-08-22 17:45:46 +02:00
machines machines: Add vueko 2021-02-01 17:33:29 +01:00
modules Make it possible to disable smartd per-machine 2021-02-01 17:03:26 +01:00
nix Update sources 2021-01-30 17:09:25 +01:00
pkgs pkgs: Add wordclock-dimmer (including module) 2021-01-31 19:48:18 +01:00
users/simon Use separate state version for every machine 2021-01-31 12:21:05 +01:00
.envrc Initial commit 2020-08-22 17:44:39 +02:00
.gitattributes Initial commit 2020-08-22 17:44:39 +02:00
.gitignore Ignore all results 2020-12-17 09:50:25 +01:00
deploy.nix Use nixos-hardware for hardware configuration 2021-01-29 15:50:16 +01:00
LICENSE Initial commit 2020-08-22 17:44:39 +02:00
README.md Update readme to better reflect current state 2021-01-30 16:43:04 +01:00
shell.nix deploy: Do not fail with broken local config 2021-01-29 16:04:38 +01:00

NixOS configuration

Structure

  • deploy.nix: Configuration for deployment with krops
  • machines: Machine-specific configuration
    • README.md: Short overview of the hardware and usage of the machine
    • configuration.nix: Main configuration
    • hardware-configuration.nix: Hardware-specific configuration. It should not depend on any modules or files from this repository, since it is used for initial setup.
  • modules: Custom modules. Many are activated by default, since I want them on all systems.
  • pkgs: My nixpkgs overlay
  • users/simon: home-manager configuration

Secrets are managed with kropss integrated support for pass. Permission management for them is implemented in modules/secrets.nix.

How to install

This guide describes how to install this configuration with GPT and BIOS boot. It is not a one-fits-all guide, but the base for what I use for interactive systems. Servers and specialised systems may need a different setup (e.g. swap with random luks passphrase and no LVM).

Set up wifi if no wired connection is available:

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

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

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:

cryptsetup luksFormat --type luks2 /dev/sdX3
cryptsetup open --type luks2 /dev/sdX3 HOSTNAME-pv

Create LVM (replace 8G with desired swap size):

pvcreate /dev/mapper/HOSTNAME-pv
vgcreate HOSTNAME-vg /dev/mapper/HOSTNAME-pv
lvcreate -L 8G -n swap HOSTNAME-vg
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: vgchange -ay.

Create filesystems:

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

Mount the file systems and activate swap:

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

Generate hardware configuration and copy hardware configuration to machine configuration (skip this step if you already have a hardware-configuration for this machine):

nixos-generate-config --root /mnt/

Modify the hardware configuration as needed. Fill in the FIXME fields of machines/installation/configuration.nix and copy it to /mnt/etc/nixos/configuration.nix.

Install NixOS:

nixos-install

Add the krops sentinel file:

mkdir -p /mnt/var/src
touch /mnt/var/src/.populate

After the successful instalation, reboot use deploy HOSTNAME on another system to deploy the new system using krops, after adding the configuration.nix and entry in machines/default.nix for the machine.

License

As nixpkgs, this repository is licensed under the MIT License. This only applies to the nix expressions, not the built system or package closure. Patches may also be licensed differently, since they may be derivative works of the packages to which they apply.