This commit is contained in:
Evan Reichard 2025-04-05 12:56:54 -04:00
parent 4b59691aae
commit b7bcb353f7
10 changed files with 134 additions and 114 deletions

View File

@ -43,6 +43,13 @@
}; };
}; };
channels-config = {
allowUnfree = true;
permittedInsecurePackages = [
"intel-ocl-5.0-63503"
];
};
homes.modules = with inputs; [ homes.modules = with inputs; [
sops-nix.homeManagerModules.sops sops-nix.homeManagerModules.sops
]; ];

View File

@ -1,6 +1,6 @@
{ config, lib, pkgs, namespace, ... }: { config, lib, pkgs, namespace, ... }:
let let
inherit (lib) mkIf; inherit (lib) mkIf mkForce;
inherit (lib.${namespace}) mkBoolOpt; inherit (lib.${namespace}) mkBoolOpt;
cfg = config.${namespace}.hardware.opengl; cfg = config.${namespace}.hardware.opengl;
@ -8,7 +8,7 @@ in
{ {
options.${namespace}.hardware.opengl = { options.${namespace}.hardware.opengl = {
enable = lib.mkEnableOption "support for opengl"; enable = lib.mkEnableOption "support for opengl";
enable32Bit = mkBoolOpt false "enabel 32-bit"; enable32Bit = mkBoolOpt false "enable 32-bit";
enableIntel = mkBoolOpt false "support for intel"; enableIntel = mkBoolOpt false "support for intel";
enableNvidia = mkBoolOpt false "support for nvidia"; enableNvidia = mkBoolOpt false "support for nvidia";
}; };
@ -19,8 +19,12 @@ in
vdpauinfo vdpauinfo
] ++ lib.optionals cfg.enableNvidia [ ] ++ lib.optionals cfg.enableNvidia [
nvtopPackages.full nvtopPackages.full
] ++ lib.optionals cfg.enableIntel [
intel-gpu-tools
]; ];
# Add Intel Arc / Nvidia Drivers
hardware.enableRedistributableFirmware = cfg.enableIntel;
hardware.graphics = { hardware.graphics = {
enable = true; enable = true;
enable32Bit = cfg.enable32Bit; enable32Bit = cfg.enable32Bit;

View File

@ -1,5 +1,6 @@
{ config, lib, pkgs, namespace, host, ... }: { config, lib, pkgs, namespace, host, ... }:
let let
inherit (lib) types mkIf;
inherit (lib.${namespace}) mkBoolOpt mkOpt; inherit (lib.${namespace}) mkBoolOpt mkOpt;
cfg = config.${namespace}.nix; cfg = config.${namespace}.nix;
@ -7,10 +8,10 @@ in
{ {
options.${namespace}.nix = { options.${namespace}.nix = {
enable = mkBoolOpt true "Whether or not to manage nix configuration."; enable = mkBoolOpt true "Whether or not to manage nix configuration.";
package = mkOpt lib.types.package pkgs.nixVersions.latest "Which nix package to use."; package = mkOpt types.package pkgs.nixVersions.latest "Which nix package to use.";
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
nix = nix =
let let
users = [ users = [
@ -23,11 +24,10 @@ in
{ {
inherit (cfg) package; inherit (cfg) package;
buildMachines = lib.optional (host != "nixos-builder") { buildMachines = lib.optional (config.${namespace}.security.sops.enable && host != "nixos-builder") {
hostName = "10.0.50.130"; hostName = "10.0.50.130";
systems = [ "x86_64-linux" ]; systems = [ "x86_64-linux" ];
sshUser = "evanreichard"; sshUser = "evanreichard";
speedFactor = 1;
protocol = "ssh"; protocol = "ssh";
sshKey = config.sops.secrets.builder_ssh_key.path; sshKey = config.sops.secrets.builder_ssh_key.path;
supportedFeatures = [ supportedFeatures = [
@ -46,10 +46,6 @@ in
options = "--delete-older-than 7d"; options = "--delete-older-than 7d";
}; };
# This will additionally add your inputs to the system's legacy channels
# # Making legacy nix commands consistent as well
nixPath = lib.mapAttrsToList (key: _: "${key}=flake:${key}") config.nix.registry;
optimise.automatic = true; optimise.automatic = true;
settings = { settings = {

View File

@ -9,7 +9,7 @@ in
enable = lib.mkEnableOption "sops"; enable = lib.mkEnableOption "sops";
defaultSopsFile = mkOpt lib.types.path null "Default sops file."; defaultSopsFile = mkOpt lib.types.path null "Default sops file.";
sshKeyPaths = mkOpt (with lib.types; listOf path) [ sshKeyPaths = mkOpt (with lib.types; listOf path) [
"/etc/ssh/ssh_host_ed25519_key" # "/etc/ssh/ssh_host_ed25519_key"
] "SSH Key paths to use."; ] "SSH Key paths to use.";
}; };

View File

@ -0,0 +1,26 @@
{ config, lib, namespace, ... }:
let
inherit (lib) mkIf;
cfg = config.${namespace}.services.cloud-init;
in
{
options.${namespace}.services.cloud-init = {
enable = lib.mkEnableOption "Enable Cloud-Init";
};
config = mkIf cfg.enable {
services.cloud-init = {
enable = true;
network.enable = true;
settings = {
datasource_list = [ "NoCloud" ];
preserve_hostname = false;
system_info = {
distro = "nixos";
network.renderers = [ "networkd" ];
};
};
};
};
}

View File

@ -0,0 +1,34 @@
{ config, pkgs, lib, namespace, host, ... }:
let
inherit (lib) types mkIf;
inherit (lib.${namespace}) mkOpt;
cfg = config.${namespace}.services.openiscsi;
in
{
options.${namespace}.services.openiscsi = {
enable = lib.mkEnableOption "Open iSCSI support";
name = mkOpt types.str "iqn.2025.reichard.io:${host}" "iSCSI name";
symlink = mkOpt types.bool false "Create a symlink to the iSCSI binaries";
};
config = mkIf cfg.enable {
boot.kernelModules = [ "iscsi_tcp" "libiscsi" "scsi_transport_iscsi" ];
services.openiscsi = {
enable = true;
name = cfg.name;
};
environment.systemPackages = with pkgs; [
openiscsi
];
# Predominately used for RKE2 & Democratic CSI
system.activationScripts.iscsi-symlink = mkIf cfg.symlink ''
mkdir -p /usr/bin
ln -sf ${pkgs.openiscsi}/bin/iscsiadm /usr/bin/iscsiadm
ln -sf ${pkgs.openiscsi}/bin/iscsid /usr/bin/iscsid
'';
};
}

View File

@ -1,4 +1,4 @@
{ config, format, lib, namespace, ... }: { config, lib, namespace, ... }:
let let
inherit (lib) inherit (lib)
types types
@ -40,7 +40,7 @@ in
AuthenticationMethods = "publickey"; AuthenticationMethods = "publickey";
ChallengeResponseAuthentication = "no"; ChallengeResponseAuthentication = "no";
PasswordAuthentication = false; PasswordAuthentication = false;
PermitRootLogin = if format == "install-iso" then "yes" else "no"; PermitRootLogin = "prohibit-password";
PubkeyAuthentication = "yes"; PubkeyAuthentication = "yes";
StreamLocalBindUnlink = "yes"; StreamLocalBindUnlink = "yes";
UseDns = false; UseDns = false;

View File

@ -0,0 +1,20 @@
{ config, lib, namespace, ... }:
let
inherit (lib) types mkIf;
inherit (lib.${namespace}) mkOpt;
cfg = config.${namespace}.services.rke2;
in
{
options.${namespace}.services.rke2 = with types; {
enable = lib.mkEnableOption "Enabel RKE2";
disable = mkOpt (listOf str) [ ] "Disable services";
};
config = mkIf cfg.enable {
services.rke2 = {
enable = true;
disable = cfg.disable;
};
};
}

View File

@ -43,11 +43,9 @@ in
}; };
initrd = mkIf cfg.xenGuest { initrd = mkIf cfg.xenGuest {
availableKernelModules = [ "xen_blkfront" "xen_netfront" ];
kernelModules = [ "xen_netfront" "xen_blkfront" ]; kernelModules = [ "xen_netfront" "xen_blkfront" ];
supportedFilesystems = [ "ext4" "xenfs" ]; supportedFilesystems = [ "xenfs" ];
}; };
kernelModules = mkIf cfg.xenGuest [ "xen_netfront" "xen_blkfront" "xenfs" ]; kernelModules = mkIf cfg.xenGuest [ "xen_netfront" "xen_blkfront" "xenfs" ];
}; };
}; };

View File

@ -1,16 +1,46 @@
{ pkgs, lib, modulesPath, ... }: { pkgs, namespace, lib, modulesPath, ... }:
let
inherit (lib.${namespace}) enabled;
in
{ {
imports = [ imports = [
(modulesPath + "/profiles/qemu-guest.nix") (modulesPath + "/profiles/qemu-guest.nix")
]; ];
config = { config = {
reichard = { reichard = {
nix.enable = false; nix = enabled;
system = {
boot = {
enable = true;
xenGuest = true;
};
};
services = {
openssh = enabled;
cloud-init = enabled;
rke2 = {
enable = true;
disable = [ "rke2-ingress-nginx" ];
};
openiscsi = {
enable = true;
symlink = true;
};
};
hardware = {
opengl = {
enable = true;
enableIntel = true;
};
};
}; };
# Basic System # Basic System
system.stateVersion = "24.11"; system.stateVersion = "24.11";
nix.settings.experimental-features = [ "nix-command" "flakes" ];
time.timeZone = "UTC"; time.timeZone = "UTC";
fileSystems."/" = { fileSystems."/" = {
@ -19,41 +49,6 @@
autoResize = true; autoResize = true;
}; };
boot = {
initrd = {
availableKernelModules = [
# Xen
"xen_blkfront"
"xen_netfront"
];
kernelModules = [ "xen_netfront" "xen_blkfront" ];
supportedFilesystems = [ "ext4" "xenfs" ];
};
kernelModules = [
# Xen VM Requirements
"xen_netfront"
"xen_blkfront"
"xenfs"
# iSCSI
"iscsi_tcp"
];
};
# Add Intel Arc A310 GPU Drivers
nixpkgs.config.allowUnfree = true;
hardware.enableRedistributableFirmware = true;
hardware.graphics = {
enable = true;
extraPackages = with pkgs; [
libvdpau-va-gl
intel-vaapi-driver
intel-media-driver
intel-compute-runtime
intel-ocl
];
};
# Network Configuration # Network Configuration
networking = { networking = {
hostName = lib.mkForce ""; hostName = lib.mkForce "";
@ -88,44 +83,6 @@
}; };
}; };
services = {
# Enable Xen Guest Utilities
xe-guest-utilities.enable = true;
# Enable iSCSI
openiscsi = {
enable = true;
name = "iqn.2025.placeholder:initiator"; # Overridden @ Runtime
};
# Cloud Init
cloud-init = {
enable = true;
network.enable = true;
settings = {
datasource_list = [ "NoCloud" ];
preserve_hostname = false;
system_info.distro = "nixos";
system_info.network.renderers = [ "networkd" ];
};
};
# Enable SSH
openssh = {
enable = true;
settings = {
PasswordAuthentication = false;
PermitRootLogin = "prohibit-password";
};
};
# Enable RKE2
rke2 = {
enable = true;
disable = [ "rke2-ingress-nginx" ];
};
};
systemd.services = { systemd.services = {
# RKE2 - Wait Cloud Init # RKE2 - Wait Cloud Init
rke2-server = { rke2-server = {
@ -155,33 +112,11 @@
}; };
}; };
# User Authorized Keys
users.users.root = {
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIe1n9l9pVF5+kjWJCOt3AvBVf1HOSZkEDZxCWVPSIkr evan@reichard"
];
hashedPassword = null;
};
# Add Symlinks Expected by Democratic
system.activationScripts = {
iscsi-initiator = ''
mkdir -p /usr/bin
ln -sf ${pkgs.openiscsi}/bin/iscsiadm /usr/bin/iscsiadm
ln -sf ${pkgs.openiscsi}/bin/iscsid /usr/bin/iscsid
'';
};
# System Packages # System Packages
environment = { environment = {
systemPackages = with pkgs; [ systemPackages = with pkgs; [
htop htop
intel-gpu-tools
k9s
kubectl
kubernetes-helm
nfs-utils nfs-utils
openiscsi
tmux tmux
vim vim
]; ];