shroomgit

generate static pages of git repos
git clone https://git.davidvoz.net/shroomgit.git
index
logs
tree
license

commit e0ceffd03dd12b38259bc35c0a1d6f3293f6595a
Author: David Voznyarskiy <davidv@no-reply@disroot.org>
Date:   Tue Mar 24 22:25:43 2026 -0700

    created basic code for shgit-ing a repo at a time
    
    Signed-off-by: David Voznyarskiy <davidv@no-reply@disroot.org>

diff --git a/Makefile b/Makefile
index 797742c..f81cb3c 100644
--- a/Makefile
+++ b/Makefile
@@ -8,7 +8,7 @@ shindex: shgit: @mkdir -p bin
- go build -o bin/shgit shgit/shgit.go
+ go build -o bin/shgit ./shgit
clean: rm -rf bin diff --git a/shgit/shgit.go b/shgit/shgit.go index 4ce50c1..8dd6fa4 100644
--- a/shgit/shgit.go
+++ b/shgit/shgit.go
@@ -3,6 +3,9 @@ package main import "fmt" func main() {
- fmt.Println("shgit here")
- fmt.Println("work in progress")
+ summaryPage()
+}
+
+func summaryPage() {
+ fmt.Println(topPart)
} diff --git a/shgit/top_part.go b/shgit/top_part.go new file mode 100644 index 0000000..f8d4a0f
--- /dev/null
+++ b/shgit/top_part.go
@@ -0,0 +1,111 @@
+package main
+
+import (
+ "strconv"
+ "strings"
+
+ "shroomgit/config"
+)
+
+// the common HTML lines that all files will share
+var topPart = func() string {
+ var b strings.Builder
+
+ b.WriteString("<!DOCTYPE html>\n")
+ b.WriteString("<html>\n")
+ b.WriteString("<head>\n")
+ b.WriteString("<link rel=\"stylesheet\" href=\"style.css\" \\>\n")
+ b.WriteString("<link rel=\"icon\" type=\"image/png\" href=\"")
+ b.WriteString(config.Shgit.Favicon)
+ b.WriteString("\" \\>\n")
+
+ b.WriteString("</head>\n")
+
+ b.WriteString("<body>\n")
+
+ b.WriteString("<table>")
+ b.WriteString("<tr>")
+
+ b.WriteString("<td>")
+ b.WriteString("<a href=\"")
+ b.WriteString(config.Shgit.LogoHref)
+ b.WriteString("\">")
+ b.WriteString("<img src=\"")
+ b.WriteString(config.Shgit.Logo)
+ b.WriteString("\" width=")
+ b.WriteString(strconv.Itoa(config.Shgit.LogoWidth))
+ b.WriteString(" height=")
+ b.WriteString(strconv.Itoa(config.Shgit.LogoHeight))
+ b.WriteString("/>")
+ b.WriteString("</a>")
+ b.WriteString("</td>")
+
+ b.WriteString("<td><h2 style=\"margin-left:10px\">")
+ b.WriteString("ffr")
+ b.WriteString("</h2>")
+
+ b.WriteString("</td>")
+
+ b.WriteString("</tr>")
+ b.WriteString("</table>")
+ b.WriteString("<table>")
+ b.WriteString("<tr>")
+ b.WriteString("for future reference")
+ b.WriteString("<hr>")
+
+ b.WriteString("<td><code style=\"background-color: #222; color: white; padding: 4px; user-select: all; border: none;\">")
+ b.WriteString("git clone https://git.davidvoz.net/ffr.git")
+ b.WriteString("</code></td>")
+
+ b.WriteString("</tr>")
+ b.WriteString("</table>")
+
+ b.WriteString("\n<div style=\"display:flex; flex-wrap:wrap; gap:25px;margin-top:3px;\">\n")
+
+ b.WriteString("\n<div style=\"display:flex;padding-left:20px;\">\n")
+ b.WriteString("<a>")
+ b.WriteString("summary\n")
+ b.WriteString("</a>")
+ b.WriteString("</div>\n")
+
+ b.WriteString("\n<div style=\"display:flex;\">\n")
+ b.WriteString("│\n")
+ b.WriteString("</div>\n")
+
+ b.WriteString("\n<div style=\"display:flex;\">\n")
+ b.WriteString("<a>")
+ b.WriteString("logs\n")
+ b.WriteString("</a>")
+ b.WriteString("</div>\n")
+
+ b.WriteString("\n<div style=\"display:flex;\">\n")
+ b.WriteString("│\n")
+ b.WriteString("</div>\n")
+
+ b.WriteString("\n<div style=\"display:flex;\">\n")
+ b.WriteString("<a>")
+ b.WriteString("tree\n")
+ b.WriteString("</a>")
+ b.WriteString("</div>\n")
+
+ b.WriteString("\n<div style=\"display:flex;\">\n")
+ b.WriteString("│\n")
+ b.WriteString("</div>\n")
+
+ // TODO if license exists {
+ if 1+1 == 2 {
+ b.WriteString("\n<div style=\"display:flex;\">\n")
+ b.WriteString("<a>")
+ b.WriteString("license\n")
+ b.WriteString("</a>")
+ b.WriteString("</div>\n")
+
+ }
+
+ b.WriteString("\n</div>\n")
+
+ b.WriteString("<hr>")
+ b.WriteString("</body>")
+
+ return b.String()
+}()