summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--BUGS3
-rw-r--r--GNUmakefile30
-rw-r--r--README.md8
-rw-r--r--TODO8
-rw-r--r--archive/archive.md10
-rw-r--r--archive/dmenu-farajli-5.3.tar.gzbin15497 -> 0 bytes
-rw-r--r--archive/dwm-farajli-6.5.tar.gzbin25971 -> 0 bytes
-rw-r--r--archive/liberation_mono.zipbin306521 -> 0 bytes
-rw-r--r--archive/slstatus-farajli-1.0.tar.gzbin17329 -> 0 bytes
-rw-r--r--archive/st-farajli-0.9.2.tar.gzbin41259 -> 0 bytes
-rwxr-xr-xbuild-page44
-rw-r--r--content/archive/index.md60
-rw-r--r--content/home/index.md32
-rw-r--r--content/keys/index.md24
-rw-r--r--content/posts/coding_standards.md (renamed from posts/coding_standards.md)11
-rw-r--r--content/posts/gentoo.md (renamed from posts/gentoo.md)9
-rw-r--r--content/posts/index.md20
-rw-r--r--content/posts/nophone.md (renamed from posts/nophone.md)10
-rw-r--r--content/posts/selfhostmail.md (renamed from posts/selfhostmail.md)9
-rw-r--r--content/posts/software.md (renamed from posts/software.md)10
-rw-r--r--content/posts/website_created.md (renamed from posts/website_created.md)10
-rw-r--r--home/index.md22
-rw-r--r--home/pgp.md19
-rw-r--r--index_pages.mk5
-rw-r--r--posts/2024_new_year.md4
-rw-r--r--posts/posts.md10
-rw-r--r--public/archive/slcf.tar.gz (renamed from archive/slcf.tar.gz)bin13719 -> 13719 bytes
-rw-r--r--public/favicon.ico (renamed from favicon.ico)bin700 -> 700 bytes
-rw-r--r--public/keys/id_ed25519.pub (renamed from home/ssh.md)4
-rw-r--r--public/keys/pubkey.asc86
-rw-r--r--public/style.css (renamed from style.css)21
-rw-r--r--scripts/__pycache__/boiler.cpython-313.pycbin0 -> 2286 bytes
-rw-r--r--scripts/__pycache__/parse_frontmatter.cpython-313.pycbin0 -> 999 bytes
-rw-r--r--scripts/boiler.py55
-rwxr-xr-xscripts/build_page45
-rwxr-xr-xscripts/filter_proper_md14
-rwxr-xr-xscripts/generate_post_index35
-rw-r--r--scripts/parse_frontmatter.py19
-rw-r--r--static/archive/JetBrainsMono.tar.gzbin0 -> 118032066 bytes
-rw-r--r--static/archive/LiberationMono.tar.gzbin0 -> 306533 bytes
-rw-r--r--static/archive/dmenu_farajli-5.3.0.tar.gzbin0 -> 16811 bytes
-rw-r--r--static/archive/dwm_farajli-6.5.0.tar.gzbin0 -> 25480 bytes
-rw-r--r--static/archive/slcf.tar.gzbin0 -> 13719 bytes
-rw-r--r--static/archive/slstatus_farajli-1.0.0.tar.gzbin0 -> 17596 bytes
-rw-r--r--static/archive/st_farajli-0.9.2.0.tar.gzbin0 -> 43011 bytes
-rw-r--r--static/favicon.icobin0 -> 700 bytes
-rw-r--r--static/keys/id_ed25519.pub1
-rw-r--r--static/keys/pubkey.asc86
-rw-r--r--static/style.css88
50 files changed, 663 insertions, 153 deletions
diff --git a/.gitignore b/.gitignore
index 0b21e5f..8f1be87 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,3 @@
-*.html
+__pycache__
install.mk
-output/
+public/
diff --git a/BUGS b/BUGS
deleted file mode 100644
index 9e6d90d..0000000
--- a/BUGS
+++ /dev/null
@@ -1,3 +0,0 @@
-- lists on mobile view has no margin
-+ Makefile html:md dependency is broken with the introduction of out/ directory
-+ Non-markdown files are not placed in the site (CV, Archive files, etc.)
diff --git a/GNUmakefile b/GNUmakefile
index 26ca3e9..0d49d96 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -1,17 +1,25 @@
-MARKDOWN = $(shell find . -name '*.md')
-HTML = $(patsubst ./%.md, %.html, $(MARKDOWN))
+MD = $(shell find content/ -name '*.md')
+PROPERMD = $(shell scripts/filter_proper_md $(MD))
+HTML = $(patsubst content/%.md, public/%.html, $(PROPERMD))
+STATICASSETS = $(shell find static -type f)
+PUBLICASSETS = $(patsubst static/%, public/%, $(STATICASSETS))
-all: $(HTML)
+# Calling make is used for making sure that index pages are build first
+all:
+ $(MAKE) -f index_pages.mk
+ $(MAKE) pages
-%.html: %.md build-page
- sh build-page $< > $@
+pages: $(HTML) $(PUBLICASSETS)
-output/: $(HTML)
- echo $? | xargs -n 1 dirname | xargs -I _ mkdir -p $@_
- echo $? | xargs -n 1 | xargs -I _ cp _ $@_
- cp favicon.ico style.css $@
+public/%.html: content/%.md
+ mkdir -p $$(dirname $@)
+ scripts/build_page $< > $@
+
+$(PUBLICASSETS): public/%: static/%
+ mkdir -p $$(dirname $@)
+ cp $< $@
clean:
- rm -rf $(HTML) output/
+ rm -rf public
-.PHONY: all clean
+.PHONY: all clean pages
diff --git a/README.md b/README.md
deleted file mode 100644
index 124c54e..0000000
--- a/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Simple website for personal usage
-
-## Building
-Use [GNU make](https://www.gnu.org/software/make/).
-
-``` shell
-make output/
-```
diff --git a/TODO b/TODO
deleted file mode 100644
index 6f73381..0000000
--- a/TODO
+++ /dev/null
@@ -1,8 +0,0 @@
-+ build-page: move html output to a seperate directory
-- store fonts on the website itself rather than using google fonts
-- proper handling of posts
-- add a post about coding styles
-+ add pgp key
-- add how to contact me (pgp signed mail)
-- add copyright link
-+ style.css: needs to be reorganised.
diff --git a/archive/archive.md b/archive/archive.md
deleted file mode 100644
index c27d9f2..0000000
--- a/archive/archive.md
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- Title: Archive -->
-
-<!-- &nbsp; means space -->
-
-&nbsp; [slcf.tar.gz](/archive/slcf.tar.gz)
-&nbsp; [dwm-farajli-6.5.tar.gz](/archive/dwm-farajli-6.5.tar.gz)
-&nbsp; [st-farajli-0.9.2.tar.gz](/archive/st-farajli-0.9.2.tar.gz)
-&nbsp; [dmenu-farajli-5.3.tar.gz](/archive/dmenu-farajli-5.3.tar.gz)
-&nbsp; [slstatus-farajli-1.0.tar.gz](/archive/slstatus-farajli-1.0.tar.gz)
-&nbsp; [liberation_mono.zip](/archive/liberation_mono.zip)
diff --git a/archive/dmenu-farajli-5.3.tar.gz b/archive/dmenu-farajli-5.3.tar.gz
deleted file mode 100644
index 5748923..0000000
--- a/archive/dmenu-farajli-5.3.tar.gz
+++ /dev/null
Binary files differ
diff --git a/archive/dwm-farajli-6.5.tar.gz b/archive/dwm-farajli-6.5.tar.gz
deleted file mode 100644
index 29f4828..0000000
--- a/archive/dwm-farajli-6.5.tar.gz
+++ /dev/null
Binary files differ
diff --git a/archive/liberation_mono.zip b/archive/liberation_mono.zip
deleted file mode 100644
index 78d2afa..0000000
--- a/archive/liberation_mono.zip
+++ /dev/null
Binary files differ
diff --git a/archive/slstatus-farajli-1.0.tar.gz b/archive/slstatus-farajli-1.0.tar.gz
deleted file mode 100644
index f841992..0000000
--- a/archive/slstatus-farajli-1.0.tar.gz
+++ /dev/null
Binary files differ
diff --git a/archive/st-farajli-0.9.2.tar.gz b/archive/st-farajli-0.9.2.tar.gz
deleted file mode 100644
index 3ee5e2a..0000000
--- a/archive/st-farajli-0.9.2.tar.gz
+++ /dev/null
Binary files differ
diff --git a/build-page b/build-page
deleted file mode 100755
index 37763ae..0000000
--- a/build-page
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/sh
-
-filename="${1}"
-title=$(< "${filename}" head -n1 | sed 's/<!-- Title: //; s/-->//')
-
-cat << EOF
-<!DOCTYPE html>
-<html lang="en">
-<head>
-<meta charset="UTF-8">
- <meta name="viewport" content="width=1024">
- <link rel='stylesheet' type='text/css' href="/style.css">
- <link rel="icon" type="image/x-icon" href="/favicon.ico">
- <title>${title}</title>
-</head>
-<body>
- <table id="bar">
- <tr>
- <td id='header-name'>Suleyman Farajli</td>
- <td id='quote'></td>
- </tr>
- </table>
- <script>
- let quotes = ["Uncensored", "Oh mamma mia!", "Memento Mori!", "Oh là là!", "C'est légal parce que je le veux", "Sweet Dreams Are Made of This"];
- let randomQuote = quotes[Math.floor(Math.random() * quotes.length)];
- document.getElementById("quote").innerText = randomQuote;
- </script>
-
- <hr class="separator">
-
-<div class="menu">
- <a class="menu_item" href="/home/index.html">Home/</a>
- <a class="menu_item" href="/posts/posts.html">Posts/</a>
- <a class="menu_item" href="/archive/archive.html">Archive/</a>
- <a class="menu_item right_menu_item" href="https://git.farajli.net">Git</a>
-</div>
-<div class="text">
- $(sed '1 s/<!--.*-->//' "${filename}" | smu)
-</div>
-<p id="copyleft"><br>copyleft (c) 2024-2025 Suleyman Farajli</p>
-
-</body>
-</html>
-EOF
diff --git a/content/archive/index.md b/content/archive/index.md
new file mode 100644
index 0000000..bc3c1e6
--- /dev/null
+++ b/content/archive/index.md
@@ -0,0 +1,60 @@
+---
+title: "Archive"
+slug: "archive"
+---
+
+This archive includes both my own project and third-party software that I use.
+
+## My Projects
+
+## SLCF
+
+- Description: Suleyman's Linux Configuration Files.
+- Source: https://git.farajli.net/slcf
+- Downloads
+ - [slcf.tar.gz](/archive/slcf.tar.gz)
+
+### DWM
+
+- Description: My build of Dynamic Window Manager.
+- Source: https://git.farajli.net/dwm
+- Downloads
+ - [dwm_farajli-6.5.0.tar.gz](/archive/dwm_farajli-6.5.0.tar.gz)
+
+### ST
+
+- Description: My build of Simple Terminal.
+- Source: https://git.farajli.net/st
+- Downloads
+ - [st_farajli-0.9.2.0.tar.gz](/archive/st_farajli-0.9.2.0.tar.gz)
+
+### DMenu
+
+- Description: My build of Dynamic Menu.
+- Source: https://git.farajli.net/dmenu
+- Downloads
+ - [dmenu_farajli-5.3.0.tar.gz](/archive/dmenu_farajli-5.3.0.tar.gz)
+
+
+### SLStatus
+
+- Description: My build of SLStatus.
+- Source: https://git.farajli.net/slstatus
+- Downloads
+ - [dmenu_farajli-5.3.0.tar.gz](/archive/dmenu_farajli-5.3.0.tar.gz)
+
+
+## Third-Party Software
+
+### Liberation Mono
+- Description: The font I use in my desktop environment.
+- Homepage: https://www.dafont.com/liberation-mono.font
+- Mirror:
+ - [LiberationMono.tar.gz](/archive/LiberationMono.tar.gz)
+
+### Jetbrains Mono Nerd Font
+- Description: The font required by neo-tree nvim plugin.
+- Homepage: https://www.nerdfonts.com/
+- Mirror:
+ - [JetBrainsMono.tar.gz](/archive/JetBrainsMono.tar.gz)
+ (2024-08-15)
diff --git a/content/home/index.md b/content/home/index.md
new file mode 100644
index 0000000..88ad694
--- /dev/null
+++ b/content/home/index.md
@@ -0,0 +1,32 @@
+---
+title: "Home"
+slug: "home"
+css: |
+ time {
+ font-size: 16px;
+ color: #bbbbbb;
+ padding-right: 0.5em;
+ }
+ #email {
+ font-size: 16px;
+ padding-right: 3.4em;
+ color: #bbbbbb;
+ }
+ #github {
+ font-size: 16px;
+ padding-right: 2.8em;
+ color: #bbbbbb;
+ }
+---
+
+### posts
+<time>2025-01-24:</time> [Hosting an email server is not possible.](/posts/selfhostmail.html)
+<time>2024-12-27:</time> [Software I use.](/posts/software.html)
+<time>2024-09-25:</time> [I dislike modern smartphones.](/posts/nophone.html)
+<time>2024-09-06:</time> [Why I like Gentoo.](/posts/gentoo.html)
+<time>2024-06-09:</time> [New webiste.](/posts/website_created.html)
+
+### links and contact info
+
+<span id="email">email:</span> [suleyman@farajli.net](mailto:suleyman@farajli.net)
+<span id="github">github:</span> [sfarajli](https://github.com/sfarajli)
diff --git a/content/keys/index.md b/content/keys/index.md
new file mode 100644
index 0000000..e728b61
--- /dev/null
+++ b/content/keys/index.md
@@ -0,0 +1,24 @@
+---
+title: "Public keys"
+slug: "public-keys"
+---
+
+# GPG Key
+
+### suleyman@farajli.net
+
+- Created: 2025-05-27
+- Expires: 2027-01-01
+- Fingerprint: AE38 55F0 F5E9 F27C 5F4D CBC6 E340 C0B8 5F70 7B8C
+
+Import:
+```curl https://farajli.net/keys/pubkey.asc | gpg --import```
+
+Download: [pubkey.asc](https://farajli.net/keys/pubkey.asc)
+
+# SSH Key
+
+Add to authorized keys:
+`curl https://farajli.net/keys/id_ed25519.pub >> ~/.ssh/authorized_keys`
+
+Download: [id_ed25519.pub](https://farajli.net/keys/id_ed25519.pub)
diff --git a/posts/coding_standards.md b/content/posts/coding_standards.md
index aa2e1fd..728b7dd 100644
--- a/posts/coding_standards.md
+++ b/content/posts/coding_standards.md
@@ -1,3 +1,14 @@
+---
+title: "Post Title"
+slug: post-title
+created: 2024-12-31
+updated: 2025-06-23
+description: "A brief summary of what this page is about."
+tags: [linux, self-hosting, minimalism]
+draft: true
+---
+
+
Here are my **personal** coding standards for some languages.
## Interpreted languages
diff --git a/posts/gentoo.md b/content/posts/gentoo.md
index d38ddce..ee89d40 100644
--- a/posts/gentoo.md
+++ b/content/posts/gentoo.md
@@ -1,4 +1,11 @@
-<!-- Title: Why I prefer Gentoo -->
+---
+title: "Why I like Gentoo."
+slug: "gentoo"
+created: 2024-09-06
+description: "Why I think source based distros are better."
+tags: [Technology]
+draft: false
+---
### Why I prefer Gentoo over Arch.
A lot of people say very good things about gentoo linux, it is very well maintained,
diff --git a/content/posts/index.md b/content/posts/index.md
new file mode 100644
index 0000000..31ebb2b
--- /dev/null
+++ b/content/posts/index.md
@@ -0,0 +1,20 @@
+---
+title: "Posts"
+slug: "posts"
+css: |
+ time {
+ font-size: 16px;
+ color: #bbbbbb;
+ padding-right: 0.5em;
+ }
+---
+<time>2025-01-24:</time> [Hosting an email server is not possible.](/posts/selfhostmail.html)
+
+<time>2024-12-27:</time> [Software I use.](/posts/software.html)
+
+<time>2024-09-25:</time> [I dislike modern smartphones.](/posts/nophone.html)
+
+<time>2024-09-06:</time> [Why I like Gentoo.](/posts/gentoo.html)
+
+<time>2024-06-09:</time> [New webiste.](/posts/website_created.html)
+
diff --git a/posts/nophone.md b/content/posts/nophone.md
index 423e3ca..9592805 100644
--- a/posts/nophone.md
+++ b/content/posts/nophone.md
@@ -1,4 +1,12 @@
-<!-- Title: No smartphone!-->
+---
+title: "I dislike modern smartphones."
+slug: "no-smart-phone"
+created: 2024-09-25
+description: "Explaining why I prefer not to use a smartphone."
+tags: [Technology]
+draft: false
+---
+
### Why I absolutely hate smartphones.
diff --git a/posts/selfhostmail.md b/content/posts/selfhostmail.md
index 98285a4..f0469ef 100644
--- a/posts/selfhostmail.md
+++ b/content/posts/selfhostmail.md
@@ -1,4 +1,11 @@
-<!-- Title: Reasons not to host an email server -->
+---
+title: "Hosting an email server is not possible."
+slug: "hosting-email-server"
+created: 2025-01-24
+description: "Explaining why don't host an email server."
+tags: [Technology]
+draft: false
+---
### Reasons to not host your own email server.
diff --git a/posts/software.md b/content/posts/software.md
index 7f165ad..09f4f6c 100644
--- a/posts/software.md
+++ b/content/posts/software.md
@@ -1,4 +1,12 @@
-<!-- Title: Software -->
+---
+title: "Software I use."
+slug: "software"
+created: 2024-12-27
+description: "Software I recommend, use and some I dislike."
+tags: [Technology]
+draft: false
+---
+
Here are some of the programs I use, recommend and some I dislike.
You can get my configuration for most of these programs [here](https://git.farajli.net/slcf.git).
diff --git a/posts/website_created.md b/content/posts/website_created.md
index 14f4c3b..fa42637 100644
--- a/posts/website_created.md
+++ b/content/posts/website_created.md
@@ -1,4 +1,12 @@
-<!-- Title: I have a website! -->
+---
+title: "New webiste."
+slug: "new-website"
+created: 2024-06-09
+description: "Announcing my new website."
+tags: [Technology]
+draft: false
+---
+
### I have a website!
diff --git a/home/index.md b/home/index.md
deleted file mode 100644
index 7aa22db..0000000
--- a/home/index.md
+++ /dev/null
@@ -1,22 +0,0 @@
-<!-- Title: My personal Website -->
-
-An engineering student interested in languages and literally anything about computers.
-
-### top posts
-
-<table>
- <tr><td><time style="font-size: 16px; color: #bbbbbb; padding-right:3em">2025-01-24</time></td><td><a href="/posts/selfhostmail.html">Reasons not to host an email server.</a></td></tr>
- <tr><td><time style="font-size: 16px; color: #bbbbbb; padding-right:3em">2024-12-27</time></td><td><a href="/posts/software.html">Software I use.</a></td></tr>
- <tr><td><time style="font-size: 16px; color: #bbbbbb; padding-right:3em">2024-09-25</time></td><td><a href="/posts/nophone.html">Why I absolutely hate smartphones.</a></td></tr>
- <tr><td><time style="font-size: 16px; color: #bbbbbb; padding-right:3em">2024-09-06</time></td><td><a href="/posts/gentoo.html">Why I use gentoo.</a></td></tr>
- <tr><td><time style="font-size: 16px; color: #bbbbbb; padding-right:3em">2024-06-09</time></td><td><a href="/posts/website_created.html">Website Created!</a></td></tr>
-</table>
-
-### links and contact info
-
-<table>
- <tr><td style="color: #bbbbbb; font-size: 0.93em; padding-right: 5em">email</td><td><a href="mailto:suleyman@farajli.net">suleyman@farajli.net</a></td></tr>
- <tr><td style="color: #bbbbbb; font-size: 0.93em; padding-right: 5em">ssh</td><td><a href="/home/ssh.html">SSH key</a></td></tr>
- <tr><td style="color: #bbbbbb; font-size: 0.93em; padding-right: 5em">pgp</td><td><a href="/home/pgp.html">PGP key</a></td></tr>
- <tr><td style="color: #bbbbbb; font-size: 0.93em; padding-right: 5em">github</td><td><a href="https://github.com/sfarajli">sfarajli</a></td></tr>
-</table>
diff --git a/home/pgp.md b/home/pgp.md
deleted file mode 100644
index a1e1cdc..0000000
--- a/home/pgp.md
+++ /dev/null
@@ -1,19 +0,0 @@
-<!-- Title: PGP key -->
-
-### Public PGP key
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-
-mDMEZpOcQBYJKwYBBAHaRw8BAQdANOYO+BBsD5/cBecLZWT132Ekqsau
-2/70Cn20L3N1bGV5bWFuIChkb2VzbnQgZXhwaXJlKSA8c3VsZXltYW5A
-aS5uZXQ+iJMEExYKADsWIQSfcckR5au3BoMQHHCmjrGkrd+n3wUCZpOc
-CQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRCmjrGkrd+n3xUiAQD8
-nVzoR1QgOtAN7HImJqB4qHmF+H2bzQ3sLwD+NvTapc6NUqFnLIfrB72w
-FejuBdPZUicvVQ+4OARmk5xAEgorBgEEAZdVAQUBAQdAo/5SvzOSNeDP
-ZWHQ0KNHClMKx8hDyoDERkkDAQgHiHgEGBYKACAWIQSfcckR5au3BoMQ
-rd+n3wUCZpOcQAIbDAAKCRCmjrGkrd+n39NtAP40B28zkkjmqPVgn6lE
-kvPg2XDGzDKS69RXIgD+LAJUmWskXG8S6mZbAbs4UVyfdqEmCYHRwGGK
-
-=aeqA
-
------END PGP PUBLIC KEY BLOCK-----
diff --git a/index_pages.mk b/index_pages.mk
new file mode 100644
index 0000000..e8e0c54
--- /dev/null
+++ b/index_pages.mk
@@ -0,0 +1,5 @@
+POSTS = $(filter-out content/posts/index.md, $(wildcard content/posts/*.md))
+GENERATEDMD = content/posts/index.md
+
+content/posts/index.md: $(POSTS)
+ scripts/generate_post_index > $@
diff --git a/posts/2024_new_year.md b/posts/2024_new_year.md
deleted file mode 100644
index 3f9c019..0000000
--- a/posts/2024_new_year.md
+++ /dev/null
@@ -1,4 +0,0 @@
-<!-- Title: Happy New Year! -->
-
-Happy new year, everyone!
-Especially, the ones that I love.
diff --git a/posts/posts.md b/posts/posts.md
deleted file mode 100644
index 4c19873..0000000
--- a/posts/posts.md
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- Title: Posts -->
-
-<table>
- <tr><td><time style="font-size: 16px; color: #bbbbbb; padding-right:3em">2025-01-24</time></td><td><a href="/posts/selfhostmail.html">Reasons not to host an email server.</a></td></tr>
- <tr><td><time style="font-size: 16px; color: #bbbbbb; padding-right:3em">2024-12-31</time></td><td><a href="/posts/2024_new_year.html">Happy new year!</a></td></tr>
- <tr><td><time style="font-size: 16px; color: #bbbbbb; padding-right:3em">2024-12-27</time></td><td><a href="/posts/software.html">Software I use.</a></td></tr>
- <tr><td><time style="font-size: 16px; color: #bbbbbb; padding-right:3em">2024-09-25</time></td><td><a href="/posts/nophone.html">Why I absolutely hate smartphones.</a></td></tr>
- <tr><td><time style="font-size: 16px; color: #bbbbbb; padding-right:3em">2024-09-06</time></td><td><a href="/posts/gentoo.html">Why I use gentoo.</a></td></tr>
- <tr><td><time style="font-size: 16px; color: #bbbbbb; padding-right:3em">2024-06-09</time></td><td><a href="/posts/website_created.html">Website Created!</a></td></tr>
-</table>
diff --git a/archive/slcf.tar.gz b/public/archive/slcf.tar.gz
index f41c026..f41c026 100644
--- a/archive/slcf.tar.gz
+++ b/public/archive/slcf.tar.gz
Binary files differ
diff --git a/favicon.ico b/public/favicon.ico
index 2720d38..2720d38 100644
--- a/favicon.ico
+++ b/public/favicon.ico
Binary files differ
diff --git a/home/ssh.md b/public/keys/id_ed25519.pub
index 0615776..923d50c 100644
--- a/home/ssh.md
+++ b/public/keys/id_ed25519.pub
@@ -1,5 +1 @@
-<!-- Title: SSH key -->
-
-### Public ssh key
-
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILPpdEyLRGs3GnlvL4aDR06dYCDv8Rag1d31oSDgkmC/ suleyman@farajli.net
diff --git a/public/keys/pubkey.asc b/public/keys/pubkey.asc
new file mode 100644
index 0000000..df2f9fb
--- /dev/null
+++ b/public/keys/pubkey.asc
@@ -0,0 +1,86 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+58KbeUOtcSF5k/beMBAEFWpmN4NRZhg=
+=z7yo
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/style.css b/public/style.css
index 7ec141d..e23d743 100644
--- a/style.css
+++ b/public/style.css
@@ -1,5 +1,5 @@
-/*
-* Stylesheet of farajli.net
+/*
+* Stylesheet of farajli.net
*/
/* FIXME: Don't use google fonts */
@@ -15,7 +15,7 @@
body {
font-family: "JetBrains Mono";
font-size: 18px;
- width: 60em;
+ width: 60em;
display: block;
background-color: #1c1c1c; /* Almost Black */
color: #ffffff; /* White */
@@ -32,6 +32,18 @@ a:hover {
color: #B48EAD; /* Purple */
}
+ul, ol {
+ margin: 0;
+ padding: 0;
+ list-style-position: inside; /* optional: keeps bullets/numbers inside */
+}
+
+li > ul,
+li > ol {
+ margin-left: 1.2em; /* or adjust as needed */
+ padding-left: 1em;
+}
+
.menu_item {
color: #BB6767; /* Red */
/* font-weight: bold; */
@@ -70,4 +82,7 @@ a:hover {
#copyleft {
color: #696969; /* Dark Gray */
+ /* display: block; */
+ margin-top: 2em;
+ margin-bottom: 1em;
}
diff --git a/scripts/__pycache__/boiler.cpython-313.pyc b/scripts/__pycache__/boiler.cpython-313.pyc
new file mode 100644
index 0000000..28bdca1
--- /dev/null
+++ b/scripts/__pycache__/boiler.cpython-313.pyc
Binary files differ
diff --git a/scripts/__pycache__/parse_frontmatter.cpython-313.pyc b/scripts/__pycache__/parse_frontmatter.cpython-313.pyc
new file mode 100644
index 0000000..3d7cd2e
--- /dev/null
+++ b/scripts/__pycache__/parse_frontmatter.cpython-313.pyc
Binary files differ
diff --git a/scripts/boiler.py b/scripts/boiler.py
new file mode 100644
index 0000000..b5d75f4
--- /dev/null
+++ b/scripts/boiler.py
@@ -0,0 +1,55 @@
+import textwrap
+
+def print_html_head(title, style=None):
+ print(textwrap.dedent(f"""\
+ <!DOCTYPE html>
+ <html lang="en">
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=1024">
+ <link rel='stylesheet' type='text/css' href="/style.css">
+ <link rel="icon" type="image/x-icon" href="/favicon.ico">
+ <title>{title}</title>"""))
+
+ if style:
+ print(textwrap.dedent(f"""\
+ <style>
+ {style}
+ </style>"""))
+
+ print(textwrap.dedent("""\
+ </head>
+ <body>
+ <table id="bar">
+ <tr>
+ <td id='header-name'>Suleyman Farajli</td>
+ <td id='quote'></td>
+ </tr>
+ </table>
+ <script>
+ let quotes = ["Uncensored", "Oh mamma mia!", "Memento Mori!", "Oh là là!", "C'est légal parce que je le veux", "Sweet Dreams Are Made of This"];
+ let randomQuote = quotes[Math.floor(Math.random() * quotes.length)];
+ document.getElementById("quote").innerText = randomQuote;
+ </script>
+
+ <hr class="separator">
+
+ <div class="menu">
+ <a class="menu_item" href="/home/index.html">Home/</a>
+ <a class="menu_item" href="/posts/index.html">Posts/</a>
+ <a class="menu_item" href="/archive/index.html">Archive/</a>
+ <a class="menu_item" href="/keys/index.html">Keys/</a>
+ <a class="menu_item right_menu_item" href="https://git.farajli.net">Git</a>
+ </div>
+ <div class="text">"""))
+
+def print_html_tail():
+ print(textwrap.dedent("""\
+ </div>
+ <p>
+ <a id="copyleft" href="https://creativecommons.org/licenses/by-sa/4.0/" target="_blank" rel="noopener noreferrer">
+ copyleft (c) 2024-2025 Suleyman Farajli
+ </a>
+ </p>
+ </body>
+ </html>"""))
diff --git a/scripts/build_page b/scripts/build_page
new file mode 100755
index 0000000..51be92c
--- /dev/null
+++ b/scripts/build_page
@@ -0,0 +1,45 @@
+#!/usr/bin/env python3
+
+import boiler
+from parse_frontmatter import parse_frontmatter
+from pathlib import Path
+import subprocess
+import sys
+
+script_dir = Path(__file__).resolve().parent
+filepath = Path(sys.argv[1]).resolve()
+
+# Parse frontmatter and skip draft posts
+frontmatter = parse_frontmatter(filepath)
+if frontmatter.get("draft"):
+ print(f"{filepath}: is draft", file=sys.stderr)
+ sys.exit(1)
+
+if not frontmatter.get("title"):
+ print(f"{filepath}: title is missing", file=sys.stderr)
+ sys.exit(1)
+
+boiler.print_html_head(frontmatter["title"], frontmatter.get("css"))
+
+# Read file contents and strip frontmatter manually
+inside_frontmatter = False
+content = []
+
+with open(filepath, encoding="utf-8") as f:
+ for line in f:
+ if line.strip() == "---":
+ inside_frontmatter = not inside_frontmatter
+ continue
+ if not inside_frontmatter:
+ content.append(line)
+
+# Convert Markdown to HTML using `smu`
+html = subprocess.run(
+ ["smu"],
+ input="".join(content),
+ text=True,
+ capture_output=True
+).stdout
+
+print(html, end="")
+boiler.print_html_tail()
diff --git a/scripts/filter_proper_md b/scripts/filter_proper_md
new file mode 100755
index 0000000..ed1be7f
--- /dev/null
+++ b/scripts/filter_proper_md
@@ -0,0 +1,14 @@
+#!/usr/bin/env python3
+
+import sys
+from parse_frontmatter import parse_frontmatter
+from pathlib import Path
+
+def isproper(file):
+ frontmatter = parse_frontmatter(file)
+ if not frontmatter.get("draft"):
+ print(file)
+
+script_dir = Path(__file__).resolve().parent
+for arg in sys.argv[1:]:
+ isproper(arg)
diff --git a/scripts/generate_post_index b/scripts/generate_post_index
new file mode 100755
index 0000000..44aa756
--- /dev/null
+++ b/scripts/generate_post_index
@@ -0,0 +1,35 @@
+#!/usr/bin/env python3
+
+from parse_frontmatter import parse_frontmatter
+from pathlib import Path
+
+def generate_post_index():
+ script_dir = Path(__file__).parent.resolve()
+ posts_directory = script_dir / "../content/posts"
+ posts = []
+ for file in posts_directory.iterdir():
+ if file.is_file() and file.name != "index.md":
+ frontmatter=parse_frontmatter(file.resolve())
+ frontmatter["filename"] = file.name
+ if frontmatter["draft"]:
+ continue
+ posts.append(frontmatter)
+
+ sorted_posts = sorted(posts, key=lambda x: x["created"], reverse=True)
+
+ for i in sorted_posts:
+ html_file = i['filename'].replace(".md", ".html")
+ print(f"<time>{i['created']}:</time> [{i['title']}](/posts/{html_file})\n")
+
+print("""---
+title: "Posts"
+slug: "posts"
+css: |
+ time {
+ font-size: 16px;
+ color: #bbbbbb;
+ padding-right: 0.5em;
+ }
+---""")
+
+generate_post_index()
diff --git a/scripts/parse_frontmatter.py b/scripts/parse_frontmatter.py
new file mode 100644
index 0000000..2d5c60e
--- /dev/null
+++ b/scripts/parse_frontmatter.py
@@ -0,0 +1,19 @@
+import yaml
+
+def parse_frontmatter(filepath):
+ with open(filepath, 'r', encoding='utf-8') as f:
+ lines = f.readlines()
+
+ if not lines or lines[0].strip() != '---':
+ return {}
+
+ frontmatter_lines = []
+ for line in lines[1:]:
+ if line.strip() == '---':
+ break
+ frontmatter_lines.append(line)
+
+ frontmatter_str = ''.join(frontmatter_lines)
+ frontmatter = yaml.safe_load(frontmatter_str) or {}
+
+ return frontmatter
diff --git a/static/archive/JetBrainsMono.tar.gz b/static/archive/JetBrainsMono.tar.gz
new file mode 100644
index 0000000..0847dc3
--- /dev/null
+++ b/static/archive/JetBrainsMono.tar.gz
Binary files differ
diff --git a/static/archive/LiberationMono.tar.gz b/static/archive/LiberationMono.tar.gz
new file mode 100644
index 0000000..8810a17
--- /dev/null
+++ b/static/archive/LiberationMono.tar.gz
Binary files differ
diff --git a/static/archive/dmenu_farajli-5.3.0.tar.gz b/static/archive/dmenu_farajli-5.3.0.tar.gz
new file mode 100644
index 0000000..28705a2
--- /dev/null
+++ b/static/archive/dmenu_farajli-5.3.0.tar.gz
Binary files differ
diff --git a/static/archive/dwm_farajli-6.5.0.tar.gz b/static/archive/dwm_farajli-6.5.0.tar.gz
new file mode 100644
index 0000000..14b8e8a
--- /dev/null
+++ b/static/archive/dwm_farajli-6.5.0.tar.gz
Binary files differ
diff --git a/static/archive/slcf.tar.gz b/static/archive/slcf.tar.gz
new file mode 100644
index 0000000..f41c026
--- /dev/null
+++ b/static/archive/slcf.tar.gz
Binary files differ
diff --git a/static/archive/slstatus_farajli-1.0.0.tar.gz b/static/archive/slstatus_farajli-1.0.0.tar.gz
new file mode 100644
index 0000000..6e27da0
--- /dev/null
+++ b/static/archive/slstatus_farajli-1.0.0.tar.gz
Binary files differ
diff --git a/static/archive/st_farajli-0.9.2.0.tar.gz b/static/archive/st_farajli-0.9.2.0.tar.gz
new file mode 100644
index 0000000..a43a0f4
--- /dev/null
+++ b/static/archive/st_farajli-0.9.2.0.tar.gz
Binary files differ
diff --git a/static/favicon.ico b/static/favicon.ico
new file mode 100644
index 0000000..2720d38
--- /dev/null
+++ b/static/favicon.ico
Binary files differ
diff --git a/static/keys/id_ed25519.pub b/static/keys/id_ed25519.pub
new file mode 100644
index 0000000..923d50c
--- /dev/null
+++ b/static/keys/id_ed25519.pub
@@ -0,0 +1 @@
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILPpdEyLRGs3GnlvL4aDR06dYCDv8Rag1d31oSDgkmC/ suleyman@farajli.net
diff --git a/static/keys/pubkey.asc b/static/keys/pubkey.asc
new file mode 100644
index 0000000..df2f9fb
--- /dev/null
+++ b/static/keys/pubkey.asc
@@ -0,0 +1,86 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+58KbeUOtcSF5k/beMBAEFWpmN4NRZhg=
+=z7yo
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/static/style.css b/static/style.css
new file mode 100644
index 0000000..e23d743
--- /dev/null
+++ b/static/style.css
@@ -0,0 +1,88 @@
+/*
+* Stylesheet of farajli.net
+*/
+
+/* FIXME: Don't use google fonts */
+@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@370&display=swap');
+
+.jetbrains-mono {
+ font-family: "JetBrains Mono", serif;
+ font-optical-sizing: auto;
+ font-weight: 370;
+ font-style: normal;
+}
+
+body {
+ font-family: "JetBrains Mono";
+ font-size: 18px;
+ width: 60em;
+ display: block;
+ background-color: #1c1c1c; /* Almost Black */
+ color: #ffffff; /* White */
+ padding-left: 1em;
+ margin: auto;
+}
+
+a {
+ text-decoration: none;
+ color: #5E81AC; /* Blue */
+}
+
+a:hover {
+ color: #B48EAD; /* Purple */
+}
+
+ul, ol {
+ margin: 0;
+ padding: 0;
+ list-style-position: inside; /* optional: keeps bullets/numbers inside */
+}
+
+li > ul,
+li > ol {
+ margin-left: 1.2em; /* or adjust as needed */
+ padding-left: 1em;
+}
+
+.menu_item {
+ color: #BB6767; /* Red */
+ /* font-weight: bold; */
+ padding: 0.4em;
+ padding-right: 3em;
+ font-size: 20px;
+ margin-right: 0.2em;
+ margin-left: 0.2em;
+}
+
+.right_menu_item {
+ float: right;
+ padding-right: 1em;
+}
+
+#header-name {
+ text-align: left;
+ font-size: 25px;
+ padding-top: 20px;
+ color: #FFFFFF; /* White */
+ font-weight: normal;
+}
+
+#quote {
+ font-size: 20px;
+ text-align: right;
+ color: #C0C0C0; /* Darkish gray */
+ padding-top: 20px;
+ font-weight: 430;
+}
+
+#bar{
+ width: 100%;
+ line-height: 35px;
+}
+
+#copyleft {
+ color: #696969; /* Dark Gray */
+ /* display: block; */
+ margin-top: 2em;
+ margin-bottom: 1em;
+}