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:
parent
053f2cb9cb
commit
b30a04c00c
1 changed files with 67 additions and 0 deletions
67
modules/services/dnsmasq.nix
Normal file
67
modules/services/dnsmasq.nix
Normal 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));
|
||||
};
|
||||
}
|
Loading…
Add table
Reference in a new issue