nix-config/hosts/radiobert/readsb.nix

78 lines
2.2 KiB
Nix

{ config, pkgs, ... }:
let
statsDir = "/run/adsb-feed";
in {
boot.blacklistedKernelModules = [
# no watching TV intended
"dvb_usb_rtl28xxu"
];
users.users.readsb = {
isSystemUser = true;
group = "adsb";
};
users.groups.adsb = {};
systemd.tmpfiles.rules = [
"d ${statsDir} 0755 readsb adsb -"
];
systemd.services.readsb = {
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${pkgs.readsb}/bin/readsb --device-type rtlsdr --modeac --aggressive --fix --stats-range --dcfilter --quiet --gain=-10 --lon=13.728 --lat=51.081 --write-json=${statsDir} --net --net-ro-port=30002 --net-sbs-port=30003 --net-bo-port=30005 --net-vrs-port=30006 --net-beast-reduce-interval 1 --net-connector feed.adsbexchange.com,30005,beast_reduce_out --uuid-file=${builtins.toFile "uuid" "68a0e3e1-c866-481c-b0cb-f12ff9e7465f"}";
User = "readsb";
Group = "adsb";
ProtectSystem = "full";
ProtectHome = true;
ReadWritePaths = statsDir;
Restart = "always";
RestartSec = "10s";
};
};
users.users.sbs2json = {
isSystemUser = true;
group = "adsb";
};
# SHIM because readsb has no web server like dump1090
systemd.services.sbs2json = {
wantedBy = [ "multi-user.target" ];
requires = [ "readsb.service" ];
serviceConfig = {
ExecStart = "${pkgs.heliwatch.http-json}/bin/http-json";
User = "sbs2json";
Group = "adsb";
ProtectSystem = "full";
ProtectHome = true;
Restart = "always";
RestartSec = "10s";
};
};
users.users.dump1090-influxdb = {
isSystemUser = true;
group = "adsb";
};
systemd.services.dump1090-influxdb = {
wantedBy = [ "multi-user.target" ];
requires = [ "readsb.service" ];
serviceConfig = {
ExecStart = "${pkgs.dump1090-influxdb}/bin/dump1090-influxdb";
User = "dump1090-influxdb";
Group = "adsb";
ProtectSystem = "full";
ProtectHome = true;
Restart = "always";
RestartSec = "10s";
};
};
services.collectd.plugins.exec = ''
Exec "${config.services.collectd.user}" "${pkgs.heliwatch.collectd-stats}/bin/collectd-stats"
'';
environment.systemPackages = with pkgs; [
dump1090_sdrplus
readsb
];
}