diff --git a/.drone.yml b/.drone.yml
index bbe28c9..7a81f55 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -1,7 +1,7 @@
---
kind: pipeline
type: docker
-name: hugo-builder
+name: test-build
steps:
- name: hugo-extended
@@ -11,9 +11,30 @@ steps:
- git submodule init
- git submodule update
- hugo version
- - hugo --gc=true
+ - hugo --gc=true --minify
+---
+kind: pipeline
+type: docker
+name: deploy
+
+steps:
+- name: hugo-rsync-deploy
+ pull: always
+ image: immawanderer/archlinux-hugo:latest
+ commands:
+ - git submodule init
+ - git submodule update
+ - rm -rfv ./public
+ - hugo --gc=true --minify
+ - cat $hugo_key > hugo_deploy
+ - rsync -avze 'ssh -i hugo_deploy' --delete public/ $hugo_user@$hugo_host:$hugo_dir
+ - shred -zuv 7 hugo_deploy || true
+ when:
+ status:
+ - success
+
---
kind: pipeline
name: notifications
@@ -28,6 +49,7 @@ clone:
trigger:
branch:
- master
+ - "dev*"
- "release/*"
event:
- push
@@ -37,7 +59,7 @@ trigger:
- failure
depends_on:
- - hugo-builder
+ - test-build
steps:
- name: discord
@@ -73,7 +95,7 @@ trigger:
- failure
depends_on:
- - hugo-builder
+ - test-build
steps:
- name: discord
@@ -85,3 +107,34 @@ steps:
from_secret: discord_webhook_hourly_id
webhook_token:
from_secret: discord_webhook_hourly_token
+
+
+---
+kind: pipeline
+name: notifications-deploy
+
+platform:
+ os: linux
+ arch: amd64
+
+clone:
+ disable: true
+
+trigger:
+ status:
+ - success
+ - failure
+
+depends_on:
+ - deploy
+
+steps:
+ - name: discord
+ pull: always
+ image: appleboy/drone-discord:1.2.4
+ settings:
+ message: "{{#success build.status}} ā
Build #{{build.number}} of `{{repo.name}}` has been successfully deployed.\n\nš Commit by {{commit.author}} on `{{commit.branch}}`:\n``` {{commit.message}} ```\n\nš {{ build.link }} {{else}} ā Build #{{build.number}} of `{{repo.name}}` failed to deploy.\n\nš Commit by {{commit.author}} on `{{commit.branch}}`:\n``` {{commit.message}} ```\nš {{ build.link }} {{/success}}\n\n"
+ webhook_id:
+ from_secret: discord_webhook_id
+ webhook_token:
+ from_secret: discord_webhook_token
diff --git a/.gitignore b/.gitignore
index 459911c..1c5c49f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
#do not push builds
-public/
\ No newline at end of file
+public/
+resources/
diff --git a/.gitmodules b/.gitmodules
index 179cb0c..ff46467 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,3 @@
-[submodule "themes/hello-friend-ng"]
- path = themes/hello-friend-ng
- url = https://github.com/rhazdon/hugo-theme-hello-friend-ng.git
+[submodule "themes/hermit"]
+ path = themes/hermit
+ url = https://github.com/Track3/hermit.git
diff --git a/archetypes/posts.md b/archetypes/posts.md
new file mode 100644
index 0000000..fe05261
--- /dev/null
+++ b/archetypes/posts.md
@@ -0,0 +1,10 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+date: {{ .Date }}
+draft: true
+toc: false
+images:
+tags:
+ - untagged
+---
+
diff --git a/assets/scss/_predefined.scss b/assets/scss/_predefined.scss
new file mode 100644
index 0000000..b833149
--- /dev/null
+++ b/assets/scss/_predefined.scss
@@ -0,0 +1,33 @@
+// Colors
+//
+$theme: #D8D8D8;
+$text: #D8D8D8;
+$light-grey: #282a2b; // Background
+$dark-grey: #282a2b; // Hover Bar
+$highlight-grey: #151718; // Highlight background of `keyword`
+$midnightblue: #151718; // Code Background
+
+// Fonts
+//
+$fonts: "Trebuchet MS", Verdana, "Verdana Ref", "Segoe UI", Candara, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Tahoma, sans-serif;
+$code-fonts: Consolas, "Andale Mono WT", "Andale Mono", Menlo, Monaco, "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, "YaHei Consolas Hybrid", monospace, "Segoe UI Emoji", "PingFang SC", "Microsoft YaHei";
+
+// Mixins
+//
+@mixin dimmed {
+ opacity: .6;
+}
+
+@mixin aTag {
+ a {
+ word-wrap: break-word;
+ border: none;
+ box-shadow: inset 0 -1px 0 $theme;
+ transition-property: box-shadow;
+ transition-duration: .1s;
+
+ &:hover {
+ box-shadow: inset 0 -1em 0 $theme;
+ }
+ }
+}
diff --git a/assets/scss/style.scss b/assets/scss/style.scss
new file mode 100644
index 0000000..09ee3bb
--- /dev/null
+++ b/assets/scss/style.scss
@@ -0,0 +1,899 @@
+@import "predefined.scss";
+@import "normalize.scss";
+@import "syntax.scss";
+@import "animate.scss";
+
+/* Webkit Scrollbar Customize */
+::-webkit-scrollbar {
+ width: 8px;
+ height: 8px;
+ background: $midnightblue;
+}
+
+::-webkit-scrollbar-thumb {
+ background: #888;
+
+ &:hover {
+ background: $text;
+ }
+}
+
+html {
+ background: $light-grey;
+ line-height: 1.6;
+ letter-spacing: .06em;
+ scroll-behavior: smooth;
+}
+
+body,
+button,
+input,
+select,
+textarea {
+ color: $text;
+ font-family: $fonts;
+}
+
+pre,
+code,
+pre tt {
+ font-family: $code-fonts;
+}
+
+pre {
+ padding: .7em 1.1em;
+ overflow: auto;
+ font-size: .9em;
+ line-height: 1.5;
+ letter-spacing: normal;
+ white-space: pre;
+ color: #eee;
+ background: $midnightblue;
+ border-radius: 4px;
+ // -webkit-overflow-scrolling: touch;
+
+ code {
+ padding: 0;
+ margin: 0;
+ background: $midnightblue;
+ }
+}
+
+code {
+ color: #eee;
+ background: $highlight-grey;
+ border-radius: 3px;
+ padding: 0 3px;
+ margin: 0 4px;
+ word-wrap: break-word;
+ letter-spacing: normal;
+}
+
+blockquote {
+ border-left: .25em solid;
+ margin: 1em;
+ padding: 0 1em;
+ font-style: italic;
+
+ cite {
+ font-weight: bold;
+ font-style: normal;
+
+ &::before {
+ content: "āā ";
+ }
+ }
+}
+
+a {
+ color: $text;
+ text-decoration: none;
+ border: none;
+ transition-property: color;
+ transition-duration: .4s;
+ transition-timing-function: ease-out;
+
+ &:hover {
+ color: #fff;
+ text-shadow: 0 0 1px #fff;
+ }
+}
+
+hr {
+ opacity: .2;
+ border-width: 0 0 5px 0;
+ border-style: dashed;
+ background: transparent;
+ width: 50%;
+ margin: 1.8em auto;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ empty-cells: show;
+ width: 100%;
+ max-width: 100%;
+
+ th,
+ td {
+ padding: 1.5%;
+ border: 1px solid;
+ }
+
+ th {
+ font-weight: 700;
+ vertical-align: bottom;
+ }
+}
+
+.section-inner {
+ margin: 0 auto;
+ max-width: 1200px;
+ width: 93%;
+}
+
+.thin {
+ max-width: 720px;
+ margin: auto;
+}
+
+.feather {
+ display: inline-block;
+ vertical-align: -.125em;
+ width: 1em;
+ height: 1em;
+}
+
+.sub-menu {
+ font-size: .7em;
+}
+
+.desktop-only, .desktop-only-ib {
+ display: none;
+}
+
+// Code copy buttons
+//
+
+.highlight {
+ position: relative;
+}
+
+.highlight pre {
+ padding-right: 75px;
+}
+
+.highlight-copy-btn {
+ position: absolute;
+ bottom: 7px;
+ right: 7px;
+ border: 0;
+ border-radius: 4px;
+ padding: 1px;
+ font-size: 0.7em;
+ line-height: 1.8;
+ color: #fff;
+ background-color: #777;
+ opacity: 0.6;
+ min-width: 55px;
+ text-align: center;
+}
+
+.highlight-copy-btn:hover {
+ background-color: #666;
+}
+
+// Accessibility
+//
+.screen-reader-text {
+ border: 0;
+ clip: rect(1px, 1px, 1px, 1px);
+ clip-path: inset(50%);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute !important;
+ width: 1px;
+ word-wrap: normal !important;
+}
+
+.screen-reader-text:focus {
+ background-color: #f1f1f1;
+ border-radius: 3px;
+ box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6);
+ clip: auto !important;
+ clip-path: none;
+ color: #21759b;
+ display: block;
+ font-size: 14px;
+ font-size: 0.875rem;
+ font-weight: bold;
+ height: auto;
+ left: 5px;
+ line-height: normal;
+ padding: 15px 23px 14px;
+ text-decoration: none;
+ top: 5px;
+ width: auto;
+ z-index: 100000;
+}
+
+// Header & Footer
+//
+#site-header {
+ position: fixed;
+ z-index: 1;
+ bottom: 0;
+ width: 100%;
+ box-sizing: border-box;
+ box-shadow: -1px -2px 3px rgba(0, 0, 0, 0.45);
+ background-color: $dark-grey;
+}
+
+.hdr-wrapper {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: .5em 0;
+ font-size: 1.2rem;
+
+ .site-branding {
+ display: inline-block;
+ margin-right: .8em;
+ font-size: 1.2em;
+ }
+
+ .site-nav {
+ display: inline-block;
+ font-size: 1.1em;
+ opacity: .8;
+
+ .has-children {
+ padding-right: .5em;
+ border-right: 2px solid $highlight-grey;
+ }
+
+ .sub-menu > a{
+ margin-left: .3em;
+ }
+
+ a {
+ margin-left: .8em;
+ }
+ }
+}
+
+.hdr-icons {
+ font-size: 1.2em;
+}
+
+.hdr-social {
+ display: inline-block;
+ margin-left: .6em;
+
+ &>a {
+ margin-left: .4em;
+ }
+}
+
+.hdr-btn {
+ border: none;
+ background: none;
+ padding: 0;
+ margin-left: .4em;
+ cursor: pointer;
+}
+
+#menu-btn {
+ display: none;
+ margin-left: .6em;
+ cursor: pointer;
+}
+
+#mobile-menu {
+ position: fixed;
+ bottom: 4.8em;
+ right: 1.5em;
+ display: none;
+ padding: .6em 1.8em;
+ z-index: 1;
+ box-sizing: border-box;
+ box-shadow: -1px -2px 3px 0px rgba(0, 0, 0, 0.45);
+ background-color: $dark-grey;
+
+ ul {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ line-height: 2;
+ font-size: 1.2em;
+ }
+}
+
+#site-footer {
+ text-align: center;
+ font-size: .9em;
+ margin-bottom: 96px;
+ margin-top: 64px;
+
+ p {
+ margin: 0;
+ }
+}
+
+// Spotlight
+//
+#spotlight {
+ display: flex;
+ min-height: 100vh;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ max-width: 93%;
+ margin: auto;
+ font-size: 1.5rem;
+
+ &.error-404 {
+ flex-direction: row;
+ line-height: normal;
+ }
+}
+
+p.img-404 {
+ margin: 0;
+
+ svg {
+ width: 180px;
+ max-width: 100%;
+ height: auto;
+ }
+}
+
+.banner-404 {
+ margin-left: 2em;
+
+ h1 {
+ font-size: 3em;
+ margin: .5rem 0;
+ }
+
+ p {
+ margin-top: 0;
+ }
+
+ .btn-404 {
+ font-size: .8em;
+
+ a {
+ display: inline-block;
+ border: 2px solid $text;
+ border-radius: 5px;
+ padding: 5px;
+ transition-property: color, border-color;
+
+ &:first-child {
+ margin-right: 1em;
+ }
+
+ &:hover {
+ border-color: #fff;
+ }
+
+ svg {
+ margin-right: .5em;
+ }
+ }
+ }
+}
+
+#home-center {
+ display: flex;
+ flex-grow: 1;
+ flex-direction: column;
+ justify-content: center;
+}
+
+#home-title {
+ margin: 0;
+ text-align: center;
+}
+
+#home-subtitle {
+ margin-top: 0;
+ margin-bottom: 1.5em;
+ text-align: center;
+ line-height: normal;
+ font-size: .7em;
+ font-style: italic;
+ opacity: .9;
+}
+
+#home-social {
+ font-size: 1.4em;
+ text-align: center;
+ opacity: .8;
+
+ a {
+ margin: 0 .2em;
+ }
+}
+
+#home-nav {
+ opacity: .8;
+
+ a {
+ display: block;
+ text-align: center;
+ margin-top: .5em;
+ }
+}
+
+#home-footer {
+ text-align: center;
+ font-size: .6em;
+ line-height: normal;
+ @include dimmed;
+
+ p {
+ margin-top: 0;
+ }
+}
+
+// list.html
+//
+.posts-group {
+ display: flex;
+ margin-bottom: 1.9em;
+ line-height: normal;
+
+ .post-year {
+ padding-top: 6px;
+ margin-right: 1.8em;
+ font-size: 1.6em;
+ @include dimmed;
+
+ &:hover {
+ text-decoration: underline;
+ cursor: pointer;
+ }
+ }
+
+ .posts-list {
+ flex-grow: 1;
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ }
+
+ .post-item {
+ border-bottom: 1px $highlight-grey dashed;
+
+ a {
+ display: flex;
+ justify-content: space-between;
+ align-items: baseline;
+ padding: 12px 0;
+ }
+ }
+
+ .post-day {
+ flex-shrink: 0;
+ margin-left: 1em;
+ @include dimmed;
+ }
+}
+
+// single.html
+//
+.bg-img {
+ width: 100vw;
+ height: 100vh;
+ opacity: .03;
+ z-index: -1;
+ position: fixed;
+ top: 0;
+ background-attachment: fixed;
+ background-repeat: no-repeat;
+ background-size: cover;
+ background-position: center;
+ transition: opacity .5s;
+}
+
+.show-bg-img {
+ z-index: 100;
+ opacity: 1;
+ cursor: pointer;
+}
+
+.post-header {
+ margin-top: 1.2em;
+ line-height: normal;
+
+ .post-meta {
+ font-size: .9em;
+ letter-spacing: normal;
+ @include dimmed;
+ }
+
+ h1 {
+ margin-top: .1em;
+ }
+}
+
+hr.post-end {
+ width: 50%;
+ margin-top: 1.6em;
+ margin-bottom: .8em;
+ margin-left: 0;
+ border-style: solid;
+ border-bottom-width: 4px;
+}
+
+.content {
+ {{- with .Site.Params.justifyContent }}
+ text-align: justify;
+ text-justify: inter-ideograph; //For IE/Edge
+ {{- end }}
+
+ @include aTag;
+
+ figure {
+ max-width: 100%;
+ height: auto;
+ margin: 0;
+ text-align: center;
+
+ p {
+ font-size: .8em;
+ font-style: italic;
+ @include dimmed;
+ }
+ }
+
+ figure.left {
+ float: left;
+ margin-right: 1.5em;
+ max-width: 50%;
+ }
+
+ figure.right {
+ float: right;
+ margin-left: 1.5em;
+ max-width: 50%;
+ }
+
+ figure.big {
+ max-width: 100vw;
+ }
+
+ img {
+ display: block;
+ max-width: 100%;
+ height: auto;
+ margin: auto;
+ border-radius: 4px;
+ }
+
+ ul,
+ ol {
+ padding: 0;
+ margin-left: 1.8em;
+ }
+
+ a.anchor {
+ float: left;
+ margin-left: -20px;
+ padding-right: 6px;
+ box-shadow: none;
+ opacity: .8;
+ &:hover {
+ background: none;
+ color: $theme;
+ opacity: 1;
+ }
+
+ svg {
+ display: inline-block;
+ width: 14px;
+ height: 14px;
+ vertical-align: baseline;
+ visibility: hidden;
+ }
+ &:focus svg {
+ visibility: visible;
+ }
+ }
+
+ h1:hover a.anchor svg,
+ h2:hover a.anchor svg,
+ h3:hover a.anchor svg,
+ h4:hover a.anchor svg,
+ h5:hover a.anchor svg,
+ h6:hover a.anchor svg {
+ visibility: visible;
+ }
+}
+
+.footnotes {
+ font-size: .85em;
+
+ a {
+ box-shadow: none;
+ text-decoration: underline;
+ transition-property: color;
+
+ &:hover {
+ background: transparent;
+ }
+
+ &.footnote-return {
+ text-decoration: none;
+ }
+ }
+
+ ol {
+ line-height: 1.8;
+ }
+}
+
+.footnote-ref a {
+ box-shadow: none;
+ text-decoration: none;
+ padding: 2px;
+ border-radius: 2px;
+ background-color: $midnightblue;
+}
+
+.post-info {
+ font-size: .8rem;
+ line-height: normal;
+ @include dimmed;
+
+ p {
+ margin: .8em 0;
+ }
+
+ a:hover {
+ border-bottom: 1px solid $theme;
+ }
+
+ svg {
+ margin-right: .8em;
+ }
+
+ .tag {
+ margin-right: .5em;
+
+ &::before {
+ content: "#"
+ }
+ }
+}
+
+#toc {
+ position: fixed;
+ left: 50%;
+ top: 0;
+ display: none;
+}
+
+.toc-title {
+ margin-left: 1em;
+ margin-bottom: .5em;
+ font-size: .8em;
+ font-weight: bold;
+}
+
+#TableOfContents {
+ font-size: .8em;
+ @include dimmed;
+
+ ul {
+ padding-left: 1em;
+ margin: 0;
+ }
+
+ &>ul {
+ list-style-type: none;
+
+ ul ul {
+ font-size: .9em;
+ }
+ }
+
+ a:hover {
+ border-bottom: $theme 1px solid;
+ }
+}
+
+
+.post-nav {
+ display: flex;
+ justify-content: space-between;
+ margin-top: 1.5em;
+ margin-bottom: 2.5em;
+ font-size: 1.2em;
+
+ a {
+ flex-basis: 50%;
+ flex-grow: 1;
+ }
+
+ .next-post {text-align: left; padding-right: 5px;}
+ .prev-post {text-align: right; padding-left: 5px;}
+
+ .post-nav-label {
+ font-size: .8em;
+ opacity: .8;
+ text-transform: uppercase;
+ }
+}
+
+.related-posts {
+ padding: .8em;
+ margin-top: 1.5em;
+ font-size: .8rem;
+ border: 3px dashed rgba(255, 255, 255, .2);
+ border-radius: 5px;
+
+ h2{
+ margin: 0;
+ line-height: normal;
+ }
+
+ ul {
+ margin-top: .5em;
+ margin-bottom: 0;
+ }
+}
+
+
+// Media Queries
+//
+@media (min-width: 800px) {
+ .site-main {
+ margin-top: 3em;
+ }
+
+ hr.post-end {
+ width: 40%;
+ }
+}
+
+@media (min-width: 960px) {
+ .site-main {
+ margin-top: 6em;
+ }
+}
+
+@media (min-width: 1300px) {
+ .site-main {
+ margin-top: 8em;
+ }
+
+ .desktop-only,
+ #toc.show-toc {
+ display: block;
+ }
+
+ .desktop-only-ib {
+ display: inline-block;
+ }
+
+ figure.left {
+ margin-left: -240px;
+ p {
+ text-align: left;
+ }
+ }
+
+ figure.right {
+ margin-right: -240px;
+ p {
+ text-align: right;
+ }
+ }
+
+ figure.big {
+ width: 1200px;
+ margin-left: -240px;
+ }
+
+ hr.post-end {
+ width: 30%;
+ }
+
+ #toc {
+ top: 13em;
+ margin-left: 370px;
+ max-width: 220px;
+ }
+}
+
+@media (min-width: 1800px) {
+ .site-main {
+ margin-top: 10em;
+ }
+
+ .section-inner {
+ max-width: 1600px;
+ }
+
+ .thin {
+ max-width: 960px;
+ }
+
+ figure.left {
+ max-width: 75%;
+ margin-left: -320px;
+ }
+
+ figure.right {
+ max-width: 75%;
+ margin-right: -320px;
+ }
+
+ figure.big {
+ width: 1600px;
+ margin-left: -320px;
+ }
+
+ hr.post-end {
+ width: 30%;
+ }
+
+ #toc {
+ top: 15em;
+ margin-left: 490px;
+ max-width: 300px;
+ }
+}
+
+@media (max-width: 760px) {
+
+ .hide-in-mobile,
+ .site-nav.hide-in-mobile {
+ display: none;
+ }
+
+ #menu-btn {
+ display: inline-block;
+ }
+
+ .posts-group {
+ display: block;
+
+ .post-year {
+ margin: -6px 0 4px;
+ }
+ }
+
+ #spotlight.error-404 {
+ flex-direction: column;
+ text-align: center;
+
+ .banner-404 {
+ margin: 0;
+ }
+ }
+}
+
+@media (max-width: 520px) {
+
+ .content figure.left,
+ .content figure.right {
+ float: unset;
+ max-width: 100%;
+ margin: 0;
+ }
+
+ hr.post-end {
+ width: 60%;
+ }
+
+ #mobile-menu {
+ right: 1.2em;
+ }
+}
diff --git a/config.toml b/config.toml
index 2a02028..7d101ed 100644
--- a/config.toml
+++ b/config.toml
@@ -1,6 +1,10 @@
baseurl = "/"
languageCode = "en-us"
-theme = "hello-friend-ng"
+theme = "hermit"
+copyright = 'WTFPL'
+
+pygmentsCodefences = true
+pygmentsUseClasses = true
[author]
name = "dotya.ml"
@@ -8,13 +12,16 @@ theme = "hello-friend-ng"
[params]
dateform = "Jan 2, 2006"
dateformShort = "Jan 2"
- dateformNum = "2006-01-02"
- dateformNumTime = "2006-01-02 15:04 -0700"
+ dateformNum = "2006-02-01"
+ dateformNumTime = "2006-02-01 15:04 +0000"
# Metadata mostly used in document's head
description = "dotya.ml"
keywords = "homepage, development, git, programming"
images = [""]
+ themeColor = "#282a2b"
+ justifyContent = false
+ relatedPosts = false
# Directory name of your blog content (default is `content/posts`)
contentTypeName = "posts"
@@ -28,28 +35,30 @@ theme = "hello-friend-ng"
logoHomeLink = "/"
[[params.social]]
- name = "telegram"
- url = "https://t.me/#"
+ name = "gitea"
+ url = "https://git.dotya.ml/wanderer?tab=activity"
+ alt = "a gitea instance"
[[params.social]]
- name = "email"
- url = "mailto:"
+ name = "github"
+ url = "https://github.com/wULLSnpAXbWZGYDYyhWTKKspEQoaYxXyhoisqHf"
+ alt = "github profile page"
+
+ [[params.social]]
+ name = "dockerhub"
+ url = "https://hub.docker.com/r/immawanderer"
+ alt = "dockerhub profile page"
[languages]
[languages.en]
title = "dotya.ml"
subtitle = ""
keywords = "homepage, development, git, programming"
- copyright = 'WTFPL'
readOtherPosts = ""
[languages.en.params.logo]
logoText = "dotya.ml"
logoHomeLink = "/"
- # or
- #
- # path = "/img/your-example-logo.svg"
- # alt = "Your example logo alt text"
# You can create a language based menu
[languages.en.menu]
@@ -57,26 +66,31 @@ theme = "hello-friend-ng"
identifier = "about"
name = "about"
url = "/about"
+ alt = "dotya.ml status"
+ weight = 1
+ # [[languages.en.menu.main]]
+ # identifier = "posts"
+ # name = "posts"
+ # url = "/posts"
+ # alt = "dotya.ml posts"
+ # weight = 2
[[languages.en.menu.main]]
- identifier = "gitea"
- name = "gitea"
- url = "https://git.dotya.ml"
- [[languages.en.menu.main]]
- identifier = "drone"
- name = "drone"
- url = "https://drone.dotya.ml"
- [[languages.en.menu.main]]
- identifier = "status"
- name = "status"
- url = "/status"
+ identifier = "contact"
+ name = "contact"
+ url = "/contact"
+ alt = "dotya.ml contact"
+ weight = 3
-# And you can even create generic menu
-[menu]
- [[menu.main]]
- identifier = "about"
- name = "about"
- url = "/about"
- [[menu.main]]
- identifier = ""
- name = ""
- url = "#"
+[privacy]
+[privacy.disqus]
+disable = true
+[privacy.googleAnalytics]
+disable = true
+[privacy.instagram]
+disable = true
+[privacy.twitter]
+disable = true
+[privacy.vimeo]
+disable = true
+[privacy.youtube]
+disable = true
diff --git a/content/28bd2388.md b/content/28bd2388.md
new file mode 100644
index 0000000..75004cc
--- /dev/null
+++ b/content/28bd2388.md
@@ -0,0 +1,114 @@
+---
+title: "0x28bd2388"
+date: 2020-03-07T16:22:03+01:00
+draft: false
+---
+
+```bash
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+yeM11efP7Tnvf97HXMQTJP1FqaONAuFBG/TD
+=80c5
+-----END PGP PUBLIC KEY BLOCK-----
+```
diff --git a/content/about.md b/content/about.md
new file mode 100644
index 0000000..60695b6
--- /dev/null
+++ b/content/about.md
@@ -0,0 +1,11 @@
+---
+title: "about dotya.ml"
+date: 2020-03-07T02:12:03+01:00
+draft: false
+---
+
+Free services provided for fun as a hobby. So far we have [gitea](https://git.dotya.ml) and a [drone](https://drone.dotya.ml) ci/cd instance.
+
+You can see the current status [here](/status).
+
+## [contact](/contact)
diff --git a/content/about/index.md b/content/about/index.md
deleted file mode 100644
index 46111b4..0000000
--- a/content/about/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# about dotya.ml
-
-Free services provided for fun as a hobby. So far we have [gitea](https://git.dotya.ml) and a [drone](https://drone.dotya.ml) ci/cd instance.
diff --git a/content/contact.md b/content/contact.md
new file mode 100644
index 0000000..2740212
--- /dev/null
+++ b/content/contact.md
@@ -0,0 +1,53 @@
+---
+title: "contact"
+date: 2020-03-07T01:53:03+01:00
+draft: false
+---
+\-- wanderer
+
+## e-mail
+
+```
+< a_mirre AT utb DOT cz >
+```
+
+## gpg
+
+#### fingerprint:
+
+```bash
+E860 AB3C D007 8D30 E86C DA74 7B28 D8DC 28BD 2388
+```
+
+the corresponding pubkey: [0x28bd2388](/28bd2388)\
+always **verify** that the fingerprint matches the one on this page
+
+```bash
+$ curl -sS https://dotya.ml/store/28bd2388.asc | gpg -
+```
+
+you can then import the [key](/store/0x28bd2388.asc) to your keyring, like so
+
+```bash
+$ curl -sS https://dotya.ml/28bd2388.asc | gpg --import -
+```
+
+communication using gpg is *preferable*
+
+## Privacy policy
+
+Since I don't like such practices myself, this site *does* **not** collect
+*any* kind of user/browser/device/user agent/network identifier,
+which - for simplicity's sake is - ANY data.\
+Period.\
+No IP addresses are stored, no user
+agents logged, no cookies are used to identify users.
+
+Therefore **no data is collected** and can't be passed on to third parties,
+nor is there any intention of ever doing so.
+
+## Long live the libre world!
+
+Feel at home.\
+Cheers.
+
diff --git a/content/status.md b/content/status.md
new file mode 100644
index 0000000..6d2a546
--- /dev/null
+++ b/content/status.md
@@ -0,0 +1,11 @@
+---
+title: "dotya.ml status"
+date: 2020-03-07T02:13:07+01:00
+draft: false
+---
+
+Any information regarding status of the site and services will be posted here.
+
+* HTTP headers insight as per [Mozilla HTTP Observatory](https://observatory.mozilla.org/analyze/dotya.ml)
+
+* SSL Labs [TLS rating](https://www.ssllabs.com/ssltest/analyze.html?d=dotya.ml)
diff --git a/content/status/index.md b/content/status/index.md
deleted file mode 100644
index 7f71608..0000000
--- a/content/status/index.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# dotya.ml status
-
-![Mozilla HTTP Observatory Grade](https://img.shields.io/mozilla-observatory/grade/dotya.ml)
-Any information regarding status of the site and services will be posted here.
diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html
deleted file mode 100644
index 2a8e157..0000000
--- a/layouts/partials/footer.html
+++ /dev/null
@@ -1,24 +0,0 @@
-
\ No newline at end of file
diff --git a/layouts/partials/svg.html b/layouts/partials/svg.html
new file mode 100644
index 0000000..111049b
--- /dev/null
+++ b/layouts/partials/svg.html
@@ -0,0 +1,50 @@
+{{- if (eq .name "codepen") -}}
+
+{{- else if (eq .name "facebook") -}}
+
+{{- else if (eq .name "gitea") -}}
+
+{{- else if (eq .name "dockerhub") -}}
+
+
+{{- else if (eq .name "github") -}}
+
+{{- else if (eq .name "gitlab") -}}
+
+{{- else if (eq .name "instagram") -}}
+
+{{- else if (eq .name "linkedin") -}}
+
+{{- else if (eq .name "slack") -}}
+
+{{- else if (eq .name "stackoverflow") -}}
+
+{{- else if (eq .name "telegram") -}}
+
+{{- else if (eq .name "twitch") -}}
+
+{{- else if (eq .name "twitter") -}}
+
+{{- else if (eq .name "youtube") -}}
+
+{{- else if (eq .name "email") -}}
+
+{{- else if (eq .name "dribbble") -}}
+
+{{- else if (eq .name "behance") -}}
+
+{{- else if (eq .name "freepik") -}}
+
+{{- else if (eq .name "adobestock") -}}
+
+{{- else if (eq .name "shutterstock") -}}
+
+{{- else if (eq .name "123rf") -}}
+
+{{- else if (eq .name "dreamstime") -}}
+
+{{- else if (eq .name "paypal") -}}
+
+{{- else -}}
+
+{{- end -}}
diff --git a/static/docker.svg b/static/docker.svg
new file mode 100644
index 0000000..576c90c
--- /dev/null
+++ b/static/docker.svg
@@ -0,0 +1 @@
+
diff --git a/static/gitea.svg b/static/gitea.svg
new file mode 100644
index 0000000..0fd0e0b
--- /dev/null
+++ b/static/gitea.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/store/0x28bd2388.asc b/static/store/0x28bd2388.asc
new file mode 100644
index 0000000..75241a4
--- /dev/null
+++ b/static/store/0x28bd2388.asc
@@ -0,0 +1,106 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQINBFyvs6gBEAC6+o9xi6Qzwz7we2hnU6OYLOkcx5Tfo6yTp1Qta7qsKurOFXsu
+FIC7BeKHu9kpxme4qRz8Rgsh+bW+OPVgraFV04gPirQubEiNaXsTFWALfvwGYnvz
+kxAOgXwX9CVobAAatF7hFAhbFTKBGwYjWrxGfi/aDoMYJuew/EZLk4VDJ3HBPDC2
+mQRUOAqLnitEVDRuxxJRsyncFXFp0L0GA7Cg10EAoJBZe+krDYhLmf5xaOUUgkco
+cVRELjMEl3s0b54rnCPgXvD1RrYp8lF40pn1j3RjhP+saDBhFhOiFgkhMgY3fucp
+JQMejvVADbNcVYNakBlDtHf4uwdawoSLiwyAmQmKrtXI8srqk2G8EcPO43Gnzd38
+viJaXMWmz7e9qLCJMxPI/QOnB07A1ropBcROlYlsaUF8IzNcWcumqHfhRaIo2Klk
+0iCDqSj40vYRnXspFwvyJqLZAqDSUkOBCwRBRoC8HragrUyQda2BwhUDsqr9XQZJ
+uES4jB4YWmOk866Rnwe9kTPTRObvJve27AFXnNtwjm4Drb6Mam6M6+VsiqrsSAKd
+HzhfvYGQ2oFTUuzF+6rlSefP8t1oJWTvRYTUauQFQAWakxXLv4YmlCZcOVLSfQPw
+BVraRD2p/u7OZTNEwJ3ArHYKZP3sp1+srirAaki+D2goV7c6OcbkXI2+ewARAQAB
+tBtBZGFtIE1pcnJlIDxhX21pcnJlQHV0Yi5jej6JAk4EEwEKADgCGwMCHgECF4AF
+CwkIBwMFFQoJCAsFFgIDAQAWIQToYKs80AeNMOhs2nR7KNjcKL0jiAUCXRZP+AAK
+CRB7KNjcKL0jiDcMEAC1BN98FnCgebWNm0VDJEtZD0Wzr/GxvbROoihNYgUfK5iv
+xx0bflxJrZ3cQkO+5nyf1x5+i9khYaegB+oxsjtO+u2ItCeskQJQOoLxJmVgyIrb
+XpT+SIjwxSDHCoOjq2FFbQSY2kAOeNf4FoA/IdA5ldEgKZ5h5XpgtK8Xq7hkwe45
+WVe5peUqgSfiD7+/Ka/PHtz8WnTBVY9mjtp3tm3J8dlEHg5Bcu74tvZ/Br0QlZVE
+JnsEVCMD39Yv/94BspdWSvuzDHK2uvCBwSjGaK+OFGvxGrV5NlOY+IpSvkX+xWxb
+NI44woVyv7ZDPct5S6yBlvOqT/gxPU++NtJVMubkPpAckwVUVgDidlIrv+KLusxe
+0Z6PAuMXU5zR5MP6q5Wip0pcNj1jmi8+sZ+MoMqyLzXM01PvEhbR6qPnkClEq5gI
+1FvUZxnpiM8utAqJxGfw/aueuCIoP5NI2+fOLAPMQzXAa/hJBHDrxwyXH0P7a5zj
+RuKw98jYX0ZivkKr4mgFguyuyJCqPJRVtt488+nJtvdJ9JZhHnTakhwJRyNa1aRO
+II/3M9y4Giya90fUIUu9D79jw4dM8Bb91xUapAzRse+aBt/nv6dhDSQUaz0UNJ+u
+SbDuDjNHyom7LxBa43xQJXdJUun+sftQcGMnX3Jb6iMmpBExYqCnLlw4TEBIjYkB
+MwQTAQgAHRYhBBjYaWPC4EKsiohVUtp69NWeYwZSBQJdFOYmAAoJENp69NWeYwZS
+O30IAK+sVEaxVoF8q+KrxczZ55DmRFDectCEkYu1OjISM4gNKfG8otpjjZ97Lg5+
+zPKn2uTl6LP0CknFZQEkrmhcLypS4rRF6ryxY5KdEqrOBDKrQcBcKFQhqUfpXryA
+sFBFJJCzWUR9J3b+VdUH17Hh+XeORr7d1ZXMvYdEkuZQNR91MgvpSCBT9ONUFZxf
+1iIWSEZJRPT9t7jfHFmtLxQr3Sjuv8BEQtd815n6hQT8b+qYEACwe9gVW891on+Y
+Fp6FDGGWtuZ9XF95Z4IWw93mYUZMcrZ67liSB38hOsd1FEWQPOKXNbMYQfpa1L+T
+AK0rkemoimgPUEW8a+FgweAGIGWJAjMEEAEKAB0WIQQjJtMdO+P2gMkzyzSqchdj
+fDMflQUCXRZRmgAKCRCqchdjfDMflSLMD/9+A2H9xoUUNlOAAjoi1AJpyBeP6m+S
+Q40ljPwcqArsCZZFsHwwTRGS1H5674Ry+cDKNqEVtY4gAgt6Wd2wf34g/vhFuLYc
+3AYj2fyy9sKCT0N4+F09i6VN/i3dhtR4plabwuQE2QpE/lN+8ZGphH58o5TZzr48
+WLM3uvEr7XjbCyfhnIFrMzUrizHoHr1sXFqWZAtMQhsfnPscXwuHDryUIsvrrj2h
+4dbq6FEd9vuwFQ2kQE1eJKRVspJQyxReOUfNJMTMax5MEgMwHdoN1lmFB1sxHb4t
+7foedaFEmsFtmdHLSo3Vj86mtLaHwi93yNkgqax9J7SDrKfJxTI0h6jIujwW2wLT
+cCuiF/oaQP1huda5rIvsYXfMgsL8AVxN7Z/A91JqPalx0j7LTCbHu/NnSwxi42Og
+Wc8acfHA3HFEfnuK/3D7/ePzc1w/n215Fn3ELAuNb3wcVLXAJg22ZChhfq6Rdxao
+vTFec2mF6OuAhh0LLYaUndZ26Ci6mN7mmez6B52dC2QLMCOIckJnPlMkhXRLHjIe
+8G/qs9b89CZ9RuaXiJXl5XYDM9gAkateBUMkSm1Vo21pJ+7JTuUnqsPHcf+hpdk1
+PkTuzoKpqFW1tu8PV8oaG+t7fQToLgRS+jGfcJPoBJ2j8uHmkbd3LoYScs9i2zPB
+WM9fDx4yG5XtuYkCTgQTAQgAOAIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYh
+BOhgqzzQB40w6GzadHso2NwovSOIBQJdFOXtAAoJEHso2NwovSOIRyQP/jU28BNC
+LJ34GJqsTeVtU0c4yjVSchwj0r06K3zK8zNR7eWeOxtj0aSB68K3Jf7agEGIJY8E
+QVhpeK4Ud3cEHvUWHYmDQqogfqzAuthibWxWtBPQJtpAiOeUorGVPzWxM3kE5xRF
+HDQElLlsSwxxtACkeMdU4V0yjHJUdTHyl3VjrHI6SkPq7FwSctQdMqAdtylggCC3
+kMEw2egsx/9olzpQSsCDZJNOQsqiRePX/2zw3BPlYQve0Czp+eDz7WZzlOstQNSU
+ThrWY7QD71k1qsYzYlo0dkun1lnTujhHclpoKWJtDlVgfUGajvvXZW0QBiF9b5ov
+tHljI8sGA60XVquTwJgGcUrZ+pRHNUAykDd0elucOBhHaDfnN0rN+8FwF1k5jYee
+7i7HvfwYiKaVwJPIvtbt3V8lS3ki5NBcABpBCEzi30/67kGIhgMGiTjvN6Ch1ns2
+vFiK0FzVkj8pF5Q2RDUdiuwDu0SgL3vp6m8hyQ3imd0IOYA4SHVHdcgZGEz6rfwG
+jCNvhU70x1z70ApbbFN9L3VSvW5PYyFM7quaoe/lP2lBALEBD47dyIUrbJBhJOaS
+np6lfpY2MVHSAK/HuIw7A2ast7z9CFBcIFK+ithnC+MWZKwg2MDG8r+mh8r0btTD
+nCc0CmhuoWeaoOVEZi2rfkqAZYuIFinoJayYiQJOBBMBCgA4AhsDAh4BAheAFiEE
+6GCrPNAHjTDobNp0eyjY3Ci9I4gFAl2X2LgFCwkIBwMFFQoJCAsFFgIDAQAACgkQ
+eyjY3Ci9I4iiXxAAhmkFBPYQYgZ8zAyGJnR3AvSixk9Kgh4kVMe5mmhlLOf1XP9L
+T3BSAhmNuVeVa3spk/qEMzGOIe1bVFZymm64vYtmLUzYPu8efJSJA7U2d45hdiCp
+AJexr3+Xt3QlAAw5cx0AsSQeRmI+OWkdw0eYR8fSzUt+PJZE7bclIwxQIrFUNwiD
+NGZaWZ9fzqD3gBykRoSf7phxODjMezxehFk0wbGYFdlOKFgsdaszhSgoAPDy3r+k
+B45xT2/rIUaoLP+VyDOQVGGxXSuM6EBUEOrKgVxJH5oqM08XBtwI7EBYIjfqHMgM
+/y876B1izRUHCaPwH1NMCj8SRrp2lBEkiUSKbIjNNtNW147yZE7YmVykx7zHxEBP
+kqxw7ntbWiF/pUlR6+6LwddfcdNGaQITacbZQJBLOlzjk3nqO2jZqnwP3U9qKiwR
+AESlOxAlqjHVhpxIEFZJcPqr4s0okNRj5C7x7BMqXfvaT3CQDzb6NSctiKUstMZe
+fRNmmW7eGp/MOC6p0wG7CHKd858qhHZC8Xw7wAcJNIj5JxNYqh6zNB96pLcStk1E
+tzZJp1ACRvH+xL2piPn7jUE+qd+SXdJXeBRsabwHIQvmWxAS/js1jfestQ4HetAD
+Jgpfna1qxIRY0FSEaxmF7vjYNVIKFS991RFzRCU6vdE7iJTBlONEiisdmteJAjME
+EAEKAB0WIQQFHFfzddzfJ+tjaLgZzh7B2eBIbQUCXadj9QAKCRAZzh7B2eBIbZy2
+D/9qbkcMowplpZAjEEek3A9tgu07d0jhD+S3F77Qk0Q/7KhOF1hI/RUN3/NeTxe7
+CDp9dgVOX70+BIlcIaxQc9UqfOr1ASFn83W7dEfxyYtCCkkgvMcV0AVTPyA7i1zk
+7BRXPmLuPRfnGQnzWv4/wzKZ8FlW2Q4fgGhhyVe20Lu4c2Xr1v2R+vU7ob52vCG8
+37ia1ABJZ4R1TpwD6zJJj0Tw/OANiFpEdIn/cGHJ2nW41i0fjlDr1UfTNP1LoaNH
+g+1m7zS7s8X0mG81Qydqvf3eiPLwyvLTrzMv6Qa5LpUsnf/wquuqjqoyjfSI41Z8
+1N3KQYXIRKVauecCP8W0iF+MnmOgBlK9wGsMMRQe6Xoul/WhAyGiV+f9GG5auWzm
+KAduakNCns6pLxnbxs+kHSCoxf0g6+bgj5FO60tzN7Csm09McKuWjcxFEATTdAVu
++hbSxtNTiYYdC78Q/IHvee4PtGNuQATfy2FlsOHZFaCnI4pYm1Dopwm8yKIzJdj0
+VO8oKMGGAJsTxyGr0oVc775mpz3lCstcz1Jcc8Old2mtECmyZNGtUcDa6Fl6Rk/i
+ZPJolr8SxHhfzvH7F5MTx0XETVGkM3hZfLkFuXmA9F3j/BVEfbN8OL0mfBo0D6zg
+NSn6jxF5fRvDegN1k4DvdQR0KZxu7YKVdnZBOMn2MAvkzrkCDQRcr7OoARAAziHq
+HCBlm/ay4AYAxLR8gmHX+NZ0vPSJof5E4VhYGrTFGVEwqaEhb6/+wY/NmypCKtMP
+vQJrAd6oZkH7QBfdiOmWOtPywxrB9olly5EuXjgBngjY8XnE/dZHH8Hq6I7k1DZq
+wxz9YEAXqOz0HwW8IWmHAPNSdjnQZZS1QIWJb6qQ36xV//Khn7milkOhep1yTweu
+9sp5mjD7/jhiHWEbEuVNlBo5kI20ggMVeNejDA0ClbdYcmai61UaigOBRdKPcr2u
+mHc52uqTAAPW1C7fwXuh7gEznAaCeZvnoZlF1Vyk10yzAzGR2q6RAT/GJ1MSd/91
+FDbkOWdb3KEodqINAJoKgY3ZKccVjsZmi6PD7zLQhJFs73IhoKEdu8Zjjpv5rUI5
+XTns2sVDQCBAtQ9/CDFEauH2z1oiqVCqM25gXtl4VgSnkJlS/7+AtwUlnVx82FFK
+uNPhRzi4abB13YNMDqWzHteyfB7aYA6O3X1fh2B/vJOHiw1V6lPhsWrpnS/0Ok7g
+nL59adE/7WbiVuIbHUY/gex2bo+CqGiXRq7isgrMPsMtBSCsxGD1sKATQiBEdJ+F
+D3D7nAhvqDEbLIjrfZag6GA7t/dSTpFTbJV10Ur4jTc8qaEQqioNjBW3ScppYnEc
+BAWzL552Sah34I8FIuEZonB6EZk5MRcNwveHDUMAEQEAAYkCNgQYAQgAIAIbDBYh
+BOhgqzzQB40w6GzadHso2NwovSOIBQJdFOXuAAoJEHso2NwovSOI5qwQAIGqF9QK
+ySOj0xLuxz+sGYQozW+JBevIV2vIb1MlrtzD6nSPkaamI9qRTtpVlQaEFl+4p77U
+egYxjdy6MsEoSCyMmeSeoLfD4lj8CO1m/rCrqisWOs017KtyDybjL2Nrv6ciZ79A
+wns097+jVzr6aDfFSULS111vvcjqeXRx/MK2a5+d7dZ4vjyOYDivTtdZDRgznhy4
+JebznzdU35KQ/OZZWidcKrXdyzHMV6/Xjv86EV3V39hscTYUoJIGPD7fC3UpW1DN
+jgmE5bRO7AZvUObpIH8+CExJpGDsrG4YmMqitiz3saD+wPur3k0qUvfn8XCw/ARA
+RRJE2584x6ES4LiMVQQH2FjaFzG+i4nXcG+PIaXU+RZHBSozdVizLzzL52MklxzW
+WxAQJMXL5gsplGUxSneZz40Hx0YIUM/FL/kWJAwoQXNuDAZIY9A/z851eq2sSb00
+PgtnaDuG0hu9vZLVY49blYkWR4jOEejId5Re/aRhu1EwItmOHmitN3uA77jBu+Ja
+j6qeq9ovHNGP0UdWXXMwqP+WAvw/4xc/qO97dksv6K9SaGuCmoN183rbQLrDKIx0
+EJ99OM12d6rO9ELb4x6QyrlTyjRQqTXa4VnAYR6OQu4V4c2p0C2AYjxEVXOCMfdr
+yeM11efP7Tnvf97HXMQTJP1FqaONAuFBG/TD
+=80c5
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/themes/hello-friend-ng b/themes/hello-friend-ng
deleted file mode 160000
index b2f7b9e..0000000
--- a/themes/hello-friend-ng
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit b2f7b9eabfcb59a8f0d16c529a6b53d82248e6c2
diff --git a/themes/hermit b/themes/hermit
new file mode 160000
index 0000000..fc2dea0
--- /dev/null
+++ b/themes/hermit
@@ -0,0 +1 @@
+Subproject commit fc2dea04366bc3416aa1f35bbfa860d7843b0ca7