summary refs log tree commit diff
diff options
context:
space:
mode:
authorAaron Andersen <aaron@fosslib.net>2020-07-12 08:47:09 -0400
committerAaron Andersen <aaron@fosslib.net>2020-07-12 09:19:00 -0400
commit5e32ec39cac10c8bf48de741a3d07cdee74e259f (patch)
treef95887c8332ea126b1aa10ff4b444ce9752ea948
parentfc2a4610a190e951f243215cfa50f60e4d0d275e (diff)
downloadnixpkgs-5e32ec39cac10c8bf48de741a3d07cdee74e259f.tar
nixpkgs-5e32ec39cac10c8bf48de741a3d07cdee74e259f.tar.gz
nixpkgs-5e32ec39cac10c8bf48de741a3d07cdee74e259f.tar.bz2
nixpkgs-5e32ec39cac10c8bf48de741a3d07cdee74e259f.tar.lz
nixpkgs-5e32ec39cac10c8bf48de741a3d07cdee74e259f.tar.xz
nixpkgs-5e32ec39cac10c8bf48de741a3d07cdee74e259f.tar.zst
nixpkgs-5e32ec39cac10c8bf48de741a3d07cdee74e259f.zip
nixos/gitolite: provision data directory only before service begins
-rw-r--r--nixos/modules/services/misc/gitolite.nix33
1 files changed, 17 insertions, 16 deletions
diff --git a/nixos/modules/services/misc/gitolite.nix b/nixos/modules/services/misc/gitolite.nix
index cc69f81bbcc..59cbdac319c 100644
--- a/nixos/modules/services/misc/gitolite.nix
+++ b/nixos/modules/services/misc/gitolite.nix
@@ -27,7 +27,10 @@ in
         type = types.str;
         default = "/var/lib/gitolite";
         description = ''
-          Gitolite home directory (used to store all the repositories).
+          The gitolite home directory used to store all repositories. If left as the default value
+          this directory will automatically be created before the gitolite server starts, otherwise
+          the sysadmin is responsible for ensuring the directory exists with appropriate ownership
+          and permissions.
         '';
       };
 
@@ -149,14 +152,6 @@ in
     };
     users.groups.${cfg.group}.gid = config.ids.gids.gitolite;
 
-    systemd.tmpfiles.rules = [
-      "d '${cfg.dataDir}' 0750 ${cfg.user} ${cfg.group} - -"
-      "d '${cfg.dataDir}'/.gitolite - ${cfg.user} ${cfg.group} - -"
-      "d '${cfg.dataDir}'/.gitolite/logs - ${cfg.user} ${cfg.group} - -"
-
-      "Z ${cfg.dataDir} 0750 ${cfg.user} ${cfg.group} - -"
-    ];
-
     systemd.services.gitolite-init = {
       description = "Gitolite initialization";
       wantedBy    = [ "multi-user.target" ];
@@ -167,13 +162,19 @@ in
         GITOLITE_RC_DEFAULT = "${rcDir}/gitolite.rc.default";
       };
 
-      serviceConfig = {
-        Type = "oneshot";
-        User = cfg.user;
-        Group = cfg.group;
-        WorkingDirectory = "~";
-        RemainAfterExit = true;
-      };
+      serviceConfig = mkMerge [
+        (mkIf (cfg.dataDir == "/var/lib/gitolite") {
+          StateDirectory = "gitolite gitolite/.gitolite gitolite/.gitolite/logs";
+          StateDirectoryMode = "0750";
+        })
+        {
+          Type = "oneshot";
+          User = cfg.user;
+          Group = cfg.group;
+          WorkingDirectory = "~";
+          RemainAfterExit = true;
+        }
+      ];
 
       path = [ pkgs.gitolite pkgs.git pkgs.perl pkgs.bash pkgs.diffutils config.programs.ssh.package ];
       script =