commit 3fb016894beeb7919d0f0ae72828e6df4d54bdc2 Author: vxclutch Date: Tue Jun 23 14:07:17 2026 -0400 Inital commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5bf4571 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +hjem diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ddc8851 --- /dev/null +++ b/Makefile @@ -0,0 +1,26 @@ +GO ?= go + +.PHONY: build lint install uninstall install-openrc uninstall-openrc + +all: build + +build: + $(GO) build -o hjem + +lint: + $(GO) vet ./... + $(GO) fmt ./... + +install: + cp hjem /usr/local/bin + +uninstall: + $(RM) /usr/local/bin/hjem + +install-openrc: + cp hjem.initd /etc/init.d/hjem + user="$${SUDO_USER:-$${DOAS_USER}}"; \ + echo "command_user=$$user" >> /etc/init.d/hjem + +uninstall-openrc: + $(RM) /etc/init.d/hjem diff --git a/README.md b/README.md new file mode 100644 index 0000000..70c466e --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Hjem + +Minimal homepage server. diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..133d806 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module hjem + +go 1.26.4 diff --git a/hjem b/hjem new file mode 100755 index 0000000..40821a5 Binary files /dev/null and b/hjem differ diff --git a/hjem.html b/hjem.html new file mode 100644 index 0000000..a4b8ef9 --- /dev/null +++ b/hjem.html @@ -0,0 +1,230 @@ + + + + + + newtab + + + + + +
+
+
+
{{.OS}}
+
{{.Email}}
+
+ + +
+ + + + + +
+ an idiot admires complexity, a genius admires simplicity. +
+
+ + + + diff --git a/hjem.initd b/hjem.initd new file mode 100755 index 0000000..3b7cf9f --- /dev/null +++ b/hjem.initd @@ -0,0 +1,12 @@ +#!/sbin/openrc-run + +name="Hjem" +description="Hjem homepage service" + +command="/usr/local/bin/hjem" +command_background="yes" +pidfile="/run/hjem.pid" + +depend() { + need net localmount +} diff --git a/main.go b/main.go new file mode 100644 index 0000000..07a689a --- /dev/null +++ b/main.go @@ -0,0 +1,86 @@ +package main + +import ( + "bufio" + _ "embed" + "flag" + "fmt" + "log" + "net/http" + "os" + "path/filepath" + "strings" + "text/template" +) + +//go:embed hjem.html +var hjemTemplate string + +var port = flag.Int("p", 1437, "set the port for hjem to use") + +type HjemData struct { + OS string + Email string +} + +func main() { + flag.Parse() + + t, err := template.New("hjem").Parse(hjemTemplate) + if err != nil { + panic(err) + } + + user_os := "Unknown" + + file, err := os.Open("/etc/os-release") + if err != nil { + panic(err) + } + defer file.Close() + + scanner := bufio.NewScanner(file) + if scanner.Scan() { + user_os = strings.TrimRight(strings.TrimLeft(scanner.Text(), "NAME='"), "'") + } + + user_email := "unknown@example.com" + + file, err = os.Open(filepath.Join(func() string { + hostname, err := os.UserHomeDir() + if err != nil { + panic(err) + } + return hostname + }(), ".gitconfig")) + if err != nil { + panic(err) + } + defer file.Close() + + scanner = bufio.NewScanner(file) + for scanner.Scan() { + text := scanner.Text() + if strings.Contains(text, "email = ") { + user_email = strings.TrimLeft(strings.TrimSpace(text), "email = ") + break + } + } + + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "text/html; charset=utf-8") + + err := t.ExecuteTemplate(w, "hjem", HjemData{ + OS: user_os, + Email: user_email, + }) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } + }) + + fmt.Printf("Web server is available at http://0.0.0.0:%d\n", *port) + fmt.Println("Press Ctrl+C to stop") + + log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", *port), nil)) +}