2023-10-02 13:11:30 +02:00
|
|
|
{ config, pkgs, ... }:
|
|
|
|
let
|
|
|
|
my-python-packages = ps: with ps; [
|
|
|
|
# netcup-dns is not (yet) packaged, thus we build it from PyPI
|
|
|
|
(
|
|
|
|
buildPythonPackage rec {
|
|
|
|
pname = "netcup-dns";
|
|
|
|
version = "0.2.0";
|
|
|
|
# https://nixos.wiki/wiki/Packaging/Python#Fix_Missing_setup.py
|
|
|
|
format = "pyproject";
|
|
|
|
src = fetchPypi {
|
|
|
|
inherit pname version;
|
|
|
|
sha256 = "sha256-tZKPe02tHrTelyw30BQsJhdZpmDsggZ0rr4ag0eHtng=";
|
|
|
|
};
|
|
|
|
propagatedBuildInputs = [
|
|
|
|
# Dependencies
|
|
|
|
pkgs.python3Packages.requests
|
|
|
|
pkgs.python3Packages.nc-dnsapi
|
|
|
|
# Build dependencies
|
|
|
|
build
|
|
|
|
twine
|
|
|
|
];
|
|
|
|
}
|
|
|
|
)
|
2023-10-05 19:59:40 +02:00
|
|
|
# de-p1st-monitor is not (yet) packaged, thus we build it from PyPI
|
|
|
|
(
|
|
|
|
buildPythonPackage rec {
|
|
|
|
pname = "de.p1st.monitor";
|
|
|
|
version = "0.10.5";
|
|
|
|
# https://nixos.wiki/wiki/Packaging/Python#Fix_Missing_setup.py
|
|
|
|
format = "pyproject";
|
|
|
|
src = fetchPypi {
|
|
|
|
inherit pname version;
|
|
|
|
sha256 = "sha256-WF/+oUQjSaQY+p+1uo2i35CciGCKrB4hn9a3m8oEXpI=";
|
|
|
|
};
|
|
|
|
propagatedBuildInputs = [
|
|
|
|
# Dependencies
|
|
|
|
pkgs.python3Packages.psutil
|
|
|
|
# Build dependencies
|
|
|
|
build
|
|
|
|
twine
|
|
|
|
];
|
|
|
|
}
|
|
|
|
)
|
2023-10-02 13:11:30 +02:00
|
|
|
];
|
|
|
|
in
|
|
|
|
{
|
|
|
|
# TODO: For "/" this cfg resides in base.nix
|
|
|
|
fileSystems = {
|
|
|
|
"/mnt/data".options = [ "compress=zstd" "noatime" "commit=120" ];
|
|
|
|
"/mnt/backup".options = [ "compress=zstd" "noatime" "commit=120" ];
|
|
|
|
};
|
|
|
|
|
2023-10-05 19:59:40 +02:00
|
|
|
# Install de.p1st.monitor and netcup-dns Python packages.
|
2023-10-02 13:11:30 +02:00
|
|
|
environment.systemPackages = [
|
|
|
|
(pkgs.python3.withPackages my-python-packages)
|
2023-10-05 19:59:40 +02:00
|
|
|
# Dependency of de.p1st.monitor.
|
|
|
|
pkgs.smartmontools
|
2023-10-02 13:11:30 +02:00
|
|
|
];
|
2023-10-05 19:59:40 +02:00
|
|
|
|
2023-10-02 13:11:30 +02:00
|
|
|
# Configure netcup-dns.
|
|
|
|
# Create file `/etc/netcup-dns/netcup-dns-95191.json`.
|
|
|
|
deployment.keys."netcup-dns-95191.json" = {
|
|
|
|
keyFile = ../../secrets/netcup-dns.json;
|
|
|
|
destDir = "/etc/netcup-dns";
|
|
|
|
user = "netcup-dns";
|
|
|
|
group = "netcup-dns";
|
|
|
|
};
|
|
|
|
# Create netcup-dns daemon user.
|
|
|
|
users.users.netcup-dns = {
|
|
|
|
isSystemUser = true;
|
|
|
|
group = "netcup-dns";
|
|
|
|
description = "netcup-dns daemon";
|
|
|
|
};
|
|
|
|
users.groups.netcup-dns = {};
|
|
|
|
# Create netcup-dns timer.
|
|
|
|
systemd.timers."netcup-dns" = {
|
|
|
|
wantedBy = [ "timers.target" ];
|
2023-10-02 21:23:13 +02:00
|
|
|
partOf = [ "netcup-dns.service" ];
|
2023-10-02 13:11:30 +02:00
|
|
|
timerConfig = {
|
2023-10-02 16:13:17 +02:00
|
|
|
OnBootSec = "0m";
|
|
|
|
OnUnitInactiveSec = "3m";
|
|
|
|
|
2023-10-02 13:11:30 +02:00
|
|
|
AccuracySec = "15s";
|
|
|
|
RandomizedDelaySec = "15s";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
systemd.services."netcup-dns" = {
|
|
|
|
serviceConfig = {
|
|
|
|
Type = "oneshot";
|
|
|
|
PrivateTmp = true;
|
|
|
|
User = "netcup-dns";
|
|
|
|
Nice = 19;
|
|
|
|
IOSchedulingClass = "idle";
|
|
|
|
ExecStart = "${pkgs.python3.withPackages my-python-packages}/bin/netcup-dns";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
# Start Jinja-Compose project during boot.
|
|
|
|
# To few the log, run
|
|
|
|
# journalctl -b -u Jinja-Compose -f
|
|
|
|
#
|
|
|
|
systemd.services."Jinja-Compose" = {
|
|
|
|
description = "Start Jinja-Compose project";
|
|
|
|
path = with pkgs; [
|
|
|
|
# The `docker-compose` helper script is written in `bash` (!)
|
|
|
|
bash
|
|
|
|
docker
|
|
|
|
];
|
|
|
|
script = ''
|
|
|
|
/mnt/data/docker-compose/docker-compose up -d --wait
|
|
|
|
'';
|
|
|
|
# Start after login.
|
|
|
|
wantedBy = [ "multi-user.target" ];
|
|
|
|
};
|
2023-10-06 15:24:00 +02:00
|
|
|
|
|
|
|
# TODO: Service which checks if all running docker containers are healthy. Also for yodaYoga.
|
2023-10-02 13:11:30 +02:00
|
|
|
}
|