Compare commits
	
		
			2 Commits
		
	
	
		
			e8090b2915
			...
			a3870a4293
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| a3870a4293 | |||
| 8f4b61fc2b | 
							
								
								
									
										54
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										54
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							@@ -193,11 +193,11 @@
 | 
				
			|||||||
        ]
 | 
					        ]
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1728330715,
 | 
					        "lastModified": 1735644329,
 | 
				
			||||||
        "narHash": "sha256-xRJ2nPOXb//u1jaBnDP56M7v5ldavjbtR6lfGqSvcKg=",
 | 
					        "narHash": "sha256-tO3HrHriyLvipc4xr+Ewtdlo7wM1OjXNjlWRgmM7peY=",
 | 
				
			||||||
        "owner": "numtide",
 | 
					        "owner": "numtide",
 | 
				
			||||||
        "repo": "devshell",
 | 
					        "repo": "devshell",
 | 
				
			||||||
        "rev": "dd6b80932022cea34a019e2bb32f6fa9e494dfef",
 | 
					        "rev": "f7795ede5b02664b57035b3b757876703e2c3eac",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -437,11 +437,11 @@
 | 
				
			|||||||
        ]
 | 
					        ]
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732466619,
 | 
					        "lastModified": 1739757849,
 | 
				
			||||||
        "narHash": "sha256-T1e5oceypZu3Q8vzICjv1X/sGs9XfJRMW5OuXHgpB3c=",
 | 
					        "narHash": "sha256-Gs076ot1YuAAsYVcyidLKUMIc4ooOaRGO0PqTY7sBzA=",
 | 
				
			||||||
        "owner": "nix-community",
 | 
					        "owner": "nix-community",
 | 
				
			||||||
        "repo": "home-manager",
 | 
					        "repo": "home-manager",
 | 
				
			||||||
        "rev": "f3111f62a23451114433888902a55cf0692b408d",
 | 
					        "rev": "9d3d080aec2a35e05a15cedd281c2384767c2cfe",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -457,11 +457,11 @@
 | 
				
			|||||||
        ]
 | 
					        ]
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732884235,
 | 
					        "lastModified": 1741457641,
 | 
				
			||||||
        "narHash": "sha256-r8j6R3nrvwbT1aUp4EPQ1KC7gm0pu9VcV1aNaB+XG6Q=",
 | 
					        "narHash": "sha256-HIoSAfme6BReJI8wbtZxSuALfI21OqagDPlbGkeVX0c=",
 | 
				
			||||||
        "owner": "nix-community",
 | 
					        "owner": "nix-community",
 | 
				
			||||||
        "repo": "home-manager",
 | 
					        "repo": "home-manager",
 | 
				
			||||||
        "rev": "819f682269f4e002884702b87e445c82840c68f2",
 | 
					        "rev": "2c87a6475fba12c9eb04ccb7375da0e32da48dc1",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -471,11 +471,11 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "impermanence": {
 | 
					    "impermanence": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1731242966,
 | 
					        "lastModified": 1737831083,
 | 
				
			||||||
        "narHash": "sha256-B3C3JLbGw0FtLSWCjBxU961gLNv+BOOBC6WvstKLYMw=",
 | 
					        "narHash": "sha256-LJggUHbpyeDvNagTUrdhe/pRVp4pnS6wVKALS782gRI=",
 | 
				
			||||||
        "owner": "nix-community",
 | 
					        "owner": "nix-community",
 | 
				
			||||||
        "repo": "impermanence",
 | 
					        "repo": "impermanence",
 | 
				
			||||||
        "rev": "3ed3f0eaae9fcc0a8331e77e9319c8a4abd8a71a",
 | 
					        "rev": "4b3e914cdf97a5b536a889e939fb2fd2b043a170",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -545,11 +545,11 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "nixpkgs-mine": {
 | 
					    "nixpkgs-mine": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1738258527,
 | 
					        "lastModified": 1741543477,
 | 
				
			||||||
        "narHash": "sha256-qMRx0rK9VDEdd69Vdjmh8opSAtQGcE8qz0goQ+qt7Jk=",
 | 
					        "narHash": "sha256-CIXkalXwVcUFxb2TF33j45GlWWVHGmHu0GaMvVM/f6M=",
 | 
				
			||||||
        "owner": "devplayer0",
 | 
					        "owner": "devplayer0",
 | 
				
			||||||
        "repo": "nixpkgs",
 | 
					        "repo": "nixpkgs",
 | 
				
			||||||
        "rev": "fcf13e28c9c9aacfde5096ef45c55491eeb233e9",
 | 
					        "rev": "811543d59a6dec53bd025bb17be0896f3c37c03a",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -561,11 +561,11 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "nixpkgs-mine-stable": {
 | 
					    "nixpkgs-mine-stable": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732985894,
 | 
					        "lastModified": 1741456679,
 | 
				
			||||||
        "narHash": "sha256-YYuQQCcSF6KjgtAenZJiBmqt5jqP3UvYgC424VQ+22s=",
 | 
					        "narHash": "sha256-5f6f3yFT4+KDV02PXlKxhJ7ig++oa+NzGwlW8vxWPHk=",
 | 
				
			||||||
        "owner": "devplayer0",
 | 
					        "owner": "devplayer0",
 | 
				
			||||||
        "repo": "nixpkgs",
 | 
					        "repo": "nixpkgs",
 | 
				
			||||||
        "rev": "e0a3f4e2bbc5f7b681e344b389dcbab23f2e92a8",
 | 
					        "rev": "c82613e3e6a22d4cc1e80e1e91bea15c601dbbe7",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -577,11 +577,11 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "nixpkgs-stable": {
 | 
					    "nixpkgs-stable": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732824227,
 | 
					        "lastModified": 1741332913,
 | 
				
			||||||
        "narHash": "sha256-fYNXgpu1AEeLyd3fQt4Ym0tcVP7cdJ8wRoqJ+CtTRyY=",
 | 
					        "narHash": "sha256-ri1e8ZliWS3Jnp9yqpKApHaOo7KBN33W8ECAKA4teAQ=",
 | 
				
			||||||
        "owner": "NixOS",
 | 
					        "owner": "NixOS",
 | 
				
			||||||
        "repo": "nixpkgs",
 | 
					        "repo": "nixpkgs",
 | 
				
			||||||
        "rev": "c71ad5c34d51dcbda4c15f44ea4e4aa6bb6ac1e9",
 | 
					        "rev": "20755fa05115c84be00b04690630cb38f0a203ad",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -592,11 +592,11 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "nixpkgs-unstable": {
 | 
					    "nixpkgs-unstable": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732758367,
 | 
					        "lastModified": 1741246872,
 | 
				
			||||||
        "narHash": "sha256-RzaI1RO0UXqLjydtz3GAXSTzHkpb/lLD1JD8a0W4Wpo=",
 | 
					        "narHash": "sha256-Q6pMP4a9ed636qilcYX8XUguvKl/0/LGXhHcRI91p0U=",
 | 
				
			||||||
        "owner": "NixOS",
 | 
					        "owner": "NixOS",
 | 
				
			||||||
        "repo": "nixpkgs",
 | 
					        "repo": "nixpkgs",
 | 
				
			||||||
        "rev": "fa42b5a5f401aab8a32bd33c9a4de0738180dc59",
 | 
					        "rev": "10069ef4cf863633f57238f179a0297de84bd8d3",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -785,11 +785,11 @@
 | 
				
			|||||||
        "sbt": "sbt"
 | 
					        "sbt": "sbt"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1720592125,
 | 
					        "lastModified": 1741328331,
 | 
				
			||||||
        "narHash": "sha256-vR89LefkY8mBPWxDTQ8SNg6Z7/J6Yga80T4kSb6MNdk=",
 | 
					        "narHash": "sha256-OtsHm9ykxfAOMRcgFDsqFBBy5Wu0ag7eq1qmTIluVcw=",
 | 
				
			||||||
        "owner": "eikek",
 | 
					        "owner": "eikek",
 | 
				
			||||||
        "repo": "sharry",
 | 
					        "repo": "sharry",
 | 
				
			||||||
        "rev": "604b20517150599cb05dbe178cd35cd10659aa4c",
 | 
					        "rev": "6203b90f9a76357d75c108a27ad00f323d45c1d0",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,8 +27,8 @@ rec {
 | 
				
			|||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  kernel = {
 | 
					  kernel = {
 | 
				
			||||||
    lts = pkgs: pkgs.linuxKernel.packages.linux_6_6;
 | 
					    lts = pkgs: pkgs.linuxKernel.packages.linux_6_12;
 | 
				
			||||||
    latest = pkgs: pkgs.linuxKernel.packages.linux_6_12;
 | 
					    latest = pkgs: pkgs.linuxKernel.packages.linux_6_13;
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  nginx = rec {
 | 
					  nginx = rec {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,7 +53,7 @@ rec {
 | 
				
			|||||||
    in mkApp "${app}/bin/${app.meta.mainProgram}";
 | 
					    in mkApp "${app}/bin/${app.meta.mainProgram}";
 | 
				
			||||||
  flakePackageOverlay' = flake: pkg: system: (final: prev:
 | 
					  flakePackageOverlay' = flake: pkg: system: (final: prev:
 | 
				
			||||||
    let
 | 
					    let
 | 
				
			||||||
      pkg' = if pkg != null then flake.packages.${system}.${pkg} else flake.defaultPackage.${system};
 | 
					      pkg' = if pkg != null then flake.packages.${system}.${pkg} else flake.packages.${system}.default;
 | 
				
			||||||
      name = if pkg != null then pkg else pkg'.name;
 | 
					      name = if pkg != null then pkg else pkg'.name;
 | 
				
			||||||
    in
 | 
					    in
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -248,8 +248,8 @@ rec {
 | 
				
			|||||||
  in
 | 
					  in
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    trivial = prev.trivial // {
 | 
					    trivial = prev.trivial // {
 | 
				
			||||||
      release = "24.12:u-${prev.trivial.release}";
 | 
					      release = "25.03:u-${prev.trivial.release}";
 | 
				
			||||||
      codeName = "Epic";
 | 
					      codeName = "Frick";
 | 
				
			||||||
      revisionWithDefault = default: self.rev or default;
 | 
					      revisionWithDefault = default: self.rev or default;
 | 
				
			||||||
      versionSuffix = ".${date}.${revCode self}:u-${revCode pkgsFlake}";
 | 
					      versionSuffix = ".${date}.${revCode self}:u-${revCode pkgsFlake}";
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,23 +11,24 @@ in
 | 
				
			|||||||
  config = {
 | 
					  config = {
 | 
				
			||||||
    my = {
 | 
					    my = {
 | 
				
			||||||
      secrets.files."britway/bgp-password-vultr.conf" = {
 | 
					      secrets.files."britway/bgp-password-vultr.conf" = {
 | 
				
			||||||
        owner = "bird2";
 | 
					        owner = "bird";
 | 
				
			||||||
        group = "bird2";
 | 
					        group = "bird";
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    environment.etc."bird/vultr-password.conf".source = config.age.secrets."britway/bgp-password-vultr.conf".path;
 | 
					    environment.etc."bird/vultr-password.conf".source = config.age.secrets."britway/bgp-password-vultr.conf".path;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    systemd = {
 | 
					    systemd = {
 | 
				
			||||||
      services.bird2.after = [ "systemd-networkd-wait-online@veth0.service" ];
 | 
					      services.bird.after = [ "systemd-networkd-wait-online@veth0.service" ];
 | 
				
			||||||
      network = {
 | 
					      network = {
 | 
				
			||||||
        config.networkConfig.ManageForeignRoutes = false;
 | 
					        config.networkConfig.ManageForeignRoutes = false;
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    services = {
 | 
					    services = {
 | 
				
			||||||
      bird2 = {
 | 
					      bird = {
 | 
				
			||||||
        enable = true;
 | 
					        enable = true;
 | 
				
			||||||
 | 
					        package = pkgs.bird2;
 | 
				
			||||||
        preCheckConfig = ''
 | 
					        preCheckConfig = ''
 | 
				
			||||||
          echo '"dummy"' > vultr-password.conf
 | 
					          echo '"dummy"' > vultr-password.conf
 | 
				
			||||||
        '';
 | 
					        '';
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,8 +8,9 @@ in
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  config = {
 | 
					  config = {
 | 
				
			||||||
    services = {
 | 
					    services = {
 | 
				
			||||||
      bird2 = {
 | 
					      bird = {
 | 
				
			||||||
        enable = true;
 | 
					        enable = true;
 | 
				
			||||||
 | 
					        package = pkgs.bird2;
 | 
				
			||||||
        # TODO: Clean up and modularise
 | 
					        # TODO: Clean up and modularise
 | 
				
			||||||
        config = ''
 | 
					        config = ''
 | 
				
			||||||
          define OWNAS = 211024;
 | 
					          define OWNAS = 211024;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -188,6 +188,11 @@
 | 
				
			|||||||
                hostBDF = "44:00.4";
 | 
					                hostBDF = "44:00.4";
 | 
				
			||||||
              };
 | 
					              };
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					            qemuFlags = [
 | 
				
			||||||
 | 
					              "device qemu-xhci,id=xhci"
 | 
				
			||||||
 | 
					              # Front-right port?
 | 
				
			||||||
 | 
					              "device usb-host,hostbus=1,hostport=4"
 | 
				
			||||||
 | 
					            ];
 | 
				
			||||||
          };
 | 
					          };
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  imports = [
 | 
					  imports = [
 | 
				
			||||||
    ./unifi.nix
 | 
					    ./unifi.nix
 | 
				
			||||||
 | 
					    ./hass.nix
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										58
									
								
								nixos/boxes/home/palace/vms/sfh/containers/hass.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								nixos/boxes/home/palace/vms/sfh/containers/hass.nix
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
				
			|||||||
 | 
					{ lib, ... }:
 | 
				
			||||||
 | 
					let
 | 
				
			||||||
 | 
					  inherit (lib.my) net;
 | 
				
			||||||
 | 
					  inherit (lib.my.c.home) domain prefixes vips hiMTU;
 | 
				
			||||||
 | 
					in
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  nixos.systems.hass = { config, ... }: {
 | 
				
			||||||
 | 
					    system = "x86_64-linux";
 | 
				
			||||||
 | 
					    nixpkgs = "mine";
 | 
				
			||||||
 | 
					    rendered = config.configuration.config.my.asContainer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assignments = {
 | 
				
			||||||
 | 
					      hi = {
 | 
				
			||||||
 | 
					        name = "hass-ctr";
 | 
				
			||||||
 | 
					        inherit domain;
 | 
				
			||||||
 | 
					        mtu = hiMTU;
 | 
				
			||||||
 | 
					        ipv4 = {
 | 
				
			||||||
 | 
					          address = net.cidr.host 103 prefixes.hi.v4;
 | 
				
			||||||
 | 
					          mask = 22;
 | 
				
			||||||
 | 
					          gateway = vips.hi.v4;
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					        ipv6 = {
 | 
				
			||||||
 | 
					          iid = "::5:3";
 | 
				
			||||||
 | 
					          address = net.cidr.host (65536*5+3) prefixes.hi.v6;
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    configuration = { lib, config, pkgs, assignments, ... }:
 | 
				
			||||||
 | 
					    let
 | 
				
			||||||
 | 
					      inherit (lib) mkMerge mkIf mkForce;
 | 
				
			||||||
 | 
					      inherit (lib.my) networkdAssignment;
 | 
				
			||||||
 | 
					    in
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      config = {
 | 
				
			||||||
 | 
					        my = {
 | 
				
			||||||
 | 
					          deploy.enable = false;
 | 
				
			||||||
 | 
					          server.enable = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          secrets = {
 | 
				
			||||||
 | 
					            key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGpYX2WbYwUqHp8bFFf0eHFrqrR8xp8IheguA054F8V4";
 | 
				
			||||||
 | 
					            files = { };
 | 
				
			||||||
 | 
					          };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          firewall = {
 | 
				
			||||||
 | 
					            tcp.allowed = [ ];
 | 
				
			||||||
 | 
					          };
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        systemd = {
 | 
				
			||||||
 | 
					          network.networks."80-container-host0" = networkdAssignment "host0" assignments.hi;
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        services = { };
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -83,6 +83,12 @@ in
 | 
				
			|||||||
          };
 | 
					          };
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        environment = {
 | 
				
			||||||
 | 
					          systemPackages = with pkgs; [
 | 
				
			||||||
 | 
					            usbutils
 | 
				
			||||||
 | 
					          ];
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        systemd.network = {
 | 
					        systemd.network = {
 | 
				
			||||||
          links = {
 | 
					          links = {
 | 
				
			||||||
            "10-lan-hi" = {
 | 
					            "10-lan-hi" = {
 | 
				
			||||||
@@ -141,7 +147,12 @@ in
 | 
				
			|||||||
          containers.instances =
 | 
					          containers.instances =
 | 
				
			||||||
          let
 | 
					          let
 | 
				
			||||||
            instances = {
 | 
					            instances = {
 | 
				
			||||||
              unifi = {};
 | 
					              # unifi = {};
 | 
				
			||||||
 | 
					              hass = {
 | 
				
			||||||
 | 
					                bindMounts = {
 | 
				
			||||||
 | 
					                  "/dev/bus/usb/001/002".readOnly = false;
 | 
				
			||||||
 | 
					                };
 | 
				
			||||||
 | 
					              };
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
          in
 | 
					          in
 | 
				
			||||||
          mkMerge [
 | 
					          mkMerge [
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
import argparse
 | 
					import argparse
 | 
				
			||||||
import subprocess
 | 
					import subprocess
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import CloudFlare
 | 
					import cloudflare
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def main():
 | 
					def main():
 | 
				
			||||||
    parser = argparse.ArgumentParser(description='Cloudflare DNS update script')
 | 
					    parser = argparse.ArgumentParser(description='Cloudflare DNS update script')
 | 
				
			||||||
@@ -19,17 +19,22 @@ def main():
 | 
				
			|||||||
    if args.api_token_file:
 | 
					    if args.api_token_file:
 | 
				
			||||||
        with open(args.api_token_file) as f:
 | 
					        with open(args.api_token_file) as f:
 | 
				
			||||||
            cf_token = f.readline().strip()
 | 
					            cf_token = f.readline().strip()
 | 
				
			||||||
 | 
					    cf = cloudflare.Cloudflare(api_token=cf_token)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    cf = CloudFlare.CloudFlare(token=cf_token)
 | 
					    zones = list(cf.zones.list(name=args.zone))
 | 
				
			||||||
    zones = cf.zones.get(params={'name': args.zone})
 | 
					 | 
				
			||||||
    assert zones, f'Zone {args.zone} not found'
 | 
					    assert zones, f'Zone {args.zone} not found'
 | 
				
			||||||
    records = cf.zones.dns_records.get(zones[0]['id'], params={'name': args.record})
 | 
					    assert len(zones) == 1, f'More than one zone found for {args.zone}'
 | 
				
			||||||
 | 
					    zone = zones[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    records = list(cf.dns.records.list(zone_id=zone.id, name=args.record, type='A'))
 | 
				
			||||||
    assert records, f'Record {args.record} not found in zone {args.zone}'
 | 
					    assert records, f'Record {args.record} not found in zone {args.zone}'
 | 
				
			||||||
 | 
					    assert len(records) == 1, f'More than one record found for {args.record}'
 | 
				
			||||||
 | 
					    record = records[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    print(f'Updating {args.record} -> {address}')
 | 
					    print(f'Updating {args.record} -> {address}')
 | 
				
			||||||
    cf.zones.dns_records.patch(
 | 
					    cf.dns.records.edit(
 | 
				
			||||||
        zones[0]['id'], records[0]['id'],
 | 
					        zone_id=zone.id, dns_record_id=record.id,
 | 
				
			||||||
        data={'type': 'A', 'name': args.record, 'content': address})
 | 
					        type='A', content=address)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == '__main__':
 | 
					if __name__ == '__main__':
 | 
				
			||||||
    main()
 | 
					    main()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -98,6 +98,7 @@ in
 | 
				
			|||||||
            https = true;
 | 
					            https = true;
 | 
				
			||||||
            config = {
 | 
					            config = {
 | 
				
			||||||
              adminpassFile = config.age.secrets."kelder/nextcloud-root.txt".path;
 | 
					              adminpassFile = config.age.secrets."kelder/nextcloud-root.txt".path;
 | 
				
			||||||
 | 
					              dbtype = "sqlite";
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
            settings = {
 | 
					            settings = {
 | 
				
			||||||
              updatechecker = false;
 | 
					              updatechecker = false;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ let
 | 
				
			|||||||
      pkgs = pkgs'.${config'.nixpkgs}.${config'.system};
 | 
					      pkgs = pkgs'.${config'.nixpkgs}.${config'.system};
 | 
				
			||||||
      allPkgs = mapAttrs (_: p: p.${config'.system}) pkgs';
 | 
					      allPkgs = mapAttrs (_: p: p.${config'.system}) pkgs';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      modules' = [ hmFlakes.${config'.home-manager}.nixosModule ] ++ (attrValues cfg.modules);
 | 
					      modules' = [ hmFlakes.${config'.home-manager}.nixosModules.default ] ++ (attrValues cfg.modules);
 | 
				
			||||||
    in
 | 
					    in
 | 
				
			||||||
    # Import eval-config ourselves since the flake now force-sets lib
 | 
					    # Import eval-config ourselves since the flake now force-sets lib
 | 
				
			||||||
    import "${pkgsFlake}/nixos/lib/eval-config.nix" {
 | 
					    import "${pkgsFlake}/nixos/lib/eval-config.nix" {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,6 +15,7 @@ let
 | 
				
			|||||||
    passAsFile = [ "code" ];
 | 
					    passAsFile = [ "code" ];
 | 
				
			||||||
    code = ''
 | 
					    code = ''
 | 
				
			||||||
      #include <stdio.h>
 | 
					      #include <stdio.h>
 | 
				
			||||||
 | 
					      #include <stdlib.h>
 | 
				
			||||||
      #include <signal.h>
 | 
					      #include <signal.h>
 | 
				
			||||||
      #include <unistd.h>
 | 
					      #include <unistd.h>
 | 
				
			||||||
      #include <systemd/sd-daemon.h>
 | 
					      #include <systemd/sd-daemon.h>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,6 +5,7 @@ let
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  cfg = config.my.netboot;
 | 
					  cfg = config.my.netboot;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Newer releases don't boot on desktop?
 | 
				
			||||||
  ipxe = pkgs.ipxe.overrideAttrs (o: rec {
 | 
					  ipxe = pkgs.ipxe.overrideAttrs (o: rec {
 | 
				
			||||||
    version = "1.21.1-unstable-2024-06-27";
 | 
					    version = "1.21.1-unstable-2024-06-27";
 | 
				
			||||||
    src = pkgs.fetchFromGitHub {
 | 
					    src = pkgs.fetchFromGitHub {
 | 
				
			||||||
@@ -17,7 +18,7 @@ let
 | 
				
			|||||||
  tftpRoot = pkgs.linkFarm "tftp-root" [
 | 
					  tftpRoot = pkgs.linkFarm "tftp-root" [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      name = "ipxe-x86_64.efi";
 | 
					      name = "ipxe-x86_64.efi";
 | 
				
			||||||
      path = "${ipxe}/ipxe.efi";
 | 
					      path = "${pkgs.ipxe}/ipxe.efi";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
  menuFile = pkgs.runCommand "menu.ipxe" {
 | 
					  menuFile = pkgs.runCommand "menu.ipxe" {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
{ lib, pkgs, config, ... }:
 | 
					{ lib, pkgs, config, ... }:
 | 
				
			||||||
let
 | 
					let
 | 
				
			||||||
  inherit (lib) flatten optional mkIf mkDefault mkMerge;
 | 
					  inherit (lib) flatten optional mkIf mkDefault mkMerge versionAtLeast;
 | 
				
			||||||
in
 | 
					in
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  config = mkMerge [
 | 
					  config = mkMerge [
 | 
				
			||||||
@@ -13,9 +13,11 @@ in
 | 
				
			|||||||
      };
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      systemd = {
 | 
					      systemd = {
 | 
				
			||||||
        additionalUpstreamSystemUnits = [
 | 
					        additionalUpstreamSystemUnits = mkIf (config.system.nixos.release == "24.12:u-24.11") [
 | 
				
			||||||
          # TODO: NixOS has its own version of this, but with `network` instead of `networkd`. Is this just a typo? It
 | 
					          # TODO: NixOS has its own version of this, but with `network` instead of `networkd`. Is this just a typo? It
 | 
				
			||||||
          # hasn't been updated in 2 years...
 | 
					          # hasn't been updated in 2 years...
 | 
				
			||||||
 | 
					          # This has been done upstream now :)
 | 
				
			||||||
 | 
					          # TODO: Remove when 25.05 releases
 | 
				
			||||||
          "systemd-networkd-wait-online@.service"
 | 
					          "systemd-networkd-wait-online@.service"
 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -551,7 +551,7 @@ in
 | 
				
			|||||||
          ];
 | 
					          ];
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      (mkIf config.services.pds.enable {
 | 
					      (mkIf (config.services ? "pds" && config.services.pds.enable) {
 | 
				
			||||||
        my.tmproot.persistence.config.directories = [
 | 
					        my.tmproot.persistence.config.directories = [
 | 
				
			||||||
          {
 | 
					          {
 | 
				
			||||||
            directory = "/var/lib/pds";
 | 
					            directory = "/var/lib/pds";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,72 +1,74 @@
 | 
				
			|||||||
-----BEGIN AGE ENCRYPTED FILE-----
 | 
					-----BEGIN AGE ENCRYPTED FILE-----
 | 
				
			||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHNqUFR5ZyBaOU1F
 | 
					YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHNqUFR5ZyBlbHl0
 | 
				
			||||||
ckpVQWNGejNoQUQzaERobUNmRFMyWVFzc0Eydkh6SEVZNHU2SHhRCmc0NUJMa0lG
 | 
					S0lQbXBKVGpNNnJOUS9TSlp0U0EvYWFVanN3N0RMb1JudEdwYVQ4CnJGdklzeEFy
 | 
				
			||||||
SnRuZHR3dmNKem1oYXA5bHVsNWcwY0xzMTlqQUlsQWJiSFUKLT4gc3NoLWVkMjU1
 | 
					RmxjamNyUWszYjFGb0ZZbk9EQVdERERtckpqczVscjdmUE0KLT4gc3NoLWVkMjU1
 | 
				
			||||||
MTkgRExNZUZnIG9Ca2M0ZHJwS2I5VWJiY1ptUWJtNTdVakVGQXlteGdCRHg4c3JO
 | 
					MTkgRExNZUZnIGR4czhRYjUyU29JbnFnRk5IeXliNzZzMVMya1ZuS2tkUlFVTkxU
 | 
				
			||||||
cXpaSGMKTHlidkxRZ01mWVRLRVRZdWRyNTZWZDhmR0Vicy9hYmF2elg5M1FXNGF6
 | 
					aFd0VWsKenprWWQ0UEdaUGhvRlJUbnU1T2h1czZBK1dpOGwwcjJxc2p6ejV1RnM0
 | 
				
			||||||
UQotPiBzc2gtZWQyNTUxOSAzYkIzWmcgZE03MlRsVDQzdlF3R3F0TWppdU4yV2J3
 | 
					RQotPiBzc2gtZWQyNTUxOSAzYkIzWmcgMHB6dzVFQ3FtaWErVWNyRXo3WnNhT2NF
 | 
				
			||||||
N21xS0djYnQzLytKK3JBenFoawp4bk1pWDlmZ2dmOFU3djBHVlN1alJETENGMGhM
 | 
					eldUVWtOaVlWOTVwcVVaOUlGMApJUDUzNmhKbUxleTV6SjV0Zmk3dno0STVIRDIv
 | 
				
			||||||
eWhGSFNGUW5OenpNMFRvCi0+IHNzaC1lZDI1NTE5IHErMFhjdyA3am5WUzQ4a0xM
 | 
					SUkyd1M2Z21mdUtMUXIwCi0+IHNzaC1lZDI1NTE5IHErMFhjdyBnRFBPRnNSa0Nn
 | 
				
			||||||
OEpvdTVGVjNVV2tMNnRHQ2IraGdZbjd2VjcrTnJzSjA0CmoyRjI3U1R5bElhb0NL
 | 
					UTlpR1Y4OU1UQmNLRnRWaGxzU3RBV0c1bG90K2I5QUQ0CjArUFlGS1B2RkVKSEtP
 | 
				
			||||||
UU4wRG1VZVV2MlpFdFkrUGdNNVNsOTJjN1pmZ0kKLT4gc3NoLWVkMjU1MTkgWkIz
 | 
					ajRpUUNlMkRPN3pxaEkrZ1M3RndxRDZ6U09Wc2cKLT4gc3NoLWVkMjU1MTkgWkIz
 | 
				
			||||||
ZTZRIFByVVhNbzRFQ0grb29hd2x0OU9iUU5sbjU2Zld0RXExM0RHT0M1VTZ6U0kK
 | 
					ZTZRIFRPdXRTeEVvUTM1dlQzMll2VDFkUlY2eEFRcnRrc1lNeDZDbFE1a3BjaDgK
 | 
				
			||||||
a2lVNzZiNWkwMy9XT2lIVnQrNG52cWx1b3lNQk41WFhHenlsVDdlR1FjZwotPiBz
 | 
					MytBM0Y2Mmo2M1JOWExLQy8xTm9SR05WcmxrV2xBZ0RpeXQxeGVkZ1VZcwotPiBz
 | 
				
			||||||
c2gtZWQyNTUxOSBqNjdGWFEgVzZURHE4ZHZ0YWNYZ1hkbWQvdDhQbzJ0R1NMNjRv
 | 
					c2gtZWQyNTUxOSBqNjdGWFEgYUw5cnJabnhhdU9lN0NPVXVUazRnVWpzcUVtM3VR
 | 
				
			||||||
QkVWdkNPWFN4blNGawo2ZndJeEhsbkoxYjBXbk96bjZsMXVqeE4yMDFRaDR1K0Rq
 | 
					bWQxNVVSQTN5N3hXRQp0blhXUC94TlRPbS9Ba2N1eVM0QkNNblJBa1hJYjZ1Y1lM
 | 
				
			||||||
eExHNDFBNlpnCi0+IHNzaC1lZDI1NTE5IGMwVE5hUSBjQXhrenI5cTZhNkR2VnNG
 | 
					UDhWbUd5bWNVCi0+IHNzaC1lZDI1NTE5IGMwVE5hUSA0TXowVjA0N2FvcER6OEts
 | 
				
			||||||
VitKUzQ5QThOcFJCZytTUXRrQzFZWi9VREZ3CnZFTU5QNm84NjVGYmp4RTZTM0Js
 | 
					VTVwa0UzUEtsY005WDhmaU8zZ3VLaXQvaVRJCjB4cjJiMHVGM3hyWlg0OHhaT0lu
 | 
				
			||||||
cTR0WUMwd1RWS0RJNHo0dDBkS1A0NE0KLT4gc3NoLWVkMjU1MTkgbjhDcFV3IHVz
 | 
					K2NJQWVndzYrSDAyK25NMklSVUI4S28KLT4gc3NoLWVkMjU1MTkgbjhDcFV3IFNE
 | 
				
			||||||
Q0FiOTBIYUY5SFBLK0Zia3YxaHd4dVN4bDhjbjZYaFVKNHp6VkFOMmMKeXAzcndh
 | 
					Q1NZbnpqUkdiaktnYkxZdzZrYUVqWDEvYnMvOTJqSUpybERTNk9uQ0kKYlMzZkVu
 | 
				
			||||||
M2hLWUFSNlJTUXFhNnlZZGZCYnBvM1AzMVg0QWFvK05rS3ZlOAotPiBzc2gtZWQy
 | 
					SXVtaWk2WEtDMEpwZFM3ZVIyWHQwUWNOZjVRS0I0ZjN5MklHYwotPiBzc2gtZWQy
 | 
				
			||||||
NTUxOSBqSThSQWcgS0NRY0pKaEd2UmVXcTU5bDFYSkx6cS9KNnVXbXc1ZVpxelIy
 | 
					NTUxOSBqSThSQWcgWTZIMCtNMCtzTFpROHpBMnA3b2s2UFE2dDZGbnlxU2VxMlkz
 | 
				
			||||||
U2E0T2VSRQo1cTZzQWk3cDRPSjVOdFQrOWNvWDVhZlE1VTRmRjBHZ0JjTVdheFdX
 | 
					aGJFUzV6awpKNDhobHQrTCs4cUVpNE5wblJMako3bU5tVldjVDBjVlJOOHhkUTNk
 | 
				
			||||||
bVB3Ci0+IHNzaC1lZDI1NTE5IGhNYTRudyBPUW11MkNuQUsyelNiejl1UEhvMFJT
 | 
					NFdrCi0+IHNzaC1lZDI1NTE5IFQrc2JHQSBTbVlBTXIzQ09SOHRJakZXK3NkT1Uy
 | 
				
			||||||
bUxmQU5MaW1Qcy9JeUZoVzdUSzBVCmVZWHoxTFVQWmJQbDlzYXZhVkxYRSszOGdm
 | 
					RFgrUTZncSsyK3p5WlVDSFNwM2lFClErRHk4Qmp2VlIvZW8rV2lNME53ZFlIUmVC
 | 
				
			||||||
MktPS3ZNV1BpZFJkM25wcGsKLT4gc3NoLWVkMjU1MTkgZXlxM2RnIDZLMzQxNFMr
 | 
					bXF5RlVvV2FUM3ZmeWpaQzgKLT4gc3NoLWVkMjU1MTkgaE1hNG53IDBINGhyMDBy
 | 
				
			||||||
azlybFZLK05xY21DU3BOZnduOWt4Z2lDNzl4KzVtYitrbUkKcGR1OWtkVTB1czdE
 | 
					bkp0RWpTU0F6Uk1kaXllRHBHbXF2QWUwNkN1U0tEWE53VGsKdi9QRlhwRCtyQkRq
 | 
				
			||||||
dWdhd0U3cC82Ry8zTStkQ256N3RMQlZCbjU5bWJVbwotPiBzc2gtZWQyNTUxOSA3
 | 
					cng1Wk1rZkx2NnJTMUxGajN3b2Z3SG0zd0ptcklCZwotPiBzc2gtZWQyNTUxOSBl
 | 
				
			||||||
V1E5UEEgb2IyVVNmM1AwNTVnZExDTEp1NWw4S0xWK0lnWG5DQ1dQTnh3RmNuZ2x5
 | 
					eXEzZGcgcnQ4WUFMcGRtL1BvYTkxWU12WTdkT1lLRmJlZXZ4cWtHNG54QVo0dDYw
 | 
				
			||||||
NApNaXhzL0wxUWtHNHpWSWplRS8wSzk0cEs4S21VUnp3azlRajJNdlJ6ZEprCi0+
 | 
					RQp2NkMwbTROZTBuRUVLNEs3L3BmOTZ2S3dDL0hUbm5OaHZXbjVCRG15bExnCi0+
 | 
				
			||||||
IHNzaC1lZDI1NTE5IGdTeFAwUSBLWXV1VW1Pb2w0ZkpOUlNEa3dLamFGSDFJMWRq
 | 
					IHNzaC1lZDI1NTE5IDdXUTlQQSBPL0t1ZWptTm5YQXIwc3ZNUGhkaVM5QU1DMkNL
 | 
				
			||||||
NzVMZDRXUWY0UmVuaUhjCkNlWFUvRHByUVBEenFXTXBMZ3k5d2l2L1BaUHprYVN5
 | 
					NU1WSFlTT05KOWR3dGhJCmdTTEIrNEZma3E0UzArMndqVEgzWnVLNzl0TjhsbG9P
 | 
				
			||||||
ZHZmdVAvQk1lY3cKLT4gc3NoLWVkMjU1MTkgVkZjdzVnIG1IUngvcVNSM2RrSDF0
 | 
					OE9aRVk1Ung1cEkKLT4gc3NoLWVkMjU1MTkgZ1N4UDBRIGJNazFtRThSVVVvb3dP
 | 
				
			||||||
dkZMSlAySmxWL3VqLzJYWWs3SUZTRWpvUkQ0R0EKalMzNW5rSXJES1M5Y2tVeDRW
 | 
					RHV5WGxCbktDK3c5aEhiYkphNU4zUnVNUVNNV2sKbWZJYkNSZFMvTDI1WVg5SnJV
 | 
				
			||||||
bFQ2eG9zeGxSZDBZMDV0TVV2SDVManI4QQotPiBzc2gtZWQyNTUxOSBoa2J0dmcg
 | 
					bUFSY2JsNDJBc253dlN5Y2Nqdm9TbU9IawotPiBzc2gtZWQyNTUxOSBWRmN3NWcg
 | 
				
			||||||
WmkxUSs4MGI4Y1BrZjdSSDRQMEtGbC9LNWlDdDBKbFI4NXdjN21BS2lIRQpUZVhL
 | 
					eEo0dmRNWVpuVGdxRHpXc09tUDZldFRKcTBIMVVWcXdmVFRhZnZmenBETQpJWHVp
 | 
				
			||||||
c0orRXNvbGFUbE1UZlBGc3h5N01Fekh2Q3B2WjI0WXpkRWpqM1hnCi0+IHNzaC1l
 | 
					NWJNRWhacHlMbHlQcjEzdEZWdUVpbGg0N2pqMjcvTk92UDJpNUlvCi0+IHNzaC1l
 | 
				
			||||||
ZDI1NTE5IGV0MnpwUSA0TWlIWW1oRzgrYzJUK29XbXVyd2JETHpLUFVLeG4rRUY1
 | 
					ZDI1NTE5IGhrYnR2ZyB0SFJGRE03T3lnTUJZakVCcnQxVklPNXhzak94eU5KUzNX
 | 
				
			||||||
bmV1bUZPaDBNCnI0cllLZmRFMEZDWTFRV2QxL25uV1RtOHBMZVhrOXFyR0NGbjk4
 | 
					L216SCtUWEVzCmRrS2Rlc1JiNEg1KzExaUsrNHJuSDlTcU5Oa0J4QVZKVmNBRGFP
 | 
				
			||||||
QWwvbDgKLT4gc3NoLWVkMjU1MTkgWmJMSldBIGNiK2hGRkhZRlU3SFpURWNLY3lL
 | 
					ZWlqUjAKLT4gc3NoLWVkMjU1MTkgZXQyenBRIEFhMFVxZ3RRbk4za2t5cWtwVjVi
 | 
				
			||||||
VisrSW01V1lXQU8yUGN5MENNaEZwVU0KbnNGd2Y4TDZKdmFIQ21NWlZZVGQ1ZEFw
 | 
					Qm9ucVdMekVsSHEwSWlML0JIdmQ2SFkKWW5mWnQvRWlaT3hJLzJyTE5RdTNUMWNM
 | 
				
			||||||
MyszQ0VLOWxiSkdrWFdGWUlkOAotPiBzc2gtZWQyNTUxOSBaTnFJb2cgZ2dnRHkr
 | 
					SDB4TjVKZCtDN0tCR1NhdnRqbwotPiBzc2gtZWQyNTUxOSBaYkxKV0EgV1loMWZx
 | 
				
			||||||
UEs5S3FJRkpBLzZLRyt6RmdBeUcvTjJGTmhoci8xNXord3F5OAplZXRUQTF5MUtT
 | 
					OHhKelNvNzErMDc4cUE5amgycTFTem5lVmlGYTk5bUM2T2dEUQpkMVQ0VS80Y3Jt
 | 
				
			||||||
RG1uVmZOOENzVVZqWUFsdDFXRm93dy9OYmtVSDZTUDV3Ci0+IHNzaC1lZDI1NTE5
 | 
					QTZUVnNZV0daczM0Titvc3Q1T2JiTVZYV2tXOW4xV0VRCi0+IHNzaC1lZDI1NTE5
 | 
				
			||||||
IHFManF5USA5SUF1MW85T2dZNXY2cFBwOC9Wb1R6MSs5VGVOOTExUnNaM3pwci9l
 | 
					IFpOcUlvZyAzMnZ2NjR1R2R2UlJNZjNvOU9RckR0MEtnbllyYVJPSUZtUDNWSU5k
 | 
				
			||||||
N2pRCk1tYWRnSlAwbUNiMWdmRU0wZk5VOHZmVU5uZDlRSlJJM1pHR3VxTTNHN0kK
 | 
					U3c4Ckgza2txalJhOW14c1dGZ0VTc3EzK2NpOUJaVWhqN2lMWU9HL3hMSWlJUVkK
 | 
				
			||||||
LT4gc3NoLWVkMjU1MTkgQmFRbFJnIExWTm0xU0djWW9XL3ova003ZVBMTTFIS1FR
 | 
					LT4gc3NoLWVkMjU1MTkgcUxqcXlRIHMxNStVTnY1TUZJaHlXQnNTSFhXditsWnVF
 | 
				
			||||||
S0xYckNMRFJhZGVXM1haeDAKeTVoSC92bnhRdG93RnV4akxVRHRuVEc4Y2N3cmta
 | 
					Y2ZKRWZ5UXVPZUVKY2VjakEKV1N3ODVFYXROTzFReWE5Y1A5MkpXUjJVc00wVVd3
 | 
				
			||||||
UFJrTHZtU3A5RjFGdwotPiBzc2gtZWQyNTUxOSBzK3FSZmcgaGJNcUc4bFZHK3Bl
 | 
					ZUpzTC9rRGdOWUpxWQotPiBzc2gtZWQyNTUxOSBCYVFsUmcganpkWlpaWlRVQ3Vp
 | 
				
			||||||
cnVZV0dPWkFOTndSMU1zNlAweXZsUkZtSk1XQUoxdwpWak02bTJVWjNNMXZoenJq
 | 
					Y2hvbkpld2kzdzVtdERHajBNUTEyM0NOWlp0WkxtRQp1MEJUKzFUSW9tWjluVU9Y
 | 
				
			||||||
RFN0UzRvdk0xT2VzazFKcysvYk9HejYrLzRvCi0+IHNzaC1lZDI1NTE5IDYySmNj
 | 
					clBzNFpzdU83MXdGN2dJSGducnplbEd4M1JNCi0+IHNzaC1lZDI1NTE5IHMrcVJm
 | 
				
			||||||
QSA4KzVSYkxEUW5jaithdUNvSVpjdDJGZm90Q1IyWnBtbTZnTWNsY01pUkQwCkRa
 | 
					ZyBSRW1pZWFhQkpQRTFYTG9IZnVmWmx6S2pNUll4MGhtRFd1Y0ZhS25JNFZVCjhU
 | 
				
			||||||
NHRHenFIS050dXVWcWdzaElkemU4enEyUmkwU0tSMENJWHFYMlg0L0UKLT4gc3No
 | 
					UDhoOTlTUEtqbytZMjZ2NlozcnZTNXVNcVA3cU1TRmtsL1g4bEhKUzgKLT4gc3No
 | 
				
			||||||
LWVkMjU1MTkgL2h4L2RBIDVhY2hCcitGVjFueUsrTHpNNmEzeDFTUFdYeGZ2d1ox
 | 
					LWVkMjU1MTkgNjJKY2NBIElSSXZjc3J5cWNwOHFNV281YzBrVzc2TlVwMnRwb0NJ
 | 
				
			||||||
czE2TUFIS0NzVFkKU0lFcGJiQmQrMU1iYlhtNWVFZ2VZM09jOTBwUWRDdlNOKzc4
 | 
					dEdST0s4MEhmQnMKaTNEdkFjRktCZHNCY3FsWE5UbFo1R3lXSlI2NE5MR25neWJ4
 | 
				
			||||||
VHVEeC8wdwotPiBzc2gtZWQyNTUxOSBXekxHSEEgNlhBMHVJTTFuZHgxN3RqYkV0
 | 
					NTlsSllxWQotPiBzc2gtZWQyNTUxOSAvaHgvZEEgOExaRjJiNTJkUGFxZllSK1Uz
 | 
				
			||||||
SzB2elhYcm9BWmszNjRIUzhCbEpiWktFawpka1ZpK0pCMnAxTUE4UzhHeXhxcjRi
 | 
					eWxQTmtxOVFPZkVFb2w2Z0tmZVpwTndDWQpuRFlqZWdaQjZaT1BZSmllVzB5NWhY
 | 
				
			||||||
djNRdUxVeW90SUFENjh0UVJyeDBnCi0+IHNzaC1lZDI1NTE5IEhKL0o3QSBhNno1
 | 
					MmhHaWtZOXFERzhSRWRXWk5TR1RRCi0+IHNzaC1lZDI1NTE5IFd6TEdIQSBtZW04
 | 
				
			||||||
QmZWMFJ1OEdmZVRzd05qWktUM3BXaWtvV3FpckllV29hM0VWalJZClN0NVFMTDlu
 | 
					eWlNWU9JOXYvcVlsb1JXM2JKRlREeXJXNHd6MlkvazZrSzdscG5BCnZzWUFwb3lK
 | 
				
			||||||
Z01TaVp3ZDRURGRqSk5FazBBVXJuTzlzdFI4bWE3cUowYmsKLT4gc3NoLWVkMjU1
 | 
					dUhkcDZNakFPN0RMRG5LQzdqU1UzNlJ6eGRGSGlhYUx0YXMKLT4gc3NoLWVkMjU1
 | 
				
			||||||
MTkgT0VxTXNnIHBBaHl2U2hKMVJpc1FDdDRMVnRacHZ6SUh4TGwxYm9Sejh5S3FL
 | 
					MTkgSEovSjdBIDBaNzZGVkdaVWlWNk4yVW5UdnFCZ2xWUEtIc2QzQmJTMnlINVF1
 | 
				
			||||||
RVBheUUKQUNRZDZtN1dBcUI1TFVpenI3R0M5TC9zY3B4OEFBMXhLQjMyYmVseWEv
 | 
					V093UmsKcXNhSnlnWHQrRzVSU296NENDN29aMUN5VlRIcittdGNySGhvMHZlT0xl
 | 
				
			||||||
bwotPiBzc2gtZWQyNTUxOSAvRUpYdmcgZ0M3ZVdBZVlOOFNEbmFwYVcvMGtETTdy
 | 
					NAotPiBzc2gtZWQyNTUxOSBPRXFNc2cgNUFSc045eUVqQWI3MXB4Tkd2RndDS2Na
 | 
				
			||||||
QXZmSy9qZFVKQkROdFRVak4xSQpRREliRFFjMTl6ak45ckdEdnpReEJPS3RSbXB4
 | 
					VGJrblFLaENPVlZucFdGRGFDTQp6dlRHTnRLSFkxb1RFdmxGS09Jenh2Q25VZ2ha
 | 
				
			||||||
R0JxdUUxZ2wxSkUwQk5NCi0+IFgyNTUxOSBqYW5sdkVBcUJiUHltVy9mT0hYbzJ4
 | 
					QWQ4YUNjdVNJbW8vVGVrCi0+IHNzaC1lZDI1NTE5IC9FSlh2ZyBGM2lrUG1DWUx3
 | 
				
			||||||
bW11dmwvUGFlVkV1WlpFQ2Y1UHpNCm1OQ09yOVRSNnIxeXY0N2ltOEt3OVVYRTM2
 | 
					YndZWWdobVo3TjZHTDNabmdsa3ZHcndwUXVZSVg5T0VZCjNYdlFYSHBsWjBTWXlS
 | 
				
			||||||
bHV4dkJOaUFrUFhydmdTSFEKLT4gZ296LWdyZWFzZSBbcyA6IUVJKiBSYi04ClB1
 | 
					V0lSZkpwVE05eU1LcFBEbWdXWEZ0U0tSTkthQnMKLT4gWDI1NTE5IDF5SmczUWpo
 | 
				
			||||||
QjgzNTBMM3o1cER5RWhQa1F4YmFEOXNzQUZyOTU2SXRzYmtTODdKd1djZ3NUagot
 | 
					bkdmWS9SamxtTTF1eVJnc1QxUGJiUjQwR1VSTmdxMEtqQzAKeTF0NWp6dG1CWGNy
 | 
				
			||||||
LS0gRGN4Y2ZyV1g4YnFaM0JTazNZSFNOQVlzQWViU1R1ZUVpdjB0ZmNUeThvRQrn
 | 
					VVVXVGFLV3dkWWo2YTVkZmtXcHRZai9FSDVBSmJhbwotPiAmJC1ncmVhc2UgaWU3
 | 
				
			||||||
KRRdOMs11eAfh0452NX5E0nDyNXe/Bn3kStg7jBDKRo+JxFw4xTwgT9XeyMwzonH
 | 
					YGkpVSBNV0ZfIDM1fltQdzBcCmZYRXB1NEVMNkVqWVF3Ci0tLSB2RVRFYmVGVklB
 | 
				
			||||||
bci/yoXC0hSJNiGvMCu9qbnEZakb7nzQfn8KJY9+4ptjRI5zxnGRWUEDrHjNXA22
 | 
					bGFiUTBKYlMrRitvN2NnUkhScTMvWml6ZzRKU3ZIeEtvChoKB2c5roTC97pdDOi6
 | 
				
			||||||
UGpm6PGdBRpktySXA4wFTJL1nWxtIIRvZ/j3Njc3O78ggjhW3QtBc0VJ
 | 
					aPFIaTyOu9NZ4ESwwRjpEgB0D6GP2r7YR3CnxVyXa4sCFUnTF8dLUkABFnSeNeQZ
 | 
				
			||||||
 | 
					M64tM6J+tZAyJa9IKaTgSqvQaGYHHYinygNvf6BShCK4nPUJu0cV6gFtqFle0MWA
 | 
				
			||||||
 | 
					Rez5eRMFH/M2aubhwBeDyHG4WRelkt7oMVXyY6U=
 | 
				
			||||||
-----END AGE ENCRYPTED FILE-----
 | 
					-----END AGE ENCRYPTED FILE-----
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user