This commit is contained in:
Jakub Kropáček 2024-12-20 10:03:05 +01:00
parent 6d9a15d2f2
commit 7813b8e037
10 changed files with 111 additions and 25 deletions

0
TODO.md Normal file
View file

View file

@ -22,11 +22,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1734536697, "lastModified": 1734623593,
"narHash": "sha256-G/HnRTtU+ob8x967kjzMRqjNFbAdllrcjYc+IcaR15Y=", "narHash": "sha256-iA3kxtbds7yOc77oRBz2On9ZmOVI/1Pic+YQtYUyIsg=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "9c40bef08a5bdc0ccc3207f4282a1ded83e77a7a", "rev": "8af52ff6ba2ed83047881e877718db3bb02fad85",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -2,6 +2,10 @@
... ...
}: }:
{ {
imports = [
./hardware-config.nix
];
nixpkgs.config.allowUnfree = true; nixpkgs.config.allowUnfree = true;
kropcloud = { kropcloud = {
@ -19,5 +23,7 @@
}; };
}; };
services.qemuGuest.enable = true;
system.stateVersion = "24.11"; system.stateVersion = "24.11";
} }

View file

@ -0,0 +1,27 @@
{
config,
lib,
pkgs,
modulesPath,
...
}:
{
imports = [
(modulesPath + "/profiles/qemu-guest.nix")
];
boot.initrd.availableKernelModules = [
"ata_piix"
"uhci_hcd"
"virtio_pci"
"virtio_scsi"
"sd_mod"
"sr_mod"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ ];
boot.extraModulePackages = [ ];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
}

View file

@ -3,7 +3,6 @@
kropcloud = { kropcloud = {
networking = { networking = {
ipv4 = { ipv4 = {
enable = true;
address = "192.168.1.160"; address = "192.168.1.160";
prefixLength = 24; prefixLength = 24;
}; };

View file

@ -11,8 +11,8 @@
nixpkgs.lib.nixosSystem { nixpkgs.lib.nixosSystem {
system = arch; system = arch;
modules = [ modules = [
./hosts/base.nix ./hosts/base
./hosts/${name}.nix ./hosts/${name}
./nixosModules ./nixosModules
( (
{ ... }: { ... }:
@ -22,6 +22,8 @@
}; };
} }
) )
inputs.disko.nixosModules.disko
]; ];
specialArgs = { specialArgs = {
inherit inputs; inherit inputs;

View file

@ -5,5 +5,6 @@
./networking ./networking
./users ./users
./locale ./locale
./drives
]; ];
} }

View file

@ -0,0 +1,51 @@
{
config,
lib,
...
}:
let
cfg = config.kropcloud.drives;
in
{
options.kropcloud.drives = {
hasSecondDrive = lib.mkEnableOption "Whence this VM has second drive";
};
config = {
disko.devices = {
disk = {
main = {
type = "disk";
device = "/dev/sda";
content = {
type = "gpt";
partitions = {
ESP = {
type = "EF00";
size = "512M";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
};
};
root = {
end = "-8GB";
content = {
type = "filesystem";
format = "ext4";
mountpoint = "/";
};
};
swap = {
size = "100%";
content = {
type = "swap";
};
};
};
};
};
};
};
};
}

View file

@ -5,6 +5,20 @@
}: }:
let let
cfg = config.kropcloud.networking; cfg = config.kropcloud.networking;
ipopts = version: {
address = lib.mkOption {
type = lib.types.nullOr lib.types.str;
description = "The server IPv${version} address";
example = if version == 4 then "192.168.1.155" else null;
default = null;
};
prefixLength = lib.mkOption {
type = lib.types.nullOr lib.types.int;
description = "The server IPv${version} address prefix length";
default = null;
example = if version == 4 then 24 else 64;
};
};
in in
{ {
options.kropcloud.networking = { options.kropcloud.networking = {
@ -14,31 +28,16 @@ in
default = true; default = true;
example = false; example = false;
}; };
# TODO: fix this madness ipv4 = ipopts 4;
ipv4 = {
enable = lib.mkEnableOption "Whence to enable IPv4 configuration";
address = lib.mkOption {
type = lib.types.nullOr lib.types.str;
description = "The server IPv4 address";
example = "192.168.1.155";
default = null;
};
prefixLength = lib.mkOption {
type = lib.types.int;
description = "The server IPv4 address prefix length";
default = 24;
example = 24;
};
};
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
assertions = [ assertions = [
{ {
assertion = !(cfg.ipv4.enable && (cfg.ipv4.address == null || cfg.ipv4.address == "" || cfg.ipv4.prefixLength == null)); assertion = !(cfg.ipv4.address == null || cfg.ipv4.prefixLength == null);
message = '' message = ''
You need to provide valid values for both `address` and `prefixLength` in `kropcloud.networking.ipv4` You need to provide valid values for both `address` and `prefixLength` in `kropcloud.networking.ipv4`
when `kropcloud.networking.ipv4.enable` is true. when either is set.
''; '';
} }
]; ];
@ -50,7 +49,7 @@ in
}; };
interfaces = { interfaces = {
ens18 = { ens18 = {
ipv4.addresses = lib.mkIf cfg.ipv4.enable [ ipv4.addresses = lib.mkIf (cfg.ipv4.address != null || cfg.ipv4.prefixLength != null) [
{ {
address = cfg.ipv4.address; address = cfg.ipv4.address;
prefixLength = cfg.ipv4.prefixLength; prefixLength = cfg.ipv4.prefixLength;
@ -58,6 +57,7 @@ in
]; ];
}; };
}; };
useDHCP = (cfg.ipv4.address == null || cfg.ipv4.prefixLength == null);
}; };
}; };
} }