diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0042fae --- /dev/null +++ b/Makefile @@ -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 diff --git a/__pycache__/pelicanconf.cpython-314.pyc b/__pycache__/pelicanconf.cpython-314.pyc new file mode 100644 index 0000000..a978d43 Binary files /dev/null and b/__pycache__/pelicanconf.cpython-314.pyc differ diff --git a/output/archives.html b/output/archives.html new file mode 100644 index 0000000..9e86252 --- /dev/null +++ b/output/archives.html @@ -0,0 +1,52 @@ + + + + + + + R.A.B.I.D.s + + + + + +
+

Archives for R.A.B.I.D.s

+ +
+
+
+
+
+

links

+ +
+
+

social

+ +
+
+ + + + + \ No newline at end of file diff --git a/output/authors.html b/output/authors.html new file mode 100644 index 0000000..65db3f0 --- /dev/null +++ b/output/authors.html @@ -0,0 +1,53 @@ + + + + + + + R.A.B.I.D.s - Authors + + + + + + +
+

Authors on R.A.B.I.D.s

+ +
+ +
+
+

links

+ +
+
+

social

+ +
+
+ + + + + \ No newline at end of file diff --git a/output/categories.html b/output/categories.html new file mode 100644 index 0000000..55b66ce --- /dev/null +++ b/output/categories.html @@ -0,0 +1,53 @@ + + + + + + + R.A.B.I.D.s - Categories + + + + + + +
+

Categories for R.A.B.I.D.s

+ +
+ +
+
+

links

+ +
+
+

social

+ +
+
+ + + + + \ No newline at end of file diff --git a/output/index.html b/output/index.html new file mode 100644 index 0000000..46d8a2a --- /dev/null +++ b/output/index.html @@ -0,0 +1,49 @@ + + + + + + + R.A.B.I.D.s + + + + + +
+

This site currently has no content.

+
+
+
+

links

+ +
+
+

social

+ +
+
+ + + + + \ No newline at end of file diff --git a/output/tags.html b/output/tags.html new file mode 100644 index 0000000..2cacef5 --- /dev/null +++ b/output/tags.html @@ -0,0 +1,53 @@ + + + + + + + R.A.B.I.D.s - Tags + + + + + + +
+

Tags for R.A.B.I.D.s

+ +
+ +
+
+

links

+ +
+
+

social

+ +
+
+ + + + + \ No newline at end of file diff --git a/output/theme/css/fonts.css b/output/theme/css/fonts.css new file mode 100644 index 0000000..7c69215 --- /dev/null +++ b/output/theme/css/fonts.css @@ -0,0 +1,12 @@ +@font-face { + font-family: 'Yanone Kaffeesatz'; + font-style: normal; + font-weight: 400; + src: + local('Yanone Kaffeesatz Regular'), + local('YanoneKaffeesatz-Regular'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLRTHiN2BPBirwIkMLKUspj4.woff */ + url('../fonts/Yanone_Kaffeesatz_400.woff') format('woff'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLfGwxTS8d1Q9KiDNCMKLFUM.woff2 */ + url('../fonts/Yanone_Kaffeesatz_400.woff2') format('woff2'); +} diff --git a/output/theme/css/main.css b/output/theme/css/main.css new file mode 100644 index 0000000..2e2aee4 --- /dev/null +++ b/output/theme/css/main.css @@ -0,0 +1,494 @@ +/* + Name: Smashing HTML5 + Date: July 2009 + Description: Sample layout for HTML5 and CSS3 goodness. + Version: 1.0 + License: MIT + Licensed by: Smashing Media GmbH + Original author: Enrique Ramírez +*/ + +/* Imports */ +@import url("reset.css"); +@import url("pygment.css"); +@import url("typogrify.css"); +@import url("fonts.css"); + +/***** Global *****/ +/* Body */ +body { + background: #F5F4EF; + color: #000305; + font-size: 87.5%; /* Base font size: 14px */ + font-family: 'Trebuchet MS', Trebuchet, 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif; + line-height: 1.429; + margin: 0; + padding: 0; + text-align: left; +} + +@media (prefers-color-scheme: dark) { + body { + background: #070808; + color: #FFFEFE; + } +} + +/* Headings */ +h1 {font-size: 2em } +h2 {font-size: 1.571em} /* 22px */ +h3 {font-size: 1.429em} /* 20px */ +h4 {font-size: 1.286em} /* 18px */ +h5 {font-size: 1.143em} /* 16px */ +h6 {font-size: 1em} /* 14px */ + +h1, h2, h3, h4, h5, h6 { + font-weight: 400; + line-height: 1.1; + margin-bottom: .8em; + font-family: 'Yanone Kaffeesatz', arial, serif; +} + +h3, h4, h5, h6 { margin-top: .8em; } + +hr { border: 2px solid #EEEEEE; } + +/* Anchors */ +a {outline: 0;} +a img {border: 0px; text-decoration: none;} +a:link, a:visited { + color: #C74350; + padding: 0 1px; + text-decoration: underline; +} +a:hover, a:active { + background-color: #C74350; + color: #fff; + text-decoration: none; + text-shadow: 1px 1px 1px #333; +} + +h1 a:hover { + background-color: inherit +} + +/* Paragraphs */ +div.line-block, +p { margin-top: 1em; + margin-bottom: 1em;} + +strong, b {font-weight: bold;} +em, i {font-style: italic;} + +/* Lists */ +ul { + list-style: outside disc; + margin: 0em 0 0 1.5em; +} + +ol { + list-style: outside decimal; + margin: 0em 0 0 1.5em; +} + +li { margin-top: 0.5em; + margin-bottom: 1em; } + +.post-info { + float:right; + margin:10px; + padding:5px; +} + +.post-info p{ + margin-top: 1px; + margin-bottom: 1px; +} + +.readmore { float: right } + +dl {margin: 0 0 1.5em 0;} +dt {font-weight: bold;} +dd {margin-left: 1.5em;} + +pre{background-color: rgb(238, 238, 238); padding: 10px; margin: 10px; overflow: auto;} + +@media (prefers-color-scheme: dark) { + pre { + background: rgb(38, 38, 38); + } +} + +/* Quotes */ +blockquote { + margin: 20px; + font-style: italic; +} +cite {} + +q {} + +div.note { + float: right; + margin: 5px; + font-size: 85%; + max-width: 300px; +} + +/* Tables */ +table {margin: .5em auto 1.5em auto; width: 98%;} + + /* Thead */ +thead th {padding: .5em .4em; text-align: left;} +thead td {} + + /* Tbody */ +tbody td {padding: .5em .4em;} +tbody th {} + +tbody .alt td {} +tbody .alt th {} + + /* Tfoot */ +tfoot th {} +tfoot td {} + +/* HTML5 tags */ +header, section, footer, +aside, nav, article, figure { + display: block; +} + +/***** Layout *****/ +.body {clear: both; margin: 0 auto; max-width: 800px;} +img { max-width: 100%; } +img.right, figure.right, div.figure.align-right { + float: right; + margin: 0 0 2em 2em; +} +img.left, figure.left, div.figure.align-left { + float: left; + margin: 0 2em 2em 0; +} + +/* .rst support */ +div.figure img, figure img { /* to fill figure exactly */ + max-width: 100%; +} +div.figure p.caption, figure p.caption { /* margin provided by figure */ + margin-top: 0; + margin-bottom: 0; +} + +/* + Header +*****************/ +#banner { + margin: 0 auto; + padding: 0.8em 0 0 0; +} + + /* Banner */ +#banner h1 { + font-size: 3.571em; + line-height: 1.0; + margin-bottom: .3em; +} + +#banner h1 a:link, #banner h1 a:visited { + color: #000305; + display: block; + font-weight: bold; + margin: 0 0 0 .2em; + text-decoration: none; +} +#banner h1 a:hover, #banner h1 a:active { + background: none; + color: #C74350; + text-shadow: none; +} + +#banner h1 strong {font-size: 0.36em; font-weight: normal;} + +@media (prefers-color-scheme: dark) { + #banner h1 a:link, #banner h1 a:visited { + color: #FFFAF8; + } +} + + /* Main Nav */ +#banner nav { + background: #000305; + font-size: 1.143em; + overflow: auto; + line-height: 30px; + margin: 0 auto 2em auto; + padding: 0; + text-align: center; + max-width: 800px; + + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} + +@media (prefers-color-scheme: dark) { + #banner nav { + background: #121518; + } +} + +#banner nav ul {list-style: none; margin: 0 auto; max-width: 800px;} +#banner nav li {float: left; display: inline; margin: 0;} + +#banner nav a:link, #banner nav a:visited { + color: #fff; + display: inline-block; + height: 30px; + padding: 5px 1.5em; + text-decoration: none; +} +#banner nav a:hover, #banner nav a:active, +#banner nav .active a:link, #banner nav .active a:visited { + background: #C74451; + color: #fff; + text-shadow: none !important; +} + +#banner nav li:first-child a { + border-top-left-radius: 5px; + -moz-border-radius-topleft: 5px; + -webkit-border-top-left-radius: 5px; + + border-bottom-left-radius: 5px; + -moz-border-radius-bottomleft: 5px; + -webkit-border-bottom-left-radius: 5px; +} + +/* + Featured +*****************/ +#featured { + background: #fff; + margin-bottom: 2em; + overflow: hidden; + padding: 20px; + max-width: 760px; + + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +@media (prefers-color-scheme: dark) { + #featured { + background: #151617; + } +} + +#featured figure { + border: 2px solid #eee; + float: right; + margin: 0.786em 2em 0 5em; + max-width: 248px; +} +#featured figure img {display: block; float: right;} + +#featured h2 {color: #C74451; font-size: 1.714em; margin-bottom: 0.333em;} +#featured h3 {font-size: 1.429em; margin-bottom: .5em;} + +#featured h3 a:link, #featured h3 a:visited {color: #000305; text-decoration: none;} +#featured h3 a:hover, #featured h3 a:active {color: #fff;} + +/* + Body +*****************/ +#content { + background: #fff; + margin-bottom: 2em; + overflow: hidden; + padding: 20px 20px; + max-width: 760px; + + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +@media (prefers-color-scheme: dark) { + #content { + background: #111; + } +} + +/* + Extras +*****************/ +#extras {margin: 0 auto 3em auto; overflow: hidden;} + +#extras ul {list-style: none; margin: 0;} +#extras li {border-bottom: 1px solid #fff;} +#extras h2 { + color: #C74350; + font-size: 1.429em; + margin-bottom: .25em; + padding: 0 3px; +} + +#extras a:link, #extras a:visited { + color: #444; + display: block; + border-bottom: 1px solid #F4E3E3; + text-decoration: none; + padding: .3em .25em; +} + +@media (prefers-color-scheme: dark) { + #extras a:link, #extras a:visited { + color: #888; + } +} + +#extras a:hover, #extras a:active {color: #fff;} + + /* Blogroll */ +#extras .blogroll { + float: left; + max-width: 615px; +} + +#extras .blogroll li {float: left; margin: 0 20px 0 0; max-width: 185px;} + + /* Social */ +#extras .social { + float: right; + max-width: 175px; +} + +/* + About +*****************/ +#about { + background: #fff; + font-style: normal; + margin-bottom: 2em; + overflow: hidden; + padding: 20px; + text-align: left; + max-width: 760px; + + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +@media (prefers-color-scheme: dark) { + #about { + background: #222; + } +} + +#about .primary {float: left; max-width: 165px;} +#about .primary strong {color: #C64350; display: block; font-size: 1.286em;} +#about .photo {float: left; margin: 5px 20px;} + +#about .url:link, #about .url:visited {text-decoration: none;} + +#about .bio {float: right; max-width: 500px;} + +/* + Footer +*****************/ +#contentinfo {padding-bottom: 2em; text-align: right;} + +/***** Sections *****/ +/* Blog */ +.hentry { + display: block; + clear: both; + border-top: 1px solid #eee; + padding: 1.5em 0; +} +li:first-child .hentry, #content > .hentry {border: 0; margin: 0;} +#content > .hentry {padding: 1em 0;} +.hentry img{display : none ;} +.entry-title {font-size: 3em; margin-bottom: 10px; margin-top: 0;} +.entry-title a:link, .entry-title a:visited {text-decoration: none; color: #333;} +.entry-title a:visited {background-color: #fff;} + +@media (prefers-color-scheme: dark) { + .entry-title a:link, .entry-title a:visited { + color: #C74350; + } +} + +.hentry .post-info * {font-style: normal;} + + /* Content */ +.hentry footer {margin-bottom: 2em;} +.hentry footer address {display: inline;} +#posts-list footer address {display: block;} + + /* Blog Index */ +#posts-list {list-style: none; margin: 0;} +#posts-list .hentry {padding-left: 10px; position: relative;} + +#posts-list footer { + left: 10px; + position: relative; + float: left; + top: 0.5em; + max-width: 190px; +} + + /* About the Author */ +#about-author { + background: #f9f9f9; + clear: both; + font-style: normal; + margin: 2em 0; + padding: 10px 20px 15px 20px; + + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} + +#about-author strong { + color: #C64350; + clear: both; + display: block; + font-size: 1.429em; +} + +#about-author .photo {border: 1px solid #ddd; float: left; margin: 5px 1em 0 0;} + + /* Comments */ +#comments-list {list-style: none; margin: 0 1em;} +#comments-list blockquote { + background: #f8f8f8; + clear: both; + font-style: normal; + margin: 0; + padding: 15px 20px; + + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} +#comments-list footer {color: #888; padding: .5em 1em 0 0; text-align: right;} + +#comments-list li:nth-child(2n) blockquote {background: #F5f5f5;} + + /* Add a Comment */ +#add-comment label {clear: left; float: left; text-align: left; max-width: 150px;} +#add-comment input[type='text'], +#add-comment input[type='email'], +#add-comment input[type='url'] {float: left; max-width: 200px;} + +#add-comment textarea {float: left; height: 150px; max-width: 495px;} + +#add-comment p.req {clear: both; margin: 0 .5em 1em 0; text-align: right;} + +#add-comment input[type='submit'] {float: right; margin: 0 .5em;} +#add-comment * {margin-bottom: .5em;} diff --git a/output/theme/css/pygment.css b/output/theme/css/pygment.css new file mode 100644 index 0000000..a3877a8 --- /dev/null +++ b/output/theme/css/pygment.css @@ -0,0 +1,205 @@ +.hll { + background-color:#eee; +} +.c { + color:#408090; + font-style:italic; +} +.err { + border:1px solid #FF0000; +} +.k { + color:#007020; + font-weight:bold; +} +.o { + color:#666666; +} +.cm { + color:#408090; + font-style:italic; +} +.cp { + color:#007020; +} +.c1 { + color:#408090; + font-style:italic; +} +.cs { + background-color:#FFF0F0; + color:#408090; +} +.gd { + color:#A00000; +} +.ge { + font-style:italic; +} +.gr { + color:#FF0000; +} +.gh { + color:#000080; + font-weight:bold; +} +.gi { + color:#00A000; +} +.go { + color:#303030; +} +.gp { + color:#C65D09; + font-weight:bold; +} +.gs { + font-weight:bold; +} +.gu { + color:#800080; + font-weight:bold; +} +.gt { + color:#0040D0; +} +.kc { + color:#007020; + font-weight:bold; +} +.kd { + color:#007020; + font-weight:bold; +} +.kn { + color:#007020; + font-weight:bold; +} +.kp { + color:#007020; +} +.kr { + color:#007020; + font-weight:bold; +} +.kt { + color:#902000; +} +.m { + color:#208050; +} +.s { + color:#4070A0; +} +.na { + color:#4070A0; +} +.nb { + color:#007020; +} +.nc { + color:#0E84B5; + font-weight:bold; +} +.no { + color:#60ADD5; +} +.nd { + color:#555555; + font-weight:bold; +} +.ni { + color:#D55537; + font-weight:bold; +} +.ne { + color:#007020; +} +.nf { + color:#06287E; +} +.nl { + color:#002070; + font-weight:bold; +} +.nn { + color:#0E84B5; + font-weight:bold; +} +.nt { + color:#062873; + font-weight:bold; +} +.nv { + color:#BB60D5; +} +.ow { + color:#007020; + font-weight:bold; +} +.w { + color:#BBBBBB; +} +.mf { + color:#208050; +} +.mh { + color:#208050; +} +.mi { + color:#208050; +} +.mo { + color:#208050; +} +.sb { + color:#4070A0; +} +.sc { + color:#4070A0; +} +.sd { + color:#4070A0; + font-style:italic; +} +.s2 { + color:#4070A0; +} +.se { + color:#4070A0; + font-weight:bold; +} +.sh { + color:#4070A0; +} +.si { + color:#70A0D0; + font-style:italic; +} +.sx { + color:#C65D09; +} +.sr { + color:#235388; +} +.s1 { + color:#4070A0; +} +.ss { + color:#517918; +} +.bp { + color:#007020; +} +.vc { + color:#BB60D5; +} +.vg { + color:#BB60D5; +} +.vi { + color:#BB60D5; +} +.il { + color:#208050; +} diff --git a/output/theme/css/reset.css b/output/theme/css/reset.css new file mode 100644 index 0000000..10b3fde --- /dev/null +++ b/output/theme/css/reset.css @@ -0,0 +1,52 @@ +/* + Name: Reset Stylesheet + Description: Resets browser's default CSS + Author: Eric Meyer + Author URI: https://meyerweb.com/eric/tools/css/reset/ +*/ + +/* v1.0 | 20080212 */ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, font, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td { + background: transparent; + border: 0; + font-size: 100%; + margin: 0; + outline: 0; + padding: 0; + vertical-align: baseline; +} + +body {line-height: 1;} + +ol, ul {list-style: none;} + +blockquote, q {quotes: none;} + +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} + +/* remember to define focus styles! */ +:focus { + outline: 0; +} + +/* remember to highlight inserts somehow! */ +ins {text-decoration: none;} +del {text-decoration: line-through;} + +/* tables still need 'cellspacing="0"' in the markup */ +table { + border-collapse: collapse; + border-spacing: 0; +} diff --git a/output/theme/css/typogrify.css b/output/theme/css/typogrify.css new file mode 100644 index 0000000..3bae497 --- /dev/null +++ b/output/theme/css/typogrify.css @@ -0,0 +1,3 @@ +.caps {font-size:.92em;} +.amp {color:#666; font-size:1.05em;font-family:"Warnock Pro", "Goudy Old Style","Palatino","Book Antiqua",serif; font-style:italic;} +.dquo {margin-left:-.38em;} diff --git a/output/theme/css/wide.css b/output/theme/css/wide.css new file mode 100644 index 0000000..88fd59c --- /dev/null +++ b/output/theme/css/wide.css @@ -0,0 +1,48 @@ +@import url("main.css"); + +body { + font:1.3em/1.3 "Hoefler Text","Georgia",Georgia,serif,sans-serif; +} + +.post-info{ + display: none; +} + +#banner nav { + display: none; + -moz-border-radius: 0px; + margin-bottom: 20px; + overflow: hidden; + font-size: 1em; + background: #F5F4EF; +} + +#banner nav ul{ + padding-right: 50px; +} + +#banner nav li{ + float: right; + color: #000; +} + +#banner nav li a { + color: #000; +} + +#banner h1 { + margin-bottom: -18px; +} + +#featured, #extras { + padding: 50px; +} + +#featured { + padding-top: 20px; +} + +#extras { + padding-top: 0px; + padding-bottom: 0px; +} diff --git a/output/theme/fonts/Yanone_Kaffeesatz_400.eot b/output/theme/fonts/Yanone_Kaffeesatz_400.eot new file mode 100644 index 0000000..b3b90db Binary files /dev/null and b/output/theme/fonts/Yanone_Kaffeesatz_400.eot differ diff --git a/output/theme/fonts/Yanone_Kaffeesatz_400.svg b/output/theme/fonts/Yanone_Kaffeesatz_400.svg new file mode 100644 index 0000000..a69669b --- /dev/null +++ b/output/theme/fonts/Yanone_Kaffeesatz_400.svg @@ -0,0 +1,407 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/output/theme/fonts/Yanone_Kaffeesatz_400.ttf b/output/theme/fonts/Yanone_Kaffeesatz_400.ttf new file mode 100644 index 0000000..6f4feb0 Binary files /dev/null and b/output/theme/fonts/Yanone_Kaffeesatz_400.ttf differ diff --git a/output/theme/fonts/Yanone_Kaffeesatz_400.woff b/output/theme/fonts/Yanone_Kaffeesatz_400.woff new file mode 100644 index 0000000..ddccf76 Binary files /dev/null and b/output/theme/fonts/Yanone_Kaffeesatz_400.woff differ diff --git a/output/theme/fonts/Yanone_Kaffeesatz_400.woff2 b/output/theme/fonts/Yanone_Kaffeesatz_400.woff2 new file mode 100644 index 0000000..7b18f7e Binary files /dev/null and b/output/theme/fonts/Yanone_Kaffeesatz_400.woff2 differ diff --git a/output/theme/fonts/Yanone_Kaffeesatz_LICENSE.txt b/output/theme/fonts/Yanone_Kaffeesatz_LICENSE.txt new file mode 100644 index 0000000..c70bcad --- /dev/null +++ b/output/theme/fonts/Yanone_Kaffeesatz_LICENSE.txt @@ -0,0 +1,93 @@ +Copyright 2010 The Yanone Kaffeesatz Project Authors (https://github.com/alexeiva/yanone-kaffeesatz) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/output/theme/fonts/font.css b/output/theme/fonts/font.css new file mode 100644 index 0000000..cf62360 --- /dev/null +++ b/output/theme/fonts/font.css @@ -0,0 +1,12 @@ +@font-face { + font-family: 'Yanone Kaffeesatz'; + font-style: normal; + font-weight: 400; + src: + local('Yanone Kaffeesatz Regular'), + local('YanoneKaffeesatz-Regular'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLRTHiN2BPBirwIkMLKUspj4.woff */ + url('Yanone_Kaffeesatz_400.woff') format('woff'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLfGwxTS8d1Q9KiDNCMKLFUM.woff2 */ + url('Yanone_Kaffeesatz_400.woff2') format('woff2'); +} diff --git a/pelicanconf.py b/pelicanconf.py new file mode 100644 index 0000000..d626826 --- /dev/null +++ b/pelicanconf.py @@ -0,0 +1,35 @@ +AUTHOR = 'rama' +SITENAME = 'R.A.B.I.D.s' +SITEURL = "" + +PATH = "content" + +TIMEZONE = 'Europe/Dublin' + +DEFAULT_LANG = 'en' + +# Feed generation is usually not desired when developing +FEED_ALL_ATOM = None +CATEGORY_FEED_ATOM = None +TRANSLATION_FEED_ATOM = None +AUTHOR_FEED_ATOM = None +AUTHOR_FEED_RSS = None + +# Blogroll +LINKS = [ + ("Pelican", "https://getpelican.com/"), + ("Python.org", "https://www.python.org/"), + ("Jinja2", "https://palletsprojects.com/p/jinja/"), + ("You can modify those links in your config file", "#"), +] + +# Social widget +SOCIAL = [ + ("You can add links in your config file", "#"), + ("Another social link", "#"), +] + +DEFAULT_PAGINATION = 10 + +# Uncomment following line if you want document-relative URLs when developing +# RELATIVE_URLS = True diff --git a/publishconf.py b/publishconf.py new file mode 100644 index 0000000..569aa39 --- /dev/null +++ b/publishconf.py @@ -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://rabids.twojastara.eu" +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 = "" diff --git a/tasks.py b/tasks.py new file mode 100644 index 0000000..bed1437 --- /dev/null +++ b/tasks.py @@ -0,0 +1,145 @@ +import os +import shlex +import shutil +import sys + +from invoke import task +from invoke.main import program +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))