initial commit
48
404.html
Normal file
@ -0,0 +1,48 @@
|
||||
---
|
||||
layout: default
|
||||
title: 404
|
||||
permalink: /404.html
|
||||
---
|
||||
|
||||
<div class="container-fluid index error">
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-12 content-panel articles">
|
||||
<h1 class="header author-header">404</h1>
|
||||
|
||||
<div class="error-text">
|
||||
Sorry but this page doesn't seem to exist.
|
||||
</div>
|
||||
|
||||
<div class="error-text">
|
||||
<a href="{{ site.baseurl }}/">Home</a> |
|
||||
<a href="{{ site.baseurl }}/by-year/">All Posts</a> |
|
||||
<a href="{{ site.baseurl }}/search/">Search</a>
|
||||
</div>
|
||||
|
||||
{% include social_links.html %}
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="content-panel related">
|
||||
{% for post in site.posts limit:1 %}
|
||||
<div class="related-header">
|
||||
<a href="{{ site.baseurl }}{{ post.url }}">Suggested Article</a>
|
||||
</div>
|
||||
<div class="title">
|
||||
<a href="{{ site.baseurl }}{{ post.url }}">{{ post.title }}</a>
|
||||
</div>
|
||||
<div class="excerpt">
|
||||
{% if post.summary %}
|
||||
{{ post.summary | strip_html | truncatewords:30 }}
|
||||
{% else %}
|
||||
{{ post.excerpt | strip_html | truncatewords:30 }}
|
||||
{% endif %}
|
||||
<a href="{{ site.baseurl }}{{ post.url }}">Continue Reading</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
</div>
|
22
LICENSE
Normal file
@ -0,0 +1,22 @@
|
||||
This theme is Open Source under the GPLv3 license as stated below. The theme is intended
|
||||
to be used for creating jekyll blogs where the author is expected to retain copyright
|
||||
on their content and therefore the following files and directories are not included in
|
||||
the GPLv3 license:
|
||||
|
||||
* _config.yml
|
||||
* _data/
|
||||
* _drafts/
|
||||
* _posts/
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
@ -1,2 +1,6 @@
|
||||
# sthope.dev
|
||||
# Website
|
||||
|
||||
TODO:
|
||||
- [ ] fix page icon (terminal logo)
|
||||
- [ ] fix profile picture
|
||||
- [x] upload and fix posts
|
39
_config.yml
Normal file
@ -0,0 +1,39 @@
|
||||
title: "Sthope"
|
||||
url: "https://www.sthope.dev/"
|
||||
description: "My adventures with electronics."
|
||||
|
||||
baseurl: ""
|
||||
google_analytics:
|
||||
disqus_account: sthope-dev
|
||||
github_repository:
|
||||
addthis_id:
|
||||
post_limit: 5
|
||||
|
||||
# profile_pic: "/assets/images/avatar-sthope.png"
|
||||
gravatar: "95f364b924da6af7e7def150ebc68277"
|
||||
sthopegit: "Sthope"
|
||||
github: "Sthopeless"
|
||||
reddit: "hopeless_automations"
|
||||
email: "hopelessautomations@gmail.com"
|
||||
discord: "365825462074605569"
|
||||
twitter: "Sthope_dev"
|
||||
facebook: "Sthope.dev"
|
||||
|
||||
instagram_username:
|
||||
linkedin_link:
|
||||
google_plus_link:
|
||||
stackoverflow_link:
|
||||
xing_link:
|
||||
|
||||
# footer_left: "Made with <i class=\"fa fa-heart\"></i>"
|
||||
# footer_right: "</> on <a href=\"https://git.sthope.dev/sthope/\">Sthope</a> <i class=\"fa fa-git\"></i>"
|
||||
|
||||
markdown: kramdown
|
||||
kramdown:
|
||||
input: GFM
|
||||
syntax_highlighter: rouge
|
||||
|
||||
include: ["_pages"]
|
||||
permalink: /:title
|
||||
|
||||
exclude: [vendor, changelog.md, LICENSE.txt, README.md, Gemfile, Gemfile.lock]
|
5
_data/mydockercontainers.yml
Normal file
@ -0,0 +1,5 @@
|
||||
- name: tuya_doorlock
|
||||
- name: randompwd
|
||||
- name: randomport
|
||||
- name: mqtt-broker
|
||||
- name: dckrtmplt
|
11
_data/thumbnail.yml
Normal file
@ -0,0 +1,11 @@
|
||||
gravatar: "https://www.gravatar.com/avatar/00000000000000000000000000000000?s=500&d=mm"
|
||||
jekyll: "https://i.imgur.com/aRQcGSi.png"
|
||||
# sthope.dev
|
||||
sthope_logo: "/assets/images/avatar-sthope.png"
|
||||
### Logos
|
||||
|
||||
docker-logo: "/assets/images/docker-logo.png"
|
||||
|
||||
jekyll-logo: "/assets/images/jekyll-logo.png"
|
||||
portainer-logo: "/assets/images/portainer-logo.png"
|
||||
proxmox-logo: "/assets/images/proxmox-logo.png"
|
86
_includes/footer.html
Normal file
@ -0,0 +1,86 @@
|
||||
<div class="footer clearfix">
|
||||
<div class="col-md-6">
|
||||
{{ site.footer_left }}
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
{{ site.footer_right }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
|
||||
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
|
||||
<script src="{{ site.baseurl }}/assets/js/jquery.mmenu.min.all.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.7/highlight.min.js"></script>
|
||||
<script>hljs.initHighlightingOnLoad();</script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
$("#my-menu").mmenu().on( "closed.mm", function() {
|
||||
$(".menu-button").show();
|
||||
});
|
||||
$(".menu-button").click(function() {
|
||||
$(".menu-button").hide();
|
||||
$("#my-menu").trigger("open.mm");
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
{% if page.make-smaller-titles %}
|
||||
<script type="text/javascript">
|
||||
|
||||
function setFontSize() {
|
||||
|
||||
var title, dateOfTitle, fontSizeOfTitle, listOfA, listOfSmall, listOfArticlesDiv, divWidth;
|
||||
|
||||
listOfArticlesDiv = document.getElementsByClassName("articles");
|
||||
|
||||
for (i = 0; i < listOfArticlesDiv.length; i++) {
|
||||
|
||||
listOfA = document.getElementsByClassName("articles")[i].getElementsByTagName("a");
|
||||
listOfSmall = document.getElementsByClassName("articles")[i].getElementsByTagName("small");
|
||||
|
||||
divWidth = document.getElementsByClassName("articles")[i].offsetWidth;
|
||||
|
||||
for (k = 0; k < listOfSmall.length; k++) {
|
||||
|
||||
title = $(listOfA[k]);
|
||||
dateOfTitle = $(listOfSmall[k]);
|
||||
|
||||
fontSizeOfTitle = startingFontSize;
|
||||
title.css("font-size", fontSizeOfTitle);
|
||||
|
||||
while (title.width() + dateOfTitle.width() >= divWidth)
|
||||
title.css("font-size", fontSizeOfTitle -= 0.5);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getStartFontSize() {
|
||||
try {
|
||||
startingFontSize = parseInt($(document.getElementsByClassName("articles")[0].getElementsByTagName("a")[0]).css("font-size"));
|
||||
setFontSize();
|
||||
window.addEventListener('resize', setFontSize, true);
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
$(document).ready(getStartFontSize);
|
||||
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
{% if site.google_analytics %}
|
||||
<script type="text/javascript">
|
||||
var _gaq = _gaq || [];
|
||||
_gaq.push(['_setAccount', '{{ site.google_analytics }}']);
|
||||
_gaq.push(['_trackPageview']);
|
||||
(function () {
|
||||
var ga = document.createElement('script');
|
||||
ga.type = 'text/javascript';
|
||||
ga.async = true;
|
||||
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||
|
||||
var s = document.getElementsByTagName('script')[0];
|
||||
s.parentNode.insertBefore(ga, s);
|
||||
})();
|
||||
</script>
|
||||
{% endif %}
|
37
_includes/head.html
Normal file
@ -0,0 +1,37 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<!-- <title>{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}</title> -->
|
||||
<title>{{ site.title }}</title>
|
||||
<meta name="description" content="{{ site.description }}">
|
||||
<script src="https://kit.fontawesome.com/f9020a2800.js" crossorigin="anonymous"></script>
|
||||
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" type="text/css" media="all" href="{{ site.baseurl }}/assets/css/style.css" />
|
||||
<link rel="stylesheet" type="text/css" media="all" href="{{ site.baseurl }}/assets/css/jquery.mmenu.all.css" />
|
||||
<link rel="stylesheet" href="{{ site.baseurl }}/assets/css/highlightjs.piperita.css">
|
||||
|
||||
<!-- Favicons generated at http://realfavicongenerator.net/ -->
|
||||
<link rel="icon" type="image/png" href="{{ site.baseurl }}/favicons/android-chrome-192x192.png" sizes="192x192">
|
||||
<link rel="icon" type="image/png" href="{{ site.baseurl }}/favicons/android-chrome-512x512.png" sizes="512x512">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="{{ site.baseurl }}/favicons/apple-touch-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" href="{{ site.baseurl }}/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="{{ site.baseurl }}/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="manifest" href="{{ site.baseurl }}/favicons/site.webmanifest">
|
||||
<link rel="shortcut icon" href="{{ site.baseurl }}/favicons/favicon.ico">
|
||||
<meta name="msapplication-TileColor" content="#da532c">
|
||||
<!-- <meta name="msapplication-TileImage" content="{{ site.baseurl }}/favicons/mstile-144x144.png"> -->
|
||||
<meta name="msapplication-config" content="{{ site.baseurl }}/favicons/browserconfig.xml">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
|
||||
{% if site.addthis_id %}
|
||||
<!-- Go to www.addthis.com/dashboard to customize your tools -->
|
||||
<script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid={{ site.addthis_id }}"></script>
|
||||
{% endif %}
|
||||
|
||||
{% if page.content contains '<script type="math/tex' %}
|
||||
<!-- MathJax for LaTeX -->
|
||||
<script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
|
||||
{% endif %}
|
||||
|
||||
</head>
|
15
_includes/header.html
Normal file
@ -0,0 +1,15 @@
|
||||
<nav id="my-menu">
|
||||
<div>
|
||||
<p>{{ site.title }}</p>
|
||||
|
||||
<ul class="pages">
|
||||
<li><a href="{{ site.baseurl }}/"><i class="fa fa-home"></i> Home</a></li>
|
||||
<li><a href="{{ site.baseurl }}/by-year/"><i class="fa fa-archive"></i> All Posts</a></li>
|
||||
<li><a href="{{ site.baseurl }}/dockercontainers"><i class="fab fa-docker"></i> My Dockers</a></li>
|
||||
<li><a href="{{ site.baseurl }}/search/"><i class="fa fa-search"></i> Search</a></li>
|
||||
</ul>
|
||||
|
||||
{% include social_links.html %}
|
||||
</div>
|
||||
</nav>
|
||||
<div class="menu-button" href="#menu"><i class="fa fa-bars"></i></div>
|
14
_includes/social_links.html
Normal file
@ -0,0 +1,14 @@
|
||||
<p class="links">
|
||||
{% if site.discord %}<a href="https://discordapp.com/users/{{ site.discord }}/" target="_new"><i class="fab fa-discord"></i></a>{% endif %}
|
||||
{% if site.github %}<a href="https://github.com/{{ site.github }}" target="_new"><i class="fab fa-github"></i></a>{% endif %}
|
||||
{% if site.sthopegit %}<a href="https://git.sthope.dev/{{ site.sthopegit }}" target="_new"><i class="fab fa-github-alt"></i></a>{% endif %}
|
||||
{% if site.twitter %}<a href="https://www.twitter.com/{{ site.twitter }}" target="_new"><i class="fab fa-twitter"></i></a>{% endif %}
|
||||
{% if site.facebook %}<a href="https://facebook.com/{{ site.facebook }}" target="_new"><i class="fab fa-facebook"></i></a>{% endif %}
|
||||
{% if site.stackoverflow_link %}<a href="{{ site.stackoverflow_link }}" target="_new"><i class="fab fa-stack-overflow"></i></a>{% endif %}
|
||||
{% if site.linkedin_link %}<a href="{{ site.linkedin_link }}" target="_new"><i class="fa fa-linkedin"></i></a>{% endif %}
|
||||
{% if site.xing_link %}<a href="{{ site.xing_link }}" target="_new"><i class="fa fa-xing"></i></a>{% endif %}
|
||||
{% if site.instagram_username %}<a href="https://www.instagram.com/{{ site.instagram_username }}" target="_new"><i class="fa fa-instagram"></i></a>{% endif %}
|
||||
{% if site.google_plus_link %}<a href="{{ site.google_plus_link }}" target="_new"><i class="fa fa-google-plus"></i></a>{% endif %}
|
||||
{% if site.reddit %}<a href="https://www.reddit.com/u/{{ site.reddit }}" target="_new"><i class="fab fa-reddit-alien"></i></a>{% endif %}
|
||||
{% if site.email %}<a href="mailto:{{ site.email }}" target="_new"><i class="fas fa-envelope"></i></a>{% endif %}
|
||||
</p>
|
19
_layouts/default.html
Normal file
@ -0,0 +1,19 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
{% include head.html %}
|
||||
|
||||
<body>
|
||||
|
||||
{% include header.html %}
|
||||
|
||||
<div class="page-content">
|
||||
<div class="wrap">
|
||||
{{ content }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% include footer.html %}
|
||||
|
||||
</body>
|
||||
</html>
|
60
_layouts/mydockerfile.html
Normal file
@ -0,0 +1,60 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
<style>
|
||||
.mydockertitle {
|
||||
padding: 30px;
|
||||
padding-left: 255px;
|
||||
color:greenyellow;
|
||||
font-size: 32px;
|
||||
font-weight: 500;
|
||||
text-align: center;
|
||||
margin-left: -10%;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 0px;
|
||||
width: 120%;
|
||||
font-family: 'Open Sans', sans-serif;
|
||||
}
|
||||
|
||||
.mydockerlist {
|
||||
text-align: left !important;
|
||||
padding-left: 255px !important;
|
||||
line-height: 0.5 !important;
|
||||
margin-top: 0px !important;
|
||||
}
|
||||
|
||||
.mydockericon {
|
||||
margin-top: 0px;
|
||||
margin-bottom: 0px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div class="mydockericon"> <img itemprop="image" src="/assets/images/docker-banner.png" width="50%" height="50%" alt="docker" /> </div>
|
||||
|
||||
<div class="container-fluid index">
|
||||
<!-- <div class="mydockericon"> <i class="fab fa-docker fa-9x"></i> </div> -->
|
||||
|
||||
<a class="mydockertitle" href="{{page.github_packages}}"> {{ page.title }} </a>
|
||||
|
||||
<div class="col-md-12 content-panel articles mydockerlist">
|
||||
|
||||
<!-- <ul style="list-style-type:lower-roman"> -->
|
||||
<!-- <ul style=list-style-type:"\1F433"> -->
|
||||
<ul style="list-style-type:upper-roman">
|
||||
{% for item in site.data.mydockercontainers %}
|
||||
<li>
|
||||
<a href="https://github.com/users/Sthopeless/packages/container/package/{{ item.name }}" target="_blank"> {{ item.name }}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
<!-- {{ content }} -->
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="">
|
||||
<div class="row">
|
1
_layouts/none.html
Normal file
@ -0,0 +1 @@
|
||||
{{ content }}
|
12
_layouts/page.html
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
<div class="container-fluid index">
|
||||
<div class="row index all-posts">
|
||||
<h2 class="header" itemprop="headline"> {{ page.title }} </h2>
|
||||
<div class="col-md-12 content-panel articles">
|
||||
{{ content }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
182
_layouts/post.html
Normal file
@ -0,0 +1,182 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
{% if page.minutes %}
|
||||
{% assign minutes = page.minutes %}
|
||||
{% else %}
|
||||
{% assign minutes = content | number_of_words | divided_by: 180 %}
|
||||
{% if minutes == 0 %}{% assign minutes = 1 %}{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<div class="container-fluid single">
|
||||
<div class="row">
|
||||
|
||||
<div itemscope itemtype="http://schema.org/Article" class="col-md-12 article">
|
||||
{% if site.data.thumbnail[page.thumbnail] %}
|
||||
<div class="thumb">
|
||||
<img itemprop="image" src="{{ site.data.thumbnail[page.thumbnail] }}" alt="Thumbnail: {{ page.thumbnail }}" />
|
||||
</div>
|
||||
|
||||
{% elsif page.thumbnail %}
|
||||
<div class="thumb">
|
||||
<i class="fa fa-{{ page.thumbnail }} fa-4x"></i>
|
||||
</div>
|
||||
|
||||
<!-- Sthope Posts Images -->
|
||||
{% elsif page.image %}
|
||||
<div class="thumb">
|
||||
<img itemprop="image" src="/assets/images/{{ page.image }}" alt="Image: {{ page.image }}" />
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<h1 class="header" itemprop="name">{{ page.title }}</h1>
|
||||
|
||||
<div class="author">
|
||||
<small><i>
|
||||
{% if page.author %}
|
||||
by
|
||||
<span itemprop="author">
|
||||
{% if site.google_plus_link %}
|
||||
<a rel="author" href="{{ site.google_plus_link }}">
|
||||
{% endif %}
|
||||
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
|
||||
<span itemprop="name">{{ page.author }}</span>
|
||||
</span>
|
||||
{% if site.google_plus_link %}
|
||||
</a>
|
||||
{% endif %}
|
||||
</span>
|
||||
{% endif %}
|
||||
on <span itemprop="datePublished" content="2014-08-28">{{ page.date | date: "%B %-d, %Y" }}</span>
|
||||
</i></small>
|
||||
</div>
|
||||
|
||||
<div class="read-time">
|
||||
<small>
|
||||
{{ minutes }} minute read
|
||||
</small>
|
||||
</div>
|
||||
|
||||
<div class="content-panel content">
|
||||
|
||||
{% if page.series %}
|
||||
This post is part of the series '{{ page.series }}':
|
||||
<ol class="series">
|
||||
{% for apost in site.posts reversed %}
|
||||
{% if page.series == apost.series %}
|
||||
<li>
|
||||
{% if page.title == apost.title %}
|
||||
{% assign nextpost = true %}
|
||||
{{ apost.title }}
|
||||
{% else %}
|
||||
{% if nextpost == true %}
|
||||
{% assign seriesnext = apost %}
|
||||
{% endif %}
|
||||
{% assign nextpost = false %}
|
||||
<a href="{{ apost.url }}">{{ apost.title }}</a>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ol>
|
||||
{% endif %}
|
||||
|
||||
<!-- Sthope Description -->
|
||||
{% if page.description %}
|
||||
<p> {{ page.description }} </p>
|
||||
{% endif %}
|
||||
|
||||
<span itemprop="articleBody">{{ content }}</span>
|
||||
|
||||
{% if page.series %}
|
||||
{% if seriesnext %}
|
||||
<i>Next post in the series:</i> <a href="{{ seriesnext.url }}">{{ seriesnext.title }}</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
|
||||
{% if site.twitter and site.disqus_account %}
|
||||
<div class="content-panel feedback">
|
||||
I <i class="fa fa-heart"></i> feedback.<br />
|
||||
Let me know what you think of this article on twitter <a href="http://www.twitter.com/{{ site.twitter }}">@{{ site.twitter }}</a> or leave a comment below!
|
||||
</div>
|
||||
{% elsif site.twitter %}
|
||||
<div class="content-panel feedback">
|
||||
I <i class="fa fa-heart"></i> feedback.<br />
|
||||
Let me know what you think of this article on twitter <a href="http://www.twitter.com/{{ site.twitter }}">@{{ site.twitter }}</a>!
|
||||
</div>
|
||||
{% elsif site.disqus_account %}
|
||||
<div class="content-panel feedback">
|
||||
I <i class="fa fa-heart"></i> feedback.<br />
|
||||
Let me know what you think of this article in the comment section below!
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if site.disqus_account %}
|
||||
<div class="content-panel comments">
|
||||
<div id="disqus_thread">
|
||||
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
|
||||
<a href="http://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if site.related_posts.length > 0 %}
|
||||
<div class="content-panel related clearfix">
|
||||
{% for post in site.related_posts limit:1 %}
|
||||
<div class="related-header">
|
||||
<a href="{{ site.baseurl }}{{ post.url }}">Read More</a>
|
||||
</div>
|
||||
<div class="title">
|
||||
<a href="{{ site.baseurl }}{{ post.url }}">{{ post.title }}</a>
|
||||
</div>
|
||||
<div class="excerpt">
|
||||
{% if post.summary %}
|
||||
{{ post.summary | strip_html | truncatewords:30 }}
|
||||
{% else %}
|
||||
{{ post.excerpt | strip_html | truncatewords:30 }}
|
||||
{% endif %}
|
||||
<a href="{{ site.baseurl }}{{ post.url }}">Continue Reading</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<hr />
|
||||
<div class="previous previous-next">
|
||||
{% if page.previous %}
|
||||
<p>
|
||||
<a href="{{ site.baseurl }}{{ page.previous.url }}">{{ page.previous.title }}</a>
|
||||
</p>
|
||||
<p class="date">Published {{ page.previous.date | date: "%B %-d, %Y" }}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="next previous-next">
|
||||
{% if page.next %}
|
||||
<p>
|
||||
<a href="{{ site.baseurl }}{{ page.next.url }}">{{ page.next.title }}</a>
|
||||
</p>
|
||||
<p class="date">Published {{ page.next.date | date: "%B %-d, %Y" }}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{% if site.disqus_account %}
|
||||
<script type="text/javascript">
|
||||
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
|
||||
function disqus_config() { this.experiment.enable_scroll_container = true; }
|
||||
var disqus_shortname = "{{ site.disqus_account }}"; // required: replace example with your forum shortname
|
||||
/* * * DON'T EDIT BELOW THIS LINE * * */
|
||||
(function() {
|
||||
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
|
||||
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
|
||||
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
|
||||
})();
|
||||
</script>
|
||||
{% endif %}
|
22
_pages/about.md
Normal file
@ -0,0 +1,22 @@
|
||||
---
|
||||
layout: page
|
||||
title: About
|
||||
permalink: /about
|
||||
comments: false
|
||||
---
|
||||
|
||||
```
|
||||
This website is a documentation of my adventures with electronics in general. There are various topics that I am interested in
|
||||
|
||||
- Home Assistant
|
||||
- Tasmota
|
||||
- Tuya Devices
|
||||
- Zigbee
|
||||
- Node-Red
|
||||
- CNC / 3D Printing
|
||||
- Sonarr, Radarr, Bazarr, Lidarr
|
||||
- and many others.
|
||||
```
|
||||
|
||||
|
||||
Hello and welcome to my website, where I explorer the world of electronics and technology.
|
7
_pages/dockercontainers.md
Normal file
@ -0,0 +1,7 @@
|
||||
---
|
||||
layout: mydockerfile
|
||||
title: My Docker Containers
|
||||
permalink: /dockercontainers
|
||||
comments: false
|
||||
github_packages: "https://github.com/Sthopeless?tab=packages"
|
||||
---
|
47
_posts/2021-08-01-proxmox-docker-lxc.md
Normal file
@ -0,0 +1,47 @@
|
||||
---
|
||||
layout: post
|
||||
title: "Proxmox Docker LXC"
|
||||
description: "Installing on Proxmox a Linux Container with Docker installed and Portainer, VScode and Watchtower container configured, all with 1 line command."
|
||||
author: sthope
|
||||
categories: [ Docker, Proxmox, Portainer ]
|
||||
image: "proxmox-small-logo.png"
|
||||
comments: true
|
||||
---
|
||||
|
||||
# Setup the LXC
|
||||
|
||||
- In the terminal of Proxmox enter:
|
||||
|
||||
```
|
||||
clear; bash -c "$(wget -qLO - https://git.sthopeless.com/sthope/proxmox_portainer/raw/branch/master/create_container.sh)"
|
||||
|
||||
```
|
||||
|
||||
It will configure and start a Debian LXC. After created you can rename the LXC and give it a static IP.
|
||||
|
||||
<br>
|
||||
# LXC configuration
|
||||
- In the LXC terminal setup root password with
|
||||
|
||||
```
|
||||
passwd
|
||||
```
|
||||
|
||||
<br>
|
||||
### Finish
|
||||
|
||||
- Portainer should be running at:
|
||||
|
||||
```http
|
||||
http://{IP}:9000
|
||||
```
|
||||
- VSCode should be running at:
|
||||
|
||||
```http
|
||||
http://{IP}:8443
|
||||
```
|
||||
- WatchTower for auto updating the containers is also installed and if you want new containers to use it simply add the label:
|
||||
|
||||
```
|
||||
com.centurylinklabs.watchtower.enable=true
|
||||
```
|
54
_posts/2021-08-02-dockerfile-and-github.md
Normal file
@ -0,0 +1,54 @@
|
||||
---
|
||||
layout: post
|
||||
title: "Dockerfile & Github"
|
||||
description: "create a simple docker container and upload it to Github"
|
||||
author: sthope
|
||||
image: "dockergithub.png"
|
||||
categories: [ Docker, Github ]
|
||||
github_create_token: 'https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token#creating-a-token'
|
||||
github_auth: 'https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry#authenticating-to-the-container-registry'
|
||||
docker_tempalte_repo: 'https://github.com/Sthopeless/dckrtmplt'
|
||||
comments: true
|
||||
---
|
||||
|
||||

|
||||
|
||||
## Setup and configure Github Token
|
||||
1. [Create Github Token]({{page.github_create_token}}) and save the token.
|
||||
2. [Authenticate]({{page.github_auth}}) with:
|
||||
(replace 'YOUR_TOKEN' with token from last step)
|
||||
```
|
||||
export CR_PAT=YOUR_TOKEN
|
||||
```
|
||||
|
||||
3. Last sign in with:
|
||||
(replace 'USERNAME' with your Github Username)
|
||||
```
|
||||
echo $CR_PAT | docker login ghcr.io -u USERNAME --password-stdin
|
||||
```
|
||||
|
||||
## Setup container files
|
||||
|
||||
1. [Download this repository]({{page.docker_tempalte_repo}})
|
||||
2. Open terminal, go to the repo location (eg: ~/Documents/dckrtmplt) and do:
|
||||
```
|
||||
docker build -t dckrtmplt . ; \
|
||||
docker tag dckrtmplt ghcr.io/sthopeless/dckrtmplt:latest ; \
|
||||
docker push ghcr.io/sthopeless/dckrtmplt:latest
|
||||
```
|
||||
|
||||
3. Your new Package should be visible at:<br>
|
||||
[https://github.com/Sthopeless?tab=packages](https://github.com/Sthopeless?tab=packages)<br>
|
||||
(replace 'Sthopeless' with your Github Username)
|
||||
4. You can test running:
|
||||
```
|
||||
docker run -it --rm ghcr.io/sthopeless/dckrtmplt:latest
|
||||
```
|
||||
5. Set package visibility from Private to Visible, follow pictures:
|
||||
|
||||
1.<br>
|
||||
<img src="/assets/images/githubdocker/1.png" width="80%" height="80%"><br>
|
||||
2.<br>
|
||||
<img src="/assets/images/githubdocker/2.png" width="80%" height="80%"><br>
|
||||
3.<br>
|
||||
<img src="/assets/images/githubdocker/3.png" width="80%" height="80%"><br>
|
26
_posts/2021-08-03-markdown.md
Normal file
@ -0,0 +1,26 @@
|
||||
---
|
||||
layout: post
|
||||
title: "Markdown"
|
||||
description: "Markdown Sheet, work in constant progress."
|
||||
author: sthope
|
||||
image: "markdown-logo.png"
|
||||
categories: [ Markdown ]
|
||||
comments: true
|
||||
---
|
||||
|
||||
# Markdown Examples
|
||||
|
||||
## 1. Headings
|
||||
|
||||
```
|
||||
# Heading Example
|
||||
## Heading Example
|
||||
### Heading Example
|
||||
```
|
||||
|
||||
## 2. Italic, Bold, etc..
|
||||
|
||||
Italic = `*example*` or `_example_` <br>
|
||||
Bold = `**example**` or `__example__` <br>
|
||||
Blockquote = `>` or `>>` <br>
|
||||
Horizontal Lines = `---` or `***` <br>
|
41
_posts/2021-08-05-tuya-zigbee-doorlocks.md
Normal file
@ -0,0 +1,41 @@
|
||||
---
|
||||
layout: post
|
||||
title: "Tuya Zigbee DoorLocks"
|
||||
description: "Unlock Tuya Zigbee Doorlocks using the API"
|
||||
author: sthope
|
||||
image: "tuya-logo.png"
|
||||
categories: [ Tuya, Zigbee, Docker ]
|
||||
tyfiles: https://git.sthope.dev/sthope/Tuya_Zigbee_DoorLocks
|
||||
comments: true
|
||||
---
|
||||
|
||||
# Docker
|
||||
|
||||
- Run Docker Container
|
||||
```
|
||||
docker run -it \
|
||||
--name tuya_doorlock \
|
||||
ghcr.io/sthopeless/tuya_doorlock:latest
|
||||
```
|
||||
|
||||
- Edit the env.py file with your details
|
||||
Exit and Save (CTRL+X and Y)
|
||||
```
|
||||
nano /home/tuya_doorlock/env.py
|
||||
```
|
||||
|
||||
- Run python file and test unlocking the DoorLock
|
||||
```
|
||||
python3 /home/tuya_doorlock/Zigbee_Doorlock.py
|
||||
```
|
||||
|
||||
- Unlock via MQTT
|
||||
```
|
||||
topic: TuyaLock/Doorlock
|
||||
payload: unlock_door
|
||||
```
|
||||
|
||||
|
||||
Raw files: [{{page.tyfiles}}]({{page.tyfiles}})
|
||||
|
||||
|
52
_posts/2021-08-06-docker-portainer.md
Normal file
@ -0,0 +1,52 @@
|
||||
---
|
||||
layout: post
|
||||
title: "Docker Portainer"
|
||||
description: "Docker Portainer"
|
||||
author: sthope
|
||||
image: "portainer-small-logo.png"
|
||||
categories: [ Docker, Portainer ]
|
||||
comments: true
|
||||
---
|
||||
|
||||
# Portainer
|
||||
|
||||
1. On the terminal create folder for Portainer, eg:
|
||||
|
||||
```
|
||||
mkdir -p /docker/portainer
|
||||
```
|
||||
|
||||
2. Create and start the container:
|
||||
|
||||
```
|
||||
docker run -d \
|
||||
-p 8000:8000 \
|
||||
-p 9000:9000 \
|
||||
--name=portainer \
|
||||
--restart=always \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
-v /docker/portainer:/data \
|
||||
portainer/portainer-ce:latest
|
||||
```
|
||||
|
||||
3. Open WebUI at:
|
||||
|
||||
```http
|
||||
http://{IP}:9000
|
||||
```
|
||||
|
||||
4. Create new User
|
||||
<img src="/assets/images/docker-portainer/1.jpg" width="85%" height="85%">
|
||||
|
||||
5. Choose Docker
|
||||
<img src="/assets/images/docker-portainer/2.jpg" width="85%" height="85%">
|
||||
|
||||
6. Select your instance
|
||||
<img src="/assets/images/docker-portainer/3.jpg" width="85%" height="85%">
|
||||
|
||||
7. Open Endpoints and setup the host IP
|
||||
<img src="/assets/images/docker-portainer/4.jpg" width="85%" height="85%">
|
||||
|
||||
<img src="/assets/images/docker-portainer/5.jpg" width="85%" height="85%">
|
||||
|
||||
|
31
_posts/2021-08-07-docker-watchtower.md
Normal file
@ -0,0 +1,31 @@
|
||||
---
|
||||
layout: post
|
||||
title: "WatchTower"
|
||||
description: "Docker WatchTower"
|
||||
author: sthope
|
||||
image: "watchtower-logo.png"
|
||||
categories: [ Docker, WatchTower ]
|
||||
comments: true
|
||||
---
|
||||
|
||||
# WatchTower
|
||||
|
||||
1. Create and run Portainer Stack:
|
||||
|
||||
```yaml
|
||||
---
|
||||
version: "3.8"
|
||||
services:
|
||||
watchtower:
|
||||
container_name: watchtower
|
||||
image: containrrr/watchtower
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
environment:
|
||||
- TZ=Europe/Amsterdam
|
||||
- WATCHTOWER_CLEANUP=true
|
||||
- WATCHTOWER_POLL_INTERVAL=86400
|
||||
- WATCHTOWER_LABEL_ENABLE=true
|
||||
```
|
||||
|
95
_posts/2021-08-08-docker-nginx.md
Normal file
@ -0,0 +1,95 @@
|
||||
---
|
||||
layout: post
|
||||
title: "Docker NGINX"
|
||||
description: "Docker NGINX & Authelia"
|
||||
author: sthope
|
||||
image: "nginx-logo.png"
|
||||
categories: [ Docker, NGINX, LinuxServer ]
|
||||
env_file: https://git.sthope.dev/sthope/docker_portainer_stacks/src/branch/master/nginx/nginx.env
|
||||
comments: true
|
||||
---
|
||||
|
||||
- Create a file on your PC named `nginx.env` and paste this or [download this template]( {{page.env_file}} )
|
||||
|
||||
```
|
||||
domain=example.com
|
||||
domain_subdomains=homeassistant,plex,nodered,jellyfin,sonarr,radarr
|
||||
user_email=example@gmail.com
|
||||
nginx_validation=dns
|
||||
nginx_dnsplugin=cloudflare
|
||||
#nginx_duckdnstoken=
|
||||
nginx_container_name=nginx
|
||||
authelia_container_name=authelia
|
||||
PUID=1000
|
||||
PGID=1000
|
||||
TZ=Europe/Amsterdam
|
||||
rst_mode=unless-stopped
|
||||
maximunddb_license_key=
|
||||
volume_nginx=/docker/nginx/nginx
|
||||
volume_authelia=/docker/nginx/authelia
|
||||
autoupdate_nginx=true
|
||||
autoupdate_authelia=true
|
||||
tag_nginx=latest
|
||||
tag_authelia=latest
|
||||
nginx_httpsPort=443
|
||||
nginx_httpPort=80
|
||||
```
|
||||
|
||||
Fill up according to your instalation
|
||||
|
||||
- Create and run this Portainer Stack:
|
||||
|
||||
```yaml
|
||||
version: "3.8"
|
||||
|
||||
networks:
|
||||
nginx_network:
|
||||
external:
|
||||
name: nginx_network
|
||||
default:
|
||||
driver: bridge
|
||||
|
||||
services:
|
||||
nginx:
|
||||
image: ghcr.io/linuxserver/swag:${tag_nginx}
|
||||
container_name: ${nginx_container_name}
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
networks:
|
||||
- nginx_network
|
||||
environment:
|
||||
- PUID=${PUID}
|
||||
- PGID=${PGID}
|
||||
- TZ=${TZ}
|
||||
- URL=${nginx_domain}
|
||||
- SUBDOMAINS=${nginx_subdomains}
|
||||
- VALIDATION=${nginx_validation}
|
||||
- DNSPLUGIN=${nginx_dnsplugin}
|
||||
- EMAIL=${user_email}
|
||||
- MAXMINDDB_LICENSE_KEY=${maximunddb_license_key}
|
||||
- STAGING=false
|
||||
- ONLY_SUBDOMAINS=false
|
||||
volumes:
|
||||
- ${volume_nginx}:/config
|
||||
ports:
|
||||
- ${nginx_httpsPort}:443
|
||||
- ${nginx_httpPort}:80
|
||||
restart: ${rst_mode}
|
||||
labels:
|
||||
- com.centurylinklabs.watchtower.enable=${autoupdate_nginx}
|
||||
|
||||
authelia:
|
||||
image: authelia/authelia:${tag_authelia}
|
||||
container_name: ${authelia_container_name}
|
||||
networks:
|
||||
- nginx_network
|
||||
environment:
|
||||
- PUID=${PUID}
|
||||
- PGID=${PGID}
|
||||
- TZ=${TZ}
|
||||
volumes:
|
||||
- ${volume_authelia}:/config
|
||||
restart: ${rst_mode}
|
||||
labels:
|
||||
- com.centurylinklabs.watchtower.enable=${autoupdate_authelia}
|
||||
```
|
53
_posts/2021-08-29-custom-cmds-in-ubuntu.md
Normal file
@ -0,0 +1,53 @@
|
||||
---
|
||||
layout: post
|
||||
title: "Custom cmds in Ubuntu"
|
||||
description: "Create custom commands in Ubuntu (and other Linux distros)."
|
||||
author: sthope
|
||||
image: "bash-logo.png"
|
||||
categories: [ Ubuntu, Linux ]
|
||||
distro_tested: "Ubuntu 20.04"
|
||||
comments: true
|
||||
---
|
||||
|
||||
|
||||
<strong>⚠️⚠️⚠️</strong> This was done using {{page.distro_tested}} but it should work on most Linux distros the same way.
|
||||
|
||||
|
||||
<h2 id="part1">Create Folders</h2>
|
||||
On the terminal create folder to save your customs scripts eg:
|
||||
|
||||
```
|
||||
mkdir -p ~/bin
|
||||
```
|
||||
|
||||
<h2 id="part2">Create Scripts</h2>
|
||||
Inside the new folder created create a new file,eg:
|
||||
`nano ~/bin/y2upgrade`
|
||||
|
||||
<h2 id="part3">Edit the Scripts</h2>
|
||||
Edit the file with your commands and save, eg:
|
||||
|
||||
```
|
||||
#!/bin/bash
|
||||
|
||||
sudo apt-get update
|
||||
sudo apt-get upgrade -y
|
||||
```
|
||||
|
||||
<h2 id="part4">Set Access Permissions</h2>
|
||||
Use chmod to set files permissions. (should ask twice for sudo password)
|
||||
|
||||
```sudo chmod +x ~/bin/*;su -l $USER```
|
||||
|
||||
<h2 id="part5">Testing</h2>
|
||||
Now you should be able to send your command from the terminal, the file name is the command name for example now when entering: `y2upgrade` it should first do `sudo apt-get update` and then `sudo apt-get upgrade -y`.<br>
|
||||
<br>
|
||||
`-y` simply means it will not ask you Y/n if you want to accept installing the upgrades in case there is any.
|
||||
|
||||
<h2 id="part5">Extra</h2>
|
||||
SSH without asking for password.<br>
|
||||
Create file named `sshnopwd` and paste the [contents of this file](https://git.sthope.dev/sthope/sthope_website_examples/raw/branch/master/custom-cmds-in-ubuntu/bin_examples/sshnopwd)<br>
|
||||
|
||||
now instead of using `ssh username@ip` and then entering password, simply run `sshnopwd password username@ip` and it will automatically login.<br>
|
||||
|
||||
Small collection with more examples can be found [here](https://git.sthope.dev/sthope/sthope_website_examples/src/branch/master/custom-cmds-in-ubuntu/bin_examples)
|
106
_posts/2021-08-30-portainer-stacks.md
Normal file
@ -0,0 +1,106 @@
|
||||
---
|
||||
layout: post
|
||||
title: "Portainer Stacks"
|
||||
description: "Install Docker containers using docker-compose files with Portainer Stacks."
|
||||
author: sthope
|
||||
image: portainer-logo.png
|
||||
categories: [ Ubuntu, Linux ]
|
||||
pic01: "/assets/images/portainer_stacks/1.jpg"
|
||||
pic02: "/assets/images/portainer_stacks/2.jpg"
|
||||
pic03: "/assets/images/portainer_stacks/3.jpg"
|
||||
pic04: "/assets/images/portainer_stacks/4.jpg"
|
||||
pic05: "/assets/images/portainer_stacks/5.jpg"
|
||||
pic06: "/assets/images/portainer_stacks/6.jpg"
|
||||
pic07: "/assets/images/portainer_stacks/7.jpg"
|
||||
pic08: "/assets/images/portainer_stacks/8.jpg"
|
||||
pic09: "/assets/images/portainer_stacks/9.jpg"
|
||||
pic10: "/assets/images/portainer_stacks/10.jpg"
|
||||
pic11: "/assets/images/portainer_stacks/11.jpg"
|
||||
pic12: "/assets/images/portainer_stacks/12.jpg"
|
||||
pic13: "/assets/images/portainer_stacks/13.jpg"
|
||||
pic14: "/assets/images/portainer_stacks/14.jpg"
|
||||
pic15: "/assets/images/portainer_stacks/15.jpg"
|
||||
stack_example: "https://git.sthope.dev/sthope/docker_portainer_stacks/src/branch/master/libreoffice.yml"
|
||||
comments: true
|
||||
---
|
||||
### Installling Portainer
|
||||
|
||||
There are a few ways of running docker containers, it should not matter which way your prefer most.
|
||||
Here are some examples
|
||||
|
||||
via Terminal, open the terminal and enter:
|
||||
```
|
||||
docker volume create portainer_data; \
|
||||
docker run -d \
|
||||
-p 8000:8000 \
|
||||
-p 9000:9000 \
|
||||
--name=portainer \
|
||||
--restart=always \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
-v portainer_data:/data \
|
||||
--labels com.centurylinklabs.watchtower.enable=true \
|
||||
--network_mode=bridge \
|
||||
portainer/portainer-ce:latest
|
||||
```
|
||||
<br>
|
||||
<br>
|
||||
via docker-compose.yml file
|
||||
Create `docker-compose.yml` file, eg: `nano ~/docker/docker-compose.yml` and paste:
|
||||
|
||||
```
|
||||
---
|
||||
version: "3.8"
|
||||
services:
|
||||
portainer:
|
||||
container_name: "portainer"
|
||||
image: "portainer/portainer-ce:latest"
|
||||
restart: "always"
|
||||
network_mode: "bridge"
|
||||
volumes:
|
||||
- "/var/run/docker.sock:/var/run/docker.sock"
|
||||
- "portainer_data:/data"
|
||||
port:
|
||||
- "8000:8000"
|
||||
- "9000:9000"
|
||||
labels:
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
|
||||
volumes:
|
||||
portainer_data:
|
||||
external: false
|
||||
```
|
||||
|
||||
<br>
|
||||
### Portainer WebUI
|
||||
|
||||
Portainer should now be available at: http://IP:9000.<br>
|
||||
|
||||
1. Configure `Username` and `Password` to `Create user`.
|
||||
<br>
|
||||
2. Select `Docker` and `Connect`.
|
||||
<br>
|
||||
3. Click in `local` to access your instance.
|
||||
<br>
|
||||
4. Navigate to `Endpoints` on the left-side menu and click on `local` to edit.
|
||||
<br>
|
||||
5. In `Public IP` put the IP address of Portainer. Bonus you can name it differently if you want. After `Public IP` configured press `Update Endpoint`.
|
||||
<br>
|
||||
6. Navigate to `Stacks` on the left-side menu.
|
||||
<br>
|
||||
7. Here you can paste most docker-compose.yml files or create your own.
|
||||
<br>
|
||||
8. For example:
|
||||
<br>
|
||||
9. Here you can upload Stacks directly from Github, Gitea and many others.
|
||||
<br>
|
||||
10. Here is a example using [this personal Gitea server]({{page.stack_example}}).
|
||||
<br>
|
||||
11. Stack running
|
||||
<br>
|
||||
12. Inside the `Stack`
|
||||
<br>
|
||||
13. Updating/Editing the `Stack` locally.
|
||||
<br>
|
||||
14. Stack file can also be edited on Git and pushed again to assume the changes.
|
||||
<br>
|
||||
|
114
assets/css/highlightjs.piperita.scss
Normal file
@ -0,0 +1,114 @@
|
||||
---
|
||||
---
|
||||
/* Piperita - Theme */
|
||||
/* by Jacob Tomlinson () */
|
||||
|
||||
/* Colours */
|
||||
$base-white: #E6E6E6;
|
||||
$base-red: #FF0028;
|
||||
$light-black: #737373;
|
||||
$dark-black: #4C4C4C;
|
||||
$light-red: #FFA8BA;
|
||||
$dark-red: #FF6685;
|
||||
$light-green: #C5EBC5;
|
||||
$dark-green: #A6EBA6;
|
||||
$light-yellow: #F9F9A5;
|
||||
$dark-yellow: #FFDC72;
|
||||
$light-blue: #8DDBFF;
|
||||
$dark-blue: #5DC6F5;
|
||||
$light-purple: #FFABFF;
|
||||
$dark-purple: #FF8FFF;
|
||||
$light-aqua: #B0F0F0;
|
||||
$dark-aqua: #86D1D7;
|
||||
$light-white: #FFFFFF;
|
||||
$dark-white: #DBDBDB;
|
||||
|
||||
|
||||
/* Piperita Dark Title */
|
||||
.hljs-title {
|
||||
color: $dark-white;
|
||||
}
|
||||
|
||||
/* Piperita Dark Green */
|
||||
.hljs-variable,
|
||||
.hljs-attribute,
|
||||
.hljs-tag,
|
||||
.hljs-regexp,
|
||||
.ruby .hljs-constant,
|
||||
.xml .hljs-tag .hljs-title,
|
||||
.xml .hljs-pi,
|
||||
.xml .hljs-doctype,
|
||||
.html .hljs-doctype,
|
||||
.css .hljs-id,
|
||||
.css .hljs-class,
|
||||
.css .hljs-pseudo {
|
||||
color: $dark-green;
|
||||
}
|
||||
|
||||
/* Piperita Dark Orange */
|
||||
.hljs-number,
|
||||
.hljs-preprocessor,
|
||||
.hljs-pragma,
|
||||
.hljs-built_in,
|
||||
.hljs-literal,
|
||||
.hljs-params,
|
||||
.hljs-constant {
|
||||
color: #df5320;
|
||||
}
|
||||
|
||||
/* Piperita Dark Yellow */
|
||||
.hljs-ruby .hljs-class .hljs-title,
|
||||
.css .hljs-rules .hljs-attribute {
|
||||
color: $dark-yellow;
|
||||
}
|
||||
|
||||
/* Piperita Dark Red */
|
||||
.hljs-string,
|
||||
.hljs-value,
|
||||
.hljs-inheritance,
|
||||
.hljs-header,
|
||||
.ruby .hljs-symbol,
|
||||
.xml .hljs-cdata {
|
||||
color: $dark-red;
|
||||
}
|
||||
|
||||
/* Piperita Dark Aqua */
|
||||
.css .hljs-hexcolor {
|
||||
color: $dark-aqua;
|
||||
}
|
||||
|
||||
/* Piperita Dark Blue */
|
||||
.hljs-function,
|
||||
.hljs-comment,
|
||||
.python .hljs-decorator,
|
||||
.python .hljs-title,
|
||||
.ruby .hljs-function .hljs-title,
|
||||
.ruby .hljs-title .hljs-keyword,
|
||||
.perl .hljs-sub,
|
||||
.javascript .hljs-title,
|
||||
.coffeescript .hljs-title {
|
||||
color: $dark-blue;
|
||||
}
|
||||
|
||||
/* Piperita Dark Purple */
|
||||
.hljs-keyword,
|
||||
.javascript .hljs-function {
|
||||
color: $dark-purple;
|
||||
}
|
||||
|
||||
.hljs {
|
||||
display: block;
|
||||
overflow-x: auto;
|
||||
color: $base-white;
|
||||
-webkit-text-size-adjust: none;
|
||||
}
|
||||
|
||||
.coffeescript .javascript,
|
||||
.javascript .xml,
|
||||
.tex .hljs-formula,
|
||||
.xml .javascript,
|
||||
.xml .vbscript,
|
||||
.xml .css,
|
||||
.xml .hljs-cdata {
|
||||
opacity: 0.5;
|
||||
}
|
1399
assets/css/jquery.mmenu.all.css
Normal file
908
assets/css/style.scss
Normal file
@ -0,0 +1,908 @@
|
||||
---
|
||||
---
|
||||
@import url(https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,400,300,700);
|
||||
@import url(https://fonts.googleapis.com/css?family=Montserrat);
|
||||
@import url(https://fonts.googleapis.com/css?family=Anonymous+Pro:400,700);
|
||||
|
||||
/* Colours */
|
||||
$twitter: #6dabda;
|
||||
$linkedin: #2b77b1;
|
||||
$xing: #006567;
|
||||
$google-plus: #c95644;
|
||||
$facebook: #365899;
|
||||
$github: #f6c2a4;
|
||||
$stack-overflow: #c98b3b;
|
||||
$instagram: #cd486b;
|
||||
$reddit: #cee3f8;
|
||||
$rss: #eea33a;
|
||||
|
||||
$darker: #21211E;
|
||||
$dark: #2D2D29;
|
||||
$medium: #3B3B35;
|
||||
$light-medium: #969696;
|
||||
$dark-blue: #215A6D;
|
||||
$light-blue: #3CA2A2;
|
||||
$green: #92C7A3;
|
||||
$light: #DFECE6;
|
||||
$white: #FFFFFF;
|
||||
$dark-purple: #300030;
|
||||
$medium-purple: #480048;
|
||||
$regular-purple: #601848;
|
||||
$red: #C04848;
|
||||
$orange: #F07241;
|
||||
/* Sthope Colours */
|
||||
$greenyellow: #a9ff30;
|
||||
|
||||
/* Responsive sizes */
|
||||
$screen-sm-min: 768px;
|
||||
$screen-md-min: 992px;
|
||||
$screen-lg-min: 1200px;
|
||||
|
||||
/* Globals */
|
||||
|
||||
html {
|
||||
height: 100%;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Open Sans', sans-serif;
|
||||
font-weight: 300;
|
||||
background-color: $dark;
|
||||
color: $white;
|
||||
font-size: 16px;
|
||||
height: 100%;
|
||||
width: 100%
|
||||
}
|
||||
|
||||
a, a:active {
|
||||
color: $light-blue;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: $dark-blue;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.navbar, .nav {
|
||||
background-color: $dark-blue;
|
||||
|
||||
.navbar-toggle {
|
||||
margin-top: 10px;
|
||||
padding-top: 0px;
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
|
||||
li {
|
||||
|
||||
a, a:active {
|
||||
color: $white;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: $dark-blue;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.clearfix:after {
|
||||
content: " ";
|
||||
display: block;
|
||||
height: 0;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.header {
|
||||
font-size: 32px;
|
||||
text-align: center;
|
||||
margin-top: 20px;
|
||||
margin-left: -0%;
|
||||
width: 100%;
|
||||
|
||||
@media (min-width: $screen-sm-min) {
|
||||
font-size: 62px;
|
||||
margin-left: -10%;
|
||||
width: 120%;
|
||||
}
|
||||
}
|
||||
|
||||
.menu-button {
|
||||
color: $white;
|
||||
font-size: 24px;
|
||||
position: fixed;
|
||||
top: 10px;
|
||||
left: 20px;
|
||||
cursor: pointer;
|
||||
line-height: 1em;
|
||||
padding: 10px;
|
||||
background-color: $dark;
|
||||
z-index: 100;
|
||||
@media (min-width: $screen-sm-min) {
|
||||
top: 20px;
|
||||
left: 40px;
|
||||
}
|
||||
}
|
||||
|
||||
.content-panel {
|
||||
background-color: $medium;
|
||||
padding-top: 20px;
|
||||
padding-bottom: 20px;
|
||||
padding-left: 30px;
|
||||
padding-right: 30px;
|
||||
margin-top: 20px;
|
||||
box-shadow: 0px 0px 0px 0px, 0px 6px 12px rgba(0, 0, 0, 0.2);
|
||||
border-bottom: 5px solid $greenyellow
|
||||
}
|
||||
|
||||
#my-menu {
|
||||
|
||||
p {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
a, a:active {
|
||||
color: $white;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: $light-blue;
|
||||
}
|
||||
|
||||
.pages {
|
||||
|
||||
.fa {
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.links {
|
||||
margin-top: 50px;
|
||||
text-align: center;
|
||||
|
||||
i {
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
|
||||
@media (min-width: $screen-sm-min) {
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.fa {
|
||||
-webkit-transition: 0.3s;
|
||||
-moz-transition: 0.3s;
|
||||
transition: 0.3s;
|
||||
}
|
||||
|
||||
.fa-twitter:hover {
|
||||
color: $twitter;
|
||||
}
|
||||
|
||||
.fa-linkedin:hover {
|
||||
color: $linkedin;
|
||||
}
|
||||
|
||||
.fa-xing:hover {
|
||||
color: $xing;
|
||||
}
|
||||
|
||||
.fa-google-plus:hover {
|
||||
color: $google-plus;
|
||||
}
|
||||
|
||||
.fa-facebook:hover {
|
||||
color: $facebook;
|
||||
}
|
||||
|
||||
.fa-github:hover {
|
||||
color: $github;
|
||||
}
|
||||
|
||||
.fa-stack-overflow:hover {
|
||||
color: $stack-overflow;
|
||||
}
|
||||
|
||||
.fa-instagram:hover {
|
||||
color: $instagram;
|
||||
}
|
||||
|
||||
.fa-reddit-alien:hover {
|
||||
color: $reddit;
|
||||
}
|
||||
|
||||
.fa-rss:hover {
|
||||
color: $rss;
|
||||
}
|
||||
}
|
||||
|
||||
/* Index */
|
||||
|
||||
.index {
|
||||
height: 100%;
|
||||
max-height: 100%;
|
||||
width: 100%;
|
||||
padding: 0px;
|
||||
|
||||
@media (min-width: $screen-sm-min) {
|
||||
width: 700px;
|
||||
max-width:700px;
|
||||
}
|
||||
|
||||
.header {
|
||||
margin-top: 10px;
|
||||
margin-left: 0%;
|
||||
margin-bottom: 0px;
|
||||
font-size: 32px;
|
||||
width: 100%;
|
||||
|
||||
@media (min-width: $screen-lg-min) {
|
||||
margin-left: -10%;
|
||||
width: 120%;
|
||||
}
|
||||
}
|
||||
|
||||
.categories {
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
.content-panel:nth-of-type(1) {
|
||||
border-bottom: 10px solid $greenyellow;
|
||||
}
|
||||
|
||||
.author-header {
|
||||
font-family: 'Montserrat', sans-serif;
|
||||
color: $greenyellow;
|
||||
margin-top: 0px;
|
||||
padding-top: 15px;
|
||||
font-size: 30px;
|
||||
|
||||
@media (min-width: $screen-sm-min) {
|
||||
font-size: 52px;
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
@media (min-width: $screen-md-min) {
|
||||
font-size: 60px;
|
||||
margin-top: -20px;
|
||||
}
|
||||
}
|
||||
|
||||
.row {
|
||||
height: 100%;
|
||||
max-height: 100%;
|
||||
margin-top: 60px;
|
||||
margin-left: 0px;
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
.gravatar {
|
||||
width: 100%;
|
||||
margin-top: -80px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.author-text {
|
||||
text-align: center;
|
||||
margin-top: 30px;
|
||||
|
||||
b {
|
||||
font-size: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
.links {
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
.articles {
|
||||
text-align: center;
|
||||
font-size: 20px;
|
||||
|
||||
h2 {
|
||||
margin-bottom: 30px;
|
||||
color: $greenyellow;
|
||||
font-size: 26px;
|
||||
}
|
||||
|
||||
ul {
|
||||
|
||||
padding: 0px;
|
||||
|
||||
li {
|
||||
margin-bottom: 20px;
|
||||
font-size: 24px;
|
||||
|
||||
a:hover {
|
||||
color: $light-medium;
|
||||
}
|
||||
|
||||
small {
|
||||
font-size: 14px;
|
||||
margin-top: -10px;
|
||||
padding-top: 0px;
|
||||
color: $light-medium;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
li:nth-last-of-type(1) {
|
||||
|
||||
small {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
a, a:active {
|
||||
color: $white;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: $light-blue;
|
||||
}
|
||||
}
|
||||
|
||||
.copyright {
|
||||
margin-top: 50px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.links {
|
||||
a, a:active {
|
||||
color: #FFFFFF;
|
||||
}
|
||||
}
|
||||
|
||||
.menu {
|
||||
margin-top: 250px;
|
||||
margin-bottom: 20px;
|
||||
font-size: 20px;
|
||||
position: absolute;
|
||||
bottom: 0px;
|
||||
|
||||
a, a:active {
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: $light-blue;
|
||||
}
|
||||
|
||||
ul {
|
||||
margin-bottom: 30px;
|
||||
padding-left: 10px;
|
||||
|
||||
ul {
|
||||
padding-left: 50px;
|
||||
list-style: none;
|
||||
margin-left: 0;
|
||||
text-indent: -0.6em;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.all-posts {
|
||||
margin-left: 0px;
|
||||
margin-right: 0px;
|
||||
|
||||
@media (min-width: $screen-sm-min) {
|
||||
#search-container {
|
||||
padding-top: 75px;
|
||||
padding-bottom: 150px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: $screen-md-min) {
|
||||
margin-left: -15px;
|
||||
margin-right: -15px;
|
||||
|
||||
#search-container {
|
||||
padding-bottom: 300px;
|
||||
}
|
||||
}
|
||||
|
||||
#search-input {
|
||||
position:relative;
|
||||
width: 100%;
|
||||
padding:6px 15px 6px 30px;
|
||||
margin: 2px;
|
||||
margin-top: 50px;
|
||||
|
||||
color:$dark;
|
||||
background-color:$white;
|
||||
|
||||
border:1px solid #adc5cf;
|
||||
border-radius:15px;
|
||||
-moz-border-radius:15px;
|
||||
-webkit-border-radius:15px;
|
||||
}
|
||||
|
||||
#search-input:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.content-panel {
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
@media (min-width: $screen-md-min) {
|
||||
padding-left: 30px;
|
||||
padding-right: 30px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.single {
|
||||
height:100%;
|
||||
max-height: 100%;
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-family: 'Montserrat', sans-serif;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 36px;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 10px;
|
||||
|
||||
@media (min-width: $screen-sm-min) {
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
}
|
||||
|
||||
.menu {
|
||||
|
||||
background-color: $dark-blue;
|
||||
|
||||
a, a:active {
|
||||
color: $white;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: $light-blue;
|
||||
}
|
||||
|
||||
h4 {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.share {
|
||||
margin-top: 20px;
|
||||
|
||||
h4 {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.home {
|
||||
margin-top: 10px;
|
||||
font-size: 16px;
|
||||
|
||||
a {
|
||||
color: $white;
|
||||
}
|
||||
}
|
||||
|
||||
.related {
|
||||
ul {
|
||||
padding: 0px;
|
||||
}
|
||||
li {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.article {
|
||||
width: 100%;
|
||||
margin-left: 0%;
|
||||
padding: 0px;
|
||||
|
||||
@media (min-width: $screen-sm-min) {
|
||||
width: 90%;
|
||||
margin-left: 5%;
|
||||
}
|
||||
|
||||
@media (min-width: $screen-md-min) {
|
||||
width: 70%;
|
||||
margin-left: 15%;
|
||||
}
|
||||
|
||||
@media (min-width: $screen-lg-min) {
|
||||
width: 50%;
|
||||
margin-left: 25%;
|
||||
}
|
||||
|
||||
.thumb {
|
||||
margin-top: 20px;
|
||||
margin-bottom: 0px;
|
||||
text-align: center;
|
||||
|
||||
img {
|
||||
height: 50px;
|
||||
@media (min-width: $screen-sm-min) {
|
||||
height: 70px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.author {
|
||||
font-size: 20px;
|
||||
text-align: center;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
.read-time {
|
||||
font-size: 16px;
|
||||
text-align: center;
|
||||
margin-bottom: 10px;
|
||||
font-weight: 400;
|
||||
@media (min-width: $screen-sm-min) {
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
}
|
||||
|
||||
.content {
|
||||
font-size: 18px;
|
||||
line-height: 170%;
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
|
||||
@media (min-width: $screen-sm-min) {
|
||||
// Sthope Font Size
|
||||
font-size: 15px;
|
||||
padding-left: 30px;
|
||||
padding-right: 30px;
|
||||
padding-top: 40px;
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
|
||||
.series {
|
||||
margin-bottom: 50px;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
padding: 10px;
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-type: disc;
|
||||
}
|
||||
|
||||
ol {
|
||||
list-style-type: decimal;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
margin-left: -15px;
|
||||
padding-right: 10px;
|
||||
background-color: $darker;
|
||||
color: white;
|
||||
box-sizing: content-box;
|
||||
// border: none;
|
||||
border: 0.5rem outset pink;
|
||||
font-size: 28px;
|
||||
|
||||
@media (min-width: $screen-sm-min) {
|
||||
margin-left: -30px;
|
||||
padding-left: 45px;
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 0;
|
||||
padding: 15px;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
:before {
|
||||
font-family: "Times New Roman";
|
||||
color: $light-medium;
|
||||
content: "“";
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
left: 15px;
|
||||
font-size: 65px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.alignright {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.aligncenter {
|
||||
display: block;
|
||||
margin: 5px auto 5px auto;
|
||||
}
|
||||
|
||||
figure.highlight, div.highlighter-rouge {
|
||||
width: 100%;
|
||||
margin-left: -15px;
|
||||
padding-right: 10px;
|
||||
box-sizing: content-box;
|
||||
|
||||
@media (min-width: $screen-sm-min) {
|
||||
// margin-left: -30px;
|
||||
padding-right: 60px;
|
||||
}
|
||||
|
||||
pre {
|
||||
// Sthope Code
|
||||
// width: 100%;
|
||||
font-family: 'Anonymous Pro';
|
||||
background-color: $darker;
|
||||
display: block;
|
||||
color: $white;
|
||||
font-size: 13px;
|
||||
border: none;
|
||||
line-height: 1.42857143;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
padding-top: 20px;
|
||||
padding-bottom: 20px;
|
||||
// box-sizing: content-box;
|
||||
// border-radius: 0;
|
||||
// margin-top: 10px;
|
||||
|
||||
@media (min-width: $screen-sm-min) {
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
margin-bottom: 0px;
|
||||
font-size: 13px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
p, ul, ol {
|
||||
|
||||
code {
|
||||
// Sthope ``
|
||||
font-family: 'Anonymous Pro';
|
||||
font-size: 15px;
|
||||
background-color: $darker;
|
||||
color: $white;
|
||||
// padding: 0.5em;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.tags {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
text-align: center;
|
||||
|
||||
a, a:active {
|
||||
color: $white;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: $light-blue;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.share {
|
||||
margin-top: 20px;
|
||||
margin-bottom: 10px;
|
||||
text-align: center;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.feedback {
|
||||
text-align: center;
|
||||
|
||||
.fa-heart {
|
||||
color: $red;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.comments {
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.related {
|
||||
margin-top: 50px;
|
||||
text-align: center;
|
||||
|
||||
.related-header {
|
||||
margin-top: -30px;
|
||||
margin-bottom: 20px;
|
||||
|
||||
a {
|
||||
color: $white;
|
||||
font-size: 18px;
|
||||
width: auto;
|
||||
padding: 10px 20px;
|
||||
background-color: $darker;
|
||||
box-shadow: 0px 0px 0px 0px, 0px 6px 12px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: $dark-blue;
|
||||
}
|
||||
}
|
||||
|
||||
.title {
|
||||
padding-top:20px;
|
||||
font-size: 24px;
|
||||
margin-bottom: 20px;
|
||||
|
||||
@media (min-width: $screen-sm-min) {
|
||||
font-size: 36px;
|
||||
}
|
||||
|
||||
a {
|
||||
color: $white;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: $light;
|
||||
}
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
.previous-next {
|
||||
width: 50%;
|
||||
|
||||
a {
|
||||
color: $white;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: $light;
|
||||
}
|
||||
}
|
||||
|
||||
.next {
|
||||
float: right;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.previous {
|
||||
float: left;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.date {
|
||||
color: $light-medium;
|
||||
}
|
||||
}
|
||||
|
||||
.search-hr {
|
||||
width: 700px;
|
||||
border-color: $light-medium;
|
||||
}
|
||||
|
||||
.error {
|
||||
.error-text {
|
||||
margin-top: 30px;
|
||||
|
||||
a {
|
||||
color: $light-blue;
|
||||
}
|
||||
}
|
||||
|
||||
.links {
|
||||
font-size: 1em;
|
||||
}
|
||||
}
|
||||
|
||||
.footer {
|
||||
width: 100%;
|
||||
margin-left: 0%;
|
||||
|
||||
.fa-heart {
|
||||
color: $red;
|
||||
}
|
||||
|
||||
@media (min-width: $screen-sm-min) {
|
||||
width: 90%;
|
||||
margin-left: 5%;
|
||||
}
|
||||
|
||||
@media (min-width: $screen-md-min) {
|
||||
width: 80%;
|
||||
margin-left: 10%;
|
||||
}
|
||||
|
||||
@media (min-width: $screen-lg-min) {
|
||||
width: 70%;
|
||||
margin-left: 15%;
|
||||
}
|
||||
|
||||
div {
|
||||
color: $light-medium;
|
||||
text-align: center;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-categories {
|
||||
background-color: $light-blue;
|
||||
border-color: $light-blue;
|
||||
color: $white;
|
||||
&:hover {
|
||||
background-color: $dark-blue;
|
||||
border-color: $dark-blue;
|
||||
color: $white;
|
||||
}
|
||||
&:active {
|
||||
background-color: $dark-blue;
|
||||
border-color: $dark-blue;
|
||||
color: $white;
|
||||
}
|
||||
&:focus {
|
||||
background-color: $dark-blue;
|
||||
border-color: $dark-blue;
|
||||
color: $white;
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
background-color: $light-blue;
|
||||
color: $white;
|
||||
> li > a {
|
||||
background-color: $light-blue;
|
||||
color: $white;
|
||||
&:hover {
|
||||
background-color: $dark-blue;
|
||||
color: $white;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
table{
|
||||
margin: 0 auto;
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
border:2px solid $darker;;
|
||||
}
|
||||
|
||||
th{
|
||||
padding: 2px;
|
||||
border:2px solid $darker;;
|
||||
}
|
||||
|
||||
td{
|
||||
padding: 2px;
|
||||
border:1px solid $dark-blue;;
|
||||
}
|
BIN
assets/images/avatar-morty.png
Normal file
After Width: | Height: | Size: 63 KiB |
BIN
assets/images/avatar-sthope.png
Normal file
After Width: | Height: | Size: 93 KiB |
BIN
assets/images/bash-logo.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
assets/images/docker-banner.png
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
assets/images/docker-logo.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
assets/images/docker-portainer/1.jpg
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
assets/images/docker-portainer/2.jpg
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
assets/images/docker-portainer/3.jpg
Normal file
After Width: | Height: | Size: 108 KiB |
BIN
assets/images/docker-portainer/4.jpg
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
assets/images/docker-portainer/5.jpg
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
assets/images/dockergithub.png
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
assets/images/favicon.ico
Normal file
After Width: | Height: | Size: 100 KiB |
BIN
assets/images/githubdocker/1.png
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
assets/images/githubdocker/2.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
assets/images/githubdocker/3.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
assets/images/jekyll-logo.png
Normal file
After Width: | Height: | Size: 62 KiB |
BIN
assets/images/logo.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
assets/images/markdown-logo.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
assets/images/nginx-logo.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
assets/images/pirate.jpg
Normal file
After Width: | Height: | Size: 116 KiB |
BIN
assets/images/pirate_logo.png
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
assets/images/portainer-logo.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
assets/images/portainer-small-logo.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
assets/images/portainer_stacks/1.jpg
Normal file
After Width: | Height: | Size: 62 KiB |
BIN
assets/images/portainer_stacks/10.jpg
Normal file
After Width: | Height: | Size: 142 KiB |
BIN
assets/images/portainer_stacks/11.jpg
Normal file
After Width: | Height: | Size: 82 KiB |
BIN
assets/images/portainer_stacks/12.jpg
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
assets/images/portainer_stacks/13.jpg
Normal file
After Width: | Height: | Size: 141 KiB |
BIN
assets/images/portainer_stacks/14.jpg
Normal file
After Width: | Height: | Size: 58 KiB |
BIN
assets/images/portainer_stacks/15.jpg
Normal file
After Width: | Height: | Size: 96 KiB |
BIN
assets/images/portainer_stacks/2.jpg
Normal file
After Width: | Height: | Size: 84 KiB |
BIN
assets/images/portainer_stacks/3.jpg
Normal file
After Width: | Height: | Size: 73 KiB |
BIN
assets/images/portainer_stacks/4.jpg
Normal file
After Width: | Height: | Size: 62 KiB |
BIN
assets/images/portainer_stacks/5.jpg
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
assets/images/portainer_stacks/6.jpg
Normal file
After Width: | Height: | Size: 58 KiB |
BIN
assets/images/portainer_stacks/7.jpg
Normal file
After Width: | Height: | Size: 135 KiB |
BIN
assets/images/portainer_stacks/8.jpg
Normal file
After Width: | Height: | Size: 98 KiB |
BIN
assets/images/portainer_stacks/9.jpg
Normal file
After Width: | Height: | Size: 108 KiB |
BIN
assets/images/proxmox-logo.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
assets/images/proxmox-small-logo.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
assets/images/skull.png
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
assets/images/terminallogo.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
assets/images/tuya-logo.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
assets/images/watchtower-logo.png
Normal file
After Width: | Height: | Size: 19 KiB |
1
assets/js/jekyll-search.js
Normal file
69
assets/js/jquery.mmenu.min.all.js
Normal file
42
by-categories.html
Normal file
@ -0,0 +1,42 @@
|
||||
---
|
||||
layout: default
|
||||
make-smaller-titles: true
|
||||
---
|
||||
|
||||
|
||||
<div class="container-fluid index">
|
||||
<div class="row index all-posts">
|
||||
|
||||
<h1 class="header author-header">{{ site.author_name }}</h1>
|
||||
<h2 class="header" itemprop="headline">All posts</h2>
|
||||
<h2 class="header categories" itemprop="headline"><small>grouped by
|
||||
|
||||
<div class="dropdown btn-group">
|
||||
<button class="btn btn-categories dropdown-toggle btn-xs" type="button" data-toggle="dropdown">Categories
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="{{ site.baseurl }}/by-year/">Years</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</small></h2>
|
||||
{% for category in site.categories %}
|
||||
<div class="col-md-12 content-panel articles">
|
||||
<h2 id="{{ category | first }}-ref">{{ category | first }}</h2>
|
||||
<ul>
|
||||
{% for posts in category %}
|
||||
{% for post in posts %}
|
||||
<li>
|
||||
<a href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a>
|
||||
<small class="hidden-xs">{{ post.date | date: "%B %-d, %Y" }}</small>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
||||
</div>
|
55
by-year.html
Normal file
@ -0,0 +1,55 @@
|
||||
---
|
||||
layout: default
|
||||
make-smaller-titles: true
|
||||
---
|
||||
|
||||
|
||||
<div class="container-fluid index">
|
||||
<div class="row index all-posts">
|
||||
|
||||
<h1 class="header author-header">{{ site.author_name }}</h1>
|
||||
<h2 class="header" itemprop="headline">All posts</h2>
|
||||
<h2 class="header categories" itemprop="headline"><small>grouped by
|
||||
|
||||
<div class="dropdown btn-group">
|
||||
<button class="btn btn-categories dropdown-toggle btn-xs" type="button" data-toggle="dropdown">Years
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="{{ site.baseurl }}/by-categories/">Categories</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</small></h2>
|
||||
|
||||
{% for post in site.posts %}
|
||||
{% capture this_year %}{{ post.date | date: "%Y" }}{% endcapture %}
|
||||
{% capture next_year %}{{ post.previous.date | date: "%Y" }}{% endcapture %}
|
||||
|
||||
{% if forloop.first %}
|
||||
<div class="col-md-12 content-panel articles">
|
||||
<h2 id="{{ this_year }}-ref">{{ this_year }}</h2>
|
||||
<ul>
|
||||
{% endif %}
|
||||
|
||||
<li>
|
||||
<a href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a>
|
||||
<small class="hidden-xs">{{ post.date | date: "%B %-d, %Y" }}</small>
|
||||
</li>
|
||||
{% if forloop.last %}
|
||||
</ul>
|
||||
</div>
|
||||
{% else %}
|
||||
{% if this_year != next_year %}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-md-12 content-panel articles">
|
||||
<h2 id="{{ next_year }}-ref">{{next_year}}</h2>
|
||||
<ul>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
</div>
|
8
favicons/README.md
Normal file
@ -0,0 +1,8 @@
|
||||
# Favicons
|
||||
|
||||
These sample favicons have been generated at http://realfavicongenerator.net/.
|
||||
|
||||
To add your own simply visit http://realfavicongenerator.net/ and
|
||||
generate a new set of favicons (change the path option to `/favicons/`)
|
||||
and replace all of the files in this folder. Then update the favicon section in
|
||||
the [head.html](../_includes/head.html) include with the generated meta tags.
|
BIN
favicons/android-chrome-192x192.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
favicons/android-chrome-512x512.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
favicons/apple-touch-icon-180x180.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
9
favicons/browserconfig.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square150x150logo src="/mstile-150x150.png"/>
|
||||
<TileColor>#da532c</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
</browserconfig>
|
BIN
favicons/favicon-16x16.png
Normal file
After Width: | Height: | Size: 533 B |
BIN
favicons/favicon-32x32.png
Normal file
After Width: | Height: | Size: 663 B |
BIN
favicons/favicon.ico
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
favicons/mstile-150x150.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
23
favicons/safari-pinned-tab.svg
Normal file
@ -0,0 +1,23 @@
|
||||
<?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="980.000000pt" height="980.000000pt" viewBox="0 0 980.000000 980.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
<metadata>
|
||||
Created by potrace 1.14, written by Peter Selinger 2001-2017
|
||||
</metadata>
|
||||
<g transform="translate(0.000000,980.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M400 8070 c-47 -25 -376 -357 -389 -393 -14 -37 -14 -132 0 -160 6
|
||||
-12 543 -554 1192 -1204 l1182 -1183 -1182 -1182 c-669 -670 -1187 -1195
|
||||
-1193 -1211 -15 -41 -12 -124 5 -161 9 -18 97 -114 198 -213 183 -183 211
|
||||
-203 281 -203 80 0 31 -47 1509 1429 774 773 1417 1420 1427 1437 27 42 35
|
||||
112 20 160 -10 32 -266 293 -1429 1457 -779 780 -1428 1425 -1443 1433 -39 20
|
||||
-135 17 -178 -6z"/>
|
||||
<path d="M3825 2456 c-37 -17 -80 -62 -94 -99 -7 -17 -11 -123 -11 -267 0
|
||||
-144 4 -250 11 -267 13 -34 55 -80 91 -99 23 -12 452 -14 2939 -14 l2912 0 41
|
||||
24 c23 13 51 42 64 64 21 38 22 49 22 293 0 245 -1 255 -23 294 -13 22 -40 49
|
||||
-62 62 l-40 23 -2910 -1 c-2409 0 -2915 -2 -2940 -13z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
19
favicons/site.webmanifest
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"name": "",
|
||||
"short_name": "",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "/android-chrome-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"theme_color": "#ffffff",
|
||||
"background_color": "#ffffff",
|
||||
"display": "standalone"
|
||||
}
|
29
feed.xml
Normal file
@ -0,0 +1,29 @@
|
||||
---
|
||||
---
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>{{ site.title | xml_escape }}</title>
|
||||
<description>{{ site.description | xml_escape }}</description>
|
||||
<link>{{ site.url }}{{ site.baseurl }}/</link>
|
||||
<atom:link href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}" rel="self" type="application/rss+xml" />
|
||||
<pubDate>{{ site.time | date_to_rfc822 }}</pubDate>
|
||||
<lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
|
||||
<generator>Jekyll v{{ jekyll.version }}</generator>
|
||||
{% for post in site.posts limit:10 %}
|
||||
<item>
|
||||
<title>{{ post.title | xml_escape }}</title>
|
||||
<description>{{ post.content | xml_escape }}</description>
|
||||
<pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
|
||||
<link>{{ post.url | prepend: site.baseurl | prepend: site.url }}</link>
|
||||
<guid isPermaLink="true">{{ post.url | prepend: site.baseurl | prepend: site.url }}</guid>
|
||||
{% for tag in post.tags %}
|
||||
<category>{{ tag | xml_escape }}</category>
|
||||
{% endfor %}
|
||||
{% for cat in post.categories %}
|
||||
<category>{{ cat | xml_escape }}</category>
|
||||
{% endfor %}
|
||||
</item>
|
||||
{% endfor %}
|
||||
</channel>
|
||||
</rss>
|
55
index.html
Normal file
@ -0,0 +1,55 @@
|
||||
---
|
||||
layout: default
|
||||
make-smaller-titles: true
|
||||
---
|
||||
|
||||
|
||||
<div class="container-fluid index">
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-12 main content-panel">
|
||||
<!-- Sthope Gravatar Profile Picture -->
|
||||
{% if site.gravatar %}
|
||||
<div class="gravatar">
|
||||
<img src="https://www.gravatar.com/avatar/{{ site.gravatar }}?s=250&d=mm&r=x" class="img-circle about-image" height="150" width="150" alt="{{ site.title }}" />
|
||||
</div>
|
||||
{% elsif site.profile_pic %}
|
||||
<div class="gravatar">
|
||||
<img src="{{ site.profile_pic }}" class="img-circle about-image" height="150" width="150" alt="{{ site.title }}" />
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<h1 class="header author-header" itemprop="headline">{{ site.title }}</h1>
|
||||
|
||||
<div class="author-text">
|
||||
{{ site.description }}
|
||||
</div>
|
||||
|
||||
<!-- {% include social_links.html %} -->
|
||||
</div>
|
||||
<div class="col-md-12 main content-panel">
|
||||
|
||||
<div class="articles">
|
||||
|
||||
<h2>Latest Articles</h2>
|
||||
|
||||
<ul>
|
||||
{% for post in site.posts limit: site.post_limit %}
|
||||
|
||||
<li>
|
||||
<a href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a>
|
||||
<small class="hidden-xs">{{ post.date | date: "%B %-d, %Y" }}</small>
|
||||
</li>
|
||||
|
||||
{% endfor %}
|
||||
<li>
|
||||
<small><i><a href="{{ site.baseurl }}/by-year/">more...</a></i></small>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
34
search.html
Normal file
@ -0,0 +1,34 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
<div class="container-fluid index">
|
||||
<div class="row index all-posts">
|
||||
|
||||
<h1 class="header author-header">Search</h1>
|
||||
|
||||
<div id="search-container">
|
||||
<input type="text" id="search-input" placeholder="Type here...">
|
||||
<div class="col-md-12 content-panel articles">
|
||||
<ul id="results-container"><small>Start typing to see some results</small></ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr class="search-hr" />
|
||||
|
||||
<script src="{{ site.baseurl }}/assets/js/jekyll-search.js" type="text/javascript"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
SimpleJekyllSearch.init({
|
||||
searchInput: document.getElementById('search-input'),
|
||||
resultsContainer: document.getElementById('results-container'),
|
||||
dataSource: '{{ site.baseurl }}/search.json',
|
||||
searchResultTemplate: '<li><a href="{url}" title="{desc}">{title}<\/a><\/li>',
|
||||
noResultsText: 'No results found',
|
||||
limit: 10,
|
||||
fuzzy: true,
|
||||
})
|
||||
</script>
|
14
search.json
Normal file
@ -0,0 +1,14 @@
|
||||
---
|
||||
layout: none
|
||||
---
|
||||
[
|
||||
{% for post in site.posts %}
|
||||
{
|
||||
"title" : "{{ post.title | escape }}",
|
||||
"category" : "{{ post.category }}",
|
||||
"tags" : "{{ post.tags | join: ', ' }}",
|
||||
"url" : "{{ site.baseurl }}{{ post.url }}",
|
||||
"date" : "{{ post.date }}"
|
||||
} {% unless forloop.last %},{% endunless %}
|
||||
{% endfor %}
|
||||
]
|