Compare commits

..

No commits in common. "c0f2eec0ea53bdbf75cd662026379d692137ad81" and "e090a4bde5137c2a38bf37b277e7162600f56669" have entirely different histories.

15 changed files with 89 additions and 101 deletions

17
.github/workflows/cd.yml vendored Normal file
View file

@ -0,0 +1,17 @@
on:
push:
branches:
- master
jobs:
deploy:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Build and deploy zola
uses: shalzz/zola-deploy-action@master
env:
PAGES_BRANCH: gh-pages
TOKEN: ${{ secrets.PAT }}
BUILD_THEMES: true

1
CNAME
View file

@ -1 +0,0 @@
4rs.nl

View file

@ -1,20 +0,0 @@
OUT_DIR := "public"
@build:
zola build -o {{OUT_DIR}} --force
@deploy: build
#!/usr/bin/env bash
cd {{OUT_DIR}}
git init .
git checkout -B gh-pages
touch .nojekyll
git add .
git commit -m "Deploy blog to github pages"
git remote add origin $(git --git-dir ../.git remote get-url origin)
git push origin gh-pages -f
cd ..
rm -fr {{OUT_DIR}}
@install-tools:
echo "Run: `curl -s -L https://github.com/getzola/zola/releases/download/v0.18.0/zola-v0.18.0-x86_64-unknown-linux-gnu.tar.gz | sudo tar xvzf - -C /usr/local/bin`"

View file

@ -1,13 +1,3 @@
## My personal blog (Arabic) ## My personal blog (Arabic)
This is my personal blog, where I write about programming, open source, and other things that I find interesting. I write in Arabic This is my personal blog, where I write about programming, open source, and other things that I find interesting. I write in Arabic
## Deployment
> [!NOTE]
> This only works in Linux (and maybe MacOS).
To deploy this blog to GitHub Pages, you need to run `deploy` task in the `Justfile` file:
```bash
just deploy
```

View file

@ -1,4 +1,4 @@
base_url = "https://4rs.nl" base_url = "https://awiteb.is-a.dev"
default_language = "ar" default_language = "ar"
theme = "tabi" theme = "tabi"
@ -70,7 +70,7 @@ previous_next_article_links_full_width = false
# $AUTHOR will be replaced by the `author` variable. # $AUTHOR will be replaced by the `author` variable.
# $SEPARATOR will be replaced by the `separator` variable. # $SEPARATOR will be replaced by the `separator` variable.
# Markdown is supported (links, emphasis, etc). # Markdown is supported (links, emphasis, etc).
copyright = "© $CURRENT_YEAR $AUTHOR $SEPARATOR هذا المحتوى مرخص بموجب رخصة [المشاع الإبداعي 4.0](https://creativecommons.org/licenses/by-sa/4.0/deed.ar)" copyright = "© $CURRENT_YEAR $AUTHOR $SEPARATOR المحتوى الموجود في هذا الموقع متاح بموجب ترخيص [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/deed.ar)."
# Remote repository for your Zola site. # Remote repository for your Zola site.
# Used for `show_remote_changes` and `show_remote_source` (see below). # Used for `show_remote_changes` and `show_remote_source` (see below).
@ -138,9 +138,9 @@ favicon = "/favicon.png"
social_media_card = "img/social_cards/index.jpg" social_media_card = "img/social_cards/index.jpg"
menu = [ menu = [
{name = "blog", url = "b/"}, {name = "blog", url = "blog/"},
{name = "archive", url = "a/"}, {name = "archive", url = "archive/"},
{name = "projects", url = "p/"}, {name = "projects", url = "projects/"},
] ]
# Extra menu to show on the footer, below socials section. # Extra menu to show on the footer, below socials section.
@ -156,13 +156,13 @@ feed_icon = true
# Protect against spambots: # Protect against spambots:
# 1. Use base64 for email (convert at https://www.base64encode.org/ or `printf 'your@email.com' | base64`). # 1. Use base64 for email (convert at https://www.base64encode.org/ or `printf 'your@email.com' | base64`).
# 2. Or, set 'encode_plaintext_email' to true for auto-encoding (only protects on site, not in public repos). # 2. Or, set 'encode_plaintext_email' to true for auto-encoding (only protects on site, not in public repos).
email = "YUA0cnMubmw=" email = "QXdpdGViQHBtLm1l"
# Decoding requires ~400 bytes of JavaScript. If JS is disabled, the email won't be displayed. # Decoding requires ~400 bytes of JavaScript. If JS is disabled, the email won't be displayed.
encode_plaintext_email = false # Setting is ignored if email is already encoded. encode_plaintext_email = false # Setting is ignored if email is already encoded.
# The icons available can be found in "social_icons" in the "static" folder # The icons available can be found in "social_icons" in the "static" folder
socials = [ socials = [
{name = "forgejo", url = "https://git.4rs.nl/", icon = "forgejo"}, {name = "github", url = "https://github.com/TheAwiteb/", icon = "github"},
{name = "telegram", url = "https://t.me/TheAwiteb", icon = "telegram"}, {name = "telegram", url = "https://t.me/TheAwiteb", icon = "telegram"},
{name = "Bassam", url = "https://bassam.social/@me", icon = "mastodon"}, {name = "Bassam", url = "https://bassam.social/@me", icon = "mastodon"},
] ]

View file

@ -8,7 +8,7 @@ insert_anchor_links = "left"
[extra] [extra]
header = {title = "اهلآ، انا عويتب", img = "/img/awiteb-profile.png"} header = {title = "اهلآ، انا عويتب", img = "/img/awiteb-profile.png"}
section_path = "b/_index.md" section_path = "blog/_index.md"
social_media_card = "img/social_cards/index.jpg" social_media_card = "img/social_cards/index.jpg"
max_posts = 4 max_posts = 4
+++ +++

View file

@ -4,5 +4,4 @@ path = "archive"
template = "archive.html" template = "archive.html"
[extra] [extra]
section_path = "b/"
+++ +++

View file

@ -1,6 +1,6 @@
+++ +++
paginate_by = 5 paginate_by = 5
path = "/b" path = "/blog"
title = "تدويناتي" title = "تدويناتي"
sort_by = "date" sort_by = "date"
template = "section.html" template = "section.html"

View file

@ -26,14 +26,17 @@ social_media_card = "/img/social_cards/about.jpg"
### مكان إستضافتها ### مكان إستضافتها
يتم استضافتها على [GitHub Pages](https://pages.github.com/) وهي خدمة مقدمة من GitHub لإستضافة المواقع التي لاتتطلب خادم لتعمل. يتم استضافتها على [GitHub Pages](https://pages.github.com/) وهي خدمة مقدمة من GitHub لإستضافة المواقع التي لاتتطلب خادم لتعمل.
### النطاق المُستخدم
تستخدم المدونة نطاق [is-a.dev](https://is-a.dev) وهو نطاق مقدم من [Akshay Nair](https://github.com/phenax) إلى العامة لأخذ نطاق فرعي منه بشكل مجاني، لمعرفة المزيد يمكنك إلقاء نظرة على صفحة النطاق.
## طرق التواصل معي ## طرق التواصل معي
طريقة التواصل التي ستستخدمها للتواصل معي تعتمد على سبب التواصل، وهذه هي الطرق ويجب عليك اختيار طريقة التواصل المناسبة بناءً على سبب التواصل. طريقة التواصل التي ستستخدمها للتواصل معي تعتمد على سبب التواصل، وهذه هي الطرق ويجب عليك اختيار طريقة التواصل الصحيحة بناءً على سبب تواصل.
### تعليقات المدونة ### تعليقات المدونة
لكل تدوينة يوجد خانة تعليقات في أسفلها، ستستخدمها إذا كان سبب التواصل هو الإستفسار عن شيء يخص التدوينة نفسها ولا يخرج عن نطاقها. لكل تدوينة يوجد خانة تعليقات في أسفلها، ستستخدمها إذا كان سبب التواصل هو الإستفسار عن شيء يخص التدوينة نفسها ولا يخرج عن نطاقها.
### البريد الإلكتروني ### البريد الإلكتروني
تواصل معي عبر البريد الالكتروني إذا كان موضوعك لايتطلب الدردشة ويمكن الرد عليه برسالة واحدة. تجد البريد الخاص بي أسفل جميع صفحات المدونة، وستجد ايضآ مفتاح الـ PGP الخاص بي، ومن المهم أن تستخدمه عند إرسالك رسالة لي، [للمزيد](https://4rs.nl/pgp/). تواصل معي عبر البريد الالكتروني إذا كان موضوعك لايتطلب الدردشة ويمكن الرد عليه برسالة واحدة. تجد البريد الخاص بي أسفل جميع صفحات المدونة، وستجد ايضآ مفتاح الـ PGP الخاص بي، ومن المهم أن تستخدمه عند إرسالك رسالة لي، [للمزيد](https://awiteb.is-a.dev/pgp/).
### التيليجرام ### التيليجرام
تواصل معي عبر تطبيق التيليجرام إذا كان موضوعك يتطلب الدردشة ولايمكن الرد عليه برسالة واحدة. ستجد التيليجرام الخاص بي أسفل جميع صفحات المدونة تواصل معي عبر تطبيق التيليجرام إذا كان موضوعك يتطلب الدردشة ولايمكن الرد عليه برسالة واحدة. ستجد التيليجرام الخاص بي أسفل جميع صفحات المدونة

View file

@ -14,57 +14,57 @@ social_media_card = "/img/social_cards/pgp.jpg"
<summary>مفتاح الـPGP</summary> <summary>مفتاح الـPGP</summary>
<div dir=ltr> <div dir=ltr>
```txt ```plaintext
-----BEGIN PGP PUBLIC KEY BLOCK----- -----BEGIN PGP PUBLIC KEY BLOCK-----
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
Q6W3yUjcrXRCIftqkLZ87dO+AkkhtCmFFCqhd94= IJtqbB8SmKxXEU1kiIALlOGmPkHMASb30SrB1zftwZLw
=9prh =oSci
-----END PGP PUBLIC KEY BLOCK----- -----END PGP PUBLIC KEY BLOCK-----
``` ```
@ -77,4 +77,4 @@ Q6W3yUjcrXRCIftqkLZ87dO+AkkhtCmFFCqhd94=
## تنويه قبل الإرسال ## تنويه قبل الإرسال
يُفضل إرفاق مفتاحك العام مع الرسالة، ليمكنني الرد عليك بشكل آمن يُفضل إرفاق مفتاحك العام مع الرسالة، ليمكنني الرد عليك بشكل آمن
[pgp.help]: https://pgp.help/#/permalink?pgp=-----BEGIN%20PGP%20PUBLIC%20KEY%20BLOCK-----%0A%0AmQINBGXeB%2BoBEACmdJ1TsCoVpFH5echFXkfNBYea3JYqlIqdobqfA1E2LQUffY%2Bh%0ApvsdIkYs%2BUQzLDmFn%2FMbrRJOiNqxNEOAXGU3ofX4Qd%2F8S9lzMab9%2FW3JrqiJfnus%0A2aOHemLR5uOyc6vIWWdqT7azK2gTLPQqJ8OTpDNYUN%2FM6aQyn9eYJY9TgwymORVF%0AnXwgdEP0qTyYgmmpyxd52ux3c6VGTrVBNPSkkCWQlVl7qInbfFbfkB2RI7LpgHIw%0APXwuvGA4SRdtYa0qPcBXtJwO746l74X9qe9TqYtdpC%2BDZuAy0cCJkOel96SgmGTm%0AnVqnK7FzckzgbPP7pC88xIPdjQi%2FyXqKq4GZq53trYM6y%2FmCJBycAEhf%2Fu%2B%2Bn4Yk%0ABVcyXK51TDUr8UTlj%2Fky7gQJbXOlwk30lfi7JqOjWK8aFHm0xQ8oL6bfbJmSVZVL%0ALcy9DPoUMHOx%2BJSP%2FgKnUVFWRmgGdx3r%2Bl1kGnuDSmAKABviwqXoESr%2FBsFsFZ4%2F%0AZvYQb2l5zhKa%2BZi5ACYzcnmmLChiwcXlg1HVxeivu4r6Go8hk42DxIuZ9vq359Va%0AF7Og%2BR8S2nY8ALEIXcUR%2BvsW%2F6c69zlFqdtF%2FZZvBZeCRYfozwKI6m4NACKOPFDJ%0A5MVeVf5MhoJR372ZmVGPmwbYhHMOy8%2B9qTxPqESm2J%2BP%2B2Ii%2FXxuoUZAkwARAQAB%0AtBFBd2l0ZWIgPGFANHJzLm5sPokCTgQTAQoAOBYhBE8OBoaxyFC6%2Be2f3z9rVWQK%0ApmgvBQJl3gfqAhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJED9rVWQKpmgv%0A6dsP%2FRHIO5VhblfdWQl9xjBf8C4NiwcBONy49BfVbt6XCH31E4xBGGF3ZJq4aSwb%0ABbCvGA5jM2nsT1%2Fb3p5%2BuCEbPmo0XiDnStsx5YDuivI2zJOHjW7Dddm4hsIjALrH%0ApkOqAlSqZbDiKzEurGmdR3fAos0v3%2BaWzr%2FMGh%2B2PVG81BBS3qs%2BEdWWxkrDZcUs%0AFV7Wwh2v0t7kDBs6Hdbnwynl9h78%2FnE%2BDvkTTnjCFHDNVRmhUMJmmqBvmmZh1oAn%0ADxo6Xzhq6MVP%2B%2FK37VvBrwdBhJ3wWX11GqPdsDX%2BvE17orswEe5XP1oMIr9PYZ2Q%0AZAzzrhylq8FEVJYB5zulxstyTw6L%2F6aThI0syNYzytva02fW5TJHe9Z%2BfTN4grtK%0AGwu%2FvwYsU2ZkG7qsvyMg1SQ1wjkyYrnKiZiCW1hTUI1bRmEZb8RoJ3NA2yzcRWUW%0Ap1Rub1swFzdyDbdIKymjdUYaZ%2B0soRzcy6zqQDXNGQFVUGsbemd%2F%2FR3CNdTWaHDz%0A8cYpEQdMASAOMXI%2F6BUsAu0RIoX4tnv2T5QfdvHAG6pmtvqetFHnJ7J78a82tzQx%0AtJywsfVvOsU7Aui6NO2PqKIE5zsV3xFrDExKF3LCyNE4dQxzF%2BadSiopkti9ChzP%0Ap2VPGAIip39jpt%2FXf0YR5QZ36hm9RGfjW7PnnZbkm%2BZQ%2B1PbuQINBGXeB%2BoBEAC%2B%0A36opwrd%2BZznKoC8VZKSYHCtzOr69ZlQ4ZId3%2FAC9SOglGrcp3wwuMfMICwo9TxWk%0AvQmFW73F8GTds7pai40o0ykQ6DrAznznd9tVud4e7%2BgysoEyrryz1PzLojQqkRNJ%0AF4ZVm%2BkzbC5q8behVoCIkfKjew8tVd%2BZF3YCizwSDM%2FR3nlpLuSipgmReNg55D6c%0ALalTlH4%2BfV3LzjEUVLxQZXqwFWilzHns7n0T1R1Qat%2FxpGA93zMXMbIHUGnaFoRh%0AK1L2souhaOwYPMRcssvHg%2BP9tci9F3f9pkwtZpqvAUx%2FDCdH3n4ZlGMyNuDEp%2Bc1%0A6R2ZpoT7hcvPMvTEXCT7zlIRzVFPiu4dgquLIoNO32Job5AqlAJi5%2BWMIt5NHyvw%0AOq6QTQL0nzE8ZJTsXDUbaw45QIAyam1qbMy4TJ%2Fu0E7BDpUowIjTaHModaFQfEeH%0AqQMT4jguFKYgX5OwRFEUfI%2Bon6c0NbhCzQ0pCDawqZHKvtnYKlhlNu36Zx0ZN7dP%0AdciYFeVwb9b9vR%2FRwhLedcLxZtPHQs0CUj37Xo7UvoniVKEbJDfZ3UkPAX51bREY%0AEdwZuTgHkhNeMNow7HaDDHoZttMYglNBon9%2BMKGiIMvoXagiL2fgKwTpR0yuYjUl%0AXU05MrN5FuNJoWrgrTkTkEw%2Bslr1qMPEFNr9PBGtxQARAQABiQI2BBgBCgAgFiEE%0ATw4GhrHIULr57Z%2FfP2tVZAqmaC8FAmXeB%2BoCGwwACgkQP2tVZAqmaC%2BrEg%2F%2FTVxZ%0A4G8tDUFcPREafaf%2B%2FJkeHS9wfPuGos3ayx4l3WlESG%2FvJqcusJSm%2Bc6VmEVksEbg%0AAl1rfcogbApw9wE3FO9fWZPLnJe1hLgT8gpza2I8T4OmMAm1XCp1H8JjJcxbQIc2%0A6bILu9rV92OFCnY2mK%2B%2B%2FZjJKON2UobuqB3g2KpuCvDI7ctTR2Pqmq%2BxVrBSf3ZY%0APXdD1whtubqf9%2FrWNFowv0oO0fVXab6Og7RdojYZWVqxm1LnPyMIBAXnCUVfhrza%0A1zbqWnP8TemtkLI3uhV%2BWf7SWC4wE6w3cH4awofijgwUe5rv5R5CgVf7ySjC7ojU%0AQ84aIm57nPFXEMEd6SGWtsRJublZ7queqt33DFWXK%2FDcT8f1pvBP12TO6omyB7pR%0Al%2Bn6wtnvZ51r27YOx%2BIh1PXjWvKTX%2BS7fnlUHA4X76EAg0CcCoSgBNYveaMhgnhk%0ADVJRol9AUoOoJUt9WdYSyzx7b9f6LrWLrkJKQHz3q1XV5yPuLLz14E%2BFvXPjmj1m%0AeoWb0Iat52gAxMlat4w6T8MP%2BNOxhQHnsjWh4SsodPAqOeu%2FzZZ5Z47CaaJD89Pl%0AuQ8wO1AyLZ5%2BsH3VXB7dpK2jDPykzV61OVWr6YhWaq5Gk3QG6PVcOKm9LBkp66OW%0AQ6W3yUjcrXRCIftqkLZ87dO%2BAkkhtCmFFCqhd94%3D%0A%3D9prh%0A-----END%20PGP%20PUBLIC%20KEY%20BLOCK----- [pgp.help]: https://pgp.help/#/permalink?pgp=-----BEGIN%20PGP%20PUBLIC%20KEY%20BLOCK-----%0D%0AVersion:%20OpenPGP.js%20v1.5.7%0D%0AComment:%20https:~2F~2Fpgp.help%0D%0A%0D%0AxsFNBGW4vgsBEADhexvUlbMz7X0QecUZgwvpzc1KHRSBTFS5Wgdz1xhOPMnY%0AT11zTLlxRpBdAaGXxJyaxavQqYyi9eqGqGvIhTVUM3zpixAydhPM1Z0gR6Sv%0Ave9AqGjJQDrLwRBujHd0YF8ke4xVHkkaYJGIIWbMp~2FyTVj4InhppBMi6rWRM%0AZyKyOIIuFvPh1IsMxlinEOec8G7~2FCQy8y1v1Js9PakQrSBJMaxRIOuZSacir%0AZU5qUFbthikUynyJ%2BjrEJMwKIg2jeWuDdO2b0928iKj5hOSEu96KOQYuLGbo%0A3VQGMi3PwFZAhrjdeF8Mb5a2BDbPGbtG3u9bhpLTYvrbdD0urStsMXUxVDfO%0AAnt1UQNkrfjhYcNlPyvcMZRbQFgy2nwGminot~2Fi1nEsFHEcYMow2d8sGJYC9%0Ai7A6oC2V4LwAuFzWZ68qgYebBllp7bkAwK7JMgYKRBmxBJD%2B5CP4ihVjcuM9%0AyZr10kFBBqGQUVOLGtEnshXUmJ1iB%2BzYwXBIEVn0cSe1MGUvLIgKb~2F0APItG%0AJJD%2B1hJDnr9RQPDtSGTH67rT3~2FMGQtjR6YiTm7AVCvkbrTx6nBT7jtCs27my%0AL2FT5TrlOTZhBcNrzcczempvJ~2FC%2BQJWIlbMxG1OC77kbi4kZI0ru0cHT3Lhi%0A7PzPIk~2FuZ%2Ba1oX4EAIgIYKVRZlQhD98gDLYMjwARAQABzRVBd2l0ZWIgPEF3%0AaXRlYkBwbS5tZT7CwY4EEwEKADgWIQQEp7LcqFGCpldziCQWyK0LScOciAUC%0AZbi%2BCwIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRAWyK0LScOciATu%0AEACAJdT~2F8w5MOi8lda~2FS2QVCURKhj0HPcHl0Nb7%2BZuhB~2FZvYCM55wFl86eq2%0AvUTdO11FC567TXMbMjxeM~2F4UvPPUdeR6q%2Bvwi4Xvepq0JW0QN8qa9DX3FRfK%0ANonoZKN~2FKwpgdRwuecw1OeaSfZvjkWZjpRIZJG~2F0d5HlLZIPRHLgRCmd2tPq%0AZNV79evijqQnhHaw8AKB9cNGaCUpVp%2BRzfEo7DYd4U2~2FpP%2BI5f7qYq2gjEK3%0Ah1a34Qz0g0nH8q77KKZYyCyXMqa%2BmYWC3~2F0Y6MfRRCoG6NxP6A9SdQAw~2FGu7%0AsfxsprUqT~2FXkGeohcpLcB1AcFOR5fD6FAmEgmmz~2FtNDBKffAl07NnrytibUc%0AESbVO0qSB%2B~2FibO14~2Fi1BlU~2F4JGKLfOrnx9%2BV76gI8shnyAOFDwlj6wPQDrK~2F%0ABUKGjY48T~2FyEkWGiiiV16fUBNp%2Bp2RDIdRX4wEX6ThBzjQXwf43isWTm9HN~2F%0Aarl~2FheD9VFHkbiUQrTXq8qLUl2hqNqmPodLO8~2FyIoJuQIVZBppOAkLHpM%2B6t%0AsLw~2Fcou31msXrwp~2FV76vJzP1bVWsa8bEW%2BjRBiR59fF4gePmULBo~2Fn%2BhoMxP%0AfsQq4~2FG8%2B%2BrvhinBWqjgubmEJDrG0qrELbCj1~2F1C~2F1Uw5labutKFDlHrfw2c%0ALHVHPz0lV6tXatXb0iRDcLcLNM7BTQRluL4LARAArgd~2F9Zp0aBpjfiOHVG47%0ADNnINDk5fkGkhleVBb1HPnCObiQFQte~2FcwJJzkZ4sPu%2BD0Xv88usYCcBwav5%0A4QcBTiQHj6ixjzQz7P%2BD7LHEBLkoj9XJHB9fFXKdt23t2YQ4L2xvh62tlds2%0AyZ4bIy3YehOc%2B%2Bc0USmaRLIxFfCDuPe7nzSKPWtro5T7V1ndRJVxtw8igqzL%0AongALvoNY8i~2F%2BtghuVqcvSXDYnmVJx4ciuI%2BwP0~2FUf0yERJfEXIbSEQaypRY%0A%2BmTZ66zLQG2PU0upywWFmdgRt%2BZumLmb5UTTqYNwBdaRQWg3E3OlFeFGUFKd%0AkeB0NX74Ig1HA~2F%2BFlT9w6Omf9U9OeQdrH4nrNYME0GYb5uskxFbe5omrHrA~2F%0AxCfDVsp65kJSztxtD6VKUwijydmRtfWMtudIkihFhXMd1v0E%2BL%2BIBPkC4neN%0AJJzEqya8xOUocR2NNbQbd7WrzuHnKoXMnJKsVFyaJs3mevZNaCLx1M3rKf6O%0ALKT2y~2F94nx%2BreU%2BaTJ67GPHvoWJiXyaa2eRE1HJ78t1YiZpJh1x0YvXIwofP%0At6XCpAgD75QrvCglVqClKcNAXv~2FwZeC0hWUCqLNuwZ8IX93pOZAP23vNmtji%0Ai~2FgH5QNXRaaJtc%2Ba8ivDr8iPqcUJeph46dM9Mkd25iZ%2BFhw5t5rx621dTFaa%0ALDcAEQEAAcLBdgQYAQoAIBYhBASnstyoUYKmV3OIJBbIrQtJw5yIBQJluL4L%0AAhsMAAoJEBbIrQtJw5yIM5EP~2F2pwGwgKpxPcTOFpAnIqqeR87i~2F8yDe~2FRY%2Bl%0AXgFEmwQhRxWIBPJihISQNCF32Jw47uYxzZG~2Farjim~2FYwVmqHFFqoV02sYOxx%0AYzDUkwGQfoIumO4awb5MbrImr08TPyTi65mUXvJTVWJAQus19QZEF0162c6N%0Acxo7Cuiiujt3h96RdtiH8dY%2BCMYHERfwYi3NP1Yy8LMHeyRjXLOn%2B5vsbnaj%0Ag1aZybFU57psCzfh0nLbdXnlJU08euORPs3Gq%2BsVW60JF9jfKdsMQX0TMVNu%0ACfS3ZtFDPXtrGJcZd%2BsTqYO%2BO2rwtj0vNmaVe892RMGFmHeMhNEa3KZEFngJ%0AykjTSFR~2FzOw%2BRtCwTNdOkH3ZlyC7tC0oFi86mGbiS8zY1TyRvfnbLVcy8D0y%0AmjQ9J35ZTK8HmdQhU1cD04ES1avfO5xksgZITY3Nwahld9PudXPRJcppQUUR%0AoZjK7E28%2BUOBemW~2Fsm%2BO7%2BWjIHAWi0FVfUA6Y~2FcLY87tUDAh4hKjyE0Fg%2BIw%0AsICIu%2BtsCf965AldFEKVsuTwUhLuJInEHEQcWlGoZBfkkxbJl%2BNWWtuEKF08%0A8Z~2FNq3GTmbF2KTKBG1jMWOVRUBtl1rNdh8%2BGhfpVMPvdYTBg0L5Sk~2Fl8Qki7%0AaO8qIJtqbB8SmKxXEU1kiIALlOGmPkHMASb30SrB1zftwZLw%0D%0A%3DJTtY%0D%0A-----END%20PGP%20PUBLIC%20KEY%20BLOCK-----%0D%0A%0D%0A

View file

@ -5,9 +5,9 @@ weight = 30
[extra] [extra]
local_image = "/img/projects/salvo-captcha/banner.png" local_image = "/img/projects/salvo-captcha/banner.png"
canonical_url = "https://4rs.nl/p/salvo-captcha/" canonical_url = "https://awiteb.is-a.dev/projects/doteki/"
+++ +++
<!-- social_media_card = "/img/projects/salvo-captcha/social.jpg" --> <!-- social_media_card = "social_cards/projects_doteki.jpg" -->
هي وسيطة تساعدك على اضافة CAPTCHA إلى تطبيقك بسهولة. هي وسيطة تساعدك على اضافة CAPTCHA إلى تطبيقك بسهولة.

View file

@ -6,7 +6,7 @@
# - Update the header of an article or add a new header (command: update) # - Update the header of an article or add a new header (command: update)
# #
# License: MIT License # License: MIT License
# Copyright: (c) 2024 Awiteb <a@4rs.nl> # Copyright: (c) 2024 Awiteb <Awiteb@pm.me>
import sys import sys
@ -52,7 +52,7 @@ def now() -> str:
class Article: class Article:
def __init__(self, name: str) -> None: def __init__(self, name: str) -> None:
self.name = name self.name = name
self.path = f"content/b/{name}/index.md" self.path = f"content/blog/{name}/index.md"
self.headers = { self.headers = {
"global": {}, "global": {},
"taxonomies": {}, "taxonomies": {},

View file

@ -1,11 +1,11 @@
#! /usr/bin/env nu #! /usr/bin/env nu
def main () { def main () {
let paths: list<string> = (git diff --name-only | split row "\n" | filter {|p| $p | str contains "content/b"}); let paths: list<string> = (git diff --name-only | split row "\n" | filter {|p| $p | str contains "content/blog"});
let posts: string = (ls content/b | filter {|p| $p.type == "dir"} | each {|p| $p.name | sed 's/content\/b\///g'}); let posts: string = (ls content/blog | filter {|p| $p.type == "dir"} | each {|p| $p.name | sed 's/content\/blog\///g'});
for post in $posts { for post in $posts {
if $"content/b/($post)/index.md" in $paths { if $"content/blog/($post)/index.md" in $paths {
echo $"`($post)` post has been modified"; echo $"`($post)` post has been modified";
python3 ./scripts/article.py card $post python3 ./scripts/article.py card $post
python3 ./scripts/article.py update $post "global" "updated" $"(date now | format date '%Y-%m-%d')" python3 ./scripts/article.py update $post "global" "updated" $"(date now | format date '%Y-%m-%d')"

@ -1 +1 @@
Subproject commit 07cc4e201d47c946f3e1c1ec16e22f9f34f390b4 Subproject commit 8537e301f7656870255f9066aed9aa874f7c168d