101 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| {
 | |
|   config,
 | |
|   pkgs,
 | |
|   lib,
 | |
|   ...
 | |
| }:
 | |
| 
 | |
| with lib;
 | |
| 
 | |
| let
 | |
|   port = 8082;
 | |
| in
 | |
| {
 | |
|   options.nixosModules.pihole.enable = mkEnableOption "Enable pihole";
 | |
| 
 | |
|   config = mkIf config.nixosModules.pihole.enable {
 | |
|     virtualisation = {
 | |
|       docker = {
 | |
|         enable = true;
 | |
|         autoPrune.enable = true;
 | |
|       };
 | |
| 
 | |
|       oci-containers = {
 | |
|         backend = "docker";
 | |
| 
 | |
|         containers."pihole" = {
 | |
|           image = "pihole/pihole:latest";
 | |
| 
 | |
|           environment = {
 | |
|             "PIHOLE_DNS_1" = "8.8.8.8";
 | |
|             "PIHOLE_DNS_2" = "8.8.4.4";
 | |
|             "TZ" = "Europe/London";
 | |
|           };
 | |
| 
 | |
|           volumes = [
 | |
|             "/home/opdavies/pihole/etc-dnsmasq.d:/etc/dnsmasq.d:rw"
 | |
|             "/home/opdavies/pihole/etc-pihole:/etc/pihole:rw"
 | |
|           ];
 | |
| 
 | |
|           ports = [
 | |
|             "53:53/tcp"
 | |
|             "53:53/udp"
 | |
|             "67:67/udp"
 | |
|             "${toString port}:80/tcp"
 | |
|           ];
 | |
| 
 | |
|           log-driver = "journald";
 | |
| 
 | |
|           extraOptions = [
 | |
|             "--cap-add=NET_ADMIN"
 | |
|             "--network-alias=pihole"
 | |
|             "--network=pihole_default"
 | |
|           ];
 | |
|         };
 | |
|       };
 | |
|     };
 | |
| 
 | |
|     systemd = {
 | |
|       services = {
 | |
|         "docker-pihole" = {
 | |
|           serviceConfig = {
 | |
|             Restart = lib.mkOverride 90 "always";
 | |
|             RestartMaxDelaySec = lib.mkOverride 90 "1m";
 | |
|             RestartSec = lib.mkOverride 90 "100ms";
 | |
|             RestartSteps = lib.mkOverride 90 9;
 | |
|           };
 | |
| 
 | |
|           after = [ "docker-network-pihole_default.service" ];
 | |
|           requires = [ "docker-network-pihole_default.service" ];
 | |
|           partOf = [ "docker-compose-pihole-root.target" ];
 | |
|           wantedBy = [ "docker-compose-pihole-root.target" ];
 | |
|         };
 | |
| 
 | |
|         "docker-network-pihole_default" = {
 | |
|           path = [ pkgs.docker ];
 | |
| 
 | |
|           serviceConfig = {
 | |
|             Type = "oneshot";
 | |
|             RemainAfterExit = true;
 | |
|             ExecStop = "docker network rm -f pihole_default";
 | |
|           };
 | |
| 
 | |
|           script = ''
 | |
|             docker network inspect pihole_default || docker network create pihole_default
 | |
|           '';
 | |
| 
 | |
|           partOf = [ "docker-compose-pihole-root.target" ];
 | |
|           wantedBy = [ "docker-compose-pihole-root.target" ];
 | |
|         };
 | |
|       };
 | |
| 
 | |
|       targets."docker-compose-pihole-root" = {
 | |
|         unitConfig = {
 | |
|           Description = "Root target generated by compose2nix.";
 | |
|         };
 | |
| 
 | |
|         wantedBy = [ "multi-user.target" ];
 | |
|       };
 | |
|     };
 | |
|   };
 | |
| }
 |