nixpkgs/nixos/modules/services/networking/smartdns.nix
Silvan Mosberger 374e6bcc40 treewide: Format all Nix files
Format all Nix files using the officially approved formatter,
making the CI check introduced in the previous commit succeed:

  nix-build ci -A fmt.check

This is the next step of the of the [implementation](https://github.com/NixOS/nixfmt/issues/153)
of the accepted [RFC 166](https://github.com/NixOS/rfcs/pull/166).

This commit will lead to merge conflicts for a number of PRs,
up to an estimated ~1100 (~33%) among the PRs with activity in the past 2
months, but that should be lower than what it would be without the previous
[partial treewide format](https://github.com/NixOS/nixpkgs/pull/322537).

Merge conflicts caused by this commit can now automatically be resolved while rebasing using the
[auto-rebase script](8616af08d9/maintainers/scripts/auto-rebase).

If you run into any problems regarding any of this, please reach out to the
[formatting team](https://nixos.org/community/teams/formatting/) by
pinging @NixOS/nix-formatting.
2025-04-01 20:10:43 +02:00

78 lines
2.2 KiB
Nix

{
lib,
pkgs,
config,
...
}:
with lib;
let
inherit (lib.types)
attrsOf
coercedTo
listOf
oneOf
str
int
bool
;
cfg = config.services.smartdns;
confFile = pkgs.writeText "smartdns.conf" (
with generators;
toKeyValue {
mkKeyValue = mkKeyValueDefault {
mkValueString = v: if isBool v then if v then "yes" else "no" else mkValueStringDefault { } v;
} " ";
listsAsDuplicateKeys = true; # Allowing duplications because we need to deal with multiple entries with the same key.
} cfg.settings
);
in
{
options.services.smartdns = {
enable = mkEnableOption "SmartDNS DNS server";
bindPort = mkOption {
type = types.port;
default = 53;
description = "DNS listening port number.";
};
settings = mkOption {
type =
let
atom = oneOf [
str
int
bool
];
in
attrsOf (coercedTo atom toList (listOf atom));
example = literalExpression ''
{
bind = ":5353 -no-rule -group example";
cache-size = 4096;
server-tls = [ "8.8.8.8:853" "1.1.1.1:853" ];
server-https = "https://cloudflare-dns.com/dns-query -exclude-default-group";
prefetch-domain = true;
speed-check-mode = "ping,tcp:80";
};
'';
description = ''
A set that will be generated into configuration file, see the [SmartDNS README](https://github.com/pymumu/smartdns/blob/master/ReadMe_en.md#configuration-parameter) for details of configuration parameters.
You could override the options here like {option}`services.smartdns.bindPort` by writing `settings.bind = ":5353 -no-rule -group example";`.
'';
};
};
config = lib.mkIf cfg.enable {
services.smartdns.settings.bind = mkDefault ":${toString cfg.bindPort}";
systemd.packages = [ pkgs.smartdns ];
systemd.services.smartdns.wantedBy = [ "multi-user.target" ];
systemd.services.smartdns.restartTriggers = [ confFile ];
environment.etc."smartdns/smartdns.conf".source = confFile;
environment.etc."default/smartdns".source = "${pkgs.smartdns}/etc/default/smartdns";
};
}