diff --git a/Makefile b/Makefile
index 0c183cab365f383da249f650a86833575823f4ed..d0add7d92b2d12a0c714bd45e70d70c60a1a0c35 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,5 @@
MAKEFLAGS+=-j2
+PROJECTS_FILENAME = content/pages/projects.md
dev: watch server
@@ -8,5 +9,22 @@
server:
jbmafp -s
-fetch-projects:
- cd tools && python projects.py
+update-projects: projects-header
+ cat content/pages/projects.fossil.md.part \
+ content/pages/projects.github.md.part >> \
+ content/pages/projects.md
+
+projects-header:
+ echo "---" > $(PROJECTS_FILENAME)
+ echo "title: Personal projects" >> $(PROJECTS_FILENAME)
+ echo "date: 2024-10-21T12:00:00+02:00" >> $(PROJECTS_FILENAME)
+ echo "url: projects.html" >> $(PROJECTS_FILENAME)
+ echo "type: page" >> $(PROJECTS_FILENAME)
+ echo "draft: false" >> $(PROJECTS_FILENAME)
+ echo "---\n" >> $(PROJECTS_FILENAME)
+
+update-fossil:
+ cd tools && bash fossil-projects.sh
+
+update-github:
+ cd tools && python github-projects.py
diff --git a/content/pages/projects.fossil.md.part b/content/pages/projects.fossil.md.part
new file mode 100644
index 0000000000000000000000000000000000000000..796af87522d43a41a996c875ffd7744c357e21a4
--- /dev/null
+++ b/content/pages/projects.fossil.md.part
@@ -0,0 +1,4 @@
+## Fossil repositories
+
+- [pats.fossil](/projects/pats.fossil)
Size: 220K, Modified: 2025-08-02 20:24:05
+- [xmagnify.fossil](/projects/xmagnify.fossil)
Size: 220K, Modified: 2025-08-02 20:24:05
diff --git a/content/pages/projects.github.md.part b/content/pages/projects.github.md.part
new file mode 100644
index 0000000000000000000000000000000000000000..92a8c748c98beb063863dbab60e0e119320ad151
--- /dev/null
+++ b/content/pages/projects.github.md.part
@@ -0,0 +1,392 @@
+
+
+## GitHub repositories
+
+
+
+- [abtts](#abtts)
+- [blpconvert](#blpconvert)
+- [ClassicEnhanced](#classicenhanced)
+- [clutch](#clutch)
+- [jbmafp](#jbmafp)
+- [lazycommit](#lazycommit)
+- [makext](#makext)
+- [mprogress](#mprogress)
+- [newsbarge](#newsbarge)
+- [oberon](#oberon)
+- [p9tree](#p9tree)
+- [pats](#pats)
+- [rssperado](#rssperado)
+- [sm](#sm)
+- [sparklines](#sparklines)
+- [ttdaw](#ttdaw)
+- [TurtleTweaks](#turtletweaks)
+- [xmagnify](#xmagnify)
+
+
+
+
+## abtts
+Convert text like ebooks into audiobooks with UnrealSpeech.
+
+
+
+
+|Released|Description|Download|
+|--------|-----------|--------|
+|2023-07-05|Added introduction audio option| [abtts-v0.3.tar.gz](/projects/abtts-v0.3.tar.gz) |
+|2023-07-03|Moved to OGG as default format| [abtts-v0.2.tar.gz](/projects/abtts-v0.2.tar.gz) |
+|2023-07-03|First release| [abtts-v0.1.tar.gz](/projects/abtts-v0.1.tar.gz) |
+
+
+
+
+
+
+[mitjafelicijan/abtts](https://github.com/mitjafelicijan/abtts)
+
+
+
+## blpconvert
+This tool converts BLP texture files used in many games such as World of Warcraft into PNG files. With support for DXT1, DXT3 and DXT5 compression.
+
+
+
+
+|Released|Description|Download|
+|--------|-----------|--------|
+|2025-02-04|First version| [blpconvert-v1.0.tar.gz](/projects/blpconvert-v1.0.tar.gz) |
+
+
+
+
+
+
+[mitjafelicijan/blpconvert](https://github.com/mitjafelicijan/blpconvert)
+
+
+
+## ClassicEnhanced
+Quality of life improvements and general enhancements for WoW Classic Client.
+
+
+
+
+|Released|Description|Download|
+|--------|-----------|--------|
+|2024-04-13|Fixed Druid initial state of mana bar| [ClassicEnhanced-v1.0.1.tar.gz](/projects/ClassicEnhanced-v1.0.1.tar.gz) |
+|2024-04-13|First release| [ClassicEnhanced-v1.0.0.tar.gz](/projects/ClassicEnhanced-v1.0.0.tar.gz) |
+
+
+
+
+
+
+[mitjafelicijan/ClassicEnhanced](https://github.com/mitjafelicijan/ClassicEnhanced)
+
+
+
+## clutch
+Clutch allows you to run nested dwm session inside your existing X or Wayland session. This comes in handy when you already have a desktop environment running (like Gnome) but you want to have a tiling window manager as well.
+
+
+
+
+|Released|Description|Download|
+|--------|-----------|--------|
+|2024-06-19|First release| [clutch-v1.0.tar.gz](/projects/clutch-v1.0.tar.gz) |
+
+
+
+
+
+
+[mitjafelicijan/clutch](https://github.com/mitjafelicijan/clutch)
+
+
+
+## jbmafp
+A simple static site generator that is semi compatible with Hugo and aims to be a simpler version of it, getting out of your way when it comes to taxonomies.
+
+
+
+
+|Released|Description|Download|
+|--------|-----------|--------|
+|2024-06-21|Added better filtering| [jbmafp-v0.3.tar.gz](/projects/jbmafp-v0.3.tar.gz) |
+|2024-06-18|Added filters first, last, random| [jbmafp-v0.2.tar.gz](/projects/jbmafp-v0.2.tar.gz) |
+|2024-03-10|First release| [jbmafp-v0.1.tar.gz](/projects/jbmafp-v0.1.tar.gz) |
+
+
+
+
+
+
+[mitjafelicijan/jbmafp](https://github.com/mitjafelicijan/jbmafp)
+
+
+
+## lazycommit
+Git commit messages for lazy people that use AI in the backend.
+
+
+
+
+|Released|Description|Download|
+|--------|-----------|--------|
+|2025-03-17|First release| [lazycommit-v1.0.tar.gz](/projects/lazycommit-v1.0.tar.gz) |
+
+
+
+
+
+
+[mitjafelicijan/lazycommit](https://github.com/mitjafelicijan/lazycommit)
+
+
+
+## makext
+Makext is a collection of useful extensions for Makefiles, aimed at simplifying and enhancing the functionality of Make-based projects. These extensions provide additional features and convenience functions to improve the overall usage of GNU Make as a task runner.
+
+
+
+
+|Released|Description|Download|
+|--------|-----------|--------|
+|2024-05-15|First release| [makext-v1.0.tar.gz](/projects/makext-v1.0.tar.gz) |
+
+
+
+
+
+
+[mitjafelicijan/makext](https://github.com/mitjafelicijan/makext)
+
+
+
+## mprogress
+Displays progress bar in terminal. It can be used as a standalone program so you can put it in /usr/bin. The name is stupid like that because of the potential name conflicts.
+
+
+
+
+|Released|Description|Download|
+|--------|-----------|--------|
+|2022-12-31|First release| [mprogress-v1.0.tar.gz](/projects/mprogress-v1.0.tar.gz) |
+
+
+
+
+
+
+[mitjafelicijan/mprogress](https://github.com/mitjafelicijan/mprogress)
+
+
+
+## newsbarge
+Converts RSS feeds into single HTMLpage containing all the feed stories.
+
+
+
+
+|Released|Description|Download|
+|--------|-----------|--------|
+|2025-03-01|First release| [newsbarge-v0.1.tar.gz](/projects/newsbarge-v0.1.tar.gz) |
+
+
+
+
+
+
+[mitjafelicijan/newsbarge](https://github.com/mitjafelicijan/newsbarge)
+
+
+
+## oberon
+This is a tiny project boilerplate for OpenResty and Lua website that includes basic router, memcached, Redis and MySQL with accompanying examples how to use all this.
+
+
+
+
+|Released|Description|Download|
+|--------|-----------|--------|
+|2025-03-29|First release| [oberon-v1.0.tar.gz](/projects/oberon-v1.0.tar.gz) |
+
+
+
+
+
+
+[mitjafelicijan/oberon](https://github.com/mitjafelicijan/oberon)
+
+
+
+## p9tree
+tree is written with Plan9 Operating System in mind so it may not work with other systems.
+
+
+
+
+|Released|Description|Download|
+|--------|-----------|--------|
+|2023-11-11|First release| [p9tree-v1.0.tar.gz](/projects/p9tree-v1.0.tar.gz) |
+
+
+
+
+
+
+[mitjafelicijan/p9tree](https://github.com/mitjafelicijan/p9tree)
+
+
+
+## pats
+Pats is a command-line tool for managing PulseAudio audio sinks that allows you to list available audio outputs and cycles between them seamlessly.
+
+
+
+
+|Released|Description|Download|
+|--------|-----------|--------|
+|2025-07-19|First release| [pats-v1.0.tar.gz](/projects/pats-v1.0.tar.gz) |
+
+
+
+
+
+
+[mitjafelicijan/pats](https://github.com/mitjafelicijan/pats)
+
+
+
+## rssperado
+The RSS parser is a command-line utility that simplifies the process of parsing RSS feeds, enriching the extracted data, exporting it to JSON files, enabling content classification, and providing English translation.
+
+
+
+
+|Released|Description|Download|
+|--------|-----------|--------|
+|2023-06-07|First release| [rssperado-v1.0.tar.gz](/projects/rssperado-v1.0.tar.gz) |
+
+
+
+
+
+
+[mitjafelicijan/rssperado](https://github.com/mitjafelicijan/rssperado)
+
+
+
+## sm
+Simple snapshot utility that uses TAR to compress current directory into a .tar file while ignoring some of the directories.
+
+
+
+
+|Released|Description|Download|
+|--------|-----------|--------|
+|2024-10-21|First release| [sm-v1.0.tar.gz](/projects/sm-v1.0.tar.gz) |
+
+
+
+
+
+
+[mitjafelicijan/sm](https://github.com/mitjafelicijan/sm)
+
+
+
+## sparklines
+Self-contained tiny SVG sparkline chart library written in vanilla JS with zero dependencies.
+
+
+
+
+|Released|Description|Download|
+|--------|-----------|--------|
+|2023-12-09|First release| [sparklines-v1.0.tar.gz](/projects/sparklines-v1.0.tar.gz) |
+
+
+
+
+
+
+[mitjafelicijan/sparklines](https://github.com/mitjafelicijan/sparklines)
+
+
+
+## ttdaw
+ttdaw is a tiny terminal based digital audio workstation made for fun, experimentation and learning more about audio, MIDI and terminal applications in general.
+
+
+
+
+|Released|Description|Download|
+|--------|-----------|--------|
+|2024-12-22|First release| [ttdaw-v0.1.tar.gz](/projects/ttdaw-v0.1.tar.gz) |
+
+
+
+
+
+
+[mitjafelicijan/ttdaw](https://github.com/mitjafelicijan/ttdaw)
+
+
+
+## TurtleTweaks
+World of Warcraft 1.12 client Tweaks and Enhancements Addon.
+
+
+
+
+|Released|Description|Download|
+|--------|-----------|--------|
+|2023-05-14|Added cooldown timers to actionbars| [TurtleTweaks-v0.7.tar.gz](/projects/TurtleTweaks-v0.7.tar.gz) |
+|2023-05-12|Rested bar now has a proper progress bar| [TurtleTweaks-v0.6.tar.gz](/projects/TurtleTweaks-v0.6.tar.gz) |
+|2023-05-09|Removed debug messages| [TurtleTweaks-v0.5.1.tar.gz](/projects/TurtleTweaks-v0.5.1.tar.gz) |
+|2023-05-09|Added option to open world map in a window| [TurtleTweaks-v0.5.tar.gz](/projects/TurtleTweaks-v0.5.tar.gz) |
+|2023-05-09|Added nameplate scaling option| [TurtleTweaks-v0.4.tar.gz](/projects/TurtleTweaks-v0.4.tar.gz) |
+|2023-05-08|Fixed progress bar to reflect the value in rested bar| [TurtleTweaks-v0.3.tar.gz](/projects/TurtleTweaks-v0.3.tar.gz) |
+|2023-05-08|Added align grid slashcommand| [TurtleTweaks-v0.2.tar.gz](/projects/TurtleTweaks-v0.2.tar.gz) |
+|2023-05-08|First release| [TurtleTweaks-v0.1.tar.gz](/projects/TurtleTweaks-v0.1.tar.gz) |
+
+
+
+
+
+
+[mitjafelicijan/TurtleTweaks](https://github.com/mitjafelicijan/TurtleTweaks)
+
+
+
+## xmagnify
+Xmagnify is a real-time screen magnification tool for X11 systems that provides a zoomed view of the area around your mouse cursor.
+
+
+
+
+|Released|Description|Download|
+|--------|-----------|--------|
+|2025-07-18|First release| [xmagnify-v1.0.tar.gz](/projects/xmagnify-v1.0.tar.gz) |
+
+
+
+
+
+
+[mitjafelicijan/xmagnify](https://github.com/mitjafelicijan/xmagnify)
+
+
+
+
+
+
+
diff --git a/content/pages/projects.md b/content/pages/projects.md
index 8c341b655e0fdc0b6917db5e7c8370be8e0140c2..cc1018524348843e120f2adf26b3ba6aaafe6cdd 100644
--- a/content/pages/projects.md
+++ b/content/pages/projects.md
@@ -6,6 +6,14 @@ type: page
draft: false
---
+## Fossil repositories
+
+- [pats.fossil](/projects/pats.fossil)
Size: 220K, Modified: 2025-08-02 20:21:40
+- [xmagnify.fossil](/projects/xmagnify.fossil)
Size: 220K, Modified: 2025-08-02 20:21:40
+
+
+## GitHub repositories
+
- [abtts](#abtts)
diff --git a/static/projects/pats.fossil b/static/projects/pats.fossil
new file mode 100644
index 0000000000000000000000000000000000000000..ad9173727b1356e579413368c91f4b3baac290d8
Binary files /dev/null and b/static/projects/pats.fossil differ
diff --git a/static/projects/xmagnify.fossil b/static/projects/xmagnify.fossil
new file mode 100644
index 0000000000000000000000000000000000000000..258d27d65a7f3a2fd27ae361250dfa8745557668
Binary files /dev/null and b/static/projects/xmagnify.fossil differ
diff --git a/tools/fossil-projects.sh b/tools/fossil-projects.sh
new file mode 100644
index 0000000000000000000000000000000000000000..bb6e67356f05003343e34b10d7dd9712967e0462
--- /dev/null
+++ b/tools/fossil-projects.sh
@@ -0,0 +1,17 @@
+set -xe
+
+OUT=../content/pages/projects.fossil.md.part
+
+echo -e "## Fossil repositories\n" > $OUT
+
+find ~/Projects/ -type f -name "*.fossil" -not -path "*/website/*" | while read -r file; do
+ cp $file ../static/projects/
+done
+
+find ../static/projects/ -type f -name "*.fossil" | while read -r file; do
+ base=$(basename "$file")
+ size=$(stat -c %s "$file" | numfmt --to=iec)
+ modified_date=$(stat -c %Y "$file")
+ formatted_date=$(date -d @"$modified_date" +"%Y-%m-%d %H:%M:%S")
+ echo -e "- [$base](/projects/$base)
Size: $size, Modified: $formatted_date" >> $OUT
+done
diff --git a/tools/projects.py b/tools/github-projects.py
rename from tools/projects.py
rename to tools/github-projects.py
index 65cea8d6f828ad97499bc3a9346711cd72e4ce16..e2afe958c466d98892fe2e1b9ab4a7e5cf5b85e3 100644
--- a/tools/projects.py
+++ b/tools/github-projects.py
@@ -12,17 +12,11 @@ headers = {
"Accept": "application/vnd.github.v3+json"
}
-
def generate_markdown_file(include_repositories):
- file = open("../content/pages/projects.md", "w")
+ file = open("../content/pages/projects.github.md.part", "w")
- file.write("---\n")
- file.write("title: Personal projects\n")
- file.write("date: 2024-10-21T12:00:00+02:00\n")
- file.write("url: projects.html\n")
- file.write("type: page\n")
- file.write("draft: false\n")
- file.write("---")
+ file.write(DOUBLE_NL)
+ file.write("## GitHub repositories")
file.write(DOUBLE_NL)
file.write("
")
@@ -76,8 +70,6 @@ file.write(DOUBLE_NL)
file.close()
-
-
def download_tarball(url, filepath):
with requests.get(url, stream=True, timeout=30) as response:
response.raise_for_status()
@@ -85,7 +77,6 @@
with open(filepath, "wb") as file:
for chunk in response.iter_content(chunk_size=8192):
file.write(chunk)
-
def assert_rate_limit(response):
rate_limit_limit = int(response.headers.get("x-ratelimit-limit"))
@@ -96,7 +87,6 @@ print(f"Reset time: {datetime.fromtimestamp(rate_limit_reset)}")
if rate_limit_remaining == 0:
sys.exit(1)
-
def fetch_github_data():
include_repositories = []
@@ -135,7 +125,6 @@ print(f" > {release['tag_name']}, {release['name']}, {release['filename']}")
download_tarball(release["tarball_url"], f"../static/projects/{release['filename']}")
return include_repositories
-
include_repositories = fetch_github_data()