char/sorcery
static-files based git repo viewer
git clone https://git.t4t.associates/char/sorcery
768100d
main
languages
- Rust 56.7%
- TypeScript 30.1%
- CSS 5.5%
- Zig 3.8%
- JSON 1.8%
- Nix 0.9%
- Markdown 0.8%
- TOML 0.3%
files
| assets/fonts/ | |
| extra/sorcery-ssh/ | |
| nix/ | |
| src/ | |
| web/ | |
| .gitignore | 140 B |
| Cargo.lock | 81.1 KiB |
| Cargo.toml | 988 B |
| README.md | 3.0 KiB |
| flake.lock | 569 B |
| flake.nix | 3.5 KiB |
| sorcery.ngx.ts | 2.0 KiB |
sorcery
tiny read-only git repo viewer
- point at a dir containing
user/repobare git repos - generates static sites for every repo
- serves via nginx (or other proxy supporting the
X-Accelheaders) - progressively enhances via js to provide dynamic content (commit diffs, tree-at-revision, etc)
- syntax highlighting via arborium (both serverside and clientside)
- supports "git smart HTTP" for read-only clones
pairs well with ssh git for read-write access
usage
compiles to a static executable (linux musl) on the default package in the flake:
nix build
install it as /usr/local/bin/sorceryd or whatever
nginx
production nginx config generated via @char/ngx:
deno run sorcery.ngx.ts> sorcery.conf
systemd
Example /etc/systemd/system/sorceryd.service:
[ Unit ] Description = Sorcery Git forgeAfter = network.target[ Service ] Type = simpleUser = gitGroup = gitRuntimeDirectory = sorceryCacheDirectory = sorceryConfigurationDirectory = sorceryEnvironmentFile = /etc/sorcery/envExecStart = /usr/local/bin/sorcerydRestart = on-failureRestartSec = 2UMask = 0027NoNewPrivileges = truePrivateTmp = trueProtectSystem = strictProtectHome = read-only[ Install ] WantedBy = multi-user.target
With /etc/sorcery/env:
SORCERY_REPOSITORIES =/home/git/publicSORCERY_CACHE =/var/cache/sorcerySORCERY_SOCKET =/run/sorcery/sockSORCERY_INSTANCE_NAME =my-cool-git.exampleSORCERY_CLONE_URL_BASE =https://my-cool-git.exampleSORCERY_CONTROL_SOCKET =/run/sorcery/control
Command-line flags remain available and override the corresponding environment variables.
ssh
sorcery-ssh is an sshd ForceCommand that provides read-write git access.
it auto-creates bare repositories on first push (like sourcehut)
and also provides commands + an optional interactive tui for editing the description of a repo.
nix build .#sorcery-sshnix build .#sorcery-ssh-tui# optional
install sorcery-ssh (and sorcery-ssh-tui) and add the following to sshd_config:
Match User git SetEnv SORCERY_CONTROL_SOCKET=/run/sorcery/control SORCERY_INSTANCE_NAME=my-cool-git.example SORCERY_SSH_TUI=/usr/local/bin/sorcery-ssh-tui SORCERY_REPOSITORIES=/home/git/public SORCERY_CLONE_URL_BASE=https://my-cool-git.example ForceCommand /usr/local/bin/sorcery-ssh
optional: push refresh
since this is a static-files-based viewer, repositories need updating when their state changes.
sorceryd's scanner will pick up changes every SORCERY_CHECK_INTERVAL and auto-rebuild repo sites.
additionally, if you want refresh to happen as soon as possible you can use sorcery-ssh or set a post-receive hook like this:
#!/usr/bin/env sh printf '%s\n' " $ PWD " | nc -U /run/sorcery/control
in any case, sorceryd's scanner will pick changes up eventually, so this is optional
development
cd web&& deno task check&& deno task test&& deno task buildcd ..&& cargo test
since we embed the frontend inside the executable, you must generate the frontend bundle before running a cargo build.