Create jekyll-gh-pages.yml

Revert

Commit inicial - quickstart do Pelican

Remover README

Teste de Action para Github Actions

Clean repo

Making it work with Pelican and fly.io

Novo tema e tracking com Umami
This commit is contained in:
Renne Rocha 2023-11-29 17:47:07 -03:00 committed by Renne Rocha
parent 7846dfde1d
commit 7228ee43b5
34 changed files with 1065 additions and 1 deletions

250
.gitignore vendored Normal file
View file

@ -0,0 +1,250 @@
# Created by https://www.toptal.com/developers/gitignore/api/python,vim,sublimetext,virtualenv
# Edit at https://www.toptal.com/developers/gitignore?templates=python,vim,sublimetext,virtualenv
### Python ###
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/#use-with-ide
.pdm.toml
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
### SublimeText ###
# Cache files for Sublime Text
*.tmlanguage.cache
*.tmPreferences.cache
*.stTheme.cache
# Workspace files are user-specific
*.sublime-workspace
# Project files should be checked into the repository, unless a significant
# proportion of contributors will probably not be using Sublime Text
# *.sublime-project
# SFTP configuration file
sftp-config.json
sftp-config-alt*.json
# Package control specific files
Package Control.last-run
Package Control.ca-list
Package Control.ca-bundle
Package Control.system-ca-bundle
Package Control.cache/
Package Control.ca-certs/
Package Control.merged-ca-bundle
Package Control.user-ca-bundle
oscrypto-ca-bundle.crt
bh_unicode_properties.cache
# Sublime-github package stores a github token in this file
# https://packagecontrol.io/packages/sublime-github
GitHub.sublime-settings
### Vim ###
# Swap
[._]*.s[a-v][a-z]
!*.svg # comment out if you don't need vector files
[._]*.sw[a-p]
[._]s[a-rt-v][a-z]
[._]ss[a-gi-z]
[._]sw[a-p]
# Session
Session.vim
Sessionx.vim
# Temporary
.netrwhist
*~
# Auto-generated tag files
tags
# Persistent undo
[._]*.un~
### VirtualEnv ###
# Virtualenv
# http://iamzed.com/2009/05/07/a-primer-on-virtualenv/
[Bb]in
[Ii]nclude
[Ll]ib
[Ll]ib64
[Ll]ocal
[Ss]cripts
pyvenv.cfg
pip-selfcheck.json
# End of https://www.toptal.com/developers/gitignore/api/python,vim,sublimetext,virtualenv
### Hugo ###
# Generated files by hugo
/public/
/resources/_gen/
/assets/jsconfig.json
hugo_stats.json
# Executable may be added to repository
hugo.exe
hugo.darwin
hugo.linux
# Temporary lock file while building
/.hugo_build.lock#
node_modules
output/

2
Dockerfile Normal file
View file

@ -0,0 +1,2 @@
FROM pierrezemb/gostatic
COPY ./receitasdecerveja/output/ /srv/http/

View file

@ -1 +0,0 @@
# receitasdecerveja.com.br

22
fly.toml Normal file
View file

@ -0,0 +1,22 @@
# fly.toml app configuration file generated for receitasdecerveja-com-br on 2023-12-15T19:36:49-03:00
#
# See https://fly.io/docs/reference/configuration/ for information about how to use this file.
#
app = "receitasdecerveja-com-br"
primary_region = "gru"
[build]
[http_service]
internal_port = 8043
force_https = true
auto_stop_machines = true
auto_start_machines = true
min_machines_running = 0
processes = ["app"]
[[vm]]
cpu_kind = "shared"
cpus = 1
memory_mb = 512

View file

@ -0,0 +1,72 @@
PY?=
PELICAN?=pelican
PELICANOPTS=
BASEDIR=$(CURDIR)
INPUTDIR=$(BASEDIR)/content
OUTPUTDIR=$(BASEDIR)/output
CONFFILE=$(BASEDIR)/pelicanconf.py
PUBLISHCONF=$(BASEDIR)/publishconf.py
DEBUG ?= 0
ifeq ($(DEBUG), 1)
PELICANOPTS += -D
endif
RELATIVE ?= 0
ifeq ($(RELATIVE), 1)
PELICANOPTS += --relative-urls
endif
SERVER ?= "0.0.0.0"
PORT ?= 0
ifneq ($(PORT), 0)
PELICANOPTS += -p $(PORT)
endif
help:
@echo 'Makefile for a pelican Web site '
@echo ' '
@echo 'Usage: '
@echo ' make html (re)generate the web site '
@echo ' make clean remove the generated files '
@echo ' make regenerate regenerate files upon modification '
@echo ' make publish generate using production settings '
@echo ' make serve [PORT=8000] serve site at http://localhost:8000'
@echo ' make serve-global [SERVER=0.0.0.0] serve (as root) to $(SERVER):80 '
@echo ' make devserver [PORT=8000] serve and regenerate together '
@echo ' make devserver-global regenerate and serve on 0.0.0.0 '
@echo ' '
@echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html '
@echo 'Set the RELATIVE variable to 1 to enable relative urls '
@echo ' '
html:
"$(PELICAN)" "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS)
clean:
[ ! -d "$(OUTPUTDIR)" ] || rm -rf "$(OUTPUTDIR)"
regenerate:
"$(PELICAN)" -r "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS)
serve:
"$(PELICAN)" -l "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS)
serve-global:
"$(PELICAN)" -l "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS) -b $(SERVER)
devserver:
"$(PELICAN)" -lr "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS)
devserver-global:
"$(PELICAN)" -lr "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS) -b 0.0.0.0
publish:
"$(PELICAN)" "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(PUBLISHCONF)" $(PELICANOPTS)
.PHONY: html help clean regenerate serve serve-global devserver devserver-global publish

View file

@ -0,0 +1,130 @@
Title: Carl Heron's English Amber Ale
Date: 2023-12-21 10:20
Category: receitas
**English Amber Ale** não é um estilo presente nos principais
guias de estilo (BJCP e BA), mas encontrei uma receita no livro
[Session Beers: brewing for flavor and balance](https://www.amazon.com.br/Session-Beers-Brewing-Flavor-Balance/dp/1938469410/)
e pelos ingredientes, ela aparenta ser uma versão de uma _American
Amber Ale_, menos lupulada e com perfil de maltes inglês. Posso estar
falando besteira, mas resolvi que essa será a próxima receita que vou
produzir!
A descrição no livro é de uma cerveja bem equilibrada onde os "delicados sabores
de malte caramelo adicionam uma agradável doçura e combinam-se artisticamente
com um aroma sutil de lúpulo".
## A receita do livro
O problema de pegar receitas em livros estrangeiros é que as vezes (ou quase sempre)
não temos exatamente os mesmos ingredientes sugeridos, então temos que fazer algumas
adaptações, além de depender do que estiver disponível nas lojas de insumo quando eu
realmente for produzir. A receita original do livro é a seguinte:
- **OG**: 1.040 (10°P)
- **FG**: 1.009 (2.25°P)
- **IBU**: 20
- **ABV**: 4% (como toda receita desse livro, o teor alcoólico dela é baixo)
**Fermentáveis**
- 91% English pale malt
- 6% crystal 150°L
- 2.5% caramalt 15°L
- 0.5% roast barley
**Lúpulos**
- 5% de IBU Perle (8% AA) em 90'
- 5% de IBU Perle (8% AA) em 20'
- 30% de IBU Aurora (8.25% AA) em 0'
- 30% de IBU Perle (8% AA) em 0'
- 5% de IBU Northern Brewer (8.5% AA) em 0'
**Fermento**
- US-05
**Outras informações**
- **Água**: no livro existem algumas sugestões de ajuste de água. Mas como eu ainda não
faço nenhum tratamento de água, não vou colocar aqui
- **Mostura**: 68°C (estou considerando uma mostura padrão de 1h)
- **Fermentação**: Iniciar a fermentação em 18°C e depois manter em 21°C durante o restante
do tempo
- **Carbonatação**: 2.0-2.5 de CO₂
## A receita real
Preciso começar a utilizar algum software do tipo Brewsmith para fazer
ajustes de valores e proporções baseados no meu sistema BIAB que utilizo. Só que
nunca fiz anotações relevantes em todas as minhas outras brassagens. Então dessa
vez vou utilizar as quantidades sugeridas no livro e com os resultados anotados, ter como
ajustar os parâmetros em minhas próximas brassagens.
Modificando e ajustando dede acordo com o que encontrei nas lojas de insumos aqui
da região, a receita fica a seguinte:
**Fermentáveis**
- 3.4kg Maris Otter
- 225g Crystal 150
- 115g Carablond
- 28g Cevada torrada
**Lúpulos**
- 5% de IBU Perle (8% AA) em 90'
- 5% de IBU Perle (8% AA) em 20'
- 30% de IBU Styrian Gold (8.25% AA) em 0'
- 30% de IBU Perle (8% AA) em 0'
- 5% de IBU Northern Brewer (8.5% AA) em 0'
Sobre os lúpulos:
- **[Perle](https://learn.kegerator.com/perle-hops/)** é um lúpulo alemão (também
produzido nos EUA) que pode ser utilizado tanto para aroma (a variedade alemã
parece melhor para isso), como para amargor. Tem um sabor e aroma de
especiarias e picantes. Algumas notas de menta, floral e de chá.
- **[Northern Brewer](https://yakimavalleyhops.com/products/northern-brewer-hop-pellets)** é um
lúpulo de origem inglesa (mas muito cultivado na Alemanha) utilizado tanto para aroma como
para amargor. Resinoso com notas aromáticas de pinho e menta.
- **[Styrian Gold](https://www.hopslist.com/hops/dual-purpose-hops/styrian-gold/)** é um
lúpulo esloveno. Um substituto mais próximo que encontrei do **Aurora**
da receita original, mantendo um perfil parecido combinando sutilmente frutas tropicais com
aromas e sabores herbais, que incluem lima, hortelã e chá de limão.
**Fermento**
O [US-05](https://fermentis.com/en/product/safale-us-05/) é um fermento neutro, utilizado normalmente
em cervejas Ale americanas. Por ser um fermento seco e fácil de encontrar, decidi utilizá-lo.
## Custo
Para estimar o custo da receita, fiz uma pesquisa nas páginas de algumas lojas de insumo
e cheguei nos seguintes valores (obtidos em novembro/2023):
- **Maltes**: o mais caro é o Maris Otter (~R$69), juntando com os outros maltes, tenho um
valor aproximado de R$80.
- **Lúpulos**: na maioria das lojas, eu só consigo comprar pacotes fechados de 50g de cada
variedade. Isso é mais do que eu preciso e vou utilizar o que sobrar em outras receitas.
O valor é aproximadamente R$55.
- **Fermento**: um pacote de US-05 está custando em torno de R$21.
Não vou comprar nenhum equipamento e também não estou considerando custos como gás, material de
limpeza e sanitização, etc. (eu já tenho a maioria), então para essa receita, sobrando um pouco
de lúpulo que pode ser aproveitado em outras receitas, temos um total de aproximadamente **R$156**
para produzir 20L da cerveja (R$7.80/L).
## Expectativa
Pelas informações que encontrei, os lúpulos não possuem um perfil aromático e de sabor tão fortes.
Desse modo, estou esperando uma cerveja onde o sabor do malte será mais presente, com o lúpulo em um
segundo plano, com uma cerveja com sabor mais herbal com tendendo a menta (hortelã e pinho). Pela
temperatura de mostura, o corpo deve ser mais alto, ressaltando mais a presença do malte e a cor
mais avermelhada.
Agora preciso comprar todos os ingredientes e fazer essa cerveja para ver se o que eu espero a partir
da análise da receita (bem superficial!) é o que vou obter.

View file

@ -0,0 +1,33 @@
AUTHOR = "Renne Rocha"
SITENAME = "Receitas de Cerveja"
SITEURL = "https://receitasdecerveja.com.br"
PATH = "content"
TIMEZONE = "America/Sao_Paulo"
DEFAULT_LANG = "pt-br"
DEFAULT_DATE_FORMAT = '%d / %m / %Y'
FEED_ALL_ATOM = None
CATEGORY_FEED_ATOM = None
TRANSLATION_FEED_ATOM = None
AUTHOR_FEED_ATOM = None
AUTHOR_FEED_RSS = None
# Blogroll
LINKS = (
("Mastodon", "https://chaos.social/@rennerocha"),
)
# Social widget
SOCIAL = (
("Mastodon", "https://chaos.social/@rennerocha"),
)
DEFAULT_PAGINATION = 3
RELATIVE_URLS = True
THEME = "themes/monospace"
UMAMI_WEBSITE_ID = ""

View file

@ -0,0 +1,22 @@
# This file is only used if you use `make publish` or
# explicitly specify it as your config file.
import os
import sys
sys.path.append(os.curdir)
from pelicanconf import *
# If your site is available via HTTPS, make sure SITEURL begins with https://
SITEURL = "https://receitasdecerveja.com.br"
RELATIVE_URLS = False
FEED_ALL_ATOM = "feeds/all.atom.xml"
CATEGORY_FEED_ATOM = "feeds/{slug}.atom.xml"
DELETE_OUTPUT_DIRECTORY = True
# Following items are often useful when publishing
# DISQUS_SITENAME = ""
# GOOGLE_ANALYTICS = ""

147
receitasdecerveja/tasks.py Normal file
View file

@ -0,0 +1,147 @@
import os
import shlex
import shutil
import sys
import datetime
from invoke import task
from invoke.main import program
from invoke.util import cd
from pelican import main as pelican_main
from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer
from pelican.settings import DEFAULT_CONFIG, get_settings_from_file
OPEN_BROWSER_ON_SERVE = True
SETTINGS_FILE_BASE = "pelicanconf.py"
SETTINGS = {}
SETTINGS.update(DEFAULT_CONFIG)
LOCAL_SETTINGS = get_settings_from_file(SETTINGS_FILE_BASE)
SETTINGS.update(LOCAL_SETTINGS)
CONFIG = {
"settings_base": SETTINGS_FILE_BASE,
"settings_publish": "publishconf.py",
# Output path. Can be absolute or relative to tasks.py. Default: 'output'
"deploy_path": SETTINGS["OUTPUT_PATH"],
# Host and port for `serve`
"host": "localhost",
"port": 8000,
}
@task
def clean(c):
"""Remove generated files"""
if os.path.isdir(CONFIG["deploy_path"]):
shutil.rmtree(CONFIG["deploy_path"])
os.makedirs(CONFIG["deploy_path"])
@task
def build(c):
"""Build local version of site"""
pelican_run("-s {settings_base}".format(**CONFIG))
@task
def rebuild(c):
"""`build` with the delete switch"""
pelican_run("-d -s {settings_base}".format(**CONFIG))
@task
def regenerate(c):
"""Automatically regenerate site upon file modification"""
pelican_run("-r -s {settings_base}".format(**CONFIG))
@task
def serve(c):
"""Serve site at http://$HOST:$PORT/ (default is localhost:8000)"""
class AddressReuseTCPServer(RootedHTTPServer):
allow_reuse_address = True
server = AddressReuseTCPServer(
CONFIG["deploy_path"],
(CONFIG["host"], CONFIG["port"]),
ComplexHTTPRequestHandler,
)
if OPEN_BROWSER_ON_SERVE:
# Open site in default browser
import webbrowser
webbrowser.open("http://{host}:{port}".format(**CONFIG))
sys.stderr.write("Serving at {host}:{port} ...\n".format(**CONFIG))
server.serve_forever()
@task
def reserve(c):
"""`build`, then `serve`"""
build(c)
serve(c)
@task
def preview(c):
"""Build production version of site"""
pelican_run("-s {settings_publish}".format(**CONFIG))
@task
def livereload(c):
"""Automatically reload browser tab upon file modification."""
from livereload import Server
def cached_build():
cmd = "-s {settings_base} -e CACHE_CONTENT=true LOAD_CONTENT_CACHE=true"
pelican_run(cmd.format(**CONFIG))
cached_build()
server = Server()
theme_path = SETTINGS["THEME"]
watched_globs = [
CONFIG["settings_base"],
f"{theme_path}/templates/**/*.html",
]
content_file_extensions = [".md", ".rst"]
for extension in content_file_extensions:
content_glob = "{}/**/*{}".format(SETTINGS["PATH"], extension)
watched_globs.append(content_glob)
static_file_extensions = [".css", ".js"]
for extension in static_file_extensions:
static_file_glob = f"{theme_path}/static/**/*{extension}"
watched_globs.append(static_file_glob)
for glob in watched_globs:
server.watch(glob, cached_build)
if OPEN_BROWSER_ON_SERVE:
# Open site in default browser
import webbrowser
webbrowser.open("http://{host}:{port}".format(**CONFIG))
server.serve(host=CONFIG["host"], port=CONFIG["port"], root=CONFIG["deploy_path"])
@task
def publish(c):
"""Publish to production via rsync"""
pelican_run("-s {settings_publish}".format(**CONFIG))
c.run(
'rsync --delete --exclude ".DS_Store" -pthrvz -c '
'-e "ssh -p {ssh_port}" '
"{} {ssh_user}@{ssh_host}:{ssh_path}".format(
CONFIG["deploy_path"].rstrip("/") + "/", **CONFIG
)
)
def pelican_run(cmd):
cmd += " " + program.core.remainder # allows to pass-through args to pelican
pelican_main(shlex.split(cmd))

View file

@ -0,0 +1,13 @@
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.

View file

@ -0,0 +1,18 @@
Monospace
==========
Theme adapted from [Monospace for Wordpress](http://wordpress.org/themes/monospace)
Here is a screenshot for your viewing pleasure:
![screengrab](screenshot.png)
If you are using Markdown, you need to include the following option in your settings file to enable syntax highlighting.
MD_EXTENSIONS = ['codehilite(css_class=codehilite code)']
Also, you might want to include the `DESCRIPTION` option (it appears in the left sidebar):
DESCRIPTION = 'My blog and stuff ...'
Nice and simple,
Enjoy!

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

View file

@ -0,0 +1,107 @@
/**
* Theme Name: Monospace
* Theme URI: http://vinicius.soylocoporti.org.br/monospace-wordpress-theme
* Description: A clean, extra-light, easy, objective, image free and 80 columns monospaced content theme. Made for code, manuals and e-mail publishing. Good for programming blogs, planets and posting by mail.
* Author: Vinicius Massuchetto
* Author URI: http://vinicius.soylocoporti.org.br
* Version: 1.91
* Tags: white, blue, two-columns, fixed-width, threaded-comments, translation-ready
* License: GNU General Public License v2.0
* License URI: http://www.gnu.org/licenses/gpl-2.0.html
*/
@import url("pygment.css");
body { margin:0px; padding:20px 0px; text-align:center; font-family:Monospace; color:#585858; }
a, a:visited { text-decoration:none; color:rgb(17, 170, 34); }
a:hover { color:#FFF; background-color:#5353CB }
h1, h2, h3, h4, h5, h6, h7 { margin:0px; text-transform:uppercase; }
h4, h5, h6 { font-size:14px; }
h1 { padding:0px 0px 15px; margin:0px 0px 15px 0px; }
blockquote { font-style:italic; background:#EAEAEA; margin:20px; padding:5px 10px; }
blockquote cite { display:block; padding:10px 20px 0 0; text-align:right; }
input, textarea { padding:5px; border:1px solid #8A8A8A; background:#EAEAEA; }
input:hover, textarea:hover, blockquote:hover { background:#E5E5E5; }
#wrap { margin:0px auto; text-align:left; font-size: 13px; line-height: 1.4; }
#container { float:right; }
#sidebar { overflow:hidden; clear:left; text-align:right; width:250px; height:auto; padding:0px 15px 0px 0px; border-right:1px dotted #C8C8C8; }
#sidebar li { list-style-type:none; }
#sidebar > li { margin:20px 0px; }
#sidebar h1 { border-bottom:1px dotted #C8C8C8; }
#sidebar .description { display:block; width:100%; height:auto; margin:0px 0px 10px 0px; }
ul.sub-menu, ul.children { margin:0px 10px 0px 0px; }
.post { margin:0px 0px 30px 0px; padding:0px 0px 30px 0px; border-bottom:1px dotted #C8C8C8; }
.post-edit-link { clear:both; }
.meta { margin:10px; padding:15px; background:#EAEAEA; clear:both; }
.meta span { display:block; clear:left; }
.thumbnail { margin:0px; padding:0px; }
.thumbnail img { float:right; }
.entry { font-size: 14px; line-height: 20px; }
.entry h2, h3, h4, h5 { margin:30px 0px 10px 0px; }
.entry img { display:block; border:1px solid #BDBDBD !important; }
.entry img.wp-smiley { border:0px !important; }
.entry a img:hover { background-color:transparent; border:1px solid #E5E5E5 !important; }
.entry .aligncenter, div.aligncenter { margin:10px auto; }
.entry .alignleft { float: left; margin:10px 15px 10px 0px; }
.entry .alignright { float: right; margin:10px 0px 10px 15px; }
.entry .alignnone { margin:10px 0px; }
.entry .gallery, .wp-caption { text-align:center; background:#EAEAEA; margin:10px; padding:10px; border:0px; max-width:520px; height:auto; }
.entry .wp-caption img { border:0 none; margin:0px auto; padding:0; max-width:500px; height:auto; }
.entry .gallery:hover, .wp-caption:hover { background:#E5E5E5; }
.entry .gallery-caption, .wp-caption-text { background:transparent; }
.entry .wp-caption p.wp-caption-text { font-size:11px; line-height:17px; margin:5px 50px 0px; }
.entry .gallery-icon { width:100%; height:auto; }
.entry .gallery-icon img { margin:0px auto; }
.entry .gallery-caption { margin:5px 10px 0px 0px; padding:0px; }
.entry p.attachment img { margin:0px auto; }
.sticky { border-bottom:3px dotted #C8C8C8; }
.wp_syntax { padding:5px 0px; }
.wp_syntax pre { line-height:1.3; }
.wp_syntax pre.php { line-height:1; }
.widget_recent_entries ul li,
.widget_recent_comments ul li,
.widget_rss ul li { margin:10px 0px; padding:10px 0px; border-top:1px dotted #C8C8C8; }
.related { margin:20px 0px 0px 0px; }
.nav { margin:30px 0px; text-align:center; }
#comments { border-top:1px dotted #C8C8C8; margin:30px 0px 0px 0px; padding:30px 0px 0px 0px; }
.commentlist li { list-style-type:none; padding:10px; margin:20px 0px 0px 0px; }
.commentlist li.even { background:#EAEAEA; }
.commentlist li.odd { background:#D6D6D6; }
.comment-author img { float:left; margin:0px 10px 10px 0px; }
ul.commentlist ul.children { padding-left:10px; }
ul.commentlist ul.children li { list-style-type:none; border:1px solid #AAA }
.form-section { margin:10px 0px; text-align:right; }
.form-section div { display:inline; }
.bypostauthor { border:3px dotted #C8C8C8; }
.form-allowed-tags { display:none; }
#respond { margin:30px 0px 0px 0px; background:#FFF; border:1px solid #9A9A9A; margin:30px 0 0; padding:20px; }
#commentform p { text-align:right; }
#commentform input { width:50%; height:auto; margin:0px 0px 0px 10px; }
#commentform .required { font-weight:bold; }
#commentform textarea { width:95%; height:auto; margin:10px 0px 0px 0px; }
#commentform .comment-form-comment { margin-bottom:5px; text-align:right; }
#commentform .form-allowed-tags { color:#8A8A8A; margin-top:0px; font-size:10px; }
input#submit { font-weight:bold; }
input#s { width:70%; height:auto; margin:5px 0px; }
#footer { text-align:center; clear:both; }
#footer div { margin:30px 0px 0px 0px; padding:30px 0px 0px 0px; border-top:1px dotted #C8C8C8; }
#footer li { list-style-type:none; }
#footer .widget_tag_cloud h2 { display:none; }
/* LWM EDITS */
#page-title{
position : relative;
top : 8px;
}

View file

@ -0,0 +1,2 @@
.highlight code,.highlight pre{color:#fdce93;background-color:#3f3f3f;padding:10px;}.highlight .hll{background-color:#222}.highlight .c{color:#7f9f7f}.highlight .err{color:#e37170;background-color:#3d3535}.highlight .g{color:#7f9f7f}.highlight .k{color:#f0dfaf}.highlight .l{color:#ccc}.highlight .n{color:#dcdccc}.highlight .o{color:#f0efd0}.highlight .x{color:#ccc}.highlight .p{color:#41706f}.highlight .cm{color:#7f9f7f}.highlight .cp{color:#7f9f7f}.highlight .c1{color:#7f9f7f}.highlight .cs{color:#cd0000;font-weight:bold}.highlight .gd{color:#cd0000}.highlight .ge{color:#ccc;font-style:italic}.highlight .gr{color:red}.highlight .gh{color:#dcdccc;font-weight:bold}.highlight .gi{color:#00cd00}.highlight .go{color:gray}.highlight .gp{color:#dcdccc;font-weight:bold}.highlight .gs{color:#ccc;font-weight:bold}.highlight .gu{color:purple;font-weight:bold}.highlight .gt{color:#0040D0}.highlight .kc{color:#dca3a3}.highlight .kd{color:#ffff86}.highlight .kn{color:#dfaf8f;font-weight:bold}.highlight .kp{color:#cdcf99}.highlight .kr{color:#cdcd00}.highlight .kt{color:#00cd00}.highlight .ld{color:#cc9393}.highlight .m{color:#8cd0d3}.highlight .s{color:#cc9393}.highlight .na{color:#9ac39f}.highlight .nb{color:#efef8f}.highlight .nc{color:#efef8f}.highlight .no{color:#ccc}.highlight .nd{color:#ccc}.highlight .ni{color:#c28182}.highlight .ne{color:#c3bf9f;font-weight:bold}.highlight .nf{color:#efef8f}.highlight .nl{color:#ccc}.highlight .nn{color:#8fbede}.highlight .nx{color:#ccc}.highlight .py{color:#ccc}.highlight .nt{color:#9ac39f}.highlight .nv{color:#dcdccc}.highlight .ow{color:#f0efd0}.highlight .w{color:#ccc}.highlight .mf{color:#8cd0d3}.highlight .mh{color:#8cd0d3}.highlight .mi{color:#8cd0d3}.highlight .mo{color:#8cd0d3}.highlight .sb{color:#cc9393}.highlight .sc{color:#cc9393}.highlight .sd{color:#cc9393}.highlight .s2{color:#cc9393}.highlight .se{color:#cc9393}.highlight .sh{color:#cc9393}.highlight .si{color:#cc9393}.highlight .sx{color:#cc9393}.highlight .sr{color:#cc9393}.highlight .s1{color:#cc9393}.highlight .ss{color:#cc9393}.highlight .bp{color:#efef8f}.highlight .vc{color:#efef8f}.highlight .vg{color:#dcdccc}.highlight .vi{color:#ffffc7}.highlight .il{color:#8cd0d3}

View file

@ -0,0 +1,3 @@
{% if UMAMI_WEBSITE_ID %}
<script async src="https://eu.umami.is/script.js" data-website-id="{{ UMAMI_WEBSITE_ID }}"></script>
{% endif %}

View file

@ -0,0 +1,13 @@
{% extends "base.html" %}
{% block content %}
<section id="content" class="body">
<h1>Archives for {{ SITENAME }}</h1>
<dl>
{% for article in dates %}
<dt>{{ article.locale_date }}</dt>
<dd><a href='{{ SITEURL }}/{{ article.url }}'>{{ article.title }}</a></dd>
{% endfor %}
</dl>
</section>
{% endblock %}

View file

@ -0,0 +1,29 @@
{% extends "base.html" %}
{% block title %}{{ super() }} : {{ article.title }}{% endblock %}
{% block content %}
<header>
<h1><a href="{{ SITEURL }}" id="site-title"> {#{{ SITENAME }}#} {% if SITESUBTITLE %} <strong>{{ SITESUBTITLE }}</strong>{% endif %}</a> {#:#}
<a href="{{ SITEURL }}/{{ article.url }}" id="page-title">{{ article.title }}</a></h1>
{% if not HIDE_DATE %}<time datetime="{{ article.date.isoformat() }}">{{ article.locale_date }}</time>{% endif %}
</header>
<article>
{{ article.content }}
{% if DISQUS_SITENAME and SITEURL and article.status != "draft" %}
<h2>Comments</h2>
<div id="disqus_thread"></div>
<script type="text/javascript">
var disqus_shortname = '{{ DISQUS_SITENAME }}';
var disqus_identifier = '{{ article.url }}';
var disqus_url = '{{ SITEURL }}/{{ article.url }}';
(function() {
var dsq = document.createElement('script');
dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'https://' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] ||
document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>Please enable JavaScript to view the comments.</noscript>
{% endif %}
</article>
{% endblock %}

View file

@ -0,0 +1,2 @@
{% extends "index.html" %}
{% block title %}{{ SITENAME }} - {{ author }}{% endblock %}

View file

@ -0,0 +1,71 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>{% block title %}{{ SITENAME }}{%endblock%}</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="{{ SITEURL }}/theme/css/{{ CSS_FILE }}" type="text/css" />
<link href="{{ SITEURL }}/{{ FEED }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} ATOM Feed" />
{% if FEED_RSS %}
<link href="{{ SITEURL }}/{{ FEED_RSS }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} RSS Feed" />
{% endif %}
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
<!--[if lte IE 7]>
<link rel="stylesheet" type="text/css" media="all" href="{{ SITEURL }}/css/ie.css"/>
<script src="{{ SITEURL }}/js/IE8.js" type="text/javascript"></script><![endif]-->
<!--[if lt IE 7]>
<link rel="stylesheet" type="text/css" media="all" href="{{ SITEURL }}/css/ie6.css"/><![endif]-->
</head>
<body>
<div id="wrap" style="width:850px">
<div id="container" style="width:560px">
{% include 'github.html' %}
<div class="entry">
{% block content %}
{% endblock %}
</div>
</div>
<div id="sidebar">
<h1><a href="{{ SITEURL }} " title="title">{{ SITENAME }}</a></h1>
<span class="description">{{ DESCRIPTION }} </span>
<!-- <span class="feed"><a href="">RSS</a> | <a href="">Atom</a></span> -->
</div>
<div id="footer">
<nav>
<ul>
{% for page in pages %}
<li><a href="{{ SITEURL }}/{{ page.url }}">{{ page.title }}</a>{% if not loop.last %} ::{% endif %}</li>
{% endfor %}
{% if categories|length > 1 %}
<li>:: <a href="{{ SITEURL }}/categories.html">Categories</a></li>
{% endif %}
{% if tags|length > 1 %}
<li>:: <a href="{{ SITEURL }}/tags.html">Tags</a></li>
{% endif %}
</ul>
</nav>
<div id="credits">
<span>Adapted from <a href="http://wordpress.org/themes/monospace">Monospace</a> || Created with <a href="">Pelican</a></span>
</div>
</div>
{% include 'analytics.html' %}
{% include 'piwik.html' %}
{% include 'disqus_script.html' %}
</div>
</body>
</html>

View file

@ -0,0 +1,8 @@
{% extends "base.html" %}
{% block content %}
<ul>
{% for category, articles in categories %}
<li><a href="{{ SITEURL }}/{{ category.url }}">{{ category }}</a></li>
{% endfor %}
</ul>
{% endblock %}

View file

@ -0,0 +1,2 @@
{% extends "index.html" %}
{% block title %}{{ SITENAME }} - {{ category }}{% endblock %}

View file

@ -0,0 +1 @@
{% if DISQUS_SITENAME %}<p>There are <a href="{{ SITEURL }}/{{ article.url }}#disqus_thread">comments</a>.</p>{% endif %}

View file

@ -0,0 +1,11 @@
{% if DISQUS_SITENAME %}
<script type="text/javascript">
var disqus_shortname = '{{ DISQUS_SITENAME }}';
(function () {
var s = document.createElement('script'); s.async = true;
s.type = 'text/javascript';
s.src = 'http://' + disqus_shortname + '.disqus.com/count.js';
(document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
}());
</script>
{% endif %}

View file

@ -0,0 +1,9 @@
{% if GITHUB_URL %}
<a href="{{ GITHUB_URL }}">
{% if GITHUB_POSITION != "left" %}
<img style="position: absolute; top: 0; right: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub" />
{% else %}
<img style="position: absolute; top: 0; left: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_left_white_ffffff.png" alt="Fork me on GitHub" />
{% endif %}
</a>
{% endif %}

View file

@ -0,0 +1,34 @@
{% extends "base.html" %}
{% block content_title %}{% endblock %}
{% block content %}
{% if articles %}
{% for article in articles %}
{# First item #}
{% if loop.first %}
<header>
<h1><a href="{{ SITEURL }}" id="site-title"> {# {{ SITENAME }} #} {% if SITESUBTITLE %} <strong>{{ SITESUBTITLE }}</strong>{% endif %}</a> {#:#} <a href="{{ SITEURL }}/{{ article.url }}" id="page-title">{{ article.title }}</a></h1>
{% if not HIDE_DATE %}<time datetime="{{ article.date.isoformat() }}">{{ article.locale_date }}</time>{% endif %}
</header>
<article>
{{ article.content }}{% include 'comments.html' %}
</article>
{% if loop.length > 1 %}
<section id="article-list">
<h2>All posts</h2>
<ol>
{% endif %}
{# other items #}
{% else %}
<li><a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark" title="Permalink to {{ article.title}}">{{ article.title }}</a></li>
{% endif %}
{% if loop.length > 1 %}
</ol>
</section><!-- #article-list -->
{% endif %}
{% endfor %}
{% else %}
No posts found.
{% endif %}
{% endblock content %}

View file

@ -0,0 +1,11 @@
{% extends "base.html" %}
{% block title %}{{ page.title }}{% endblock %}
{% block content %}
<header>
<h1><a href="{{ SITEURL }}" id="site-title">{# {{ SITENAME }} #} {% if SITESUBTITLE %} <strong>{{ SITESUBTITLE }}</strong>{% endif %}</a> {#:#}
<a href="{{ SITEURL }}/{{ page.url }}" id="page-title">{{ page.title }}</a></h1>
</header>
<article>
{{ page.content }}
</article>
{% endblock %}

View file

@ -0,0 +1,15 @@
{% if DEFAULT_PAGINATION %}
<p class="paginator">
{% if articles_page.has_previous() %}
{% if articles_page.previous_page_number() == 1 %}
<a href="{{ SITEURL }}/{{ page_name }}.html">&laquo;</a>
{% else %}
<a href="{{ SITEURL }}/{{ page_name }}{{ articles_page.previous_page_number() }}.html">&laquo;</a>
{% endif %}
{% endif %}
Page {{ articles_page.number }} / {{ articles_paginator.num_pages }}
{% if articles_page.has_next() %}
<a href="{{ SITEURL }}/{{ page_name }}{{ articles_page.next_page_number() }}.html">&raquo;</a>
{% endif %}
</p>
{% endif %}

View file

@ -0,0 +1,16 @@
{% if PIWIK_URL and PIWIK_SITE_ID %}
<script type="text/javascript">
{% if PIWIK_SSL_URL %}
var pkBaseURL = (("https:" == document.location.protocol) ? "https://{{ PIWIK_SSL_URL }}/" : "http://{{ PIWIK_URL }}/");
{% else %}
var pkBaseURL = (("https:" == document.location.protocol) ? "https://{{ PIWIK_URL }}/" : "http://{{ PIWIK_URL }}/");
{% endif %}
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
</script><script type="text/javascript">
try {
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", {{ PIWIK_SITE_ID }});
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch( err ) {}
</script><noscript><p><img src="http://{{ PIWIK_URL }}/piwik.php?idsite={{ PIWIK_SITE_ID }}" style="border:0" alt="" /></p></noscript>
{% endif %}

View file

@ -0,0 +1,2 @@
{% extends "index.html" %}
{% block title %}{{ SITENAME }} - {{ tag }}{% endblock %}

View file

@ -0,0 +1,2 @@
{% if article.tags %}<p>tags: {% for tag in article.tags %}<a href="{{ SITEURL }}/{{ tag.url }}">{{ tag }}</a>{% endfor %}</p>{% endif %}
{% if PDF_PROCESSOR %}<p><a href="{{ SITEURL }}/pdf/{{ article.slug }}.pdf">get the pdf</a></p>{% endif %}

View file

@ -0,0 +1,9 @@
{% extends "base.html" %}
{% block content %}
<ul>
{% for tag, articles in tags %}
<li><a href="{{ SITEURL }}/{{ tag.url }}">{{ tag }}</a></li>
{% endfor %}
</ul>
{% endblock %}

View file

@ -0,0 +1,6 @@
{% if article.translations %}
Translations:
{% for translation in article.translations %}
<a href="{{ SITEURL }}/{{ translation.url }}">{{ translation.lang }}</a>
{% endfor %}
{% endif %}

View file

@ -0,0 +1,3 @@
{% if TWITTER_USERNAME %}
<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="{{TWITTER_USERNAME}}">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
{% endif %}