 cbd9e9e01f
			
		
	
	
		cbd9e9e01f
		
	
	
	
	
		
			
			In cases where you boot up really quickly (like in the VM test on a non-busy host), tinydns might want to bind before the loopback interface is fully up. Order tinydns after network.target to fix that.
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { config, lib, pkgs, ... }:
 | |
| 
 | |
| with lib;
 | |
| 
 | |
| {
 | |
|   ###### interface
 | |
| 
 | |
|   options = {
 | |
|     services.tinydns = {
 | |
|       enable = mkOption {
 | |
|         default = false;
 | |
|         type = types.bool;
 | |
|         description = "Whether to run the tinydns dns server";
 | |
|       };
 | |
| 
 | |
|       data = mkOption {
 | |
|         type = types.lines;
 | |
|         default = "";
 | |
|         description = "The DNS data to serve, in the format described by tinydns-data(8)";
 | |
|       };
 | |
| 
 | |
|       ip = mkOption {
 | |
|         default = "0.0.0.0";
 | |
|         type = types.str;
 | |
|         description = "IP address on which to listen for connections";
 | |
|       };
 | |
|     };
 | |
|   };
 | |
| 
 | |
|   ###### implementation
 | |
| 
 | |
|   config = mkIf config.services.tinydns.enable {
 | |
|     environment.systemPackages = [ pkgs.djbdns ];
 | |
| 
 | |
|     users.users.tinydns.isSystemUser = true;
 | |
| 
 | |
|     systemd.services.tinydns = {
 | |
|       description = "djbdns tinydns server";
 | |
|       wantedBy = [ "multi-user.target" ];
 | |
|       after = [ "network.target" ];
 | |
|       path = with pkgs; [ daemontools djbdns ];
 | |
|       preStart = ''
 | |
|         rm -rf /var/lib/tinydns
 | |
|         tinydns-conf tinydns tinydns /var/lib/tinydns ${config.services.tinydns.ip}
 | |
|         cd /var/lib/tinydns/root/
 | |
|         ln -sf ${pkgs.writeText "tinydns-data" config.services.tinydns.data} data
 | |
|         tinydns-data
 | |
|       '';
 | |
|       script = ''
 | |
|         cd /var/lib/tinydns
 | |
|         exec ./run
 | |
|       '';
 | |
|     };
 | |
|   };
 | |
| }
 |