{ config, pkgs, ... }: let lat = "51.081"; lon = "13.728"; altitude = "150"; 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 --modeac --aggressive --fix --stats-range --dcfilter --quiet --gain=-10 --lon=${lon} --lat=${lat} --write-output=${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"; User = "readsb"; Group = "adsb"; ProtectSystem = "full"; ProtectHome = true; ReadWritePaths = statsDir; Restart = "always"; RestartSec = "10s"; }; }; users.users.mlat-client = { isSystemUser = true; group = "adsb"; }; # Feeds adsbexchange.com, test at https://www.adsbexchange.com/myip/ systemd.services.mlat-client = { wantedBy = [ "multi-user.target" ]; requires = [ "mlat-client.service" ]; serviceConfig = { ExecStart = "${pkgs.mlat-client}/bin/mlat-client --input-type beast --input-connect radiobert.serv.zentralwerk.org:30005 --lat ${lat} --lon ${lon} --alt ${altitude} --user C3D2"; User = "mlat-client"; Group = "adsb"; ProtectSystem = "full"; ProtectHome = true; 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 ]; }