summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXiao Pan <xyz@flylightning.xyz>2025-07-10 08:08:59 +0000
committerXiao Pan <xyz@flylightning.xyz>2025-07-10 08:08:59 +0000
commit5abb40c5be90e5257cdfae51c165f00c5398f32c (patch)
tree40a115444d89d6f6c82b854c185790686d0bdb95
parent673c18cbf2c80de0aa5aa03b24cd026cf742412b (diff)
starting to move studio website to ca, now moving configs
-rw-r--r--etc/cgitrc111
-rw-r--r--etc/highlight/filetypes.conf185
-rw-r--r--etc/nginx/nginx.conf190
-rw-r--r--etc/pacman.d/hooks/highlight-css.hook13
l---------etc/systemd/system/sockets.target.wants/uwsgi@cgit.socket1
-rw-r--r--etc/uwsgi/cgit.ini14
-rw-r--r--srv/http/master/index.html30
-rw-r--r--srv/http/master/pub_pgp_key.asc100
-rw-r--r--srv/http/master/pub_ssh_key.txt1
-rwxr-xr-xusr/lib/cgit/filters/about-formatting-edited.sh29
-rwxr-xr-xusr/lib/cgit/filters/syntax-highlighting-edited.sh33
-rw-r--r--usr/share/webapps/cgit/highlight.css24
-rw-r--r--usr/share/webapps/cgit/mycgit.css6
-rw-r--r--var/lib/gitolite/.gitolite.rc202
14 files changed, 939 insertions, 0 deletions
diff --git a/etc/cgitrc b/etc/cgitrc
new file mode 100644
index 00000000..df30d0a6
--- /dev/null
+++ b/etc/cgitrc
@@ -0,0 +1,111 @@
+# https://wiki.archlinux.org/title/Cgit#Configuration_of_cgit
+# https://wiki.gentoo.org/wiki/User:Halcon/HOWTO_cgit_uwsgi_nginx
+# `man cgitrc`
+
+cache-size=1000
+enable-index-owner=0
+mimetype-file=/etc/mime.types
+# https://stackoverflow.com/questions/16182421/cgit-and-nginx-url-rewrite
+virtual-root=/
+
+# useful but may makes page generation slow, maybe disable
+# can see the log via `journalctl -b -u uwsgi@cgit` and search less pager with sth. like `/[0-9]{3} msecs`
+#enable-blame=1
+#enable-log-filecount=1
+#enable-log-linecount=1
+# showing branch merge, ex: https://git.flylightning.xyz/dwm_fly/log/?h=fly
+#enable-commit-graph=1
+
+# not very useful, maybe disable
+#enable-follow-links=1
+#enable-subject-links=1
+
+# `man cgitrc` uses $CGIT_REPO_URL instead of $CGIT_REPO_NAME, I guess maybe because repo name can be different from repo url?
+clone-url=https://$HTTP_HOST/$CGIT_REPO_URL https://codeberg.org/flyxyz123/$CGIT_REPO_URL
+# $HTTP_HOST not working for clone-prefix, not sure why, therefore I prefer clone-url over clone-prefix
+#clone-prefix=https://git.flylightning.xyz/ https://codeberg.org/flyxyz123/
+
+source-filter=/usr/lib/cgit/filters/syntax-highlighting-edited.sh
+css=/mycgit.css
+
+about-filter=/usr/lib/cgit/filters/about-formatting-edited.sh
+#readme=:README.markdown
+#readme=:readme.markdown
+#readme=:README.mdown
+#readme=:readme.mdown
+readme=:README.md
+#readme=:readme.md
+#readme=:README.mkd
+#readme=:readme.mkd
+#readme=:README.rst
+#readme=:readme.rst
+#readme=:README.html
+#readme=:readme.html
+#readme=:README.htm
+#readme=:readme.htm
+#readme=:README.txt
+#readme=:readme.txt
+readme=:README
+#readme=:readme
+#readme=:INSTALL.markdown
+#readme=:install.markdown
+#readme=:INSTALL.mdown
+#readme=:install.mdown
+#readme=:INSTALL.md
+#readme=:install.md
+#readme=:INSTALL.mkd
+#readme=:install.mkd
+#readme=:INSTALL.rst
+#readme=:install.rst
+#readme=:INSTALL.html
+#readme=:install.html
+#readme=:INSTALL.htm
+#readme=:install.htm
+#readme=:INSTALL.txt
+#readme=:install.txt
+#readme=:INSTALL
+#readme=:install
+
+root-title=flylightning.xyz git repositories
+root-desc=
+
+repo.url=config_local_arch
+repo.path=/var/lib/gitolite/repositories/config_local_arch.git
+repo.desc=Device dependent config files for Arch Linux, managed by https://git.flylightning.xyz/fsh/tree/sh/cfg (git bare repo method)
+
+repo.url=xcross
+repo.path=/var/lib/gitolite/repositories/xcross.git
+repo.desc=X11 draw a cross at cursor across screen
+
+repo.url=public_archive_codes
+repo.path=/var/lib/gitolite/repositories/public_archive_codes.git
+repo.desc=My mostly not used, not maintained, archived codes/configs
+
+repo.url=fly
+repo.path=/var/lib/gitolite/repositories/fly.git
+repo.desc=Arch Linux custom local repository
+
+repo.url=aur
+repo.path=/var/lib/gitolite/repositories/aur.git
+repo.desc=PKGBUILDs I maintain for AUR
+
+repo.url=fsh
+repo.path=/var/lib/gitolite/repositories/fsh.git
+repo.desc=My shell utilities
+
+section=Archived. Have license issues.
+
+repo.url=remote_plot
+repo.path=/var/lib/gitolite/repositories/remote_plot.git
+repo.desc=Archived. Has license issues. Plot on GUI a remote file updating using https://git.flylightning.xyz/mycan
+
+repo.url=mycan
+repo.path=/var/lib/gitolite/repositories/mycan.git
+repo.desc=Archived. Has license issues. Read CAN and write to a file.
+
+section=forks
+
+repo.url=dwm_fly
+repo.path=/var/lib/gitolite/repositories/dwm_fly.git
+repo.desc=My fork of https://git.suckless.org/dwm
+#repo.readme=:dwm.1
diff --git a/etc/highlight/filetypes.conf b/etc/highlight/filetypes.conf
new file mode 100644
index 00000000..5028b5c3
--- /dev/null
+++ b/etc/highlight/filetypes.conf
@@ -0,0 +1,185 @@
+-- Filename and shebang mapping
+--
+-- Add an entry for a language syntax which is occupied by multiple source file extensions.
+-- If there is only one extension, just name the lang file accordingly and it will work (no entry needed here).
+-- The filetype entries in gui_files/ext/fileopenfilter.conf should also be updated for the GUI file dialogs.
+--
+-- Extensions can be configured for multiple languages (see "asm", which is assigned to assembler and fasm).
+-- The command line (CLI) and Qt GUI builds handle ambiguous assignments as follows:
+-- - CLI: the first association listed here will be used
+-- - GUI: a syntax selection prompt will be shown
+--
+-- If a filename has no extension by convention (ie. makefile), it may be added here nevertheless or be
+-- configured as "Shebang".
+--
+-- You can assign complete filenames to a syntax with "Filenames", see the "cmake" entry.
+-- To define both filenames and extensions, add two separate entries (see "sh" entry).
+--
+-- A default input encoding can be set with an EncodingHint attribute (requires v. 3.55).
+--
+-- The first filetypes.conf found in a highlight search directory wins. See README.adoc for search dirs.
+--
+-- You can override specific settings in ~/.highlight/filetypes.conf like this:
+--
+-- dofile "/etc/highlight/filetypes.conf"
+--
+-- table.insert(FileMapping, { Lang="yourlang", Shebang=[[^#!\s*(/usr)?(/local)?/bin/(env\s+)?yourlang]] })
+
+FileMapping = {
+
+ { Lang="abap", Extensions={"abp"} },
+ { Lang="ada", Extensions={"adb", "ads", "a", "gnad"} },
+ { Lang="agda", Extensions={"lagda"} },
+ { Lang="alan", Extensions={"alan", "i"} },
+ { Lang="algol", Extensions={"alg"} },
+ { Lang="ampl", Extensions={"dat", "run"} },
+ { Lang="amtrix", Extensions={"s4", "s4t", "s4h", "hnd", "t4"} },
+ { Lang="assembler", Extensions={"asm", "a51", "29k", "68s", "68x", "x86"} },
+ { Lang="fasm", Extensions={"asm", "inc"} },
+ { Lang="asp", Extensions={"aspx", "ashx", "ascx"} },
+ { Lang="ats", Extensions={"dats"} },
+ { Lang="aspect", Extensions={"was", "wud"} },
+ { Lang="ballerina", Extensions={"bal"} },
+ { Lang="bat", Extensions={"cmd"} },
+ { Lang="c", Extensions={"c++", "cpp", "cxx", "cc", "h", "hh", "hxx", "hpp", "cu", "inl", "ipp", "ino", "ixx", "cppm"} },
+ { Lang="cmake", Filenames={"CMakeLists.txt"} },
+ { Lang="charmm", Extensions={"inp"} },
+ { Lang="clojure", Extensions={"boot", "cl2", "clj", "cljscm", "cljx", "hic"} },
+ { Lang="coldfusion", Extensions={"cfc","cfm"} },
+ { Lang="cobol", Extensions={"cob", "cbl"} },
+ { Lang="crystal", Extensions={"cr"} },
+ { Lang="coffeescript", Extensions={"coffee", "cakefile", "cjsx", "coffee", "iced"} },
+ { Lang="conf", Extensions={"anacrontab"} },
+ { Lang="delphi", Extensions={"pas", "dpr"} },
+ { Lang="diff", Extensions={"patch"} },
+ { Lang="dts", Extensions={"dtsi"} },
+ { Lang="eiffel", Extensions={"e", "se"} },
+ { Lang="elixir", Extensions={"ex", "exs", "heex"} },
+ { Lang="erlang", Extensions={"hrl", "erl", "xrl", "yrl"} },
+ { Lang="euphoria", Extensions={"ex", "exw", "wxu", "ew", "eu"} },
+ { Lang="fortran77", Extensions={"f", "for", "ftn"} },
+ { Lang="fortran90", Extensions={"f95", "f90"} },
+ { Lang="gambas", Extensions={"class"} },
+ { Lang="gdscript", Extensions={"gd"} },
+ { Lang="haskell", Extensions={"hs"} },
+ { Lang="hugo", Extensions={"hug"} },
+ { Lang="ini", Extensions={"doxyfile", "desktop", "kdev3", "reg", "cfg", "inf", "config", ".gitconfig", "service", "network"} },
+ { Lang="jam", Extensions={"jam", "ham"} },
+ { Lang="java", Extensions={"groovy", "grv", "jenkinsfile", "gradle"} },
+ { Lang="javascript", Extensions={"js"} },
+ { Lang="julia", Extensions={"jl"} },
+ { Lang="kotlin", Extensions={"kt", "kts"} },
+ { Lang="limbo", Extensions={"b"} },
+ { Lang="lisp", Extensions={"cl", "clisp", "el", "lsp", "sbcl", "scom", "fas", "scm", "mud", "fasl" } },
+ { Lang="makefile", Extensions={"mak", "mk", "gnumakefile"} },
+ { Lang="meson", Filenames={ "meson.build", "meson_options.txt" } },
+ { Lang="snmp", Extensions={"mib", "smi"} },
+ { Lang="ocaml", Extensions={"ml","mli", "eliom", "eliomi", "ml4", "mll", "mly"} },
+ { Lang="mod2", Extensions={"mod", "def"} },
+ { Lang="mod3", Extensions={"m3", "i3"} },
+ { Lang="oberon", Extensions={"ooc"} },
+ { Lang="php", Extensions={"php3", "php4", "php5", "php6", "php7", "phps", "phpt"} },
+ { Lang="pike", Extensions={"pmod"} },
+ { Lang="pl1", Extensions={"ff", "fp", "fpp", "rpp","sf", "sp", "spb",
+ "spp","sps", "wp", "wf", "wpp","wps","wpb","bdy","spe"} },
+ { Lang="perl", Extensions={"pl","perl", "cgi", "pm", "plx", "plex"} },
+ { Lang="polygen", Extensions={"grm"} },
+ { Lang="pro", Extensions={"pro"} },
+ { Lang="qmake", Extensions={"pro"} },
+ { Lang="progress", Extensions={"p", "i", "w"} },
+ { Lang="purescript", Extensions={"purs"} },
+ { Lang="ruby", Extensions={"rb","ruby", "pp", "rjs", "gemfile", "rakefile", "appfile", "appraisals", "berksfile",
+ "brewfile", "capfile", "cgi", "cheffile", "config.ru", "deliverfile", "fastfile", "fcgi", "gemspec",
+ "guardfile", "irbrc", "jbuilder", "podfile", "podspec", "prawn", "rabl", "rake", "rantfile", "rbx",
+ "scanfile", "simplecov", "snapfile", "thor", "thorfile", "vagrantfile" } },
+ { Lang="rexx", Extensions={"rex", "rx", "the"} },
+ { Lang="shellscript", Filenames={".zshrc", ".bashrc"} },
+ { Lang="shellscript", Extensions={"sh", "bash", "zsh", "ebuild", "eclass"} },
+ { Lang="smalltalk", Extensions={"st", "gst", "sq"} },
+ { Lang="sybase", Extensions={"sp"} },
+ { Lang="tcl", Extensions={"wish", "itcl"} },
+ { Lang="tcsh", Extensions={"csh", "tcsh", ".cshrc", ".tcshrc"} },
+ { Lang="terraform", Extensions={"tf", "tfvars"} },
+ { Lang="tex", Extensions={"sty", "cls"} },
+ { Lang="vb", Extensions={"bas", "basic", "bi", "vbs"} },
+ { Lang="verilog", Extensions={"v"} },
+ { Lang="html", Extensions={"htm", "xhtml", "twig", "jinja"} },
+ { Lang="xml", Extensions={"sgm", "sgml", "nrm", "ent","hdr", "hub", "dtd", "glade",
+ "wml","vxml", "wml", "tld", "csproj","xsl", "ecf", "jnlp", "xsd",
+ "resx", "rng", "rss", "opml", "graphml"} },
+ { Lang="fsharp", Extensions={"fs","fsi","fsx"} },
+ { Lang="informix", Extensions={"4gl"} },
+ { Lang="blitzbasic", Extensions={"bb"} },
+ { Lang="innosetup", Extensions={"iss"} },
+ { Lang="lotus", Extensions={"ls"} },
+ { Lang="ascend", Extensions={"a4c"} },
+ { Lang="actionscript", Extensions={"as"} },
+ { Lang="express", Extensions={"exp"} },
+ { Lang="hare", Extensions={"ha"} },
+ { Lang="haxe", Extensions={"hx"} },
+ { Lang="pyrex", Extensions={"pyx"} },
+
+ { Lang="abap4", Extensions={"abp"} },
+ { Lang="csharp", Extensions={"cs"} },
+ { Lang="interlis", Extensions={"ili"} },
+ { Lang="logtalk", Extensions={"lgt"} },
+ { Lang="matlab", Extensions={"m"} },
+ { Lang="nsis", Extensions={"nsi", "nsh"} },
+ { Lang="bison", Extensions={"y"} },
+ { Lang="squirrel", Extensions={"nut"} },
+ { Lang="luban", Extensions={"lbn"} },
+ { Lang="maya", Extensions={"mel"} },
+ { Lang="nemerle", Extensions={"n"} },
+ { Lang="nim", Extensions={"nimble", "nimrod", "nims"} },
+ { Lang="paradox", Extensions={"sc"} },
+ { Lang="netrexx", Extensions={"nrx"} },
+ { Lang="clearbasic", Extensions={"cb"} },
+ { Lang="graphviz", Extensions={"dot"} },
+ { Lang="small", Extensions={"sma"} },
+ { Lang="autoit", Extensions={"au3"} },
+ { Lang="chill", Extensions={"chl"} },
+ { Lang="autohotkey", Extensions={"ahk"} },
+ { Lang="fame", Extensions={"fame"} },
+ { Lang="modelica", Extensions={"mo"} },
+ { Lang="maple", Extensions={"mpl"} },
+ { Lang="jasmin", Extensions={"j"} },
+ { Lang="snobol", Extensions={"sno"} },
+ { Lang="icon", Extensions={"icn"} },
+ { Lang="felix", Extensions={"flx"} },
+ { Lang="lindenscript", Extensions={"lsl"} },
+ { Lang="lilypond", Extensions={"ly"} },
+ { Lang="nasal", Extensions={"nas"} },
+ { Lang="clean", Extensions={"icl"} },
+ { Lang="bibtex", Extensions={"bib"} },
+ { Lang="python", Extensions={"py", "py3", "pyw", "pyi", "pyx", "pxd", "pxi", "rpy", "cpy",
+ "sconstruct", "gyp", "gypi", "snakefile", "wscript" } },
+ { Lang="python", Filenames={"SConstruct"} },
+ { Lang="rust", Extensions={"rs"} },
+
+ { Lang="txt", Extensions={"text"} },
+ { Lang="n3", Extensions={"ttl", "nt"} },
+ { Lang="biferno", Extensions={"bfr"} },
+ { Lang="scilab", Extensions={"sci", "sce"} },
+ { Lang="msl", Extensions={"nbs"} },
+ { Lang="yaml", Extensions={"yml"} },
+ { Lang="vimscript", Extensions={"vim", "vimrc", "gvimrc"} },
+ { Lang="purebasic", Extensions={"pb", "pbi", "pbf"} },
+ { Lang="markdown", Extensions={"md", "markdown", "mdwn", "mdx", "mkd", "mkdn", "mkdown", "ronn", "workbook"} },
+ { Lang="clojure", Extensions={"clj", "cljc", "cljs", "edn"} },
+ { Lang="solidity", Extensions={"sol"} },
+ { Lang="powershell", Extensions={"ps1", "psm1", "psd1"} },
+ { Lang="typescript", Extensions={"ts"} },
+
+ { Lang="exapunks", Extensions={"exapunks", "exa"} },
+ { Lang="exapunks", Shebang=[[^(?i:NOTE\sEXAPUNKS)\b]] },
+
+ { Lang="xml", Shebang=[[^\s*<\?xml\s+version=\"1\.0\"\s+[^(>)]*?>\s*$]] },
+ { Lang="shellscript", Shebang=[[^#!\s*(/usr)?(/local)?/bin/(env\s+)?([bd]ash|t?csh|[akz]?sh)]] },
+ { Lang="makefile",Shebang=[[^#!\s*(/usr)?(/local)?/bin/(env\s+)?make]] },
+ { Lang="awk", Shebang=[[^#!\s*(/usr)?(/local)?/bin/(env\s+)?[gnm]?awk]] },
+ { Lang="perl", Shebang=[[^#!\s*(/usr)?(/local)?/bin/(env\s+)?perl]] },
+ { Lang="python", Shebang=[[^#!\s*(/usr)?(/local)?/bin/(env\s+)?python]] },
+ { Lang="ruby", Shebang=[[^#!\s*(/usr)?(/local)?/bin/(env\s+)?ruby]] },
+ { Lang="php", Shebang=[[^#!\s*(/usr)?(/local)?/bin/(env\s+)?php]] },
+ { Lang="javascript", Shebang=[[^#!\s*(/usr)?(/local)?/bin/(env\s+)?node]] }
+}
diff --git a/etc/nginx/nginx.conf b/etc/nginx/nginx.conf
new file mode 100644
index 00000000..a837cf54
--- /dev/null
+++ b/etc/nginx/nginx.conf
@@ -0,0 +1,190 @@
+
+#user http;
+worker_processes 1;
+
+#error_log logs/error.log;
+#error_log logs/error.log notice;
+#error_log logs/error.log info;
+
+#pid logs/nginx.pid;
+
+
+events {
+ worker_connections 1024;
+}
+
+
+http {
+ include mime.types;
+ default_type application/octet-stream;
+
+ #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
+ # '$status $body_bytes_sent "$http_referer" '
+ # '"$http_user_agent" "$http_x_forwarded_for"';
+
+ #access_log logs/access.log main;
+
+ sendfile on;
+ #tcp_nopush on;
+
+ #keepalive_timeout 0;
+ keepalive_timeout 65;
+
+ #gzip on;
+
+ # nginx warning in journal or `sudo nginx -t`: "could not build optimal types_hash, you should increase either types_hash_max_size: 1024 or types_hash_bucket_size: 64; ignoring types_hash_bucket_size"
+ # default is 1024, I increased to 2048 and still throws warning, I increase 4096 and warning is gone
+ # not fully understood
+ # https://wiki.archlinux.org/title/nginx#Warning:_Could_not_build_optimal_types_hash
+ # https://nginx.org/en/docs/http/ngx_http_core_module.html
+ # https://nginx.org/en/docs/hash.html
+ # https://nginx.org/en/docs/http/server_names.html
+ types_hash_max_size 4096;
+
+ server {
+ listen 80;
+ # needed for ipv6
+ listen [::]:80;
+ # https://nginx.org/en/docs/http/configuring_https_servers.html#single_http_https_server
+ listen 443 ssl;
+ listen [::]:443 ssl;
+ server_name flylightning.xyz;
+
+ ssl_certificate /etc/nginx/flylightning.pem;
+ ssl_certificate_key /etc/nginx/flylightning.key;
+
+ #charset koi8-r;
+
+ #access_log logs/host.access.log main;
+
+ location / {
+ root /srv/http/master;
+ index index.html;
+ }
+
+ #error_page 404 /404.html;
+
+ # redirect server error pages to the static page /50x.html
+ #
+ #error_page 500 502 503 504 /50x.html;
+ #location = /50x.html {
+ # root /usr/share/nginx/html;
+ #}
+
+ # proxy the PHP scripts to Apache listening on 127.0.0.1:80
+ #
+ #location ~ \.php$ {
+ # proxy_pass http://127.0.0.1;
+ #}
+
+ # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
+ #
+ #location ~ \.php$ {
+ # root html;
+ # fastcgi_pass 127.0.0.1:9000;
+ # fastcgi_index index.php;
+ # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
+ # include fastcgi_params;
+ #}
+
+ # deny access to .htaccess files, if Apache's document root
+ # concurs with nginx's one
+ #
+ #location ~ /\.ht {
+ # deny all;
+ #}
+ }
+
+
+ # another virtual host using mix of IP-, name-, and port-based configuration
+ #
+ #server {
+ # listen 8000;
+ # listen somename:8080;
+ # server_name somename alias another.alias;
+
+ # location / {
+ # root html;
+ # index index.html index.htm;
+ # }
+ #}
+
+
+ # HTTPS server
+ #
+ #server {
+ # listen 443 ssl;
+ # server_name localhost;
+
+ # ssl_certificate cert.pem;
+ # ssl_certificate_key cert.key;
+
+ # ssl_session_cache shared:SSL:1m;
+ # ssl_session_timeout 5m;
+
+ # ssl_ciphers HIGH:!aNULL:!MD5;
+ # ssl_prefer_server_ciphers on;
+
+ # location / {
+ # root html;
+ # index index.html index.htm;
+ # }
+ #}
+
+ server {
+ listen 80;
+ listen [::]:80;
+ listen 443 ssl;
+ listen [::]:443 ssl;
+ server_name mirrors.flylightning.xyz;
+
+ ssl_certificate /etc/nginx/flylightning.pem;
+ ssl_certificate_key /etc/nginx/flylightning.key;
+
+ location / {
+ root /srv/http/mirrors;
+ autoindex on;
+ }
+ }
+
+ # https://wiki.archlinux.org/title/Cgit#Using_uwsgi
+ # https://wiki.gentoo.org/wiki/User:Halcon/HOWTO_cgit_uwsgi_nginx
+ # https://uwsgi-docs.readthedocs.io/en/latest/Nginx.html
+ # https://nginx.org/en/docs/http/ngx_http_uwsgi_module.html
+ # https://stackoverflow.com/questions/16182421/cgit-and-nginx-url-rewrite
+ server {
+ listen 80;
+ listen [::]:80;
+ listen 443 ssl;
+ listen [::]:443 ssl;
+ server_name git.flylightning.xyz;
+ root /usr/share/webapps/cgit;
+
+ ssl_certificate /etc/nginx/flylightning.pem;
+ ssl_certificate_key /etc/nginx/flylightning.key;
+
+ # about nginx location regex:
+ # - https://nginx.org/en/docs/http/ngx_http_core_module.html#location
+ # - https://stackoverflow.com/a/59846239
+ # - note in nginx / only means / and no other meaning, so no need \/
+ # - ~ means case-sensitive regex
+ # about (?:) non-capturing group:
+ # - https://manifold.net/doc/radian/why_do_non-capture_groups_exist_.htm
+ # - non-capturing group won't capture things inside () which may use later like in sed \1
+ # - note: I don't think sed support ?: , because POSIX ERE and BRE doesn't seem to support ?:
+ # - maybe improve a little bit performance by not storing things (not tested, also I did not read the source code)
+ # Serve static files with nginx
+ location ~ ^/(?:cgit\.(?:css|png)|robots\.txt|highlight\.css|mycgit\.css)$ {
+ root /usr/share/webapps/cgit;
+ expires 30d;
+ }
+ location / {
+ include uwsgi_params;
+ uwsgi_modifier1 9;
+ uwsgi_pass unix:/run/uwsgi/cgit.sock;
+ }
+ }
+
+}
+
+# vim: expandtab
diff --git a/etc/pacman.d/hooks/highlight-css.hook b/etc/pacman.d/hooks/highlight-css.hook
new file mode 100644
index 00000000..f14acaa7
--- /dev/null
+++ b/etc/pacman.d/hooks/highlight-css.hook
@@ -0,0 +1,13 @@
+[Trigger]
+Type = Package
+Operation = Install
+Operation = Upgrade
+Target = highlight
+
+[Action]
+Description = Upgrading highlight.css for cgit syntax highlighting...
+When = PostTransaction
+# mycgit.css import this highlight.css and cgit.css, for syntax-highlighting-edited.sh
+# because cgit.css is not pacman backup file and will be overwritten when upgrade cgit
+Exec = /usr/bin/sh -c '/usr/bin/mkdir -p /usr/share/webapps/cgit && /usr/bin/highlight -O xhtml --print-style -o /usr/share/webapps/cgit/highlight.css'
+Depends = highlight
diff --git a/etc/systemd/system/sockets.target.wants/uwsgi@cgit.socket b/etc/systemd/system/sockets.target.wants/uwsgi@cgit.socket
new file mode 120000
index 00000000..ec2ebc97
--- /dev/null
+++ b/etc/systemd/system/sockets.target.wants/uwsgi@cgit.socket
@@ -0,0 +1 @@
+/usr/lib/systemd/system/uwsgi@.socket \ No newline at end of file
diff --git a/etc/uwsgi/cgit.ini b/etc/uwsgi/cgit.ini
new file mode 100644
index 00000000..e2f750cb
--- /dev/null
+++ b/etc/uwsgi/cgit.ini
@@ -0,0 +1,14 @@
+# https://wiki.archlinux.org/title/Cgit#Using_uwsgi
+# https://wiki.gentoo.org/wiki/User:Halcon/HOWTO_cgit_uwsgi_nginx
+# https://uwsgi-docs.readthedocs.io/en/latest/Configuration.html
+# https://uwsgi-docs.readthedocs.io/en/latest/Options.html
+[uwsgi]
+master = true
+plugins = cgi
+socket = /run/uwsgi/%n.sock
+uid = http
+gid = http
+procname-master = uwsgi cgit
+processes = 1
+threads = 2
+cgi = /usr/lib/cgit/cgit.cgi
diff --git a/srv/http/master/index.html b/srv/http/master/index.html
new file mode 100644
index 00000000..88de2a03
--- /dev/null
+++ b/srv/http/master/index.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>flylightning's homepage</title>
+</head>
+<body>
+
+<p>My email: <a href="mailto:xyz@flylightning.xyz">xyz@flylightning.xyz</a></p>
+<ul>
+ <li>Old email: <a href="mailto:gky44px1999@gmail.com">gky44px1999@gmail.com</a></li>
+</ul>
+
+<p>My public PGP key: <a href="https://flylightning.xyz/pub_pgp_key.asc">https://flylightning.xyz/pub_pgp_key.asc</a></p>
+<ul>
+ <li>PGP fingerprint: FDA389A17B94BCE0E2FA3D71842BFD347BE06812</li>
+</ul>
+
+<p>My public ssh key: <a href="https://flylightning.xyz/pub_ssh_key.txt">https://flylightning.xyz/pub_ssh_key.txt</a></p>
+
+<p>My public git repositories:</p>
+<ul>
+ <li>Issues and pull requests: <a href="https://codeberg.org/flyxyz123">https://codeberg.org/flyxyz123</a></li>
+ <li>Mirror: <a href="https://git.flylightning.xyz">https://git.flylightning.xyz</a></li>
+ <li>Archive: <a href="https://github.com/flyxyz123">https://github.com/flyxyz123</a></li>
+</ul>
+
+<p>My Linux custom repositories: <a href="https://mirrors.flylightning.xyz">https://mirrors.flylightning.xyz</a></p>
+
+</body>
+</html>
diff --git a/srv/http/master/pub_pgp_key.asc b/srv/http/master/pub_pgp_key.asc
new file mode 100644
index 00000000..1fff07c6
--- /dev/null
+++ b/srv/http/master/pub_pgp_key.asc
@@ -0,0 +1,100 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQINBGCOJncBEACdW7UUSxKbISs3KimLr1ayO3/pjgedzehXdOCstRQ9AJT9s33n
+ZIEgR8NWMjbRCEvrrYqUEbylm8rLKlOR0j9qgebLavhsVDl0d+D6Hf+sDNZmuTz+
+SwJn5+0ZirrcwF3HM3ySUiR98sR/cd8w9V0VpXu9UPoOfmvVeT8lyOtEtHfgKsW8
+dYhMXJMK9UvRsTiyZMYc8FUPCJvQ3XgQUiv+i/+TYRanvG3/GVX6CN5CFWa2MU9W
+4wS9YB36JbStRczcpbCzYKr3s32O7OqZwqjqD7Fl7fwcx8CppjgUn0AkhpKO8PCZ
+Wi1IOJtVPw9EhmxD2RK5VjL0jP3EWhHoDV7TV4DHJLqfau04g4PINpVwUMm4e2HU
+Jy9CV5Jk9gjQEXJzMCL8nFq/T2xGTqUcppnyrlLN6iTIbUWaU+Lpwe4i0xhSk2UI
+gRgNQil9RCYC5HQnK3x0TX+80k+aDwdmhaEhUnF7v0L0HDw3RzSqkd8R84IFgFm8
+wVGRVXjYwWkcgR7l1Dx4hr2QhSdv0PkpZnd4rBeTdXv7X4A09jZyswhfjuxB3BFH
+TZQQQNFXUDl2nSgG9YwjmIAtn0F6QNGpsXRH0ZfkbzKuX2olCjKWPDUwLxm91iMh
+HCW6dQ5L7YrfDt2+R8+HMRiRNHUZCGeq3/OZjWAzi7mZQCfOaN4VwPQNtQARAQAB
+tDdYaWFvIFBhbiAoZmx5eHl6MTIzIGdpdGh1YiBrZXkpIDxna3k0NHB4MTk5OUBn
+bWFpbC5jb20+iQJOBBMBCAA4FiEE/aOJoXuUvODi+j1xhCv9NHvgaBIFAmCOJncC
+GwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQhCv9NHvgaBLOiA/8Cu8c9Dez
+eq/ZmM0YOk+BkXNOkwqfk/aCcH0Zn4lotgMQRjRmZ8LE61F2uqyOZHaTBO11VSn0
+R6sjAXZgt0apjLY4RW+ntEeuBngULMikPQXij8x7dgvYW+DyhJayw7ypWPfSgick
+3jO6ksLsBqM1aKOruRx8dpUQKoTdid9dPyXM+S/PCPwanXpsmL+e122rydqjBXKZ
+jUt7SfZb8Vcfel0u+SXoL4i5xa6Esw7cP15sTtRURCC1rPbm2laXTdb0xViaAFpH
+g3zX9yNJ0FoJEGjcLmQoI9l7srBc7uB1SENzJwO09Orgt3frCyAebugyZ37kQkUZ
+Lr/x/K6nDjc95UQihR1a50UHW/N+7lHud1dUfY1xyEa60pD7+tX/WHsABR5Yp/Eb
+sKCAzy3wFm/uWJGLx6aZWwgTop36eerkcAncsfFI3xnM9A6QhpsxPS51LDBUg9Ho
+GkgDhvpxO3Ae4h/QO48h1wYxYw5dLkrxsA+fpcVXNPBj7iiUUZhXGptY3DwO/ET8
+ZdyaiK0CTCRD7dI7yMRfbGu5tT6gXAiXUkXKnRpZdeMDqE3vgXG7S+teC/qbXWaL
+jnAzL/E2MhE/dTfFqfxXSQbwxp0qyMUkad1ysjrjxh0teMsV5jLhBdvvK/0W+1bg
+UUp/xtxtmsGtSX7G3YhqXCCAaYuiGnReoX20H1hpYW8gUGFuIDx4eXpAZmx5bGln
+aHRuaW5nLnh5ej6JAlQEEwEIAD4CGwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcC
+F4AWIQT9o4mhe5S84OL6PXGEK/00e+BoEgUCZpSjvAIZAQAKCRCEK/00e+BoEkYn
+D/4vipOnD7I4Re7ERbvyVD1iUXygEYfuh+QCKKXJnIOaKjxZHH4L6DIEIHkAV4xx
+NuokNjeP8+VbRj6y4Oi1OvjWzXa1Nzcnk/359uLfjiH67fZ5WXyUoljZ24R8om7K
+mKQ2VFiHC1BOhCzYSMRU4e+ogRdI9HWyHJnRThM/D/GduwfwE//xBRaoQyJ+07HY
+XhemAbhDt2BdGR9MMd7NloR3b09SpgIBuw6BagK7BoIsEreEPAzqtGIWYMepfCGY
+ytmmAqjuVJFYsIR5kNYO11qyKaPhSuGaMikz/Plq6VxlUvkzRXJCJW4coWR30XRN
+OrYR3+QTLBY9TUWy7peoLccXB8aytWmhG6yq5PeC+sfcEPuYN5yabhoKYQrpIrFH
+B3OQl7jnqYN+ticEVh/NUn49t6+4fjCXzlBoojrF5Tk8mp/r6ieYljiC2qSwhirq
+gPd6MiojRDdHTi0FFHVYhJJ71SQXcF/p+4R13GJxdygmu3/Wv8rRrFO4cXoix0Gj
+iAOouE5LjdRpF4TQaZ0GMPBGkV2Hg93VCugaFLoHsgWTNyG/ZB9ICstFvgtNEqaI
+iR7MByg7URYMaITpAR2DATIYl6dzWhgs986cSS2YuJP746lol2KdvRgp7CHMs6XV
+dHu9jOtKfeJZE0mjmza0fvgJ376veK6+qvcrUsyalDCSCrkCDQRgjiZ3ARAAwMNi
+n7zkKainK9bm6NtMR7LBE1PpT1pXyA7hAUeutHqklhZN70uy+Glm3FMLorSq/jsi
+f3KNqjIaRX9qUGmQr37laQvJVwLzjZSsj8/LinMKpA+bJw/3kYJiT8qZKWUveDOE
+Egx4jji+5GrfFcVLaNL86Gf0SGRhnu2bwgmNuCtH+tRi0BXfd+IdkEZ8+qNLnq2q
+HtJRecZhJkDDfFq+gVc5cVIdINGtWAs6DIAteyodAwqo/9o71WuJDT2kNx49nQYi
+dhYaYC6iwiJd6flzCGEfjkpa2aEgfj6MM3m+6ToO2pOrN5bR+0+fIUXYmLOIiTs/
+r6U58FZSu+gHoE3lZrzXkCv3X23MlKESRknaxbQiV+CXlfg91fSNE3OeffNhMBTq
+Gn2rFKD+8nGzDzellJXW+6SxXeRQZ8ZldYX5AqdzsjOBqIp95YLhtfBEoEz/bvKe
+WCHIv6BMwh7mPSfW1OmiA7M6aPqo8zBgdJgk++i13ZrIL6sdZiKEujRzdpz6m8kt
+iZE5MrYDa8PjPeUvve/EExDsFP4me4RWvnRnsIFwY1VxyrJtjhmITD9LlDQiFh/j
+O8wFhY84oQHLfWKpMlUVz6A/xpfu92Q4HJdAW2QW4zALi2wO1ahzL82fkth8qb+5
+s+6vciaiSTDJsNxquOQ+Zvk9gM1+fWPpjun+DMUAEQEAAYkCNgQYAQgAIBYhBP2j
+iaF7lLzg4vo9cYQr/TR74GgSBQJgjiZ3AhsMAAoJEIQr/TR74GgSrQcP/2gBmCUi
+7/8d08G294PW+QXzGFbxSVCBgHN++KzXML8D/DhaD4uukO2apSgJ9n+2pnFMNF/x
+1yqJCCyICFRmThIBNEwYR10+mzXYntbDVfe3K7FXk9JJPKW6NrJH/Klu3stIgjPo
+XYATyoK1go4iBpA9ilIa1X/ha8OuaG5Cbv5396/7let3ofMXRivH7FIhy8IPx757
+TnC5O5Y2Wo14hXpDyjMDuDg3QeBL22SQJqbT2gsjw5bjWZUdiqPhP/T4wZuaqa2v
+Cx7YWq9r7dyCLU2vJJ0EBpuESGnu97OzlcCNB+kMUo2xfwiLtSkvhEBxHI7nErtX
+JZgr7lAkw2BF7CfVhG7QhkMRmpewGOEL/JWS09q/s3qhSbE+ooSZvbETavLXda8o
+Z/+mBzqIft4BIr8AGBf8lcdmO5M6dE0YUj1p3v5sUy8IfppfBJIVMLhNvLJxx9WT
+/IVQc2LPxGGMMmidV0fTmSl3CxGr/taoR/P4YAtHyHqC4o8cWP6uQNYPjJPDS6Hm
+4VQRiBKp/t3GZg9UkEL7Oq2v9Jw96lwwTzWVyHZIvPmPKMAyjpVWOHrclgP57bEF
+TlxZwy/jnANzUHLcHQgZ1cZ9zUmzwRynPvF/YeSiEo69lRxSHJ2wnxCQ1xoMCF8J
+uOUZmvb7Dy/7CywQhnYgZVaR6enPLn4WQy5FuQINBGCPSp0BEADp8xSqq1I+M1nw
+u9zxwVcWUkOjY1Otm9ZMTxddkLUyX191kAuIBsbKDNwFCGgwGR9fvzBund30Bdg6
+g/kMrtJq2c32zDO6KDUjlNXa/zt+I7QJlepxVyjASWSiCBMkJyjTwJ25c2c1OrWM
+LSmRmg2KmygKZQqUUTltsn2gt9uWNkcC7zP2tll0918Rs1chCJcD0YRBw3FsxgKr
+SgW1LewbQtBW/0WRVcA9dwNXXRyOMC/6qaPXzTeU8SLbVHx4+GtQT9+Q0qeoO6cK
+Jq5gIhRw2rpceqTovtVOsDvgkyiKt9FfVbQgHu1MARNbsDuwxSbfyQcSBwBe95xJ
+/I04JJmES8sm5edSLuOg97EIJoVZuhnuUtfxlVq0MdPi0osKTWed+cI7Dpc6kLiL
+//P9YTrLZB0nYSwd5blGKqyj+yvVjBdcxzqysYevZEoZ36Tg4ThK8Wusd8rnzgBq
+pSVIi26KSam9n9DyTh+kmWalD6jaLR/DIe8s6HjchErgTs/pqCQauBu0sScWP04/
+8RR2AX6WWE9WUVNaTkaCZY7aE8cGTFV/8MT0SFCk4qC9AceB55iiv4/jLDZjuDFc
+D998Fw8H62Z7T4js5UAN3FgQyPUMt86dZSDihcUKT0W9QBKsV0BjfjHoQVXlpywU
+OxtUYAzAz8pfagvN6TzEc/vRu5FGnwARAQABiQRsBBgBCAAgFiEE/aOJoXuUvODi
++j1xhCv9NHvgaBIFAmCPSp0CGwICQAkQhCv9NHvgaBLBdCAEGQEIAB0WIQQFiZJw
+3yW7Hu31e+gk92nl0IyemgUCYI9KnQAKCRAk92nl0Iyemo+5D/45r5BCWl515n+V
+WFl4TpEEcxoxOYA4LVWVMJKVoYxf9Bqj4Od4BtYZKNYCxmI5We1kVu/iD9COqj92
+Vv6pSzAJbWbMjfXOruL10xTD7A9GUqtXsAGk0l7ruyTQkpnipQ/fz/1jKL9++SBu
++jhrMd2nH2mPk84kwK+GheIfj+KD9R774vEhl4jyZSN6hjRrHLznifdOC5/2ReMl
+xLthrj0fVK1uyYnmU8N/9qKESw14KtvYmS4R4E/kpD/m7cWVsMWY+WLa8csPDAv8
+TEnTBUdjVZ7uZVeYFfjUaFCE0XNFxjEj5CPAJw3PqHJ7SNf7dEDu1dcb5a0b5uBH
+bACKBGlGI06XAdlzFWQ03/t3U4Pi/QJDTrjGIEOz9chnzZsAU0Tv5xHsaRkN5qi2
+TKNguvUClh8lFTnRrm5TcAJvSCiiH0GLSd/xbK3DPYOTEY+Jh+c5Jw+c5fjMDOu1
+Nzg4+ORvJ3fc4dXpy0s2UV1BDhtPbANLuPY3Ku+wrva/zkQElt/e6G6sZKxSpSgW
+WOxzvh3V9/yVnuHCVnRVppOyL+eTks2ZMqp3PKZjPBgk8ktlZg6eLxCLdrChmU6h
+b3G0HEDhoUgoOy2DSetPelCOqSTvrHSsi3hiP0o7oEKOZ16JHpissNm2mceitU6R
+uAzGR3drD/S/jwlaZc80UOfG+9OiJpRFD/9JP9yijpLrkHWe3pp1fi1neyQsT6Vk
+Lz2YH3kIEgY9JFLGL3Nhnt5CnZp1BTwnSB+VuzTaIOmEiumiSA76LlLiI8UmBpAM
+9f1l5lKfwKeVk4xgqmrOIvlUF3e+ViwSM+Q46xAtzU7N3ujfFbWEgMx3XdRQC/n+
+MTv33WT4YNBYEoQTztJrn0vtUWuLYDfQkKUhVT6860TZLW+pGF0zSrRpjE+1LwKS
+laAk6fYl7VCriQTdI+JUVrgrf9s3WMBK4pejDFGXQMUuaAyCgeJ7QiH+efgvrl3i
+tIKhXyZvaLrbI4LZThGMCf3LDii2eqyEhDnfZwxslpN4xyp0rhiZmR/9lbwgJsMU
+U/bxCPD32B56R5LngyjV4Rxj8Dfmm6kzj8skOLo3ApFtQNa6Tpg879s31WHB7fYP
+cHp7BS/HBWiu/MUBm7DSgwZEpo10Up9ChbkYwkGPsNHfzKgidN4x0L9q4idv5Ub/
+HB0JamQsP1YWnjpGIKLkZCLUeZzrG3nXI5QP9uRtby+9S1xjNsFsk7CvmAbvJ7D6
+ILaVNsRa5GtR8DvHgPB4ZBf/PFqF9HvEjtmzvkCkuOeAk96VhZyJIeF4yqlZ+dsG
+LoSzoTBHWrsaqMf6B8PQm0qyolkG8I3MbG20RwFhJnCvBvR08BY8wffWKfP6jgtn
+8e+CFvBSqaFUrQ==
+=EAd+
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/srv/http/master/pub_ssh_key.txt b/srv/http/master/pub_ssh_key.txt
new file mode 100644
index 00000000..0560ce51
--- /dev/null
+++ b/srv/http/master/pub_ssh_key.txt
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCv5BUlURCkc3pycnmSvakTFl6W1fnCrIkzxJKQQcz18/eL9pa/M0KWjq3KoxFrsHxtsCjY3fYoUJ6XqYKEWUJRsB2ZFS0qhCPTaqhqFfKJzkKUpHyDwF5IN+/gJ95IN2slq9MRb9I4mCqUwatNHDKuctdCN3K5GCkbYbuhVKsR+2bK51aYYWtw2Pxvmhfhza0tYHdgv2nFuhEjPsRwB+dZ4XJ6fbQnXQKc8ZQVXHr+Yj4+VUIvgqbccyJvo6ICdO5YSJAT5Ue7Qm+qUKVraI6ALd2M5yLD2PyWR5x6VrtDs/3i1kH1EQw9h+2WNyW4ZUB5wRTUlKZNATWhB39K0a6jvr8V8getzcVpagIJ/obhTxg8rgoaYj1JOpDp4UnNxHaUCjXtSZdcruX+JnQyBjo4awyxUJBaym8J5+F9JWtMgTNQ+94n+eCAnp3sQigbUnft9au2wjytUL7lWJwzboNNhv2n2QUSWSaz5uoaXcDr/MOXa83MBYgr0xuDIHCPD5E= gky44px1999@gmail.com
diff --git a/usr/lib/cgit/filters/about-formatting-edited.sh b/usr/lib/cgit/filters/about-formatting-edited.sh
new file mode 100755
index 00000000..e919e54d
--- /dev/null
+++ b/usr/lib/cgit/filters/about-formatting-edited.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 )
+
+# note `pwd` when cgit run this script is /, can be tested by `cat '<p>$(pwd)</p>'`
+# so need to get those scripts location via $0, $0 is /usr/lib/cgit/filters/about-formatting-edited.sh
+dir="$(dirname "$0")/html-converters/"
+case "$(printf '%s' "$1" | tr '[:upper:]' '[:lower:]')" in
+ *.markdown|*.mdown|*.md|*.mkd) exec cmark;;
+# *.rst) exec "$dir/rst2html";;
+ *.[1-9]) exec "$dir/man2html";;
+ *.htm|*.html) exec cat;;
+ *.txt|*) exec "$dir/txt2html";;
+esac
diff --git a/usr/lib/cgit/filters/syntax-highlighting-edited.sh b/usr/lib/cgit/filters/syntax-highlighting-edited.sh
new file mode 100755
index 00000000..111b1928
--- /dev/null
+++ b/usr/lib/cgit/filters/syntax-highlighting-edited.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+# This script can be used to implement syntax highlighting in the cgit
+# tree-view by referring to this file with the source-filter or repo.source-
+# filter options in cgitrc.
+#
+# Note: the highlight command (https://gitlab.com/saalen/highlight) uses css for syntax
+# highlighting, I choose to output a file /usr/share/webapps/cgit/highlight.css
+# by `highlight -O xhtml --print-style` and import it in mycgit.css for cgit to use.
+#
+# 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 )
+
+syntax=
+case "$1" in
+ nginx.conf) syntax=nginx;;
+ pacman.conf) syntax=ini;;
+ cgitrc) syntax=ini;;
+ .gitolite.rc) syntax=perl;;
+esac
+
+# `--force` needed for highlight; one example is `< textfile highlight -O ansi --force`, without `--force` will error 1 and no output
+if [ "$syntax" ]; then
+ exec highlight --force -f -I -O xhtml -S "$syntax" 2>/dev/null
+else
+ exec highlight --force -f -I -O xhtml --syntax-by-name "$1" 2>/dev/null
+fi
diff --git a/usr/share/webapps/cgit/highlight.css b/usr/share/webapps/cgit/highlight.css
new file mode 100644
index 00000000..c8a733d1
--- /dev/null
+++ b/usr/share/webapps/cgit/highlight.css
@@ -0,0 +1,24 @@
+/* Style definition file generated by highlight 4.15, http://andre-simon.de/ */
+/* highlight theme: Kwrite Editor */
+body.hl { background-color:#e0eaee; }
+pre.hl { color:#000000; background-color:#e0eaee; font-size:10pt; font-family:'Courier New',monospace; white-space: pre-wrap; }
+.hl.num { color:#b07e00; }
+.hl.esc { color:#ff00ff; }
+.hl.sng { color:#bf0303; }
+.hl.pps { color:#818100; }
+.hl.slc { color:#838183; font-style:italic; }
+.hl.com { color:#838183; font-style:italic; }
+.hl.ppc { color:#008200; }
+.hl.opt { color:#000000; }
+.hl.ipl { color:#0057ae; }
+.hl.lin { color:#555555; user-select: none;-webkit-user-select: none; }
+.hl.hvr { cursor:help; }
+.hl.erm { color:#ff0000; font-weight:bold; border:solid 1px red; margin-left: 3em; }
+.hl.err { color:#ff0000; font-weight:bold; }
+.hl.kwa { color:#000000; font-weight:bold; }
+.hl.kwb { color:#0057ae; }
+.hl.kwc { color:#000000; }
+.hl.kwd { color:#010181; }
+.hl.kwe { color:#0d5bc3; }
+.hl.kwf { color:#750dc3; }
+
diff --git a/usr/share/webapps/cgit/mycgit.css b/usr/share/webapps/cgit/mycgit.css
new file mode 100644
index 00000000..bc1ac964
--- /dev/null
+++ b/usr/share/webapps/cgit/mycgit.css
@@ -0,0 +1,6 @@
+@import "cgit.css";
+@import "highlight.css";
+
+div#cgit pre { tab-size: 4; }
+
+div#cgit table.diff { tab-size: 4; }
diff --git a/var/lib/gitolite/.gitolite.rc b/var/lib/gitolite/.gitolite.rc
new file mode 100644
index 00000000..6f92032d
--- /dev/null
+++ b/var/lib/gitolite/.gitolite.rc
@@ -0,0 +1,202 @@
+# configuration variables for gitolite
+
+# This file is in perl syntax. But you do NOT need to know perl to edit it --
+# just mind the commas, use single quotes unless you know what you're doing,
+# and make sure the brackets and braces stay matched up!
+
+# (Tip: perl allows a comma after the last item in a list also!)
+
+# HELP for commands can be had by running the command with "-h".
+
+# HELP for all the other FEATURES can be found in the documentation (look for
+# "list of non-core programs shipped with gitolite" in the master index) or
+# directly in the corresponding source file.
+
+%RC = (
+
+ # ------------------------------------------------------------------
+
+ # default umask gives you perms of '0700'; see the rc file docs for
+ # how/why you might change this
+ UMASK => 0027,
+
+ # look for "git-config" in the documentation
+ GIT_CONFIG_KEYS => '',
+
+ # comment out if you don't need all the extra detail in the logfile
+ LOG_EXTRA => 1,
+ # logging options
+ # 1. leave this section as is for 'normal' gitolite logging (default)
+ # 2. uncomment this line to log ONLY to syslog:
+ # LOG_DEST => 'syslog',
+ # 3. uncomment this line to log to syslog and the normal gitolite log:
+ # LOG_DEST => 'syslog,normal',
+ # 4. prefixing "repo-log," to any of the above will **also** log just the
+ # update records to "gl-log" in the bare repo directory:
+ # LOG_DEST => 'repo-log,normal',
+ # LOG_DEST => 'repo-log,syslog',
+ # LOG_DEST => 'repo-log,syslog,normal',
+ # syslog 'facility': defaults to 'local0', uncomment if needed. For example:
+ # LOG_FACILITY => 'local4',
+
+ # roles. add more roles (like MANAGER, TESTER, ...) here.
+ # WARNING: if you make changes to this hash, you MUST run 'gitolite
+ # compile' afterward, and possibly also 'gitolite trigger POST_COMPILE'
+ ROLES => {
+ READERS => 1,
+ WRITERS => 1,
+ },
+
+ # enable caching (currently only Redis). PLEASE RTFM BEFORE USING!!!
+ # CACHE => 'Redis',
+
+ # ------------------------------------------------------------------
+
+ # rc variables used by various features
+
+ # the 'info' command prints this as additional info, if it is set
+ # SITE_INFO => 'Please see http://blahblah/gitolite for more help',
+
+ # the CpuTime feature uses these
+ # display user, system, and elapsed times to user after each git operation
+ # DISPLAY_CPU_TIME => 1,
+ # display a warning if total CPU times (u, s, cu, cs) crosses this limit
+ # CPU_TIME_WARN_LIMIT => 0.1,
+
+ # the Mirroring feature needs this
+ # HOSTNAME => "foo",
+
+ # TTL for redis cache; PLEASE SEE DOCUMENTATION BEFORE UNCOMMENTING!
+ # CACHE_TTL => 600,
+
+ # ------------------------------------------------------------------
+
+ # suggested locations for site-local gitolite code (see cust.html)
+
+ # this one is managed directly on the server
+ # LOCAL_CODE => "$ENV{HOME}/local",
+
+ # or you can use this, which lets you put everything in a subdirectory
+ # called "local" in your gitolite-admin repo. For a SECURITY WARNING
+ # on this, see http://gitolite.com/gitolite/non-core.html#using-the-gitolite-admin-repo-to-manage-non-core-code
+ # LOCAL_CODE => "$rc{GL_ADMIN_BASE}/local",
+
+ # ------------------------------------------------------------------
+
+ # List of commands and features to enable
+
+ ENABLE => [
+
+ # COMMANDS
+
+ # These are the commands enabled by default
+ 'help',
+ 'desc',
+ 'info',
+ 'perms',
+ 'writable',
+
+ # Uncomment or add new commands here.
+ # 'create',
+ # 'fork',
+ # 'mirror',
+ # 'readme',
+ # 'sskm',
+ # 'D',
+
+ # These FEATURES are enabled by default.
+
+ # essential (unless you're using smart-http mode)
+ 'ssh-authkeys',
+
+ # creates git-config entries from gitolite.conf file entries like 'config foo.bar = baz'
+ 'git-config',
+
+ # creates git-daemon-export-ok files; if you don't use git-daemon, comment this out
+ 'daemon',
+
+ # creates projects.list file; if you don't use gitweb, comment this out
+ 'gitweb',
+
+ # These FEATURES are disabled by default; uncomment to enable. If you
+ # need to add new ones, ask on the mailing list :-)
+
+ # user-visible behaviour
+
+ # prevent wild repos auto-create on fetch/clone
+ # 'no-create-on-read',
+ # no auto-create at all (don't forget to enable the 'create' command!)
+ # 'no-auto-create',
+
+ # access a repo by another (possibly legacy) name
+ # 'Alias',
+
+ # give some users direct shell access. See documentation in
+ # sts.html for details on the following two choices.
+ # "Shell $ENV{HOME}/.gitolite.shell-users",
+ # 'Shell alice bob',
+
+ # set default roles from lines like 'option default.roles-1 = ...', etc.
+ # 'set-default-roles',
+
+ # show more detailed messages on deny
+ # 'expand-deny-messages',
+
+ # show a message of the day
+ # 'Motd',
+
+ # system admin stuff
+
+ # enable mirroring (don't forget to set the HOSTNAME too!)
+ # 'Mirroring',
+
+ # allow people to submit pub files with more than one key in them
+ # 'ssh-authkeys-split',
+
+ # selective read control hack
+ # 'partial-copy',
+
+ # manage local, gitolite-controlled, copies of read-only upstream repos
+ # 'upstream',
+
+ # updates 'description' file instead of 'gitweb.description' config item
+ # 'cgit',
+
+ # allow repo-specific hooks to be added
+ # 'repo-specific-hooks',
+
+ # performance, logging, monitoring...
+
+ # be nice
+ # 'renice 10',
+
+ # log CPU times (user, system, cumulative user, cumulative system)
+ # 'CpuTime',
+
+ # syntactic_sugar for gitolite.conf and included files
+
+ # allow backslash-escaped continuation lines in gitolite.conf
+ # 'continuation-lines',
+
+ # create implicit user groups from directory names in keydir/
+ # 'keysubdirs-as-groups',
+
+ # allow simple line-oriented macros
+ # 'macros',
+
+ # Kindergarten mode
+
+ # disallow various things that sensible people shouldn't be doing anyway
+ # 'Kindergarten',
+ ],
+
+);
+
+# ------------------------------------------------------------------------------
+# per perl rules, this should be the last line in such a file:
+1;
+
+# Local variables:
+# mode: perl
+# End:
+# vim: set syn=perl: