1
Fork 0
Modular NixOS configuration.
Find a file
2024-08-01 18:38:05 +02:00
assets Update screnshot 2024-06-24 01:16:45 +02:00
dotfiles Add Haskell lsp support 2024-08-01 18:38:05 +02:00
home Add Haskell lsp support 2024-08-01 18:38:05 +02:00
hosts/workstation hyprland: Actually use the git release 2024-07-26 20:48:08 +02:00
lib Simplify mkHosts 2024-07-25 21:32:55 +02:00
modules hyprland: Switch back nixpkgs release 2024-07-26 20:54:10 +02:00
.gitattributes Mark the vendored ags configuration files as such 2024-05-30 19:46:24 +02:00
.gitignore Add support for distrobox 2024-07-31 16:39:15 +02:00
flake.lock Update flake.lock 2024-08-01 18:38:05 +02:00
flake.nix hyprland: Actually use the git release 2024-07-26 20:48:08 +02:00
README.md Add deployment script for distro agnostic dotfiles 2024-07-30 22:43:33 +02:00

nixos-system-config

My modular NixOS configuration.

About

This is the NixOS configuration that I daily drive on my system. Feel free to use, modify and share this configuration to your heart's content, no attribution required.

Screenshots

Wallpaper.

Screeenshot

Layout

├── assets                                  ; Binary assets tracked in git
│   ├── screenshot.png
│   └── wallpaper.jpg
├── dotfiles                                ; Distro agnostic dotfiles
│   └── ...                                 ; Stores configurations that do not depend on Nix
├── flake.lock
├── flake.nix                               ; Entry point
├── home                                    ; home-manager configuration
│   ├── default.nix                         ; User and home-manager options
│   ├── packages                            ; Per-package home-manager configuration
│   │   └── ...
│   └── persist.nix                         ; Home opt-in state directories and files
├── hosts                                   ; Host configurations
│   └── workstation
│       ├── default.nix                     ; Host configuration.nix equivalent
│       ├── hardware-configuration.nix      ; Host hardware specific configuration
│       └── persist.nix                     ; System wide opt-in state directories and files
├── lib                                     ; Custom helper functions
│   ├── default.nix
│   └── ...
├── modules                                 ; System modules and sets of packages
│   ├── desktop
│   │   ├── apps
│   │   │   └── ...
│   │   └── environments
│   │       └── ...
│   └── system
│       └── ...
├── README.md
└── secrets                                 ; Location of secrets not tracked in the git tree
    └── pass

Installing

This configuration uses impermanence with btrfs snapshots so you'll have to partition your system in a certain way.

First you'll need this partition layout, assuming you're installing on nvme0n1.

DEVICE              FILESYSTEM      PURPOSE
/dev/nvme0n1
├─/dev/nvme0n1p1    vfat            EFI partition
└─/dev/nvme0n1p2    btrfs           Partition to house all the subvolumes

Inside of the btrfs root volume we're going to need 2 subvolumes.

SUBVOLUME           MOUNT           PURPOSE
root                /               Impermanent data
nix                 /nix            Permanent data

You'll also need to create a read-only snapshot of the root subvolume and call it root-blank.

After you've mounted all the subvolumes and EFI partition (/boot) in /mnt clone this repository in to /mnt/nix/config. Adjust all the block ids of the partitions in hardware-configuration.nix and create a hashed password using mkpasswd and store it in the secrets directory as pass.

Finally, in the config directory run nixos-install --flake '.#', reboot and you're done.

Updating

This configuration sets up nh for a prettier and more convenient way of keeping the system up to date. To update you can simply run:

nix flake update /nix/config
nh os switch