1
0
mirror of https://github.com/osmarks/mycorrhiza.git synced 2025-01-05 17:40:26 +00:00

Add -print-example-config

This commit is contained in:
bouncepaw 2021-03-09 19:27:14 +05:00
parent d2792ff83d
commit e35643bb9d
7 changed files with 262 additions and 156 deletions

View File

@ -1,12 +1,6 @@
run: build
./mycorrhiza metarrhiza
auth_run: build
./mycorrhiza -auth-method fixed metarrhiza
gemini_run: build
./mycorrhiza -gemini-cert-path "." metarrhiza
config_run: build
./mycorrhiza -config-path "assets/config.ini" metarrhiza

View File

@ -1,3 +1,11 @@
{%- func HelpMessage() -%}
Usage of %s:
{%- endfunc -%}
{%- func ExampleConfig() -%}
{% cat "config.ini" %}
{%- endfunc -%}
{% func DefaultCSS() %}
{% cat "default.css" %}
{% endfunc %}

View File

@ -18,11 +18,97 @@ var (
)
//line assets/assets.qtpl:1
func StreamDefaultCSS(qw422016 *qt422016.Writer) {
func StreamHelpMessage(qw422016 *qt422016.Writer) {
//line assets/assets.qtpl:1
qw422016.N().S(`Usage of %s:
`)
//line assets/assets.qtpl:3
}
//line assets/assets.qtpl:3
func WriteHelpMessage(qq422016 qtio422016.Writer) {
//line assets/assets.qtpl:3
qw422016 := qt422016.AcquireWriter(qq422016)
//line assets/assets.qtpl:3
StreamHelpMessage(qw422016)
//line assets/assets.qtpl:3
qt422016.ReleaseWriter(qw422016)
//line assets/assets.qtpl:3
}
//line assets/assets.qtpl:3
func HelpMessage() string {
//line assets/assets.qtpl:3
qb422016 := qt422016.AcquireByteBuffer()
//line assets/assets.qtpl:3
WriteHelpMessage(qb422016)
//line assets/assets.qtpl:3
qs422016 := string(qb422016.B)
//line assets/assets.qtpl:3
qt422016.ReleaseByteBuffer(qb422016)
//line assets/assets.qtpl:3
return qs422016
//line assets/assets.qtpl:3
}
//line assets/assets.qtpl:5
func StreamExampleConfig(qw422016 *qt422016.Writer) {
//line assets/assets.qtpl:6
qw422016.N().S(`WikiName = My wiki
NaviTitleIcon = 🐑
[Hyphae]
HomeHypha = home
UserHypha = u
HeaderLinksHypha = header-links
[Network]
HTTPPort = 8080
URL = https://wiki
GeminiCertificatePath = /home/wiki/gemcerts
[Authorization]
UseFixedAuth = true
FixedAuthCredentialsPath = /home/wiki/mycocredentials.json
`)
//line assets/assets.qtpl:6
qw422016.N().S(`
`)
//line assets/assets.qtpl:2
//line assets/assets.qtpl:7
}
//line assets/assets.qtpl:7
func WriteExampleConfig(qq422016 qtio422016.Writer) {
//line assets/assets.qtpl:7
qw422016 := qt422016.AcquireWriter(qq422016)
//line assets/assets.qtpl:7
StreamExampleConfig(qw422016)
//line assets/assets.qtpl:7
qt422016.ReleaseWriter(qw422016)
//line assets/assets.qtpl:7
}
//line assets/assets.qtpl:7
func ExampleConfig() string {
//line assets/assets.qtpl:7
qb422016 := qt422016.AcquireByteBuffer()
//line assets/assets.qtpl:7
WriteExampleConfig(qb422016)
//line assets/assets.qtpl:7
qs422016 := string(qb422016.B)
//line assets/assets.qtpl:7
qt422016.ReleaseByteBuffer(qb422016)
//line assets/assets.qtpl:7
return qs422016
//line assets/assets.qtpl:7
}
//line assets/assets.qtpl:9
func StreamDefaultCSS(qw422016 *qt422016.Writer) {
//line assets/assets.qtpl:9
qw422016.N().S(`
`)
//line assets/assets.qtpl:10
qw422016.N().S(`.amnt-grid { display: grid; grid-template-columns: 1fr 1fr; }
.upload-binary__input { display: block; margin: .25rem 0; }
@ -298,168 +384,168 @@ mark { background: rgba(130, 80, 30, 5); color: inherit; }
.backlinks { display: none; }
`)
//line assets/assets.qtpl:2
//line assets/assets.qtpl:10
qw422016.N().S(`
`)
//line assets/assets.qtpl:3
//line assets/assets.qtpl:11
}
//line assets/assets.qtpl:3
//line assets/assets.qtpl:11
func WriteDefaultCSS(qq422016 qtio422016.Writer) {
//line assets/assets.qtpl:3
//line assets/assets.qtpl:11
qw422016 := qt422016.AcquireWriter(qq422016)
//line assets/assets.qtpl:3
//line assets/assets.qtpl:11
StreamDefaultCSS(qw422016)
//line assets/assets.qtpl:3
//line assets/assets.qtpl:11
qt422016.ReleaseWriter(qw422016)
//line assets/assets.qtpl:3
//line assets/assets.qtpl:11
}
//line assets/assets.qtpl:3
//line assets/assets.qtpl:11
func DefaultCSS() string {
//line assets/assets.qtpl:3
//line assets/assets.qtpl:11
qb422016 := qt422016.AcquireByteBuffer()
//line assets/assets.qtpl:3
//line assets/assets.qtpl:11
WriteDefaultCSS(qb422016)
//line assets/assets.qtpl:3
//line assets/assets.qtpl:11
qs422016 := string(qb422016.B)
//line assets/assets.qtpl:3
//line assets/assets.qtpl:11
qt422016.ReleaseByteBuffer(qb422016)
//line assets/assets.qtpl:3
//line assets/assets.qtpl:11
return qs422016
//line assets/assets.qtpl:3
//line assets/assets.qtpl:11
}
// Next three are from https://remixicon.com/
//line assets/assets.qtpl:6
//line assets/assets.qtpl:14
func StreamIconHTTP(qw422016 *qt422016.Writer) {
//line assets/assets.qtpl:6
//line assets/assets.qtpl:14
qw422016.N().S(`
`)
//line assets/assets.qtpl:7
//line assets/assets.qtpl:15
qw422016.N().S(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16"><path fill="#999" d="M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-2.29-2.333A17.9 17.9 0 0 1 8.027 13H4.062a8.008 8.008 0 0 0 5.648 6.667zM10.03 13c.151 2.439.848 4.73 1.97 6.752A15.905 15.905 0 0 0 13.97 13h-3.94zm9.908 0h-3.965a17.9 17.9 0 0 1-1.683 6.667A8.008 8.008 0 0 0 19.938 13zM4.062 11h3.965A17.9 17.9 0 0 1 9.71 4.333 8.008 8.008 0 0 0 4.062 11zm5.969 0h3.938A15.905 15.905 0 0 0 12 4.248 15.905 15.905 0 0 0 10.03 11zm4.259-6.667A17.9 17.9 0 0 1 15.973 11h3.965a8.008 8.008 0 0 0-5.648-6.667z"/></svg>
`)
//line assets/assets.qtpl:7
//line assets/assets.qtpl:15
qw422016.N().S(`
`)
//line assets/assets.qtpl:8
//line assets/assets.qtpl:16
}
//line assets/assets.qtpl:8
//line assets/assets.qtpl:16
func WriteIconHTTP(qq422016 qtio422016.Writer) {
//line assets/assets.qtpl:8
//line assets/assets.qtpl:16
qw422016 := qt422016.AcquireWriter(qq422016)
//line assets/assets.qtpl:8
//line assets/assets.qtpl:16
StreamIconHTTP(qw422016)
//line assets/assets.qtpl:8
//line assets/assets.qtpl:16
qt422016.ReleaseWriter(qw422016)
//line assets/assets.qtpl:8
//line assets/assets.qtpl:16
}
//line assets/assets.qtpl:8
//line assets/assets.qtpl:16
func IconHTTP() string {
//line assets/assets.qtpl:8
//line assets/assets.qtpl:16
qb422016 := qt422016.AcquireByteBuffer()
//line assets/assets.qtpl:8
//line assets/assets.qtpl:16
WriteIconHTTP(qb422016)
//line assets/assets.qtpl:8
//line assets/assets.qtpl:16
qs422016 := string(qb422016.B)
//line assets/assets.qtpl:8
//line assets/assets.qtpl:16
qt422016.ReleaseByteBuffer(qb422016)
//line assets/assets.qtpl:8
//line assets/assets.qtpl:16
return qs422016
//line assets/assets.qtpl:8
//line assets/assets.qtpl:16
}
//line assets/assets.qtpl:10
//line assets/assets.qtpl:18
func StreamIconGemini(qw422016 *qt422016.Writer) {
//line assets/assets.qtpl:10
//line assets/assets.qtpl:18
qw422016.N().S(`
`)
//line assets/assets.qtpl:11
//line assets/assets.qtpl:19
qw422016.N().S(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16"><path fill="#999" d="M15.502 20A6.523 6.523 0 0 1 12 23.502 6.523 6.523 0 0 1 8.498 20h2.26c.326.489.747.912 1.242 1.243.495-.33.916-.754 1.243-1.243h2.259zM18 14.805l2 2.268V19H4v-1.927l2-2.268V9c0-3.483 2.504-6.447 6-7.545C15.496 2.553 18 5.517 18 9v5.805zM17.27 17L16 15.56V9c0-2.318-1.57-4.43-4-5.42C9.57 4.57 8 6.681 8 9v6.56L6.73 17h10.54zM12 11a2 2 0 1 1 0-4 2 2 0 0 1 0 4z"/></svg>
`)
//line assets/assets.qtpl:11
qw422016.N().S(`
`)
//line assets/assets.qtpl:12
}
//line assets/assets.qtpl:12
func WriteIconGemini(qq422016 qtio422016.Writer) {
//line assets/assets.qtpl:12
qw422016 := qt422016.AcquireWriter(qq422016)
//line assets/assets.qtpl:12
StreamIconGemini(qw422016)
//line assets/assets.qtpl:12
qt422016.ReleaseWriter(qw422016)
//line assets/assets.qtpl:12
}
//line assets/assets.qtpl:12
func IconGemini() string {
//line assets/assets.qtpl:12
qb422016 := qt422016.AcquireByteBuffer()
//line assets/assets.qtpl:12
WriteIconGemini(qb422016)
//line assets/assets.qtpl:12
qs422016 := string(qb422016.B)
//line assets/assets.qtpl:12
qt422016.ReleaseByteBuffer(qb422016)
//line assets/assets.qtpl:12
return qs422016
//line assets/assets.qtpl:12
}
//line assets/assets.qtpl:14
func StreamIconMailto(qw422016 *qt422016.Writer) {
//line assets/assets.qtpl:14
qw422016.N().S(`
`)
//line assets/assets.qtpl:15
qw422016.N().S(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16"><path fill="#999" d="M3 3h18a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm17 4.238l-7.928 7.1L4 7.216V19h16V7.238zM4.511 5l7.55 6.662L19.502 5H4.511z"/></svg>
`)
//line assets/assets.qtpl:15
qw422016.N().S(`
`)
//line assets/assets.qtpl:16
}
//line assets/assets.qtpl:16
func WriteIconMailto(qq422016 qtio422016.Writer) {
//line assets/assets.qtpl:16
qw422016 := qt422016.AcquireWriter(qq422016)
//line assets/assets.qtpl:16
StreamIconMailto(qw422016)
//line assets/assets.qtpl:16
qt422016.ReleaseWriter(qw422016)
//line assets/assets.qtpl:16
}
//line assets/assets.qtpl:16
func IconMailto() string {
//line assets/assets.qtpl:16
qb422016 := qt422016.AcquireByteBuffer()
//line assets/assets.qtpl:16
WriteIconMailto(qb422016)
//line assets/assets.qtpl:16
qs422016 := string(qb422016.B)
//line assets/assets.qtpl:16
qt422016.ReleaseByteBuffer(qb422016)
//line assets/assets.qtpl:16
return qs422016
//line assets/assets.qtpl:16
}
// This is a modified version of https://www.svgrepo.com/svg/232085/rat
//line assets/assets.qtpl:19
func StreamIconGopher(qw422016 *qt422016.Writer) {
//line assets/assets.qtpl:19
qw422016.N().S(`
`)
//line assets/assets.qtpl:20
}
//line assets/assets.qtpl:20
func WriteIconGemini(qq422016 qtio422016.Writer) {
//line assets/assets.qtpl:20
qw422016 := qt422016.AcquireWriter(qq422016)
//line assets/assets.qtpl:20
StreamIconGemini(qw422016)
//line assets/assets.qtpl:20
qt422016.ReleaseWriter(qw422016)
//line assets/assets.qtpl:20
}
//line assets/assets.qtpl:20
func IconGemini() string {
//line assets/assets.qtpl:20
qb422016 := qt422016.AcquireByteBuffer()
//line assets/assets.qtpl:20
WriteIconGemini(qb422016)
//line assets/assets.qtpl:20
qs422016 := string(qb422016.B)
//line assets/assets.qtpl:20
qt422016.ReleaseByteBuffer(qb422016)
//line assets/assets.qtpl:20
return qs422016
//line assets/assets.qtpl:20
}
//line assets/assets.qtpl:22
func StreamIconMailto(qw422016 *qt422016.Writer) {
//line assets/assets.qtpl:22
qw422016.N().S(`
`)
//line assets/assets.qtpl:23
qw422016.N().S(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16"><path fill="#999" d="M3 3h18a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm17 4.238l-7.928 7.1L4 7.216V19h16V7.238zM4.511 5l7.55 6.662L19.502 5H4.511z"/></svg>
`)
//line assets/assets.qtpl:23
qw422016.N().S(`
`)
//line assets/assets.qtpl:24
}
//line assets/assets.qtpl:24
func WriteIconMailto(qq422016 qtio422016.Writer) {
//line assets/assets.qtpl:24
qw422016 := qt422016.AcquireWriter(qq422016)
//line assets/assets.qtpl:24
StreamIconMailto(qw422016)
//line assets/assets.qtpl:24
qt422016.ReleaseWriter(qw422016)
//line assets/assets.qtpl:24
}
//line assets/assets.qtpl:24
func IconMailto() string {
//line assets/assets.qtpl:24
qb422016 := qt422016.AcquireByteBuffer()
//line assets/assets.qtpl:24
WriteIconMailto(qb422016)
//line assets/assets.qtpl:24
qs422016 := string(qb422016.B)
//line assets/assets.qtpl:24
qt422016.ReleaseByteBuffer(qb422016)
//line assets/assets.qtpl:24
return qs422016
//line assets/assets.qtpl:24
}
// This is a modified version of https://www.svgrepo.com/svg/232085/rat
//line assets/assets.qtpl:27
func StreamIconGopher(qw422016 *qt422016.Writer) {
//line assets/assets.qtpl:27
qw422016.N().S(`
`)
//line assets/assets.qtpl:28
qw422016.N().S(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="16" height="16">
<path fill="#999" d="M447.238,204.944v-70.459c0-8.836-7.164-16-16-16c-34.051,0-64.414,21.118-75.079,55.286
C226.094,41.594,0,133.882,0,319.435c0,0.071,0.01,0.14,0.011,0.21c0.116,44.591,36.423,80.833,81.04,80.833h171.203
@ -472,34 +558,34 @@ c55.425-8.382,107.014,29.269,115.759,84.394H295.484z"/>
<circle fill="#999" cx="415.238" cy="260.05" r="21.166"/>
</svg>
`)
//line assets/assets.qtpl:20
//line assets/assets.qtpl:28
qw422016.N().S(`
`)
//line assets/assets.qtpl:21
//line assets/assets.qtpl:29
}
//line assets/assets.qtpl:21
//line assets/assets.qtpl:29
func WriteIconGopher(qq422016 qtio422016.Writer) {
//line assets/assets.qtpl:21
//line assets/assets.qtpl:29
qw422016 := qt422016.AcquireWriter(qq422016)
//line assets/assets.qtpl:21
//line assets/assets.qtpl:29
StreamIconGopher(qw422016)
//line assets/assets.qtpl:21
//line assets/assets.qtpl:29
qt422016.ReleaseWriter(qw422016)
//line assets/assets.qtpl:21
//line assets/assets.qtpl:29
}
//line assets/assets.qtpl:21
//line assets/assets.qtpl:29
func IconGopher() string {
//line assets/assets.qtpl:21
//line assets/assets.qtpl:29
qb422016 := qt422016.AcquireByteBuffer()
//line assets/assets.qtpl:21
//line assets/assets.qtpl:29
WriteIconGopher(qb422016)
//line assets/assets.qtpl:21
//line assets/assets.qtpl:29
qs422016 := string(qb422016.B)
//line assets/assets.qtpl:21
//line assets/assets.qtpl:29
qt422016.ReleaseByteBuffer(qb422016)
//line assets/assets.qtpl:21
//line assets/assets.qtpl:29
return qs422016
//line assets/assets.qtpl:21
//line assets/assets.qtpl:29
}

24
flag.go
View File

@ -2,13 +2,18 @@ package main
import (
"flag"
"fmt"
"log"
"os"
"path/filepath"
"github.com/bouncepaw/mycorrhiza/assets"
"github.com/bouncepaw/mycorrhiza/user"
"github.com/bouncepaw/mycorrhiza/util"
)
var printExampleConfig bool
func init() {
// flag.StringVar(&util.URL, "url", "http://0.0.0.0:$port", "URL at which your wiki can be found. Used to generate feeds and social media previews")
// flag.StringVar(&util.ServerPort, "port", "1737", "Port to serve the wiki at using HTTP")
@ -21,6 +26,15 @@ func init() {
// flag.StringVar(&util.HeaderLinksHypha, "header-links-hypha", "", "Optional hypha that overrides the header links")
// flag.StringVar(&util.GeminiCertPath, "gemini-cert-path", "", "Directory where you store Gemini certificates. Leave empty if you don't want to use Gemini.")
flag.StringVar(&util.ConfigFilePath, "config-path", "", "Path to a configuration file. Leave empty if you don't want to use it.")
flag.BoolVar(&printExampleConfig, "print-example-config", false, "If true, print an example configuration file contents and exit. You can save the output to a file and base your own configuration on it.")
flag.Usage = func() {
fmt.Fprintf(
flag.CommandLine.Output(),
assets.HelpMessage(),
os.Args[0],
)
flag.PrintDefaults()
}
}
// Do the things related to cli args and die maybe
@ -28,13 +42,17 @@ func parseCliArgs() {
flag.Parse()
args := flag.Args()
if printExampleConfig {
fmt.Printf(assets.ExampleConfig())
os.Exit(0)
}
if len(args) == 0 {
log.Fatal("Error: pass a wiki directory")
}
if util.ConfigFilePath != "" {
util.ReadConfigFile(util.ConfigFilePath)
}
// It is ok if the path is ""
util.ReadConfigFile(util.ConfigFilePath)
var err error
WikiDir, err = filepath.Abs(args[0])

View File

@ -13,11 +13,22 @@ import (
"github.com/bouncepaw/mycorrhiza/util"
)
// Path to git executable. Set at init()
var gitpath string
var renameMsgPattern = regexp.MustCompile(`^Rename (.*) to .*`)
// Start initializes git credentials.
// Start finds git and initializes git credentials.
func Start(wikiDir string) {
_, err := gitsh("config", "user.name", "wikimind")
path, err := exec.LookPath("git")
if err != nil {
log.Fatal("Cound not find the git executable. Check your $PATH.")
} else {
log.Println("Git path is", path)
}
gitpath = path
_, err = gitsh("config", "user.name", "wikimind")
if err != nil {
log.Fatal(err)
}
@ -110,20 +121,6 @@ func (rev *Revision) bestLink() string {
}
}
// Path to git executable. Set at init()
var gitpath string
func init() {
path, err := exec.LookPath("git")
if err != nil {
log.Fatal("Cound not find the git executable. Check your $PATH.")
} else {
log.Println("Git path is", path)
}
gitpath = path
}
// I pronounce it as [gɪt͡ʃ].
// gitsh is async-safe, therefore all other git-related functions in this module are too.
func gitsh(args ...string) (out bytes.Buffer, err error) {

View File

@ -168,8 +168,8 @@ Crawl-delay: 5`))
}
func main() {
log.Println("Running MycorrhizaWiki β")
parseCliArgs()
log.Println("Running MycorrhizaWiki β")
if err := os.Chdir(WikiDir); err != nil {
log.Fatal(err)
}

View File

@ -33,7 +33,6 @@ type Authorization struct {
}
func ReadConfigFile(path string) {
log.Println("Loading config at", path)
cfg := &Config{
WikiName: "MycorrhizaWiki",
NaviTitleIcon: "🍄",
@ -52,9 +51,13 @@ func ReadConfigFile(path string) {
FixedAuthCredentialsPath: "",
},
}
err := ini.MapTo(cfg, path)
if err != nil {
log.Fatal(err)
if path != "" {
log.Println("Loading config at", path)
err := ini.MapTo(cfg, path)
if err != nil {
log.Fatal(err)
}
}
SiteName = cfg.WikiName