162 lines
4.9 KiB
Nix
162 lines
4.9 KiB
Nix
{ mainConfig, feederConfig, pkgs, self, lib }: {
|
|
|
|
config = {
|
|
users.groups.${feederConfig.name} = { };
|
|
users.users.${feederConfig.name} = {
|
|
isSystemUser = true;
|
|
group = "${feederConfig.name}";
|
|
};
|
|
|
|
systemd.services."${feederConfig.name}-mlat" =
|
|
let
|
|
uuidFile = pkgs.writeTextFile {
|
|
name = "${feederConfig.name}-uuid";
|
|
text = "${feederConfig.uuid}";
|
|
};
|
|
options = [
|
|
"--input-type"
|
|
feederConfig.mlat.input.type
|
|
"--no-udp"
|
|
"--input-connect"
|
|
"${feederConfig.mlat.input.host}:${toString feederConfig.mlat.input.port}"
|
|
"--server"
|
|
feederConfig.mlat.server
|
|
"--user"
|
|
feederConfig.username
|
|
"--lat"
|
|
mainConfig.latitude
|
|
"--lon"
|
|
mainConfig.longitude
|
|
"--alt"
|
|
(toString mainConfig.altitude)
|
|
"--uuid-file"
|
|
"${uuidFile}"
|
|
] ++ (
|
|
if feederConfig.mlat.privacy
|
|
then
|
|
[
|
|
"--privacy"
|
|
]
|
|
else
|
|
[ ]
|
|
) ++ (
|
|
map (result: "--result ${result}") feederConfig.mlat.results
|
|
);
|
|
in
|
|
{
|
|
enable = feederConfig.mlat.enable;
|
|
description = "${feederConfig.name} MLAT client.";
|
|
wants = [ "network.target" ];
|
|
after = [ "network.target" ];
|
|
unitConfig = {
|
|
Documentation = "https://github.com/makrsmark/mlat-client/";
|
|
};
|
|
serviceConfig = {
|
|
Type = "simple";
|
|
User = "${feederConfig.name}";
|
|
RuntimeDirectory = "${feederConfig.name}-mlat";
|
|
RuntimeDirectoryMode = "0755";
|
|
ExecStart = "${self.packages.${pkgs.system}.adsbfi-mlat-client}/bin/mlat-client ${lib.concatStringsSep " " options}";
|
|
SyslogIdentifier = "${feederConfig.name}-mlat";
|
|
Restart = "on-failure";
|
|
RestartSec = 30;
|
|
Nice = -1;
|
|
};
|
|
wantedBy = [ "multi-user.target" ];
|
|
};
|
|
|
|
systemd.services."${feederConfig.name}-feed" =
|
|
let
|
|
uuidFile = pkgs.writeTextFile {
|
|
name = "${feederConfig.name}-uuid";
|
|
text = "${feederConfig.uuid}";
|
|
};
|
|
connectors = map
|
|
(
|
|
connector: "--net-connector ${connector}"
|
|
)
|
|
(
|
|
map
|
|
(
|
|
connector: (
|
|
lib.concatStringsSep "," (
|
|
[
|
|
connector.primary.host
|
|
(toString connector.primary.port)
|
|
connector.protocol
|
|
] ++ (
|
|
if connector.silentFail
|
|
then
|
|
[
|
|
"silent_fail"
|
|
]
|
|
else
|
|
[ ]
|
|
) ++ (
|
|
if connector.secondary != null
|
|
then
|
|
[
|
|
connector.secondary.host
|
|
(toString connector.secondary.port)
|
|
]
|
|
else
|
|
[ ]
|
|
)
|
|
)
|
|
)
|
|
)
|
|
feederConfig.feed.connectors
|
|
);
|
|
options = [
|
|
"--quiet"
|
|
"--net"
|
|
"--net-only"
|
|
"--write-json"
|
|
"%t/${feederConfig.name}-feed"
|
|
"--net-beast-reduce-interval 0.5"
|
|
"--net-heartbeat 60"
|
|
"--net-ro-size 1280"
|
|
"--net-ro-interval 0.2"
|
|
"--net-ro-port 0"
|
|
"--net-sbs-port 0"
|
|
"--net-bi-port ${toString feederConfig.feed.beastInputPort}"
|
|
"--net-bo-port 0"
|
|
"--net-ri-port 0"
|
|
"--write-json-every 1"
|
|
"--lat"
|
|
mainConfig.latitude
|
|
"--lon"
|
|
mainConfig.longitude
|
|
"--max-range 450"
|
|
"--json-location-accuracy 2"
|
|
"--range-outline-hours 24"
|
|
"--uuid-file"
|
|
"${uuidFile}"
|
|
] ++ connectors;
|
|
in
|
|
{
|
|
enable = feederConfig.feed.enable;
|
|
description = "${feederConfig.name} feeder.";
|
|
wants = [ "network.target" ];
|
|
after = [ "network.target" ];
|
|
unitConfig = {
|
|
Documentation = "https://github.com/widehopf/readsb/";
|
|
StartLimitIntervalSec = 1;
|
|
};
|
|
serviceConfig = {
|
|
Type = "simple";
|
|
User = "${feederConfig.name}";
|
|
RuntimeDirectory = "${feederConfig.name}-feed";
|
|
RuntimeDirectoryMode = "0755";
|
|
ExecStart = "${self.packages.${pkgs.system}.adsbfi-readsb}/bin/readsb ${lib.concatStringsSep " " options}";
|
|
SyslogIdentifier = "${feederConfig.name}-feed";
|
|
Restart = "on-failure";
|
|
RestartSec = 30;
|
|
StartLimitBurst = 100;
|
|
Nice = -1;
|
|
};
|
|
wantedBy = [ "multi-user.target" ];
|
|
};
|
|
};
|
|
}
|