From 9029ed933c69287c64a30d40b6b4f9f1ace7dd94 Mon Sep 17 00:00:00 2001 From: gnidorah Date: Tue, 17 Apr 2018 20:06:44 +0300 Subject: nixos/gitweb: add gitwebTheme option --- nixos/modules/services/misc/gitweb.nix | 8 +++++ .../services/web-servers/lighttpd/gitweb.nix | 7 ++-- .../modules/services/web-servers/nginx/gitweb.nix | 12 ++++--- .../version-management/git-and-tools/default.nix | 1 - .../git-and-tools/git/default.nix | 17 ++++------ .../git-and-tools/gitweb/default.nix | 37 ++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 7 files changed, 65 insertions(+), 19 deletions(-) create mode 100644 pkgs/applications/version-management/git-and-tools/gitweb/default.nix diff --git a/nixos/modules/services/misc/gitweb.nix b/nixos/modules/services/misc/gitweb.nix index b0e34a690ca5..ca21366b7796 100644 --- a/nixos/modules/services/misc/gitweb.nix +++ b/nixos/modules/services/misc/gitweb.nix @@ -32,6 +32,14 @@ in ''; }; + gitwebTheme = mkOption { + default = false; + type = types.bool; + description = '' + Use an alternative theme for gitweb, strongly inspired by GitHub. + ''; + }; + gitwebConfigFile = mkOption { default = pkgs.writeText "gitweb.conf" '' # path to git projects (.git) diff --git a/nixos/modules/services/web-servers/lighttpd/gitweb.nix b/nixos/modules/services/web-servers/lighttpd/gitweb.nix index 37128d90401d..c494d6966a7f 100644 --- a/nixos/modules/services/web-servers/lighttpd/gitweb.nix +++ b/nixos/modules/services/web-servers/lighttpd/gitweb.nix @@ -4,6 +4,9 @@ with lib; let cfg = config.services.gitweb; + package = pkgs.gitweb.override (optionalAttrs cfg.gitwebTheme { + gitwebTheme = true; + }); in { @@ -34,8 +37,8 @@ in "^/gitweb$" => "/gitweb/" ) alias.url = ( - "/gitweb/static/" => "${pkgs.git}/share/gitweb/static/", - "/gitweb/" => "${pkgs.git}/share/gitweb/gitweb.cgi" + "/gitweb/static/" => "${package}/static/", + "/gitweb/" => "${package}/gitweb.cgi" ) setenv.add-environment = ( "GITWEB_CONFIG" => "${cfg.gitwebConfigFile}", diff --git a/nixos/modules/services/web-servers/nginx/gitweb.nix b/nixos/modules/services/web-servers/nginx/gitweb.nix index 3dc3ebc7e4c2..272fd1480185 100644 --- a/nixos/modules/services/web-servers/nginx/gitweb.nix +++ b/nixos/modules/services/web-servers/nginx/gitweb.nix @@ -4,6 +4,9 @@ with lib; let cfg = config.services.gitweb; + package = pkgs.gitweb.override (optionalAttrs cfg.gitwebTheme { + gitwebTheme = true; + }); in { @@ -24,7 +27,7 @@ in systemd.services.gitweb = { description = "GitWeb service"; - script = "${pkgs.git}/share/gitweb/gitweb.cgi --fastcgi --nproc=1"; + script = "${package}/gitweb.cgi --fastcgi --nproc=1"; environment = { FCGI_SOCKET_PATH = "/run/gitweb/gitweb.sock"; }; @@ -38,11 +41,10 @@ in services.nginx = { virtualHosts.default = { - locations."/gitweb/" = { - root = "${pkgs.git}/share"; - tryFiles = "$uri @gitweb"; + locations."/gitweb/static/" = { + alias = "${package}/static/"; }; - locations."@gitweb" = { + locations."/gitweb/" = { extraConfig = '' include ${pkgs.nginx}/conf/fastcgi_params; fastcgi_param GITWEB_CONFIG ${cfg.gitwebConfigFile}; diff --git a/pkgs/applications/version-management/git-and-tools/default.nix b/pkgs/applications/version-management/git-and-tools/default.nix index cd969ff81d0b..73659a32f4bf 100644 --- a/pkgs/applications/version-management/git-and-tools/default.nix +++ b/pkgs/applications/version-management/git-and-tools/default.nix @@ -15,7 +15,6 @@ let perlPackages.MIMEBase64 perlPackages.AuthenSASL perlPackages.DigestHMAC ]; - gitwebPerlLibs = with perlPackages; [ CGI HTMLParser CGIFast FCGI FCGIProcManager HTMLTagCloud ]; }; in diff --git a/pkgs/applications/version-management/git-and-tools/git/default.nix b/pkgs/applications/version-management/git-and-tools/git/default.nix index b336f72c7ac1..cf44cf5ef981 100644 --- a/pkgs/applications/version-management/git-and-tools/git/default.nix +++ b/pkgs/applications/version-management/git-and-tools/git/default.nix @@ -1,9 +1,9 @@ { fetchurl, stdenv, curl, openssl, zlib, expat, perl, python, gettext, cpio , gnugrep, gnused, gawk, coreutils # needed at runtime by git-filter-branch etc -, gzip, openssh, pcre2 +, openssh, pcre2 , asciidoc, texinfo, xmlto, docbook2x, docbook_xsl, docbook_xml_dtd_45 , libxslt, tcl, tk, makeWrapper, libiconv -, svnSupport, subversionClient, perlLibs, smtpPerlLibs, gitwebPerlLibs +, svnSupport, subversionClient, perlLibs, smtpPerlLibs , guiSupport , withManual ? true , pythonSupport ? true @@ -25,6 +25,8 @@ stdenv.mkDerivation { sha256 = "0j1dwvg5llnj3g0fp8hdgpms4hp90qw9f6509vqw30dhwplrjpfn"; }; + outputs = [ "out" "gitweb" ]; + hardeningDisable = [ "format" ]; patches = [ @@ -131,15 +133,8 @@ stdenv.mkDerivation { substituteInPlace $out/libexec/git-core/git-sh-i18n \ --subst-var-by gettext ${gettext} - # gzip (and optionally bzip2, xz, zip) are runtime dependencies for - # gitweb.cgi, need to patch so that it's found - sed -i -e "s|'compressor' => \['gzip'|'compressor' => ['${gzip}/bin/gzip'|" \ - $out/share/gitweb/gitweb.cgi - # Give access to CGI.pm and friends (was removed from perl core in 5.22) - for p in ${stdenv.lib.concatStringsSep " " gitwebPerlLibs}; do - sed -i -e "/use CGI /i use lib \"$p/lib/perl5/site_perl\";" \ - "$out/share/gitweb/gitweb.cgi" - done + # put in separate package for simpler maintenance + mv $out/share/gitweb $gitweb/ # Also put git-http-backend into $PATH, so that we can use smart # HTTP(s) transports for pushing diff --git a/pkgs/applications/version-management/git-and-tools/gitweb/default.nix b/pkgs/applications/version-management/git-and-tools/gitweb/default.nix new file mode 100644 index 000000000000..0358f850c9ab --- /dev/null +++ b/pkgs/applications/version-management/git-and-tools/gitweb/default.nix @@ -0,0 +1,37 @@ +{ stdenv, git, gzip, perlPackages, fetchFromGitHub +, gitwebTheme ? false }: + +let + gitwebPerlLibs = with perlPackages; [ CGI HTMLParser CGIFast FCGI FCGIProcManager HTMLTagCloud ]; + gitwebThemeSrc = fetchFromGitHub { + owner = "kogakure"; + repo = "gitweb-theme"; + rev = "049b88e664a359f8ec25dc6f531b7e2aa60dd1a2"; + sha256 = "0wksqma41z36dbv6w6iplkjfdm0ha3njp222fakyh4lismajr71p"; + }; +in stdenv.mkDerivation { + name = "gitweb"; + + src = git.gitweb; + + installPhase = '' + mkdir $out + mv * $out + + # gzip (and optionally bzip2, xz, zip) are runtime dependencies for + # gitweb.cgi, need to patch so that it's found + sed -i -e "s|'compressor' => \['gzip'|'compressor' => ['${gzip}/bin/gzip'|" \ + $out/gitweb.cgi + # Give access to CGI.pm and friends (was removed from perl core in 5.22) + for p in ${stdenv.lib.concatStringsSep " " gitwebPerlLibs}; do + sed -i -e "/use CGI /i use lib \"$p/lib/perl5/site_perl\";" \ + "$out/gitweb.cgi" + done + + ${stdenv.lib.optionalString gitwebTheme "cp ${gitwebThemeSrc}/* $out/static"} + ''; + + meta = git.meta // { + maintainers = with stdenv.lib.maintainers; [ gnidorah ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 27636fb8c186..3dbe8b860b0e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15613,6 +15613,8 @@ with pkgs; ghostwriter = libsForQt5.callPackage ../applications/editors/ghostwriter { }; + gitweb = callPackage ../applications/version-management/git-and-tools/gitweb/default.nix { }; + gksu = callPackage ../applications/misc/gksu { }; gnss-sdr = callPackage ../applications/misc/gnss-sdr { }; -- cgit 1.4.1