summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--GNUmakefile25
-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.md54
-rw-r--r--content/posts/gentoo.md78
-rw-r--r--content/posts/index.md20
-rw-r--r--content/posts/nophone.md142
-rw-r--r--content/posts/selfhostmail.md55
-rw-r--r--content/posts/software.md82
-rw-r--r--content/posts/website_created.md28
-rw-r--r--index_pages.mk5
-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/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
22 files changed, 952 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..bfd0ece
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+__pycache__/
+install.mk
+public/
+*.tar.gz
diff --git a/GNUmakefile b/GNUmakefile
new file mode 100644
index 0000000..0d49d96
--- /dev/null
+++ b/GNUmakefile
@@ -0,0 +1,25 @@
+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))
+
+# Calling make is used for making sure that index pages are build first
+all:
+ $(MAKE) -f index_pages.mk
+ $(MAKE) pages
+
+pages: $(HTML) $(PUBLICASSETS)
+
+public/%.html: content/%.md
+ mkdir -p $$(dirname $@)
+ scripts/build_page $< > $@
+
+$(PUBLICASSETS): public/%: static/%
+ mkdir -p $$(dirname $@)
+ cp $< $@
+
+clean:
+ rm -rf public
+
+.PHONY: all clean pages
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/content/posts/coding_standards.md b/content/posts/coding_standards.md
new file mode 100644
index 0000000..728b7dd
--- /dev/null
+++ b/content/posts/coding_standards.md
@@ -0,0 +1,54 @@
+---
+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
+#### Never put the file extension to the source file instead use a shebang.
+``
+ #!/bin/sh
+ #!/bin/python3
+ #!/bin/perl
+``
+
+## Posix shell
+#### Always wrap variables with `"${}"` to prevent globbing.
+``
+ echo "${var}"
+ echo "${1}"
+ echo "${@}"
+``
+
+## Makefiles
+#### If Makefile is fully posix complient and doesn't have anything extra add
+`.POSIX:` to the beginning of the file
+
+## C
+#### Use K&R style `if`s
+``
+ if (condition) {
+ do this;
+ do that;
+ do another;
+ }
+``
+#### if only one line don't use curly braces.
+``
+ while (condition)
+ do this
+``
+
+``
+ if (condition)
+ do this
+ else
+ do that
+``
diff --git a/content/posts/gentoo.md b/content/posts/gentoo.md
new file mode 100644
index 0000000..ee89d40
--- /dev/null
+++ b/content/posts/gentoo.md
@@ -0,0 +1,78 @@
+---
+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,
+It is more secure, It is lightweight and so on. But when it comes down to it,
+very few people actually use gentoo, I think that is because they install it
+and after a month or so they really get sick of waiting for the packages to compile
+and they switch back to whatever they were using before. I know it because,
+I had done that in the past, I dual-booted my machine with gentoo and arch linux
+intending to only use gentoo, and arch only when I didn't have the time to wait
+for the package to compile, but ended up only booting to arch and almost never
+to gentoo, at that time if you were to ask me the best package manager
+I would have unhesitatingly said arch's pacman, while I still think that pacman is the best
+**binary** package manager
+for the past few months I have started to really like gentoo and its package manager
+portage and there are different reasons for that.
+
+### Compiling programs makes more sense than downloading binaries.
+On unix-like operating systems you generally use
+open-source software and that software is made to be compiled by the users specific
+to their machines, but on binary based distros you use programs that are compiled for
+you by someone else and again to me, personally, compiling just makes more sense.
+
+### It gives you more perspective to the program you use.
+If you'd downloaded a binary package you would only be able to tell if a program is fast,
+has enough features and so on, but you wouldn't have known how much time it takes
+to compile, what the build dependencies are, and even sometimes the
+programming language that it is written in. I do agree that knowing those abstract details
+of a package is utterly useless for a typical end-user who is not a programmer
+but for a programmer those details are very important, since you get to know what build systems are
+faster what programming language compiles faster, builds better and sometimes you
+get to learn some stuff that you didn't even know existed. You can build programs from source in other distros
+as well but gentoo makes it easier and forces you to do that
+and be honest, If you could install binary package in 10 seconds
+you wouldn't even bother waiting for it to compile for 20 minutes.
+
+### You install less packages.
+In order to avoid compilation you tent to install less pieces of software
+resulting in more stable and more performant system. God forbid you if
+you are using arch linux and have access to the AUR
+(I had installed more than 2000 useless packages on my arch system).
+
+### It is more secure, lightweight and faster (at least in theory).
+I have not noticed any significant difference in terms of performance
+between gentoo and binary based distros and I kind of think that security
+on client OSes is overrated, but for some few people these might be important
+since you literally can skip some useless parts of a program (useless for you of course)
+resulting in less bloated, therefore faster and more secure programs, but again I
+don't really find it that important.
+
+### **No systemd**!
+I am not against systemd but I prefer to not use it.
+On gentoo the default init system is openrc and it works
+with no problem.
+
+### Bad parts.
+Like everything, it has some negative stuff about it as well,
+those are
+
+- Compilation can take some time.
+- Gentoo is the one of **the hardest** distro to manage.
+
+I am saying both of those with an asterisk, because
+although I agree that there are some big pieces of software that you basically have to have
+like a browser, (it took 6h to compile a browser on my machine) but most of the time
+if software takes too much time to compile that indicates that it is
+overcomplicated and you shouldn't even be using it.
+Gentoo is hard to use but, that also means gentoo forces to know more, making you better at
+system administration.
+
+So, that is all.
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/content/posts/nophone.md b/content/posts/nophone.md
new file mode 100644
index 0000000..9592805
--- /dev/null
+++ b/content/posts/nophone.md
@@ -0,0 +1,142 @@
+---
+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.
+
+For the past few years, the question that I have been asked the most
+is that "why don't you use a smartphone", but I've never really 
+answered any of those questions, even though, 
+I do have different reasons not to use one.
+
+The main point is that if you ever use any sort of properly
+designed "normal" operating systems and hardware you can't really 
+go back and use garbage computer operating systems or phones
+without getting disgusted. 
+With smartphones, it is even worse than toy-like computer OSes like windows
+or mac, because with those systems you at least get some sort of 
+proper hardware components like a keyboard, 
+a monitor with "normal" screen ratio and so on.
+But with phones, not only you get an operating system that is no better than 
+trash, but also some very cringe way to interact with the hardware. 
+(Yes, I am talking about sensor screens.)
+
+Now, let's talk about why
+
+- Operating systems
+- Package Management
+- User space applications
+- Hardware
+- Privacy and Security
+Absolutely suck on "smart" phones.
+
+### Operating Systems
+There are 2 main OSes for phones: iOS and Android, there are also some not widely used ones 
+like legacy Windows Phone and even some open-source ones, though here, I shall only talk about the
+first 2 that I have mentioned, but that should also be somewhat relevant 
+to almost all the other phone OSes as well.
+
+**Android Sucks**! because, you can't even perform the most basic
+computer functionalities 
+like compiling very simple software, writing scripts, and so on, you don't even have
+the root access to the phone you "own", but the company that sold you that has full 
+access to the phone over the internet, that is basically like slavery with extra steps, lol.
+Some people might say "Well, that is not a computer
+you are not supposed to compile programs and write scripts!" I don't buy that argument
+because, in reality, computers and phones are indeed the same thing, the way that they
+function is the same, the way they connect with other computers is the same,
+they use the same technologies to function (in fact, Android uses the Linux kernel).
+The difference between properly written computer OSes and android is that 
+computer OSes care about the users while phones are trying to keep you under control.
+It is also worth mentioning that I am not talking about the pure open source Android
+project, I am talking about Android, on which companies put a load of garbage to make 
+it more "beneficial" for the company.  
+
+With iPhones, it's the same thing except it is even worse, 
+it should be obvious why, apple! the single worst company 
+that has ever existed, Apple is trying so hard to keep you 
+inside of its garbage-like "ecosystem" by making it very hard 
+and even sometimes impossible to connect with hardware/software
+other than Apple's, and all these ***morons*** will be like 
+> "BuT, DuuuuuDe, APpLE DeVIces WeRk WItH oTher AppLE DeViCes sO SMoOthLy" 
+Yeah, by making it impossible to work with basically everything else
+and you have to have apple garbage all around you.
+
+### Package Management
+Android and iOS do have some sort of package management,
+on Android, it's Play store (But you can also install packages using .apk format)
+on iOS, you have app store.  
+Google owns Play Store, and you have to have a google account to be able to use 
+Play Store (which on Android you basically also have to), on iOS, Apple owns
+app store.   
+That might not seem like a huge deal, but it is. It basically means Google and Apple
+have all the control of the programs uploaded to Play Store and app store respectively,
+meaning that Google and Apple can block and even change the source code of some programs,
+inject absolutely anything inside them.  
+Those companies need profit no matter what, meaning they would do anything to 
+get profit, even unethical stuff, and you are the one who let them do that to you.
+
+### User Space applications
+By user space applications, I mean just the programs that people
+install on smartphones. Frankly speaking, those programs are
+just for normies who don't understand 
+technology and advances users are completely ignored. Phone programs
+are graphical, thus they use more ram and cpu and most of the time they are
+full of advertisements (Xiaomi Phones even have ads in the system's gallery).
+They are not privacy-respecting, bloated, and kind of useless. 
+There is one program, however, that is worth talking about separately, and that is 
+"WhatsApp". It is the most widely used messaging application, though it has absolutely
+nothing extraordinary and some stuff that is even worse than an average messaging program.
+Here are some bad stuff about it:
+
+- WhatsApp is not private, **at all**!
+- You have to have a smartphone and a phone number.
+
+Imagine a piece of software requires you to have a phone to be able to use it,
+that is basically like saying that a $400  device is a dependency of that program,
+this is absolutely *nuts*. I find it quite absurd
+that people don't find it absurd. 
+> If a program as simple as a messaging app requires you to have
+> a cell phone, you shouldn't even be using that,
+> no matter how many people around you use it!
+
+### Hardware
+Hardware of cellphones absolutely suck they are designed to be broken so easily you can
+break them by accident, that is, of course, 
+to sell more of them, they are nothing like old classic solid Nokia phones 
+with buttons and stuff, instead you have only a screen and you touch on it 
+which is very very cringe.  
+I just want buttons to press, not touchscreens to touch.  
+Another thing is that you can't upgrade your RAM or your storage and you're supposed to use overpriced
+services like iCloud or Google Drive.
+
+### Privacy and security
+Privacy just doesn't exist on smartphones; that is just a matter of fact.
+If you use an iPhone, all your photos are sent to Apple servers and can be hacked 
+(though not quite probable) since, they are not stored only on your local system
+which makes it less secure as well,
+On Android, people use Google Photos, which is basically as bad as iPhones.
+
+### Health
+Phones are also bad for your health, I can't
+tell you the specifics since I am not a doctor.
+But it is common knowledge that phones are bad for you.
+
+### Good stuff about phones
+The only good thing about a phone is its camera. 
+though many people take too many useless pictures
+resulting in a mess of data. Nonetheless, cameras are very useful
+but it is not worth it to use a smartphone just because of that.
+
+### Summing it up
+Smartphones are useless pieces of garbage that are overpriced, not privacy respecting and 
+meant for normies who don't understand how technology
+works, or at least how it should work, ***no offense***.
+Even if you must use a smartphone, that doesn't change the fact that they are 
+bad for you.
diff --git a/content/posts/selfhostmail.md b/content/posts/selfhostmail.md
new file mode 100644
index 0000000..f0469ef
--- /dev/null
+++ b/content/posts/selfhostmail.md
@@ -0,0 +1,55 @@
+---
+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.
+
+Last summer, I had successfully managed to host my email server but
+a couple of days ago I completely removed everything from my server
+and purchased an email hosting service.
+
+I'd like to share my experience with hosting an email server
+and what makes the process an absolute nightmare.
+
+#### - It's hard to find an affordable VPS provider that doesn't block port 25.
+
+If you don't know anything about email, you need the port 25 to be open to send mails but
+most server providers block it to reduce spam and the ones that don't costs more than
+the usual ones.
+
+#### - Getting a domain and IP that is not blacklisted.
+
+If you have already bought a domain it might be blacklisted meaning that
+all the mails you'll send is going to go right into the spam folder of the receiver.
+It's the same for IP but chaining it is a lot easier than getting a new domain on most
+server providers.
+
+#### - Not enough documentation is available and some is outdated.
+
+There isn't that much documentation for setting up an email server, I think that is
+partially because of the process being so tough that no one really wants to document it
+and there are so many commands involved in the process
+even just a small update on one program can make the documentation outdated.
+
+#### - It's very hard to set up.
+Configuring an email server was perhaps the hardest thing that I'd ever done
+(even after finding the proper documentation), I spent weeks on that.
+
+#### - Almost certainly, your mails won't be delivered.
+
+Even after going through the very difficult process of finding the correct server provider,
+documentation and setting everything up (DKIM, SPF etc.) you'll still end up in spams,
+you might be able to pass spam filters of some email services, but you'll never feel
+confident of sending mails because big email services sometimes update their spam filters
+and you got to keep up with those as well, so it doesn't just end there when you set it up.
+
+#### Summing it up
+
+I'd gladly host an email server, but I just can't make it work half as good as the paid
+email service providers. In the future I might try to do it again
+(though I don't think the results will be different) but now I'll stick to email services.
diff --git a/content/posts/software.md b/content/posts/software.md
new file mode 100644
index 0000000..09f4f6c
--- /dev/null
+++ b/content/posts/software.md
@@ -0,0 +1,82 @@
+---
+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).
+
+### Criteria
+For software to be usable for me it has to be:
+1. Free and Open-source
+1. Uncomplicated, simple to use
+1. Lightweight
+1. Fast
+
+### Operating systems
+* [Arch Linux](https://archlinux.org): The best linux distro for most people, since installing packages is very convenient using the AUR and has a great wiki.
+* [Gentoo](https://gentoo.org): Unique operating system with a proper wiki, see my [post](../posts/gentoo.html) about it.
+* [Void](https://voidlinux.org): Great linux distros free from filthy systemd and glibc.
+* [Debian](https://www.debian.org/): Easy to install and use, the best distro for beginners.
+* [FreeBSD](https://www.freebsd.org/): Simple operating system with a clean and elegant codebase.
+* <a href="https://ubuntu.com" class=orange_text>Ubuntu</a>: Debian done wrong with snaps.
+* <a href="https://manjaro.org" class=orange_text>Manjaro</a>: Same as ubuntu except even worse doesn't even work properly.
+* <span class=orange_text>MacOS</span>: BSD done wrong, with apple garbage.
+* <span class=orange_text>Windows</span>: Graphical trash.
+
+### Programming languages
+* C: Portable assembly, basically the default programming language for unix.
+* Go: Modern version of C, very convenient and safe to write programs in.
+* Posix Shell: Concise and convenient for scripts and small programs.
+* <strong class=orange_text>C++</strong>: Bloated, not safe and a mess, literally every bad piece of software I've ever used was written in C++.
+
+### Window managers
+* [DWM](https://dwm.suckless.org): At first a little hard to configure but at the end totally worth it.
+* [BSPWM](https://github.com/baskerville/bspwm): Best static window manager, easy to configure with and an extraordinary tool called bspc.
+* [i3wm](https://i3wm.org/): An average window manager, good for beginners.
+
+### Text editors
+* vim and [nvim](https://neovim.io/): Just way too convenient to be real.
+* <span class=orange_text>JetBrains IDEs</span>: Bloated, heavy, overcomplicated and costs money(?).
+
+### Browser
+* [Qutebrowser](https://www.qutebrowser.org/): Has vim-keybinds making it very convenient to use.
+* [Firefox](https://www.mozilla.org/en-GB/firefox/new/): Sometimes, you need a bloated browser to view bloated sites.
+
+### Terminal and terminal Utilities
+* [st](https://st.suckless.org/): Terminal emulator though a little hard to configure.
+* [alacritty](https://alacritty.org/): Terminal emulator which works perfectly fine without any configuration.
+* [cmus](https://cmus.github.io/): Music player.
+* [zsh](https://www.zsh.org/): Interactive shell.
+* [dash](http://gondor.apana.org.au/~herbert/dash/): Shell script interpreter.
+* [lf](https://github.com/gokcehan/lf): File manager.
+* [translate-shell](https://github.com/soimort/translate-shell): Cli translator.
+
+### Xorg utilities
+* [dmenu](https://tools.suckless.org/dmenu/): Interactive menu to select items.
+* [slstatus](https://tools.suckless.org/slstatus/): Status monitor.
+* [mpv](https://mpv.io/): Media player.
+* [nsxiv](https://nsxiv.codeberg.page/): Image viewer.
+* [zathura](https://pwmt.org/projects/zathura/): pdf viewer.
+
+### Other
+* [pandoc](https://pandoc.org): Document converter.
+* [git](https://git-scm.com/): Version control system.
+
+### About hardware
+I don't really care about hardware because it is easily replacable and I am fine with whatever just works,
+as long as it not overpriced. If you use proper software any hardware should get the job done.
+
+I am not going to shill thinkpads like everyone else, though I think they are fine, to me only 2 things
+set apart thinkpads from all the other laptops, firstly, the fact that they are librebootable and, secondly,
+they are really cheap.
+
+### See also
+* [Suckless Rocks page](https://suckless.org/rocks/)
+* [Cat-v harmful stuff](https://harmful.cat-v.org/software/)
+* [Luke Smith's Post](https://lukesmith.xyz/programs/)
diff --git a/content/posts/website_created.md b/content/posts/website_created.md
new file mode 100644
index 0000000..fa42637
--- /dev/null
+++ b/content/posts/website_created.md
@@ -0,0 +1,28 @@
+---
+title: "New webiste."
+slug: "new-website"
+created: 2024-06-09
+description: "Announcing my new website."
+tags: [Technology]
+draft: false
+---
+
+
+### I have a website!
+
+As of June 13th 2024, the best website on the internet has officially been created.
+
+This site is not made by using one of those fancy and bloated site generators
+or any garbage like that, it was created, quite surprisingly, by writing HTML and
+CSS, as it is supposed to be, though it is a little inefficient, error-prone
+and a pain writing HTML and adding boilerplate code to each file,
+thus it's quite probable that I shall write a small program to do that automatically
+for me in the future, but that program won't be the same as bloated site generators,
+in fact, it'd basically be the same as manual way of writing HTML.
+Here are some of the advantages of my website compared to a lot of contemporary ones.
+
+- Doesn't fill your entire ram.
+- Doesn't have ads, tracker or unnecessary JavaScript.
+- Loads **Fast**!
+
+As of now, there isn't that much of content here, but I will probably add a lot more.
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/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/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;
+}