aboutsummaryrefslogtreecommitdiff
path: root/apps/juandelacosa.nix
diff options
context:
space:
mode:
Diffstat (limited to 'apps/juandelacosa.nix')
-rw-r--r--apps/juandelacosa.nix68
1 files changed, 68 insertions, 0 deletions
diff --git a/apps/juandelacosa.nix b/apps/juandelacosa.nix
new file mode 100644
index 0000000..8df6af0
--- /dev/null
+++ b/apps/juandelacosa.nix
@@ -0,0 +1,68 @@
+{ config, pkgs, lib, ... }:
+
+let
+ inherit (builtins) filter toString;
+ inherit (lib) types mkOption mkEnableOption mkIf hasPrefix
+ concatStrings optionalString;
+ inherit (types) str path int nullOr;
+
+ cfg = config.nixsap.apps.juandelacosa;
+
+ ExecStart = concatStrings [
+ "${pkgs.juandelacosa}/bin/juandelacosa"
+ (optionalString (cfg.myFile != null) " -f '${cfg.myFile}'")
+ (optionalString (cfg.myGroup != null) " -g ${cfg.myGroup}")
+ (if (cfg.port != null)
+ then " -p ${toString cfg.port}"
+ else " -s '${cfg.socket}'")
+ ];
+
+ keys = filter (f: f != null && hasPrefix "/run/keys/" f) [ cfg.myFile ];
+
+in {
+ options.nixsap.apps.juandelacosa = {
+ enable = mkEnableOption "Juan de la Cosa";
+ user = mkOption {
+ description = "User to run as";
+ default = "juandelacosa";
+ type = str;
+ };
+ port = mkOption {
+ description = "TCP port to listen on";
+ default = null;
+ type = nullOr int;
+ };
+ socket = mkOption {
+ description = "UNIX socket to listen on. Ignored when TCP port is set";
+ default = "/tmp/juandelacosa.sock";
+ type = path;
+ };
+ myFile = mkOption {
+ description = "MySQL client configuration file";
+ default = null;
+ type = nullOr path;
+ };
+ myGroup = mkOption {
+ description = "Options group in the MySQL client configuration file";
+ default = null;
+ type = nullOr str;
+ };
+ };
+
+ config = mkIf cfg.enable {
+ nixsap.system.users.daemons = [ cfg.user ];
+ nixsap.deployment.keyrings.${cfg.user} = keys;
+ systemd.services.juandelacosa = {
+ description = "captain of the MariaDB";
+ wantedBy = [ "multi-user.target" ];
+ wants = [ "keys.target" ];
+ after = [ "keys.target" "network.target" "local-fs.target" ];
+ serviceConfig = {
+ inherit ExecStart;
+ User = cfg.user;
+ Restart = "on-failure";
+ };
+ };
+ };
+}
+