mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-16 14:54:29 +01:00
Merge pull request #152029 from CRTified/adguard-settings
nixos/adguardhome: Add settings option
This commit is contained in:
commit
6b1102d94b
1 changed files with 50 additions and 4 deletions
|
@ -10,12 +10,20 @@ let
|
||||||
"--pidfile /run/AdGuardHome/AdGuardHome.pid"
|
"--pidfile /run/AdGuardHome/AdGuardHome.pid"
|
||||||
"--work-dir /var/lib/AdGuardHome/"
|
"--work-dir /var/lib/AdGuardHome/"
|
||||||
"--config /var/lib/AdGuardHome/AdGuardHome.yaml"
|
"--config /var/lib/AdGuardHome/AdGuardHome.yaml"
|
||||||
"--host ${cfg.host}"
|
|
||||||
"--port ${toString cfg.port}"
|
|
||||||
] ++ cfg.extraArgs);
|
] ++ cfg.extraArgs);
|
||||||
|
|
||||||
in
|
baseConfig = {
|
||||||
{
|
bind_host = cfg.host;
|
||||||
|
bind_port = cfg.port;
|
||||||
|
};
|
||||||
|
|
||||||
|
configFile = pkgs.writeTextFile {
|
||||||
|
name = "AdGuardHome.yaml";
|
||||||
|
text = builtins.toJSON (recursiveUpdate cfg.settings baseConfig);
|
||||||
|
checkPhase = "${pkgs.adguardhome}/bin/adguardhome -c $out --check-config";
|
||||||
|
};
|
||||||
|
|
||||||
|
in {
|
||||||
options.services.adguardhome = with types; {
|
options.services.adguardhome = with types; {
|
||||||
enable = mkEnableOption "AdGuard Home network-wide ad blocker";
|
enable = mkEnableOption "AdGuard Home network-wide ad blocker";
|
||||||
|
|
||||||
|
@ -44,6 +52,31 @@ in
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
mutableSettings = mkOption {
|
||||||
|
default = true;
|
||||||
|
type = bool;
|
||||||
|
description = ''
|
||||||
|
Allow changes made on the AdGuard Home web interface to persist between
|
||||||
|
service restarts.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
settings = mkOption {
|
||||||
|
type = (pkgs.formats.yaml { }).type;
|
||||||
|
default = { };
|
||||||
|
description = ''
|
||||||
|
AdGuard Home configuration. Refer to
|
||||||
|
<link xlink:href="https://github.com/AdguardTeam/AdGuardHome/wiki/Configuration#configuration-file"/>
|
||||||
|
for details on supported values.
|
||||||
|
|
||||||
|
<note><para>
|
||||||
|
On start and if <option>mutableSettings</option> is <literal>true</literal>,
|
||||||
|
these options are merged into the configuration file on start, taking
|
||||||
|
precedence over configuration changes made on the web interface.
|
||||||
|
</para></note>
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
extraArgs = mkOption {
|
extraArgs = mkOption {
|
||||||
default = [ ];
|
default = [ ];
|
||||||
type = listOf str;
|
type = listOf str;
|
||||||
|
@ -62,6 +95,19 @@ in
|
||||||
StartLimitIntervalSec = 5;
|
StartLimitIntervalSec = 5;
|
||||||
StartLimitBurst = 10;
|
StartLimitBurst = 10;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
preStart = ''
|
||||||
|
if [ -e "$STATE_DIRECTORY/AdGuardHome.yaml" ] \
|
||||||
|
&& [ "${toString cfg.mutableSettings}" = "1" ]; then
|
||||||
|
# Writing directly to AdGuardHome.yaml results in empty file
|
||||||
|
${pkgs.yaml-merge}/bin/yaml-merge "$STATE_DIRECTORY/AdGuardHome.yaml" "${configFile}" > "$STATE_DIRECTORY/AdGuardHome.yaml.tmp"
|
||||||
|
mv "$STATE_DIRECTORY/AdGuardHome.yaml.tmp" "$STATE_DIRECTORY/AdGuardHome.yaml"
|
||||||
|
else
|
||||||
|
cp --force "${configFile}" "$STATE_DIRECTORY/AdGuardHome.yaml"
|
||||||
|
chmod 600 "$STATE_DIRECTORY/AdGuardHome.yaml"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
DynamicUser = true;
|
DynamicUser = true;
|
||||||
ExecStart = "${pkgs.adguardhome}/bin/adguardhome ${args}";
|
ExecStart = "${pkgs.adguardhome}/bin/adguardhome ${args}";
|
||||||
|
|
Loading…
Reference in a new issue