diff --git a/layouts/_default/archives.html b/layouts/_default/archives.html
new file mode 100644
index 0000000..6d606d8
--- /dev/null
+++ b/layouts/_default/archives.html
@@ -0,0 +1,32 @@
+{{ define "main" }}
+{{ .Date.Format "2006" }}
+ {{ end }}
+ {{ end }}
+
+ {{ $.Scratch.Set "count" 1 }}
+
+
+ {{ range (where .Pages "Type" $type) }}
+ {{ if (ne .Params.hidden true) }}
+
+ {{ end }}
+ {{ end }}
+
`, ``, ``, `` |
+| 03 | β | Muted text | `:before` & `:marker` symbols |
+| 04 | β | Alt. foreground | Aside text |
+| 05 | β | Foreground | Content text |
+| 06 | β | | |
+| 07 | Light | | |
+| 08 | Red | | |
+| 09 | Orange | | |
+| 0A | Yellow | Highlights | Selected text, `` |
+| 0B | Green | Primary accent | Logo |
+| 0C | Cyan | Active links | `a:active`, `a:hover` |
+| 0D | Blue | Links | `a:link`, `a:visited` |
+| 0E | Magenta | | |
+| 0F | Brown | | |
+
+For light mode palettes, the sequence of 00β07 should be reversed (light to dark, not dark to light).
+Note that not all colours are currently used in the theme.
+
+You you use these colours directly in content using the convenience classes `.baseXX` and `.bg-baseXX`.
+For example:
+
+```html
+Yellow text
+Text highlighted in green
+```
+
+## Favicon
+
+risotto will automatically use favicons placed in the `static/` directory.
+The following files will be detected and included in your site's `` section:
+
+* `favicon.ico`
+* `favicon-16x16.png`
+* `favicon-32x32.png`
+* `apple-touch-icon.png`
+* `site.webmanifest`
+
+You can generate these from an image or emoji using [favicon.io](https://favicon.io/) or a similar service.
+They must be placed directly under your site's `static/` directory, i.e. not in in a subdirectory or `themes/risotto/static/`.
+
+## Acknowledgements
+
+The 'cooked rice' emoji used as a favicon for the example site was created by the [Twemoji project](https://twemoji.twitter.com/) and is licensed under [CC-BY 4.0](https://creativecommons.org/licenses/by/4.0/).
diff --git a/themes/risotto/archetypes/default.md b/themes/risotto/archetypes/default.md
new file mode 100644
index 0000000..ac36e06
--- /dev/null
+++ b/themes/risotto/archetypes/default.md
@@ -0,0 +1,2 @@
++++
++++
diff --git a/themes/risotto/config.toml b/themes/risotto/config.toml
new file mode 100644
index 0000000..7c79705
--- /dev/null
+++ b/themes/risotto/config.toml
@@ -0,0 +1,3 @@
+[module]
+ [module.hugoVersion]
+ min = "0.41.0"
diff --git a/themes/risotto/exampleSite/LICENSE b/themes/risotto/exampleSite/LICENSE
new file mode 100644
index 0000000..4527efb
--- /dev/null
+++ b/themes/risotto/exampleSite/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Steve Francia
+
+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.
\ No newline at end of file
diff --git a/themes/risotto/exampleSite/config.toml b/themes/risotto/exampleSite/config.toml
new file mode 100644
index 0000000..72c001d
--- /dev/null
+++ b/themes/risotto/exampleSite/config.toml
@@ -0,0 +1,103 @@
+baseURL = "https://risotto.joeroe.io"
+theme = "risotto"
+title = "risotto demo"
+author = "Joe Roe"
+copyright = "Β© [Joe Roe](https://joeroe.io) & [risotto contributors](https://github.com/joeroe/risotto/graphs/contributors)."
+paginate = 3
+languageCode = "en"
+DefaultContentLanguage = "en"
+enableInlineShortcodes = true
+# prevent build failures when using Hugo's Instagram shortcode due to deprecated Instagram API.
+# See https://github.com/gohugoio/hugo/issues/7228#issuecomment-714490456
+ignoreErrors = ["error-remote-getjson"]
+
+# Automatically add content sections to main menu
+sectionPagesMenu = "main"
+
+[params]
+noindex = false
+
+[params.theme]
+palette = "base16-dark"
+
+# Sidebar: about/bio
+[params.about]
+title = "risotto"
+description = "A [hugo](https://gohugo.io) theme inspired by terminal ricing."
+# unicode/emoji logo:
+logo = "π"
+# or use an image:
+#logo_image = "images/rice.svg"
+
+# Sidebar: social links
+# Available icon sets:
+# * FontAwesome 6 ('fa-brands', 'fa-normal', or 'fa-solid' for brands)
+# * Academicons ('ai ai-')
+
+[[params.socialLinks]]
+icon = "fa-brands fa-github"
+title = "GitHub"
+url = "https://github.com/joeroe/risotto"
+
+[[params.socialLinks]]
+icon = "fa-solid fa-envelope"
+title = "Email"
+url = "mailto:example@example.com"
+
+[[params.socialLinks]]
+icon = "ai ai-orcid"
+title = "ORCID"
+url = "https://orcid.org/0000-0001-2345-6789"
+
+[menu]
+
+ [[menu.main]]
+ identifier = "about"
+ name = "About"
+ url = "/about/"
+ weight = 10
+
+[taxonomies]
+category = "categories"
+tag = "tags"
+series = "series"
+
+# For hugo >= 0.60.0, enable inline HTML
+[markup.goldmark.renderer]
+unsafe = true
+
+[markup]
+
+ # Table of contents
+ # Add toc = true to content front matter to enable
+ [markup.tableOfContents]
+ startLevel = 2
+ endLevel = 3
+ ordered = true
+
+[privacy]
+
+ [privacy.vimeo]
+ disabled = false
+ simple = true
+
+ [privacy.twitter]
+ disabled = false
+ enableDNT = true
+ simple = true
+
+ [privacy.instagram]
+ disabled = false
+ simple = true
+
+ [privacy.youtube]
+ disabled = false
+ privacyEnhanced = true
+
+[services]
+
+ [services.instagram]
+ disableInlineCSS = true
+
+ [services.twitter]
+ disableInlineCSS = true
diff --git a/themes/risotto/exampleSite/configTaxo.toml b/themes/risotto/exampleSite/configTaxo.toml
new file mode 100644
index 0000000..9220fcf
--- /dev/null
+++ b/themes/risotto/exampleSite/configTaxo.toml
@@ -0,0 +1,27 @@
+timeout = 30000
+enableInlineShortcodes = true
+
+[taxonomies]
+category = "categories"
+tag = "tags"
+series = "series"
+
+[privacy]
+
+ [privacy.vimeo]
+ disabled = false
+ simple = true
+
+ [privacy.twitter]
+ disabled = false
+ enableDNT = true
+ simple = true
+ disableInlineCSS = true
+
+ [privacy.instagram]
+ disabled = false
+ simple = true
+
+ [privacy.youtube]
+ disabled = false
+ privacyEnhanced = true
diff --git a/themes/risotto/exampleSite/layouts/.gitkeep b/themes/risotto/exampleSite/layouts/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/themes/risotto/images/screenshot.png b/themes/risotto/images/screenshot.png
new file mode 100644
index 0000000..557d55b
Binary files /dev/null and b/themes/risotto/images/screenshot.png differ
diff --git a/themes/risotto/images/tn.png b/themes/risotto/images/tn.png
new file mode 100644
index 0000000..4a21a86
Binary files /dev/null and b/themes/risotto/images/tn.png differ
diff --git a/themes/risotto/layouts/404.html b/themes/risotto/layouts/404.html
new file mode 100644
index 0000000..e69de29
diff --git a/themes/risotto/layouts/_default/baseof.html b/themes/risotto/layouts/_default/baseof.html
new file mode 100644
index 0000000..9ef13f5
--- /dev/null
+++ b/themes/risotto/layouts/_default/baseof.html
@@ -0,0 +1,36 @@
+
+
+
+
+ {{- partial "head.html" . -}}
+
+
+
+
+
+
+ {{- partial "header.html" . -}}
+
+
+
+ {{- block "main" . }}{{- end }}
+
+
+
+
+ {{- partial "about.html" . -}}
+
+
+
+ {{- block "aside" . }}{{- end }}
+
+
+
+
+
+
+
+
+
diff --git a/themes/risotto/layouts/_default/li.html b/themes/risotto/layouts/_default/li.html
new file mode 100644
index 0000000..c85e091
--- /dev/null
+++ b/themes/risotto/layouts/_default/li.html
@@ -0,0 +1 @@
+{{ .Title | markdownify }}
diff --git a/themes/risotto/layouts/_default/list.html b/themes/risotto/layouts/_default/list.html
new file mode 100644
index 0000000..6966c31
--- /dev/null
+++ b/themes/risotto/layouts/_default/list.html
@@ -0,0 +1,16 @@
+{{ define "main" }}
+ {{ .Title | markdownify }}
+
+ {{ .Content }}
+
+
+ {{ range .Pages }}
+ {{ .Render "li" }}
+ {{ end }}
+
+
+{{ end }}
+
+{{define "aside" }}
+ {{ if .Params.description }}{{ .Params.description }}
{{ end }}
+{{ end }}
diff --git a/themes/risotto/layouts/_default/single.html b/themes/risotto/layouts/_default/single.html
new file mode 100644
index 0000000..c7bc677
--- /dev/null
+++ b/themes/risotto/layouts/_default/single.html
@@ -0,0 +1,25 @@
+{{ define "main" }}
+
+ {{ .Title | markdownify }}
+
+
+ {{ .Content }}
+
+
+{{ end }}
+
+{{define "aside" }}
+ {{ if .Params.description }}{{ .Params.description }}
{{ end }}
+ {{ if or (.Params.author) (.Params.date) }}
+
+ {{ if .Params.author }}Par {{ .Params.author }}{{ if .Date }}, {{ end }}{{ end }}
+ {{ if .Date }}{{ .Date.Format "02-01-2006" }}{{ end }}
+
+ {{ end }}
+
+ {{ if and (.Params.toc) (.TableOfContents) }}
+
+ Sur cette page:
+ {{ .TableOfContents }}
+ {{ end }}
+{{ end }}
diff --git a/themes/risotto/layouts/index.html b/themes/risotto/layouts/index.html
new file mode 100644
index 0000000..c346e42
--- /dev/null
+++ b/themes/risotto/layouts/index.html
@@ -0,0 +1,4 @@
+{{ define "main" }}
+ {{ .Content }}
+{{ end }}
+
diff --git a/themes/risotto/layouts/partials/about.html b/themes/risotto/layouts/partials/about.html
new file mode 100644
index 0000000..aa1dce3
--- /dev/null
+++ b/themes/risotto/layouts/partials/about.html
@@ -0,0 +1,16 @@
+{{ with .Site.Params.about }}
+
+ {{ with .logo }}{{ . }} {{ end }}
+ {{ with .logo_image }}
{{ end }}
+{{ .title }}
+{{ with .description }}{{ . | markdownify }}
{{ end }}
+
+{{ end }}
+
+
diff --git a/themes/risotto/layouts/partials/footer.html b/themes/risotto/layouts/partials/footer.html
new file mode 100644
index 0000000..3323e4d
--- /dev/null
+++ b/themes/risotto/layouts/partials/footer.html
@@ -0,0 +1,3 @@
+
+{{ .Site.Copyright | markdownify }}
+RΓ©alisΓ© avec β₯οΈ par un debianeu Γ poil dur.
diff --git a/themes/risotto/layouts/partials/head.html b/themes/risotto/layouts/partials/head.html
new file mode 100644
index 0000000..0996289
--- /dev/null
+++ b/themes/risotto/layouts/partials/head.html
@@ -0,0 +1,47 @@
+{{ with .Title }}{{ . }} – {{end}}{{ .Site.Title }}
+{{ with .Site.Params.about }}{{ end }}
+
+
+
+{{ if .Site.Params.noindex }} {{ end }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{{ if os.FileExists "static/favicon.ico" }}{{ end }}
+{{ if os.FileExists "static/favicon-32x32.png" }}{{ end }}
+{{ if os.FileExists "static/favicon-16x16.png" }}{{ end }}
+{{ if os.FileExists "static/apple-touch-icon.png" }}{{ end }}
+{{ if os.FileExists "static/site.webmanifest" }}{{ end }}
+
+
+{{ with .OutputFormats.Get "rss" -}}
+ {{ printf `` .Rel .MediaType.Type .Permalink site.Title | safeHTML }}
+{{ end }}
diff --git a/themes/risotto/layouts/partials/header.html b/themes/risotto/layouts/partials/header.html
new file mode 100644
index 0000000..dbe5bc6
--- /dev/null
+++ b/themes/risotto/layouts/partials/header.html
@@ -0,0 +1,10 @@
+
+
diff --git a/themes/risotto/layouts/partials/lang.html b/themes/risotto/layouts/partials/lang.html
new file mode 100644
index 0000000..43c93d4
--- /dev/null
+++ b/themes/risotto/layouts/partials/lang.html
@@ -0,0 +1,28 @@
+
+ {{ $siteLanguages := .Site.Languages }}
+ {{ $pageLang := .Page.Lang }}
+
+ {{ $currentPage := . }}
+ {{ $pageName := "" }}
+ {{ range .Site.Menus.main }}
+ {{ if eq ($currentPage.Permalink) (.URL | absLangURL) }}
+ {{ $pageName = .Name }}
+ {{ end }}
+ {{ end }}
+
+ {{ range .Page.AllTranslations }}
+ {{ $translation := .}}
+ {{ range $siteLanguages }}
+ {{ if eq $translation.Lang .Lang }}
+ {{ $selected := false }}
+ {{ if eq $pageLang .Lang }}
+
$ echo $LANG
{{ .LanguageName }}
+
+ {{ else }}
+
export LANG={{ .LanguageName }}; ./{{ $pageName }}
+ {{ end }}
+ {{ end }}
+ {{ end }}
+ {{ end }}
+
+
diff --git a/themes/risotto/layouts/post/list.html b/themes/risotto/layouts/post/list.html
new file mode 100644
index 0000000..c4749b0
--- /dev/null
+++ b/themes/risotto/layouts/post/list.html
@@ -0,0 +1,27 @@
+{{ define "main" }}
+
+ {{ .Title | markdownify }}
+ {{ .Content }}
+
+
+ {{ range .Pages }}
+
+
+ {{ .Title | markdownify }}
+
+
+
+
+ {{ .Summary }}
+
+
+ {{ end }}
+{{ end }}
+
+{{define "aside" }}
+ {{ if .Params.description }}{{ .Params.description }}
{{ end }}
+{{ end }}
diff --git a/themes/risotto/theme.toml b/themes/risotto/theme.toml
new file mode 100644
index 0000000..ad5f777
--- /dev/null
+++ b/themes/risotto/theme.toml
@@ -0,0 +1,15 @@
+name = "risotto"
+license = "MIT"
+licenselink = "https://github.com/joeroe/risotto/blob/master/LICENSE"
+description = "A minimalist, responsive theme inspired by terminal ricing aesthetics."
+
+homepage = "https://github.com/joeroe/risotto"
+demosite = "https://risotto.joeroe.io"
+
+tags = ["responsive", "minimal", "dark mode"]
+features = []
+
+[author]
+ name = "Joe Roe"
+ homepage = "https://joeroe.io"
+