WiP
This commit is contained in:
		
							parent
							
								
									6d9a15d2f2
								
							
						
					
					
						commit
						7813b8e037
					
				
					 10 changed files with 111 additions and 25 deletions
				
			
		
							
								
								
									
										0
									
								
								TODO.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								TODO.md
									
									
									
									
									
										Normal 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": {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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";
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
							
								
								
									
										27
									
								
								hosts/base/hardware-config.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								hosts/base/hardware-config.nix
									
									
									
									
									
										Normal 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";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -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;
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
							
								
								
									
										6
									
								
								lib.nix
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								lib.nix
									
									
									
									
									
								
							| 
						 | 
					@ -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;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,5 +5,6 @@
 | 
				
			||||||
    ./networking
 | 
					    ./networking
 | 
				
			||||||
    ./users
 | 
					    ./users
 | 
				
			||||||
    ./locale
 | 
					    ./locale
 | 
				
			||||||
 | 
					    ./drives
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										51
									
								
								nixosModules/drives/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								nixosModules/drives/default.nix
									
									
									
									
									
										Normal 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";
 | 
				
			||||||
 | 
					                };
 | 
				
			||||||
 | 
					              };
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					          };
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -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);
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue