Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/rmsubekti/the-roots-home.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRahmat Subekti <rahmatsubekti@live.com>2020-06-29 18:30:10 +0300
committerRahmat Subekti <rahmatsubekti@live.com>2020-06-29 18:30:10 +0300
commita60eecf43834fa664c31f8f2cd40840caf2f352b (patch)
tree5e0be4898cad08e7b75f4d84eb57569ea54294b4
root testing
-rw-r--r--.gitignore2
-rw-r--r--archetypes/default.md6
-rw-r--r--config.yml42
-rw-r--r--content/_index.md5
-rw-r--r--content/blog/_index.md6
-rw-r--r--content/blog/am-i-groot/_index.md6
-rw-r--r--content/blog/am-i-groot/i-am-root.md20
-rw-r--r--content/blog/i-am-root.md30
-rw-r--r--content/groot/_index.md5
-rw-r--r--content/groot/i-am-groot.md44
-rw-r--r--content/groot/tenor.gifbin0 -> 1020298 bytes
-rw-r--r--content/groot/tenor2.gifbin0 -> 6494060 bytes
-rw-r--r--content/groot/un8hm.jpgbin0 -> 32187 bytes
-rw-r--r--content/i-am-root.md15
-rw-r--r--content/root/index.md7
-rw-r--r--content/root/the-prequel_o_3726397.webpbin0 -> 29118 bytes
-rw-r--r--themes/the-roots-home/LICENSE20
-rw-r--r--themes/the-roots-home/README.md15
-rw-r--r--themes/the-roots-home/archetypes/default.md5
-rwxr-xr-xthemes/the-roots-home/assets/_scss/base.scss245
-rw-r--r--themes/the-roots-home/assets/_scss/layout.scss166
-rw-r--r--themes/the-roots-home/assets/_scss/media.scss19
-rw-r--r--themes/the-roots-home/assets/_scss/print.scss99
-rw-r--r--themes/the-roots-home/assets/_scss/syntax-highlighting.scss232
-rw-r--r--themes/the-roots-home/assets/app.js136
-rw-r--r--themes/the-roots-home/assets/main.scss59
-rw-r--r--themes/the-roots-home/assets/sw.js210
-rw-r--r--themes/the-roots-home/layouts/404.html0
-rw-r--r--themes/the-roots-home/layouts/_default/_markup/render-link.html2
-rw-r--r--themes/the-roots-home/layouts/_default/baseof.html11
-rw-r--r--themes/the-roots-home/layouts/_default/list.html46
-rw-r--r--themes/the-roots-home/layouts/_default/single.html35
-rw-r--r--themes/the-roots-home/layouts/index.webmanifest65
-rw-r--r--themes/the-roots-home/layouts/partials/footer.html11
-rw-r--r--themes/the-roots-home/layouts/partials/head.html34
-rw-r--r--themes/the-roots-home/layouts/partials/header.html27
-rw-r--r--themes/the-roots-home/layouts/partials/meta/icons.html38
-rw-r--r--themes/the-roots-home/layouts/partials/meta/json-ld.html117
-rw-r--r--themes/the-roots-home/layouts/robots.txt1
-rw-r--r--themes/the-roots-home/layouts/shortcodes/indexdir.html13
-rw-r--r--themes/the-roots-home/screenshot.pngbin0 -> 42448 bytes
-rw-r--r--themes/the-roots-home/static/favicon.icobin0 -> 1150 bytes
-rw-r--r--themes/the-roots-home/static/icons/114.pngbin0 -> 952 bytes
-rw-r--r--themes/the-roots-home/static/icons/120.pngbin0 -> 989 bytes
-rw-r--r--themes/the-roots-home/static/icons/144.pngbin0 -> 1186 bytes
-rw-r--r--themes/the-roots-home/static/icons/150.pngbin0 -> 3305 bytes
-rw-r--r--themes/the-roots-home/static/icons/152.pngbin0 -> 1245 bytes
-rw-r--r--themes/the-roots-home/static/icons/16.pngbin0 -> 254 bytes
-rw-r--r--themes/the-roots-home/static/icons/180.pngbin0 -> 1440 bytes
-rw-r--r--themes/the-roots-home/static/icons/192.pngbin0 -> 1557 bytes
-rw-r--r--themes/the-roots-home/static/icons/256.pngbin0 -> 2166 bytes
-rw-r--r--themes/the-roots-home/static/icons/310.pngbin0 -> 9279 bytes
-rw-r--r--themes/the-roots-home/static/icons/32.pngbin0 -> 358 bytes
-rw-r--r--themes/the-roots-home/static/icons/36.pngbin0 -> 389 bytes
-rw-r--r--themes/the-roots-home/static/icons/48.pngbin0 -> 480 bytes
-rw-r--r--themes/the-roots-home/static/icons/512.pngbin0 -> 4308 bytes
-rw-r--r--themes/the-roots-home/static/icons/57.pngbin0 -> 536 bytes
-rw-r--r--themes/the-roots-home/static/icons/60.pngbin0 -> 557 bytes
-rw-r--r--themes/the-roots-home/static/icons/70.pngbin0 -> 2304 bytes
-rw-r--r--themes/the-roots-home/static/icons/72.pngbin0 -> 653 bytes
-rw-r--r--themes/the-roots-home/static/icons/76.pngbin0 -> 690 bytes
-rw-r--r--themes/the-roots-home/static/icons/96.pngbin0 -> 829 bytes
-rw-r--r--themes/the-roots-home/static/icons/favicon.icobin0 -> 1150 bytes
-rw-r--r--themes/the-roots-home/static/icons/icon.svg31
-rw-r--r--themes/the-roots-home/theme.yml21
65 files changed, 1846 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..bfa72bc
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+*/*_gen
+**/*public \ No newline at end of file
diff --git a/archetypes/default.md b/archetypes/default.md
new file mode 100644
index 0000000..00e77bd
--- /dev/null
+++ b/archetypes/default.md
@@ -0,0 +1,6 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+date: {{ .Date }}
+draft: true
+---
+
diff --git a/config.yml b/config.yml
new file mode 100644
index 0000000..f846a16
--- /dev/null
+++ b/config.yml
@@ -0,0 +1,42 @@
+baseURL: https://rmsubekti.github.io/the-roots-home/
+languageCode: id-ID
+title: Root's Home
+params:
+ Description: I'm root, I am root, i am root. 😁 i am root.
+disqusShortname:
+theme: the-roots-home
+
+enableGitInfo: true
+enableEmoji: true
+enableRobotsTXT: true
+
+# Syntax Highlight Options
+pygmentsCodeFencesGuessSyntax: true
+pygmentsCodeFences : true
+pygmentsUseClasses: true
+pygmentsStyle: vs
+pygmentsOptions:
+ linenos: true
+
+markup:
+ defaultMarkdownHandler: goldmark
+ goldmark:
+ renderer:
+ unsafe: true
+
+mediaTypes:
+ "application/manifest+json":
+ suffixes: ["webmanifest"]
+
+outputFormats:
+ WebAppManifest:
+ mediaType: application/manifest+json
+ rel: manifest
+
+outputs:
+ page:
+ - HTML
+ home:
+ - HTML
+ - RSS
+ - WebAppManifest \ No newline at end of file
diff --git a/content/_index.md b/content/_index.md
new file mode 100644
index 0000000..38c19d4
--- /dev/null
+++ b/content/_index.md
@@ -0,0 +1,5 @@
+---
+title: Index of ~
+weight: 1
+---
+I am root. \ No newline at end of file
diff --git a/content/blog/_index.md b/content/blog/_index.md
new file mode 100644
index 0000000..0eeea5f
--- /dev/null
+++ b/content/blog/_index.md
@@ -0,0 +1,6 @@
+---
+title: Blog
+weight: 2
+---
+I am blog.
+
diff --git a/content/blog/am-i-groot/_index.md b/content/blog/am-i-groot/_index.md
new file mode 100644
index 0000000..c6508b9
--- /dev/null
+++ b/content/blog/am-i-groot/_index.md
@@ -0,0 +1,6 @@
+---
+title: Am I Groot?
+weight: 3
+---
+am i Groot?
+
diff --git a/content/blog/am-i-groot/i-am-root.md b/content/blog/am-i-groot/i-am-root.md
new file mode 100644
index 0000000..4e6ab2b
--- /dev/null
+++ b/content/blog/am-i-groot/i-am-root.md
@@ -0,0 +1,20 @@
+---
+title: "I Am Root"
+date: 2020-06-29T16:39:46+07:00
+---
+
+# I AM ROOT
+
+i'm root
+
+## I Am Root
+
+i am root
+
+### i AM Root
+
+i am root
+
+#### I am root
+
+i am root \ No newline at end of file
diff --git a/content/blog/i-am-root.md b/content/blog/i-am-root.md
new file mode 100644
index 0000000..5bf7549
--- /dev/null
+++ b/content/blog/i-am-root.md
@@ -0,0 +1,30 @@
+---
+title: "I Am RooT!"
+date: 2020-06-29T15:41:45+07:00
+author: root
+---
+
+i am root
+
+- i am root
+- i am root
+
+
+i am root
+---
+```bash
+~: echo "i am root"
+i am root
+~:
+```
+
+# I Am Root
+
+i am `root`
+
+ i am root
+
+
+## i am root
+
+i am root \ No newline at end of file
diff --git a/content/groot/_index.md b/content/groot/_index.md
new file mode 100644
index 0000000..4b3e85a
--- /dev/null
+++ b/content/groot/_index.md
@@ -0,0 +1,5 @@
+---
+title: Groot
+weight: 2
+---
+I am Groot \ No newline at end of file
diff --git a/content/groot/i-am-groot.md b/content/groot/i-am-groot.md
new file mode 100644
index 0000000..410cdd9
--- /dev/null
+++ b/content/groot/i-am-groot.md
@@ -0,0 +1,44 @@
+---
+title: "I Am Groot"
+date: 2020-06-29T15:42:01+07:00
+categories: Groot
+---
+i am groot?
+
+![i am groot](/groot/un8hm.jpg)
+
+i am groot [@https://imgflip.com/i/un8hm](https://imgflip.com/i/un8hm)
+
+I Am gROOT!!
+---
+ i am groot
+ ![i am groot](/groot/tenor.gif)
+ i am groot
+
+i am groot:
+
+i am groot
+![i am groot](/groot/tenor.gif)
+i am groot
+
+
+i am groot [@https://tenor.com/view/real-groot-baby-groot-gif-7317011](https://tenor.com/view/real-groot-baby-groot-gif-7317011)
+
+**i am groot !!!**
+
+ i am groot
+
+ ![i am groot](/groot/tenor.gif)
+
+ i am groot
+
+i am groot:
+
+i am groot
+
+![i am groot](/groot/tenor2.gif)
+
+i am groot
+
+
+i am groot [@https://tenor.com/view/groot-happy-dance-oh-yeah-marvel-marvel-comics-gif-17641744](https://tenor.com/view/groot-happy-dance-oh-yeah-marvel-marvel-comics-gif-17641744)
diff --git a/content/groot/tenor.gif b/content/groot/tenor.gif
new file mode 100644
index 0000000..6428d3f
--- /dev/null
+++ b/content/groot/tenor.gif
Binary files differ
diff --git a/content/groot/tenor2.gif b/content/groot/tenor2.gif
new file mode 100644
index 0000000..30f14c5
--- /dev/null
+++ b/content/groot/tenor2.gif
Binary files differ
diff --git a/content/groot/un8hm.jpg b/content/groot/un8hm.jpg
new file mode 100644
index 0000000..6441091
--- /dev/null
+++ b/content/groot/un8hm.jpg
Binary files differ
diff --git a/content/i-am-root.md b/content/i-am-root.md
new file mode 100644
index 0000000..bfda746
--- /dev/null
+++ b/content/i-am-root.md
@@ -0,0 +1,15 @@
+---
+title: "I Am Root"
+date: 2020-06-29T15:42:16+07:00
+tags: [i,am,root]
+---
+
+i am /
+
+root!
+
+i am root,
+i am root
+
+
+i Am Root, [am i root?](/tags/) \ No newline at end of file
diff --git a/content/root/index.md b/content/root/index.md
new file mode 100644
index 0000000..43659a3
--- /dev/null
+++ b/content/root/index.md
@@ -0,0 +1,7 @@
+---
+title: "Root"
+date: 2020-06-29T15:47:22+07:00
+---
+i am root , i am root
+![i-am-root](the-prequel_o_3726397.webp)
+i am root [@ https://www.memecenter.com/fun/3726397/the-prequel/](https://www.memecenter.com/fun/3726397/the-prequel/) \ No newline at end of file
diff --git a/content/root/the-prequel_o_3726397.webp b/content/root/the-prequel_o_3726397.webp
new file mode 100644
index 0000000..b763b34
--- /dev/null
+++ b/content/root/the-prequel_o_3726397.webp
Binary files differ
diff --git a/themes/the-roots-home/LICENSE b/themes/the-roots-home/LICENSE
new file mode 100644
index 0000000..a20d523
--- /dev/null
+++ b/themes/the-roots-home/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2020 Rahmat Subekti
+
+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/themes/the-roots-home/README.md b/themes/the-roots-home/README.md
new file mode 100644
index 0000000..77880f7
--- /dev/null
+++ b/themes/the-roots-home/README.md
@@ -0,0 +1,15 @@
+The Root's Home
+---
+Well, I am not root.
+
+![screenshot](https://github.com/rmsubekti/the-roots-home/raw/master/screenshot.png)
+
+
+Demo is right here [Root's Home](https://rmsubekti.github.io/the-roots-home/)
+
+
+Built With GoHugo.io
+
+Icons By Ionicons.com
+
+[License](https://raw.githubusercontent.com/rmsubekti/the-roots-home/master/LICENSE) \ No newline at end of file
diff --git a/themes/the-roots-home/archetypes/default.md b/themes/the-roots-home/archetypes/default.md
new file mode 100644
index 0000000..26f317f
--- /dev/null
+++ b/themes/the-roots-home/archetypes/default.md
@@ -0,0 +1,5 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+date: {{ .Date }}
+draft: true
+---
diff --git a/themes/the-roots-home/assets/_scss/base.scss b/themes/the-roots-home/assets/_scss/base.scss
new file mode 100755
index 0000000..3f12da8
--- /dev/null
+++ b/themes/the-roots-home/assets/_scss/base.scss
@@ -0,0 +1,245 @@
+/**
+ * Reset some basic elements
+ */
+ body, h1, h2, h3, h4, h5, h6,
+ p, blockquote, pre, hr,
+ dl, dd, ol, ul, figure {
+ margin: 0;
+ padding: 0;
+ }
+
+
+
+ /**
+ * Basic styling
+ */
+ body {
+ font: $base-font-weight #{$base-font-size}/#{$base-line-height} $base-font-family;
+ color: $text-color;
+ background-color: $background-color;
+ -webkit-text-size-adjust: 100%;
+ -webkit-font-feature-settings: "kern" 1;
+ -moz-font-feature-settings: "kern" 1;
+ -o-font-feature-settings: "kern" 1;
+ font-feature-settings: "kern" 1;
+ font-kerning: normal;
+ margin: 0 auto;
+ padding: 0 $spacing-unit / 2;
+ max-width: $content-width;
+ }
+
+
+
+ /**
+ * Set `margin-bottom` to maintain vertical rhythm
+ */
+ h1, h2, h3, h4, h5, h6,
+ p, blockquote, pre,
+ ul, ol, dl, figure,
+ %vertical-rhythm {
+ margin-bottom: $spacing-unit / 2;
+ }
+
+
+
+ /**
+ * `main` element
+ */
+ main {
+ display: block; /* Default value of `display` of `main` element is 'inline' in IE 11. */
+ margin: $spacing-unit*.55 0;
+ }
+
+
+
+ /**
+ * Images
+ */
+ img {
+ max-width: 100%;
+ vertical-align: middle;
+ margin: 0 auto;
+ }
+
+
+
+ /**
+ * Figures
+ */
+ figure > img {
+ display: block;
+ }
+
+ figcaption {
+ font-size: $small-font-size;
+ }
+
+
+
+ /**
+ * Lists
+ */
+ ul, ol {
+ margin-left: $spacing-unit;
+ }
+
+ li {
+ > ul,
+ > ol {
+ margin-bottom: 0;
+ }
+ }
+
+
+
+ /**
+ * Headings
+ */
+ h1, h2, h3, h4, h5, h6 {
+ font-weight: $base-font-weight;
+ font-family: Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;
+ }
+
+
+
+ /**
+ * Links
+ */
+ a {
+ color: $brand-color;
+ text-decoration: none;
+
+ &:visited {
+ color: darken($brand-color, 15%);
+ }
+
+ &:hover {
+ color: $text-color;
+ text-decoration: underline;
+ }
+
+ .social-media-list &:hover {
+ text-decoration: none;
+
+ .username {
+ text-decoration: underline;
+ }
+ }
+ }
+
+
+ /**
+ * Blockquotes
+ */
+ blockquote {
+ color: $grey-color;
+ border-left: 4px solid $grey-color-light;
+ padding-left: $spacing-unit / 2;
+ @include relative-font-size(1.125);
+ letter-spacing: -1px;
+ font-style: italic;
+
+ > :last-child {
+ margin-bottom: 0;
+ }
+ }
+
+
+
+ /**
+ * Code formatting
+ */
+ pre,
+ code {
+ @include relative-font-size(0.9375);
+ border: 1px solid #d4d4d4;
+ border-radius: 2px;
+ background-color: #eee4d0;
+ }
+
+ code {
+ padding: 1px 5px;
+ }
+
+ pre {
+ padding: 8px 12px;
+ overflow-x: auto;
+
+ > code {
+ border: 0;
+ padding-right: 0;
+ padding-left: 0;
+ }
+ }
+
+
+
+ /**
+ * Clearfix
+ */
+ %clearfix:after {
+ content: "";
+ display: table;
+ clear: both;
+ }
+
+
+ /**
+ * Hidden
+ */
+.hidden{
+ display:none;
+ visibility: hidden;
+ width: 0;
+ height: 0;
+}
+
+
+ /**
+ * Icons
+ */
+
+ .svg-icon {
+ width: 16px;
+ height: 16px;
+ display: inline-block;
+ fill: #{$grey-color};
+ padding-right: 5px;
+ vertical-align: text-top;
+ }
+
+ .social-media-list {
+ li + li {
+ padding-top: 5px;
+ }
+ }
+
+
+
+ /**
+ * Tables
+ */
+ table {
+ margin-bottom: $spacing-unit;
+ width: 100%;
+ text-align: $table-text-align;
+ color: lighten($text-color, 18%);
+ border-collapse: collapse;
+ border: 1px solid $grey-color-light;
+ tr {
+ &:nth-child(even) {
+ background-color: lighten($grey-color-light, 6%);
+ }
+ }
+ th, td {
+ padding: ($spacing-unit / 3) ($spacing-unit / 2);
+ }
+ th {
+ background-color: lighten($grey-color-light, 3%);
+ border: 1px solid darken($grey-color-light, 4%);
+ border-bottom-color: darken($grey-color-light, 12%);
+ }
+ td {
+ border: 1px solid $grey-color-light;
+ }
+ } \ No newline at end of file
diff --git a/themes/the-roots-home/assets/_scss/layout.scss b/themes/the-roots-home/assets/_scss/layout.scss
new file mode 100644
index 0000000..2e33f56
--- /dev/null
+++ b/themes/the-roots-home/assets/_scss/layout.scss
@@ -0,0 +1,166 @@
+/**
+ * Site header
+ */
+ .site-header {
+ border-bottom: 1px dashed $grey-color-light;
+ min-height: $spacing-unit * 1.865;
+ display: flex;
+ align-items: flex-end;
+ // Positioning context for the mobile navigation icon
+ position: relative;
+ }
+
+ .site-nav {
+ font-family: Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;
+ font-weight: bold;
+ display: inline;
+ vertical-align: bottom;
+ ol{
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ li{
+ display: inline;
+ }
+ }
+ }
+ .page-description{
+ @include relative-font-size(.87);
+ padding: 0;
+ margin: 0;
+ }
+ /**
+ * Site footer
+ */
+ .site-footer {
+ font-size: 10px;
+ border-top: 1px dashed $grey-color-light;
+ margin-bottom: 20px;
+ .left{
+ float: left;
+ }
+ .right{
+ float: right;
+ }
+ }
+
+
+ /**
+ * Page content
+ */
+ .page-content {
+ padding: $spacing-unit 0;
+ }
+
+ .page-heading {
+ @include relative-font-size(2);
+ }
+
+
+ .post-meta {
+ font-size: $small-font-size;
+ font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
+ color: $grey-color;
+
+ ul{
+ float: right;
+ li{
+ display: inline-block;
+ }
+ }
+ }
+
+ section.item-list {
+ .item{
+ font-family: Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;
+ font-weight: bold;
+ width: 100%;
+ display:flex;
+ flex-wrap: wrap;
+ h3{
+ font-weight: bold;
+ width: 35%;
+ white-space: nowrap;
+ overflow: hidden;
+ text-align: left;
+ text-overflow: ellipsis;
+ flex:auto;
+ margin: 0 16px 0 0;
+ }
+ span{
+ width: calc(60% - 128px);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ flex:auto;
+ margin-right: 16px;
+ }
+ time{
+ box-sizing: border-box;
+ width: 96px;
+ text-align: right;
+ }
+ }
+ }
+
+
+ h3.item-title {
+ display: inline-block;
+ @include relative-font-size(1);
+ margin: .2em;
+ }
+
+ .pagination{
+ display:flex;
+ flex-wrap: nowrap;
+ justify-content: space-between;
+ margin-top: $spacing-unit;
+ }
+
+ /**
+ * Posts
+ */
+ .post-header {
+ margin-bottom: $spacing-unit/2;
+ border-bottom: 1px dotted $grey-color-light;
+ }
+
+ .post-title {
+ @include relative-font-size(1.25);
+ letter-spacing: -1px;
+ line-height: 1;
+ }
+ #disqus_thread{
+ @include relative-font-size(.89);
+ }
+ .post-content {
+ font-family: Tahoma, Arial, sans-serif;
+ margin-bottom: $spacing-unit;
+ p,li{
+ @include relative-font-size(.89);
+ }
+ pre,code{
+ @include relative-font-size(.82);
+ }
+
+ h2 {
+ border-bottom: 1px dotted $grey-color-light;
+ @include relative-font-size(1.1);
+ font-weight: bold;
+ }
+
+ h3 {
+ border-bottom: 1px dotted $grey-color-light;
+ font-weight: bold;
+ @include relative-font-size(1.075);
+ }
+
+ h4 {
+ font-weight: bold;
+ @include relative-font-size(.925);
+ }
+ }
+ article~.pagination{
+ padding: $spacing-unit 0;
+ border-top: 1px dashed $grey-color-light;
+ } \ No newline at end of file
diff --git a/themes/the-roots-home/assets/_scss/media.scss b/themes/the-roots-home/assets/_scss/media.scss
new file mode 100644
index 0000000..9f92460
--- /dev/null
+++ b/themes/the-roots-home/assets/_scss/media.scss
@@ -0,0 +1,19 @@
+@include media-query($on-laptop) {
+ .post-title{
+ @include relative-font-size(1.55);
+ }
+ .post-content {
+ h2 {
+ @include relative-font-size(1.25);
+ }
+
+ h3 {
+ @include relative-font-size(1);
+ }
+
+ h4 {
+ @include relative-font-size(.9);
+ }
+ }
+
+} \ No newline at end of file
diff --git a/themes/the-roots-home/assets/_scss/print.scss b/themes/the-roots-home/assets/_scss/print.scss
new file mode 100644
index 0000000..ac32677
--- /dev/null
+++ b/themes/the-roots-home/assets/_scss/print.scss
@@ -0,0 +1,99 @@
+@media print {
+ @page {
+ margin: 1.2cm;
+ }
+
+ body {
+ font: 12pt Georgia, "Times New Roman", Times, serif;
+ line-height: 1.3;
+ background: #fff !important;
+ -webkit-print-color-adjust: exact !important;
+ color-adjust: exact !important;
+ }
+
+ p {
+ orphans: 2;
+ widows: 2;
+ }
+
+ pre,code{
+ font-size: inherit;
+ }
+
+
+ body > :not(main), main > :not(article), .pagination {
+ display: none;
+ }
+
+ h1 {
+ column-span: all;
+ break-before: column;
+ break-inside: avoid-column;
+ break-after: avoid-column;
+ font-size: 24pt;
+ background: #5c5c5c;
+ color: #fff !important;
+ -moz-color: #fff !important;
+ padding: 0 5pt;
+ border: none;
+ line-height: 1.4;
+ display: inline;
+ }
+
+ h2 {
+ font-size: 14pt;
+ margin-top: 25px;
+ break-after: avoid;
+ }
+
+ blockquote, ul {
+ margin: 0;
+ }
+
+ ul {
+ list-style: none;
+ }
+
+ li {
+ content: "» ";
+ word-wrap: break-word;
+ }
+
+ a {
+ color: #000;
+ word-wrap: break-word;
+ }
+
+ p a[href^="http://"]:after, a[href^="https://"]:after {
+ content: " (" attr(href) ")";
+ font-weight: normal;
+ font-size: 10pt;
+ font-style: italic;
+ border: none;
+ }
+
+ abbr:after {
+ content: " (" attr(title) ")";
+ font-weight: 100;
+ font-style: italic;
+ border: none;
+ }
+
+ p a[href^="#"]:after {
+ display: none;
+ }
+
+ .wrapper {
+ max-width: 100% !important;
+ float: none;
+ margin: 0;
+ padding: 0;
+ }
+ .post-meta {
+ margin: 0 0 .5cm 0;
+ }
+ img{
+ display: block;
+ margin: 0 auto;
+ }
+}
diff --git a/themes/the-roots-home/assets/_scss/syntax-highlighting.scss b/themes/the-roots-home/assets/_scss/syntax-highlighting.scss
new file mode 100644
index 0000000..ac01d75
--- /dev/null
+++ b/themes/the-roots-home/assets/_scss/syntax-highlighting.scss
@@ -0,0 +1,232 @@
+/**
+ * Syntax highlighting styles
+ */
+.highlight {
+ background:#eee4d0;
+
+ @extend %vertical-rhythm;
+
+ /* Background */
+
+ .chroma {
+ background-color: #eee4d0;
+
+ /* Error */
+ .err {
+ display: inline;
+ }
+
+ /* LineTableTD */
+ .lntd {
+ vertical-align: top;
+ padding: 0;
+ margin: 0;
+ border: 0;
+ }
+
+ /* LineTable */
+ .lntable {
+ border-spacing: 0;
+ padding: 0;
+ margin: 0;
+ border: 0;
+ width: auto;
+ overflow: auto;
+ display: block;
+ }
+
+ /* LineHighlight */
+ .hl {
+ display: block;
+ width: 100%;
+ background-color: #ffffcc;
+ }
+
+ /* LineNumbersTable */
+ .lnt {
+ margin-right: 0.4em;
+ padding: 0 0.4em 0 0.4em;
+ }
+
+ /* LineNumbers */
+ .ln {
+ margin-right: 0.4em;
+ padding: 0 0.4em 0 0.4em;
+ }
+
+ /* Keyword */
+ .k {
+ color: #0000ff;
+ }
+
+ /* KeywordConstant */
+ .kc {
+ color: #0000ff;
+ }
+
+ /* KeywordDeclaration */
+ .kd {
+ color: #0000ff;
+ }
+
+ /* KeywordNamespace */
+ .kn {
+ color: #0000ff;
+ }
+
+ /* KeywordPseudo */
+ .kp {
+ color: #0000ff;
+ }
+
+ /* KeywordReserved */
+ .kr {
+ color: #0000ff;
+ }
+
+ /* KeywordType */
+ .kt {
+ color: #2b91af;
+ }
+
+ /* NameClass */
+ .nc {
+ color: #2b91af;
+ }
+
+ /* LiteralString */
+ .s {
+ color: #a31515;
+ }
+
+ /* LiteralStringAffix */
+ .sa {
+ color: #a31515;
+ }
+
+ /* LiteralStringBacktick */
+ .sb {
+ color: #a31515;
+ }
+
+ /* LiteralStringChar */
+ .sc {
+ color: #a31515;
+ }
+
+ /* LiteralStringDelimiter */
+ .dl {
+ color: #a31515;
+ }
+
+ /* LiteralStringDoc */
+ .sd {
+ color: #a31515;
+ }
+
+ /* LiteralStringDouble */
+ .s2 {
+ color: #a31515;
+ }
+
+ /* LiteralStringEscape */
+ .se {
+ color: #a31515;
+ }
+
+ /* LiteralStringHeredoc */
+ .sh {
+ color: #a31515;
+ }
+
+ /* LiteralStringInterpol */
+ .si {
+ color: #a31515;
+ }
+
+ /* LiteralStringOther */
+ .sx {
+ color: #a31515;
+ }
+
+ /* LiteralStringRegex */
+ .sr {
+ color: #a31515;
+ }
+
+ /* LiteralStringSingle */
+ .s1 {
+ color: #a31515;
+ }
+
+ /* LiteralStringSymbol */
+ .ss {
+ color: #a31515;
+ }
+
+ /* OperatorWord */
+ .ow {
+ color: #0000ff;
+ }
+
+ /* Comment */
+ .c {
+ color: #008000;
+ }
+
+ /* CommentHashbang */
+ .ch {
+ color: #008000;
+ }
+
+ /* CommentMultiline */
+ .cm {
+ color: #008000;
+ }
+
+ /* CommentSingle */
+ .c1 {
+ color: #008000;
+ }
+
+ /* CommentSpecial */
+ .cs {
+ color: #008000;
+ }
+
+ /* CommentPreproc */
+ .cp {
+ color: #0000ff;
+ }
+
+ /* CommentPreprocFile */
+ .cpf {
+ color: #0000ff;
+ }
+
+ /* GenericEmph */
+ .ge {
+ font-style: italic;
+ }
+
+ /* GenericHeading */
+ .gh {
+ font-weight: bold;
+ }
+
+ /* GenericPrompt */
+ .gp {
+ font-weight: bold;
+ }
+
+ /* GenericStrong */
+ .gs {
+ font-weight: bold;
+ }
+
+ /* GenericSubheading */
+ .gu {
+ font-weight: bold;
+ }
+ }
+}
diff --git a/themes/the-roots-home/assets/app.js b/themes/the-roots-home/assets/app.js
new file mode 100644
index 0000000..65051d4
--- /dev/null
+++ b/themes/the-roots-home/assets/app.js
@@ -0,0 +1,136 @@
+{{ $sw := resources.Get "sw.js" | resources.ExecuteAsTemplate "sw.js" . | minify }}
+//Register service worker
+if ('serviceWorker' in navigator) {
+ navigator.serviceWorker.register('{{ $sw.Permalink | relURL }}',{
+ updateViaCache: 'none',
+ })
+ /*
+ .then(() => {
+ return navigator.serviceWorker.ready;
+ })
+ .then(reg => {
+ reg.pushManager.subscribe({
+ userVisibleOnly:true
+ })
+ .then(sub => console.log('endpoint : ', sub.endpoint))
+ .catch(e => console.log('%c 😶 %c\n Ehhmp..\n','font-size:50px; color:#bcbcbc;','font-size:20px;',e));
+ })
+ */
+ .then(function(reg) {
+ // Registration was successful
+ console.log(reg.scope);
+
+ // updatefound is fired if service-worker.js changes.
+ reg.onupdatefound = function() {
+ var installingWorker = reg.installing;
+
+ installingWorker.onstatechange = function() {
+ ga('send', 'event','Progressive Web App', 'Service Worker State', installingWorker.state);
+ /*
+ switch (installingWorker.state) {
+ case 'installed':
+ if (navigator.serviceWorker.controller) {
+ // At this point, the old content will have been purged and the fresh content will
+ // have been added to the cache.
+ // It's the perfect time to display a "New content is available; please refresh."
+ // message in the page's interface.
+ //console.log('New or updated content is available.');
+ showToast(`New or updated content is available.`);
+ } else {
+ // At this point, everything has been precached.
+ // It's the perfect time to display a "Content is cached for offline use." message.
+ //console.log('Content is now available offline!');
+ getCacheTotalSize().then(function (size) {
+ //console.log(size);
+ showToast(`Content is now available offline! [Cached: ${size} KB]`);
+ });
+ }
+ break;
+
+ case 'redundant':
+ console.error('The installing service worker became redundant.');
+ break;
+ }
+ */
+ };
+ };
+ })
+ .catch(err => console.error('%c 😨\n', 'font-size:60px; color:red', err));
+
+ //Check to see whether the service worker is controlling the page.
+ if (navigator.serviceWorker.controller) {
+ // If .controller is set, then this page is being actively controlled by the service worker.
+ console.info('%c 🤘', 'font-size:70px; color: #bada55' /*,reg*/ );
+
+ } else {
+ // If .controller isn't set, then prompt the user to reload the page so that the service worker can take
+ // control. Until that happens, the service worker's fetch handler won't be used.
+ console.info('%c ⚓\n%cPlease reload this page to allow the service worker to handle network operations.', 'font-size:60px; color:green', 'background-color:#333;color:#fff;');
+ }
+} else {
+ // The current browser doesn't support service workers.
+ console.log('%c 🗿\n%cService workers are not supported.', 'font-size:50px;color:#bcbcbc;', 'background-color:#333;color:#fff;');
+}
+
+/*
+function showToast(msg) {
+ let snackbar = document.getElementById('snackbar');
+ snackbar.innerHTML = msg;
+ snackbar.classList.add('show', setTimeout(function() {
+ snackbar.className = snackbar.className.replace("show", "").trim();
+ }, 6400));
+}
+async function getCacheTotalSize() {
+ // Note: opaque (i.e. cross-domain, without CORS) responses in the cache will return a size of 0.
+ const cacheNames = await caches.keys();
+
+ let cacheSize = 0;
+
+ const sizePromises = cacheNames.map(async cacheName => {
+ const cache = await caches.open(cacheName);
+ const keys = await cache.keys();
+
+ await Promise.all(keys.map(async key => {
+ const response = await cache.match(key);
+ const blob = await response.blob();
+ cacheSize += blob.size;
+ }));
+
+ //console.log(`Cache ${cacheName}: ${cacheSize} bytes`);
+ });
+
+ await Promise.all(sizePromises);
+ var total = Math.round(cacheSize/1e3)
+ return total;
+ }
+let installPromptEvent;
+var buttonInstall = document.querySelector('#install');
+window.addEventListener('beforeinstallprompt', (event) => {
+ // Prevent Chrome <= 67 from automatically showing the prompt
+ event.preventDefault();
+ // Stash the event so it can be triggered later.
+ installPromptEvent = event;
+ // Update the install UI to notify the user app can be installed
+ buttonInstall.disabled = false;
+});
+buttonInstall.addEventListener('click', () => {
+ // Update the install UI to remove the install button
+ buttonInstall.disabled = true;
+ // Show the modal add to home screen dialog
+ installPromptEvent.prompt();
+ // Wait for the user to respond to the prompt
+ installPromptEvent.userChoice.then((choice) => {
+ ga('send', 'event','Progressive Web App', 'Add to homescreen', choice.outcome);
+ // Clear the saved prompt since it can't be used again
+ installPromptEvent = null;
+ });
+});
+*/
+
+// Setup a listener to track Add to Homescreen events.
+window.addEventListener('beforeinstallprompt', e => { let installPromptEvent;
+ e.userChoice.then(choice => {
+ //var buttonInstall = document.querySelector('#install');
+ ga('send', 'event','Progressive Web App', 'Add to homescreen', choice.outcome);
+ });
+}); \ No newline at end of file
diff --git a/themes/the-roots-home/assets/main.scss b/themes/the-roots-home/assets/main.scss
new file mode 100644
index 0000000..5599173
--- /dev/null
+++ b/themes/the-roots-home/assets/main.scss
@@ -0,0 +1,59 @@
+@charset "utf-8";
+
+// Define defaults for each variable.
+
+$base-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default;
+$base-font-size: 16px !default;
+$base-font-weight: 400 !default;
+$small-font-size: $base-font-size * 0.875 !default;
+$base-line-height: 1.5 !default;
+
+$spacing-unit: 30px !default;
+
+$text-color: rgb(56, 53, 47) !default;
+$background-color: #ebe4d1 !default;
+$brand-color: #2a7ae2 !default;
+
+$grey-color: #444444 !default;
+$grey-color-light: lighten($grey-color, 40%) !default;
+$grey-color-dark: darken($grey-color, 25%) !default;
+$orange-color: #f66a0a !default;
+$table-text-align: left !default;
+
+// Width of the content area
+$content-width: 700px !default;
+
+$on-palm: 600px !default;
+$on-laptop: 900px !default;
+
+$on-medium: $on-palm !default;
+$on-large: $on-laptop !default;
+
+// Use media queries like this:
+// @include media-query($on-palm) {
+// .wrapper {
+// padding-right: $spacing-unit / 2;
+// padding-left: $spacing-unit / 2;
+// }
+// }
+// Notice the following mixin uses max-width, in a deprecated, desktop-first
+// approach, whereas media queries used elsewhere now use min-width.
+@mixin media-query($device) {
+ @media screen and (min-width: $device) {
+ @content;
+ }
+}
+
+@mixin relative-font-size($ratio) {
+ font-size: $base-font-size * $ratio;
+}
+
+
+// Import partials from `sass_dir` (defaults to `_sass`)
+@import
+ "_scss/base",
+ "_scss/layout",
+ "_scss/syntax-highlighting",
+ "_scss/media",
+ "_scss/print"
+;
diff --git a/themes/the-roots-home/assets/sw.js b/themes/the-roots-home/assets/sw.js
new file mode 100644
index 0000000..3656c18
--- /dev/null
+++ b/themes/the-roots-home/assets/sw.js
@@ -0,0 +1,210 @@
+"use strict";
+var CACHE_NAME = '{{ now.Unix }}';
+var urlsToCache = [
+ '/?utm_source=homescreen'
+];
+var idbDatabase;
+var IDB_VERSION = {{ now.Unix }};
+var STOP_RETRYING_AFTER = 86400000; // One day, in milliseconds.
+var STORE_NAME = 'urls';
+
+// This is basic boilerplate for interacting with IndexedDB. Adapted from
+// https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB
+function openDatabaseAndReplayRequests() {
+ var indexedDBOpenRequest = indexedDB.open('offline-analytics', IDB_VERSION);
+
+ // This top-level error handler will be invoked any time there's an IndexedDB-related error.
+ indexedDBOpenRequest.onerror = function(error) {
+ console.error('IndexedDB error:', error);
+ };
+
+ // This should only execute if there's a need to create a new database for the given IDB_VERSION.
+ indexedDBOpenRequest.onupgradeneeded = function() {
+ this.result.createObjectStore(STORE_NAME, {keyPath: 'url'});
+ };
+
+ // This will execute each time the database is opened.
+ indexedDBOpenRequest.onsuccess = function() {
+ idbDatabase = this.result;
+ replayAnalyticsRequests();
+ };
+}
+
+// Helper method to get the object store that we care about.
+function getObjectStore(storeName, mode) {
+ return idbDatabase.transaction(storeName, mode).objectStore(storeName);
+}
+
+function replayAnalyticsRequests() {
+ var savedRequests = [];
+
+ getObjectStore(STORE_NAME).openCursor().onsuccess = function(event) {
+ // See https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB#Using_a_cursor
+ var cursor = event.target.result;
+
+ if (cursor) {
+ // Keep moving the cursor forward and collecting saved requests.
+ savedRequests.push(cursor.value);
+ cursor.continue();
+ } else {
+ // At this point, we have all the saved requests.
+ //console.log('About to replay %d saved Google Analytics requests...',
+ // savedRequests.length);
+
+ savedRequests.forEach(function(savedRequest) {
+ var queueTime = Date.now() - savedRequest.timestamp;
+ if (queueTime > STOP_RETRYING_AFTER) {
+ getObjectStore(STORE_NAME, 'readwrite').delete(savedRequest.url);
+ //console.log(' Request has been queued for %d milliseconds. ' +
+ //'No longer attempting to replay.', queueTime);
+ } else {
+ // The qt= URL parameter specifies the time delta in between right now, and when the
+ // /collect request was initially intended to be sent. See
+ // https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#qt
+ var requestUrl = savedRequest.url + '&qt=' + queueTime;
+
+ //console.log(' Replaying', requestUrl);
+
+ fetch(requestUrl).then(function(response) {
+ if (response.status < 400) {
+ // If sending the /collect request was successful, then remove it from the IndexedDB.
+ getObjectStore(STORE_NAME, 'readwrite').delete(savedRequest.url);
+ //console.log(' Replaying succeeded.');
+ } else {
+ // This will be triggered if, e.g., Google Analytics returns a HTTP 50x response.
+ // The request will be replayed the next time the service worker starts up.
+ //console.error(' Replaying failed:', response);
+ }
+ }).catch(function(error) {
+ // This will be triggered if the network is still down. The request will be replayed again
+ // the next time the service worker starts up.
+ //console.error(' Replaying failed:', error);
+ });
+ }
+ });
+ }
+ };
+}
+
+// Open the IndexedDB and check for requests to replay each time the service worker starts up.
+// Since the service worker is terminated fairly frequently, it should start up again for most
+// page navigations. It also might start up if it's used in a background sync or a push
+// notification context.
+openDatabaseAndReplayRequests();
+
+self.addEventListener('install', event => {
+ event.waitUntil(caches.open(CACHE_NAME)
+ .then(cache => cache.addAll(urlsToCache)).then(() => {
+ return self.skipWaiting();
+ })
+ );
+});
+
+self.addEventListener('fetch',event => {
+ event.respondWith(
+ caches.match(event.request)
+ .then(response => {
+ if (response) return response;
+
+ var fetchRequest = event.request.clone();
+ return fetch(fetchRequest).then(response => {
+ if (!response || response.status != 200 || response.type !== 'basic'){
+ if (response.status >= 500) {
+ // If this is a Google Analytics ping then we want to retry it if a HTTP 5xx response
+ // was returned, just like we'd retry it if the network was down.
+ checkForAnalyticsRequest(event.request.url);
+ }
+ return response;
+ }
+
+ var responseToCache = response.clone();
+ caches.open(CACHE_NAME).then(cache => {
+ cache.put(event.request, responseToCache);
+ });
+ return response;
+ }).catch(() => {
+ // The catch() will be triggered for network failures. Let's see if it was a request for
+ // a Google Analytics ping, and save it to be retried if it was.
+ checkForAnalyticsRequest(event.request.url);
+ return caches.match('/offline.html');
+ })
+ }));
+ });
+
+self.addEventListener('activate',event => {
+ var chacheWhiteList=[CACHE_NAME];
+ event.waitUntil(
+ caches.keys().then(keyList => {
+ return Promise.all(keyList.map(key => {
+ if (chacheWhiteList.indexOf(key) === -1)
+ return caches.delete(key);
+ }));
+ }).then(() => {
+ return self.clients.claim();
+ })
+ );
+ });
+
+/*
+self.addEventListener('push', function(event) {
+ //console.log('Push message', event);
+
+ var title = 'Ada postingan baru!';
+
+ event.waitUntil(
+ self.registration.showNotification(title, {
+ 'body': 'Cek postingan baru ane gan..',
+ 'vibrate': [200, 100, 200, 100, 200, 100, 400],
+ 'icon': 'assets/images/avatar.jpg'
+ }));
+});
+
+self.addEventListener('notificationclick', function(event) {
+ //console.log('Notification click: tag', event.notification.tag);
+ // Android doesn't close the notification when you click it
+ // See http://crbug.com/463146
+ event.notification.close();
+ var url = 'https://bekti.net/blog';
+ // Check if there's already a tab open with this URL.
+ // If yes: focus on the tab.
+ // If no: open a tab with the URL.
+ event.waitUntil(
+ clients.matchAll({
+ type: 'window'
+ })
+ .then(function(windowClients) {
+ console.log('WindowClients', windowClients);
+ for (var i = 0; i < windowClients.length; i++) {
+ var client = windowClients[i];
+ //console.log('WindowClient', client);
+ if (client.url === url && 'focus' in client) {
+ return client.focus();
+ }
+ }
+ if (clients.openWindow) {
+ return clients.openWindow(url);
+ }
+ })
+ );
+ });
+*/
+
+ function checkForAnalyticsRequest(requestUrl) {
+ // Construct a URL object (https://developer.mozilla.org/en-US/docs/Web/API/URL.URL)
+ // to make it easier to check the various components without dealing with string parsing.
+ var url = new URL(requestUrl);
+
+ if ((url.hostname === 'www.google-analytics.com' ||
+ url.hostname === 'ssl.google-analytics.com') &&
+ url.pathname === '/collect') {
+ //console.log(' Storing Google Analytics request in IndexedDB to be replayed later.');
+ saveAnalyticsRequest(requestUrl);
+ }
+ }
+
+ function saveAnalyticsRequest(requestUrl) {
+ getObjectStore(STORE_NAME, 'readwrite').add({
+ url: requestUrl,
+ timestamp: Date.now()
+ });
+ } \ No newline at end of file
diff --git a/themes/the-roots-home/layouts/404.html b/themes/the-roots-home/layouts/404.html
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/themes/the-roots-home/layouts/404.html
diff --git a/themes/the-roots-home/layouts/_default/_markup/render-link.html b/themes/the-roots-home/layouts/_default/_markup/render-link.html
new file mode 100644
index 0000000..122f0e2
--- /dev/null
+++ b/themes/the-roots-home/layouts/_default/_markup/render-link.html
@@ -0,0 +1,2 @@
+
+<a href="{{ .Destination | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}{{ if strings.HasPrefix .Destination "http" }} target="_blank" rel="nofollow noreferrer noopener"{{ end }}>{{ .Text | safeHTML }}</a> \ No newline at end of file
diff --git a/themes/the-roots-home/layouts/_default/baseof.html b/themes/the-roots-home/layouts/_default/baseof.html
new file mode 100644
index 0000000..e5e4c49
--- /dev/null
+++ b/themes/the-roots-home/layouts/_default/baseof.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang={{ .Site.LanguageCode }}>
+ {{- partial "head" . -}}
+ <body>
+ {{- partial "header" . -}}
+ <main id="content">
+ {{- block "main" . }}{{- end }}
+ </main>
+ {{- partialCached "footer" . -}}
+ </body>
+</html>
diff --git a/themes/the-roots-home/layouts/_default/list.html b/themes/the-roots-home/layouts/_default/list.html
new file mode 100644
index 0000000..d68affa
--- /dev/null
+++ b/themes/the-roots-home/layouts/_default/list.html
@@ -0,0 +1,46 @@
+{{ define "main" }}
+<section class="content item-list">
+ {{if and (not .IsHome) .Parent }}
+ <div class="item"><ion-icon name="arrow-undo-sharp"></ion-icon>&nbsp;<a title="{{.Parent.Title}}" href="{{.Parent.Permalink}}">../</a></div>
+ {{ end }}
+ {{ range (.Paginate ( (.Pages.ByDate.Reverse).ByWeight) 100).Pages }}
+ <div class="item">
+ <h3 class="item-title">
+ {{ if eq .Kind "page" }}
+ <ion-icon name="document-text-outline"></ion-icon>&nbsp;
+ {{ else if eq .Kind "term"}}
+ <ion-icon name="bookmarks-outline"></ion-icon>&nbsp;
+ {{ else }}
+ <ion-icon name="folder-outline"></ion-icon>&nbsp;
+ {{ end }}
+ <a title="{{ .Title }}" href="{{ .Permalink }}">
+ {{ $item := . }}
+ {{ with .File}}
+ {{if and (eq $item.Kind "page") (not (eq (path.Base .Path) "index.md")) }}
+ {{ path.Base .Path }}{{ else }}{{ path.Base $item.RelPermalink }}
+ {{end}}
+ {{ else }}
+ {{ path.Base $item.RelPermalink }}
+ {{end}}
+ </a>
+ </h3>
+ <span>{{with .GitInfo }} <em>@{{.AbbreviatedHash}}</em> {{.Subject }} {{ end }}</span>
+ <time datetime="2006-01-02">{{ .Lastmod.Format "2 Jan 2006" }}</time>
+ </div>
+ {{ end }}
+ {{ with .Paginator}}
+ <div class="pagination">
+ <div class="next">
+ {{ if .HasNext }}
+ <a href="{{.Next.URL}}">Oldest</a>
+ {{ end }}
+ </div>
+ <div class="prev">
+ {{ if .HasPrev }}
+ <a href="{{.Prev.URL}}">Newest</a>
+ {{ end }}
+ </div>
+ </div>
+ {{ end }}
+</section>
+{{ end }} \ No newline at end of file
diff --git a/themes/the-roots-home/layouts/_default/single.html b/themes/the-roots-home/layouts/_default/single.html
new file mode 100644
index 0000000..dd61457
--- /dev/null
+++ b/themes/the-roots-home/layouts/_default/single.html
@@ -0,0 +1,35 @@
+{{ define "main" }}
+<article role="article" class="content post h-entry" itemscope="" itemtype="http://schema.org/BlogPosting">
+ <header class="post-header">
+ <h2 class="post-title" itemprop="name headline">{{ .Title }}</h2>
+ <span class="post-meta">
+ <time class="date-published" datetime="{{ .Date.Format "2006-01-02T15:04:05+07:00" | safeHTML }}" itemprop="datePublished">
+ {{ .Date.Format "Mon, 2 Jan 2006" }}
+ </time>
+ {{ with .Params.tags }}
+ <ul id="tags">
+ {{ range . }}
+ <li> <a href="{{ "tags/" | absURL }}{{ . | urlize }}">#{{ . }}</a> </li>
+ {{ end }}
+ </ul>
+ {{ end }}
+ </span>
+ </header>
+ <div class="post-content" itemprop="articleBody">
+ {{ .Content | safeHTML}}
+ </div>
+</article>
+<div class="pagination">
+ <div class="prev">
+ {{ if .PrevInSection }}
+ <a href="{{.PrevInSection.Permalink}}">Previous Post</a>
+ {{ end }}
+ </div>
+ <div class="next">
+ {{ if .NextInSection }}
+ <a href="{{.NextInSection.Permalink}}">Next Post</a>
+ {{ end }}
+ </div>
+</div>
+{{ template "_internal/disqus.html" . }}
+{{ end }} \ No newline at end of file
diff --git a/themes/the-roots-home/layouts/index.webmanifest b/themes/the-roots-home/layouts/index.webmanifest
new file mode 100644
index 0000000..d30e77d
--- /dev/null
+++ b/themes/the-roots-home/layouts/index.webmanifest
@@ -0,0 +1,65 @@
+{
+ "lang": "{{site.Language.Lang}}",
+ "dir": "ltr",
+ "name": "{{site.Title}}",
+ "description": "{{ site.Params.description }}",
+ "short_name": "{{ site.Params.siteShortName }}",
+ "background_color": "#03a9f4",
+ "theme_color": "#3da3f7",
+ "display": "standalone",
+ "orientation": "portrait",
+ "start_url": "{{ .Site.BaseURL | absURL }}?utm_source=homescreen",
+ "scope": "{{ .Site.BaseURL | absURL }}",
+ "icons": [
+ {
+ "src": "{{ .Site.BaseURL }}{{ "icons/36.png" }}",
+ "sizes": "36x36",
+ "type": "image/png",
+ "density": "0.75"
+ },
+ {
+ "src": "{{ .Site.BaseURL }}{{ "icons/48.png" }}",
+ "sizes": "48x48",
+ "type": "image/png",
+ "density": "1.0"
+ },
+ {
+ "src": "{{ .Site.BaseURL }}{{ "icons/72.png" }}",
+ "sizes": "72x72",
+ "type": "image/png",
+ "density": "1.5"
+ },
+ {
+ "src": "{{ .Site.BaseURL }}{{ "icons/96.png" }}",
+ "sizes": "96x96",
+ "type": "image/png",
+ "density": "2.0"
+ },
+ {
+ "src": "{{ .Site.BaseURL }}{{ "icons/144.png" }}",
+ "sizes": "144x144",
+ "type": "image/png",
+ "density": "3.0"
+ },
+ {
+ "src": "{{ .Site.BaseURL }}{{ "icons/192.png" }}",
+ "sizes": "192x192",
+ "type": "image/png",
+ "density": "4.0"
+ },
+ {
+ "src": "{{ .Site.BaseURL }}{{ "icons/256.png" }}",
+ "sizes": "256x256",
+ "type": "image/png"
+ },
+ {
+ "src": "{{ .Site.BaseURL }}{{ "icons/512.png" }}",
+ "sizes": "512x512",
+ "type": "image/png"
+ },
+ {
+ "src": "{{ .Site.BaseURL }}{{ "icons/icon.svg" }}",
+ "sizes": "any"
+ }
+ ]
+ } \ No newline at end of file
diff --git a/themes/the-roots-home/layouts/partials/footer.html b/themes/the-roots-home/layouts/partials/footer.html
new file mode 100644
index 0000000..d4b2b48
--- /dev/null
+++ b/themes/the-roots-home/layouts/partials/footer.html
@@ -0,0 +1,11 @@
+{{ $app := resources.Get "app.js" | resources.ExecuteAsTemplate "app.js" . | minify }}
+<footer class="site-footer">
+ <span class="left">Gohugo/{{ hugo.Version }}</span>
+ <span class="right">
+ <em>The Root's Home</em> By
+ <a href="https://github.com/rmsubekti" target="_blank" rel="noopener noreferrer">rmsubekti</a>
+ </span>
+</footer>
+{{ if ne hugo.Environment "development"}}
+<script type="text/javascript" src="{{ $app.Permalink }}" integrity="{{ $app.Data.Integrity }}"></script>
+{{ end }}
diff --git a/themes/the-roots-home/layouts/partials/head.html b/themes/the-roots-home/layouts/partials/head.html
new file mode 100644
index 0000000..271d574
--- /dev/null
+++ b/themes/the-roots-home/layouts/partials/head.html
@@ -0,0 +1,34 @@
+{{- $description := .Description | default .Summary | default .Site.Params.description | plainify | safeHTML -}}
+{{- $style := resources.Get "main.scss" | resources.ExecuteAsTemplate "css/main.scss" . | toCSS | minify | fingerprint -}}
+
+{{- define "title" -}}
+{{- if .p1.Parent -}}
+{{- template "title" (dict "p1" .p1.Parent "p2" .p2 ) -}}
+{{- else if not .p1.IsHome -}}
+{{- template "title" (dict "p1" .p1.Site.Home "p2" .p2 ) -}}
+{{- end -}}
+{{- if .p1.IsHome -}}{{ .p1.Title -}}{{- if and (eq .p2 .p1) -}}/{{- end -}}{{- else -}}/{{- path.Base .p1.RelPermalink -}}{{- end -}}
+{{- end -}}
+
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>{{if .IsPage }} {{.Title}} {{else}}{{ template "title" (dict "p1" . "p2" .) }} {{end}}- {{ .Site.Title -}}</title>
+ <meta name="description" content="{{ $description }}">
+ <link rel="canonical" href="{{ .Permalink }}">
+ <meta property="og:title" content="{{ .Title }}">
+ <meta property="og:type" content="{{ if .IsPage }}article{{ else }}website{{ end }}">
+ <meta property="og:url" content="{{ .Permalink }}">
+ <meta property="og:description" content="{{ $description }}">
+ <meta property="og:site_name" content="{{ .Site.Title }}">
+ <link rel="stylesheet" href="{{ $style.Permalink }}" integrity="{{ $style.Data.Integrity }}">
+ {{ range .AlternativeOutputFormats -}}
+ {{ printf `<link rel="%s" type="%s" href="%s" title="%s" />` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }}
+ {{ end -}}
+ {{ partial "meta/icons" . }}
+ {{ partial "meta/json-ld" . }}
+ {{ hugo.Generator}}
+ <script type="module" src="https://unpkg.com/ionicons@5.1.2/dist/ionicons/ionicons.esm.js"></script>
+ <script nomodule="" src="https://unpkg.com/ionicons@5.1.2/dist/ionicons/ionicons.js"></script>
+</head>
diff --git a/themes/the-roots-home/layouts/partials/header.html b/themes/the-roots-home/layouts/partials/header.html
new file mode 100644
index 0000000..b41b263
--- /dev/null
+++ b/themes/the-roots-home/layouts/partials/header.html
@@ -0,0 +1,27 @@
+<header class="site-header">
+ <nav class="site-nav" role="navigation" aria-label="breadcrumb">
+ <ol itemscope itemtype="https://schema.org/BreadcrumbList" class="breadcrumb">
+ {{- template "breadcrumb" (dict "p1" . "p2" .) -}}
+ </ol>
+ </nav>
+ <h1 class="site-title hidden">
+ <a href="{{ .Site.BaseURL}}">{{.Site.Title}}</a>
+ </h1>
+</header>
+{{if not .IsPage }}<h3 class="page-description">{{ cond .IsHome (.Site.Params.Description | default .Site.Title) (.Title | default .Content)}}</h3>{{ end }}
+{{- define "breadcrumb" -}}
+{{- if .p1.Parent -}}
+{{- template "breadcrumb" (dict "p1" .p1.Parent "p2" .p2 ) -}}
+{{- else if not .p1.IsHome -}}
+{{- template "breadcrumb" (dict "p1" .p1.Site.Home "p2" .p2 ) -}}
+{{- end -}}
+{{- if (not .p1.IsHome ) -}}/{{- end -}}
+<li class="breadcrumb-item {{ if eq .p1 .p2 -}}active{{- end}} {{if .p1.IsPage -}}hidden{{- end}}" {{ if eq .p1 .p2 -}}aria-current="page"{{- end}}
+ itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
+ <a itemtype="https://schema.org/Thing" itemprop="item" href="{{- .p1.Permalink -}}">
+ <span itemprop="name">{{ if .p1.IsHome }}{{- .p1.Title -}} {{ else }}{{- path.Base .p1.Permalink -}} {{ end }}</span>
+ </a>
+ <meta itemprop="position" content="{{- if .p1.IsPage -}}{{- add .p1.Parent.Weight 1 -}} {{- else -}} {{- .p1.Weight -}} {{- end -}}" />
+</li>
+{{- if and (.p1.IsHome ) (eq .p1 .p2 ) -}}/{{- end -}}
+{{- end -}} \ No newline at end of file
diff --git a/themes/the-roots-home/layouts/partials/meta/icons.html b/themes/the-roots-home/layouts/partials/meta/icons.html
new file mode 100644
index 0000000..0b1c6b3
--- /dev/null
+++ b/themes/the-roots-home/layouts/partials/meta/icons.html
@@ -0,0 +1,38 @@
+<!-- See https://goo.gl/qRE0vM -->
+<meta name="theme-color" content="#a2466c">
+<!-- Add to homescreen for Chrome on Android. Fallback for manifest.json -->
+<meta name="mobile-web-app-capable" content="yes">
+<meta name="application-name" content="{{ .Site.Title }}"/>
+<!-- Default icons -->
+<link rel="icon" href="{{ .Site.BaseURL }}{{ "favicon.ico" }}" type="image/x-icon">
+<link rel="shortcut icon" href="{{ "favicon.ico" | relURL }}" type="image/x-icon">
+<link rel="icon" type="image/png" href="{{ "icons/32.png" | relURL }}" sizes="32x32">
+<link rel="icon" type="image/png" href="{{ "icons/192.png" | relURL }}" sizes="192x192">
+<link rel="icon" type="image/png" href="{{ "icons/96.png" | relURL }}" sizes="96x96">
+<link rel="icon" type="image/png" href="{{ "icons/16.png" | relURL }}" sizes="16x16">
+<link rel="mask-icon" href="{{ "icons/icon.svg" | relURL }}" color="#5bbad5">
+<!-- Homescreen icons -->
+<link rel="apple-touch-icon" href="{{ "icons/48.png" | relURL }}">
+<link rel="apple-touch-icon" sizes="57x57" href="{{ "icons/57.png" | relURL }}">
+<link rel="apple-touch-icon" sizes="60x60" href="{{ "icons/60.png" | relURL }}">
+<link rel="apple-touch-icon" sizes="72x72" href="{{ "icons/72.png" | relURL }}">
+<link rel="apple-touch-icon" sizes="76x76" href="{{ "icons/76.png" | relURL }}">
+<link rel="apple-touch-icon" sizes="96x96" href="{{ "icons/96.png" | relURL }}">
+<link rel="apple-touch-icon" sizes="120x120" href="{{ "icons/120.png" | relURL }}">
+<link rel="apple-touch-icon" sizes="144x144" href="{{ "icons/144.png" | relURL }}">
+<link rel="apple-touch-icon" sizes="152x152" href="{{ "icons/152.png" | relURL }}">
+<link rel="apple-touch-icon" sizes="180x180" href="{{ "icons/180.png" | relURL }}">
+<link rel="apple-touch-icon" sizes="192x192" href="{{ "icons/192.png" | relURL }}">
+<!-- Add to homescreen for Safari on iOS -->
+<meta name="apple-mobile-web-app-capable" content="yes">
+<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
+<meta name="apple-mobile-web-app-title" content="{{ .Site.Title }}">
+<!-- specifying a startup image -->
+<link rel="apple-touch-startup-image" href="{{ "icons/144.png" | relURL }}">
+<!-- enables or disables automatic detection of possible phone numbers -->
+<meta name="format-detection" content="telephone=no">
+<!-- Tile icon for Windows 8 (144x144 + tile color) -->
+<meta name="msapplication-TileImage" content="{{ "icons/144.png" | relURL }}">
+<meta name="msapplication-TileColor" content="#fff">
+<meta name="msapplication-tap-highlight" content="no">
+<meta name="msapplication-navbutton-color" content="#fff">
diff --git a/themes/the-roots-home/layouts/partials/meta/json-ld.html b/themes/the-roots-home/layouts/partials/meta/json-ld.html
new file mode 100644
index 0000000..260c7cf
--- /dev/null
+++ b/themes/the-roots-home/layouts/partials/meta/json-ld.html
@@ -0,0 +1,117 @@
+{{- define "breadcrumbld" -}}
+{{- if .p01.Parent -}}
+ {{- template "breadcrumbld" (dict "p01" .p01.Parent "p02" .p02 ) -}}
+{{- else if not .p01.IsHome -}}
+ {{- template "breadcrumbld" (dict "p01" .p01.Site.Home "p02" .p02 ) -}}
+{{- end -}}
+{
+ "@type": "ListItem",
+ "position": {{- if .p01.IsPage -}}{{- add .p01.Parent.Weight 1 -}} {{- else -}} {{- .p01.Weight -}} {{- end -}},
+ "item": {
+ "@type": "{{if .p01.IsHome}}WebSite{{else}}WebPage{{end}}",
+ "@id": "{{ .p01.Permalink | absURL }}",
+ {{ if .p01.Params.featuredImage }}"image": "{{ . }}", {{ end }}
+ "name": "{{.p01.Title}}"
+ }
+}{{- if not (eq .p01 .p02 ) -}},{{- end -}}
+{{- end -}}
+
+<script type="application/ld+json">
+ {
+ "@context": "http://schema.org",
+ "@type": "BreadcrumbList",
+ "itemListElement": [
+ {{- template "breadcrumbld" (dict "p01" . "p02" .) -}}
+ ]
+ },
+
+ {{ if .IsHome }}
+ {
+ "@context": "http://schema.org",
+ "@type": "WebSite",
+ "name": {{ .Site.Title }},
+ "url": {{ .Site.BaseURL }},
+ "sameAs": [
+ "https://www.facebook.com/{{ .Site.Params.facebook }}",
+ "https://www.instagram.com/{{ .Site.Params.instagram }}",
+ "https://twitter.com/{{ .Site.Params.twitter }}",
+ "https://github.com/{{ .Site.Params.github }}"
+ ]
+ }
+
+ {{ else }}
+ {
+ "@context": "https://schema.org",
+ "@type": "{{ if .IsPage }}BlogPosting{{ else }}WebPage{{ end }}",
+ "headline": {{ .Title }},
+ "description": "{{ (.Params.Description | default (.Summary | truncate 200)) | safeHTML }}",
+ {{if or .Date .PublishDate }}"datePublished": {{ (.PublishDate.Format "2006-01-02T15:04:05-07:00" | default (.Date.Format "2006-01-02T15:04:05-07:00")) | safeHTML }},{{ end }}
+ {{ with .Lastmod }}"dateModified": {{ .Format "2006-01-02T15:04:05-07:00" | safeHTML }},{{ end }}
+ "mainEntityOfPage": {
+ "@type": "WebPage",
+ "@id": "{{ .Permalink | absURL }}"
+ },
+ {{ with .Params.tags -}}"keywords": "{{ delimit . ", " }}",{{- end }}
+ {{ with .WordCount }}"wordcount": {{ . }},{{ end }}
+ "url": "{{ .Permalink | absURL }}",
+ {{ with .Params.featuredImage }}
+ "image": {
+ "@type": "imageObject",
+ "url": "{{ . | absURL }}",
+ "height": "{{ .height | default 600}}",
+ "width": "{{ .width | default 800}}",
+ },
+ {{ end }}
+ {{ with .Site }}
+ "publisher": {
+ "@type": "Organization",
+ "name": "{{ .Title }}",
+ "logo": {
+ "@type": "imageObject",
+ "url": "{{ .Params.logo }}"
+ }
+ },
+ {{ end }}
+
+ {{ if .IsPage }}
+ "author": {
+ "@type": "Person",
+ "name": "{{ if .GitInfo }} {{.GitInfo.AuthorName}} {{else}} {{(.Params.Author | default .Site.Title ) }}{{end}}"
+ },
+ {{ $posts := where (where .Site.RegularPages "Section" .Section ) ".Permalink" "!=" .Permalink }}
+ {{ if gt (len $posts) 1 }}
+ "sharedContent": [
+ {{ range $i, $item:=(shuffle $posts | first 3) }}
+ {
+ "@type":"WebPage",
+ "headline": "{{ .Title }}",
+ "url": "{{ .Permalink | absURL }}",
+ "author":{
+ "@type":"Person",
+ "name": "{{ if .GitInfo }} {{.GitInfo.AuthorName}} {{else}} {{(.Params.Author | default .Site.Title ) }}{{end}}"
+ }
+ }{{ if not (eq (add $i 1) 3)}},{{ end }}
+ {{ end }}
+ ],
+ {{ end }}
+ "articleBody": "{{ .Summary | safeHTML}}"
+
+ {{ else }}
+ "sharedContent": [
+ {{ range $i, $item:=(first 20 (where .Site.RegularPages "Section" .Section)) }}
+ {
+ "@type":"WebPage",
+ "headline": "{{ .Title }}",
+ "url": "{{ .Permalink | absURL }}",
+ "author":{
+ "@type":"Person",
+ "name": "{{ if .GitInfo }} {{.GitInfo.AuthorName}} {{else}} {{(.Params.Author | default .Site.Title ) }}{{end}}"
+ }
+ }{{ if not (eq (add $i 1) 20)}},{{ end }}
+ {{ end }}
+ ]
+ {{ end }}
+ }
+
+ {{ end }}
+ </script>
diff --git a/themes/the-roots-home/layouts/robots.txt b/themes/the-roots-home/layouts/robots.txt
new file mode 100644
index 0000000..7d329b1
--- /dev/null
+++ b/themes/the-roots-home/layouts/robots.txt
@@ -0,0 +1 @@
+User-agent: *
diff --git a/themes/the-roots-home/layouts/shortcodes/indexdir.html b/themes/the-roots-home/layouts/shortcodes/indexdir.html
new file mode 100644
index 0000000..4205d43
--- /dev/null
+++ b/themes/the-roots-home/layouts/shortcodes/indexdir.html
@@ -0,0 +1,13 @@
+{{- $pathURL := .Get "pathURL" -}}
+{{- $path := .Get "path" -}}
+{{- $files := readDir $path -}}
+<table>
+ <th>Size in bytes</th>
+ <th>Name</th>
+{{- range $files }}
+ <tr>
+ <td>{{ .Size }}</td>
+ <td><a href="{{ $pathURL }}{{ .Name | relURL }}"> {{ .Name }}</a></td>
+ </tr>
+{{- end }}
+</table> \ No newline at end of file
diff --git a/themes/the-roots-home/screenshot.png b/themes/the-roots-home/screenshot.png
new file mode 100644
index 0000000..d2a91b2
--- /dev/null
+++ b/themes/the-roots-home/screenshot.png
Binary files differ
diff --git a/themes/the-roots-home/static/favicon.ico b/themes/the-roots-home/static/favicon.ico
new file mode 100644
index 0000000..db36262
--- /dev/null
+++ b/themes/the-roots-home/static/favicon.ico
Binary files differ
diff --git a/themes/the-roots-home/static/icons/114.png b/themes/the-roots-home/static/icons/114.png
new file mode 100644
index 0000000..bfef620
--- /dev/null
+++ b/themes/the-roots-home/static/icons/114.png
Binary files differ
diff --git a/themes/the-roots-home/static/icons/120.png b/themes/the-roots-home/static/icons/120.png
new file mode 100644
index 0000000..a3090b3
--- /dev/null
+++ b/themes/the-roots-home/static/icons/120.png
Binary files differ
diff --git a/themes/the-roots-home/static/icons/144.png b/themes/the-roots-home/static/icons/144.png
new file mode 100644
index 0000000..67e8bfe
--- /dev/null
+++ b/themes/the-roots-home/static/icons/144.png
Binary files differ
diff --git a/themes/the-roots-home/static/icons/150.png b/themes/the-roots-home/static/icons/150.png
new file mode 100644
index 0000000..1a2ccf2
--- /dev/null
+++ b/themes/the-roots-home/static/icons/150.png
Binary files differ
diff --git a/themes/the-roots-home/static/icons/152.png b/themes/the-roots-home/static/icons/152.png
new file mode 100644
index 0000000..89ba7ca
--- /dev/null
+++ b/themes/the-roots-home/static/icons/152.png
Binary files differ
diff --git a/themes/the-roots-home/static/icons/16.png b/themes/the-roots-home/static/icons/16.png
new file mode 100644
index 0000000..b53ec3f
--- /dev/null
+++ b/themes/the-roots-home/static/icons/16.png
Binary files differ
diff --git a/themes/the-roots-home/static/icons/180.png b/themes/the-roots-home/static/icons/180.png
new file mode 100644
index 0000000..b7865ab
--- /dev/null
+++ b/themes/the-roots-home/static/icons/180.png
Binary files differ
diff --git a/themes/the-roots-home/static/icons/192.png b/themes/the-roots-home/static/icons/192.png
new file mode 100644
index 0000000..cb87f7b
--- /dev/null
+++ b/themes/the-roots-home/static/icons/192.png
Binary files differ
diff --git a/themes/the-roots-home/static/icons/256.png b/themes/the-roots-home/static/icons/256.png
new file mode 100644
index 0000000..60aa174
--- /dev/null
+++ b/themes/the-roots-home/static/icons/256.png
Binary files differ
diff --git a/themes/the-roots-home/static/icons/310.png b/themes/the-roots-home/static/icons/310.png
new file mode 100644
index 0000000..a7cf2e7
--- /dev/null
+++ b/themes/the-roots-home/static/icons/310.png
Binary files differ
diff --git a/themes/the-roots-home/static/icons/32.png b/themes/the-roots-home/static/icons/32.png
new file mode 100644
index 0000000..6def5b3
--- /dev/null
+++ b/themes/the-roots-home/static/icons/32.png
Binary files differ
diff --git a/themes/the-roots-home/static/icons/36.png b/themes/the-roots-home/static/icons/36.png
new file mode 100644
index 0000000..04250dc
--- /dev/null
+++ b/themes/the-roots-home/static/icons/36.png
Binary files differ
diff --git a/themes/the-roots-home/static/icons/48.png b/themes/the-roots-home/static/icons/48.png
new file mode 100644
index 0000000..46e8b03
--- /dev/null
+++ b/themes/the-roots-home/static/icons/48.png
Binary files differ
diff --git a/themes/the-roots-home/static/icons/512.png b/themes/the-roots-home/static/icons/512.png
new file mode 100644
index 0000000..3694003
--- /dev/null
+++ b/themes/the-roots-home/static/icons/512.png
Binary files differ
diff --git a/themes/the-roots-home/static/icons/57.png b/themes/the-roots-home/static/icons/57.png
new file mode 100644
index 0000000..d62571d
--- /dev/null
+++ b/themes/the-roots-home/static/icons/57.png
Binary files differ
diff --git a/themes/the-roots-home/static/icons/60.png b/themes/the-roots-home/static/icons/60.png
new file mode 100644
index 0000000..0ec964b
--- /dev/null
+++ b/themes/the-roots-home/static/icons/60.png
Binary files differ
diff --git a/themes/the-roots-home/static/icons/70.png b/themes/the-roots-home/static/icons/70.png
new file mode 100644
index 0000000..4759ca4
--- /dev/null
+++ b/themes/the-roots-home/static/icons/70.png
Binary files differ
diff --git a/themes/the-roots-home/static/icons/72.png b/themes/the-roots-home/static/icons/72.png
new file mode 100644
index 0000000..1ba7148
--- /dev/null
+++ b/themes/the-roots-home/static/icons/72.png
Binary files differ
diff --git a/themes/the-roots-home/static/icons/76.png b/themes/the-roots-home/static/icons/76.png
new file mode 100644
index 0000000..4fdf362
--- /dev/null
+++ b/themes/the-roots-home/static/icons/76.png
Binary files differ
diff --git a/themes/the-roots-home/static/icons/96.png b/themes/the-roots-home/static/icons/96.png
new file mode 100644
index 0000000..19f8e90
--- /dev/null
+++ b/themes/the-roots-home/static/icons/96.png
Binary files differ
diff --git a/themes/the-roots-home/static/icons/favicon.ico b/themes/the-roots-home/static/icons/favicon.ico
new file mode 100644
index 0000000..db36262
--- /dev/null
+++ b/themes/the-roots-home/static/icons/favicon.ico
Binary files differ
diff --git a/themes/the-roots-home/static/icons/icon.svg b/themes/the-roots-home/static/icons/icon.svg
new file mode 100644
index 0000000..d158791
--- /dev/null
+++ b/themes/the-roots-home/static/icons/icon.svg
@@ -0,0 +1,31 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+ "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
+ width="512.000000pt" height="512.000000pt" viewBox="0 0 512.000000 512.000000"
+ preserveAspectRatio="xMidYMid meet">
+<metadata>
+Created by potrace 1.13, written by Peter Selinger 2001-2015
+</metadata>
+<g transform="translate(0.000000,512.000000) scale(0.100000,-0.100000)"
+fill="#000000" stroke="none">
+<path d="M2292 4745 c-138 -48 -333 -155 -577 -318 -240 -160 -470 -347 -480
+-390 -12 -55 -46 -267 -69 -432 -47 -340 -85 -787 -106 -1230 -17 -378 -60
+-1825 -54 -1836 2 -4 35 -14 72 -24 l69 -18 17 -53 c36 -115 86 -145 246 -152
+l116 -5 92 52 c50 29 224 117 386 196 301 148 439 230 513 307 l42 43 16 180
+c9 99 29 301 45 448 41 375 58 589 66 833 l7 211 47 -56 c163 -195 346 -293
+595 -321 101 -12 232 -2 341 26 390 97 684 448 780 929 26 126 25 458 0 600
+-50 280 -160 491 -324 621 -80 63 -219 130 -337 161 -94 25 -114 27 -325 27
+-277 1 -384 -19 -583 -107 -31 -14 -61 -27 -65 -28 -4 0 -14 34 -22 77 l-15
+79 -72 13 -72 14 19 39 c11 21 20 44 20 52 0 8 -34 28 -82 47 -114 46 -204 51
+-306 15z m95 -447 c-6 -154 -28 -340 -60 -506 -10 -53 -11 -75 -3 -78 6 -2 37
+-13 68 -23 l58 -20 50 40 c60 47 149 129 322 296 186 179 286 237 464 268 363
+63 612 -64 703 -358 23 -76 25 -96 26 -292 0 -165 -4 -228 -18 -292 -70 -324
+-231 -574 -435 -676 -82 -40 -86 -41 -207 -45 -322 -11 -506 116 -546 378 -15
+96 -8 146 41 308 22 74 40 148 40 167 0 39 -26 75 -86 116 -52 36 -70 34 -151
+-12 -215 -123 -350 -353 -414 -709 -21 -117 -23 -163 -29 -750 -7 -648 -12
+-728 -55 -850 -26 -77 -37 -90 -120 -145 -179 -119 -739 -385 -762 -362 -7 7
+49 1234 87 1907 32 565 76 1127 96 1222 9 46 156 168 339 283 128 80 556 294
+589 295 5 0 6 -68 3 -162z"/>
+</g>
+</svg>
diff --git a/themes/the-roots-home/theme.yml b/themes/the-roots-home/theme.yml
new file mode 100644
index 0000000..df324fe
--- /dev/null
+++ b/themes/the-roots-home/theme.yml
@@ -0,0 +1,21 @@
+# theme.toml template for a Hugo theme
+# See https://github.com/gohugoio/hugoThemes#themetoml for an example
+
+name : "the-roots-home"
+license : "MIT"
+licenselink : "https://rmsubekti.mit-license.org/2020/license.txt"
+description : "i Am ROOT!"
+homepage : "https://github.com/rmsubekti/the-roots-home/"
+tags : [light,simple, root]
+features : [i, am, root]
+min_version : "0.73.0"
+
+author:
+ name : "Rahmat Subekti"
+ homepage : "http://rmsubekti.github.io/"
+
+# If porting an existing theme
+original:
+ name : ""
+ homepage : ""
+ repo : ""