From 8dd30f6eb8dfb6df7a6129306053fcce272378b1 Mon Sep 17 00:00:00 2001 From: Gregory Trolliet Date: Tue, 26 Oct 2021 11:34:30 +0200 Subject: [PATCH] First version of the theme --- CHANGELOG.md | 11 + LICENSE | 20 + README.md | 104 +++ archetypes/default.md | 10 + data/snotra/mois.yaml | 12 + i18n/fr.toml | 51 ++ layouts/404.html | 20 + layouts/_default/_markup/render-heading.html | 7 + layouts/_default/baseof.html | 12 + layouts/_default/li.html | 6 + layouts/_default/list.html | 28 + layouts/_default/rss.xml | 26 + layouts/_default/single.html | 16 + layouts/archives/li.html | 5 + layouts/archives/list.html | 24 + layouts/archives/single.html | 63 ++ layouts/index.html | 21 + layouts/partials/article-footer.html | 24 + layouts/partials/author.html | 9 + layouts/partials/categories.html | 13 + layouts/partials/footer.html | 5 + layouts/partials/head.html | 0 layouts/partials/header.html | 46 + layouts/partials/navigation.html | 22 + layouts/partials/opengraph.html | 38 + layouts/partials/pagination.html | 51 ++ layouts/partials/social.html | 11 + layouts/partials/tags.html | 11 + layouts/shortcodes/img.html | 42 + layouts/shortcodes/quote.html | 18 + layouts/shortcodes/table_of_contents.html | 3 + layouts/shortcodes/tabular.html | 8 + static/css/style.css | 876 +++++++++++++++++++ static/svg/500px.svg | 1 + static/svg/bars.svg | 3 + static/svg/calendar.svg | 1 + static/svg/clock.svg | 1 + static/svg/codepen.svg | 1 + static/svg/envelope.svg | 1 + static/svg/facebook.svg | 1 + static/svg/file-text.svg | 1 + static/svg/flickr.svg | 1 + static/svg/folder.svg | 1 + static/svg/gitea.svg | 1 + static/svg/github.svg | 1 + static/svg/gitlab.svg | 1 + static/svg/instagram.svg | 1 + static/svg/key-modern.svg | 1 + static/svg/linkedin.svg | 1 + static/svg/mastodon.svg | 1 + static/svg/peertube.svg | 1 + static/svg/phone.svg | 1 + static/svg/pinterest.svg | 1 + static/svg/pixelfed.svg | 1 + static/svg/rss.svg | 1 + static/svg/tag.svg | 1 + static/svg/threema.svg | 1 + static/svg/tumblr.svg | 1 + static/svg/twitter.svg | 1 + static/svg/youtube.svg | 1 + theme.toml | 16 + 61 files changed, 1658 insertions(+) create mode 100644 CHANGELOG.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 archetypes/default.md create mode 100644 data/snotra/mois.yaml create mode 100644 i18n/fr.toml create mode 100644 layouts/404.html create mode 100644 layouts/_default/_markup/render-heading.html create mode 100644 layouts/_default/baseof.html create mode 100644 layouts/_default/li.html create mode 100644 layouts/_default/list.html create mode 100644 layouts/_default/rss.xml create mode 100644 layouts/_default/single.html create mode 100644 layouts/archives/li.html create mode 100644 layouts/archives/list.html create mode 100644 layouts/archives/single.html create mode 100644 layouts/index.html create mode 100644 layouts/partials/article-footer.html create mode 100644 layouts/partials/author.html create mode 100644 layouts/partials/categories.html create mode 100644 layouts/partials/footer.html create mode 100644 layouts/partials/head.html create mode 100644 layouts/partials/header.html create mode 100644 layouts/partials/navigation.html create mode 100644 layouts/partials/opengraph.html create mode 100644 layouts/partials/pagination.html create mode 100644 layouts/partials/social.html create mode 100644 layouts/partials/tags.html create mode 100644 layouts/shortcodes/img.html create mode 100644 layouts/shortcodes/quote.html create mode 100644 layouts/shortcodes/table_of_contents.html create mode 100644 layouts/shortcodes/tabular.html create mode 100644 static/css/style.css create mode 100644 static/svg/500px.svg create mode 100644 static/svg/bars.svg create mode 100644 static/svg/calendar.svg create mode 100644 static/svg/clock.svg create mode 100644 static/svg/codepen.svg create mode 100644 static/svg/envelope.svg create mode 100644 static/svg/facebook.svg create mode 100644 static/svg/file-text.svg create mode 100644 static/svg/flickr.svg create mode 100644 static/svg/folder.svg create mode 100644 static/svg/gitea.svg create mode 100644 static/svg/github.svg create mode 100644 static/svg/gitlab.svg create mode 100644 static/svg/instagram.svg create mode 100644 static/svg/key-modern.svg create mode 100644 static/svg/linkedin.svg create mode 100644 static/svg/mastodon.svg create mode 100644 static/svg/peertube.svg create mode 100644 static/svg/phone.svg create mode 100644 static/svg/pinterest.svg create mode 100644 static/svg/pixelfed.svg create mode 100644 static/svg/rss.svg create mode 100644 static/svg/tag.svg create mode 100644 static/svg/threema.svg create mode 100644 static/svg/tumblr.svg create mode 100644 static/svg/twitter.svg create mode 100644 static/svg/youtube.svg create mode 100644 theme.toml diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..aa94299 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,11 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +## [v0.1.0] - 2021-10-26 +### Added +* First version of the theme diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..37a94e5 --- /dev/null +++ b/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2021 Gregory Trolliet + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..93048a5 --- /dev/null +++ b/README.md @@ -0,0 +1,104 @@ +# Hugo theme : Frigg + +This is a dark and classy Hugo theme. + +## Installation + +To install Simple-site theme, you can simply clone the repository +to your site's theme directory. + +```bash +$ mkdir themes +$ cd themes +$ git clone https://git.vulgarisons.info/raghnarok/hugo_frigg.git snotra +``` + +Don't forget to change the theme in your config.toml file. + +## Configuration + +### Base + +```toml +baseurl = "https://yourdoma.in" # The base url of your Hugo website +title = "Title" # The title of your website +author = "Author" # The author of the website +language = "fr" +theme = "frigg" # The Hugo theme +``` + +### Menu + +The menu is generated following all the files in the root directory +and the articles in the *blog* directory. +To avoid the *blog* entry to be pluralized, +add the following option to your config file: + +```toml +pluralizeListTitles = false +``` + +### Description + +You can use some parameters to fill meta tags and bases images: + +```toml +[params] + description = "" # Description for the meta tag + favicon = "" # Favicon URL + logo = "" # Logo URL + keyword = "" # Keywords for the meta tag +``` + +The favicon is only the filename, +the file should be in *static/images* directory. +If favicon isn't set, the default test values are favicon.svg and favicon.png. +If none exists, there will be no favicon. + +### Home page + +The home page use one avatar, the name and one description. + +Every pages get a list of social networks and others links. +For the social networks, see *Social Networks* chapter. + +```toml +[params] + author = "Author" # The author of the website + info = "Your infos" # Displayed under author name + avatar = "file.png" # Placed in static/images +``` + +### Twitter:card + +Twitter cards are automaticly generated. +If you want tho have the twitter:site meta generated, +add the following option to your config file: + +```toml +[params] + twitterUser = "youruser" # Your Twitter account without @ +``` + +### Custom CSS + +```toml +[params] + custom_css = ["style.css"] # Your own css files +``` + +### Social Networks + +You can also set some of your networks accounts to display on the home page. +Every social network (or not so network) have to be described with thoses +options: + +```toml +[[params.social]] + name = "Title of the entry" # Title, used on hover + icon = "gitea" # Icon to use + weight = 1 # Sort order + url = "https://gitea.io/user" # Link to your account +``` + +You can also add some non social elements, you only need to have an icon. diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..55f7557 --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,10 @@ +--- +author: "Gregory Trolliet" +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +description: "" +images: [] +categories: [""] +tags: ["",""] +draft: true +--- diff --git a/data/snotra/mois.yaml b/data/snotra/mois.yaml new file mode 100644 index 0000000..21c9088 --- /dev/null +++ b/data/snotra/mois.yaml @@ -0,0 +1,12 @@ +1: "janvier" +2: "février" +3: "mars" +4: "avril" +5: "mai" +6: "juin" +7: "juillet" +8: "août" +9: "septembre" +10: "octobre" +11: "novembre" +12: "décembre" diff --git a/i18n/fr.toml b/i18n/fr.toml new file mode 100644 index 0000000..6feb502 --- /dev/null +++ b/i18n/fr.toml @@ -0,0 +1,51 @@ +[categories] +one = "catégorie" +other = "catégories" + +[tags] +one = "tag" +other = "tags" + +[articles] +one = "archive" +other = "archives" + +[reading_time] +one = "Une minute de lecture" +other = "{{ .Count }} minutes de lecture" + +[previous_article] +other = "article précédent" + +[next_article] +other = "article suivant" + +[alt_image] +other = "Image de l'article:" + +[alt_avatar] +other = "Avatar de {{ .Site.Params.author }}" + +[go_home] +other = "Retour à la page d'accueil" + +[error_404] +other = "Erreur 404 : Page non trouvée" + +[error_404_title] +other = "Title link" + +[error_404_txt] +other = "Désolé, la page à laquelle vous essayez d'accéder n'existe pas." + +[error_404_reasons] +other = """Raisons possibles : +""" + +[page_top] +other = "revenir en haut de page" diff --git a/layouts/404.html b/layouts/404.html new file mode 100644 index 0000000..0d861e4 --- /dev/null +++ b/layouts/404.html @@ -0,0 +1,20 @@ +{{ define "main"}} +
+
+
+

+ {{ with .Site.Params.error404_definitionUrl }} + + {{ end }} + {{ htmlUnescape (i18n "error_404") }} + {{ with .Site.Params.error404_definitionUrl }} + + {{ end }} +

+

{{ i18n "error_404_txt" }}

+

{{ i18n "error_404_reasons" | markdownify }}

+
+ +
+
+{{ end }} diff --git a/layouts/_default/_markup/render-heading.html b/layouts/_default/_markup/render-heading.html new file mode 100644 index 0000000..23f277b --- /dev/null +++ b/layouts/_default/_markup/render-heading.html @@ -0,0 +1,7 @@ + + + # + + + {{ .Text | safeHTML }} + diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html new file mode 100644 index 0000000..e214a7e --- /dev/null +++ b/layouts/_default/baseof.html @@ -0,0 +1,12 @@ +{{ partial "header.html" . }} + + + + {{ block "main" . }} + + {{ end }} + {{ block "footer" . }} + + {{ end }} + + diff --git a/layouts/_default/li.html b/layouts/_default/li.html new file mode 100644 index 0000000..4977bff --- /dev/null +++ b/layouts/_default/li.html @@ -0,0 +1,6 @@ +
  • + + {{ .Date.Day }} {{ index $.Site.Data.snotra.mois (printf "%d" .Date.Month) }} {{ .Date.Year }} + + {{ .Title }} +
  • diff --git a/layouts/_default/list.html b/layouts/_default/list.html new file mode 100644 index 0000000..6c2d623 --- /dev/null +++ b/layouts/_default/list.html @@ -0,0 +1,28 @@ +{{ partial "header.html" . }} + +
    + {{ partial "navigation.html" . }} + +
    +
    +
    +

    + {{ if eq .Kind "taxonomy" }} + {{ i18n .Data.Plural 1 | title }}: {{ .Title }} + {{ else if eq .Kind "taxonomyTerm" }} + {{ i18n .Data.Plural | title }} + {{ end }} +

    +
    +
      + {{- range .Paginator.Pages -}} + {{- .Render "li" -}} + {{- end -}} +
    +
    + {{ .Content }} + {{ partial "pagination.html" . }} +
    +
    + + diff --git a/layouts/_default/rss.xml b/layouts/_default/rss.xml new file mode 100644 index 0000000..4996cb0 --- /dev/null +++ b/layouts/_default/rss.xml @@ -0,0 +1,26 @@ + + + {{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }} + {{ .Permalink }} + Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }} + Hugo -- gohugo.io{{ with .Site.LanguageCode }} + {{.}}{{end}}{{ with .Site.Author.email }} + {{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}}{{ with .Site.Author.email }} + {{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}}{{ with .Site.Copyright }} + {{.}}{{end}}{{ if not .Date.IsZero }} + {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}{{ end }} + {{ with .OutputFormats.Get "RSS" }} + {{ printf "" .Permalink .MediaType | safeHTML }} + {{ end }} + {{ range .Site.RegularPages }} + + {{ .Title }} + {{ .Permalink }} + {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }} + {{ with .Site.Author.email }}{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}} + {{ .Permalink }} + {{ .Content | html }} + + {{ end }} + + diff --git a/layouts/_default/single.html b/layouts/_default/single.html new file mode 100644 index 0000000..38bc8ac --- /dev/null +++ b/layouts/_default/single.html @@ -0,0 +1,16 @@ +{{ partial "header.html" . }} + +
    + {{ partial "navigation.html" . }} +
    +
    +
    +

    {{ .Title }}

    +
    + {{ .Content }} +
    +
    + {{ partial "footer.html" . }} +
    + + diff --git a/layouts/archives/li.html b/layouts/archives/li.html new file mode 100644 index 0000000..85559c7 --- /dev/null +++ b/layouts/archives/li.html @@ -0,0 +1,5 @@ + + + {{ .Title }} + → plus d'infos + diff --git a/layouts/archives/list.html b/layouts/archives/list.html new file mode 100644 index 0000000..ad45179 --- /dev/null +++ b/layouts/archives/list.html @@ -0,0 +1,24 @@ +{{ partial "header.html" . }} + +
    + {{ partial "navigation.html" . }} + +
    +
    +
    +

    + {{ i18n "articles" | title }} +

    +
    +
    + {{- range .Paginator.Pages -}} + {{- .Render "li" -}} + {{- end -}} +
    +
    + {{ partial "pagination.html" . }} +
    + {{ partial "footer.html" . }} +
    + + diff --git a/layouts/archives/single.html b/layouts/archives/single.html new file mode 100644 index 0000000..9c43e46 --- /dev/null +++ b/layouts/archives/single.html @@ -0,0 +1,63 @@ +{{ partial "header.html" . }} + +
    + {{ partial "navigation.html" . }} +
    +
    +
    +

    + {{ .Title }} +

    + {{ $img := newScratch }} + {{ $folder := (print "/content/" .File.Dir "gallery/") }} + {{ $files := readDir $folder }} + {{ range sort $files "Name" "asc" }} + {{ if not .IsDir }} + {{ $img.Add "list" (slice .Name) }} + {{ end }} + {{ end }} + {{ with ($img.Get "list") }} + {{ $img.Set "max" (add 1 (int (index (split (index (split (index (last 1 .) 0) ".") 0) "img") 1))) }} + {{ end }} + {{ range $index, $val := $img.Get "list" }} + {{ $curr := index (split $val ".") 0 }} + {{ $prec := mod (add (sub $index 1) ($img.Get "max")) ($img.Get "max") }} + {{ $next := mod (add $index 1) ($img.Get "max") }} + + + + + + {{ end }} + +
    +
    + {{ .Content }} +
    + {{ partial "article-footer.html" . }} +
    +
    + {{ partial "footer.html" . }} +
    + + diff --git a/layouts/index.html b/layouts/index.html new file mode 100644 index 0000000..950f532 --- /dev/null +++ b/layouts/index.html @@ -0,0 +1,21 @@ +{{ partial "header.html" . }} + +
    + {{ partial "navigation.html" . }} +
    + {{ partial "author.html" . }} + {{ if false }} + {{ range .Site.RegularPages }} +
    +

    {{ .Title }}

    +
    +
    + {{ .Summary }} +
    + {{ end }} + {{ end }} +
    + {{ partial "footer.html" . }} +
    + + diff --git a/layouts/partials/article-footer.html b/layouts/partials/article-footer.html new file mode 100644 index 0000000..d78f40b --- /dev/null +++ b/layouts/partials/article-footer.html @@ -0,0 +1,24 @@ + diff --git a/layouts/partials/author.html b/layouts/partials/author.html new file mode 100644 index 0000000..9fe0fe5 --- /dev/null +++ b/layouts/partials/author.html @@ -0,0 +1,9 @@ +
    + +
    +

    {{ .Site.Params.author }}

    +

    {{ .Site.Params.info }}

    +
    +
    diff --git a/layouts/partials/categories.html b/layouts/partials/categories.html new file mode 100644 index 0000000..fbc2620 --- /dev/null +++ b/layouts/partials/categories.html @@ -0,0 +1,13 @@ +{{ if . }} +
    + + {{ range $index, $el := . }} + {{ if gt $index 0 }} + + {{ end }} + + {{ . }} + + {{ end }} +
    +{{ end }} diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html new file mode 100644 index 0000000..4e55853 --- /dev/null +++ b/layouts/partials/footer.html @@ -0,0 +1,5 @@ + diff --git a/layouts/partials/head.html b/layouts/partials/head.html new file mode 100644 index 0000000..e69de29 diff --git a/layouts/partials/header.html b/layouts/partials/header.html new file mode 100644 index 0000000..021136b --- /dev/null +++ b/layouts/partials/header.html @@ -0,0 +1,46 @@ + + + + {{ .Title }} + + + {{ if .Description }} + + {{ else }} + + {{ end }} + {{ if .Params.Tags }} + + {{ else }} + + {{ end }} + {{ if .Params.author }} + + {{ else }} + + {{ end }} + + + {{ if and (.Site.Params.favicon) (fileExists (print "static/images/" .Site.Params.favicon)) }} + {{ $name := .Site.Params.favicon }} + {{ $splitted := split $name "." }} + {{ $extension := index $splitted 1 }} + {{ if ( in "svg" $extension) }} + + {{ else if (in "gif png" $extension) }} + + {{ end}} + {{ else if (fileExists "static/images/favicon.svg") }} + + {{ else if (fileExists "static/images/favicon.png") }} + + {{ end }} + + + {{ partial "opengraph.html" . }} + + {{ range .Site.Params.custom_css }} + + {{ end }} + {{ hugo.Generator }} + diff --git a/layouts/partials/navigation.html b/layouts/partials/navigation.html new file mode 100644 index 0000000..5317a11 --- /dev/null +++ b/layouts/partials/navigation.html @@ -0,0 +1,22 @@ + diff --git a/layouts/partials/opengraph.html b/layouts/partials/opengraph.html new file mode 100644 index 0000000..247882a --- /dev/null +++ b/layouts/partials/opengraph.html @@ -0,0 +1,38 @@ + +{{ with .Site.Params.twitterUser }} + +{{ end }} + + +{{ if .Description }} + +{{ else }} + +{{ end }} + + +{{ if .Description }} + +{{ else }} + +{{ end }} +{{ if eq .Kind "page" }} + +{{ else }} + +{{ end }} + +{{ $title := .Title }} +{{if .Params.images }} + {{ $baseUrl := .Permalink }} + {{ $altText := i18n "alt_image" }} + {{ range first 1 .Params.images }} + + + {{ end }} +{{ else }} + + +{{ end }} + + diff --git a/layouts/partials/pagination.html b/layouts/partials/pagination.html new file mode 100644 index 0000000..c449675 --- /dev/null +++ b/layouts/partials/pagination.html @@ -0,0 +1,51 @@ +{{ $paginator := .Paginator }} +{{ $adjacent_links := 2 }} +{{ $max_links := (add (mul $adjacent_links 2) 1) }} +{{ $lower_limit := (add $adjacent_links 1) }} +{{ $upper_limit := (sub $paginator.TotalPages $adjacent_links) }} + +{{ if gt $paginator.TotalPages 1 }} + +{{ end }} diff --git a/layouts/partials/social.html b/layouts/partials/social.html new file mode 100644 index 0000000..49ea713 --- /dev/null +++ b/layouts/partials/social.html @@ -0,0 +1,11 @@ +{{ with .Site.Params.social }} + +{{ end }} diff --git a/layouts/partials/tags.html b/layouts/partials/tags.html new file mode 100644 index 0000000..62123c8 --- /dev/null +++ b/layouts/partials/tags.html @@ -0,0 +1,11 @@ +{{ if . }} +
    + + {{ range $index, $el := . }} + {{ if gt $index 0 }} + + {{ end }} + {{ . }} + {{ end }} +
    +{{ end }} diff --git a/layouts/shortcodes/img.html b/layouts/shortcodes/img.html new file mode 100644 index 0000000..eef90e0 --- /dev/null +++ b/layouts/shortcodes/img.html @@ -0,0 +1,42 @@ +{{ $img := $.Page.Resources.GetMatch (.Get "src")}} +{{ $name_splitted := split $img.RelPermalink "." }} +{{ $name_base := index $name_splitted 0 }} +{{ $ext_base := index $name_splitted 1 }} +
    + {{ with .Get "link" }} + + {{ else }} + + {{ end }} + + {{ if ( in "svg ico gif" $ext_base ) }} + {{ . }} + {{ else }} + + + {{ . }} + {{ end }} + + + {{ if .Get "caption" }} +
    +

    {{ .Get "caption" }} + {{ if .Get "attr" }} + + {{ with .Get "attrlink" }} + + {{ end }} + {{ .Get "attr" }} + {{ with .Get "attrlink" }} + + {{ end }} + + {{ end }} +

    +
    + {{ end }} +
    diff --git a/layouts/shortcodes/quote.html b/layouts/shortcodes/quote.html new file mode 100644 index 0000000..d87b737 --- /dev/null +++ b/layouts/shortcodes/quote.html @@ -0,0 +1,18 @@ +
    + {{ $s := split (trim .Inner "\t \n") "\n\n" }} + {{ if eq ( first 1 $s) ( last 1 $s )}} +

    {{ .Inner | markdownify }}

    + {{ else }} + {{ .Inner | markdownify }} + {{ end }} + {{ if .Get "author" }} + + {{ end }} +
    diff --git a/layouts/shortcodes/table_of_contents.html b/layouts/shortcodes/table_of_contents.html new file mode 100644 index 0000000..57815d9 --- /dev/null +++ b/layouts/shortcodes/table_of_contents.html @@ -0,0 +1,3 @@ +
    + {{ .Page.TableOfContents }} +
    diff --git a/layouts/shortcodes/tabular.html b/layouts/shortcodes/tabular.html new file mode 100644 index 0000000..96e9e9c --- /dev/null +++ b/layouts/shortcodes/tabular.html @@ -0,0 +1,8 @@ +
    + {{ .Inner | markdownify }} + {{ with .Get "title" }} +
    +

    {{ . }}

    +
    + {{ end }} +
    diff --git a/static/css/style.css b/static/css/style.css new file mode 100644 index 0000000..a75562a --- /dev/null +++ b/static/css/style.css @@ -0,0 +1,876 @@ +/******************* Constants *******************/ +:root { + --font-color: #EFEFEF; + --font-color_rgb: 239, 239, 239; + --font-color-em: #8C8C8C; + --background-color: #1C1C1C; + --background-color-light: #252525; + --background-color-dark: #121212; + --avatar-background: #B6B6B6; + --color01: #799479; + --color01_bright: #58af58; + --color02: #8f8071; + --color02_bright: #b88a5b; + --color03: #871818; + + --image-margin-side: 2.5em; + + --content-width: 900px; +} + +/******************* Page *******************/ +* { + box-sizing: border-box; +} +html { + background-color: var(--background-color); + font-family: Lato, Helvetica, sans-serif; + font-size: medium; + color: var(--font-color); +} +@media only screen and (min-width: 768px) { + html { + font-size: large; + } +} +body { + margin: 0; +} +p, ul, ol { + line-height: 1.6em; +} + +/******************* Links *******************/ +a { + text-decoration: none; + color: var(--font-color); +} +a:not(.anchor):not(.hidden_link) { + border-bottom: 1px dotted; + transition: box-shadow 0.2s ease, outline-offset 0.2s ease, transform 0.2s ease, background 0.4s ease; +} +a:visited { + color: var(--font-color); +} +a:hover { + outline: 1px solid; + outline-offset: .3em; +} +a:not(.anchor):not(.hidden_link):hover { + border-bottom: 1px dashed; +} +a:not(.anchor):not(.hidden_link):active { + border-bottom: 1px solid; +} +a.not(.anchor):focus { + outline-offset: .3em; + outline: 1px solid; +} + +/******************* Wrapper *******************/ +.wrapper { + display: flex; + flex-direction: column; + min-height: 100vh; + width: 100%; +} + +/******************* Home Page *******************/ +.centered { + display: flex; + flex: 1; + align-items: center; + justify-content: center; + margin: 1em; +} + +/******************* Navbar *******************/ +#navigation { + height: 4em; + width: 100%; + line-height: 4em; +} +#navigation a { + padding: 1em; + padding-bottom: 0.75em; /* Pour éviter d'avoir un espace trop grand en bas*/ + border: none; + border-radius: 0.5em; +} +#navigation a:hover { + background-color: var(--font-color); + text-decoration: none; + color: var(--background-color); + outline: none; +} +#navigation a:active { + color: var(--font-color); + border: none; +} +#navigation a:focus { + outline: none; +} +#navigation .navigation-container, +#footer { + margin: 0 auto; + max-width: 90vw; +} +#footer { + width: 100%; + margin-top: 1em; + padding: 0 1em; +} +@media only screen and (max-width: 320px) { + #navigation .navigation-container, + #footer { + max-width: 100vw; + } +} +@media only screen and (min-width: 1000px) { + #navigation .navigation-container, + #footer { + max-width: var(--content-width); + } +} +#navigation-title { + letter-spacing: .1rem; + text-transform: uppercase; + font-weight: bold; + font-size: 1em; +} +#social { + list-style: none; + padding: 0; + margin-top: 0; +} +#social .social-element { + display: inline-block; + vertical-align: middle; + height: 2em; + margin-top: .7em; +} +#social .social-element a { + height: 1.5em; + display: inline-block; + margin-left: 1em; + margin-right: 1em; + border: none; +} +#social .social-element a:active { + outline: 2px solid; +} +#social .social-icon { + height: 100%; +} +@media only screen and (min-width: 768px) { + #social .social-element a { + height: 2em; + } +} +/******************* Navbar Menu *******************/ +#menu-toggle { + display: none; +} +#navigation .menu-button { + float: right; + position: relative; + display: none; + width: 4em; + height: 4em; +} +#navigation .menu-button-inner { + width: 3em; + height: 3em; + position:relative; + top: 0.5em; + left: 0.5em; + text-align:center +} +#navigation .menu-button .menu-button-image { + display: inline-block; + position: relative; + height: 1.5em; + width: 1.5em; + top: 0.75em; + background-image: url(../svg/bars.svg); + background-size: contain; + background-repeat: no-repeat; + margin: auto; + vertical-align: top; +} +#menu-toggle:checked + .menu-button .menu-button-inner { + background-color: var(--link-hover-background); + border-radius: 0.5em; + transition: background .5s, max-height .35s linear; +} +#menu-toggle:checked + .menu-button .menu-button-image { + opacity: 40%; +} +#navigation-list { + position: absolute; + top: 6rem; + right: 0; + visibility: hidden; + opacity: 0; + max-height: 0; + width: 100%; + font-size: 1.5em; + background-color: var(--background-color); + border-top: solid 2px var(--font-color); + border-bottom: solid 2px var(--font-color); + transition: opacity .5s, max-height .35s linear; + padding: 0; +} +#navigation-list .navigation-item { + float: none !important; + text-align: center; + margin: 0; + display: block; +} +#navigation-list .navigation-item, +#navigation-list .navigation-item span { + line-height: 5rem; +} +#menu-toggle:checked + label + ul { + visibility: visible; + opacity: 1; + max-height: 100rem; + z-index: 100; +} +#navigation .menu-button { + display: block; + cursor: pointer; +} +@media only screen and (min-width: 768px) { + #navigation-list { + position: relative; + float: right; + top: 0; + max-height: none; + visibility: visible; + opacity: 100; + width: auto; + border: none; + list-style: none; + font-size: 1em; + margin-top: 0; + } + #navigation-list .navigation-item { + display: inline-block; + font-weight: bold; + line-height: 4rem; + } + #navigation-list .navigation-item a, + #navigation-list .navigation-item span { + line-height: 1rem; + } + #menu-toggle:checked + label + ul { + visibility: visible; + opacity: 1; + max-height: 100rem; + } + #navigation .menu-button { + display: none; + } +} + +/******************* Author Infos *******************/ +#author { + text-align: center; + margin: 0 auto; + max-width: 90vw; +} +@media only screen and (max-width: 320px) { + #author { + max-width: 100vw; + } +} +@media only screen and (min-width: 1000px) { + #author { + max-width: var(--content-width); + } +} +#avatar img { + width: 20vw; + min-width: 120px; + max-width: 200px; + border-radius: 40%; + background-color: var(--avatar-background); +} + + +/******************* Simple Page *******************/ +.container { + max-width: 90vw; + margin: 0 auto; + width: 100%; + display: flex; + flex: 1; +} +@media only screen and (min-width: 1000px) { + .container { + max-width: var(--content-width); + } +} +.page-icon { + width: 1em; + height: 1em; + vertical-align: middle; +} + +/******************* Error Page *******************/ +.error_page { + width: max-content; +} +.error_page footer { + padding-top: 1em; + border-top: 1px solid var(--font-color); +} + +/******************* Error Page *******************/ +#blog-list .list-title, +#site-page .site-title { + font-size: 2rem; +} + +/******************* Archives List *******************/ +.archives-list { + list-style: none; + padding-left: 0; +} +.archives-list .archive { + display: block; + position: relative; + margin: 1em 0; + overflow: auto; + border: none; +} +.archives-list .archive:hover { + border: none; +} +.archives-list .archive .title { + height: 100px; +} +.archives-list .thumbnail { + display: block; + width: 15em; + text-align: left; + padding-right: 1.5em; + float: left; +} +@media only screen and (min-width: 768px) { + .archives-list .thumbnail { + display: inline-block; + text-align: right; + } +} +.archives-list .description { + height: 100%; +} +.archive .more { + position: absolute; + bottom: 0; + right: 0; + font-style: italic; +} + +/******************* Letters *******************/ +#letter-counter { + margin: auto; + width: fit-content; + width: -moz-fit-content; +} +#letter-counter #counter { + border: 1px solid white; + margin-top: 0.5em; + padding: .7em; + text-align: center; + font-size: 2.5em; +} +#letter-form { + margin-left: 1em; + margin-right: 1em; +} +#letter-choice { + display: inline-block; +} +#letter-choice-title { + float: left; + margin-top: 0; +} +#letter-form input, +#letter-form label { + margin-top: 1em; +} +#letter-choice>p, +#letter-form>label { + display: inline-block; + min-width: 10em; +} +#letter-choice input:first-of-type { + margin-top: 0; +} +#letter-form input[type="text"] { + height: 2em; + width: 20em; + max-width: 100%; +} +#letter-form #submit { + padding: 0.5em 0.8em; +} +/******************* Paginator *******************/ +.pagination { + padding-left: 0; + margin: auto; + text-align: center; +} +.pagination li { + display: inline-block; +} + +/******************* Article *******************/ +.container article { + margin: 0 1em; + width: 100%; +} +@media only screen and (max-width: 320px) { + .container article { + margin: 0em; + } +} + +/******************* Article Header *******************/ +.container article .post-title { + margin-bottom: 0.3em; +} +.container article .post-title a:hover { + outline: none; +} +.container article .post-title a:active { + border-bottom: 1px solid; +} +.post-meta { + margin-top: 1em; +} +.post-meta>div { + line-height: 2em; +} +.post-meta .date span { + display: inline-block; +} +.post-meta .posted-on { + margin-right: 1em; +} +.post-meta .categories, .post-meta .tags { + display: inline-block; +} +.post-meta .categories { + margin-right: 1em; +} +.post-meta .header-icon { + vertical-align: baseline; + margin-right: 0.3em; +} +.post-header { + margin-top: 3.5rem; + margin-bottom: 1.8rem; +} +@media only screen and (max-width: 320px) { + .post-header { + margin-top: 2rem; + margin-bottom: 1.6rem; + } +} +.post-title { + font-size: 3rem; + margin: 0; +} +@media only screen and (max-width: 320px) { + .post-title { + font-size: 2.4rem; + } +} + +/******************* Archive Body *******************/ +.archive-body { + margin-bottom: 2em; + position: relative; +} +.archive-body img { + max-width: 100%; +} +.archive-body h1 { + font-size: 2.55rem; + margin: 3.5rem 0 1.8rem; +} +.archive-body h2 { + font-size: 2.17rem; + margin: 2.98rem 0 1.53rem; +} +.archive-body h3 { + font-size: 1.84rem; + margin: 2.53rem 0 1.30rem; +} +.archive-body h4 { + font-size: 1.57rem; + margin: 2.15rem 0 1.11rem; +} +.archive-body h5 { + font-size: 1.33rem; + margin: 1.83rem 0 0.94rem; +} +.archive-body h6 { + font-size: 1.13rem; + margin: 1.55rem 0 0.80rem; +} +@media only screen and (max-width: 320px) { + .archive-body h1 { + font-size: 2.16rem; + margin: 2rem 0 1.6rem; + } + .archive-body h2 { + font-size: 1.94rem; + margin: 1.80rem 0 1.44rem; + } + .archive-body h3 { + font-size: 1.75rem; + margin: 1.62rem 0 1.30rem; + } + .archive-body h4 { + font-size: 1.57rem; + margin: 1.46rem 0 1.17rem; + } + .archive-body h5 { + font-size: 1.42rem; + margin: 1.31rem 0 1.05rem; + } + .archive-body h6 { + font-size: 1.28rem; + margin: 1.18rem 0 0.94rem; + } +} + +.anchor { + content: '#'; + position: absolute; + opacity: 0%; + left: -1em; + width: 80%; + max-width: 600px; + border: none; + color: var(--font-color-em); + text-decoration: none; +} +@media only screen and (max-width: 500px) { + .anchor { + left: -0.8em; + } +} + +.anchor:hover { + opacity: 100%; + outline: none; + border: none; + cursor: pointer; +} + +@media only screen and (max-width: 320px) { + .anchor:hover { + opacity: 0%; + } +} + +/******************* Archive Footer *******************/ +.archive-footer { + font-style: italic; + font-size: 0.8rem; + margin: 2rem 0; +} +.archive-footer .footer-return { + margin-bottom: 1em; + width: 100%; + text-align: right; + display: inline-block; +} + +.archive-footer .footer-link { + display: block; +} +.archive-footer .footer-link .spacer { + display: none; +} +.archive-footer .footer-link .label { + display: inline-block; + width: 8em; +} +@media only screen and (min-width: 768px) { + .archive-footer .footer-link { + display: inline-block; + } + .archive-footer .footer-link .label { + width: auto; + } + .archive-footer .footer-link .spacer { + display: inline-block !important; + } +} + +.footnotes { + clear: left; +} + +/******************* Archive Figure *******************/ +.archive-body figure { + margin: 1em 0; + max-width: 100%; + width: fit-content; + overflow: visible; +} +.archive-body figure picture, +.archive-body figure figcaption { + display: table-row; + border-spacing: 0; +} +.archive-body figure img { + vertical-align: middle; + padding-bottom: 0.3em; + min-width: calc(50% - 2 * var(--image-margin-side)); +} +@media only screen and (min-width: 768px) { + .archive-body figure { + margin: 1em 2.5em; + } + .archive-body figure.logo, + .archive-body figure.inline { + margin: 0; + } + .archive-body figure.border img { + min-width: calc(100% - 2 * var(--image-margin-side)) !important; + } +} +.archive-body figure.logo { + display: inline-block; + min-width: auto; +} +.archive-body figure.wrap { + float: left; + margin: 0.7em 1em; +} +.archive-body figure.inline { + display: inline-block; + min-width: auto; + margin-left: 1em; + margin-right: 1em; +} +.archive-body figure.half { + width: 100%; + max-width: 45%; +} +.archive-body figure.third { + width: 100%; + max-width: 30%; +} +.archive-body figure.logo img { + width: 10vw; + max-width: 100px; + min-width: 40px; + vertical-align: bottom; + padding: 0; +} +.archive-body figure.border img { + padding: 0.3rem; + border: 3px solid var(--background-color-light); + min-width: 100%; +} +.archive-body figure.border figcaption { + background-color: var(--background-color-light); + min-width: 100%; + display: inline-block; +} +.archive-body figure>a { + display: block; + outline: none; + min-height: 100%; + border: none; +} +.archive-body figure>a>img:hover { + box-shadow: 0 0 1em rgba(var(--font-color_rgb), 0.5); +} +.archive-body figure figcaption p, +.archive-body figure figcaption h4 { + font-style: italic; + font-weight: normal; + font-size: 0.9rem; + margin-top: 0.5rem; + margin-bottom: 0.5rem; + margin-left: 1rem; + margin-right: 1rem; +} +.archive-body figure figcaption .attribution { + float: right; +} +@media only screen and (max-width: 320px) { + .archive-body .footnotes ol { + padding-left: 2em; + } +} +.archive-body .separator { + margin: 0 0.2em; +} +/******************* Article Tabular *******************/ +.archive-body .tabular.border table { + padding: 0.3rem; + border: 3px solid var(--background-color-light); + min-width: 100%; +} +.archive-body .tabular td, +.archive-body .tabular th { + padding: 0 0.4rem; +} +.archive-body .tabular th { + border-bottom: 3px solid var(--background-color-light); +} +.archive-body .tabular.center td { + text-align: center; +} +.archive-body .tabular.right td { + text-align: right; +} + +/******************* Archive Superscript *******************/ +.archive-body sup { + vertical-align: top; + position: relative; + top: -0.5rem; +} + +/******************* Archive Blockquote *******************/ +blockquote { + position: relative; + background-color: var(--background-color-light); + padding: 0.1rem 1rem; + margin-top: 2rem; +} +.bigquote { + padding: 1rem; + border-radius: 1.5rem; +} +.bigquote p:first-of-type { + margin-top: 0; +} +.bigquote footer { + text-align: right; +} +blockquote:after { + position: absolute; + content: "”"; + color: var(--text-color); + font-size: 10rem; + line-height: 0; + top: 2rem; + right: 1rem; + font-family: Arial; +} + +/******************* Archive Gallery *******************/ +.thumb>img { + max-height: 150px; + max-width: 150px; + border: solid 4px var(--background-color-dark); +} + +.lightbox { + position: fixed; + z-index: 97; + height: 0; + width: 0; + text-align: center; + top: 0; + left: 0; + background: rgba(0, 0, 0, 0.8); + opacity: 0; +} + +.lightbox img { + max-width: 90%; + max-height: 95%; + margin-top: 2%; + opacity: 0; +} + +.lightbox:target { + /** Remove default browser outline */ + outline: none; + + width: 100%; + height: 100%; + opacity: 1 !important; +} + +.lightbox:target img { + border: solid 1em var(--background-color-light); + opacity: 1; + webkit-transition: opacity 0.6s; + transition: opacity 0.6s; +} + +.light-btn { + color: #fafafa; + background-color: var(--background-color-dark); + border: solid 3px var(--font-color-em); + padding: .3em .9em; + border-radius: 2px; + text-decoration: none; + cursor: pointer; + vertical-align: middle; + position: absolute; + top: 45%; + z-index: 98; + opacity: 50%; +} + +.light-btn:hover { + outline: none; + opacity: 100%; +} + +.btn-prev { + left: 3%; +} + +.btn-next { + right: 3%; +} + +.btn-close { + position: absolute; + right: 2%; + top: 2%; + z-index: 98; + color: #fafafa; + background-color: var(--background-color-dark); + border: solid 5px var(--font-color-em); + padding: 10px 15px; + border-radius: 1px; + text-decoration: none; + opacity: 50%; +} + +.btn-close:hover { + background-color: #740404; + outline: none; + opacity: 100%; +} + +/******************* Generic colors *******************/ +.color01 { + color: var(--color01); +} +.color01.bright { + color: var(--color01_bright); +} +.color02 { + color: var(--color02); +} +.color02.bright { + color: var(--color02_bright); +} diff --git a/static/svg/500px.svg b/static/svg/500px.svg new file mode 100644 index 0000000..7660e79 --- /dev/null +++ b/static/svg/500px.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/bars.svg b/static/svg/bars.svg new file mode 100644 index 0000000..a4b7e8d --- /dev/null +++ b/static/svg/bars.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/svg/calendar.svg b/static/svg/calendar.svg new file mode 100644 index 0000000..5e2f642 --- /dev/null +++ b/static/svg/calendar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/clock.svg b/static/svg/clock.svg new file mode 100644 index 0000000..c44b912 --- /dev/null +++ b/static/svg/clock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/codepen.svg b/static/svg/codepen.svg new file mode 100644 index 0000000..72bdee5 --- /dev/null +++ b/static/svg/codepen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/envelope.svg b/static/svg/envelope.svg new file mode 100644 index 0000000..3f8070c --- /dev/null +++ b/static/svg/envelope.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/facebook.svg b/static/svg/facebook.svg new file mode 100644 index 0000000..bc3d9e0 --- /dev/null +++ b/static/svg/facebook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/file-text.svg b/static/svg/file-text.svg new file mode 100644 index 0000000..94c4c21 --- /dev/null +++ b/static/svg/file-text.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/flickr.svg b/static/svg/flickr.svg new file mode 100644 index 0000000..c221ffd --- /dev/null +++ b/static/svg/flickr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/folder.svg b/static/svg/folder.svg new file mode 100644 index 0000000..b56a3f4 --- /dev/null +++ b/static/svg/folder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/gitea.svg b/static/svg/gitea.svg new file mode 100644 index 0000000..fb6fb9e --- /dev/null +++ b/static/svg/gitea.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/github.svg b/static/svg/github.svg new file mode 100644 index 0000000..4452315 --- /dev/null +++ b/static/svg/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/gitlab.svg b/static/svg/gitlab.svg new file mode 100644 index 0000000..21073cc --- /dev/null +++ b/static/svg/gitlab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/instagram.svg b/static/svg/instagram.svg new file mode 100644 index 0000000..fef458d --- /dev/null +++ b/static/svg/instagram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/key-modern.svg b/static/svg/key-modern.svg new file mode 100644 index 0000000..fe3752b --- /dev/null +++ b/static/svg/key-modern.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/linkedin.svg b/static/svg/linkedin.svg new file mode 100644 index 0000000..c9055f9 --- /dev/null +++ b/static/svg/linkedin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/mastodon.svg b/static/svg/mastodon.svg new file mode 100644 index 0000000..3321607 --- /dev/null +++ b/static/svg/mastodon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/peertube.svg b/static/svg/peertube.svg new file mode 100644 index 0000000..831f4c5 --- /dev/null +++ b/static/svg/peertube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/phone.svg b/static/svg/phone.svg new file mode 100644 index 0000000..16a7bf0 --- /dev/null +++ b/static/svg/phone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/pinterest.svg b/static/svg/pinterest.svg new file mode 100644 index 0000000..04b8fb5 --- /dev/null +++ b/static/svg/pinterest.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/pixelfed.svg b/static/svg/pixelfed.svg new file mode 100644 index 0000000..9270d7c --- /dev/null +++ b/static/svg/pixelfed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/rss.svg b/static/svg/rss.svg new file mode 100644 index 0000000..9340c23 --- /dev/null +++ b/static/svg/rss.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/tag.svg b/static/svg/tag.svg new file mode 100644 index 0000000..4b769f1 --- /dev/null +++ b/static/svg/tag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/threema.svg b/static/svg/threema.svg new file mode 100644 index 0000000..4a94ce2 --- /dev/null +++ b/static/svg/threema.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/tumblr.svg b/static/svg/tumblr.svg new file mode 100644 index 0000000..b7a9813 --- /dev/null +++ b/static/svg/tumblr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/twitter.svg b/static/svg/twitter.svg new file mode 100644 index 0000000..55057f7 --- /dev/null +++ b/static/svg/twitter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/svg/youtube.svg b/static/svg/youtube.svg new file mode 100644 index 0000000..4ae2b8a --- /dev/null +++ b/static/svg/youtube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/theme.toml b/theme.toml new file mode 100644 index 0000000..58f8853 --- /dev/null +++ b/theme.toml @@ -0,0 +1,16 @@ +# theme.toml template for a Hugo theme +# See https://github.com/gohugoio/hugoThemes#themetoml for an example + +name = "Frigg" +license = "MIT" +licenselink = "https://git.vulgarisons.info/raghnarok/hugo_idunn/src/branch/master/LICENSE" +description = "Simple Hugo theme, inspired from Idunn but in a more visual way" +homepage = "https://git.vulgarisons.info/raghnarok/hugo_frigg" +tags = ["hugo", "simple", "responsive", "no javascript", "no fontawesome", "no google", "company", "clean"] +features = ["responsive design", "social links"] +min_version = "0.41.0" + +[author] + name = "Gregory Trolliet" + homepage = "https://trolliet.info" +