mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-10 19:55:41 +03:00

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.
78 lines
2.2 KiB
Nix
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";
|
|
};
|
|
}
|