nixos/nginx: add gitweb sub-service
This commit is contained in:
parent
9e6752075a
commit
69a0c9721e
|
@ -650,6 +650,7 @@
|
||||||
./services/web-servers/mighttpd2.nix
|
./services/web-servers/mighttpd2.nix
|
||||||
./services/web-servers/minio.nix
|
./services/web-servers/minio.nix
|
||||||
./services/web-servers/nginx/default.nix
|
./services/web-servers/nginx/default.nix
|
||||||
|
./services/web-servers/nginx/gitweb.nix
|
||||||
./services/web-servers/phpfpm/default.nix
|
./services/web-servers/phpfpm/default.nix
|
||||||
./services/web-servers/shellinabox.nix
|
./services/web-servers/shellinabox.nix
|
||||||
./services/web-servers/tomcat.nix
|
./services/web-servers/tomcat.nix
|
||||||
|
|
|
@ -7,6 +7,7 @@ let
|
||||||
gitwebConfigFile = pkgs.writeText "gitweb.conf" ''
|
gitwebConfigFile = pkgs.writeText "gitweb.conf" ''
|
||||||
# path to git projects (<project>.git)
|
# path to git projects (<project>.git)
|
||||||
$projectroot = "${cfg.projectroot}";
|
$projectroot = "${cfg.projectroot}";
|
||||||
|
$highlight_bin = "${pkgs.highlight}/bin/highlight";
|
||||||
${cfg.extraConfig}
|
${cfg.extraConfig}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
@ -38,6 +39,10 @@ in
|
||||||
description = ''
|
description = ''
|
||||||
Verbatim configuration text appended to the generated gitweb.conf file.
|
Verbatim configuration text appended to the generated gitweb.conf file.
|
||||||
'';
|
'';
|
||||||
|
example = ''
|
||||||
|
$feature{'highlight'}{'default'} = [1];
|
||||||
|
$feature{'ctags'}{'default'} = [1];
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
101
nixos/modules/services/web-servers/nginx/gitweb.nix
Normal file
101
nixos/modules/services/web-servers/nginx/gitweb.nix
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.services.nginx.gitweb;
|
||||||
|
gitwebConfigFile = pkgs.writeText "gitweb.conf" ''
|
||||||
|
# path to git projects (<project>.git)
|
||||||
|
$projectroot = "${cfg.projectroot}";
|
||||||
|
$highlight_bin = "${pkgs.highlight}/bin/highlight";
|
||||||
|
${cfg.extraConfig}
|
||||||
|
'';
|
||||||
|
gitwebPerlLibs = with pkgs.perlPackages; [ CGIFast FCGI FCGIProcManager HTMLTagCloud ];
|
||||||
|
git = pkgs.git.overrideAttrs (oldAttrs: rec {
|
||||||
|
postInstall = ''
|
||||||
|
${oldAttrs.postInstall}
|
||||||
|
for p in ${lib.concatStringsSep " " gitwebPerlLibs}; do
|
||||||
|
sed -i -e "/use CGI /i use lib \"$p/lib/perl5/site_perl\";" \
|
||||||
|
"$out/share/gitweb/gitweb.cgi"
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
|
||||||
|
options.services.nginx.gitweb = {
|
||||||
|
|
||||||
|
enable = mkOption {
|
||||||
|
default = false;
|
||||||
|
type = types.bool;
|
||||||
|
description = ''
|
||||||
|
If true, enable gitweb in nginx. Access it at http://yourserver/gitweb
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
projectroot = mkOption {
|
||||||
|
default = "/srv/git";
|
||||||
|
type = types.path;
|
||||||
|
description = ''
|
||||||
|
Path to git projects (bare repositories) that should be served by
|
||||||
|
gitweb. Must not end with a slash.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
extraConfig = mkOption {
|
||||||
|
default = "";
|
||||||
|
type = types.lines;
|
||||||
|
description = ''
|
||||||
|
Verbatim configuration text appended to the generated gitweb.conf file.
|
||||||
|
'';
|
||||||
|
example = ''
|
||||||
|
$feature{'highlight'}{'default'} = [1];
|
||||||
|
$feature{'ctags'}{'default'} = [1];
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
|
||||||
|
systemd.sockets.gitweb = {
|
||||||
|
description = "GitWeb Listen Socket";
|
||||||
|
listenStreams = [ "/run/gitweb.sock" ];
|
||||||
|
socketConfig = {
|
||||||
|
Accept = "false";
|
||||||
|
SocketUser = "nginx";
|
||||||
|
SocketGroup = "nginx";
|
||||||
|
SocketMode = "0600";
|
||||||
|
};
|
||||||
|
wantedBy = [ "sockets.target" ];
|
||||||
|
};
|
||||||
|
systemd.services.gitweb = {
|
||||||
|
description = "GitWeb service";
|
||||||
|
script = "${git}/share/gitweb/gitweb.cgi --fcgi";
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "simple";
|
||||||
|
StandardInput = "socket";
|
||||||
|
User = "nginx";
|
||||||
|
Group = "nginx";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.nginx = {
|
||||||
|
virtualHosts.default = {
|
||||||
|
locations."/gitweb" = {
|
||||||
|
root = "${pkgs.git}/share/gitweb";
|
||||||
|
extraConfig = ''
|
||||||
|
include ${pkgs.nginx}/conf/fastcgi_params;
|
||||||
|
fastcgi_param GITWEB_CONFIG ${gitwebConfigFile};
|
||||||
|
fastcgi_pass unix:/run/gitweb.sock;
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
meta.maintainers = with maintainers; [ gnidorah ];
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue