Merge pull request #4859 from abbradar/git-daemon

nixos/git-daemon: fix a bug and add 'user' and 'group' options
This commit is contained in:
Aristid Breitkreuz 2014-11-08 19:33:24 +01:00
commit 8b50383c45

View File

@ -3,7 +3,6 @@ with lib;
let let
cfg = config.services.gitDaemon; cfg = config.services.gitDaemon;
gitUser = "git";
in in
{ {
@ -14,6 +13,7 @@ in
services.gitDaemon = { services.gitDaemon = {
enable = mkOption { enable = mkOption {
type = types.bool;
default = false; default = false;
description = '' description = ''
Enable Git daemon, which allows public hosting of git repositories Enable Git daemon, which allows public hosting of git repositories
@ -28,6 +28,7 @@ in
}; };
basePath = mkOption { basePath = mkOption {
type = types.str;
default = ""; default = "";
example = "/srv/git/"; example = "/srv/git/";
description = '' description = ''
@ -38,6 +39,7 @@ in
}; };
exportAll = mkOption { exportAll = mkOption {
type = types.bool;
default = false; default = false;
description = '' description = ''
Publish all directories that look like Git repositories (have the objects Publish all directories that look like Git repositories (have the objects
@ -52,6 +54,7 @@ in
}; };
repositories = mkOption { repositories = mkOption {
type = types.listOf types.str;
default = []; default = [];
example = [ "/srv/git" "/home/user/git/repo2" ]; example = [ "/srv/git" "/home/user/git/repo2" ];
description = '' description = ''
@ -64,21 +67,36 @@ in
}; };
listenAddress = mkOption { listenAddress = mkOption {
type = types.str;
default = ""; default = "";
example = "example.com"; example = "example.com";
description = "Listen on a specific IP address or hostname."; description = "Listen on a specific IP address or hostname.";
}; };
port = mkOption { port = mkOption {
type = types.int;
default = 9418; default = 9418;
description = "Port to listen on."; description = "Port to listen on.";
}; };
options = mkOption { options = mkOption {
type = types.str;
default = ""; default = "";
description = "Extra configuration options to be passed to Git daemon."; description = "Extra configuration options to be passed to Git daemon.";
}; };
user = mkOption {
type = types.str;
default = "git";
description = "User under which Git daemon would be running.";
};
group = mkOption {
type = types.str;
default = "git";
description = "Group under which Git daemon would be running.";
};
}; };
}; };
@ -86,14 +104,14 @@ in
config = mkIf cfg.enable { config = mkIf cfg.enable {
users.extraUsers = singleton users.extraUsers = if cfg.user != "git" then {} else singleton
{ name = gitUser; { name = "git";
uid = config.ids.uids.git; uid = config.ids.uids.git;
description = "Git daemon user"; description = "Git daemon user";
}; };
users.extraGroups = singleton users.extraGroups = if cfg.group != "git" then {} else singleton
{ name = gitUser; { name = "git";
gid = config.ids.gids.git; gid = config.ids.gids.git;
}; };
@ -103,8 +121,8 @@ in
exec = "${pkgs.git}/bin/git daemon --reuseaddr " exec = "${pkgs.git}/bin/git daemon --reuseaddr "
+ (optionalString (cfg.basePath != "") "--base-path=${cfg.basePath} ") + (optionalString (cfg.basePath != "") "--base-path=${cfg.basePath} ")
+ (optionalString (cfg.listenAddress != "") "--listen=${cfg.listenAddress} ") + (optionalString (cfg.listenAddress != "") "--listen=${cfg.listenAddress} ")
+ "--port=${toString cfg.port} --user=${gitUser} --group=${gitUser} ${cfg.options} " + "--port=${toString cfg.port} --user=${cfg.user} --group=${cfg.group} ${cfg.options} "
+ "--verbose " + (optionalString cfg.exportAll "--export-all") + concatStringsSep " " cfg.repositories; + "--verbose " + (optionalString cfg.exportAll "--export-all ") + concatStringsSep " " cfg.repositories;
}; };
}; };