nixos/sfh: Working containers
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				CI / Check, build and cache Nix flake (push) Successful in 44m19s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	CI / Check, build and cache Nix flake (push) Successful in 44m19s
				
			This commit is contained in:
		@@ -1,6 +1,6 @@
 | 
			
		||||
{ lib, pkgs, options, config, systems, ... }:
 | 
			
		||||
let
 | 
			
		||||
  inherit (builtins) attrNames attrValues all hashString toJSON;
 | 
			
		||||
  inherit (builtins) attrNames attrValues all hashString toJSON any;
 | 
			
		||||
  inherit (lib)
 | 
			
		||||
    groupBy' mapAttrsToList optionalString optional concatMapStringsSep filterAttrs mkOption mkDefault mkIf mkMerge;
 | 
			
		||||
  inherit (lib.my) mkOpt' mkBoolOpt';
 | 
			
		||||
@@ -98,6 +98,7 @@ let
 | 
			
		||||
      };
 | 
			
		||||
      networking = {
 | 
			
		||||
        bridge = mkOpt' (nullOr str) null "Network bridge to connect to.";
 | 
			
		||||
        macVLAN = mkOpt' (nullOr str) null "Network interface to make MACVLAN interface from.";
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
@@ -115,13 +116,17 @@ in
 | 
			
		||||
          assertion = config.systemd.network.enable;
 | 
			
		||||
          message = "Containers currently require systemd-networkd!";
 | 
			
		||||
        }
 | 
			
		||||
        {
 | 
			
		||||
          assertion = all (i: i.networking.bridge == null || i.networking.macVLAN == null) (attrValues cfg.instances);
 | 
			
		||||
          message = "Only bridge OR MACVLAN can be set";
 | 
			
		||||
        }
 | 
			
		||||
      ];
 | 
			
		||||
 | 
			
		||||
      # TODO: Better security
 | 
			
		||||
      my.firewall.trustedInterfaces =
 | 
			
		||||
        mapAttrsToList
 | 
			
		||||
          (n: _: "ve-${n}")
 | 
			
		||||
          (filterAttrs (_: c: c.networking.bridge == null) cfg.instances);
 | 
			
		||||
          (filterAttrs (_: c: c.networking.bridge == null && c.networking.macVLAN == null) cfg.instances);
 | 
			
		||||
 | 
			
		||||
      systemd = mkMerge (mapAttrsToList (n: c: {
 | 
			
		||||
        nspawn."${n}" = {
 | 
			
		||||
@@ -154,6 +159,8 @@ in
 | 
			
		||||
          };
 | 
			
		||||
          networkConfig = if (c.networking.bridge != null) then {
 | 
			
		||||
            Bridge = c.networking.bridge;
 | 
			
		||||
          } else if (c.networking.macVLAN != null) then {
 | 
			
		||||
            MACVLAN = "${c.networking.macVLAN}:host0";
 | 
			
		||||
          } else {
 | 
			
		||||
            VirtualEthernet = true;
 | 
			
		||||
          };
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user