aboutsummaryrefslogtreecommitdiff
path: root/modules/private/websites/tools/git/gitweb.nix
blob: dab0c9eaf1f6f677ece4d394c3eec9190fd4cf23 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
{ gitweb, writeText, stdenv, coreutils, writeScript, gitolite, git, cgit, gitoliteDir, mailcap, highlight }:
rec {
  varDir = gitoliteDir;
  webRoot = gitweb;
  config = writeText "gitweb.conf" ''
    $git_temp = "/tmp";

    # The directories where your projects are. Must not end with a
    # slash.
    $projectroot = "${varDir}/repositories";

    $projects_list = "${varDir}/projects.list";
    $strict_export = "true";

    # Base URLs for links displayed in the web interface.
    our @git_base_url_list = qw(ssh://gitolite@git.immae.eu https://git.immae.eu);

    $feature{'blame'}{'default'} = [1];
    $feature{'avatar'}{'default'} = ['gravatar'];
    $feature{'highlight'}{'default'} = [1];

    @stylesheets = ("gitweb-theme/gitweb.css");
    $logo = "gitweb-theme/git-logo.png";
    $favicon = "gitweb-theme/git-favicon.png";
    $javascript = "gitweb-theme/gitweb.js";
    $logo_url = "https://git.immae.eu/";
    $projects_list_group_categories = "true";
    $projects_list_description_width = 60;
    $project_list_default_category = "__Others__";
    $highlight_bin = "${highlight}/bin/highlight";
    '';
  aboutFilter = writeScript "about-filter.sh" ''
    #!${stdenv.shell}

    if [ -f "$CGIT_REPO_PATH/README.html" ]; then
      cat "$CGIT_REPO_PATH/README.html"
    else
      ${cgit}/lib/cgit/filters/about-formatting.sh "$@"
    fi
  '';
  cgitConfig = writeText "cgitrc" ''
    css=/cgit-css/cgit.css
    logo=/cgit-css/cgit.png
    favicon=/cgit-css/favicon.ico

    root-title=Immae’s git
    root-desc=To go back to the old interface: https://git.immae.eu/?old
    readme=:README.md
    readme=:readme.md
    readme=:README
    readme=:DOCUMENTATION.md
    about-filter=${aboutFilter}
    #${cgit}/lib/cgit/filters/about-formatting.sh
    source-filter=${cgit}/lib/cgit/filters/syntax-highlighting.py

    enable-blame=1
    enable-index-links=1
    enable-commit-graph=1
    enable-log-filecount=1
    enable-log-linecount=1

    enable-html-serving=1
    # Allow using gitweb.* keys
    enable-git-config=1

    side-by-side-diffs=1
    snapshots=tar.gz tar.zst zip
    mimetype-file=${mailcap}/etc/mime.types

    section=__Others__
    clone-url=ssh://gitolite@git.immae.eu/$CGIT_REPO_URL https://git.immae.eu/$CGIT_REPO_URL
    #section-from-path=1
    project-list=${varDir}/projects.list
    scan-path=${varDir}/repositories
    '';
  apache = rec {
    user = "wwwrun";
    group = "wwwrun";
    modules = [ "cgid" ];
    webappName = "tools_gitweb";
    root = "/run/current-system/webapps/${webappName}";
    vhostConf = ''
      SetEnv GIT_PROJECT_ROOT ${varDir}/repositories/
      ScriptAliasMatch \
                  "(?x)^/(.*/(HEAD | \
                                  info/refs | \
                                  objects/(info/[^/]+ | \
                                          [0-9a-f]{2}/[0-9a-f]{38} | \
                                          pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
                                  git-(upload|receive)-pack))$" \
                  ${git}/libexec/git-core/git-http-backend/$1

      <Directory "${git}/libexec/git-core">
        Require all granted
      </Directory>
      <Directory "${root}">
        DirectoryIndex gitweb.cgi
        Require all granted
        AllowOverride None
        Options ExecCGI FollowSymLinks
        <Files gitweb.cgi>
          SetHandler cgi-script
          SetEnv  GITWEB_CONFIG  "${config}"
        </Files>
      </Directory>

      SetEnv CGIT_CONFIG ${cgitConfig}
      ScriptAlias /cgit "${cgit}/cgit/cgit.cgi/"
      Alias /cgit-css "${cgit}/cgit"
      <Directory "${cgit}/cgit/">
        AllowOverride None
        Options ExecCGI FollowSymlinks
        Require all granted
      </Directory>

      RewriteEngine On
      RewriteCond %{QUERY_STRING} ^$
      RewriteRule ^/?$ /cgit [L,R=302]
      '';
  };
}