about summary refs log tree commit diff
path: root/nixos/modules/services/web-apps/anuko-time-tracker.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixos/modules/services/web-apps/anuko-time-tracker.nix')
-rw-r--r--nixos/modules/services/web-apps/anuko-time-tracker.nix388
1 files changed, 0 insertions, 388 deletions
diff --git a/nixos/modules/services/web-apps/anuko-time-tracker.nix b/nixos/modules/services/web-apps/anuko-time-tracker.nix
deleted file mode 100644
index 75f3d66b2f99..000000000000
--- a/nixos/modules/services/web-apps/anuko-time-tracker.nix
+++ /dev/null
@@ -1,388 +0,0 @@
-{ config, pkgs, lib, ... }:
-
-let
-  cfg = config.services.anuko-time-tracker;
-  configFile = let
-    smtpPassword = if cfg.settings.email.smtpPasswordFile == null
-                   then "''"
-                   else "trim(file_get_contents('${cfg.settings.email.smtpPasswordFile}'))";
-
-  in pkgs.writeText "config.php" ''
-    <?php
-    // Set include path for PEAR and its modules, which we include in the distribution.
-    // Updated for the correct location in the nix store.
-    set_include_path('${cfg.package}/WEB-INF/lib/pear' . PATH_SEPARATOR . get_include_path());
-    define('DSN', 'mysqli://${cfg.database.user}@${cfg.database.host}/${cfg.database.name}?charset=utf8mb4');
-    define('MULTIORG_MODE', ${lib.boolToString cfg.settings.multiorgMode});
-    define('EMAIL_REQUIRED', ${lib.boolToString cfg.settings.emailRequired});
-    define('WEEKEND_START_DAY', ${toString cfg.settings.weekendStartDay});
-    define('FORUM_LINK', '${cfg.settings.forumLink}');
-    define('HELP_LINK', '${cfg.settings.helpLink}');
-    define('SENDER', '${cfg.settings.email.sender}');
-    define('MAIL_MODE', '${cfg.settings.email.mode}');
-    define('MAIL_SMTP_HOST', '${toString cfg.settings.email.smtpHost}');
-    define('MAIL_SMTP_PORT', '${toString cfg.settings.email.smtpPort}');
-    define('MAIL_SMTP_USER', '${cfg.settings.email.smtpUser}');
-    define('MAIL_SMTP_PASSWORD', ${smtpPassword});
-    define('MAIL_SMTP_AUTH', ${lib.boolToString cfg.settings.email.smtpAuth});
-    define('MAIL_SMTP_DEBUG', ${lib.boolToString cfg.settings.email.smtpDebug});
-    define('DEFAULT_CSS', 'default.css');
-    define('RTL_CSS', 'rtl.css'); // For right to left languages.
-    define('LANG_DEFAULT', '${cfg.settings.defaultLanguage}');
-    define('CURRENCY_DEFAULT', '${cfg.settings.defaultCurrency}');
-    define('EXPORT_DECIMAL_DURATION', ${lib.boolToString cfg.settings.exportDecimalDuration});
-    define('REPORT_FOOTER', ${lib.boolToString cfg.settings.reportFooter});
-    define('AUTH_MODULE', 'db');
-  '';
-  package = pkgs.stdenv.mkDerivation rec {
-    pname = "anuko-time-tracker";
-    inherit (src) version;
-    src = cfg.package;
-    installPhase = ''
-      mkdir -p $out
-      cp -r * $out/
-
-      # Link config file
-      ln -s ${configFile} $out/WEB-INF/config.php
-
-      # Link writable templates_c directory
-      rm -rf $out/WEB-INF/templates_c
-      ln -s ${cfg.dataDir}/templates_c $out/WEB-INF/templates_c
-
-      # Remove unsafe dbinstall.php
-      rm -f $out/dbinstall.php
-    '';
-  };
-in
-{
-  options.services.anuko-time-tracker = {
-    enable = lib.mkEnableOption "Anuko Time Tracker";
-
-    package = lib.mkPackageOption pkgs "anuko-time-tracker" {};
-
-    database = {
-      createLocally = lib.mkOption {
-        type = lib.types.bool;
-        default = true;
-        description = "Create the database and database user locally.";
-      };
-
-      host = lib.mkOption {
-        type = lib.types.str;
-        description = "Database host.";
-        default = "localhost";
-      };
-
-      name = lib.mkOption {
-        type = lib.types.str;
-        description = "Database name.";
-        default = "anuko_time_tracker";
-      };
-
-      user = lib.mkOption {
-        type = lib.types.str;
-        description = "Database username.";
-        default = "anuko_time_tracker";
-      };
-
-      passwordFile = lib.mkOption {
-        type = lib.types.nullOr lib.types.str;
-        description = "Database user password file.";
-        default = null;
-      };
-    };
-
-    poolConfig = lib.mkOption {
-      type = lib.types.attrsOf (lib.types.oneOf [ lib.types.str lib.types.int lib.types.bool ]);
-      default = {
-        "pm" = "dynamic";
-        "pm.max_children" = 32;
-        "pm.start_servers" = 2;
-        "pm.min_spare_servers" = 2;
-        "pm.max_spare_servers" = 4;
-        "pm.max_requests" = 500;
-      };
-      description = ''
-        Options for Anuko Time Tracker's PHP-FPM pool.
-      '';
-    };
-
-    hostname = lib.mkOption {
-      type = lib.types.str;
-      default =
-        if config.networking.domain != null
-        then config.networking.fqdn
-        else config.networking.hostName;
-      defaultText = lib.literalExpression "config.networking.fqdn";
-      example = "anuko.example.com";
-      description = ''
-        The hostname to serve Anuko Time Tracker on.
-      '';
-    };
-
-    nginx = lib.mkOption {
-      type = lib.types.submodule (
-        lib.recursiveUpdate
-          (import ../web-servers/nginx/vhost-options.nix { inherit config lib; }) {}
-      );
-      default = {};
-      example = lib.literalExpression ''
-        {
-          serverAliases = [
-            "anuko.''${config.networking.domain}"
-          ];
-
-          # To enable encryption and let let's encrypt take care of certificate
-          forceSSL = true;
-          enableACME = true;
-        }
-      '';
-      description = ''
-        With this option, you can customize the Nginx virtualHost settings.
-      '';
-    };
-
-    dataDir = lib.mkOption {
-      type = lib.types.str;
-      default = "/var/lib/anuko-time-tracker";
-      description = "Default data folder for Anuko Time Tracker.";
-      example = "/mnt/anuko-time-tracker";
-    };
-
-    user = lib.mkOption {
-      type = lib.types.str;
-      default = "anuko_time_tracker";
-      description = "User under which Anuko Time Tracker runs.";
-    };
-
-    settings = {
-      multiorgMode = lib.mkOption {
-        type = lib.types.bool;
-        default = true;
-        description = ''
-          Defines whether users see the Register option in the menu of Time Tracker that allows them
-          to self-register and create new organizations (top groups).
-        '';
-      };
-
-      emailRequired = lib.mkOption {
-        type = lib.types.bool;
-        default = false;
-        description = "Defines whether an email is required for new registrations.";
-      };
-
-      weekendStartDay = lib.mkOption {
-        type = lib.types.int;
-        default = 6;
-        description = ''
-          This option defines which days are highlighted with weekend color.
-          6 means Saturday. For Saudi Arabia, etc. set it to 4 for Thursday and Friday to be
-          weekend days.
-        '';
-      };
-
-      forumLink = lib.mkOption {
-        type = lib.types.str;
-        description = "Forum link from the main menu.";
-        default = "https://www.anuko.com/forum/viewforum.php?f=4";
-      };
-
-      helpLink = lib.mkOption {
-        type = lib.types.str;
-        description = "Help link from the main menu.";
-        default = "https://www.anuko.com/time-tracker/user-guide/index.htm";
-      };
-
-      email = {
-        sender = lib.mkOption {
-          type = lib.types.str;
-          description = "Default sender for mail.";
-          default = "Anuko Time Tracker <bounces@example.com>";
-        };
-
-        mode = lib.mkOption {
-          type = lib.types.str;
-          description = "Mail sending mode. Can be 'mail' or 'smtp'.";
-          default = "smtp";
-        };
-
-        smtpHost = lib.mkOption {
-          type = lib.types.str;
-          description = "MTA hostname.";
-          default = "localhost";
-        };
-
-        smtpPort = lib.mkOption {
-          type = lib.types.int;
-          description = "MTA port.";
-          default = 25;
-        };
-
-        smtpUser = lib.mkOption {
-          type = lib.types.str;
-          description = "MTA authentication username.";
-          default = "";
-        };
-
-        smtpAuth = lib.mkOption {
-          type = lib.types.bool;
-          default = false;
-          description = "MTA requires authentication.";
-        };
-
-        smtpPasswordFile = lib.mkOption {
-          type = lib.types.nullOr lib.types.path;
-          default = null;
-          example = "/var/lib/anuko-time-tracker/secrets/smtp-password";
-          description = ''
-            Path to file containing the MTA authentication password.
-          '';
-        };
-
-        smtpDebug = lib.mkOption {
-          type = lib.types.bool;
-          default = false;
-          description = "Debug mail sending.";
-        };
-      };
-
-      defaultLanguage = lib.mkOption {
-        type = lib.types.str;
-        description = ''
-          Defines Anuko Time Tracker default language. It is used on Time Tracker login page.
-          After login, a language set for user group is used.
-          Empty string means the language is defined by user browser.
-        '';
-        default = "";
-        example = "nl";
-      };
-
-      defaultCurrency = lib.mkOption {
-        type = lib.types.str;
-        description = ''
-          Defines a default currency symbol for new groups.
-          Use €, £, a more specific dollar like US$, CAD, etc.
-        '';
-        default = "$";
-        example = "€";
-      };
-
-      exportDecimalDuration = lib.mkOption {
-        type = lib.types.bool;
-        default = true;
-        description = ''
-          Defines whether time duration values are decimal in CSV and XML data
-          exports (1.25 vs 1:15).
-        '';
-      };
-
-      reportFooter = lib.mkOption {
-        type = lib.types.bool;
-        default = true;
-        description = "Defines whether to use a footer on reports.";
-      };
-    };
-  };
-
-  config = lib.mkIf cfg.enable {
-
-    assertions = [
-      {
-        assertion = cfg.database.createLocally -> cfg.database.passwordFile == null;
-        message = ''
-          <option>services.anuko-time-tracker.database.passwordFile</option> cannot be specified if
-          <option>services.anuko-time-tracker.database.createLocally</option> is set to true.
-        '';
-      }
-      {
-        assertion = cfg.settings.email.smtpAuth -> (cfg.settings.email.smtpPasswordFile != null);
-        message = ''
-          <option>services.anuko-time-tracker.settings.email.smtpPasswordFile</option> needs to be set if
-          <option>services.anuko-time-tracker.settings.email.smtpAuth</option> is enabled.
-        '';
-      }
-    ];
-
-    services.phpfpm = {
-      pools.anuko-time-tracker = {
-        inherit (cfg) user;
-        group = config.services.nginx.group;
-        settings = {
-          "listen.owner" = config.services.nginx.user;
-          "listen.group" = config.services.nginx.group;
-        } // cfg.poolConfig;
-      };
-    };
-
-    services.nginx = {
-      enable = lib.mkDefault true;
-      recommendedTlsSettings = true;
-      recommendedOptimisation = true;
-      recommendedGzipSettings = true;
-      virtualHosts."${cfg.hostname}" = lib.mkMerge [
-        cfg.nginx
-        {
-          root = lib.mkForce "${package}";
-          locations = {
-            "/".index = "index.php";
-            "~ [^/]\\.php(/|$)" = {
-              extraConfig = ''
-                fastcgi_split_path_info ^(.+?\.php)(/.*)$;
-                fastcgi_pass unix:${config.services.phpfpm.pools.anuko-time-tracker.socket};
-              '';
-            };
-          };
-        }
-      ];
-    };
-
-    services.mysql = lib.mkIf cfg.database.createLocally {
-      enable = lib.mkDefault true;
-      package = lib.mkDefault pkgs.mariadb;
-      ensureDatabases = [ cfg.database.name ];
-      ensureUsers = [{
-        name = cfg.database.user;
-        ensurePermissions = {
-          "${cfg.database.name}.*" = "ALL PRIVILEGES";
-        };
-      }];
-    };
-
-    systemd = {
-      services = {
-        anuko-time-tracker-setup-database = lib.mkIf cfg.database.createLocally {
-          description = "Set up Anuko Time Tracker database";
-          serviceConfig = {
-            Type = "oneshot";
-            RemainAfterExit = true;
-          };
-          wantedBy = [ "phpfpm-anuko-time-tracker.service" ];
-          after = [ "mysql.service" ];
-          script =
-            let
-              mysql = "${config.services.mysql.package}/bin/mysql";
-            in
-            ''
-              if [ ! -f ${cfg.dataDir}/.dbexists ]; then
-                # Load database schema provided with package
-                ${mysql} ${cfg.database.name} < ${cfg.package}/mysql.sql
-
-                touch ${cfg.dataDir}/.dbexists
-              fi
-            '';
-        };
-      };
-      tmpfiles.rules = [
-        "d ${cfg.dataDir} 0750 ${cfg.user} ${config.services.nginx.group} -"
-        "d ${cfg.dataDir}/templates_c 0750 ${cfg.user} ${config.services.nginx.group} -"
-      ];
-    };
-
-    users.users."${cfg.user}" = {
-      isSystemUser = true;
-      group = config.services.nginx.group;
-    };
-  };
-
-  meta.maintainers = with lib.maintainers; [ michaelshmitty ];
-}