WIP systemd-networkd dhcp server module.
This commit is contained in:
		
							parent
							
								
									513f4eb518
								
							
						
					
					
						commit
						b85bdbb787
					
				
					 5 changed files with 1392 additions and 16 deletions
				
			
		| 
						 | 
					@ -1,4 +1,6 @@
 | 
				
			||||||
{lib}: {
 | 
					{lib}: {
 | 
				
			||||||
 | 
					  imports=[./net.nix];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  dirToStrings = dir: (map (v: builtins.readFile "${dir}/${v}")
 | 
					  dirToStrings = dir: (map (v: builtins.readFile "${dir}/${v}")
 | 
				
			||||||
    (builtins.filter (v:
 | 
					    (builtins.filter (v:
 | 
				
			||||||
      (builtins.readFileType "${dir}/${v}") == "regular") (
 | 
					      (builtins.readFileType "${dir}/${v}") == "regular") (
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										1269
									
								
								lib/net.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1269
									
								
								lib/net.nix
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							| 
						 | 
					@ -14,22 +14,10 @@
 | 
				
			||||||
        type = lib.types.str;
 | 
					        type = lib.types.str;
 | 
				
			||||||
        description = "Primary human users long name";
 | 
					        description = "Primary human users long name";
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      gui.enable = lib.mkEnableOption {
 | 
					      gui.enable = lib.mkEnableOption "enable GUI";
 | 
				
			||||||
        description = "enable GUI";
 | 
					      isLaptop = lib.mkEnableOption "machine is a laptop";
 | 
				
			||||||
        default = false;
 | 
					      isVm = lib.mkEnableOption "machine is a virtual machine";
 | 
				
			||||||
      };
 | 
					      isSever = lib.mkEnableOption "machine is primarily a server";
 | 
				
			||||||
      isLaptop = lib.mkEnableOption {
 | 
					 | 
				
			||||||
        description = "machine is a laptop";
 | 
					 | 
				
			||||||
        default = false;
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
      isVm = lib.mkEnableOption {
 | 
					 | 
				
			||||||
        description = "machine is a virtual machine";
 | 
					 | 
				
			||||||
        default = false;
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
      isSever = lib.mkEnableOption {
 | 
					 | 
				
			||||||
        description = "machine is primarily a server";
 | 
					 | 
				
			||||||
        default = false;
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										9
									
								
								modules/nixos/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								modules/nixos/default.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,9 @@
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  config,
 | 
				
			||||||
 | 
					  pkgs,
 | 
				
			||||||
 | 
					  lib,
 | 
				
			||||||
 | 
					  inputs,
 | 
				
			||||||
 | 
					  ...
 | 
				
			||||||
 | 
					}: {
 | 
				
			||||||
 | 
					  imports=[./systemd-dhcpServ.nix];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										108
									
								
								modules/nixos/systemd-dhcpServ.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								modules/nixos/systemd-dhcpServ.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,108 @@
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  config,
 | 
				
			||||||
 | 
					  pkgs,
 | 
				
			||||||
 | 
					  lib,
 | 
				
			||||||
 | 
					  inputs,
 | 
				
			||||||
 | 
					  ...
 | 
				
			||||||
 | 
					}: {
 | 
				
			||||||
 | 
					  options = {
 | 
				
			||||||
 | 
					    host.systemdDhcpSrv = {
 | 
				
			||||||
 | 
					      enable = lib.mkEnableOption "systemd DHCP server";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      interface = lib.mkOption {
 | 
				
			||||||
 | 
					        type = lib.types.str;
 | 
				
			||||||
 | 
					        description = "interface to run dhcp server on";
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      uplinkInterface = lib.mkOption {
 | 
				
			||||||
 | 
					        type = lib.types.str;
 | 
				
			||||||
 | 
					        description = "if dns, router, or ntp are set but no adresses are set, pass on the settings of this interface.";
 | 
				
			||||||
 | 
					        default = ":auto";
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      pool = lib.mkOption {
 | 
				
			||||||
 | 
					        description = "the pool of ips the dhcp server will hand out.";
 | 
				
			||||||
 | 
					        type = lib.types.submodule {
 | 
				
			||||||
 | 
					          options = {
 | 
				
			||||||
 | 
					            start = lib.mkOption {
 | 
				
			||||||
 | 
					              type = lib.types.str;
 | 
				
			||||||
 | 
					              description = "starting IP of the range the dhcp server will assign";
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					            end = lib.mkOption {
 | 
				
			||||||
 | 
					              type = lib.types.str;
 | 
				
			||||||
 | 
					              description = "ending IP of the range the dhcp server will assign";
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					          };
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      time = lib.mkOption {
 | 
				
			||||||
 | 
					        type = lib.types.submodule {
 | 
				
			||||||
 | 
					          options = {
 | 
				
			||||||
 | 
					            default = lib.mkOption {
 | 
				
			||||||
 | 
					              description = "the default dhcp lease time, in seconds, defaults to 1h";
 | 
				
			||||||
 | 
					              type = lib.types.nullOr lib.types.int;
 | 
				
			||||||
 | 
					              default = null;
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					            max = lib.mkOption {
 | 
				
			||||||
 | 
					              description = "the max dhcp lease time, in seconds. defaults to 12h";
 | 
				
			||||||
 | 
					              type = lib.types.nullOr lib.types.int;
 | 
				
			||||||
 | 
					              default = null;
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					          };
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      dns = lib.mkoption {
 | 
				
			||||||
 | 
					        type = lib.types.submodule {
 | 
				
			||||||
 | 
					          options = {
 | 
				
			||||||
 | 
					            enable = lib.mkOption {
 | 
				
			||||||
 | 
					              type = lib.types.bool;
 | 
				
			||||||
 | 
					              default = true;
 | 
				
			||||||
 | 
					              description = "whether to include dns server info in the dhcp lease";
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					            servers = lib.mkOption {
 | 
				
			||||||
 | 
					              type = lib.types.listOf lib.types.str;
 | 
				
			||||||
 | 
					              description = "IPs of dns servers to hand out";
 | 
				
			||||||
 | 
					              default = [];
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					          };
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      router = lib.mkoption {
 | 
				
			||||||
 | 
					        type = lib.types.submodule {
 | 
				
			||||||
 | 
					          options = {
 | 
				
			||||||
 | 
					            enable = lib.mkOption {
 | 
				
			||||||
 | 
					              type = lib.types.bool;
 | 
				
			||||||
 | 
					              default = true;
 | 
				
			||||||
 | 
					              description = "whether to include router (gateway) info in the dhcp lease";
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					            servers = lib.mkOption {
 | 
				
			||||||
 | 
					              type = lib.types.listOf lib.types.str;
 | 
				
			||||||
 | 
					              description = "IPs of dns servers to hand out";
 | 
				
			||||||
 | 
					              default = [];
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					          };
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      ntp = lib.mkoption {
 | 
				
			||||||
 | 
					        type = lib.types.submodule {
 | 
				
			||||||
 | 
					          options = {
 | 
				
			||||||
 | 
					            enable = lib.mkOption {
 | 
				
			||||||
 | 
					              type = lib.types.bool;
 | 
				
			||||||
 | 
					              default = true;
 | 
				
			||||||
 | 
					              description = "whether to include ntp server info in the dhcp lease";
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					            servers = lib.mkOption {
 | 
				
			||||||
 | 
					              type = lib.types.listOf lib.types.str;
 | 
				
			||||||
 | 
					              description = "IPs of ntp servers to hand out";
 | 
				
			||||||
 | 
					              default = [];
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					          };
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue