diff --git a/modules/services/web-servers/apache-httpd/trac.nix b/modules/services/web-servers/apache-httpd/trac.nix
index ab27b385cb4..d5588e1162c 100644
--- a/modules/services/web-servers/apache-httpd/trac.nix
+++ b/modules/services/web-servers/apache-httpd/trac.nix
@@ -18,6 +18,29 @@ in
description = "URL path in which Trac projects can be accessed";
default = "/projects";
};
+
+ projects = mkOption {
+ description = "List of projects that should be provided by Trac. If they are not defined yet empty projects are created.";
+ default = [];
+ example = [ { identifier = "myproject";
+ name = "My Project";
+ databaseURL="postgres://root:password@/tracdb";
+ subversionRepository="/data/subversion/myproject"; } ];
+ };
+
+ user = mkOption {
+ default = "wwwrun";
+ description = "
+ User account under which Trac runs.
+ ";
+ };
+
+ group = mkOption {
+ default = "wwwrun";
+ description = "
+ Group under which Trac runs.
+ ";
+ };
};
extraModules = [
@@ -25,13 +48,13 @@ in
];
extraConfig = ''
-
- SetHandler mod_python
- PythonHandler trac.web.modpython_frontend
- PythonOption TracEnvParentDir /var/trac/projects
- PythonOption TracUriRoot ${config.projectsLocation}
- PythonOption PYTHON_EGG_CACHE /var/trac/egg-cache
-
+
+ SetHandler mod_python
+ PythonHandler trac.web.modpython_frontend
+ PythonOption TracEnvParentDir /var/trac/projects
+ PythonOption TracUriRoot ${config.projectsLocation}
+ PythonOption PYTHON_EGG_CACHE /var/trac/egg-cache
+
'';
globalEnvVars = [
@@ -45,4 +68,18 @@ in
"${subversion}/lib/python2.5/site-packages";
}
];
+
+ startupScript = pkgs.writeScript "activateTrac" ''
+ mkdir -p /var/trac
+ chown ${config.user}:${config.group} /var/trac
+
+ ${pkgs.lib.concatMapStrings (project:
+ ''
+ if [ ! -d /var/trac/${project.identifier} ]
+ then
+ export PYTHONPATH=${pkgs.pythonPackages.psycopg2}/lib/python2.5/site-packages
+ ${pkgs.pythonPackages.trac}/bin/trac-admin /var/trac/${project.identifier} initenv "${project.name}" "${project.databaseURL}" svn "${project.subversionRepository}"
+ fi
+ '' ) (config.projects)}
+ '';
}