| 
									
										
										
										
											2023-02-23 22:42:03 +01:00
										 |  |  | # Fast and lightweight DNS proxy as ad-blocker for local network | 
					
						
							| 
									
										
										
										
											2024-07-28 21:08:02 +02:00
										 |  |  | { | 
					
						
							|  |  |  |   config, | 
					
						
							|  |  |  |   lib, | 
					
						
							|  |  |  |   pkgs, | 
					
						
							|  |  |  |   ... | 
					
						
							|  |  |  | }: | 
					
						
							| 
									
										
										
										
											2023-02-23 22:42:03 +01:00
										 |  |  | let | 
					
						
							|  |  |  |   cfg = config.my.services.blocky; | 
					
						
							|  |  |  | in | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   options.my.services.blocky = with lib; { | 
					
						
							|  |  |  |     enable = mkEnableOption "Blocky DNS Server"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-04 21:08:37 +02:00
										 |  |  |     httpPort = mkOption { | 
					
						
							|  |  |  |       type = types.port; | 
					
						
							|  |  |  |       default = 8053; | 
					
						
							|  |  |  |       example = 8080; | 
					
						
							|  |  |  |       description = "port for requests"; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-23 22:42:03 +01:00
										 |  |  |     settings = mkOption { | 
					
						
							| 
									
										
										
										
											2023-11-07 23:13:51 +01:00
										 |  |  |       inherit (pkgs.formats.json { }) type; | 
					
						
							| 
									
										
										
										
											2023-02-23 22:42:03 +01:00
										 |  |  |       default = { }; | 
					
						
							| 
									
										
										
										
											2023-06-04 21:08:37 +02:00
										 |  |  |       example = literalExpression ''
 | 
					
						
							|  |  |  |         { ports.http = "8053" }; | 
					
						
							|  |  |  |       '';
 | 
					
						
							| 
									
										
										
										
											2023-02-23 22:42:03 +01:00
										 |  |  |       description = ''
 | 
					
						
							|  |  |  |         Override settings. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   config = lib.mkIf cfg.enable { | 
					
						
							| 
									
										
										
										
											2023-11-12 23:36:30 +01:00
										 |  |  |     services = { | 
					
						
							|  |  |  |       blocky = { | 
					
						
							|  |  |  |         enable = true; | 
					
						
							| 
									
										
										
										
											2023-02-23 22:42:03 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-12 23:36:30 +01:00
										 |  |  |         settings = { | 
					
						
							|  |  |  |           ports = { | 
					
						
							|  |  |  |             tls = "853"; | 
					
						
							|  |  |  |             http = cfg.httpPort; | 
					
						
							|  |  |  |           }; | 
					
						
							|  |  |  |           upstream = { | 
					
						
							|  |  |  |             default = [ | 
					
						
							|  |  |  |               "dns2.digitalcourage.de2" # classic | 
					
						
							|  |  |  |               "tcp-tls:dns3.digitalcourage.de" # DoT | 
					
						
							|  |  |  |               "https://dns.digitale-gesellschaft.ch/dns-query" # DoH | 
					
						
							|  |  |  |             ]; | 
					
						
							|  |  |  |           }; | 
					
						
							|  |  |  |           prometheus.enable = config.services.prometheus.enable; | 
					
						
							|  |  |  |         } // cfg.settings; | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2023-06-04 21:08:37 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-12 23:36:30 +01:00
										 |  |  |       prometheus.scrapeConfigs = [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           job_name = "blocky"; | 
					
						
							|  |  |  |           static_configs = [ | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |               targets = [ "127.0.0.1:${toString cfg.httpPort}" ]; | 
					
						
							|  |  |  |               labels = { | 
					
						
							|  |  |  |                 instance = config.networking.hostName; | 
					
						
							|  |  |  |               }; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           ]; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       ]; | 
					
						
							| 
									
										
										
										
											2023-06-04 21:08:37 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-12 23:36:30 +01:00
										 |  |  |       # untested | 
					
						
							|  |  |  |       grafana.provision.dashboards.settings.providers = [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           name = "Blocky"; | 
					
						
							|  |  |  |           options.path = pkgs.grafana-dashboards.blocky; | 
					
						
							|  |  |  |           disableDeletion = true; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       ]; | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2023-02-23 22:42:03 +01:00
										 |  |  |   }; | 
					
						
							|  |  |  | } |