2026-10-06 22:44:35 +02:00
|
|
|
package config
|
|
|
|
|
|
|
|
|
|
// The two faces of the program. Strings rather than a bool, because a bool named
|
|
|
|
|
// `NotesOnly` answers one question and this one will be asked again — and a
|
|
|
|
|
// third edition would mean changing every reading of it rather than adding a case.
|
|
|
|
|
const (
|
|
|
|
|
EditionFull = "full"
|
|
|
|
|
EditionNotes = "notes"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// NotesOnly is the one question the router asks. Written as a method so the
|
|
|
|
|
// comparison lives in one place: `cfg.Edition == "notes"` spelled out at twenty
|
|
|
|
|
// call sites is twenty chances to typo a string the compiler does not check.
|
|
|
|
|
func (c *Config) NotesOnly() bool { return c.Edition == EditionNotes }
|
2026-10-07 01:11:25 +02:00
|
|
|
|
|
|
|
|
// ProductName and ProductSlug are the two forms of the name the running instance
|
|
|
|
|
// calls itself: "Urd" in a sentence, "urd" in a window title, a wordmark and a
|
|
|
|
|
// manifest.
|
|
|
|
|
//
|
|
|
|
|
// Two editions of one program, two names — which is the whole reason the name is
|
|
|
|
|
// read from the configuration rather than written into the templates. Verdande is
|
|
|
|
|
// what is happening now; Urd, its sister in Völuspá, is what was cut into the wood
|
|
|
|
|
// and kept. An instance started without the task routes is a different product to
|
|
|
|
|
// whoever uses it, and a product that calls itself by its sibling's name is not a
|
|
|
|
|
// product, it is a flag somebody set.
|
|
|
|
|
//
|
|
|
|
|
// The lowercase form is deliberate and not a styling accident: the wordmark, the
|
|
|
|
|
// repository and the window title are all lowercase, so the slug is the name and
|
|
|
|
|
// ProductName is the one that gets a capital because it stands in prose.
|
|
|
|
|
func (c *Config) ProductName() string {
|
|
|
|
|
if c.NotesOnly() {
|
|
|
|
|
return "Urd"
|
|
|
|
|
}
|
|
|
|
|
return "Verdande"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ProductSlug is ProductName lowercased, kept as its own method rather than as
|
|
|
|
|
// strings.ToLower at the call sites: the two are the same transformation today and
|
|
|
|
|
// a name that does not lowercase cleanly would otherwise be a bug in every caller
|
|
|
|
|
// at once.
|
|
|
|
|
func (c *Config) ProductSlug() string {
|
|
|
|
|
if c.NotesOnly() {
|
|
|
|
|
return "urd"
|
|
|
|
|
}
|
|
|
|
|
return "verdande"
|
|
|
|
|
}
|