Compare commits
	
		
			2 Commits
		
	
	
		
			gitea-metr
			...
			misc1
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						9f355eff0d
	
				 | 
					
					
						|||
| 
						
						
							
						
						fde69ca283
	
				 | 
					
					
						
@@ -17,6 +17,10 @@ creation_rules:
 | 
				
			|||||||
    key_groups:
 | 
					    key_groups:
 | 
				
			||||||
    - age:
 | 
					    - age:
 | 
				
			||||||
      - *host_jokum
 | 
					      - *host_jokum
 | 
				
			||||||
 | 
					      - *host_ildkule
 | 
				
			||||||
 | 
					      - *host_bekkalokk
 | 
				
			||||||
 | 
					      - *host_bicep
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - *user_danio
 | 
					      - *user_danio
 | 
				
			||||||
      - *user_felixalb
 | 
					      - *user_felixalb
 | 
				
			||||||
      - *user_eirikwit
 | 
					      - *user_eirikwit
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										40
									
								
								base.nix
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								base.nix
									
									
									
									
									
								
							@@ -4,6 +4,7 @@
 | 
				
			|||||||
  imports = [
 | 
					  imports = [
 | 
				
			||||||
    ./users
 | 
					    ./users
 | 
				
			||||||
    ./modules/snakeoil-certs.nix
 | 
					    ./modules/snakeoil-certs.nix
 | 
				
			||||||
 | 
					    ./modules/debug-locations.nix
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  networking.domain = "pvv.ntnu.no";
 | 
					  networking.domain = "pvv.ntnu.no";
 | 
				
			||||||
@@ -84,50 +85,27 @@
 | 
				
			|||||||
    settings.PermitRootLogin = "yes";
 | 
					    settings.PermitRootLogin = "yes";
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  sops.age = {
 | 
				
			||||||
 | 
					    sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
 | 
				
			||||||
 | 
					    keyFile = "/var/lib/sops-nix/key.txt";
 | 
				
			||||||
 | 
					    generateKey = true;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # nginx return 444 for all nonexistent virtualhosts
 | 
					  # nginx return 444 for all nonexistent virtualhosts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  systemd.services.nginx.after = [ "generate-snakeoil-certs.service" ];
 | 
					  systemd.services.nginx.after = [ "generate-snakeoil-certs.service" ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  environment.snakeoil-certs = lib.mkIf config.services.nginx.enable {
 | 
					  environment.snakeoil-certs = lib.mkIf (config.services.nginx.enable) {
 | 
				
			||||||
    "/etc/certs/nginx" = {
 | 
					    "/etc/certs/nginx" = {
 | 
				
			||||||
      owner = "nginx";
 | 
					      owner = "nginx";
 | 
				
			||||||
      group = "nginx";
 | 
					      group = "nginx";
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  services.nginx = {
 | 
					  services.nginx.virtualHosts."_" = lib.mkIf (config.services.nginx.enable) {
 | 
				
			||||||
    recommendedTlsSettings = true;
 | 
					 | 
				
			||||||
    recommendedProxySettings = true;
 | 
					 | 
				
			||||||
    recommendedOptimisation = true;
 | 
					 | 
				
			||||||
    recommendedGzipSettings = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    appendConfig = lib.mkIf (!config.services.matrix-synapse-next.enable or false) ''
 | 
					 | 
				
			||||||
      pcre_jit on;
 | 
					 | 
				
			||||||
      worker_processes auto;
 | 
					 | 
				
			||||||
      worker_rlimit_nofile 100000;
 | 
					 | 
				
			||||||
    '';
 | 
					 | 
				
			||||||
    eventsConfig = lib.mkIf (!config.services.matrix-synapse-next.enable or false) ''
 | 
					 | 
				
			||||||
      worker_connections 2048;
 | 
					 | 
				
			||||||
      use epoll;
 | 
					 | 
				
			||||||
      multi_accept on;
 | 
					 | 
				
			||||||
    '';
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  systemd.services.nginx.serviceConfig = lib.mkIf (!config.services.matrix-synapse-next.enable or false) {
 | 
					 | 
				
			||||||
    LimitNOFILE = 65536;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  services.nginx.virtualHosts."_" = lib.mkIf config.services.nginx.enable {
 | 
					 | 
				
			||||||
    sslCertificate = "/etc/certs/nginx.crt";
 | 
					    sslCertificate = "/etc/certs/nginx.crt";
 | 
				
			||||||
    sslCertificateKey = "/etc/certs/nginx.key";
 | 
					    sslCertificateKey = "/etc/certs/nginx.key";
 | 
				
			||||||
    addSSL = true;
 | 
					    addSSL = true;
 | 
				
			||||||
    extraConfig = "return 444;";
 | 
					    extraConfig = "return 444;";
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					 | 
				
			||||||
  networking.firewall.allowedTCPPorts = lib.mkIf config.services.nginx.enable [ 80 443 ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  security.acme = {
 | 
					 | 
				
			||||||
    acceptTerms = true;
 | 
					 | 
				
			||||||
    defaults.email = "drift@pvv.ntnu.no";
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										78
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										78
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							@@ -7,11 +7,11 @@
 | 
				
			|||||||
        ]
 | 
					        ]
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1712356478,
 | 
					        "lastModified": 1710169806,
 | 
				
			||||||
        "narHash": "sha256-kTcEtrQIRnexu5lAbLsmUcfR2CrmsACF1s3ZFw1NEVA=",
 | 
					        "narHash": "sha256-HeWFrRuHpnAiPmIr26OKl2g142HuGerwoO/XtW53pcI=",
 | 
				
			||||||
        "owner": "nix-community",
 | 
					        "owner": "nix-community",
 | 
				
			||||||
        "repo": "disko",
 | 
					        "repo": "disko",
 | 
				
			||||||
        "rev": "0a17298c0d96190ef3be729d594ba202b9c53beb",
 | 
					        "rev": "fe064a639319ed61cdf12b8f6eded9523abcc498",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -47,11 +47,11 @@
 | 
				
			|||||||
        ]
 | 
					        ]
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1711853301,
 | 
					        "lastModified": 1693864994,
 | 
				
			||||||
        "narHash": "sha256-KxRNyW/fgq690bt3B+Nz4EKLoubybcuASYyMa41bAPE=",
 | 
					        "narHash": "sha256-oLDiWdCKDtEfeGzfAuDTq+n9VWp6JCo67PEESEZ3y8E=",
 | 
				
			||||||
        "owner": "Programvareverkstedet",
 | 
					        "owner": "Programvareverkstedet",
 | 
				
			||||||
        "repo": "grzegorz-clients",
 | 
					        "repo": "grzegorz-clients",
 | 
				
			||||||
        "rev": "c38f2f22a6d47ae2da015351a45d13cbc1eb48e4",
 | 
					        "rev": "a38a0b0fb31ad0ad78a91458cb2c7f77f686468f",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -80,33 +80,13 @@
 | 
				
			|||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "nix-gitea-themes": {
 | 
					 | 
				
			||||||
      "inputs": {
 | 
					 | 
				
			||||||
        "nixpkgs": [
 | 
					 | 
				
			||||||
          "nixpkgs"
 | 
					 | 
				
			||||||
        ]
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "locked": {
 | 
					 | 
				
			||||||
        "lastModified": 1712621190,
 | 
					 | 
				
			||||||
        "narHash": "sha256-O8xtza+wPplTmSm0EAPk8Ud9sJ6huVNY6jU21FYHCp4=",
 | 
					 | 
				
			||||||
        "ref": "refs/heads/main",
 | 
					 | 
				
			||||||
        "rev": "812c1fc4061d534a8c7d35271ce32b6c76a9f385",
 | 
					 | 
				
			||||||
        "revCount": 5,
 | 
					 | 
				
			||||||
        "type": "git",
 | 
					 | 
				
			||||||
        "url": "https://git.pvv.ntnu.no/oysteikt/nix-gitea-themes.git"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "original": {
 | 
					 | 
				
			||||||
        "type": "git",
 | 
					 | 
				
			||||||
        "url": "https://git.pvv.ntnu.no/oysteikt/nix-gitea-themes.git"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "nixpkgs": {
 | 
					    "nixpkgs": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1712386448,
 | 
					        "lastModified": 1710248792,
 | 
				
			||||||
        "narHash": "sha256-kacQwZ5WnJv4HH5s8tlZTClyiwVP8XAaywI5I7QqLIY=",
 | 
					        "narHash": "sha256-yFyWw4na+nJgtXwhHs2SJSy5Lcw94/FcMbBOorlGdfI=",
 | 
				
			||||||
        "owner": "NixOS",
 | 
					        "owner": "NixOS",
 | 
				
			||||||
        "repo": "nixpkgs",
 | 
					        "repo": "nixpkgs",
 | 
				
			||||||
        "rev": "7644b4bc09c6329bcd82561a076fd7add697d092",
 | 
					        "rev": "efbb274f364c918b9937574de879b5874b5833cc",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -117,11 +97,11 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "nixpkgs-stable": {
 | 
					    "nixpkgs-stable": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1711819797,
 | 
					        "lastModified": 1710033658,
 | 
				
			||||||
        "narHash": "sha256-tNeB6emxj74Y6ctwmsjtMlzUMn458sBmwnD35U5KIM4=",
 | 
					        "narHash": "sha256-yiZiVKP5Ya813iYLho2+CcFuuHpaqKc/CoxOlANKcqM=",
 | 
				
			||||||
        "owner": "NixOS",
 | 
					        "owner": "NixOS",
 | 
				
			||||||
        "repo": "nixpkgs",
 | 
					        "repo": "nixpkgs",
 | 
				
			||||||
        "rev": "2b4e3ca0091049c6fbb4908c66b05b77eaef9f0c",
 | 
					        "rev": "b17375d3bb7c79ffc52f3538028b2ec06eb79ef8",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -133,11 +113,11 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "nixpkgs-unstable": {
 | 
					    "nixpkgs-unstable": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1712381113,
 | 
					        "lastModified": 1710247538,
 | 
				
			||||||
        "narHash": "sha256-YL8miM11o/jMqOwt5DsdyhPgh/JgCl1kOIzvX7ukniY=",
 | 
					        "narHash": "sha256-Mm3aCwfAdYgG2zKf5SLRBktPH0swXN1yEetAMn05KAA=",
 | 
				
			||||||
        "owner": "NixOS",
 | 
					        "owner": "NixOS",
 | 
				
			||||||
        "repo": "nixpkgs",
 | 
					        "repo": "nixpkgs",
 | 
				
			||||||
        "rev": "6cc8dbb00974248cdd1b7ebd05cbc7c0799ce974",
 | 
					        "rev": "21adc4f16a8ab151fec83b9d9368cd62d9de86bc",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -166,37 +146,15 @@
 | 
				
			|||||||
        "url": "https://git.pvv.ntnu.no/Projects/calendar-bot.git"
 | 
					        "url": "https://git.pvv.ntnu.no/Projects/calendar-bot.git"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "pvv-nettsiden": {
 | 
					 | 
				
			||||||
      "inputs": {
 | 
					 | 
				
			||||||
        "nixpkgs": [
 | 
					 | 
				
			||||||
          "nixpkgs"
 | 
					 | 
				
			||||||
        ]
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "locked": {
 | 
					 | 
				
			||||||
        "lastModified": 1712834399,
 | 
					 | 
				
			||||||
        "narHash": "sha256-deNJvqboPk3bEoRZ/FyZnxscsf2BpS3/52JM4qXCNSA=",
 | 
					 | 
				
			||||||
        "ref": "refs/heads/master",
 | 
					 | 
				
			||||||
        "rev": "216e153f89f1dbdc4c98a7c1db2a40e52becc901",
 | 
					 | 
				
			||||||
        "revCount": 451,
 | 
					 | 
				
			||||||
        "type": "git",
 | 
					 | 
				
			||||||
        "url": "https://git.pvv.ntnu.no/Projects/nettsiden.git"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "original": {
 | 
					 | 
				
			||||||
        "type": "git",
 | 
					 | 
				
			||||||
        "url": "https://git.pvv.ntnu.no/Projects/nettsiden.git"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "root": {
 | 
					    "root": {
 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "disko": "disko",
 | 
					        "disko": "disko",
 | 
				
			||||||
        "grzegorz": "grzegorz",
 | 
					        "grzegorz": "grzegorz",
 | 
				
			||||||
        "grzegorz-clients": "grzegorz-clients",
 | 
					        "grzegorz-clients": "grzegorz-clients",
 | 
				
			||||||
        "matrix-next": "matrix-next",
 | 
					        "matrix-next": "matrix-next",
 | 
				
			||||||
        "nix-gitea-themes": "nix-gitea-themes",
 | 
					 | 
				
			||||||
        "nixpkgs": "nixpkgs",
 | 
					        "nixpkgs": "nixpkgs",
 | 
				
			||||||
        "nixpkgs-unstable": "nixpkgs-unstable",
 | 
					        "nixpkgs-unstable": "nixpkgs-unstable",
 | 
				
			||||||
        "pvv-calendar-bot": "pvv-calendar-bot",
 | 
					        "pvv-calendar-bot": "pvv-calendar-bot",
 | 
				
			||||||
        "pvv-nettsiden": "pvv-nettsiden",
 | 
					 | 
				
			||||||
        "sops-nix": "sops-nix"
 | 
					        "sops-nix": "sops-nix"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
@@ -208,11 +166,11 @@
 | 
				
			|||||||
        "nixpkgs-stable": "nixpkgs-stable"
 | 
					        "nixpkgs-stable": "nixpkgs-stable"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1711855048,
 | 
					        "lastModified": 1710195194,
 | 
				
			||||||
        "narHash": "sha256-HxegAPnQJSC4cbEbF4Iq3YTlFHZKLiNTk8147EbLdGg=",
 | 
					        "narHash": "sha256-KFxCJp0T6TJOz1IOKlpRdpsCr9xsvlVuWY/VCiAFnTE=",
 | 
				
			||||||
        "owner": "Mic92",
 | 
					        "owner": "Mic92",
 | 
				
			||||||
        "repo": "sops-nix",
 | 
					        "repo": "sops-nix",
 | 
				
			||||||
        "rev": "99b1e37f9fc0960d064a7862eb7adfb92e64fa10",
 | 
					        "rev": "e52d8117b330f690382f1d16d81ae43daeb4b880",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										14
									
								
								flake.nix
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								flake.nix
									
									
									
									
									
								
							@@ -11,25 +11,19 @@
 | 
				
			|||||||
    disko.url = "github:nix-community/disko";
 | 
					    disko.url = "github:nix-community/disko";
 | 
				
			||||||
    disko.inputs.nixpkgs.follows = "nixpkgs";
 | 
					    disko.inputs.nixpkgs.follows = "nixpkgs";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pvv-nettsiden.url = "git+https://git.pvv.ntnu.no/Projects/nettsiden.git";
 | 
					 | 
				
			||||||
    pvv-nettsiden.inputs.nixpkgs.follows = "nixpkgs";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    pvv-calendar-bot.url = "git+https://git.pvv.ntnu.no/Projects/calendar-bot.git";
 | 
					    pvv-calendar-bot.url = "git+https://git.pvv.ntnu.no/Projects/calendar-bot.git";
 | 
				
			||||||
    pvv-calendar-bot.inputs.nixpkgs.follows = "nixpkgs";
 | 
					    pvv-calendar-bot.inputs.nixpkgs.follows = "nixpkgs";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    matrix-next.url = "github:dali99/nixos-matrix-modules";
 | 
					    matrix-next.url = "github:dali99/nixos-matrix-modules";
 | 
				
			||||||
    matrix-next.inputs.nixpkgs.follows = "nixpkgs";
 | 
					    matrix-next.inputs.nixpkgs.follows = "nixpkgs";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    nix-gitea-themes.url = "git+https://git.pvv.ntnu.no/oysteikt/nix-gitea-themes.git";
 | 
					 | 
				
			||||||
    nix-gitea-themes.inputs.nixpkgs.follows = "nixpkgs";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    grzegorz.url = "github:Programvareverkstedet/grzegorz";
 | 
					    grzegorz.url = "github:Programvareverkstedet/grzegorz";
 | 
				
			||||||
    grzegorz.inputs.nixpkgs.follows = "nixpkgs-unstable";
 | 
					    grzegorz.inputs.nixpkgs.follows = "nixpkgs-unstable";
 | 
				
			||||||
    grzegorz-clients.url = "github:Programvareverkstedet/grzegorz-clients";
 | 
					    grzegorz-clients.url = "github:Programvareverkstedet/grzegorz-clients";
 | 
				
			||||||
    grzegorz-clients.inputs.nixpkgs.follows = "nixpkgs";
 | 
					    grzegorz-clients.inputs.nixpkgs.follows = "nixpkgs";
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  outputs = { self, nixpkgs, nixpkgs-unstable, pvv-nettsiden, sops-nix, disko, ... }@inputs:
 | 
					  outputs = { self, nixpkgs, nixpkgs-unstable, sops-nix, disko, ... }@inputs:
 | 
				
			||||||
  let
 | 
					  let
 | 
				
			||||||
    nixlib = nixpkgs.lib;
 | 
					    nixlib = nixpkgs.lib;
 | 
				
			||||||
    systems = [
 | 
					    systems = [
 | 
				
			||||||
@@ -89,12 +83,6 @@
 | 
				
			|||||||
            mediawiki-extensions = final.callPackage ./packages/mediawiki-extensions { };
 | 
					            mediawiki-extensions = final.callPackage ./packages/mediawiki-extensions { };
 | 
				
			||||||
            simplesamlphp = final.callPackage ./packages/simplesamlphp { };
 | 
					            simplesamlphp = final.callPackage ./packages/simplesamlphp { };
 | 
				
			||||||
          })
 | 
					          })
 | 
				
			||||||
          inputs.nix-gitea-themes.overlays.default
 | 
					 | 
				
			||||||
          inputs.pvv-nettsiden.overlays.default
 | 
					 | 
				
			||||||
        ];
 | 
					 | 
				
			||||||
        modules = [
 | 
					 | 
				
			||||||
          inputs.nix-gitea-themes.nixosModules.default
 | 
					 | 
				
			||||||
          inputs.pvv-nettsiden.nixosModules.default
 | 
					 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      bob = stableNixosConfig "bob" {
 | 
					      bob = stableNixosConfig "bob" {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,8 +8,9 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    #./services/keycloak.nix
 | 
					    #./services/keycloak.nix
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ./services/website
 | 
					    # TODO: set up authentication for the following:
 | 
				
			||||||
    ./services/nginx.nix
 | 
					    # ./services/website.nix
 | 
				
			||||||
 | 
					    ./services/nginx
 | 
				
			||||||
    ./services/gitea/default.nix
 | 
					    ./services/gitea/default.nix
 | 
				
			||||||
    ./services/kerberos
 | 
					    ./services/kerberos
 | 
				
			||||||
    ./services/webmail
 | 
					    ./services/webmail
 | 
				
			||||||
@@ -25,6 +26,8 @@
 | 
				
			|||||||
  boot.loader.systemd-boot.enable = true;
 | 
					  boot.loader.systemd-boot.enable = true;
 | 
				
			||||||
  boot.loader.efi.canTouchEfiVariables = true;
 | 
					  boot.loader.efi.canTouchEfiVariables = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  virtualisation.podman.enable = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  networking.hostName = "bekkalokk";
 | 
					  networking.hostName = "bekkalokk";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  systemd.network.networks."30-enp2s0" = values.defaultNetworkConfig // {
 | 
					  systemd.network.networks."30-enp2s0" = values.defaultNetworkConfig // {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,5 +27,4 @@ lib.mkMerge [
 | 
				
			|||||||
  (mkRunner "alpha")
 | 
					  (mkRunner "alpha")
 | 
				
			||||||
  (mkRunner "beta")
 | 
					  (mkRunner "beta")
 | 
				
			||||||
  (mkRunner "epsilon")
 | 
					  (mkRunner "epsilon")
 | 
				
			||||||
  { virtualisation.podman.enable = true; }
 | 
					 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,6 @@ let
 | 
				
			|||||||
in {
 | 
					in {
 | 
				
			||||||
  imports = [
 | 
					  imports = [
 | 
				
			||||||
    ./ci.nix
 | 
					    ./ci.nix
 | 
				
			||||||
    ./import-users.nix
 | 
					 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  sops.secrets = {
 | 
					  sops.secrets = {
 | 
				
			||||||
@@ -14,6 +13,9 @@ in {
 | 
				
			|||||||
      owner = "gitea";
 | 
					      owner = "gitea";
 | 
				
			||||||
      group = "gitea";
 | 
					      group = "gitea";
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					    "gitea/passwd-ssh-key" = { };
 | 
				
			||||||
 | 
					    "gitea/ssh-known-hosts" = { };
 | 
				
			||||||
 | 
					    "gitea/import-user-env" = { };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  services.gitea = {
 | 
					  services.gitea = {
 | 
				
			||||||
@@ -45,8 +47,8 @@ in {
 | 
				
			|||||||
        DISABLE_GRAVATAR = true;
 | 
					        DISABLE_GRAVATAR = true;
 | 
				
			||||||
        ENABLE_FEDERATED_AVATAR = false;
 | 
					        ENABLE_FEDERATED_AVATAR = false;
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      metrics.ENABLED = true;
 | 
					 | 
				
			||||||
      actions.ENABLED = true;
 | 
					      actions.ENABLED = true;
 | 
				
			||||||
 | 
					      "ui.meta".DESCRIPTION = "Bokstavelig talt programvareverkstedet";
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -55,48 +57,49 @@ in {
 | 
				
			|||||||
  services.nginx.virtualHosts."${domain}" = {
 | 
					  services.nginx.virtualHosts."${domain}" = {
 | 
				
			||||||
    forceSSL = true;
 | 
					    forceSSL = true;
 | 
				
			||||||
    enableACME = true;
 | 
					    enableACME = true;
 | 
				
			||||||
    kTLS = true;
 | 
					 | 
				
			||||||
    locations."/" = {
 | 
					    locations."/" = {
 | 
				
			||||||
      proxyPass = "http://unix:${cfg.settings.server.HTTP_ADDR}";
 | 
					      proxyPass = "http://unix:${cfg.settings.server.HTTP_ADDR}";
 | 
				
			||||||
 | 
					      recommendedProxySettings = true;
 | 
				
			||||||
      extraConfig = ''
 | 
					      extraConfig = ''
 | 
				
			||||||
        client_max_body_size 512M;
 | 
					        client_max_body_size 512M;
 | 
				
			||||||
      '';
 | 
					      '';
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					 | 
				
			||||||
    locations."/metrics" = {
 | 
					 | 
				
			||||||
      proxyPass = "http://unix:${cfg.settings.server.HTTP_ADDR}";
 | 
					 | 
				
			||||||
      extraConfig = ''
 | 
					 | 
				
			||||||
        allow ${values.hosts.ildkule.ipv4};
 | 
					 | 
				
			||||||
        allow ${values.hosts.ildkule.ipv6};
 | 
					 | 
				
			||||||
	deny all;
 | 
					 | 
				
			||||||
      '';
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  networking.firewall.allowedTCPPorts = [ sshPort ];
 | 
					  networking.firewall.allowedTCPPorts = [ sshPort ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # Extra customization
 | 
					  # Automatically import users
 | 
				
			||||||
 | 
					  systemd.services.gitea-import-users = {
 | 
				
			||||||
  services.gitea-themes.monokai = pkgs.gitea-theme-monokai;
 | 
					    enable = true;
 | 
				
			||||||
 | 
					    preStart=''${pkgs.rsync}/bin/rsync -e "${pkgs.openssh}/bin/ssh -o UserKnownHostsFile=$CREDENTIALS_DIRECTORY/ssh-known-hosts -i $CREDENTIALS_DIRECTORY/sshkey" -a pvv@smtp.pvv.ntnu.no:/etc/passwd /tmp/passwd-import'';
 | 
				
			||||||
  systemd.services.install-gitea-customization = {
 | 
					 | 
				
			||||||
    description = "Install extra customization in gitea's CUSTOM_DIR";
 | 
					 | 
				
			||||||
    wantedBy = [ "gitea.service" ];
 | 
					 | 
				
			||||||
    requiredBy = [ "gitea.service" ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    serviceConfig = {
 | 
					    serviceConfig = {
 | 
				
			||||||
      Type = "oneshot";
 | 
					      ExecStart = pkgs.writers.writePython3 "gitea-import-users" { libraries = [ pkgs.python3Packages.requests ]; } (builtins.readFile ./gitea-import-users.py);
 | 
				
			||||||
      User = cfg.user;
 | 
					      LoadCredential=[
 | 
				
			||||||
      Group = cfg.group;
 | 
					        "sshkey:${config.sops.secrets."gitea/passwd-ssh-key".path}"
 | 
				
			||||||
 | 
					        "ssh-known-hosts:${config.sops.secrets."gitea/ssh-known-hosts".path}"
 | 
				
			||||||
 | 
					      ];
 | 
				
			||||||
 | 
					      DynamicUser="yes";
 | 
				
			||||||
 | 
					      EnvironmentFile=config.sops.secrets."gitea/import-user-env".path;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    script = let
 | 
					  systemd.timers.gitea-import-users = {
 | 
				
			||||||
 | 
					    requires = [ "gitea.service" ];
 | 
				
			||||||
 | 
					    after = [ "gitea.service" ];
 | 
				
			||||||
 | 
					    wantedBy = [ "timers.target" ];
 | 
				
			||||||
 | 
					    timerConfig = {
 | 
				
			||||||
 | 
					      OnCalendar = "*-*-* 02:00:00";
 | 
				
			||||||
 | 
					      Persistent = true;
 | 
				
			||||||
 | 
					      Unit = "gitea-import-users.service";
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  system.activationScripts.linkGiteaLogo.text = let
 | 
				
			||||||
    logo-svg = ../../../../assets/logo_blue_regular.svg;
 | 
					    logo-svg = ../../../../assets/logo_blue_regular.svg;
 | 
				
			||||||
    logo-png = ../../../../assets/logo_blue_regular.png;
 | 
					    logo-png = ../../../../assets/logo_blue_regular.png;
 | 
				
			||||||
  in ''
 | 
					  in ''
 | 
				
			||||||
      install -Dm444 ${logo-svg} ${cfg.customDir}/public/img/logo.svg
 | 
					    install -Dm444 ${logo-svg} ${cfg.stateDir}/custom/public/img/logo.svg
 | 
				
			||||||
      install -Dm444 ${logo-png} ${cfg.customDir}/public/img/logo.png
 | 
					    install -Dm444 ${logo-png} ${cfg.stateDir}/custom/public/img/logo.png
 | 
				
			||||||
      install -Dm444 ${./loading.apng} ${cfg.customDir}/public/img/loading.png
 | 
					    install -Dm444 ${./loading.apng} ${cfg.stateDir}/custom/public/img/loading.png
 | 
				
			||||||
  '';
 | 
					  '';
 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,38 +0,0 @@
 | 
				
			|||||||
{ config, pkgs, lib, ... }:
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  cfg = config.services.gitea;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  sops.secrets = {
 | 
					 | 
				
			||||||
    "gitea/passwd-ssh-key" = { };
 | 
					 | 
				
			||||||
    "gitea/ssh-known-hosts" = { };
 | 
					 | 
				
			||||||
    "gitea/import-user-env" = { };
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  systemd.services.gitea-import-users = lib.mkIf cfg.enable {
 | 
					 | 
				
			||||||
    enable = true;
 | 
					 | 
				
			||||||
    preStart=''${pkgs.rsync}/bin/rsync -e "${pkgs.openssh}/bin/ssh -o UserKnownHostsFile=$CREDENTIALS_DIRECTORY/ssh-known-hosts -i $CREDENTIALS_DIRECTORY/sshkey" -a pvv@smtp.pvv.ntnu.no:/etc/passwd /tmp/passwd-import'';
 | 
					 | 
				
			||||||
    serviceConfig = {
 | 
					 | 
				
			||||||
      ExecStart = pkgs.writers.writePython3 "gitea-import-users" {
 | 
					 | 
				
			||||||
        libraries = with pkgs.python3Packages; [ requests ];
 | 
					 | 
				
			||||||
      } (builtins.readFile ./gitea-import-users.py);
 | 
					 | 
				
			||||||
      LoadCredential=[
 | 
					 | 
				
			||||||
        "sshkey:${config.sops.secrets."gitea/passwd-ssh-key".path}"
 | 
					 | 
				
			||||||
        "ssh-known-hosts:${config.sops.secrets."gitea/ssh-known-hosts".path}"
 | 
					 | 
				
			||||||
      ];
 | 
					 | 
				
			||||||
      DynamicUser="yes";
 | 
					 | 
				
			||||||
      EnvironmentFile=config.sops.secrets."gitea/import-user-env".path;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  systemd.timers.gitea-import-users = lib.mkIf cfg.enable {
 | 
					 | 
				
			||||||
    requires = [ "gitea.service" ];
 | 
					 | 
				
			||||||
    after = [ "gitea.service" ];
 | 
					 | 
				
			||||||
    wantedBy = [ "timers.target" ];
 | 
					 | 
				
			||||||
    timerConfig = {
 | 
					 | 
				
			||||||
      OnCalendar = "*-*-* 02:00:00";
 | 
					 | 
				
			||||||
      Persistent = true;
 | 
					 | 
				
			||||||
      Unit = "gitea-import-users.service";
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -22,7 +22,7 @@ let
 | 
				
			|||||||
      # openssl req -newkey rsa:4096 -new -x509 -days 365 -nodes -out idp.crt -keyout idp.pem
 | 
					      # openssl req -newkey rsa:4096 -new -x509 -days 365 -nodes -out idp.crt -keyout idp.pem
 | 
				
			||||||
      "metadata/saml20-idp-hosted.php" = pkgs.writeText "saml20-idp-remote.php" ''
 | 
					      "metadata/saml20-idp-hosted.php" = pkgs.writeText "saml20-idp-remote.php" ''
 | 
				
			||||||
        <?php
 | 
					        <?php
 | 
				
			||||||
	  $metadata['https://idp.pvv.ntnu.no/'] = array(
 | 
						  $metadata['https://idp2.pvv.ntnu.no/'] = array(
 | 
				
			||||||
	    'host' => '__DEFAULT__',
 | 
						    'host' => '__DEFAULT__',
 | 
				
			||||||
	    'privatekey' => '${config.sops.secrets."idp/privatekey".path}',
 | 
						    'privatekey' => '${config.sops.secrets."idp/privatekey".path}',
 | 
				
			||||||
	    'certificate' => '${./idp.crt}',
 | 
						    'certificate' => '${./idp.crt}',
 | 
				
			||||||
@@ -89,7 +89,7 @@ let
 | 
				
			|||||||
          --replace '$SAML_ADMIN_NAME' '"Drift"' \
 | 
					          --replace '$SAML_ADMIN_NAME' '"Drift"' \
 | 
				
			||||||
          --replace '$SAML_ADMIN_EMAIL' '"drift@pvv.ntnu.no"' \
 | 
					          --replace '$SAML_ADMIN_EMAIL' '"drift@pvv.ntnu.no"' \
 | 
				
			||||||
          --replace '$SAML_ADMIN_PASSWORD' 'file_get_contents("${config.sops.secrets."idp/admin_password".path}")' \
 | 
					          --replace '$SAML_ADMIN_PASSWORD' 'file_get_contents("${config.sops.secrets."idp/admin_password".path}")' \
 | 
				
			||||||
          --replace '$SAML_TRUSTED_DOMAINS' 'array( "idp.pvv.ntnu.no" )' \
 | 
					          --replace '$SAML_TRUSTED_DOMAINS' 'array( "idp2.pvv.ntnu.no" )' \
 | 
				
			||||||
          --replace '$SAML_DATABASE_DSN' '"pgsql:host=postgres.pvv.ntnu.no;port=5432;dbname=idp"' \
 | 
					          --replace '$SAML_DATABASE_DSN' '"pgsql:host=postgres.pvv.ntnu.no;port=5432;dbname=idp"' \
 | 
				
			||||||
          --replace '$SAML_DATABASE_USERNAME' '"idp"' \
 | 
					          --replace '$SAML_DATABASE_USERNAME' '"idp"' \
 | 
				
			||||||
          --replace '$SAML_DATABASE_PASSWORD' 'file_get_contents("${config.sops.secrets."idp/postgres_password".path}")' \
 | 
					          --replace '$SAML_DATABASE_PASSWORD' 'file_get_contents("${config.sops.secrets."idp/postgres_password".path}")' \
 | 
				
			||||||
@@ -177,10 +177,9 @@ in
 | 
				
			|||||||
      };
 | 
					      };
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    services.nginx.virtualHosts."idp.pvv.ntnu.no" = {
 | 
					    services.nginx.virtualHosts."idp2.pvv.ntnu.no" = {
 | 
				
			||||||
      forceSSL = true;
 | 
					      forceSSL = true;
 | 
				
			||||||
      enableACME = true;
 | 
					      enableACME = true;
 | 
				
			||||||
      kTLS = true;
 | 
					 | 
				
			||||||
      root = "${package}/share/php/simplesamlphp/public";
 | 
					      root = "${package}/share/php/simplesamlphp/public";
 | 
				
			||||||
      locations =  {
 | 
					      locations =  {
 | 
				
			||||||
        # based on https://simplesamlphp.org/docs/stable/simplesamlphp-install.html#configuring-nginx
 | 
					        # based on https://simplesamlphp.org/docs/stable/simplesamlphp-install.html#configuring-nginx
 | 
				
			||||||
@@ -198,10 +197,6 @@ in
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
          '';
 | 
					          '';
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        "^~ /simplesaml/".extraConfig = ''
 | 
					 | 
				
			||||||
	  rewrite ^/simplesaml/(.*)$ /$1 redirect;
 | 
					 | 
				
			||||||
	  return 404;
 | 
					 | 
				
			||||||
	'';
 | 
					 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,18 +1,18 @@
 | 
				
			|||||||
''
 | 
					''
 | 
				
			||||||
  <?php
 | 
					  <?php
 | 
				
			||||||
  $metadata['https://idp.pvv.ntnu.no/'] = [
 | 
					  $metadata['https://idp2.pvv.ntnu.no/'] = [
 | 
				
			||||||
      'metadata-set' => 'saml20-idp-hosted',
 | 
					      'metadata-set' => 'saml20-idp-hosted',
 | 
				
			||||||
      'entityid' => 'https://idp.pvv.ntnu.no/',
 | 
					      'entityid' => 'https://idp2.pvv.ntnu.no/',
 | 
				
			||||||
      'SingleSignOnService' => [
 | 
					      'SingleSignOnService' => [
 | 
				
			||||||
          [
 | 
					          [
 | 
				
			||||||
              'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
 | 
					              'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
 | 
				
			||||||
              'Location' => 'https://idp.pvv.ntnu.no/module.php/saml/idp/singleSignOnService',
 | 
					              'Location' => 'https://idp2.pvv.ntnu.no/module.php/saml/idp/singleSignOnService',
 | 
				
			||||||
          ],
 | 
					          ],
 | 
				
			||||||
      ],
 | 
					      ],
 | 
				
			||||||
      'SingleLogoutService' => [
 | 
					      'SingleLogoutService' => [
 | 
				
			||||||
          [
 | 
					          [
 | 
				
			||||||
              'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
 | 
					              'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
 | 
				
			||||||
              'Location' => 'https://idp.pvv.ntnu.no/module.php/saml/idp/singleLogout',
 | 
					              'Location' => 'https://idp2.pvv.ntnu.no/module.php/saml/idp/singleLogout',
 | 
				
			||||||
          ],
 | 
					          ],
 | 
				
			||||||
      ],
 | 
					      ],
 | 
				
			||||||
      'NameIDFormat' => [ 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient' ],
 | 
					      'NameIDFormat' => [ 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient' ],
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@
 | 
				
			|||||||
          --replace '$SAML_ADMIN_NAME' '"Drift"' \
 | 
					          --replace '$SAML_ADMIN_NAME' '"Drift"' \
 | 
				
			||||||
          --replace '$SAML_ADMIN_EMAIL' '"drift@pvv.ntnu.no"' \
 | 
					          --replace '$SAML_ADMIN_EMAIL' '"drift@pvv.ntnu.no"' \
 | 
				
			||||||
          --replace '$SAML_ADMIN_PASSWORD' 'file_get_contents("${config.sops.secrets."mediawiki/simplesamlphp/admin_password".path}")' \
 | 
					          --replace '$SAML_ADMIN_PASSWORD' 'file_get_contents("${config.sops.secrets."mediawiki/simplesamlphp/admin_password".path}")' \
 | 
				
			||||||
          --replace '$SAML_TRUSTED_DOMAINS' 'array( "wiki.pvv.ntnu.no" )' \
 | 
					          --replace '$SAML_TRUSTED_DOMAINS' 'array( "wiki2.pvv.ntnu.no" )' \
 | 
				
			||||||
          --replace '$SAML_DATABASE_DSN' '"pgsql:host=postgres.pvv.ntnu.no;port=5432;dbname=mediawiki_simplesamlphp"' \
 | 
					          --replace '$SAML_DATABASE_DSN' '"pgsql:host=postgres.pvv.ntnu.no;port=5432;dbname=mediawiki_simplesamlphp"' \
 | 
				
			||||||
          --replace '$SAML_DATABASE_USERNAME' '"mediawiki_simplesamlphp"' \
 | 
					          --replace '$SAML_DATABASE_USERNAME' '"mediawiki_simplesamlphp"' \
 | 
				
			||||||
          --replace '$SAML_DATABASE_PASSWORD' 'file_get_contents("${config.sops.secrets."mediawiki/simplesamlphp/postgres_password".path}")' \
 | 
					          --replace '$SAML_DATABASE_PASSWORD' 'file_get_contents("${config.sops.secrets."mediawiki/simplesamlphp/postgres_password".path}")' \
 | 
				
			||||||
@@ -31,7 +31,7 @@
 | 
				
			|||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
in {
 | 
					in {
 | 
				
			||||||
  services.idp.sp-remote-metadata = [ "https://wiki.pvv.ntnu.no/simplesaml/" ];
 | 
					  services.idp.sp-remote-metadata = [ "https://wiki2.pvv.ntnu.no/simplesaml/" ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  sops.secrets = lib.pipe [
 | 
					  sops.secrets = lib.pipe [
 | 
				
			||||||
    "mediawiki/password"
 | 
					    "mediawiki/password"
 | 
				
			||||||
@@ -43,7 +43,6 @@ in {
 | 
				
			|||||||
    (map (key: lib.nameValuePair key {
 | 
					    (map (key: lib.nameValuePair key {
 | 
				
			||||||
      owner = user;
 | 
					      owner = user;
 | 
				
			||||||
      group = group;
 | 
					      group = group;
 | 
				
			||||||
      restartUnits = [ "phpfpm-mediawiki.service" ];
 | 
					 | 
				
			||||||
    }))
 | 
					    }))
 | 
				
			||||||
    lib.listToAttrs
 | 
					    lib.listToAttrs
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
@@ -65,10 +64,12 @@ in {
 | 
				
			|||||||
      name = "mediawiki";
 | 
					      name = "mediawiki";
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    webserver = "nginx";
 | 
					    # Host through nginx
 | 
				
			||||||
    nginx.hostName = "wiki.pvv.ntnu.no";
 | 
					    webserver = "none";
 | 
				
			||||||
 | 
					    poolConfig = let
 | 
				
			||||||
    poolConfig = {
 | 
					      listenUser = config.services.nginx.user;
 | 
				
			||||||
 | 
					      listenGroup = config.services.nginx.group;
 | 
				
			||||||
 | 
					    in {
 | 
				
			||||||
      inherit user group;
 | 
					      inherit user group;
 | 
				
			||||||
      "pm" = "dynamic";
 | 
					      "pm" = "dynamic";
 | 
				
			||||||
      "pm.max_children" = 32;
 | 
					      "pm.max_children" = 32;
 | 
				
			||||||
@@ -76,6 +77,8 @@ in {
 | 
				
			|||||||
      "pm.start_servers" = 2;
 | 
					      "pm.start_servers" = 2;
 | 
				
			||||||
      "pm.min_spare_servers" = 2;
 | 
					      "pm.min_spare_servers" = 2;
 | 
				
			||||||
      "pm.max_spare_servers" = 4;
 | 
					      "pm.max_spare_servers" = 4;
 | 
				
			||||||
 | 
					      "listen.owner" = listenUser;
 | 
				
			||||||
 | 
					      "listen.group" = listenGroup;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      "catch_workers_output" = true;
 | 
					      "catch_workers_output" = true;
 | 
				
			||||||
      "php_admin_flag[log_errors]" = true;
 | 
					      "php_admin_flag[log_errors]" = true;
 | 
				
			||||||
@@ -86,11 +89,11 @@ in {
 | 
				
			|||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    extensions = {
 | 
					    extensions = {
 | 
				
			||||||
      inherit (pkgs.mediawiki-extensions) DeleteBatch UserMerge PluggableAuth SimpleSAMLphp VisualEditor;
 | 
					      inherit (pkgs.mediawiki-extensions) DeleteBatch UserMerge PluggableAuth SimpleSAMLphp;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    extraConfig = ''
 | 
					    extraConfig = ''
 | 
				
			||||||
      $wgServer = "https://wiki.pvv.ntnu.no";
 | 
					      $wgServer = "https://wiki2.pvv.ntnu.no";
 | 
				
			||||||
      $wgLocaltimezone = "Europe/Oslo";
 | 
					      $wgLocaltimezone = "Europe/Oslo";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Only allow login through SSO
 | 
					      # Only allow login through SSO
 | 
				
			||||||
@@ -105,7 +108,9 @@ in {
 | 
				
			|||||||
      $wgGroupPermissions['*']['edit'] = false;
 | 
					      $wgGroupPermissions['*']['edit'] = false;
 | 
				
			||||||
      $wgGroupPermissions['*']['read'] = true;
 | 
					      $wgGroupPermissions['*']['read'] = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Allow subdirectories in article URLs
 | 
					      # Misc. URL rules
 | 
				
			||||||
 | 
					      $wgUsePathInfo = true;
 | 
				
			||||||
 | 
					      $wgScriptExtension = ".php";
 | 
				
			||||||
      $wgNamespacesWithSubpages[NS_MAIN] = true;
 | 
					      $wgNamespacesWithSubpages[NS_MAIN] = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Styling
 | 
					      # Styling
 | 
				
			||||||
@@ -151,13 +156,23 @@ in {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  users.groups.mediawiki.members = [ "nginx" ];
 | 
					  users.groups.mediawiki.members = [ "nginx" ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  services.nginx.virtualHosts."wiki.pvv.ntnu.no" = {
 | 
					  services.nginx.virtualHosts."wiki2.pvv.ntnu.no" = {
 | 
				
			||||||
    kTLS = true;
 | 
					 | 
				
			||||||
    forceSSL = true;
 | 
					    forceSSL = true;
 | 
				
			||||||
    enableACME = true;
 | 
					    enableACME = true;
 | 
				
			||||||
 | 
					    root = "${config.services.mediawiki.finalPackage}/share/mediawiki";
 | 
				
			||||||
    locations =  {
 | 
					    locations =  {
 | 
				
			||||||
      "= /wiki/Main_Page" = lib.mkForce {
 | 
					      "/" = {
 | 
				
			||||||
        return = "301 /wiki/Programvareverkstedet";
 | 
						index = "index.php";
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      "~ /(.+\\.php)" = {
 | 
				
			||||||
 | 
					        extraConfig = ''
 | 
				
			||||||
 | 
					          fastcgi_split_path_info ^(.+\.php)(/.+)$;
 | 
				
			||||||
 | 
					          fastcgi_index index.php;
 | 
				
			||||||
 | 
					          fastcgi_pass unix:${config.services.phpfpm.pools.mediawiki.socket};
 | 
				
			||||||
 | 
					          include ${pkgs.nginx}/conf/fastcgi_params;
 | 
				
			||||||
 | 
					          include ${pkgs.nginx}/conf/fastcgi.conf;
 | 
				
			||||||
 | 
					        '';
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # based on https://simplesamlphp.org/docs/stable/simplesamlphp-install.html#configuring-nginx
 | 
					      # based on https://simplesamlphp.org/docs/stable/simplesamlphp-install.html#configuring-nginx
 | 
				
			||||||
@@ -179,6 +194,8 @@ in {
 | 
				
			|||||||
        '';
 | 
					        '';
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      "/images/".alias = "${config.services.mediawiki.uploadsDir}/";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      "= /PNG/PVV-logo.svg".alias = ../../../../assets/logo_blue_regular.svg;
 | 
					      "= /PNG/PVV-logo.svg".alias = ../../../../assets/logo_blue_regular.svg;
 | 
				
			||||||
      "= /PNG/PVV-logo.png".alias = ../../../../assets/logo_blue_regular.png;
 | 
					      "= /PNG/PVV-logo.png".alias = ../../../../assets/logo_blue_regular.png;
 | 
				
			||||||
      "= /favicon.ico".alias = pkgs.runCommandLocal "mediawiki-favicon.ico" {
 | 
					      "= /favicon.ico".alias = pkgs.runCommandLocal "mediawiki-favicon.ico" {
 | 
				
			||||||
@@ -195,6 +212,5 @@ in {
 | 
				
			|||||||
	  $out
 | 
						  $out
 | 
				
			||||||
      '';
 | 
					      '';
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@ $config = array(
 | 
				
			|||||||
    ),
 | 
					    ),
 | 
				
			||||||
    'default-sp' => array(
 | 
					    'default-sp' => array(
 | 
				
			||||||
        'saml:SP',
 | 
					        'saml:SP',
 | 
				
			||||||
        'entityID' => 'https://wiki.pvv.ntnu.no/simplesaml/',
 | 
					        'entityID' => 'https://wiki2.pvv.ntnu.no/simplesaml/',
 | 
				
			||||||
        'idp' => 'https://idp.pvv.ntnu.no/',
 | 
					        'idp' => 'https://idp2.pvv.ntnu.no/',
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +0,0 @@
 | 
				
			|||||||
{ pkgs, config, ... }:
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  services.nginx.enable = true;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										22
									
								
								hosts/bekkalokk/services/nginx/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								hosts/bekkalokk/services/nginx/default.nix
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					{ pkgs, config, ... }:
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  imports = [
 | 
				
			||||||
 | 
					    ./ingress.nix
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  security.acme = {
 | 
				
			||||||
 | 
					    acceptTerms = true;
 | 
				
			||||||
 | 
					    defaults.email = "drift@pvv.ntnu.no";
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  services.nginx = {
 | 
				
			||||||
 | 
					    enable = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    recommendedTlsSettings = true;
 | 
				
			||||||
 | 
					    recommendedProxySettings = true;
 | 
				
			||||||
 | 
					    recommendedOptimisation = true;
 | 
				
			||||||
 | 
					    recommendedGzipSettings = true;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  networking.firewall.allowedTCPPorts = [ 80 443 ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										55
									
								
								hosts/bekkalokk/services/nginx/ingress.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								hosts/bekkalokk/services/nginx/ingress.nix
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
				
			|||||||
 | 
					{ config, lib, ... }:
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  services.nginx.virtualHosts = {
 | 
				
			||||||
 | 
					    "www2.pvv.ntnu.no" = {
 | 
				
			||||||
 | 
					      serverAliases = [ "www2.pvv.org" "pvv.ntnu.no" "pvv.org" ];
 | 
				
			||||||
 | 
					      addSSL = true;
 | 
				
			||||||
 | 
					      enableACME = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      locations = {
 | 
				
			||||||
 | 
					        # Proxy home directories
 | 
				
			||||||
 | 
					        "/~" = {
 | 
				
			||||||
 | 
					          extraConfig = ''
 | 
				
			||||||
 | 
					            proxy_redirect off;
 | 
				
			||||||
 | 
					            proxy_pass https://tom.pvv.ntnu.no;
 | 
				
			||||||
 | 
					            proxy_set_header Host $host;
 | 
				
			||||||
 | 
					            proxy_set_header X-Real-IP $remote_addr;
 | 
				
			||||||
 | 
					            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 | 
				
			||||||
 | 
					            proxy_set_header X-Forwarded-Proto $scheme;
 | 
				
			||||||
 | 
					          '';
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Redirect old wiki entries
 | 
				
			||||||
 | 
					        "/disk".return = "301 https://www.pvv.ntnu.no/pvv/Diskkjøp";
 | 
				
			||||||
 | 
					        "/dok/boker.php".return = "301 https://www.pvv.ntnu.no/pvv/Bokhyllen";
 | 
				
			||||||
 | 
					        "/styret/lover/".return = "301 https://www.pvv.ntnu.no/pvv/Lover";
 | 
				
			||||||
 | 
					        "/styret/".return = "301 https://www.pvv.ntnu.no/pvv/Styret";
 | 
				
			||||||
 | 
					        "/info/".return = "301 https://www.pvv.ntnu.no/pvv/";
 | 
				
			||||||
 | 
					        "/info/maskinpark/".return = "301 https://www.pvv.ntnu.no/pvv/Maskiner";
 | 
				
			||||||
 | 
					        "/medlemssider/meldinn.php".return = "301 https://www.pvv.ntnu.no/pvv/Medlemskontingent";
 | 
				
			||||||
 | 
					        "/diverse/medlems-sider.php".return = "301 https://www.pvv.ntnu.no/pvv/Medlemssider";
 | 
				
			||||||
 | 
					        "/cert/".return = "301 https://www.pvv.ntnu.no/pvv/CERT";
 | 
				
			||||||
 | 
					        "/drift".return = "301 https://www.pvv.ntnu.no/pvv/Drift";
 | 
				
			||||||
 | 
					        "/diverse/abuse.php".return = "301 https://www.pvv.ntnu.no/pvv/CERT/Abuse";
 | 
				
			||||||
 | 
					        "/nerds/".return = "301 https://www.pvv.ntnu.no/pvv/Nerdepizza";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # TODO: Redirect webmail
 | 
				
			||||||
 | 
					        "/webmail".return = "301 https://webmail.pvv.ntnu.no/squirrelmail";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Redirect everything else to the main website
 | 
				
			||||||
 | 
					        "/".return = "301 https://www.pvv.ntnu.no$request_uri";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Proxy the matrix well-known files
 | 
				
			||||||
 | 
					        # Host has be set before proxy_pass
 | 
				
			||||||
 | 
					        # The header must be set so nginx on the other side routes it to the right place
 | 
				
			||||||
 | 
					        "/.well-known/matrix/" = {
 | 
				
			||||||
 | 
					          extraConfig = ''
 | 
				
			||||||
 | 
					            proxy_set_header Host matrix.pvv.ntnu.no;
 | 
				
			||||||
 | 
					            proxy_pass https://matrix.pvv.ntnu.no/.well-known/matrix/;
 | 
				
			||||||
 | 
					          '';
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -4,15 +4,12 @@
 | 
				
			|||||||
    ./roundcube.nix
 | 
					    ./roundcube.nix
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  services.nginx.virtualHosts."webmail.pvv.ntnu.no" = {
 | 
					  services.nginx.virtualHosts."webmail2.pvv.ntnu.no" = {
 | 
				
			||||||
    forceSSL = true;
 | 
					    forceSSL = true;
 | 
				
			||||||
    enableACME = true;
 | 
					    enableACME = true;
 | 
				
			||||||
    kTLS = true;
 | 
					    #locations."/" = lib.mkForce { };
 | 
				
			||||||
    locations = {
 | 
					    locations."= /" = {
 | 
				
			||||||
      "= /".return = "302 https://webmail.pvv.ntnu.no/roundcube";
 | 
					      return = "301 https://www.pvv.ntnu.no/mail/";
 | 
				
			||||||
      "/afterlogic_lite".return = "302 https://webmail.pvv.ntnu.no/roundcube";
 | 
					 | 
				
			||||||
      "/squirrelmail".return = "302 https://webmail.pvv.ntnu.no/roundcube";
 | 
					 | 
				
			||||||
      "/rainloop".return = "302 https://webmail.pvv.ntnu.no/roundcube";
 | 
					 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
with lib;
 | 
					with lib;
 | 
				
			||||||
let
 | 
					let
 | 
				
			||||||
  cfg = config.services.roundcube;
 | 
					  cfg = config.services.roundcube;
 | 
				
			||||||
  domain = "webmail.pvv.ntnu.no";
 | 
					  domain = "webmail2.pvv.ntnu.no";
 | 
				
			||||||
in 
 | 
					in 
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  services.roundcube = {
 | 
					  services.roundcube = {
 | 
				
			||||||
@@ -35,7 +35,6 @@ in
 | 
				
			|||||||
  services.nginx.virtualHosts."roundcubeplaceholder.example.com" = lib.mkForce { };
 | 
					  services.nginx.virtualHosts."roundcubeplaceholder.example.com" = lib.mkForce { };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  services.nginx.virtualHosts.${domain} = {
 | 
					  services.nginx.virtualHosts.${domain} = {
 | 
				
			||||||
    kTLS = true;
 | 
					 | 
				
			||||||
    locations."/roundcube" = {
 | 
					    locations."/roundcube" = {
 | 
				
			||||||
      tryFiles = "$uri $uri/ =404";
 | 
					      tryFiles = "$uri $uri/ =404";
 | 
				
			||||||
      index = "index.php";
 | 
					      index = "index.php";
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								hosts/bekkalokk/services/website.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								hosts/bekkalokk/services/website.nix
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					{ ... }:
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,126 +0,0 @@
 | 
				
			|||||||
{ pkgs, lib, config, ... }:
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  format = pkgs.formats.php { };
 | 
					 | 
				
			||||||
  cfg = config.services.pvv-nettsiden;
 | 
					 | 
				
			||||||
in {
 | 
					 | 
				
			||||||
  imports = [
 | 
					 | 
				
			||||||
    ./fetch-gallery.nix
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  sops.secrets = lib.genAttrs [
 | 
					 | 
				
			||||||
    "nettsiden/door_secret"
 | 
					 | 
				
			||||||
    "nettsiden/mysql_password"
 | 
					 | 
				
			||||||
    "nettsiden/simplesamlphp/admin_password"
 | 
					 | 
				
			||||||
    "nettsiden/simplesamlphp/cookie_salt"
 | 
					 | 
				
			||||||
  ] (_: {
 | 
					 | 
				
			||||||
    owner = config.services.phpfpm.pools.pvv-nettsiden.user;
 | 
					 | 
				
			||||||
    group = config.services.phpfpm.pools.pvv-nettsiden.group;
 | 
					 | 
				
			||||||
    restartUnits = [ "phpfpm-pvv-nettsiden.service" ];
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  services.idp.sp-remote-metadata = [ "https://${cfg.domainName}/simplesaml/" ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  services.pvv-nettsiden = {
 | 
					 | 
				
			||||||
    enable = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    package = pkgs.pvv-nettsiden.override {
 | 
					 | 
				
			||||||
      extra_files = {
 | 
					 | 
				
			||||||
        "${pkgs.pvv-nettsiden.passthru.simplesamlphpPath}/metadata/saml20-idp-remote.php" = pkgs.writeText "pvv-nettsiden-saml20-idp-remote.php" (import ../idp-simplesamlphp/metadata.php.nix);
 | 
					 | 
				
			||||||
        "${pkgs.pvv-nettsiden.passthru.simplesamlphpPath}/config/authsources.php" = pkgs.writeText "pvv-nettsiden-authsources.php" ''
 | 
					 | 
				
			||||||
          <?php
 | 
					 | 
				
			||||||
          $config = array(
 | 
					 | 
				
			||||||
              'admin' => array(
 | 
					 | 
				
			||||||
                'core:AdminPassword'
 | 
					 | 
				
			||||||
              ),
 | 
					 | 
				
			||||||
              'default-sp' => array(
 | 
					 | 
				
			||||||
                  'saml:SP',
 | 
					 | 
				
			||||||
                  'entityID' => 'https://${cfg.domainName}/simplesaml/',
 | 
					 | 
				
			||||||
                  'idp' => 'https://idp.pvv.ntnu.no/',
 | 
					 | 
				
			||||||
              ),
 | 
					 | 
				
			||||||
          );
 | 
					 | 
				
			||||||
	'';
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    domainName = "www.pvv.ntnu.no";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    settings = let
 | 
					 | 
				
			||||||
      includeFromSops = path: format.lib.mkRaw "file_get_contents('${config.sops.secrets."nettsiden/${path}".path}')";
 | 
					 | 
				
			||||||
    in {
 | 
					 | 
				
			||||||
      DOOR_SECRET = includeFromSops "door_secret";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      DB = {
 | 
					 | 
				
			||||||
        DSN = "mysql:dbname=www-data_nettside;host=mysql.pvv.ntnu.no";
 | 
					 | 
				
			||||||
        USER = "www-data_nettsi";
 | 
					 | 
				
			||||||
        PASS = includeFromSops "mysql_password";
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      # TODO: set up postgres session for simplesamlphp
 | 
					 | 
				
			||||||
      SAML = {
 | 
					 | 
				
			||||||
        COOKIE_SALT = includeFromSops "simplesamlphp/cookie_salt";
 | 
					 | 
				
			||||||
        COOKIE_SECURE = true;
 | 
					 | 
				
			||||||
        ADMIN_NAME = "PVV Drift";
 | 
					 | 
				
			||||||
        ADMIN_EMAIL = "drift@pvv.ntnu.no";
 | 
					 | 
				
			||||||
        ADMIN_PASSWORD = includeFromSops "simplesamlphp/admin_password";
 | 
					 | 
				
			||||||
        TRUSTED_DOMAINS = [ cfg.domainName ];
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  services.phpfpm.pools."pvv-nettsiden".settings = {
 | 
					 | 
				
			||||||
    # "php_admin_value[error_log]" = "stderr";
 | 
					 | 
				
			||||||
    "php_admin_flag[log_errors]" = true;
 | 
					 | 
				
			||||||
    "catch_workers_output" = true;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  services.nginx.virtualHosts.${cfg.domainName} = {
 | 
					 | 
				
			||||||
    serverAliases = [
 | 
					 | 
				
			||||||
      "pvv.ntnu.no"
 | 
					 | 
				
			||||||
      "www.pvv.org"
 | 
					 | 
				
			||||||
      "pvv.org"
 | 
					 | 
				
			||||||
    ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    locations = {
 | 
					 | 
				
			||||||
      # Proxy home directories
 | 
					 | 
				
			||||||
      "^~ /~" = {
 | 
					 | 
				
			||||||
        extraConfig = ''
 | 
					 | 
				
			||||||
          proxy_redirect off;
 | 
					 | 
				
			||||||
          proxy_pass https://tom.pvv.ntnu.no;
 | 
					 | 
				
			||||||
          proxy_set_header Host $host;
 | 
					 | 
				
			||||||
          proxy_set_header X-Real-IP $remote_addr;
 | 
					 | 
				
			||||||
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 | 
					 | 
				
			||||||
          proxy_set_header X-Forwarded-Proto $scheme;
 | 
					 | 
				
			||||||
        '';
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      # Redirect the old webmail/wiki paths from spikkjeposche
 | 
					 | 
				
			||||||
      "^~ /webmail".return = "301 https://webmail.pvv.ntnu.no";
 | 
					 | 
				
			||||||
      "~ /pvv/([^\\n\\r]*)".return = "301 https://wiki.pvv.ntnu.no/wiki/$1";
 | 
					 | 
				
			||||||
      "= /pvv".return = "301 https://wiki.pvv.ntnu.no/";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      # Redirect old wiki entries
 | 
					 | 
				
			||||||
      "/disk".return = "301 https://wiki.pvv.ntnu.no/wiki/Diskkjøp";
 | 
					 | 
				
			||||||
      "/dok/boker.php".return = "301 https://wiki.pvv.ntnu.no/wiki/Bokhyllen";
 | 
					 | 
				
			||||||
      "/styret/lover/".return = "301 https://wiki.pvv.ntnu.no/wiki/Lover";
 | 
					 | 
				
			||||||
      "/styret/".return = "301 https://wiki.pvv.ntnu.no/wiki/Styret";
 | 
					 | 
				
			||||||
      "/info/".return = "301 https://wiki.pvv.ntnu.no/wiki/";
 | 
					 | 
				
			||||||
      "/info/maskinpark/".return = "301 https://wiki.pvv.ntnu.no/wiki/Maskiner";
 | 
					 | 
				
			||||||
      "/medlemssider/meldinn.php".return = "301 https://wiki.pvv.ntnu.no/wiki/Medlemskontingent";
 | 
					 | 
				
			||||||
      "/diverse/medlems-sider.php".return = "301 https://wiki.pvv.ntnu.no/wiki/Medlemssider";
 | 
					 | 
				
			||||||
      "/cert/".return = "301 https://wiki.pvv.ntnu.no/wiki/CERT";
 | 
					 | 
				
			||||||
      "/drift".return = "301 https://wiki.pvv.ntnu.no/wiki/Drift";
 | 
					 | 
				
			||||||
      "/diverse/abuse.php".return = "301 https://wiki.pvv.ntnu.no/wiki/CERT/Abuse";
 | 
					 | 
				
			||||||
      "/nerds/".return = "301 https://wiki.pvv.ntnu.no/wiki/Nerdepizza";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      # Proxy the matrix well-known files
 | 
					 | 
				
			||||||
      # Host has be set before proxy_pass
 | 
					 | 
				
			||||||
      # The header must be set so nginx on the other side routes it to the right place
 | 
					 | 
				
			||||||
      "^~ /.well-known/matrix/" = {
 | 
					 | 
				
			||||||
        extraConfig = ''
 | 
					 | 
				
			||||||
          proxy_set_header Host matrix.pvv.ntnu.no;
 | 
					 | 
				
			||||||
          proxy_pass https://matrix.pvv.ntnu.no/.well-known/matrix/;
 | 
					 | 
				
			||||||
        '';
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,61 +0,0 @@
 | 
				
			|||||||
{ pkgs, lib, config, ... }:
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  galleryDir = config.services.pvv-nettsiden.settings.GALLERY.DIR;
 | 
					 | 
				
			||||||
  transferDir = "${config.services.pvv-nettsiden.settings.GALLERY.DIR}-transfer";
 | 
					 | 
				
			||||||
in {
 | 
					 | 
				
			||||||
  users.users.${config.services.pvv-nettsiden.user} = {
 | 
					 | 
				
			||||||
    useDefaultShell = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # This is pushed from microbel:/var/www/www-gallery/build-gallery.sh
 | 
					 | 
				
			||||||
    openssh.authorizedKeys.keys = [
 | 
					 | 
				
			||||||
    ''command="${pkgs.rrsync}/bin/rrsync -wo ${transferDir}",restrict,no-agent-forwarding,no-port-forwarding,no-pty,no-X11-forwarding ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIjHhC2dikhWs/gG+m7qP1eSohWzTehn4ToNzDSOImyR gallery-publish''
 | 
					 | 
				
			||||||
    ];
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  systemd.paths.pvv-nettsiden-gallery-update = {
 | 
					 | 
				
			||||||
    wantedBy = [ "multi-user.target" ];
 | 
					 | 
				
			||||||
    pathConfig = {
 | 
					 | 
				
			||||||
      PathChanged = "${transferDir}/gallery.tar.gz";
 | 
					 | 
				
			||||||
      Unit = "pvv-nettsiden-gallery-update.service";
 | 
					 | 
				
			||||||
      MakeDirectory = true;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  systemd.services.pvv-nettsiden-gallery-update = {
 | 
					 | 
				
			||||||
    path = with pkgs; [ imagemagick gnutar gzip ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    script = ''
 | 
					 | 
				
			||||||
      tar ${lib.cli.toGNUCommandLineShell {} {
 | 
					 | 
				
			||||||
        extract = true;
 | 
					 | 
				
			||||||
        file = "${transferDir}/gallery.tar.gz";
 | 
					 | 
				
			||||||
        directory = ".";
 | 
					 | 
				
			||||||
      }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      # Delete files and directories that exists in the gallery that don't exist in the tarball
 | 
					 | 
				
			||||||
      filesToRemove=$(uniq -u <(sort <(find . -not -path "./.thumbnails*") <(tar -tf ${transferDir}/gallery.tar.gz | sed 's|/$||')))
 | 
					 | 
				
			||||||
      while IFS= read fname; do
 | 
					 | 
				
			||||||
        rm -f $fname ||:
 | 
					 | 
				
			||||||
        rm -f .thumbnails/$fname.png ||:
 | 
					 | 
				
			||||||
      done <<< "$filesToRemove"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      find . -type d -empty -delete
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      mkdir -p .thumbnails
 | 
					 | 
				
			||||||
      images=$(find . -type f -not -path "./.thumbnails*")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      while IFS= read fname; do
 | 
					 | 
				
			||||||
        [ -f ".thumbnails/$fname.png" ] && continue ||:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        echo "Creating thumbnail for $fname"
 | 
					 | 
				
			||||||
        mkdir -p $(dirname ".thumbnails/$fname")
 | 
					 | 
				
			||||||
        convert -define jpeg:size=200x200 "$fname" -thumbnail 500 -auto-orient ".thumbnails/$fname.png" ||:
 | 
					 | 
				
			||||||
      done <<< "$images"
 | 
					 | 
				
			||||||
    '';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    serviceConfig = {
 | 
					 | 
				
			||||||
      WorkingDirectory = galleryDir;
 | 
					 | 
				
			||||||
      User = config.services.pvv-nettsiden.user;
 | 
					 | 
				
			||||||
      Group = config.services.pvv-nettsiden.group;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -5,7 +5,6 @@ in {
 | 
				
			|||||||
  services.nginx.virtualHosts."chat.pvv.ntnu.no" = {
 | 
					  services.nginx.virtualHosts."chat.pvv.ntnu.no" = {
 | 
				
			||||||
    enableACME = true;
 | 
					    enableACME = true;
 | 
				
			||||||
    forceSSL = true;
 | 
					    forceSSL = true;
 | 
				
			||||||
    kTLS = true;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    root = pkgs.element-web.override {
 | 
					    root = pkgs.element-web.override {
 | 
				
			||||||
      conf = {
 | 
					      conf = {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -217,9 +217,6 @@ in {
 | 
				
			|||||||
  services.redis.servers."".enable = true;
 | 
					  services.redis.servers."".enable = true;
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  services.nginx.virtualHosts."matrix.pvv.ntnu.no" = lib.mkMerge [
 | 
					  services.nginx.virtualHosts."matrix.pvv.ntnu.no" = lib.mkMerge [
 | 
				
			||||||
  ({
 | 
					 | 
				
			||||||
    kTLS = true;
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
  ({
 | 
					  ({
 | 
				
			||||||
    locations."/.well-known/matrix/server" = {
 | 
					    locations."/.well-known/matrix/server" = {
 | 
				
			||||||
      return = ''
 | 
					      return = ''
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,15 @@
 | 
				
			|||||||
{ config, values, ... }:
 | 
					{ config, values, ... }:
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					  security.acme = {
 | 
				
			||||||
 | 
					    acceptTerms = true;
 | 
				
			||||||
 | 
					    defaults.email = "danio@pvv.ntnu.no";
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  services.nginx = {
 | 
					  services.nginx = {
 | 
				
			||||||
    enable = true;
 | 
					    enable = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    enableReload = true;
 | 
					    enableReload = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    defaultListenAddresses = [
 | 
					    defaultListenAddresses = [
 | 
				
			||||||
      values.hosts.bicep.ipv4
 | 
					      values.hosts.bicep.ipv4
 | 
				
			||||||
      "[${values.hosts.bicep.ipv6}]"
 | 
					      "[${values.hosts.bicep.ipv6}]"
 | 
				
			||||||
@@ -13,6 +20,7 @@
 | 
				
			|||||||
    ];
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    appendConfig = ''
 | 
					    appendConfig = ''
 | 
				
			||||||
 | 
					      pcre_jit on;
 | 
				
			||||||
      worker_processes 8;
 | 
					      worker_processes 8;
 | 
				
			||||||
      worker_rlimit_nofile 8192;
 | 
					      worker_rlimit_nofile 8192;
 | 
				
			||||||
    '';
 | 
					    '';
 | 
				
			||||||
@@ -21,5 +29,17 @@
 | 
				
			|||||||
      multi_accept on;
 | 
					      multi_accept on;
 | 
				
			||||||
      worker_connections 4096;
 | 
					      worker_connections 4096;
 | 
				
			||||||
    '';
 | 
					    '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    recommendedProxySettings = true;
 | 
				
			||||||
 | 
					    recommendedTlsSettings = true;
 | 
				
			||||||
 | 
					    recommendedGzipSettings = true;
 | 
				
			||||||
 | 
					    recommendedBrotliSettings = true;
 | 
				
			||||||
 | 
					    recommendedOptimisation = true;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  networking.firewall.allowedTCPPorts = [ 80 443 ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  systemd.services.nginx.serviceConfig = {
 | 
				
			||||||
 | 
					    LimitNOFILE = 65536;
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -91,7 +91,6 @@ in {
 | 
				
			|||||||
  services.nginx.virtualHosts.${cfg.settings.server.domain} = {
 | 
					  services.nginx.virtualHosts.${cfg.settings.server.domain} = {
 | 
				
			||||||
    enableACME = true;
 | 
					    enableACME = true;
 | 
				
			||||||
    forceSSL = true;
 | 
					    forceSSL = true;
 | 
				
			||||||
    kTLS = true;
 | 
					 | 
				
			||||||
    locations = {
 | 
					    locations = {
 | 
				
			||||||
      "/" = {
 | 
					      "/" = {
 | 
				
			||||||
        proxyPass = "http://127.0.0.1:${toString cfg.settings.server.http_port}";
 | 
					        proxyPass = "http://127.0.0.1:${toString cfg.settings.server.http_port}";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,12 +0,0 @@
 | 
				
			|||||||
{ values, ... }:
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  # Gitea already exports at /metrics
 | 
					 | 
				
			||||||
  services.prometheus.scrapeConfigs = [{
 | 
					 | 
				
			||||||
    job_name = "gitea";
 | 
					 | 
				
			||||||
    scrape_interval = "15s";
 | 
					 | 
				
			||||||
    metrics_path = "/metrics/gitea";
 | 
					 | 
				
			||||||
    static_configs = [{
 | 
					 | 
				
			||||||
      targets = [ "git.pvv.ntnu.no:443" ];
 | 
					 | 
				
			||||||
    }];
 | 
					 | 
				
			||||||
  }];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,8 +1,15 @@
 | 
				
			|||||||
{ config, values, ... }:
 | 
					{ config, values, ... }:
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					  security.acme = {
 | 
				
			||||||
 | 
					    acceptTerms = true;
 | 
				
			||||||
 | 
					    defaults.email = "drift@pvv.ntnu.no";
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  services.nginx = {
 | 
					  services.nginx = {
 | 
				
			||||||
    enable = true;
 | 
					    enable = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    enableReload = true;
 | 
					    enableReload = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    defaultListenAddresses = [
 | 
					    defaultListenAddresses = [
 | 
				
			||||||
      values.hosts.ildkule.ipv4
 | 
					      values.hosts.ildkule.ipv4
 | 
				
			||||||
      "[${values.hosts.ildkule.ipv6}]"
 | 
					      "[${values.hosts.ildkule.ipv6}]"
 | 
				
			||||||
@@ -11,5 +18,12 @@
 | 
				
			|||||||
      "127.0.0.2"
 | 
					      "127.0.0.2"
 | 
				
			||||||
      "[::1]"
 | 
					      "[::1]"
 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    recommendedProxySettings = true;
 | 
				
			||||||
 | 
					    recommendedTlsSettings = true;
 | 
				
			||||||
 | 
					    recommendedGzipSettings = true;
 | 
				
			||||||
 | 
					    recommendedOptimisation = true;
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  networking.firewall.allowedTCPPorts = [ 80 443 ];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								modules/debug-locations.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								modules/debug-locations.nix
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					{ config, lib, ... }:
 | 
				
			||||||
 | 
					let
 | 
				
			||||||
 | 
					  cfg = config.environment.debug-locations;
 | 
				
			||||||
 | 
					in
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  options.environment.debug-locations = lib.mkOption {
 | 
				
			||||||
 | 
					    description = "Paths and derivations to symlink in `/etc/debug`";
 | 
				
			||||||
 | 
					    type = with lib.types; attrsOf path;
 | 
				
			||||||
 | 
					    default = { };
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  config.environment.etc = lib.mapAttrs' (k: v: lib.nameValuePair "debug/${k}" { source = v; }) cfg;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -24,12 +24,15 @@ in {
 | 
				
			|||||||
  services.grzegorz-webui.hostName = "${config.networking.fqdn}";
 | 
					  services.grzegorz-webui.hostName = "${config.networking.fqdn}";
 | 
				
			||||||
  services.grzegorz-webui.apiBase = "http://${toString grg.listenAddr}:${toString grg.listenPort}/api";
 | 
					  services.grzegorz-webui.apiBase = "http://${toString grg.listenAddr}:${toString grg.listenPort}/api";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  security.acme.acceptTerms = true;
 | 
				
			||||||
 | 
					  security.acme.defaults.email = "pederbs@pvv.ntnu.no";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  services.nginx.enable = true;
 | 
					  services.nginx.enable = true;
 | 
				
			||||||
 | 
					  networking.firewall.allowedTCPPorts = [ 80 443 ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  services.nginx.virtualHosts."${config.networking.fqdn}" = {
 | 
					  services.nginx.virtualHosts."${config.networking.fqdn}" = {
 | 
				
			||||||
    forceSSL = true;
 | 
					    forceSSL = true;
 | 
				
			||||||
    enableACME = true;
 | 
					    enableACME = true;
 | 
				
			||||||
    kTLS = true;
 | 
					 | 
				
			||||||
    serverAliases = [
 | 
					    serverAliases = [
 | 
				
			||||||
      "${config.networking.hostName}.pvv.org"
 | 
					      "${config.networking.hostName}.pvv.org"
 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,5 +4,4 @@ lib.makeScope pkgs.newScope (self: {
 | 
				
			|||||||
  PluggableAuth = self.callPackage ./pluggable-auth { };
 | 
					  PluggableAuth = self.callPackage ./pluggable-auth { };
 | 
				
			||||||
  SimpleSAMLphp = self.callPackage ./simple-saml-php { };
 | 
					  SimpleSAMLphp = self.callPackage ./simple-saml-php { };
 | 
				
			||||||
  UserMerge = self.callPackage ./user-merge { };
 | 
					  UserMerge = self.callPackage ./user-merge { };
 | 
				
			||||||
  VisualEditor = self.callPackage ./visual-editor { };
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +0,0 @@
 | 
				
			|||||||
{ fetchzip }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
fetchzip {
 | 
					 | 
				
			||||||
  name = "mediawiki-visual-editor-source";
 | 
					 | 
				
			||||||
  url = "https://extdist.wmflabs.org/dist/extensions/VisualEditor-REL1_40-5f8c97e.tar.gz";
 | 
					 | 
				
			||||||
  hash = "sha256-oBMmEDKsFxrD0tpN2dy264IXK164BrZWrNK3v3FNX6w=";
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -22,13 +22,6 @@ idp:
 | 
				
			|||||||
    admin_password: ENC[AES256_GCM,data:Vf33Oenk6x6BIij1uW8RQDjTPcKhUVYA,iv:RNeyCNpTAYdBPrZwE3Y6CCjoAML/3XUvjfJCrr06IEU=,tag:zVOrx1oXnEyr/VwFCFaCDQ==,type:str]
 | 
					    admin_password: ENC[AES256_GCM,data:Vf33Oenk6x6BIij1uW8RQDjTPcKhUVYA,iv:RNeyCNpTAYdBPrZwE3Y6CCjoAML/3XUvjfJCrr06IEU=,tag:zVOrx1oXnEyr/VwFCFaCDQ==,type:str]
 | 
				
			||||||
    postgres_password: ENC[AES256_GCM,data:HGwKLbn/umPLPgH+qpXtugvXzOcXdlhK,iv:ypTW0VLSape8K5aCYu3BdjG/oMmqvfDSLw9uGLthb0Q=,tag:qlDMGz59qzMwEwBYxsC0XQ==,type:str]
 | 
					    postgres_password: ENC[AES256_GCM,data:HGwKLbn/umPLPgH+qpXtugvXzOcXdlhK,iv:ypTW0VLSape8K5aCYu3BdjG/oMmqvfDSLw9uGLthb0Q=,tag:qlDMGz59qzMwEwBYxsC0XQ==,type:str]
 | 
				
			||||||
    privatekey: ENC[AES256_GCM,data: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,iv:8cb1FcIm0oGkcrfLNqXamx4aDA3owBZoHur8+uFsdmA=,tag:oFPP/Yene6QrxFDKlmoVcA==,type:str]
 | 
					    privatekey: ENC[AES256_GCM,data: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,iv:8cb1FcIm0oGkcrfLNqXamx4aDA3owBZoHur8+uFsdmA=,tag:oFPP/Yene6QrxFDKlmoVcA==,type:str]
 | 
				
			||||||
nettsiden:
 | 
					 | 
				
			||||||
    mysql_password: ENC[AES256_GCM,data:Uv74HhWtYRbaFHcfh0Rk/Q==,iv:/lRTaMepwpJKZJWHnwb98Ywa1zP4e2EqYGmwI7BCl1I=,tag:ZnE0u2/65zdkONcoiBGSOQ==,type:str]
 | 
					 | 
				
			||||||
    door_secret: ENC[AES256_GCM,data:t0jEN1WnyEi10KRSg4Dlcd7IuIMBiOU7riOdYSZjvZTQqPijRYIoMEQ6OemIkD1Yg67uISTxnjxP,iv:Ss02VGKRa4oZMubbi8IfQDAjh3h295+n07vOx/IZGBs=,tag:OvdxqIUdYi/cR7IjopSVQQ==,type:str]
 | 
					 | 
				
			||||||
    simplesamlphp:
 | 
					 | 
				
			||||||
        postgres_password: ENC[AES256_GCM,data:SvbrdHF4vQ94DgoEfy67QS5oziAsMT8H,iv:LOHBqMecA6mgV3NMfmfTh3zDGiDve+t3+uaO53dIxt4=,tag:9ffz84ozIqytNdGB1COMhA==,type:str]
 | 
					 | 
				
			||||||
        cookie_salt: ENC[AES256_GCM,data:VmODSLOP1YDBrpHdk/49qx9BS+aveEYDQ1D24d4zCi06kZsCENCr+vdPAnTeM1pw98RTr3yZAEQTh4s90b6v8Q==,iv:vRClu6neyYPFdtD63kjnvK2iNOIHMbh+9qEGph7CI60=,tag:66fgppVxY0egs4+9XfDBPA==,type:str]
 | 
					 | 
				
			||||||
        admin_password: ENC[AES256_GCM,data:SADr/zN3F0tW339kSK1nD9Pb38rw7hz8,iv:s5jgl1djXd5JKwx1WG/w2Q4STMMpjJP91qxOwAoNcL0=,tag:N8bKnO9N0ei06HDkSGt6XQ==,type:str]
 | 
					 | 
				
			||||||
sops:
 | 
					sops:
 | 
				
			||||||
    kms: []
 | 
					    kms: []
 | 
				
			||||||
    gcp_kms: []
 | 
					    gcp_kms: []
 | 
				
			||||||
@@ -62,8 +55,8 @@ sops:
 | 
				
			|||||||
            akVjeTNTeGorZjJQOVlMeCtPRUVYL3MK+VMvGxrbzGz4Q3sdaDDWjal+OiK+JYKX
 | 
					            akVjeTNTeGorZjJQOVlMeCtPRUVYL3MK+VMvGxrbzGz4Q3sdaDDWjal+OiK+JYKX
 | 
				
			||||||
            GHiMXVHQJZu/RrlxMjHKN6V3iaqxZpuvLAEJ2Lzy5EOHPtuiiRyeHQ==
 | 
					            GHiMXVHQJZu/RrlxMjHKN6V3iaqxZpuvLAEJ2Lzy5EOHPtuiiRyeHQ==
 | 
				
			||||||
            -----END AGE ENCRYPTED FILE-----
 | 
					            -----END AGE ENCRYPTED FILE-----
 | 
				
			||||||
    lastmodified: "2024-04-08T20:36:13Z"
 | 
					    lastmodified: "2024-03-30T21:22:02Z"
 | 
				
			||||||
    mac: ENC[AES256_GCM,data:IObBR2H3cPIvBNWSo7A5xwyKeg2HbFkfxcU1U5BpRx2gvNb9/h7lextQ6IWPHOS/LZRXY+lZdhX6zLf6aLQjxTATZcrcF2BIu6YM5wppXOjVxhy3dkItU5TGPuxBdZEZ1bEpFu3B1Ooc1UdWvEWqZz2Mcn2akoX53Mj2vU8WGO8=,iv:fHvPHO33y6y3OSbVkojw2+XnpCNHO1AnCm2RnuwxPVA=,tag:m44YZd4Q4DEHCoDCoayqsg==,type:str]
 | 
					    mac: ENC[AES256_GCM,data:o3buZqOYZXiNyJ7zDtaBDFwbtP5i0QNvHxVVxtVWdLdRASVmau/ZXdQ8MNsExe6gUF4dS6Sv7QYXRfUO7ccmUDP4zABlIOcxjwsRTs5lE45S6pVIB98OIAODHdyl6LVsgxEkhdPmSoYRjLIWO56KlKArxPQGiprCI7AIBe6DYik=,iv:sAEeBMuJ8JwI3STZuy4miZhXA9Lopbof+3aaprtWVJ4=,tag:LBIRH7KwZ0CuuXuioVL10Q==,type:str]
 | 
				
			||||||
    pgp:
 | 
					    pgp:
 | 
				
			||||||
        - created_at: "2023-05-21T00:28:40Z"
 | 
					        - created_at: "2023-05-21T00:28:40Z"
 | 
				
			||||||
          enc: |
 | 
					          enc: |
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										0
									
								
								secrets/common.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								secrets/common.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -6,21 +6,15 @@
 | 
				
			|||||||
    extraGroups = [
 | 
					    extraGroups = [
 | 
				
			||||||
      "wheel"
 | 
					      "wheel"
 | 
				
			||||||
      "drift"
 | 
					      "drift"
 | 
				
			||||||
      "nix-builder-users"
 | 
					 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    packages = with pkgs; [
 | 
					    packages = with pkgs; [
 | 
				
			||||||
 | 
					      eza
 | 
				
			||||||
      neovim
 | 
					      neovim
 | 
				
			||||||
      htop
 | 
					 | 
				
			||||||
      ripgrep
 | 
					 | 
				
			||||||
      vim
 | 
					 | 
				
			||||||
      foot.terminfo
 | 
					 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    openssh.authorizedKeys.keys = [
 | 
					    openssh.authorizedKeys.keys = [
 | 
				
			||||||
      "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFa5y7KyLn2tjxed1czMbyM5scnEpo9v/GfnhL/28ckM legolas"
 | 
					      "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFa5y7KyLn2tjxed1czMbyM5scnEpo9v/GfnhL/28ckM legolas"
 | 
				
			||||||
      "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICf7SlyHR6KgP7+IeFr/Iuiu2lL5vaSlzqPonaO8XU0J gunalx@aragon"
 | 
					 | 
				
			||||||
      "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEj+Y0RUrSaF8gUW8m2BY6i8e7/0bUWhu8u8KW+AoHDh gunalx@nixos"
 | 
					 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user