diff options
Diffstat (limited to 'nixpkgs/nixos/modules/services/databases/4store-endpoint.nix')
-rw-r--r-- | nixpkgs/nixos/modules/services/databases/4store-endpoint.nix | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/nixpkgs/nixos/modules/services/databases/4store-endpoint.nix b/nixpkgs/nixos/modules/services/databases/4store-endpoint.nix new file mode 100644 index 000000000000..59ed0e5f0afd --- /dev/null +++ b/nixpkgs/nixos/modules/services/databases/4store-endpoint.nix @@ -0,0 +1,74 @@ +{ config, lib, pkgs, ... }: +let + cfg = config.services.fourStoreEndpoint; + endpointUser = "fourstorehttp"; + run = "${pkgs.su}/bin/su -s ${pkgs.runtimeShell} ${endpointUser} -c"; +in +with lib; +{ + + ###### interface + + options = { + + services.fourStoreEndpoint = { + + enable = mkOption { + default = false; + description = "Whether to enable 4Store SPARQL endpoint."; + }; + + database = mkOption { + default = config.services.fourStore.database; + description = "RDF database name to expose via the endpoint. Defaults to local 4Store database name."; + }; + + listenAddress = mkOption { + default = null; + description = "IP address to listen on."; + }; + + port = mkOption { + default = 8080; + description = "port to listen on."; + }; + + options = mkOption { + default = ""; + description = "Extra CLI options to pass to 4Store's 4s-httpd process."; + }; + + }; + + }; + + + ###### implementation + + config = mkIf cfg.enable { + + assertions = singleton + { assertion = cfg.enable -> cfg.database != ""; + message = "Must specify 4Store database name"; + }; + + users.users = singleton + { name = endpointUser; + uid = config.ids.uids.fourstorehttp; + description = "4Store SPARQL endpoint user"; + }; + + services.avahi.enable = true; + + systemd.services."4store-endpoint" = { + after = [ "network.target" ]; + wantedBy = [ "multi-user.target" ]; + + script = '' + ${run} '${pkgs.rdf4store}/bin/4s-httpd -D ${cfg.options} ${if cfg.listenAddress!=null then "-H ${cfg.listenAddress}" else "" } -p ${toString cfg.port} ${cfg.database}' + ''; + }; + + }; + +} |