osmscout-server: add module

Osmscout-server includes a setting in its UI to create a systemd user
service and socket to run the server on demand. This does not function
correctly on NixOS, for two reasons:

1. It assumes that the binary path is stable (e.g.
   /usr/bin/osmscout-server), which is not the case on NixOS.

2. It auto-detects the unwrapped binary path, which doesn't work.

This module allows the user to access the same functionality on NixOS.
This commit is contained in:
Tom Hall 2023-12-26 14:56:40 +00:00 committed by Robert Helgesson
parent 458544594b
commit 0f11c14065
No known key found for this signature in database
GPG key ID: 96E745BD17AA17ED
6 changed files with 130 additions and 0 deletions

View file

@ -1348,6 +1348,14 @@ in
A new module is available: 'programs.gradle'.
'';
}
{
time = "2023-12-28T08:28:26+00:00";
condition = hostPlatform.isLinux;
message = ''
A new module is available: 'services.osmscout-server'.
'';
}
];
};
}

View file

@ -306,6 +306,7 @@ let
./services/nextcloud-client.nix
./services/notify-osd.nix
./services/opensnitch-ui.nix
./services/osmscout-server.nix
./services/owncloud-client.nix
./services/pantalaimon.nix
./services/parcellite.nix

View file

@ -0,0 +1,76 @@
{ config, lib, pkgs, ... }:
with lib;
let cfg = config.services.osmscout-server;
in {
meta.maintainers = [ maintainers.Thra11 ];
options = {
services.osmscout-server = {
enable = mkEnableOption "OSM Scout Server";
package = mkPackageOption pkgs "osmscout-server" { };
network = {
startWhenNeeded = mkOption {
type = types.bool;
default = true;
description = ''
Enable systemd socket activation.
'';
};
listenAddress = mkOption {
type = types.str;
default = "127.0.0.1";
description = ''
The address for the server to listen on.
'';
};
port = mkOption {
type = types.port;
default = 8553;
description = ''
The TCP port on which the server will listen.
'';
};
};
};
};
config = mkIf cfg.enable {
assertions = [
(lib.hm.assertions.assertPlatform "services.osmscout-server" pkgs
lib.platforms.linux)
];
systemd.user.services.osmscout-server = {
Unit = { Description = "OSM Scout Server"; };
Install = mkIf (!cfg.network.startWhenNeeded) {
WantedBy = [ "default.target" ];
};
Service = {
ExecStart = "'${cfg.package}/bin/osmscout-server' --systemd --quiet";
};
};
systemd.user.sockets.osmscout-server = mkIf cfg.network.startWhenNeeded {
Unit = { Description = "OSM Scout Server Socket"; };
Socket = {
ListenStream =
"${cfg.network.listenAddress}:${toString cfg.network.port}";
TriggerLimitIntervalSec = "60s";
TriggerLimitBurst = 1;
};
Install = { WantedBy = [ "sockets.target" ]; };
};
home.packages = [ cfg.package ];
};
}

View file

@ -235,6 +235,7 @@ import nmt {
./modules/services/mpd
./modules/services/mpd-mpris
./modules/services/mpdris2
./modules/services/osmscout-server
./modules/services/pantalaimon
./modules/services/parcellite
./modules/services/pass-secret-service

View file

@ -0,0 +1,43 @@
{ config, ... }:
{
services.osmscout-server = {
enable = true;
package = config.lib.test.mkStubPackage { outPath = "@osmscout-server@"; };
network = {
startWhenNeeded = true;
listenAddress = "0.0.0.0";
port = 55555;
};
};
nmt.script = ''
assertFileContent \
home-files/.config/systemd/user/osmscout-server.service \
${
builtins.toFile "osmscout-server.service" ''
[Service]
ExecStart='@osmscout-server@/bin/osmscout-server' --systemd --quiet
[Unit]
Description=OSM Scout Server
''
}
assertFileContent \
home-files/.config/systemd/user/osmscout-server.socket \
${
builtins.toFile "osmscout-server.socket" ''
[Install]
WantedBy=sockets.target
[Socket]
ListenStream=0.0.0.0:55555
TriggerLimitBurst=1
TriggerLimitIntervalSec=60s
[Unit]
Description=OSM Scout Server Socket
''
}
'';
}

View file

@ -0,0 +1 @@
{ osmscout-server = ./basic-setup.nix; }