Configured the site a little
This commit is contained in:
parent
2411e64a53
commit
b465899f85
|
@ -1,9 +1,15 @@
|
||||||
package models
|
package models
|
||||||
|
|
||||||
|
import "io/fs"
|
||||||
|
|
||||||
type ThemeMeta struct {
|
type ThemeMeta struct {
|
||||||
ID string `json:"id"`
|
ID string
|
||||||
Name string `json:"name"`
|
Name string
|
||||||
URL string `json:"repo"`
|
|
||||||
|
// Source repo
|
||||||
|
URL string
|
||||||
|
OverlayFS fs.FS
|
||||||
|
Overlays map[string]string
|
||||||
|
|
||||||
// Indicates that this theme prefers posts have titles.
|
// Indicates that this theme prefers posts have titles.
|
||||||
PreferTitle bool
|
PreferTitle bool
|
||||||
|
@ -12,5 +18,5 @@ type ThemeMeta struct {
|
||||||
AddTitleToPages bool
|
AddTitleToPages bool
|
||||||
|
|
||||||
// Page bundle for "blog" posts
|
// Page bundle for "blog" posts
|
||||||
BlogPostBundle string `json:"post_dir"`
|
BlogPostBundle string
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,16 @@
|
||||||
package hugo
|
package hugo
|
||||||
|
|
||||||
|
type permalinksConfig struct {
|
||||||
|
Page map[string]string `yaml:"page"`
|
||||||
|
}
|
||||||
|
|
||||||
type hugoConfig struct {
|
type hugoConfig struct {
|
||||||
BaseURL string `yaml:"baseURL,omitempty"`
|
BaseURL string `yaml:"baseURL,omitempty"`
|
||||||
LanguageCode string `yaml:"languageCode"`
|
LanguageCode string `yaml:"languageCode"`
|
||||||
Title string `yaml:"title"`
|
Title string `yaml:"title"`
|
||||||
Theme string `yaml:"theme"`
|
Theme string `yaml:"theme"`
|
||||||
CanonifyURLs bool `yaml:"canonifyURLs,omitempty"`
|
CanonifyURLs bool `yaml:"canonifyURLs,omitempty"`
|
||||||
|
Permalinks permalinksConfig `yaml:"permalinks,omitempty"`
|
||||||
|
|
||||||
Markup hugoConfigMarkup `yaml:"markup"`
|
Markup hugoConfigMarkup `yaml:"markup"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,17 +97,25 @@ func (p *Provider) publishSiteAt(ctx context.Context, dir string, site models.Si
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
cmd.Stdout = os.Stdout
|
cmd.Stdout = os.Stdout
|
||||||
|
|
||||||
if err := cmd.Run(); err != nil {
|
if err := cmd.Start(); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
if err := cmd.Wait(); err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
return outDir, nil
|
return outDir, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Provider) ReconfigureSite(ctx context.Context, isPreviewConfig bool, configBase string, site models.Site) error {
|
func (p *Provider) ReconfigureSite(ctx context.Context, isPreviewConfig bool, configBase string, site models.Site, meta models.ThemeMeta) error {
|
||||||
hugoCfg := hugoConfig{
|
hugoCfg := hugoConfig{
|
||||||
Title: site.Title,
|
Title: site.Title,
|
||||||
LanguageCode: "en",
|
LanguageCode: "en",
|
||||||
Theme: site.Theme,
|
Theme: site.Theme,
|
||||||
|
Permalinks: permalinksConfig{
|
||||||
|
Page: map[string]string{
|
||||||
|
meta.BlogPostBundle: meta.BlogPostBundle + "/:year/:month/:day/:title",
|
||||||
|
},
|
||||||
|
},
|
||||||
Markup: hugoConfigMarkup{
|
Markup: hugoConfigMarkup{
|
||||||
Goldmark: hugoGoldmarkConfig{
|
Goldmark: hugoGoldmarkConfig{
|
||||||
Renderer: hugoGoldmarkRendererConfig{
|
Renderer: hugoGoldmarkRendererConfig{
|
||||||
|
|
|
@ -1,14 +1,23 @@
|
||||||
package themes
|
package themes
|
||||||
|
|
||||||
import "lmika.dev/lmika/hugo-cms/models"
|
import (
|
||||||
|
"lmika.dev/lmika/hugo-cms/models"
|
||||||
|
"lmika.dev/lmika/hugo-cms/providers/themes/overlays"
|
||||||
|
)
|
||||||
|
|
||||||
var themes = []models.ThemeMeta{
|
var themes = []models.ThemeMeta{
|
||||||
{
|
{
|
||||||
ID: "bear",
|
ID: "bear",
|
||||||
Name: "Bear",
|
Name: "Bear",
|
||||||
URL: "https://github.com/janraasch/hugo-bearblog",
|
URL: "https://github.com/janraasch/hugo-bearblog",
|
||||||
|
OverlayFS: overlays.HugoBearblogFS,
|
||||||
|
Overlays: map[string]string{
|
||||||
|
"hugo-bearblog/archetype-posts.md": "archetypes/posts.md",
|
||||||
|
"hugo-bearblog/index.html": "layouts/index.html",
|
||||||
|
"hugo-bearblog/partials-nav.html": "layouts/partials/nav.html",
|
||||||
|
},
|
||||||
PreferTitle: true,
|
PreferTitle: true,
|
||||||
BlogPostBundle: "blog",
|
BlogPostBundle: "posts",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ID: "terminal",
|
ID: "terminal",
|
||||||
|
|
6
providers/themes/overlays/fs.go
Normal file
6
providers/themes/overlays/fs.go
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
package overlays
|
||||||
|
|
||||||
|
import "embed"
|
||||||
|
|
||||||
|
//go:embed hugo-bearblog/*
|
||||||
|
var HugoBearblogFS embed.FS
|
13
providers/themes/overlays/hugo-bearblog/archetype-posts.md
Normal file
13
providers/themes/overlays/hugo-bearblog/archetype-posts.md
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
+++
|
||||||
|
title = "{{ replace .Name "-" " " | title }}"
|
||||||
|
date = "{{ .Date }}"
|
||||||
|
|
||||||
|
#
|
||||||
|
# description is optional
|
||||||
|
#
|
||||||
|
# description = "An optional description for SEO. If not provided, an automatically created summary will be used."
|
||||||
|
|
||||||
|
tags = [{{ range $plural, $terms := .Site.Taxonomies }}{{ range $term, $val := $terms }}"{{ printf "%s" $term }}",{{ end }}{{ end }}]
|
||||||
|
+++
|
||||||
|
|
||||||
|
This is a page about »{{ replace .Name "-" " " | title }}«.
|
24
providers/themes/overlays/hugo-bearblog/index.html
Normal file
24
providers/themes/overlays/hugo-bearblog/index.html
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{{ define "main" }}
|
||||||
|
{{ .Content }}
|
||||||
|
|
||||||
|
<h3>Recent Posts</h3>
|
||||||
|
|
||||||
|
<ul class="blog-posts">
|
||||||
|
{{ range site.RegularPages }}
|
||||||
|
<li>
|
||||||
|
<span>
|
||||||
|
<i>
|
||||||
|
<time datetime='{{ .Date.Format "2006-01-02" }}'>
|
||||||
|
{{ .Date.Format (default "02 Jan, 2006" .Site.Params.dateFormat) }}
|
||||||
|
</time>
|
||||||
|
</i>
|
||||||
|
</span>
|
||||||
|
<a href="{{ .Permalink }}">{{ .Title }}</a>
|
||||||
|
</li>
|
||||||
|
{{ else }}
|
||||||
|
<li>
|
||||||
|
No posts yet
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,7 @@
|
||||||
|
<a href="{{ "" | relURL }}">Home</a>
|
||||||
|
{{ range .Site.Menus.main }}
|
||||||
|
<a href="{{ .URL }}">{{ .Name }}</a>
|
||||||
|
{{ end }}
|
||||||
|
{{ with .Site.GetPage "/posts" }}
|
||||||
|
<a href="{{ "posts" | relURL }}">Posts</a>
|
||||||
|
{{ end }}
|
|
@ -3,6 +3,7 @@ package sitebuilder
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
"io/fs"
|
||||||
"lmika.dev/lmika/hugo-cms/models"
|
"lmika.dev/lmika/hugo-cms/models"
|
||||||
"lmika.dev/lmika/hugo-cms/providers/bus"
|
"lmika.dev/lmika/hugo-cms/providers/bus"
|
||||||
"lmika.dev/lmika/hugo-cms/providers/db"
|
"lmika.dev/lmika/hugo-cms/providers/db"
|
||||||
|
@ -168,15 +169,37 @@ func (s *Service) createSite(ctx context.Context, site models.Site) error {
|
||||||
|
|
||||||
// Setup the theme
|
// Setup the theme
|
||||||
log.Printf(" .. theme")
|
log.Printf(" .. theme")
|
||||||
if err := s.git.Clone(ctx, themeMeta.URL, s.hugo.SiteStagingDir(site, hugo.ThemeSiteDir)); err != nil {
|
stagingDir := s.hugo.SiteStagingDir(site, hugo.ThemeSiteDir)
|
||||||
|
if err := s.git.Clone(ctx, themeMeta.URL, stagingDir); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := s.hugo.ReconfigureSite(ctx, false, "hugo", site); err != nil {
|
if overlayFS := themeMeta.OverlayFS; overlayFS != nil && len(themeMeta.Overlays) > 0 {
|
||||||
|
for src, target := range themeMeta.Overlays {
|
||||||
|
srcFile, err := fs.ReadFile(overlayFS, src)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
targetPath := filepath.Join(s.hugo.SiteStagingDir(site, hugo.BaseSiteDir), target)
|
||||||
|
targetDir := filepath.Dir(targetPath)
|
||||||
|
if err := os.MkdirAll(targetDir, 0755); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := os.WriteFile(targetPath, srcFile, 0644); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf(" .. overlay %v", targetPath)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := s.hugo.ReconfigureSite(ctx, false, "hugo", site, themeMeta); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := s.hugo.ReconfigureSite(ctx, true, "hugoPreview", site); err != nil {
|
if err := s.hugo.ReconfigureSite(ctx, true, "hugoPreview", site, themeMeta); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
<h1>Hugo CMS</h1>
|
<h1>Hugo CMS</h1>
|
||||||
<nav>
|
<nav>
|
||||||
<span>{{.site.Title}}</span>
|
<span>{{.site.Title}}</span>
|
||||||
<a href="/preview/{{.site.Name}}" target="_blank">Preview</a>
|
<a href="/preview/{{.site.Name}}/" target="_blank">Preview</a>
|
||||||
{{ if .prodTarget }}
|
{{ if .prodTarget }}
|
||||||
<a href="{{.prodTarget.URL}}" target="_blank">Visit</a>
|
<a href="{{.prodTarget.URL}}" target="_blank">Visit</a>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
Loading…
Reference in a new issue