Skip to content

badele/nix-homelab

Repository files navigation

nix-homelab

Features

This homelab entirelly managed by NixOS

All the configuration is stored on homelab.json file, you can do:

  • Define network CIDR
  • Define hosts
  • Define the roles installed for selected hosts
  • Define services descriptions
  • etc ...

This documentation is generated from homelab.json file content

Roles

The main roles used in this home lab

This list generated with just doc-update command

Logo Module Hosts Description
wireguard router-living, badphone, cab1e An VPN client/server alternative to IPSec and OpenVPN
acme rpi40, bootstore Let's Encrypt Automatic Certificate Management Environment
coredns rpi40 A Go DNS server, it used for serving local hosts and alias
ntp rpi40, bootstore, srvhoma Network Time Protocol
mosquitto rpi40 A mqtt broker [service port 1883]
zigbee2mqtt rpi40 A zigbee2mqtt [service port 8080]
adguard bootstore DNS ad blocker [service port 3002]
dashy bootstore The Ultimate Homepage for your Homelab [service port 8081]
grafana bootstore The open and composable observability and data visualization platform [service port 3000]
loki bootstore Scalable log aggregation system [service port 8084,9095]
nfs bootstore A Linux NFS server, it used for backuping a servers and Latops
nix-serve bootstore For caching the nix build results
prometheus bootstore Monitoring system and time series database [service port 9090]
smokeping bootstore Latency measurement tool
statping bootstore A Status Page for monitoring your websites and applications with beautiful graphs [service port 8082]
uptime bootstore A Status Page [service port 3001/8083]
home-assistant bootstore Open source home automation [service port 8123]

User programs

Logo Name Description
Aider AI Pair programming
Firefox Browser
Gimp Raster graphics editor
i3 Tiling window manager
Inkscape Vectorial graphics editor
Libreoffice Office editor
Meld Awesome diff tool
Navi interactive cheatsheet tool
Neovim VIDE (badele's customized nix neovim)

TUI floating panel configuration

Bluetooth (bluetuith) Disk (bashmount)
Mixer (pulsemixer) Network (nmtui)
Process (pulsemixer)

Documentation

Hosts

List of hosts composing the home lab

This list generated with just doc-update command

Logo Name OS Description
box (192.168.0.1) Sagem SFR internet box
router-living (192.168.254.254) MikroTik Livingroom mikrotik router
router-ladbedroom (192.168.254.253) MikroTik Bedroom mikrotik router
router-homeoffice (192.168.254.252) MikroTik Office mikrotik router
sadhome (192.168.254.200) NixOS Stephanie's laptop
rpi40 (192.168.254.101) NixOS The RPI 4 server
bootstore (192.168.254.100) NixOS HP Microserver N40L server
badphone (192.168.254.194) Android Bruno's phone
ladphone (192.168.254.184) Android Lucas's phone
sadphone (192.168.254.188) Android Steph's phone
loadphone (192.168.254.199) Iphone Lou's phone
tv-chromecast (192.168.254.105) Chromecast TV Chromecast
bedroom-googlemini-A (192.168.254.197) GoogleMini Google Mini room A
bedroom-googlemini-C (192.168.254.196) GoogleMini Google Mini room C
b4d14 (192.168.254.124) NixOS Dell XPS 9560 Latop
badxps (192.168.254.114) NixOS Dell XPS 9570 Latop
badxps-eth (192.168.254.179) NixOS Dell XPS 9570 Latop
bridge-hue (192.168.254.191) Bridge Philips Hue bridge
srvhoma (192.168.254.116) NixOS First NUC homelab server
vm-test (127.0.0.1) NixOS qemu VM (SSH on port 2222)
cab1e (84.234.31.97) NixOS Wireguard VPN anonymizer server

Network

generated by diagrams ./docs/network_architecture.py
Network architecture
generated by plantuml ./docs/network.puml
Network diagram

Structure

  • Configuration
    • homelab.json: main homelab file configuration (roles servers, network, etc)
    • hosts: hosts configuration (system, hardware, host secrets)
      • *.nix: user accounts
    • users: users configuration (on user environment, user secrets)
  • System
    • nix: all *.nix files
      • home-manager: All users *.nix files (installed on user environment)
      • modules: all nix modules
        • home-manager: user modules
        • nixos: nixos modules (installed on system wide)
          • host.nix: host options (custom options for host)
      • nixos: all *.nix files installed on system wide
      • overlays: overlays nix derivations
      • pkgs: custom nix packages

Usage

Demo

To test nix-homelab as well as the configuration of a workstation, nix-homelab offers a demo that runs on a virtual machine based on QEMU.

usb-installer

Installation

  • From your desktop
    • nix develop
    • just iso-build
    • just demo-qemu-nixos-install (demopass password) Go for a walk or have a coffee
    • when the installation is completed, reboot the virtual machine (you can write reboot on the terminal) and select Firmware Setup => Boot Manager => UEFI QEMU HardDisk

reboot

Update

You can update from your remote desktop or directly from your recent installed desktop

  • From remote

    • just demo-qemu-nixos-update
  • From your fresh installation

    • ssh root@localhost -p 2222 (demopass password)
    • ghq clone https://github.com/badele/nix-homelab.git
    • cd ghq/github.com/badele/nix-homelab
    • just nixos-update

Re-use the demo

just demo-start

Secrets initialisation (AGE & SOPS)

Your pass (passwordstore) configuration must be correctly configured.

In order to be able to encrypt your credentials, you first need initialize an age key. It is this key that will subsequently have to be added in the .sops.yaml file

  • age-keygen | pass insert -m nix-homelab/users/your_username
  • pass show nix-homelab/users/your_username | grep AGE-SECRET-KEY >> ~/.config/sops/age/keys.txt

NixOS installation & update

See Commons installation

Update from you local computer/laptop

  • From your fresh installation
    • ghq clone https://github.com/badele/nix-homelab.git
    • cd ghq/github.com/badele/nix-homelab
    • just nixos-update

Commands

Home lab commands list

This list generated with just doc-update command

commands list

A big thanks ❤️

A big thank to the contributors of OpenSource projects in particular :