25 Commits

Author SHA1 Message Date
aea7ba5c97 feature(ssh): add more security to the ssh config 2026-02-21 18:04:47 +01:00
159cd6f2f2 Merge pull request 'feature(update): update flake' (#20) from feature/update into main
Reviewed-on: #20
2026-02-19 21:01:57 +01:00
763a69bf09 feature(update): update flake 2026-02-19 20:53:18 +01:00
9b6ed91d37 Merge pull request 'feature(update): update flake' (#19) from feature/update into main
Reviewed-on: #19
2026-02-14 13:20:12 +00:00
39f7658a34 feature(update): update flake 2026-02-14 14:18:32 +01:00
50b2aaae60 Merge pull request 'refactor(readme): separate installation doc from main readme' (#18) from feature/documentation into main
Reviewed-on: #18
2026-02-08 10:17:27 +00:00
920b128ed7 refactor(readme): separate installation doc from main readme 2026-02-08 11:16:13 +01:00
978bd0e12b Merge pull request 'feature(update): update flake' (#17) from feature/update into main
Reviewed-on: #17
2026-02-08 10:01:27 +00:00
2ab6ccb7a0 feature(update): update flake 2026-02-08 11:00:01 +01:00
b8e7708b59 Merge pull request 'feature/update_flake' (#16) from feature/update_flake into main
Reviewed-on: #16
2026-02-01 12:13:28 +00:00
0783fc03b3 feature(flake): update flake file and update all packages 2026-02-01 13:11:28 +01:00
f9327d9e14 feature(networking): add update-resolved for vpn 2026-02-01 13:11:27 +01:00
e84c99e6b2 Merge pull request 'feature(networking): add update-resolved for vpn' (#15) from feature/add_update_resolved into main
Reviewed-on: #15
2026-02-01 11:59:10 +00:00
efec8e6def feature(networking): add update-resolved for vpn 2026-02-01 12:44:53 +01:00
a23e167014 feature(flake): update flake file and update all packages 2026-01-31 17:21:43 +01:00
7f078d2452 Merge pull request 'feature(ghostty): add home-manager module for ghostty' (#14) from feature/add_ghostty_hm into main
Reviewed-on: #14
2026-01-27 12:47:02 +00:00
53bf108799 feature(ghostty): add home-manager module for ghostty 2026-01-27 13:34:47 +01:00
853cfba840 Merge pull request 'feature(fonts): add fonts user module and add 0xProto font' (#13) from feature/add_fonts into main
Reviewed-on: #13
2026-01-26 10:45:11 +00:00
e0626a3644 fix(fonts): fix typo 2026-01-26 11:34:57 +01:00
b7ee91cf1a fix(fonts): add fonts to user 2026-01-26 11:33:50 +01:00
4f7ea84a8b feature(fonts): add fonts user module and add 0xProto font 2026-01-26 11:25:45 +01:00
a8468bf13f Merge pull request 'feature(ssl/tls): add my homelab pki root ca to the trust store' (#12) from feature/add_homelab_ca into main
Reviewed-on: #12
2026-01-23 19:20:42 +00:00
35319f58de feature(ssl/tls): add my homelab pki root ca to the trust store 2026-01-23 20:20:12 +01:00
4b6bdf0c86 Merge pull request 'chore(flake): update flake lock to the latest version' (#11) from feature/update_flake into main
Reviewed-on: #11
2026-01-23 18:37:39 +00:00
427b5315b7 chore(flake): update flake lock to the latest version 2026-01-23 19:36:34 +01:00
11 changed files with 227 additions and 141 deletions

125
INSTALLATION.md Normal file
View File

@@ -0,0 +1,125 @@
# basic system installation
- The installations presented in this repository are always luks encrypted
- For simplicity I'm using device labels rather than uuids
1. the partitioning layout should look somewhat like this after the installation
```bash
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 476.9G 0 disk
├─nvme0n1p1 259:1 0 2G 0 part /boot
└─nvme0n1p2 259:2 0 474.9G 0 part
└─cryptroot 254:0 0 474.9G 0 crypt
├─lvmroot-swap 254:1 0 20G 0 lvm [SWAP]
├─lvmroot-home 254:2 0 250G 0 lvm /home
└─lvmroot-root 254:3 0 204.9G 0 lvm /nix/store
```
2. prepare the installation
```bash
# format the boot partition
mkfs.fat -F 32 /dev/sda1 -n "nixboot"
# create an encrypted partition
cryptsetup luksFormat -y --label="nixcrypt" /dev/sda2
# open the encrypted partition and map it to /dev/mapper/cryptroot
cryptsetup luksOpen /dev/sda2 cryptroot
# create the physical volume
pvcreate /dev/mapper/cryptroot
# create a volume group inside
vgcreate lvmroot /dev/mapper/cryptroot
# create the swap volume
lvcreate --size 8G lvmroot --name nwap
# if you desire, create a home volume
lvcreate --size 150G lvmroot --name home
# create the root volume
lvcreate -l 100%FREE lvmroot --name root
# format as usual for root partition
mkfs.ext4 -L "nixroot" /dev/mapper/lvmroot-root
# if you previously made the home partition, do it too
mkfs.ext4 -L "nixhome" /dev/mapper/lvmroot-home
# format the swap partition
mkswap -L "nixswap" /dev/mapper/lvmroot-swap
# mount root
mount /dev/disk/by-label/nixroot /mnt
# mount boot
mount --mkdir /dev/sda1 /mnt/boot
# again, if you did the home volume
mount --mkdir /dev/disk/by-label/nixhome /mnt/home
# turn on swap
swapon /dev/disk/by-label/nixswap
```
3. prepare nixos
```bash
# generate templates and update the hardware-configuration.nix
sudo nixos-generate-config --root /mnt
# add cryptd to the kernelModules
boot.initrd.kernelModules = [ "dm-snapshot" "cryptd" ];
# add file systems using labels
fileSystems."/" =
{ device = "/dev/disk/by-label/nixroot";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-label/nixboot";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
fileSystems."/home" =
{ device = "/dev/disk/by-label/nixhome";
fsType = "ext4";
};
swapDevices =
[ { device = "/dev/disk/by-label/nixswap"; }
];
# point the bootloader to the luks device
boot.initrd.luks.devices."cryptroot".device = "/dev/disk/by-label/nixcrypt";
```
4. install nixos
```bash
cd /mnt
sudo nixos-install
```
## how to deploy the inital config
- Don't forget to install the bootloader, if you changed it since `nixos-install`
```bash
$ sudo nixos-rebuild --install-bootloader switch --flake .#host_name
```
## how to upgrade the system
```bash
$ cd /path/to/repo
$ sudo nix flake update
$ sudo nixos-rebuild switch --flake .#host_name
$ sudo nix-collect-garbage
```
## how to use nix-helper
The tool nix-helper is installed by this configuration. It simplifies administrating nixos and adds more output to the rebuild command. It also features a diff after a successful build. The command uses the `NH_FLAKE` environment variable to be able to run from whatever directory.
Basic commands with a set `NH_FLAKE` variable are:
```bash
$ nh os switch
$ nh os build
$ nh os test
$ nh clean all --keep 5
```
There is also the option to interface with home-manager by using `nh home switch` but this isn't necessary since home-manager is imported as a module in this config.

143
README.md
View File

@@ -1,133 +1,30 @@
# 0x29a nixos config
# NixOS config
My personal nixos configuration files for different environments.
My personal NixOS configurations.
## basic system installation
- The installations presented in this repository are always luks encrypted
- For simplicity I'm using device labels rather than uuids
1. the partitioning layout should look somewhat like this after the installation
## config structure
```bash
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 476.9G 0 disk
├─nvme0n1p1 259:1 0 2G 0 part /boot
└─nvme0n1p2 259:2 0 474.9G 0 part
└─cryptroot 254:0 0 474.9G 0 crypt
├─lvmroot-swap 254:1 0 20G 0 lvm [SWAP]
├─lvmroot-home 254:2 0 250G 0 lvm /home
└─lvmroot-root 254:3 0 204.9G 0 lvm /nix/store
```
2. prepare the installation
```bash
# format the boot partition
mkfs.fat -F 32 /dev/sda1 -n "nixboot"
# create an encrypted partition
cryptsetup luksFormat -y --label="nixcrypt" /dev/sda2
# open the encrypted partition and map it to /dev/mapper/cryptroot
cryptsetup luksOpen /dev/sda2 cryptroot
# create the physical volume
pvcreate /dev/mapper/cryptroot
# create a volume group inside
vgcreate lvmroot /dev/mapper/cryptroot
# create the swap volume
lvcreate --size 8G lvmroot --name nwap
# if you desire, create a home volume
lvcreate --size 150G lvmroot --name home
# create the root volume
lvcreate -l 100%FREE lvmroot --name root
# format as usual for root partition
mkfs.ext4 -L "nixroot" /dev/mapper/lvmroot-root
# if you previously made the home partition, do it too
mkfs.ext4 -L "nixhome" /dev/mapper/lvmroot-home
# format the swap partition
mkswap -L "nixswap" /dev/mapper/lvmroot-swap
# mount root
mount /dev/disk/by-label/nixroot /mnt
# mount boot
mount --mkdir /dev/sda1 /mnt/boot
# again, if you did the home volume
mount --mkdir /dev/disk/by-label/nixhome /mnt/home
# turn on swap
swapon /dev/disk/by-label/nixswap
.
├── flake.lock
├── flake.nix # flake definition
├── hosts
│   └── neon
│   ├── configuration.nix # import nix-modules for specific host
│   └── hardware-configuration.nix # hardware configs for specific host
├── modules
│   ├── home-manager
│   │   ├── xyz_module.nix
│   └── nixos
│   └── xyz_module.nix
└── users
└── aaron
└── home.nix # import home-manager modules for specific user
```
3. prepare nixos
## installation
```bash
# generate templates and update the hardware-configuration.nix
sudo nixos-generate-config --root /mnt
# add cryptd to the kernelModules
boot.initrd.kernelModules = [ "dm-snapshot" "cryptd" ];
# add file systems using labels
fileSystems."/" =
{ device = "/dev/disk/by-label/nixroot";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-label/nixboot";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
fileSystems."/home" =
{ device = "/dev/disk/by-label/nixhome";
fsType = "ext4";
};
swapDevices =
[ { device = "/dev/disk/by-label/nixswap"; }
];
# point the bootloader to the luks device
boot.initrd.luks.devices."cryptroot".device = "/dev/disk/by-label/nixcrypt";
```
4. install nixos
```bash
cd /mnt
sudo nixos-install
```
## how to deploy the inital config
- Don't forget to install the bootloader, if you changed it since `nixos-install`
```bash
$ sudo nixos-rebuild --install-bootloader switch --flake .#host_name
```
## how to upgrade the system
```bash
$ cd /path/to/repo
$ sudo nix flake update
$ sudo nixos-rebuild switch --flake .#host_name
$ sudo nix-collect-garbage
```
## how to use nix-helper
The tool nix-helper is installed by this configuration. It simplifies administrating nixos and adds more output to the rebuild command. It also features a diff after a successful build. The command uses the `NH_FLAKE` environment variable to be able to run from whatever directory.
Basic commands with a set `NH_FLAKE` variable are:
```bash
$ nh os switch
$ nh os build
$ nh os test
$ nh clean all --keep 5
```
There is also the option to interface with home-manager by using `nh home switch`but this isn't necessary since home-manager is imported as a module in this config.
For more details about the installation procedure see: [INSTALLATION.md](INSTALLATION.md)
## author

30
flake.lock generated
View File

@@ -8,11 +8,11 @@
]
},
"locked": {
"lastModified": 1765835352,
"narHash": "sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw=",
"lastModified": 1769996383,
"narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "a34fae9c08a15ad73f295041fec82323541400a9",
"rev": "57928607ea566b5db3ad13af0e57e921e6b12381",
"type": "github"
},
"original": {
@@ -28,11 +28,11 @@
]
},
"locked": {
"lastModified": 1768434960,
"narHash": "sha256-cJbFn17oyg6qAraLr+NVeNJrXsrzJdrudkzI4H2iTcg=",
"lastModified": 1771519029,
"narHash": "sha256-H59Qf82wv5kBXVoyXsmUKW+9J3o8FqgY4uKaLdsLdLg=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "b4d88c9ac42ae1a745283f6547701da43b6e9f9b",
"rev": "167e0b6837115e672ec5f58e2b0ea39093abe807",
"type": "github"
},
"original": {
@@ -43,11 +43,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1768305791,
"narHash": "sha256-AIdl6WAn9aymeaH/NvBj0H9qM+XuAuYbGMZaP0zcXAQ=",
"lastModified": 1771369470,
"narHash": "sha256-0NBlEBKkN3lufyvFegY4TYv5mCNHbi5OmBDrzihbBMQ=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "1412caf7bf9e660f2f962917c14b1ea1c3bc695e",
"rev": "0182a361324364ae3f436a63005877674cf45efb",
"type": "github"
},
"original": {
@@ -66,11 +66,11 @@
"systems": "systems"
},
"locked": {
"lastModified": 1768486009,
"narHash": "sha256-I7ymDe6UQooHy9I9wrafKCCDnRbox/EMWAgJgpm7fGs=",
"lastModified": 1771135771,
"narHash": "sha256-wyvBIhDuyCRyjB3yPg77qoyxrlgQtBR1rVW3c9knV3E=",
"owner": "nix-community",
"repo": "nixvim",
"rev": "03a638205b5cb04ba9c2ed6c604e137b15f07fa1",
"rev": "ed0424f0b08d303a7348f52f7850ad1b2704f9ba",
"type": "github"
},
"original": {
@@ -86,11 +86,11 @@
]
},
"locked": {
"lastModified": 1768504094,
"narHash": "sha256-4BRzwk88XyTeM8IzfQm31AHxGu2YpAorLMG2dpsA6xs=",
"lastModified": 1771513929,
"narHash": "sha256-dPeHevAT1Cb2w/Wrfz/d5i6RfO8bvbGl/KrTPxU2l3w=",
"owner": "noctalia-dev",
"repo": "noctalia-shell",
"rev": "c083b33dca0f8fc9c9647ee5cc88281a4bb8c69d",
"rev": "9c47ce03f200e0b8fc515d973440d5bc3e359785",
"type": "github"
},
"original": {

View File

@@ -4,6 +4,7 @@
imports = [
../../modules/nixos/audio.nix
../../modules/nixos/bootloader.nix
../../modules/nixos/certificates.nix
../../modules/nixos/gnupg.nix
../../modules/nixos/locales.nix
../../modules/nixos/networking.nix

View File

@@ -0,0 +1,11 @@
{ config, pkgs, inputs, ... }:
{
# user fonts
home.packages = with pkgs; [
nerd-fonts._0xproto
nerd-fonts.sauce-code-pro
powerline-fonts
powerline-symbols
];
}

View File

@@ -0,0 +1,20 @@
{ config, pkgs, inputs, ... }:
{
programs.ghostty = {
enable = true;
settings = {
clipboard-paste-protection = false;
clipboard-read = "allow";
font-family = "0xProto Nerd Font Mono";
font-size = 9;
gtk-titlebar = false;
scrollback-limit = 10000;
shell-integration = "zsh";
theme = "noctalia"; # generated by noctalia-shell
window-decoration = "auto";
window-padding-x = 10;
window-padding-y = 10;
};
};
}

View File

@@ -6,9 +6,6 @@
discord
fastfetch
keepassxc
nerd-fonts.sauce-code-pro
powerline-fonts
powerline-symbols
screenfetch
];

View File

@@ -0,0 +1,22 @@
{ config, lib, pkgs, ... }:
let
caddyRootCA = ''
-----BEGIN CERTIFICATE-----
MIIBozCCAUmgAwIBAgIQf2N1DGp2HVOoPaGuGDEnwjAKBggqhkjOPQQDAjAwMS4w
LAYDVQQDEyVDYWRkeSBMb2NhbCBBdXRob3JpdHkgLSAyMDI1IEVDQyBSb290MB4X
DTI1MTEwNjE5NDA1OFoXDTM1MDkxNTE5NDA1OFowMDEuMCwGA1UEAxMlQ2FkZHkg
TG9jYWwgQXV0aG9yaXR5IC0gMjAyNSBFQ0MgUm9vdDBZMBMGByqGSM49AgEGCCqG
SM49AwEHA0IABGR9mSgKCSjvcv7LvvIcO84Wpf/KtC/aexT5shSKXd1R97kIyMI5
SUYz0MzbRZHJ4QMpIeALirOK9Eoy2zht0dKjRTBDMA4GA1UdDwEB/wQEAwIBBjAS
BgNVHRMBAf8ECDAGAQH/AgEBMB0GA1UdDgQWBBRHKfIfJrrA2DACFrunVSmdnJHO
1zAKBggqhkjOPQQDAgNIADBFAiAoqc0+cHeq/8SQN16CKjVvXpZuMkg7NLDoWYMw
KgmzowIhAJlkxzBdVngwnJu8uPrVizTGF6XtmUHdJ0NDeccEqUCr
-----END CERTIFICATE-----
'';
in
{
security.pki.certificates = [
caddyRootCA # self-signed pki ca for my home-lab
];
}

View File

@@ -17,5 +17,6 @@
# Add network-related packages
environment.systemPackages = with pkgs; [
wireguard-tools
update-systemd-resolved
];
}

View File

@@ -5,5 +5,15 @@
services.openssh = {
enable = true;
openFirewall = true;
ports = [ 666 ];
settings = {
AuthenticationMethods = "publickey";
KbdInteractiveAuthentication = false;
MaxAuthTries = 5;
PasswordAuthentication = false;
PermitRootLogin = "no";
X11Forwarding = false;
};
};
}

View File

@@ -2,7 +2,9 @@
{
imports = [
../../modules/home-manager/fonts.nix
../../modules/home-manager/git.nix
../../modules/home-manager/ghostty.nix
../../modules/home-manager/nixvim.nix
../../modules/home-manager/programs.nix
../../modules/home-manager/shell.nix