Files
Cryolitia PukNgae 7cc3f54c2f nixos/whois: init module
Add a NixOS module for the whois client.

This module installs the package and generates /etc/whois.conf from
programs.whois.settings.
2026-03-31 18:33:50 +08:00

90 lines
2.1 KiB
Nix

{
config,
lib,
pkgs,
...
}:
let
cfg = config.programs.whois;
configText =
lib.concatStringsSep "\n" (
[
"# Generated by NixOS."
"# See whois.conf(5) for the file format."
]
++ map (entry: "${entry.pattern} ${entry.server}") cfg.settings
)
+ "\n";
in
{
options.programs.whois = {
enable = lib.mkEnableOption "whois, an intelligent WHOIS client";
package = lib.mkPackageOption pkgs "whois" { };
settings = lib.mkOption {
type = lib.types.listOf (
lib.types.submodule {
options = {
pattern = lib.mkOption {
type = lib.types.str;
example = "\\.dn42$";
description = ''
Case-insensitive extended regular expression used to match the
WHOIS object identifier.
'';
};
server = lib.mkOption {
type = lib.types.str;
example = "whois.dn42";
description = ''
WHOIS server to use when {option}`pattern` matches.
'';
};
};
}
);
default = [ ];
example = lib.literalExpression ''
[
{
pattern = "\\.dn42$";
server = "whois.dn42";
}
{
pattern = "\\-DN42$";
server = "whois.dn42";
}
{
pattern = "^as424242[0-9]{4}$";
server = "whois.dn42";
}
{
pattern = "^172\\.2[0-3]\\.[0-9]{1,3}\\.[0-9]{1,3}(/(1[56789]|2[0-9]|3[012]))?$";
server = "whois.dn42";
}
]
'';
description = ''
WHOIS configuration entries written to {file}`/etc/whois.conf`.
Entries are written in the declared order, which matters when multiple
patterns may match the same query.
'';
};
};
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
environment.etc."whois.conf".text = configText;
};
meta.maintainers = with lib.maintainers; [ Cryolitia ];
}