{ pkgs ? import { inherit system; } , system ? builtins.currentSystem , stateDir ? "/var" , runtimeDir ? "${stateDir}/run" , logDir ? "${stateDir}/log" , spoolDir ? "${stateDir}/spool" , cacheDir ? "${stateDir}/cache" , tmpDir ? (if stateDir == "/var" then "/tmp" else "${stateDir}/tmp") , forceDisableUserChange ? false , processManager }: let constructors = import ../../services-agnostic/constructors.nix { inherit pkgs stateDir runtimeDir logDir tmpDir cacheDir spoolDir forceDisableUserChange processManager; }; containerProviderConstructors = import ../../service-containers-agnostic/constructors.nix { inherit pkgs stateDir runtimeDir logDir tmpDir cacheDir spoolDir forceDisableUserChange processManager; }; in rec { sshd = { pkg = constructors.sshd { extraSSHDConfig = '' UsePAM yes ''; }; }; dbus-daemon = { pkg = constructors.dbus-daemon { services = [ disnix-service ]; }; }; tomcat = containerProviderConstructors.disnixAppservingTomcat { webapps = [ pkgs.tomcat9.webapps # Include the Tomcat example and management applications ]; enableAJP = true; }; apache = { pkg = constructors.basicAuthReverseProxyApache { dependency = tomcat; serverAdmin = "admin@localhost"; targetProtocol = "ajp"; portPropertyName = "ajpPort"; authName = "DisnixWebService"; authUserFile = pkgs.stdenv.mkDerivation { name = "htpasswd"; buildInputs = [ pkgs.apacheHttpd ]; buildCommand = '' htpasswd -cb ./htpasswd admin secret mv htpasswd $out ''; }; requireUser = "admin"; }; }; mysql = containerProviderConstructors.mysql {}; disnix-service = { pkg = constructors.disnix-service { inherit dbus-daemon; containerProviders = [ tomcat mysql ]; authorizedUsers = [ tomcat.name ]; }; }; }