nix-git/modules/de-p1st-monitor.nix

88 lines
2.3 KiB
Nix
Raw Normal View History

2023-11-20 14:09:10 +01:00
{ lib, config, options, pkgs, modulesPath, ... }:
with lib;
2023-11-14 19:00:13 +01:00
let
2023-11-20 14:09:10 +01:00
cfg = config.yoda.de-p1st-monitor;
2023-11-14 19:00:13 +01:00
my-python-packages = ps: with ps; [
# de-p1st-monitor is not (yet) packaged, thus we build it from PyPI
(
buildPythonPackage rec {
pname = "de.p1st.monitor";
2024-01-01 18:31:32 +01:00
version = "0.12.1";
2023-11-14 19:00:13 +01:00
# https://nixos.wiki/wiki/Packaging/Python#Fix_Missing_setup.py
format = "pyproject";
src = fetchPypi {
inherit pname version;
2024-01-01 18:31:32 +01:00
sha256 = "sha256-exwn7q7QvLnWRq9TrG6jztejc2A0P4CxB8lKS981ZGA=";
2023-11-14 19:00:13 +01:00
};
propagatedBuildInputs = [
# Dependencies
pkgs.python3Packages.psutil
# Build dependencies
build
twine
];
}
)
];
in
{
2023-11-20 14:09:10 +01:00
options = {
yoda.de-p1st-monitor = mkOption {
type = types.str;
example = ''
[logging]
dir = /var/log/de-p1st-monitor/
[network.1]
network_interface = wlan0
'';
description = ''
Content of /etc/de-p1st-monitor/''${hostname}.ini
'';
};
};
2023-11-14 19:00:13 +01:00
2023-11-20 14:09:10 +01:00
config = {
# Install de.p1st.monitor packages.
environment.systemPackages = [
(pkgs.python3.withPackages my-python-packages)
# Dependency of de.p1st.monitor.
pkgs.smartmontools
];
# Dependency of de.p1st.monitor
boot.kernelModules = [ "drivetemp" ];
2023-11-14 19:00:13 +01:00
2023-11-20 14:09:10 +01:00
# Create configuration file.
environment.etc."de-p1st-monitor/${config.networking.hostName}.ini".text = cfg;
# Create de.p1st.monitor timer.
systemd.timers."de.p1st.monitor" = {
wantedBy = [ "timers.target" ];
partOf = [ "de.p1st.monitor.service" ];
timerConfig = {
OnBootSec = "0m";
OnUnitInactiveSec = "3m";
AccuracySec = "15s";
RandomizedDelaySec = "15s";
};
2023-11-14 19:00:13 +01:00
};
2023-11-20 14:09:10 +01:00
systemd.services."de.p1st.monitor" = {
serviceConfig = {
Type = "oneshot";
PrivateTmp = true;
# `smartctl` requires root to access /dev/* devices and read their temperatures.
User = "root";
Nice = 19;
IOSchedulingClass = "idle";
ExecStart = "${pkgs.python3.withPackages my-python-packages}/bin/de-p1st-monitor";
};
path = with pkgs; [
# Provides `findmnt` binary.
libuuid
smartmontools
];
2023-11-14 19:00:13 +01:00
};
};
}