This commit is contained in:
Osman Faruk Bayram 2025-10-19 21:31:09 +03:00
parent 316187dd31
commit f7f7dee190
3 changed files with 39 additions and 145 deletions

View file

@ -7,7 +7,6 @@
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix
../../../modules/nixos ../../../modules/nixos
inputs.disko.nixosModules.disko
inputs.impermanence.nixosModules.impermanence inputs.impermanence.nixosModules.impermanence
]; ];
@ -32,34 +31,36 @@
sound.enable = false; sound.enable = false;
hibernation.enable = false; hibernation.enable = false;
# Disable disko module since we have manual disko config in hardware-configuration.nix disko = {
disko.enable = false; enable = true;
fileSystem = "zfs";
systemd-boot = true;
initrd-ssh = {
enable = true;
authorizedKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPfnV+qqUCJf92npNW4Jy0hIiepCJFBDJHXBHnUlNX0k"
];
ethernetDrivers = [ "virtio_pci" ];
};
zfs = {
enable = true;
hostID = "0f7de22e";
root = {
useTmpfs = false; # Use ZFS root, not tmpfs
encrypt = true;
disk1 = "vda";
impermanenceRoot = true; # Wipe root on boot with ZFS snapshots
};
};
};
}; };
}; };
i18n.inputMethod.enable = lib.mkForce false; i18n.inputMethod.enable = lib.mkForce false;
system.stateVersion = "25.11"; system.stateVersion = "25.11";
networking.hostName = "apollo"; networking.hostName = "apollo";
networking.hostId = "0f7de22e"; # Required for ZFS
# ZFS configuration
boot.zfs.requestEncryptionCredentials = true;
# Initrd SSH for remote unlocking
boot.initrd.network.enable = true;
boot.initrd.availableKernelModules = [ "virtio_pci" ];
boot.initrd.network.ssh = {
enable = true;
port = 22;
shell = "/bin/cryptsetup-askpass";
authorizedKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPfnV+qqUCJf92npNW4Jy0hIiepCJFBDJHXBHnUlNX0k"
];
hostKeys = [ "/etc/ssh/initrd" ];
};
boot.initrd.secrets = {
"/etc/ssh/initrd" = "/etc/ssh/initrd";
};
# Enable zram swap # Enable zram swap
zramSwap.enable = true; zramSwap.enable = true;

View file

@ -1,127 +1,8 @@
{ config, lib, ... }: { config, lib, ... }:
{ {
disko.devices = { # Disko configuration is now managed by osbmModules.hardware.disko
disk = { # All disk configuration moved to configuration.nix
main = {
device = "/dev/vda"; # Change this to match your actual disk
type = "disk";
content = {
type = "gpt";
partitions = {
ESP = {
priority = 1;
size = "512M";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [ "umask=0077" ];
};
};
zfs = {
size = "100%";
content = {
type = "zfs";
pool = "rpool";
};
};
};
};
};
};
zpool = {
rpool = {
type = "zpool";
options = {
ashift = "12";
autotrim = "on";
};
rootFsOptions = {
acltype = "posixacl";
atime = "off";
canmount = "off";
compression = "zstd";
dnodesize = "auto";
normalization = "formD";
xattr = "sa";
mountpoint = "none";
encryption = "on";
keylocation = "prompt";
keyformat = "passphrase";
};
datasets = {
# Reserved space to prevent pool from becoming full
"local/reserved" = {
type = "zfs_fs";
options = {
refreservation = "1G";
mountpoint = "none";
};
};
# Nix store
"local/nix" = {
type = "zfs_fs";
mountpoint = "/nix";
options.mountpoint = "/nix";
};
# Persistent data
"safe/persist" = {
type = "zfs_fs";
mountpoint = "/persist";
options = {
mountpoint = "/persist";
};
postCreateHook = "zfs snapshot rpool/safe/persist@empty";
};
};
};
};
nodev = {
"/" = {
fsType = "tmpfs";
mountOptions = [
"defaults"
"size=2G"
"mode=755"
];
};
};
};
# ZFS-specific boot configuration
boot.supportedFilesystems = [ "zfs" ];
# Bootloader configuration
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
# Required for ZFS # Required for ZFS
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
# Mark /persist as needed for boot (required by impermanence)
fileSystems."/" = {
device = "none";
fsType = "tmpfs";
options = [ "defaults" "size=2G" "mode=755" ];
};
fileSystems."/boot" = {
device = "/dev/disk/by-partlabel/disk-main-ESP";
fsType = "vfat";
};
fileSystems."/nix" = {
device = "rpool/local/nix";
fsType = "zfs";
options = [ "zfsutil" ];
};
fileSystems."/persist" = {
device = "rpool/safe/persist";
fsType = "zfs";
options = [ "zfsutil" ];
neededForBoot = true;
};
} }

View file

@ -233,6 +233,18 @@
}; };
root = { root = {
useTmpfs = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Use tmpfs for root instead of ZFS (with ZFS datasets for /nix and /persist)";
};
tmpfsSize = lib.mkOption {
type = lib.types.str;
default = "2G";
description = "Size of tmpfs root filesystem";
};
encrypt = lib.mkOption { encrypt = lib.mkOption {
type = lib.types.bool; type = lib.types.bool;
default = true; default = true;