1
0
Fork 0
mirror of https://github.com/LnL7/nix-darwin.git synced 2025-03-28 02:37:09 +00:00

ft: add DNSmasq service

This is useful for redirecting some TLDs to the different addresses. For
example I use it to make all requests to `*.localhost` to be resolved to
loopback address which allows me to easily work and test services that
are relying on different domains.
This commit is contained in:
Łukasz Niemier 2020-04-28 18:49:08 +02:00
parent 053f2cb9cb
commit b30a04c00c
No known key found for this signature in database
GPG key ID: C775391C950A6AEE

View file

@ -0,0 +1,67 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.dnsmasq;
mapA = f: attrs: with builtins; attrValues (mapAttrs f attrs);
in
{
options = {
services.dnsmasq.enable = mkOption {
type = types.bool;
default = false;
description = "Whether to enable DNSmasq.";
};
services.dnsmasq.package = mkOption {
type = types.path;
default = pkgs.dnsmasq;
defaultText = "pkgs.dnsmasq";
description = "This option specifies the dnsmasq package to use.";
};
services.dnsmasq.bind = mkOption {
type = types.string;
default = "127.0.0.1";
description = "This option specifies the interface on which DNSmasq will listen.";
};
services.dnsmasq.port = mkOption {
type = types.int;
default = 53;
description = "This option specifies port on which DNSmasq will listen.";
};
services.dnsmasq.addresses = mkOption {
type = types.attrs;
default = {};
description = "List of domains that will be redirected by the DNSmasq";
};
};
config = mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
launchd.daemons.dnsmasq = {
serviceConfig.ProgramArguments = [
"${cfg.package}/bin/dnsmasq"
"--listen-address=${cfg.bind}"
"--port=${toString cfg.port}"
"--keep-in-foreground"
] ++ (mapA (domain: addr: "--address=/${domain}/${addr}") cfg.addresses);
serviceConfig.KeepAlive = true;
serviceConfig.RunAtLoad = true;
};
environment.etc = builtins.listToAttrs (builtins.map (domain: {
name = "resolver/${domain}";
value = {
enable = true;
text = "nameserver ${cfg.bind}.${toString cfg.port}";
};
}) (builtins.attrNames cfg.addresses));
};
}