diff --git a/README.md b/README.md
index 76f4c1e4..824fbefc 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,7 @@
# Tale
+[![Build Status](https://travis-ci.com/EmielH/tale-hugo.svg?branch=master)](https://travis-ci.com/EmielH/tale-hugo)
+
This is a port of the [Tale theme for Jekyll](https://github.com/chesterhow/tale) to Hugo. Tale is a minimal Jekyll theme curated for storytellers. Checkout the demo [here](https://chesterhow.github.io/tale/). I did not design this theme; I only ported it from Jekyll to Hugo.
![Tale screenshot](https://raw.githubusercontent.com/EmielH/tale-hugo/master/images/screenshot.png)
@@ -36,7 +38,7 @@ hugo server -t tale
### Additional information
-For more information, read the official [setup guide]( https://gohugo.io/overview/installing/) of Hugo.
+For more information, read the official [setup guide](https://gohugo.io/overview/installing/) of Hugo.
### Update the theme
@@ -48,13 +50,138 @@ git submodule update --remote --rebase
If you have cloned the theme, you can run `git pull` inside the theme folder.
+## Configuration
+
+### Menu
+
+The top menu uses [Hugo Menus](https://gohugo.io/content-management/menus/), with the name of the menu being `main`. To turn on the menu, follow the steps there - you can either add something like this to the front-matter of your pages:
+
+```
+---
+menu: "main"
+---
+```
+
+... or you can add a menu section to your `config` file:
+
+```
+sectionPagesMenu = "main"
+```
+
+Or if you want more control, add a specific entry for each item in your menu:
+
+```
+[menu]
+ [[menu.main]]
+ identifier = "about"
+ name = "About"
+ title = "About"
+ url = "/about/"
+ weight = 0
+ [[menu.main]]
+ identifier = "posts"
+ name = "Posts"
+ title = "Posts"
+ url = "/posts/"
+ weight = 0
+```
+
+For menu internationalization/translation, see [Multilingual Mode: Menus](https://gohugo.io/content-management/multilingual/#menus).
+
+### Internationalisation (i18n)
+
+Tale supports using other languages than English. Language files for the texts Tale uses are provided in the `i18n` directory. The default language is English. To switch languages, add the key `defaultContentLanguage` to your `config.toml` file. For example:
+
+```
+defaultContentLanguage = "nl"
+```
+
+To translate texts your site uses, add an `i18n` folder to your site.
+
+Feel free to submit pull requests for other translations of Tale's texts.
+
+[Hugo documentation for multilingual sites](//gohugo.io/content-management/multilingual/)
+
+### Disqus
+
+Tale supports Disqus integration, a comment system that empowers dynamic features to static websites. To install it, just add it to your config as described in [the Hugo Documentation](https://gohugo.io/content-management/comments/#configure-disqus).
+
+```toml
+disqusShortname = "disqus-example"
+```
+
+Add the parameter `comments` in the front-matter of the pages where you want to allow comments
+
+```
+---
+comments: true
+---
+```
+
+### Google Analytics
+
+Tale supports Google Analytics (UA and GA4) integration using Hugo's provided `google_analytics` template.
+
+To enable it, add the `googleAnalytics` tag to your `config.toml`. It will be added on all pages.
+
+```toml
+googleAnalytics = "UA-133700000-0" # or G-1337000000 for GA4
+```
+
+### Custom summaries
+
+Tale allows for writing the summary of your posts manually by setting the `summary` variable in the page frontmatter. If this variable is not set, the summary that Hugo automatically generates will be used.
+
+### Taxonomies
+
+Tale has basic support for taxonomies. Taxonomy and terms pages will be generated when you have defined taxonomies, but you need to include links to these pages yourself. For example, you can add a link to a taxonomy page in `header-menu.html`.
+
+### Placeholder partials
+
+The theme contains placeholder partials to make the theme more flexible and easier to adapt to your site without having to change the theme itself. These are:
+
+- `single/header.html`
+- `single/footer.html`
+
+These are included in the template for a single post, at the top of the post (below the title) and at the bottom of the post, respectively. These can be used, for example, to include additional information about the post author or for related posts. Create a file `/layouts/partials/single/header.html` or `footer.html` on your own site to have it included.
+
+- `index/introduction.html`
+
+This partial is included at the top of the list of posts on the index page, allowing you to add an introduction to your site.
+
+### Copyright message
+
+The copyright message in the footer uses the name of the author of the site, as defined in `config.toml`. For example:
+
+```
+[Author]
+ name = "Emiel"
+```
+
+### Additional CSS files
+
+The theme can load additional CSS files for you, e.g. to override some of the styles, or the CSS that goes with a component that you're using. To add additional CSS files, put these files in the `static` folder of your site and add the `css` parameter to `config.toml`, like so:
+
+```
+[Params]
+css = ["custom.css"]
+```
+
+To load multiple CSS files, use the parameter like this:
+
+```
+[Params]
+css = ["custom.css", "custom2.css"]
+```
+
## Acknowledgments
-Thanks
+Thanks
- to [Chester How](//github.com/chesterhow) for creating the original [Tale theme for Jekyll](https://chesterhow.github.io/tale/),
- to [onedrawingperday](//github.com/onedrawingperday), [bep](//github.com/bep) and [digitalcraftsman](//github.com/digitalcraftsman) for their help in getting the theme working correctly with Hugo,
- to [lucperkins](https://github.com/lucperkins) for the [Fresh theme](https://github.com/lucperkins/hugo-fresh) from which I used some useful snippets of code.
## License
-See [LICENSE](https://github.com/EmielH/tale-hugo/blob/master/LICENSE).
\ No newline at end of file
+
+See [LICENSE](https://github.com/EmielH/tale-hugo/blob/master/LICENSE).
diff --git a/assets/scss/tale.scss b/assets/scss/tale.scss
index 3cdfa991..53f9decb 100644
--- a/assets/scss/tale.scss
+++ b/assets/scss/tale.scss
@@ -4,5 +4,7 @@
@import 'tale/post';
@import 'tale/syntax';
@import 'tale/layout';
+@import 'tale/toc';
@import 'tale/pagination';
@import 'tale/catalogue';
+@import 'tale/disqus';
diff --git a/assets/scss/tale/_base.scss b/assets/scss/tale/_base.scss
index a5135795..c096ebbb 100644
--- a/assets/scss/tale/_base.scss
+++ b/assets/scss/tale/_base.scss
@@ -5,7 +5,8 @@
html,
body {
- color: $default-color;
+ color: var(--default-color);
+ background-color: var(--background-color);
margin: 0;
padding: 0;
}
@@ -30,19 +31,19 @@ h3,
h4,
h5,
h6 {
- color: $default-shade;
+ color: var(--default-shade);
font-family: $sans-serif;
line-height: normal;
}
a {
- color: $blue;
+ color: var(--blue);
text-decoration: none;
}
blockquote {
- border-left: .25rem solid $grey-2;
- color: $grey-1;
+ border-left: .25rem solid var(--grey-2);
+ color: var(--grey-1);
margin: .8rem 0;
padding: .5rem 1rem;
diff --git a/assets/scss/tale/_catalogue.scss b/assets/scss/tale/_catalogue.scss
index 33310169..ec065a16 100644
--- a/assets/scss/tale/_catalogue.scss
+++ b/assets/scss/tale/_catalogue.scss
@@ -1,8 +1,8 @@
.catalogue {
&-item {
- border-bottom: 1px solid $grey-2;
- color: $default-color;
- display: inline-block;
+ border-bottom: 1px solid var(--grey-2);
+ color: var(--default-color);
+ display: block;
padding: 2rem 0;
&:hover .catalogue-line,
@@ -16,13 +16,13 @@
}
&-time {
- color: $default-tint;
+ color: var(--default-tint);
font-family: $serif-secondary;
letter-spacing: .5px;
}
&-title {
- color: $default-shade;
+ color: var(--default-shade);
display: block;
font-family: $sans-serif;
font-size: 2rem;
@@ -31,8 +31,8 @@
}
&-line {
- @include transition(all .3s ease-out);
- border-top: .2rem solid $default-shade;
+ @include transition($color-transition, width .3s ease-out);
+ border-top: .2rem solid var(--default-shade);
display: block;
width: 2rem;
}
diff --git a/assets/scss/tale/_code.scss b/assets/scss/tale/_code.scss
index 1597e13f..6d97161d 100644
--- a/assets/scss/tale/_code.scss
+++ b/assets/scss/tale/_code.scss
@@ -4,11 +4,12 @@ code {
}
code {
- background-color: $grey-3;
+ background-color: var(--grey-4);
border-radius: 3px;
- color: $code-color;
+ color: var(--code-color);
font-size: 85%;
padding: .25em .5em;
+ white-space: pre-wrap;
}
pre {
@@ -22,8 +23,14 @@ pre code {
padding: 0;
}
+pre code > span {
+ // This isn't very pretty, but the precise RGB values are generated
+ // server-side, the usual trick of putting the colors in CSS variables does
+ // not quite work and this is the best I could come up with.
+ filter: var(--code-filter);
+}
.highlight {
- background-color: $grey-3;
+ background-color: var(--grey-4);
border-radius: 3px;
line-height: 1.4;
margin: 0 0 1rem;
@@ -35,7 +42,7 @@ pre code {
}
.lineno {
- color: $default-tint;
+ color: var(--default-tint);
display: inline-block; // Ensures the null space also isn't selectable
padding: 0 .75rem 0 .25rem;
// Make sure numbers aren't selectable
diff --git a/assets/scss/tale/_disqus.scss b/assets/scss/tale/_disqus.scss
new file mode 100644
index 00000000..7474acfb
--- /dev/null
+++ b/assets/scss/tale/_disqus.scss
@@ -0,0 +1,3 @@
+.article-discussion {
+ margin: 0;
+}
diff --git a/assets/scss/tale/_layout.scss b/assets/scss/tale/_layout.scss
index ba4a7b0f..c459510e 100644
--- a/assets/scss/tale/_layout.scss
+++ b/assets/scss/tale/_layout.scss
@@ -1,10 +1,18 @@
+* {
+ @include transition($color-transition);
+}
+
.container {
margin: 0 auto;
max-width: 800px;
width: 80%;
}
-main,
+// Carve out an exception from the 80% narrowing of the viewport for the table
+// of contents. This is ugly, but there isn't a better way, since the table of
+// contents must be a child of the "main" element so that it its scrolling
+// behavior is intuitive.
+main > *,
footer,
.nav-container {
display: block;
@@ -13,8 +21,19 @@ footer,
width: 80%;
}
+#darkModeToggle {
+ float: right;
+ position: sticky;
+ top: 2rem;
+ margin-right: 2rem;
+ margin-top: 2rem;
+ font-size: 2rem;
+
+ cursor: pointer;
+}
+
.nav {
- box-shadow: 0 2px 2px -2px $shadow-color;
+ box-shadow: 0 2px 2px -2px var(--shadow-color);
overflow: auto;
&-container {
@@ -24,8 +43,8 @@ footer,
}
&-title {
- @include transition(all .2s ease-out);
- color: $default-color;
+ @include transition($color-transition, opacity .2s ease-out);
+ color: var(--default-color);
display: inline-block;
margin: 0;
padding-right: .2rem;
@@ -44,8 +63,8 @@ footer,
}
li {
- @include transition(all .2s ease-out);
- color: $default-color;
+ @include transition($color-transition, opacity .2s ease-out);
+ color: var(--default-color);
display: inline-block;
opacity: .6;
padding: 0 2rem 0 0;
@@ -61,7 +80,7 @@ footer,
}
a {
- color: $default-color;
+ color: var(--default-color);
font-family: $sans-serif;
}
}
@@ -86,7 +105,7 @@ footer {
text-align: center;
span {
- color: $default-color;
+ color: var(--default-color);
font-size: .8rem;
}
}
diff --git a/assets/scss/tale/_pagination.scss b/assets/scss/tale/_pagination.scss
index 3700e152..8b391b5d 100644
--- a/assets/scss/tale/_pagination.scss
+++ b/assets/scss/tale/_pagination.scss
@@ -1,18 +1,18 @@
.pagination {
- border-top: .5px solid $grey-2;
+ border-top: .5px solid var(--grey-2);
font-family: $serif-secondary;
padding-top: 2rem;
position: relative;
text-align: center;
span {
- color: $default-shade;
+ color: var(--default-shade);
font-size: 1.1rem;
}
.top {
- @include transition(all .3s ease-out);
- color: $default-color;
+ @include transition($color-transition, opacity .3s ease-out);
+ color: var(--default-color);
font-family: $sans-serif;
font-size: 1.1rem;
opacity: .6;
@@ -23,8 +23,8 @@
}
.arrow {
- @include transition(all .3s ease-out);
- color: $default-color;
+ @include transition($color-transition, opacity .3s ease-out);
+ color: var(--default-color);
position: absolute;
&:hover,
diff --git a/assets/scss/tale/_post.scss b/assets/scss/tale/_post.scss
index 3680d80b..61cff18e 100644
--- a/assets/scss/tale/_post.scss
+++ b/assets/scss/tale/_post.scss
@@ -2,7 +2,7 @@
padding: 3rem 0;
&-info {
- color: $default-tint;
+ color: var(--default-tint);
font-family: $serif-secondary;
letter-spacing: 0.5px;
text-align: center;
@@ -13,7 +13,7 @@
}
&-title {
- color: $default-shade;
+ color: var(--default-shade);
font-family: $sans-serif;
font-size: 4rem;
margin: 1rem 0;
@@ -21,7 +21,7 @@
}
&-line {
- border-top: 0.4rem solid $default-shade;
+ border-top: 0.4rem solid var(--default-shade);
display: block;
margin: 0 auto 3rem;
width: 4rem;
@@ -41,7 +41,7 @@
}
img + em {
- color: $default-tint;
+ color: var(--default-tint);
display: block;
font-family: $sans-serif;
font-size: 0.9rem;
diff --git a/assets/scss/tale/_toc.scss b/assets/scss/tale/_toc.scss
new file mode 100644
index 00000000..08ccd475
--- /dev/null
+++ b/assets/scss/tale/_toc.scss
@@ -0,0 +1,96 @@
+aside.toc {
+ position: sticky;
+ top: 0;
+ max-width: 30%;
+
+ // We want the table of contents to be on the left (horizontally), to be
+ // positioned at a specific point (vertically), stick to the top on scroll
+ // and it should not affect the layout of other elements.
+ // "float: left" accomplishes the horizontal positioning, position in the
+ // element tree the vertical positioning and "position: sticky" does the
+ // stickiness. "height: 0" makes sure that the flow of other elements is not
+ // affected.
+ //
+ // There does not seem to be a better way to do this unless one is willing
+ // to implement scrolling in JS: "position" must be set to sticky so neither
+ // fixed, nor absolute, nor relative positioning can be used.
+ float: left;
+ height: 0;
+ overflow: display;
+
+ // This is apparenty necessary so that the table of contents covers elements
+ // with the "filter:" property set.
+ z-index: 1;
+}
+
+#tocTitle {
+ // This is so that we can measure it in JS
+ width: fit-content;
+}
+
+#tocContainer:hover {
+ width: calc(2rem + var(--measured-expanded-width));
+}
+
+#tocContainer:hover div#tocCollapsible {
+ height: var(--measured-height);
+ width: var(--measured-expanded-width);
+}
+
+#tocContainer {
+ background-color: var(--grey-3);
+ border-radius: 1rem;
+ margin: 2rem;
+ padding: 1rem;
+
+ // This makes the gap between the two contained divs vanish. Why that gap
+ // exists, no clue.
+ display: flex;
+ flex-direction: column;
+
+ // We want to hide the table of contents before revealing it on hover
+ overflow: hidden;
+
+ // In addition to the measured width of the title, we need to add the two
+ // rems for the border (we are using box-sizing: border-box). Also add a
+ // reasonable default value to minimize visual changes while the page is
+ // loading.
+ width: calc(2rem + var(--measured-title-width));
+ --measured-title-width: 2.4rem;
+
+@include transition(
+ $color-transition,
+ width .1s ease-out,
+ height .1s ease-out);
+}
+
+#tocContainer > div {
+ border-left: 0.4rem solid var(--default-shade);
+ padding-left: 1rem;
+}
+
+#tocContainer div#tocCollapsible {
+ // Collapsed by default
+ height: 0;
+
+ // If we did not force this element to a given width, it would keep
+ // re-wrapping during the opening/closing transition.
+ width: var(--measured-expanded-width);
+
+ // No transition on width so that there is no re-wrapping during the
+ // opening/closing transition
+ @include transition($color-transition, height .1s ease-out);
+}
+
+nav#TableOfContents ul {
+ list-style-type: none;
+ padding-inline-start: 1rem;
+}
+
+nav#TableOfContents > ul {
+ padding-inline-start: 0;
+}
+
+nav#TableOfContents li {
+ margin-top: 0.4rem;
+}
diff --git a/assets/scss/tale/_variables.scss b/assets/scss/tale/_variables.scss
index 8a064f32..43914baf 100644
--- a/assets/scss/tale/_variables.scss
+++ b/assets/scss/tale/_variables.scss
@@ -1,14 +1,47 @@
// Colors
-$default-color: #555;
-$default-shade: #353535;
-$default-tint: #aaa;
-$grey-1: #979797;
-$grey-2: #e5e5e5;
-$grey-3: #f9f9f9;
-$white: #fff;
-$blue: #4a9ae1;
-$shadow-color: rgba(0, 0, 0, .2);
-$code-color: #bf616a;
+// This is necessary because some elements want to set transitions themselves,
+// which would result in deleting the color transitions specified in less
+// specific selectors.
+$color-transition:
+ background-color .4s ease-out,
+ color .4s ease-out,
+ border-color .4s ease-out,
+ box-shadow .4s ease-out;
+
+
+// Make the default be dark mode. That way, the more complicated case is the
+// default and thus bugs are discovered earlier.
+:root.light {
+ --default-color: #555;
+ --background-color: #fff;
+ --default-shade: #353535;
+ --default-tint: #aaa;
+ --grey-1: #979797;
+ --grey-2: #e5e5e5;
+ --grey-3: #f0f0f0;
+ --grey-4: #f9f9f9;
+ --white: #fff;
+ --blue: #4a9ae1;
+ --shadow-color: rgba(0, 0, 0, .2);
+ --code-color: #bf616a;
+ --code-filter: ;
+}
+
+:root:not(.light) {
+ --default-color: #888;
+ --background-color: #000;
+ --default-shade: #989898;
+ --default-tint: #555;
+ --grey-1: #606060;
+ --grey-2: #404040;
+ --grey-3: #202020;
+ --grey-4: #181818;
+ --white: #fff;
+ --blue: #1d6baf;
+ --shadow-color: rgba(0, 0, 0, .2);
+ --code-color: #a3434c;
+ --code-filter: contrast(0.4) brightness(0.9);
+}
// Fonts
$serif-primary: 'Libre Baskerville', 'Times New Roman', Times, serif;
diff --git a/data/months_de.yaml b/data/months_de.yaml
new file mode 100644
index 00000000..f18a1e37
--- /dev/null
+++ b/data/months_de.yaml
@@ -0,0 +1,12 @@
+1: "Januar"
+2: "Februar"
+3: "März"
+4: "April"
+5: "Mai"
+6: "Juni"
+7: "Juli"
+8: "August"
+9: "September"
+10: "Oktober"
+11: "November"
+12: "Dezember"
diff --git a/data/months_es.yaml b/data/months_es.yaml
new file mode 100644
index 00000000..e2fc147e
--- /dev/null
+++ b/data/months_es.yaml
@@ -0,0 +1,12 @@
+1: "enero"
+2: "febrero"
+3: "marzo"
+4: "abril"
+5: "mayo"
+6: "junio"
+7: "julio"
+8: "agosto"
+9: "septiembre"
+10: "octubre"
+11: "noviembre"
+12: "diciembre"
diff --git a/data/months_fr.yaml b/data/months_fr.yaml
new file mode 100644
index 00000000..21c9088f
--- /dev/null
+++ b/data/months_fr.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/data/months_it.yaml b/data/months_it.yaml
new file mode 100644
index 00000000..9f584cdf
--- /dev/null
+++ b/data/months_it.yaml
@@ -0,0 +1,12 @@
+1: "gennaio"
+2: "febbraio"
+3: "marzo"
+4: "aprile"
+5: "maggio"
+6: "giugno"
+7: "luglio"
+8: "agosto"
+9: "settembre"
+10: "ottobre"
+11: "novembre"
+12: "dicembre"
diff --git a/data/months_ku.yaml b/data/months_ku.yaml
new file mode 100644
index 00000000..414251dc
--- /dev/null
+++ b/data/months_ku.yaml
@@ -0,0 +1,12 @@
+1: "Adar"
+2: "Avrêl"
+3: "Gulan"
+4: "Pûşper"
+5: "Tîrmeh"
+6: "Gelawêj"
+7: "Rezber"
+8: "Kewçêr"
+9: "Sermawez"
+10: "Berfanbar"
+11: "Rêbendan"
+12: "Reşemî"
diff --git a/data/months_nl.yaml b/data/months_nl.yaml
new file mode 100644
index 00000000..c9798928
--- /dev/null
+++ b/data/months_nl.yaml
@@ -0,0 +1,12 @@
+1: "januari"
+2: "februari"
+3: "maart"
+4: "april"
+5: "mei"
+6: "juni"
+7: "juli"
+8: "augustus"
+9: "september"
+10: "oktober"
+11: "november"
+12: "december"
\ No newline at end of file
diff --git a/data/months_pl.yaml b/data/months_pl.yaml
new file mode 100644
index 00000000..d5f3756d
--- /dev/null
+++ b/data/months_pl.yaml
@@ -0,0 +1,12 @@
+1: "stycznia"
+2: "lutego"
+3: "marca"
+4: "kwietnia"
+5: "maja"
+6: "czerwca"
+7: "lipca"
+8: "sierpnia"
+9: "września"
+10: "października"
+11: "listopada"
+12: "grudnia"
diff --git a/i18n/de.toml b/i18n/de.toml
new file mode 100644
index 00000000..c587b3f7
--- /dev/null
+++ b/i18n/de.toml
@@ -0,0 +1,11 @@
+[writtenBy]
+other = "Von"
+
+[on]
+other = "am"
+
+[generator]
+other = "Made with Hugo using the Tale theme."
+
+[publishdate]
+other = "{{ .PublishDate.Day }}. {{ index $.Site.Data.months_de (printf \"%d\" .PublishDate.Month) }} {{ .PublishDate.Year }}"
diff --git a/i18n/en.toml b/i18n/en.toml
new file mode 100644
index 00000000..fc9961f6
--- /dev/null
+++ b/i18n/en.toml
@@ -0,0 +1,11 @@
+[writtenBy]
+other = "Written by"
+
+[on]
+other = "on"
+
+[generator]
+other = "Made with Hugo using the Tale theme."
+
+[publishdate]
+other = "{{ .PublishDate.Format \"January 2, 2006\" }}"
\ No newline at end of file
diff --git a/i18n/es.toml b/i18n/es.toml
new file mode 100644
index 00000000..25f657e8
--- /dev/null
+++ b/i18n/es.toml
@@ -0,0 +1,11 @@
+[writtenBy]
+other = "Escrito por"
+
+[on]
+other = "el"
+
+[generator]
+other = "Hecho con Hugo usando el tema Tale."
+
+[publishdate]
+other = "{{ .PublishDate.Day }} de {{ index $.Site.Data.months_es (printf \"%d\" .PublishDate.Month) }} de {{ .PublishDate.Year }}"
diff --git a/i18n/fr.toml b/i18n/fr.toml
new file mode 100644
index 00000000..a13b9935
--- /dev/null
+++ b/i18n/fr.toml
@@ -0,0 +1,11 @@
+[writtenBy]
+other = "Écrit par"
+
+[on]
+other = "le"
+
+[generator]
+other = "Fait avec Hugo, à partir du thème Tale."
+
+[publishdate]
+other = "{{ .PublishDate.Day }} {{ index $.Site.Data.months_fr (printf \"%d\" .PublishDate.Month) }} {{ .PublishDate.Year }}"
diff --git a/i18n/it.toml b/i18n/it.toml
new file mode 100644
index 00000000..a0765a68
--- /dev/null
+++ b/i18n/it.toml
@@ -0,0 +1,11 @@
+[writtenBy]
+other = "Scritto da"
+
+[on]
+other = "il"
+
+[generator]
+other = "Creato con Hugo usando il tema Tale."
+
+[publishdate]
+other = "{{ .PublishDate.Day }} {{ index $.Site.Data.months_it (printf \"%d\" .PublishDate.Month) }} {{ .PublishDate.Year }}"
diff --git a/i18n/ku.toml b/i18n/ku.toml
new file mode 100644
index 00000000..43bdc5f4
--- /dev/null
+++ b/i18n/ku.toml
@@ -0,0 +1,11 @@
+[writtenBy]
+other = "Nivîskar:"
+
+[on]
+other = "li"
+
+[generator]
+other = "Bi Hugo û Tale-ê hatiye çêkirin."
+
+[publishdate]
+other = "{{ .PublishDate.Day }} {{ index $.Site.Data.months_ku (printf \"%d\" .PublishDate.Month) }} {{ .PublishDate.Year }}"
diff --git a/i18n/nl.toml b/i18n/nl.toml
new file mode 100644
index 00000000..8357c08d
--- /dev/null
+++ b/i18n/nl.toml
@@ -0,0 +1,11 @@
+[writtenBy]
+other = "Geschreven door"
+
+[on]
+other = "op"
+
+[generator]
+other = "Gemaakt met Hugo en thema Tale."
+
+[publishdate]
+other = "{{ .PublishDate.Day }} {{ index $.Site.Data.months_nl (printf \"%d\" .PublishDate.Month) }} {{ .PublishDate.Year }}"
diff --git a/i18n/pl.toml b/i18n/pl.toml
new file mode 100644
index 00000000..44b5ffaa
--- /dev/null
+++ b/i18n/pl.toml
@@ -0,0 +1,11 @@
+[writtenBy]
+other = "Autor"
+
+[on]
+other = "opublikowano"
+
+[generator]
+other = "Made with Hugo using the Tale theme."
+
+[publishdate]
+other = "{{ .PublishDate.Day }}. {{ index $.Site.Data.months_pl (printf \"%d\" .PublishDate.Month) }} {{ .PublishDate.Year }}"
diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html
index 5f8e2ec0..4bf1dc87 100644
--- a/layouts/_default/baseof.html
+++ b/layouts/_default/baseof.html
@@ -1,11 +1,10 @@
-
- {{- partial "head.html" . -}}
+
+ {{ partial "head.html" . }}
- {{- if .Next }}
- ←
- {{- end }}
{{- if .Prev }}
- →
+ ←
+ {{- end }}
+ {{- if .Next }}
+ →
{{- end }}
Top
-{{- partial "footer.html" . }}
\ No newline at end of file
+{{ end }}
diff --git a/layouts/_default/summary.html b/layouts/_default/summary.html
new file mode 100644
index 00000000..a673fe7b
--- /dev/null
+++ b/layouts/_default/summary.html
@@ -0,0 +1,11 @@
+
+
{{ if .Paginator.HasNext }}
→
{{ end }}
-
+
{{ .Paginator.PageNumber }}
-{{ partial "footer.html" . }}
\ No newline at end of file
+{{ end }}
diff --git a/layouts/partials/darkmode.html b/layouts/partials/darkmode.html
new file mode 100644
index 00000000..1016b536
--- /dev/null
+++ b/layouts/partials/darkmode.html
@@ -0,0 +1,3 @@
+