From daaf7d4350bafc71f25ecde6d03a24b59ed49c50 Mon Sep 17 00:00:00 2001 From: davidovski Date: Thu, 26 Aug 2021 04:15:22 +0100 Subject: [PATCH] initial commit --- build.py | 107 ++++++++++++++++++++++++++++ const.py | 7 ++ html/blog/entries/blarg.html | 11 +++ html/blog/entries/test my blog.html | 11 +++ html/blog/entries/test.html | 11 +++ html/blog/index.html | 39 ++++++++++ html/blog/src/blarg.md | 3 + html/blog/src/test my blog.md | 5 ++ html/blog/src/test.md | 3 + html/entries/test.html | 11 +++ html/entries/welcome.html | 46 ++++++++++++ html/index.html | 53 ++++++++++++++ html/mononoki.woff | Bin 0 -> 42208 bytes html/rss.xml | 19 +++++ html/src/welcome.md | 7 ++ html/style.css | 83 +++++++++++++++++++++ new.sh | 13 ++++ src/welcome.md | 7 ++ sync.sh | 7 ++ templates/index.html | 46 ++++++++++++ templates/item.xml | 6 ++ templates/page.html | 46 ++++++++++++ templates/rss.xml | 10 +++ templates/summary.html | 4 ++ 24 files changed, 555 insertions(+) create mode 100644 build.py create mode 100644 const.py create mode 100644 html/blog/entries/blarg.html create mode 100644 html/blog/entries/test my blog.html create mode 100644 html/blog/entries/test.html create mode 100644 html/blog/index.html create mode 100644 html/blog/src/blarg.md create mode 100644 html/blog/src/test my blog.md create mode 100644 html/blog/src/test.md create mode 100644 html/entries/test.html create mode 100644 html/entries/welcome.html create mode 100644 html/index.html create mode 100644 html/mononoki.woff create mode 100644 html/rss.xml create mode 100644 html/src/welcome.md create mode 100644 html/style.css create mode 100755 new.sh create mode 100644 src/welcome.md create mode 100755 sync.sh create mode 100644 templates/index.html create mode 100644 templates/item.xml create mode 100644 templates/page.html create mode 100644 templates/rss.xml create mode 100644 templates/summary.html diff --git a/build.py b/build.py new file mode 100644 index 0000000..5e9a0c3 --- /dev/null +++ b/build.py @@ -0,0 +1,107 @@ +import markdown +import os +import time +import shutil + +from const import * + +def getTemplateHTML(name): + html = "" + with open(os.path.join(templates, name), "r") as file: + html = file.read(); + return html + +def listPages(): + return [ + (lambda path: + (lambda content: + (lambda timestamp: + (lambda name: { + "source_file" : path, + "source_content" : content, + "html" : markdown.markdown(content), + "timestamp" : timestamp, + "date": time.strftime(date_format, time.localtime(timestamp)), + "name" : name, + "url" : f"entries/{name}.html" + })(".".join(p.split(".")[:-1])) + )(os.stat(path).st_ctime) + )(open(path, "r").read()) + )(os.path.join(source, p)) for p in os.listdir(source) + ] + +def formatEntry(content, page): + return content.replace("%date%", page["date"])\ + .replace("%name%", page["name"])\ + .replace("%time%", str(page["timestamp"]))\ + .replace("%source%", site_index + page["source_file"])\ + .replace("%url%", site_index + page["url"]) + +def make(): + + try: + os.makedirs(os.path.join(dist, "entries")) + except: + print("Already have content") + shutil.rmtree(os.path.join(dist, "src")) + shutil.rmtree(os.path.join(dist, "images")) + shutil.copytree(source, os.path.join(dist, "src")) + shutil.copytree(images, os.path.join(dist, "images")) + + pages = listPages() + + summary_templ = getTemplateHTML("summary.html") + + summariesHTML = "\n".join( + [ + formatEntry(summary_templ, page) + .replace( + "%content%", + "\n".join(page["html"].split("\n")[:summary_max]) + ) + + for page in pages + ] + ) + + entry_templ = getTemplateHTML("page.html") + + for page in pages: + with open(os.path.join(dist, page["url"]), "w") as entry: + entry.write( + formatEntry( + entry_templ, + page + ) + .replace("%content%", page["html"]) + ) + + + + index_templ = getTemplateHTML("index.html") + + with open(os.path.join(dist, "index.html"), "w") as index: + index.write( + index_templ.replace("%entries%", summariesHTML) + ) + + + item_templ = getTemplateHTML("item.xml") + rss_templ = getTemplateHTML("rss.xml") + itemsXML = "\n".join( + [ + formatEntry(item_templ, page).replace("%content%", page["html"]) + for page in pages + ] + ) + + with open(os.path.join(dist, "rss.xml"), "w") as index: + index.write( + rss_templ.replace("%items%", itemsXML) + ) + + print(f"built in {len(pages)} pages") +make() + + + diff --git a/const.py b/const.py new file mode 100644 index 0000000..07eeef6 --- /dev/null +++ b/const.py @@ -0,0 +1,7 @@ +site_index = "https://davidovski.xyz/" +images = "images" +date_format = "%a, %d %b %Y %H:%M:%S" +source = "src" +templates = "templates" +dist = "html" +summary_max = 10 diff --git a/html/blog/entries/blarg.html b/html/blog/entries/blarg.html new file mode 100644 index 0000000..2b8b489 --- /dev/null +++ b/html/blog/entries/blarg.html @@ -0,0 +1,11 @@ + + + + + blarg + + +

blarg

+

blarg blarg test haha

+ + diff --git a/html/blog/entries/test my blog.html b/html/blog/entries/test my blog.html new file mode 100644 index 0000000..6af39a4 --- /dev/null +++ b/html/blog/entries/test my blog.html @@ -0,0 +1,11 @@ + + + + + test my blog + + +

test my blog

+

this is an entry woooooooooooow

+ + diff --git a/html/blog/entries/test.html b/html/blog/entries/test.html new file mode 100644 index 0000000..94642ad --- /dev/null +++ b/html/blog/entries/test.html @@ -0,0 +1,11 @@ + + + + + test + + +

test

+

test testing lol

+ + diff --git a/html/blog/index.html b/html/blog/index.html new file mode 100644 index 0000000..1c92525 --- /dev/null +++ b/html/blog/index.html @@ -0,0 +1,39 @@ + + + + + + + +

blog test

+
+
+

test

+

test testing lol

+ + ... + more +

Date: Sun, 08 Aug 2021

+
+ +
+

blarg

+

blarg blarg test haha

+ + ... + more +

Date: Sun, 08 Aug 2021

+
+ +
+

test my blog

+

this is an entry woooooooooooow

+ + ... + more +

Date: Sun, 08 Aug 2021

+
+ +
+ + diff --git a/html/blog/src/blarg.md b/html/blog/src/blarg.md new file mode 100644 index 0000000..8ba38dd --- /dev/null +++ b/html/blog/src/blarg.md @@ -0,0 +1,3 @@ +# blarg + +blarg blarg test haha diff --git a/html/blog/src/test my blog.md b/html/blog/src/test my blog.md new file mode 100644 index 0000000..d4b4bb8 --- /dev/null +++ b/html/blog/src/test my blog.md @@ -0,0 +1,5 @@ +# test my blog + + +this is an entry woooooooooooow + diff --git a/html/blog/src/test.md b/html/blog/src/test.md new file mode 100644 index 0000000..cef0e58 --- /dev/null +++ b/html/blog/src/test.md @@ -0,0 +1,3 @@ +# test + +test testing lol diff --git a/html/entries/test.html b/html/entries/test.html new file mode 100644 index 0000000..cf4cbac --- /dev/null +++ b/html/entries/test.html @@ -0,0 +1,11 @@ + + + + + test + + +

test

+

hi test haha

+ + diff --git a/html/entries/welcome.html b/html/entries/welcome.html new file mode 100644 index 0000000..666cc01 --- /dev/null +++ b/html/entries/welcome.html @@ -0,0 +1,46 @@ + + + + + + + davidovski.xyz + + +
+
+ davidovski.xyz +
+ +
+ +
+

welcome to my site

+
+
+ %entries% +
+
+ + + diff --git a/html/index.html b/html/index.html new file mode 100644 index 0000000..4421c62 --- /dev/null +++ b/html/index.html @@ -0,0 +1,53 @@ + + + + + + + davidovski.xyz + + +
+
+ davidovski.xyz +
+ +
+ +
+

welcome to my site

+
+
+
+
Sun, 08 Aug 2021 04:23:07 🔗
+

welcome. i decided to turn this wepage into blog-style site... i havent got a topic or anything, so expect either: quality tutorials and very interesting techy things; or just random shitposts or rambles about things.

+

originally i was going to make this blog on b.davidovski.xyz using nanoblogger (you might be able to still see the start of that) but nb itself seemed quite dead, and i couldn't really be asked to customise it all myself. So i made my own script to generate this static site: kblg. Right now its probably just the bare minimum needed for this, but I am planning to add more things to it as I go along (including rss, if anyone would be interested?)

+

anyway thats all for now, cya

+

~davidovski

+
+ +
+
+ + + diff --git a/html/mononoki.woff b/html/mononoki.woff new file mode 100644 index 0000000000000000000000000000000000000000..939ec2a12e498ea07f6c4f40b15a20d78ae9c1b3 GIT binary patch literal 42208 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 + + + + davidovski + https://davidovski.xyz + davidovski's site + + welcome + https://davidovski.xyz/https://davidovski.xyz/entries/welcome.html + Sun, 08 Aug 2021 04:23:07 + welcome. i decided to turn this wepage into blog-style site... i havent got a topic or anything, so expect either: quality tutorials and very interesting techy things; or just random shitposts or rambles about things.

+

originally i was going to make this blog on b.davidovski.xyz using nanoblogger (you might be able to still see the start of that) but nb itself seemed quite dead, and i couldn't really be asked to customise it all myself. So i made my own script to generate this static site: kblg. Right now its probably just the bare minimum needed for this, but I am planning to add more things to it as I go along (including rss, if anyone would be interested?)

+

anyway thats all for now, cya

+

~davidovski

]]> + + + + diff --git a/html/src/welcome.md b/html/src/welcome.md new file mode 100644 index 0000000..5c8500c --- /dev/null +++ b/html/src/welcome.md @@ -0,0 +1,7 @@ +welcome. i decided to turn this wepage into blog-style site... i havent got a topic or anything, so expect either: quality tutorials and very interesting techy things; or just random shitposts or rambles about things. + +originally i was going to make this blog on [b.davidovski.xyz](https://b.davidovski.xyz) using [nanoblogger](http://nanoblogger.sourceforge.net/) (you might be able to still see the start of that) but nb itself seemed quite dead, and i couldn't really be asked to customise it all myself. So i made my own script to generate this static site: [kblg](https://github.com/davidovski/kblg/). Right now its probably just the bare minimum needed for this, but I am planning to add more things to it as I go along (including rss, if anyone would be interested?) + +anyway thats all for now, cya + +~davidovski diff --git a/html/style.css b/html/style.css new file mode 100644 index 0000000..4221417 --- /dev/null +++ b/html/style.css @@ -0,0 +1,83 @@ +:root { + --fg: #f58F44; + --black: #707880; + --red: #cc6666; + --green: #b5bd68; + --yellow: #f0c674; + --blue: #5f819d; + --magenta: #b294bb; + --cyan: #b4d6d1; + --white: #c5c8c6; + --bg: #191919; + --line: 2px; +} + + +@font-face { + font-family: mononoki; + src: url(mononoki.woff); +} + +body { + background-color: var(--bg); + color: var(--fg); + font-family: mononoki; + font-size: 16px +} + +a { + color: var(--blue); + text-decoration: none; +} + +.main { + margin-top: 0; + margin-bottom: 0; + margin-left: 20%; + margin-right: 20%; + + padding: 2%; + height: 100%; + + border-left: var(--line) solid var(--fg); + border-right: var(--line) solid var(--fg); + border-bottom: var(--line) solid var(--fg); +} + +.header { + text-align: center; +} + +.links { + text-align: center justify; + text-justify: inter-word; + #white-space: nowrap; +} + +hr { + width: 100%; + border: 0; + border-bottom: var(--line) solid var(--fg); +} +.title { + font-size: 40px; + color: var(--fg); +} +.small { + font-size: 9px; + padding: 0; + color: var(--black); +} + +a.red { + color: --var(red); +} + +a.green { + color: --var(green); +} + +a.blue { + color: --var(blue); +} + diff --git a/new.sh b/new.sh new file mode 100755 index 0000000..9fce8a3 --- /dev/null +++ b/new.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +EDITOR=nvim +TEMPFILE=/tmp/blog_entry.md + +$EDITOR $TEMPFILE + +NAME=src/$(head -1 $TEMPFILE | cut -d" " -f2-).md + +cp $TEMPFILE "$NAME" +rm $TEMPFILE + +./sync.sh diff --git a/src/welcome.md b/src/welcome.md new file mode 100644 index 0000000..5c8500c --- /dev/null +++ b/src/welcome.md @@ -0,0 +1,7 @@ +welcome. i decided to turn this wepage into blog-style site... i havent got a topic or anything, so expect either: quality tutorials and very interesting techy things; or just random shitposts or rambles about things. + +originally i was going to make this blog on [b.davidovski.xyz](https://b.davidovski.xyz) using [nanoblogger](http://nanoblogger.sourceforge.net/) (you might be able to still see the start of that) but nb itself seemed quite dead, and i couldn't really be asked to customise it all myself. So i made my own script to generate this static site: [kblg](https://github.com/davidovski/kblg/). Right now its probably just the bare minimum needed for this, but I am planning to add more things to it as I go along (including rss, if anyone would be interested?) + +anyway thats all for now, cya + +~davidovski diff --git a/sync.sh b/sync.sh new file mode 100755 index 0000000..a161596 --- /dev/null +++ b/sync.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +cp templates/index.html templates/page.html + +python build.py +rsync -Lta --no-perms --no-owner --no-group --delete --exclude=sync.sh -vz -e ssh ./html/ oracle:/srv/davidovski/html + diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..666cc01 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,46 @@ + + + + + + + davidovski.xyz + + +
+
+ davidovski.xyz +
+ +
+ +
+

welcome to my site

+
+
+ %entries% +
+
+ + + diff --git a/templates/item.xml b/templates/item.xml new file mode 100644 index 0000000..031cd35 --- /dev/null +++ b/templates/item.xml @@ -0,0 +1,6 @@ + + %name% + https://davidovski.xyz/%url% + %date% + + diff --git a/templates/page.html b/templates/page.html new file mode 100644 index 0000000..666cc01 --- /dev/null +++ b/templates/page.html @@ -0,0 +1,46 @@ + + + + + + + davidovski.xyz + + +
+
+ davidovski.xyz +
+ +
+ +
+

welcome to my site

+
+
+ %entries% +
+
+ + + diff --git a/templates/rss.xml b/templates/rss.xml new file mode 100644 index 0000000..58e206d --- /dev/null +++ b/templates/rss.xml @@ -0,0 +1,10 @@ + + + + + davidovski + https://davidovski.xyz + davidovski's site + %items% + + diff --git a/templates/summary.html b/templates/summary.html new file mode 100644 index 0000000..9f226af --- /dev/null +++ b/templates/summary.html @@ -0,0 +1,4 @@ +
+
%date% 🔗
+ %content% +