Skip to content

Commit

Permalink
nixos/godns: init module
Browse files Browse the repository at this point in the history
Initial implementation of the GoDNS service module. This module allows users to enable and configure the GoDNS service on their NixOS system. It includes options for specifying the GoDNS package and the path to the configuration file.
  • Loading branch information
michaelvanstraten committed Dec 16, 2024
1 parent f8c6116 commit 5059144
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 0 deletions.
2 changes: 2 additions & 0 deletions nixos/doc/manual/release-notes/rl-2411.section.md
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,8 @@

- [Glances](https://github.com/nicolargo/glances), an open-source system cross-platform monitoring tool. Available as [services.glances](option.html#opt-services.glances).

- [GoDNS](https://github.com/TimothyYe/godns), a dynamic DNS client written in Go, which supports multiple DNS providers. Available as [services.godns](#opt-services.godns.enable).

## Backward Incompatibilities {#sec-release-24.11-incompatibilities}

- Nixpkgs now requires Nix 2.3.17 or newer to allow for zstd compressed binary artifacts.
Expand Down
1 change: 1 addition & 0 deletions nixos/modules/module-list.nix
Original file line number Diff line number Diff line change
Expand Up @@ -1064,6 +1064,7 @@
./services/networking/go-neb.nix
./services/networking/go-shadowsocks2.nix
./services/networking/gobgpd.nix
./services/networking/godns.nix
./services/networking/gvpe.nix
./services/networking/hans.nix
./services/networking/harmonia.nix
Expand Down
87 changes: 87 additions & 0 deletions nixos/modules/services/networking/godns.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
{
config,
lib,
pkgs,
...
}:
let
inherit (lib)
mkEnableOption
mkIf
mkOption
mkPackageOption
types
;

cfg = config.services.godns;

configFormat = pkgs.formats.yaml { };
configFile =
if cfg.configFile == null then configFormat.generate "config.yaml" cfg.config else cfg.configFile;
in
{

options.services.godns = {
enable = mkEnableOption "GoDNS service";

package = mkPackageOption pkgs "godns" { };

config = mkOption {
type = lib.types.submodule {
freeformType = configFormat;
};

default = { };

description = ''
Configuration for GoDNS. Refer to the [configuration section](1) in the
GoDNS GitHub repository for details.
[1]: https://github.com/TimothyYe/godns?tab=readme-ov-file#configuration
'';
};

configFile = lib.mkOption {
default = null;
description = ''
Path to a custom GoDNS configuration file.
If set, this option overrides the configuration provided by the `config`
option. This is particularly useful for specifying sensitive values like
the `login_token` for API providers. For generating a configuration file
with secrets, consider using [sops-nix templates][1].
[1]: https://github.com/Mic92/sops-nix?tab=readme-ov-file#templates
'';
type = types.nullOr types.path;
};

additionalRestartTriggers = mkOption {
default = [ ];
type = types.listOf types.unspecified;
description = ''
Additional triggers to restart the GoDNS service.
This can be used to restart the service when, for example, a secret used
to generate the configuration changes.
'';
};
};

config = mkIf cfg.enable {
systemd.services.godns = {
description = "GoDNS service";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
serviceConfig = {
ExecStart = "${lib.getExe cfg.package} -c ${configFile}";
Restart = "always";
KillMode = "process";
RestartSec = "2s";
};
restartTriggers = [ ] ++ cfg.additionalRestartTriggers;
};
};

meta.maintainers = [ lib.maintainers.michaelvanstraten ];
}

0 comments on commit 5059144

Please sign in to comment.