From 7dd1892a360b4fb5bd3076786b4e970083a10740 Mon Sep 17 00:00:00 2001 From: rgb Date: Thu, 20 Feb 2025 21:28:08 +0000 Subject: [PATCH] add stuff --- .gitignore | 1 + README.md | 8 ++- assets/css/styles.css | 36 +++++++++++++ assets/img/buttons/amd_powered.gif | Bin 0 -> 3101 bytes compile.py | 84 +++++++++++++++++++++++++++++ layouts/default.html | 17 ++++++ requirements.txt | 4 ++ site/index.md | 18 +++++++ 8 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 assets/css/styles.css create mode 100644 assets/img/buttons/amd_powered.gif create mode 100644 compile.py create mode 100644 layouts/default.html create mode 100644 requirements.txt create mode 100644 site/index.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7773828 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +dist/ \ No newline at end of file diff --git a/README.md b/README.md index 940a28a..cf2c994 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,9 @@ # cl-website -colourlabs.net \ No newline at end of file +the code for colourlabs.net + +## build + +```sh +python compile.py +``` \ No newline at end of file diff --git a/assets/css/styles.css b/assets/css/styles.css new file mode 100644 index 0000000..b5bc362 --- /dev/null +++ b/assets/css/styles.css @@ -0,0 +1,36 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + background-color: #fff; + font-family: "Times New Roman"; +} + +.container { + padding: 17px; + line-height: 1.6; +} + +.title { + text-decoration: underline; + font-size: 20px; + font-weight: bold; +} + +.content { + padding-left: 10px; +} + +ul { + padding-left: 30px; +} + +.buttons { + display: flex; + flex-direction: row; + gap: 5px; + padding-top: 10px; +} \ No newline at end of file diff --git a/assets/img/buttons/amd_powered.gif b/assets/img/buttons/amd_powered.gif new file mode 100644 index 0000000000000000000000000000000000000000..ecd0402f66270b25c95cd1efd9891d3629898164 GIT binary patch literal 3101 zcmZveX;f3!8ir4jlL^Sl$w?q!6~hUG0#cw>5s)&IU_ilAZ~%h=As8fy31ff+!jKSR z7$QSuo~bC4s1<2w3plnG^*Sp>YV~ScTWf3euFFN+-qqf9_pkk9@3r=`zxVyVH;fzV zwIMMEumygG0o%j5@uNoZRQJrevqK{z+OeMMuTBANseYr{`sPFZa~H=ST)X@1$))e^ zKYjMo;^N{iK3}7&5KAQU^YgyGzAy~4SS(;^skQBO$7i@cH z`&(!qhqIr?%#!1*;2jR)i~v5$U{I|P*osLuqz6YEz_M%@T%WN%#rFUMvnq zy$m&zT@++#NjB;;421(p^lYn!&h+infq^V4q#t4zv(vKZEzpt8d(kt!H_NZw1DW>frB}p z7AvEUppKVNJFAMWcejfZE*aXyr4;MA?N`H8GnS{rG!b(FGU@g10t~tgE5;EiQS_OO zzdhIBJIM)B2SByzZQFbbrqkc`UMXbl|M)yBS90IBXJ&fGovBGBwaV?D;bQ$v!!4q; z>;uu&hT^q7U`+48(Q6N`7tZA0u!;W_fA`8}sobA$Qlj0*e|5hZAN*v)=&Bv)y-6H# z(MD`Y;I8Dyl(`jLcWUvEH_I=(K^HC@Lvs8i?$;v&x^^GpTUnSA%An3}IQ@abIGsda zP}UGvjFRd~HslOm*RB0W>itTu2fg?8XvrH<;Ymw+dLybJU}=kAXdTuG1kJogZ;|=9 z*!4?Ue8qya-TCszW36J6sS4pJH5d-y2mz`Pr2`=%$=I52S99a@;OU6>KRl|r?$z#( zG8~o%YUuO8dOrMZ*aZNA$&5$_!YvTfJc`tjYC4RBY%pi&vL&lw7^EGXtpF_f z97U12_7i=9Du+D|W~J(7@m|c-d2C`E>pIc9<<9qfm=FYp03;Zp!I&K|4M8w?*tHZ} zWz?k*D)C5$PHK*W(-1PnuM&ho2tDHa9CieRwC&wc?~tuZJ=)E*C5?r1j)qZXic7Or#~4Ar^nxii)b z^Sa$EDFgRsyIE2Ocl@@`>BQ7DCg_}OUELC56tE;?JRPLm~o-+(FM2zf_ z$S=ZANr;o_CaGAxbE<6qtp2z{hMq$!bQ85naXpq^(_ zr`r1NG&wpYd8=kp%!(yq@`USM2_QcoPjXFg-G=6tDRW~D5waaAVtTY#S*XK-QAB|; ze~Y40$m{wbFsNpKJs?^kI))#@okBj!C7jG3JPgF7E1Hm;k@~R-Fcxb_MDXt=#43uS zkHwDPNE1$&)eBnjS zBlp}-Y(t{<$q@*`3b#=y-U|OPi}c`_y8chO&yP_@f{xz8;{QzZy2#0`m-p1bt$fx^l{$5-Oq79lDpo!`09ecrSJWy zNI_2KKkF!=9$v#97bX?A^?r=*;`D3p_!ktZ0M9G5!q$8H7S>uDhXYJE1xTjvw=GsiBu_AK8SBmit&oYy2Ik&%Rx~WMql$tv{n|+n| zKR+JxdtZE=GPvHU=ML|^Ke1`Ki)_F;TW_woM>GMuIrdmRM=2DB_r>X$ys^QnGVhjk zt6Z&WIP^qcn+OtaMqtQnU11>;_%>e_lqkMF$YBf;@cDS(0xX6ckg$s%?f}z3IGJof z5IU}AX*58Mlt!|ghJfAXhMe_qK0@~HGLo@m1cT7D6+xAH`+-JL4N9X?yT@Q~+M+QP zN14VQ?HeQz~b*YQ*16OK())N1zQp0fyy`@%pY&(LOx}^YiEz20fgCgNn6>QBy5rhg?=YidZxa3@1 zAGHd{Q}YU;uKKK;@ji_Gf8TNWZ<%#x=vogb3j0LU`vVQDJeX&ndYb5g?WBayw6kBBHVT;9 zh26zTYm5Q&!>8hGLFuyS&N$R~hP^3h7pq#UUeNDc5HICb&;78FEL=zZZ(yy=4A@)= z7MFtSw4q5pK%-^FQe1^f_Ar!8c0u@3TCLuhS((?%PqsSPDvZ@x_DZSHiNm~(LZ4!v zz6rDyt%NMqg={TUtx3(o#H_%!P?-H(#{6`p|r;PW5j CK$5)x literal 0 HcmV?d00001 diff --git a/compile.py b/compile.py new file mode 100644 index 0000000..c2acfe1 --- /dev/null +++ b/compile.py @@ -0,0 +1,84 @@ +# compiles the site +import markdown +import yaml +import re +import os +import datetime +import pytz +import socket +import shutil + +from jinja2 import Template + +def extract_metadata(md_content): + match = re.match(r"^---\n(.*?)\n---\n(.*)", md_content, re.DOTALL) + if match: + metadata, content = match.groups() + metadata_dict = yaml.safe_load(metadata) + return metadata_dict, content + return {}, md_content + +def get_template_filename(metadata): + layout = metadata.get("layout", "default") # default to 'default' + return f"{layout}.html" + +def convert_md_to_html(md_file, template): + with open(md_file, "r", encoding="utf-8") as f: + md_content = f.read() + + # extract metadata + metadata, md_body = extract_metadata(md_content) + + # convert md to html + html_content = markdown.markdown(md_body) + + # render the template + rendered_html = template.render( + title=metadata.get("title", "untitled"), + content=html_content + ) + + tz = pytz.timezone('UTC') + build_date = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S %Z%z") + hostname = socket.gethostname() + rendered_html += f"\n" + + return rendered_html + +def compile_site(): + if not os.path.exists("dist/"): + os.makedirs("dist/") + + for filename in os.listdir("site/"): + if filename.endswith(".md"): + md_path = os.path.join("site/", filename) + + with open(md_path, "r", encoding="utf-8") as f: + md_content = f.read() + metadata, _ = extract_metadata(md_content) + + template_filename = get_template_filename(metadata) + template_path = os.path.join("layouts/", template_filename) + + with open(template_path, "r", encoding="utf-8") as f: + template = Template(f.read()) + + html_filename = filename.replace(".md", ".html") + html_path = os.path.join("dist/", html_filename) + html_content = convert_md_to_html(md_path, template) + + with open(html_path, "w", encoding="utf-8") as f: + f.write(html_content) + + print(f"converted {md_path} -> {html_path} using template {template_filename}") + + assets_source = "assets" + assets_dest = "dist/" + "assets" + if os.path.exists(assets_source): + shutil.copytree(assets_source, assets_dest, dirs_exist_ok=True) + print(f"copied assets from {assets_source} to {assets_dest}") + else: + print(f"no assets folder found at {assets_source}") + +if __name__ == "__main__": + compile_site() \ No newline at end of file diff --git a/layouts/default.html b/layouts/default.html new file mode 100644 index 0000000..ec8380c --- /dev/null +++ b/layouts/default.html @@ -0,0 +1,17 @@ + + + + + + {{ title }} + + + +
+ colourlabs +
+ {{ content }} +
+
+ + \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..047717d --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +Jinja2==3.1.5 +Markdown==3.7 +pytz==2025.1 +PyYAML==6.0.2 diff --git a/site/index.md b/site/index.md new file mode 100644 index 0000000..a5f6a25 --- /dev/null +++ b/site/index.md @@ -0,0 +1,18 @@ +--- +title: colourlabs +--- + +a place where we can dump stuff we like to play around with + +#### services + +- [git](https://git.colourlabs.net) - a forgejo instance, not being used for anything right now +- [minecraft server](https://mc.colourlabs.net) - our friends only minecraft server (version: 1.21.4) + +#### blog + +nothing to see here + +
+ Powered by AMD +
\ No newline at end of file