| 
									
										
										
										
											2025-05-05 02:59:56 +01:00
										 |  |  | { | 
					
						
							|  |  |  |   config, | 
					
						
							|  |  |  |   inputs, | 
					
						
							|  |  |  |   lib, | 
					
						
							|  |  |  |   ... | 
					
						
							|  |  |  | }: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let | 
					
						
							|  |  |  |   inherit (lib) | 
					
						
							|  |  |  |     mkEnableOption | 
					
						
							|  |  |  |     mkIf | 
					
						
							|  |  |  |     mkOption | 
					
						
							|  |  |  |     types | 
					
						
							|  |  |  |     ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   cfg = homelab.services.${service}; | 
					
						
							|  |  |  |   homelab = config.homelab; | 
					
						
							|  |  |  |   service = "peertube"; | 
					
						
							|  |  |  | in | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   options.homelab.services.${service} = { | 
					
						
							|  |  |  |     enable = mkEnableOption "Enable ${service}"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     url = mkOption { | 
					
						
							|  |  |  |       default = "videos.${homelab.domain}"; | 
					
						
							|  |  |  |       type = types.str; | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2025-05-07 00:47:43 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     homepage.name = mkOption { | 
					
						
							|  |  |  |       default = "Peertube"; | 
					
						
							|  |  |  |       type = types.str; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     homepage.description = mkOption { | 
					
						
							|  |  |  |       default = "A free and open-source, decentralized, ActivityPub federated video platform"; | 
					
						
							|  |  |  |       type = types.str; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     homepage.icon = mkOption { | 
					
						
							|  |  |  |       default = "peertube"; | 
					
						
							|  |  |  |       type = types.str; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     homepage.category = mkOption { | 
					
						
							|  |  |  |       default = "Media"; | 
					
						
							|  |  |  |       type = types.str; | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2025-05-05 02:59:56 +01:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   config = mkIf cfg.enable { | 
					
						
							|  |  |  |     services = { | 
					
						
							|  |  |  |       ${service} = { | 
					
						
							|  |  |  |         enable = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         configureNginx = true; | 
					
						
							|  |  |  |         enableWebHttps = false; | 
					
						
							|  |  |  |         localDomain = cfg.url; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         database = { | 
					
						
							|  |  |  |           createLocally = true; | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         redis = { | 
					
						
							|  |  |  |           createLocally = true; | 
					
						
							|  |  |  |           enableUnixSocket = true; | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         secrets.secretsFile = config.age.secrets.peertube-env.path; | 
					
						
							| 
									
										
										
										
											2025-05-07 00:47:43 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         settings = { | 
					
						
							|  |  |  |           webserver = { | 
					
						
							|  |  |  |             hostname = config.services.${service}.localDomain; | 
					
						
							|  |  |  |             port = lib.mkForce 443; | 
					
						
							|  |  |  |           }; | 
					
						
							|  |  |  |         }; | 
					
						
							| 
									
										
										
										
											2025-05-05 02:59:56 +01:00
										 |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       cloudflared.tunnels.${homelab.cloudflared.tunnelId}.ingress = { | 
					
						
							| 
									
										
										
										
											2025-05-06 23:52:22 +01:00
										 |  |  |         ${cfg.url} = "http://localhost:${toString config.services.${service}.listenWeb}"; | 
					
						
							| 
									
										
										
										
											2025-05-05 02:59:56 +01:00
										 |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     age.secrets."${service}-env" = { | 
					
						
							|  |  |  |       file = "${inputs.self}/secrets/${service}-env.age"; | 
					
						
							|  |  |  |       owner = config.services.${service}.user; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | } |