diff options
Diffstat (limited to 'roles/jails')
18 files changed, 900 insertions, 0 deletions
diff --git a/roles/jails/01_ingress/defaults/main.yml b/roles/jails/01_ingress/defaults/main.yml index fbb0574..0ec6006 100644 --- a/roles/jails/01_ingress/defaults/main.yml +++ b/roles/jails/01_ingress/defaults/main.yml @@ -26,6 +26,7 @@ ingress_routes: - { host: plex.jan.systems, jail: plex, port: 32400, presets: [streaming] } - { host: komga.jan.systems, jail: komga } - { host: poudriere.jan.systems, jail: poudriere_repo } + - { host: forge.jan.systems, jail: forge } cert_domains: - "jan.systems" diff --git a/roles/jails/22_forge/defaults/main.yml b/roles/jails/22_forge/defaults/main.yml new file mode 100644 index 0000000..c459f43 --- /dev/null +++ b/roles/jails/22_forge/defaults/main.yml @@ -0,0 +1,36 @@ +userland: "15.1-RELEASE" + +zfs: + - name: forge_repos + owner: "1000" + group: "1000" + +nullfs: + - src: forge_repos + dst: /home/git + +pkg: + - git + - cgit + - fcgiwrap + - nginx + - highlight + - py312-docutils + - py312-markdown + - py312-pygments + - groff + +services: + - sshd + - nginx + - fcgiwrap + +sysrc: + - name: fcgiwrap_socket_owner + value: "www" + - name: fcgiwrap_socket_group + value: "www" + - name: fcgiwrap_user + value: "www" + - name: fcgiwrap_group + value: "www" diff --git a/roles/jails/22_forge/files/about-formatting.sh b/roles/jails/22_forge/files/about-formatting.sh new file mode 100644 index 0000000..c330aad --- /dev/null +++ b/roles/jails/22_forge/files/about-formatting.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +# This may be used with the about-filter or repo.about-filter setting in cgitrc. +# It passes formatting of about pages to differing programs, depending on the usage. + +# Markdown support requires python and markdown-python. +# RestructuredText support requires python and docutils. +# Man page support requires groff. + +# The following environment variables can be used to retrieve the configuration +# of the repository for which this script is called: +# CGIT_REPO_URL ( = repo.url setting ) +# CGIT_REPO_NAME ( = repo.name setting ) +# CGIT_REPO_PATH ( = repo.path setting ) +# CGIT_REPO_OWNER ( = repo.owner setting ) +# CGIT_REPO_DEFBRANCH ( = repo.defbranch setting ) +# CGIT_REPO_SECTION ( = section setting ) +# CGIT_REPO_CLONE_URL ( = repo.clone-url setting ) + +export PATH=$PATH:/usr/local/bin + +cd "$(dirname $0)/html-converters/" +case "$(printf '%s' "$1" | tr '[:upper:]' '[:lower:]')" in + *.markdown|*.mdown|*.md|*.mkd) exec ./md2html; ;; + *.rst) exec ./rst2html; ;; + *.[1-9]) exec ./man2html; ;; + *.htm|*.html) exec cat; ;; + *.txt|*) exec ./txt2html; ;; +esac diff --git a/roles/jails/22_forge/files/cgit.css b/roles/jails/22_forge/files/cgit.css new file mode 100644 index 0000000..37edafc --- /dev/null +++ b/roles/jails/22_forge/files/cgit.css @@ -0,0 +1,465 @@ +#header { + header { + font-weight: bold; + font-size: var(--font-size); + } + width: 100%; + td { + padding: 0; + } + td a{ + margin-right: 5px; + } + th { + text-align: left; + } + .main::before { + margin-right: 8px; + content: "►"; + } +} + +:root { + --bg-color: #1b1f29; + --bg-light-color: #2b2f39; + --color: #ffffff; + --light-color: #eff1f8; + --border: #eff1f8; + --color-link: #5da9e9; + --red: #ff6666; + --green: #55bb55; + --blue: #6666FF; + --yellow: #AAAA22; + --orange: #BB8811; + --light-red: #551111; + --light-green: #115511; + --light-blue: #bbbbff; + --light-yellow: #555511; + + --font-size: 14px; +} + +html { + background-color: var(--bg-color); + color: var(--color); + font-family: monospace; + font-size: var(--font-size); +} + +div#cgit { + padding: 2em; + + margin-left: auto; + margin-right: auto; + max-width: 1200px; +} + +div#summary img { + max-width: 100%; +} + +/* unvisited link */ +a:link, a:visited, a:hover, a:active { + color: var(--color-link); +} + +a.ls-dir:last-of-type::after { + content: "/" +} +table.list td > .ls-dir { + color: var(--light-blue); +} + +div#cgit a { + text-decoration: none +} +div#cgit a:hover:not(.button) { + text-decoration: underline +} + +table.tabs td a.active { + background-color: var(--color-link); + color: var(--bg-color); +} + +.tabs td.form, .tabs td a { + padding: 2px 5px 2px 5px; +} + +table.list tr:not(.nohover):nth-child(even) { + background-color: var(--bg-light-color); +} + +table.list td > a { + color: var(--color); +} + +table.list td a:hover { + color: var(--color-link); +} + +.left { + text-align: left; +} + +.right { + text-align: right; +} + +table.list { + width: 100%; + border: 1px solid var(--border); + margin-bottom: 5px; +} + +.button { + border: 1px solid var(--border); + padding: 3px; + margin: 3px; + text-decoration: none; +} + +a.button:hover { + border-width: 1px; + border-color: var(--color-link); + transition: 0.2s; +} + +table.list tr td{ + padding: 3px 5px 5px 3px; +} + +td.linenumbers { + border-right: 1px solid var(--border); +} + +table.blob, table.diff { + width: 100%; + max-width: 100%; + background-color: var(--bg-light-color); + border-top: 1px solid var(--border); + overflow: scroll; + display: block; + white-space: pre; +} + +table.tabs { + margin-bottom: 5px; + width: 100%; + max-width: 100%; + background-color: var(--bg-light-color); + border: 1px solid var(--border); +} + +.linenumbers a { + text-decoration: none; +} + +div.content { + max-width: 100%; + width: 100%; + overflow: scroll; + display: block; +} + +table.tabs a.active { + display: inline +} +table.tabs .form { + white-space: nowrap; + text-align: right; +} + +/*Tree*/ +.ls-mode { + color: var(--light-color); +} + +/*DIFF*/ +.del { + color: var(--red) +} +.add { + color: var(--green) +} +.hunk { + color: var(--blue) +} +.ctx { + color: var(--light-color) +} +.head { + font-weight: bold; +} +div.content table.diffstat { + width: auto; + display: table; + background-color: var(--bg-light-color); + border: 1px solid var(--border); +} +td.graph td.add { + background-color: var(--green) +} + +td.graph td.rem { + background-color: var(--red) +} + +span.insertions { + color: var(--green) +} + +span.deletions { + color: var(--red) +} + +td.graph td { + height: 7px; +} + +table.diffstat td.mode { + white-space: pre; +} + +td.graph { + width: 350px; + border-collapse: collapse; +} + +.diffstat-header { + font-weight: bold; +} +table.diffstat td.add a { + color: var(--green); +} +table.diffstat td.del a { + color: var(--red); +} + +table.ssdiff td.changed { + background-color: var(--yellow) +} +table.ssdiff td.changed_dark { + background-color: var(--light-yellow) +} +table.ssdiff td.del { + background-color: var(--red); + color: var(--color); +} +table.ssdiff td.del_dark { + background-color: var(--light-red); + color: black; +} +table.ssdiff td.add { + background-color: var(--green); + color: var(--color); +} +table.ssdiff td.add_dark { + background-color: var(--light-green); + color: black; +} +table.ssdiff td.hunk { + background-color: var(--blue); + color: var(--color); + border-top: 2px solid var(--border); + border-bottom: 2px solid var(--border); +} + +table.ssdiff { + border-collapse: collapse +} + +table.ssdiff td { + border-left: 1px solid var(--border); + border-right: 1px solid var(--border); +} + +table.ssdiff td.space { + border: none; + div { + min-height: 3em + } +} + +table.ssdiff td.foot { + border-bottom: 1px solid var(--border); +} + +table.ssdiff td.head { + border-top: 1px solid var(--border); +} + +/*Top*/ +div#cgit div.cgit-panel table { + border: 1px solid var(--border); + background-color: var(--bg-light-color); +} + +div#cgit div.cgit-panel { + float: right; + margin-top: 0.5em; +} + +a.deco { + color: var(--red); + border: 2px solid var(--red); + padding: 0px 2px; + margin: 0px 2px; + text-decoration: none; + background-color: var(--bg-light-color); +} + +a.tag-deco { + color: var(--yellow); + border: 2px solid var(--yellow); + padding: 0px 2px; + margin: 0px 2px; + text-decoration: none; + background-color: var(--bg-light-color); +} + +a.remote-deco { + color: var(--light-blue); + border: 2px solid var(--light-blue); + padding: 0px 2px; + margin: 0px 2px; + text-decoration: none; + background-color: var(--bg-light-color); +} + +a.tag-annotated-deco { + color: var(--orange); + border: 2px solid var(--orange); + padding: 0px 2px; + margin: 0px 2px; + text-decoration: none; + background-color: var(--bg-light-color); +} + +a.branch-deco { + color: var(--green); + border: 2px solid var(--green); + padding: 0px 2px; + margin: 0px 2px; + text-decoration: none; + background-color: var(--bg-light-color); +} + +.commit-subject { + font-size: var(--font-size); + font-weight: bold; + margin: 1.5em 0em 0.5em 0em; +} + +div.diffstat-header { + padding-top: 1em; +} + +/*Stats*/ +table.stats td, +table.stats th { + border: 2px solid var(--border) +} + +td.commitgraph { + white-space: pre; + .column1 { + color: var(--red); + } + .column2 { + color: var(--green); + } + .column3 { + color: var(--blue); + } + .column4 { + color: var(--light-red); + } + .column5 { + color: var(--light-green); + } + .column6 { + color: var(--light-blue); + } +} + +@media (max-width: 767.98px) { + table[summary="tree listing"] { + th:nth-child(1), + th:nth-child(3), + tr > .ls-mode, + tr > .ls-size { + display: none; + color: red; + } + } + table:has(td.commitgraph) { + tr:not(.nohover-highlight) td:nth-last-child(-n+2), + th:nth-last-child(-n+2), + td:nth-child(1), + th:nth-child(1) { + display: none; + } + } + table.tabs { + display: block; + overflow: scroll; + .form { + margin-left: 100px; + margin-right: 0px; + width: 100% + } + } + div#cgit { + padding: 0px; + } + + div#cgit div.cgit-panel { + float: unset; + } +} + +input, textarea, button, select { + border-radius: 0px; + -webkit-appearance: none; + -webkit-border-radius: 0px; + padding: 4px 10px; + border: none; + font-family: monospace; + font-size: var(--font-size); + height: 24px; +} + +select { + background-image: url("data:image/svg+xml;utf8,<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='24' height='24' viewBox='0 0 24 24'><path fill='%23444' d='M7.406 7.828l4.594 4.594 4.594-4.594 1.406 1.406-6 6-6-6z'></path></svg>"); + background-position: 100% 0%; + background-repeat: no-repeat; + padding-right: 20px; +} + +.footer { + margin-top: 40px; +} + +.logo { + display: none; +} + +#header tr:nth-of-type(1) td:nth-of-type(3) { + text-align: right; +} + +#header { + margin-bottom: 20px; + -webkit-border-vertical-spacing: 0; + -webkit-border-horizontal-spacing: 0; +} + +#header tr { + height: 24px; +} + +#summary { + background-color: var(--bg-light-color); + padding: 8px 8px 16px; +} diff --git a/roles/jails/22_forge/files/git-shell-commands/delete b/roles/jails/22_forge/files/git-shell-commands/delete new file mode 100644 index 0000000..1c1ce0d --- /dev/null +++ b/roles/jails/22_forge/files/git-shell-commands/delete @@ -0,0 +1,11 @@ +#!/bin/sh +if [ -z "$1" ]; then + echo "Usage: delete [REPO_NAME]" + exit 1 +fi +if [ ! -d "$1.git" ]; then + echo "Repository $1 does not exist" + exit 1 +fi +rm -rf "$1.git" +echo "Deleted repository $1" diff --git a/roles/jails/22_forge/files/git-shell-commands/describe b/roles/jails/22_forge/files/git-shell-commands/describe new file mode 100644 index 0000000..b5b0451 --- /dev/null +++ b/roles/jails/22_forge/files/git-shell-commands/describe @@ -0,0 +1,11 @@ +#!/bin/sh +if [ -z "$1" ] || [ -z "$2" ]; then + echo "Usage: describe [REPO_NAME] [DESCRIPTION]" + exit 1 +fi +if [ ! -d "$1.git" ]; then + echo "Repository $1 does not exist" + exit 1 +fi +echo "$2" > "$1.git/description" +echo "Updated description for $1" diff --git a/roles/jails/22_forge/files/git-shell-commands/help b/roles/jails/22_forge/files/git-shell-commands/help new file mode 100644 index 0000000..fd0690d --- /dev/null +++ b/roles/jails/22_forge/files/git-shell-commands/help @@ -0,0 +1,11 @@ +#!/bin/sh +cat <<EOF +Available commands: + + new [REPO_NAME] - create a new bare repository + ls - list repositories + describe [REPO_NAME] [DESCRIPTION] - set repository description + rename [OLD_NAME] [NEW_NAME] - rename a repository + delete [REPO_NAME] - delete a repository + +EOF diff --git a/roles/jails/22_forge/files/git-shell-commands/ls b/roles/jails/22_forge/files/git-shell-commands/ls new file mode 100644 index 0000000..ef5d3e5 --- /dev/null +++ b/roles/jails/22_forge/files/git-shell-commands/ls @@ -0,0 +1,4 @@ +#!/bin/sh +find . -maxdepth 1 -type d -name "*.git" | while read repo; do + basename "$repo" .git +done | sort diff --git a/roles/jails/22_forge/files/git-shell-commands/new b/roles/jails/22_forge/files/git-shell-commands/new new file mode 100644 index 0000000..ba67bc4 --- /dev/null +++ b/roles/jails/22_forge/files/git-shell-commands/new @@ -0,0 +1,12 @@ +#!/bin/sh +if [ -z "$1" ]; then + echo "Usage: new [REPO_NAME]" + exit 1 +fi +if [ -d "$1.git" ]; then + echo "Repository $1 already exists" + exit 1 +fi +git init --bare "$1.git" +echo "$1" > "$1.git/description" +echo "Created repository $1" diff --git a/roles/jails/22_forge/files/git-shell-commands/rename b/roles/jails/22_forge/files/git-shell-commands/rename new file mode 100644 index 0000000..2d1f73e --- /dev/null +++ b/roles/jails/22_forge/files/git-shell-commands/rename @@ -0,0 +1,15 @@ +#!/bin/sh +if [ -z "$1" ] || [ -z "$2" ]; then + echo "Usage: rename [OLD_NAME] [NEW_NAME]" + exit 1 +fi +if [ ! -d "$1.git" ]; then + echo "Repository $1 does not exist" + exit 1 +fi +if [ -d "$2.git" ]; then + echo "Repository $2 already exists" + exit 1 +fi +mv "$1.git" "$2.git" +echo "Renamed $1 to $2" diff --git a/roles/jails/22_forge/files/head-include.html b/roles/jails/22_forge/files/head-include.html new file mode 100644 index 0000000..4231c1b --- /dev/null +++ b/roles/jails/22_forge/files/head-include.html @@ -0,0 +1 @@ +<meta name="viewport" content="width=device-width, initial-scale=1.0"> diff --git a/roles/jails/22_forge/files/md2html b/roles/jails/22_forge/files/md2html new file mode 100644 index 0000000..4f1b76e --- /dev/null +++ b/roles/jails/22_forge/files/md2html @@ -0,0 +1,24 @@ +#!/usr/local/bin/python3.12 +import markdown +import sys +import io +from pygments.formatters import HtmlFormatter +from markdown.extensions.toc import TocExtension +sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8') +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') + +sys.stdout.write("<div class='markdown-body'>") +sys.stdout.flush() +# Note: you may want to run this through bleach for sanitization +markdown.markdownFromFile( + output_format="html5", + extensions=[ + "markdown.extensions.fenced_code", + "markdown.extensions.codehilite", + "markdown.extensions.tables", + "markdown.extensions.sane_lists", + TocExtension(anchorlink=True)], + extension_configs={ + "markdown.extensions.codehilite":{"css_class":"highlight"}} +) +sys.stdout.write("</div>") diff --git a/roles/jails/22_forge/files/syntax-highlighting.sh b/roles/jails/22_forge/files/syntax-highlighting.sh new file mode 100644 index 0000000..f2b9e22 --- /dev/null +++ b/roles/jails/22_forge/files/syntax-highlighting.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +PATH=$PATH:/usr/local/bin + +BASENAME="$1" +EXTENSION="${BASENAME##*.}" + +[ "${BASENAME}" = "${EXTENSION}" ] && EXTENSION=txt +[ -z "${EXTENSION}" ] && EXTENSION=txt +[ "${BASENAME%%.*}" = "Makefile" ] && EXTENSION=mk + +highlight --force -f -I --inline-css -s night -O xhtml -S "$EXTENSION" diff --git a/roles/jails/22_forge/handlers/main.yml b/roles/jails/22_forge/handlers/main.yml new file mode 100644 index 0000000..b3740d9 --- /dev/null +++ b/roles/jails/22_forge/handlers/main.yml @@ -0,0 +1,9 @@ +- name: Restart sshd + service: + name: sshd + state: restarted + +- name: Reload nginx + service: + name: nginx + state: reloaded diff --git a/roles/jails/22_forge/tasks/main.yml b/roles/jails/22_forge/tasks/main.yml new file mode 100644 index 0000000..4fd426d --- /dev/null +++ b/roles/jails/22_forge/tasks/main.yml @@ -0,0 +1,163 @@ +- import_role: + name: jail + tasks_from: jail_setup + +- name: Create git group + group: + name: git + gid: 1000 + +- name: Create git user + user: + name: git + uid: 1000 + group: git + home: /home/git + shell: /usr/local/bin/git-shell + comment: "Git Server" + create_home: false + +- name: Deploy gitconfig for git user + copy: + content: | + [init] + defaultBranch = main + dest: /home/git/.gitconfig + owner: git + group: git + mode: "0644" + +- name: Create /usr/local/etc/git directory + file: + path: /usr/local/etc/git + state: directory + owner: root + group: wheel + mode: "0755" + +- name: Deploy gitconfig for www user (safe.directory for cgit/fcgiwrap) + copy: + content: | + [safe] + directory = * + dest: /usr/local/etc/git/gitconfig-www + owner: root + group: wheel + mode: "0644" + +- name: Create git .ssh directory + file: + path: /home/git/.ssh + state: directory + owner: git + group: git + mode: "0700" + +- name: Deploy authorized_keys + copy: + content: "{{ forge_authorized_keys }}\n" + dest: /home/git/.ssh/authorized_keys + owner: git + group: git + mode: "0600" + +- name: Create git-shell-commands directory + file: + path: /home/git/git-shell-commands + state: directory + owner: git + group: git + mode: "0755" + +- name: Deploy git-shell-commands + copy: + src: "{{ jail_role_dir }}/files/git-shell-commands/{{ item }}" + dest: "/home/git/git-shell-commands/{{ item }}" + owner: git + group: git + mode: "0755" + loop: + - help + - new + - ls + - delete + - rename + - describe + +- name: Create /usr/local/etc/cgit directory + file: + path: /usr/local/etc/cgit + state: directory + owner: root + group: wheel + mode: "0755" + +- name: Deploy cgit head-include + copy: + src: "{{ jail_role_dir }}/files/head-include.html" + dest: /usr/local/etc/cgit/head-include.html + owner: root + group: wheel + mode: "0644" + +- name: Deploy custom cgit.css + copy: + src: "{{ jail_role_dir }}/files/cgit.css" + dest: /usr/local/www/cgit/cgit.css + owner: root + group: wheel + mode: "0644" + +- name: Deploy syntax-highlighting filter + copy: + src: "{{ jail_role_dir }}/files/syntax-highlighting.sh" + dest: /usr/local/lib/cgit/filters/syntax-highlighting.sh + owner: root + group: wheel + mode: "0755" + +- name: Deploy custom md2html filter + copy: + src: "{{ jail_role_dir }}/files/md2html" + dest: /usr/local/lib/cgit/filters/html-converters/md2html + owner: root + group: wheel + mode: "0755" + +- name: Deploy custom about-formatting filter + copy: + src: "{{ jail_role_dir }}/files/about-formatting.sh" + dest: /usr/local/lib/cgit/filters/about-formatting.sh + owner: root + group: wheel + mode: "0755" + +- name: Deploy nginx config + template: + src: "{{ jail_role_dir }}/templates/usr_local_etc_nginx_nginx.conf.j2" + dest: /usr/local/etc/nginx/nginx.conf + owner: root + group: wheel + mode: "0644" + notify: Reload nginx + +- name: Deploy cgitrc + template: + src: "{{ jail_role_dir }}/templates/usr_local_etc_cgitrc.j2" + dest: /usr/local/etc/cgitrc + owner: root + group: wheel + mode: "0644" + +- name: Deploy sshd_config + template: + src: "{{ jail_role_dir }}/templates/etc_ssh_sshd_config.j2" + dest: /etc/ssh/sshd_config + owner: root + group: wheel + mode: "0644" + notify: Restart sshd + +- import_role: + name: jail + tasks_from: jail_launch diff --git a/roles/jails/22_forge/templates/etc_ssh_sshd_config.j2 b/roles/jails/22_forge/templates/etc_ssh_sshd_config.j2 new file mode 100644 index 0000000..c99143c --- /dev/null +++ b/roles/jails/22_forge/templates/etc_ssh_sshd_config.j2 @@ -0,0 +1,18 @@ +Port 22 +AddressFamily any +ListenAddress 0.0.0.0 + +HostKey /etc/ssh/ssh_host_rsa_key +HostKey /etc/ssh/ssh_host_ecdsa_key +HostKey /etc/ssh/ssh_host_ed25519_key + +PermitRootLogin no +PubkeyAuthentication yes +AuthorizedKeysFile .ssh/authorized_keys +PasswordAuthentication no +ChallengeResponseAuthentication no + +AllowUsers git + +UseDNS no +PrintMotd no diff --git a/roles/jails/22_forge/templates/usr_local_etc_cgitrc.j2 b/roles/jails/22_forge/templates/usr_local_etc_cgitrc.j2 new file mode 100644 index 0000000..1fac7f1 --- /dev/null +++ b/roles/jails/22_forge/templates/usr_local_etc_cgitrc.j2 @@ -0,0 +1,30 @@ +css=/cgit.css +logo=/cgit.png +favicon=/favicon.ico +head-include=/usr/local/etc/cgit/head-include.html + +virtual-root=/ + +# Site settings +root-title=forge.jan.systems +root-desc=Jan's personal git repositories +clone-prefix=git@forge.jan.systems https://forge.jan.systems + +# Filters (must appear before scan-path) +about-filter=/usr/local/lib/cgit/filters/about-formatting.sh +source-filter=/usr/local/lib/cgit/filters/syntax-highlighting.sh + +# Repository display (must appear before scan-path) +enable-index-owner=0 +enable-commit-graph=1 +enable-log-filecount=1 +enable-log-linecount=1 +max-stats=year + +# Render README on summary page +readme=:README.md +readme=:README +readme=:README.txt + +# Scan /home/git for bare repositories +scan-path=/home/git diff --git a/roles/jails/22_forge/templates/usr_local_etc_nginx_nginx.conf.j2 b/roles/jails/22_forge/templates/usr_local_etc_nginx_nginx.conf.j2 new file mode 100644 index 0000000..7baf367 --- /dev/null +++ b/roles/jails/22_forge/templates/usr_local_etc_nginx_nginx.conf.j2 @@ -0,0 +1,48 @@ +worker_processes 1; + +events { + worker_connections 1024; +} + +http { + include mime.types; + default_type application/octet-stream; + sendfile on; + keepalive_timeout 65; + + server { + listen 80; + server_name _; + + root /usr/local/www/cgit; + try_files $uri @cgit; + + # Anonymous git HTTP clone + location ~ ^/(.+\.git)/(HEAD|info/refs|objects/.*|git-upload-pack)$ { + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME /usr/local/bin/git-http-backend; + fastcgi_param GIT_HTTP_EXPORT_ALL ""; + fastcgi_param GIT_PROJECT_ROOT /home/git; + fastcgi_param GIT_CONFIG_GLOBAL /usr/local/etc/git/gitconfig-www; + fastcgi_param PATH_INFO /$1/$2; + fastcgi_pass unix:/var/run/fcgiwrap/fcgiwrap.sock; + } + + location @cgit { + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME /usr/local/www/cgit/cgit.cgi; + fastcgi_param PATH_INFO $uri; + fastcgi_param QUERY_STRING $query_string; + fastcgi_param GIT_CONFIG_GLOBAL /usr/local/etc/git/gitconfig-www; + fastcgi_pass unix:/var/run/fcgiwrap/fcgiwrap.sock; + } + + location /cgit.css { + root /usr/local/www/cgit; + } + + location /cgit.png { + root /usr/local/www/cgit; + } + } +} |
