summary refs log tree commit diff
path: root/nixos/modules/services/web-servers/apache-httpd
diff options
context:
space:
mode:
authorVladimír Čunát <vcunat@gmail.com>2016-03-04 15:14:39 +0100
committerVladimír Čunát <vcunat@gmail.com>2016-03-08 16:38:43 +0100
commit1952d5d5f7c1d02ec5a64940bdc144b5e419bca8 (patch)
tree6eaf12c280285a68e9ee34c2ef84e0ba00ee4984 /nixos/modules/services/web-servers/apache-httpd
parent15030ed2917c206a28b5b5ba8be6a644fb7d3306 (diff)
downloadnixlib-1952d5d5f7c1d02ec5a64940bdc144b5e419bca8.tar
nixlib-1952d5d5f7c1d02ec5a64940bdc144b5e419bca8.tar.gz
nixlib-1952d5d5f7c1d02ec5a64940bdc144b5e419bca8.tar.bz2
nixlib-1952d5d5f7c1d02ec5a64940bdc144b5e419bca8.tar.lz
nixlib-1952d5d5f7c1d02ec5a64940bdc144b5e419bca8.tar.xz
nixlib-1952d5d5f7c1d02ec5a64940bdc144b5e419bca8.tar.zst
nixlib-1952d5d5f7c1d02ec5a64940bdc144b5e419bca8.zip
nixos/foswiki: basic working service definition
Activation is as simple as:
  services.httpd = {
    enable = true;
    adminAddr = "nobody@example.com";
    extraSubservices = [ {
      serviceType = "foswiki";
    } ];
  };
Diffstat (limited to 'nixos/modules/services/web-servers/apache-httpd')
-rw-r--r--nixos/modules/services/web-servers/apache-httpd/foswiki.nix78
1 files changed, 78 insertions, 0 deletions
diff --git a/nixos/modules/services/web-servers/apache-httpd/foswiki.nix b/nixos/modules/services/web-servers/apache-httpd/foswiki.nix
new file mode 100644
index 000000000000..8c1ac8935a47
--- /dev/null
+++ b/nixos/modules/services/web-servers/apache-httpd/foswiki.nix
@@ -0,0 +1,78 @@
+{ config, pkgs, lib, serverInfo, ... }:
+let
+  inherit (pkgs) foswiki;
+  inherit (serverInfo.serverConfig) user group;
+  inherit (config) vardir;
+in
+{
+  options.vardir = lib.mkOption {
+    type = lib.types.path;
+    default = "/var/www/foswiki";
+    description = "The directory where variable foswiki data will be stored and served from.";
+  };
+
+  # TODO: this will probably need to be better customizable
+  extraConfig =
+    let httpd-conf = pkgs.runCommand "foswiki-httpd.conf"
+      { preferLocalBuild = true; }
+      ''
+        substitute '${foswiki}/foswiki_httpd_conf.txt' "$out" \
+          --replace /var/www/foswiki/ "${vardir}/"
+      '';
+    in
+      ''
+        RewriteEngine on
+        RewriteRule /foswiki/(.*) ${vardir}/$1
+
+        <Directory "${vardir}">
+          Require all granted
+        </Directory>
+
+        Include ${httpd-conf}
+        <Directory "${vardir}/pub">
+          Options FollowSymlinks
+        </Directory>
+      '';
+
+  /** This handles initial setup and updates.
+      It will probably need some tweaking, maybe per-site.  */
+  startupScript = pkgs.writeScript "foswiki_startup.sh" (
+    let storeLink = "${vardir}/package"; in
+    ''
+      [ -e '${storeLink}' ] || needs_setup=1
+      mkdir -p '${vardir}'
+      cd '${vardir}'
+      ln -sf -T '${foswiki}' '${storeLink}'
+
+      if [ -n "$needs_setup" ]; then # do initial setup
+        mkdir -p bin lib
+        # setup most of data/ as copies only
+        cp -r '${foswiki}'/data '${vardir}/'
+        rm -r '${vardir}'/data/{System,mime.types}
+        ln -sr -t '${vardir}/data/' '${storeLink}'/data/{System,mime.types}
+
+        ln -sr '${storeLink}/locale' .
+
+        mkdir pub
+        ln -sr '${storeLink}/pub/System' pub/
+
+        mkdir templates
+        ln -sr '${storeLink}'/templates/* templates/
+
+        ln -sr '${storeLink}/tools' .
+
+        mkdir -p '${vardir}'/working/{logs,tmp}
+        ln -sr '${storeLink}/working/README' working/ # used to check dir validity
+
+        chown -R '${user}:${group}' .
+        chmod +w -R .
+      fi
+
+      # bin/* and lib/* shall always be overwritten, in case files are added
+      ln -srf '${storeLink}'/bin/* '${vardir}/bin/'
+      ln -srf '${storeLink}'/lib/* '${vardir}/lib/'
+    ''
+    /* Symlinking bin/ one-by-one ensures that ${vardir}/lib/LocalSite.cfg
+        is used instead of ${foswiki}/... */
+  );
+}