From 225d0f4b253a4bc7f4c90cef98a08de2dbb52e8f Mon Sep 17 00:00:00 2001 From: Rakarake Date: Sat, 28 Mar 2026 21:00:43 +0100 Subject: [PATCH 01/14] wow --- flake.nix | 1 + push.sh | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100755 push.sh diff --git a/flake.nix b/flake.nix index 4b0b867..5a56704 100644 --- a/flake.nix +++ b/flake.nix @@ -25,6 +25,7 @@ rust-analyzer gcc zig-overlay.packages."x86_64-linux".master + curl ]; buildInputs = with pkgs; [ libdisplay-info diff --git a/push.sh b/push.sh new file mode 100755 index 0000000..3b30755 --- /dev/null +++ b/push.sh @@ -0,0 +1,7 @@ +#!/bin/sh +for file in $(find public -type f) +do + echo "uploading: $file" + curl -X PUT --data @$file -u "Rakarake:h7us3lTlFWVaRTKq16" https://mdf.farm/api/$file +done + From 94d12da846241d88ee2c8578eadd412b5956dab0 Mon Sep 17 00:00:00 2001 From: Rakarake Date: Sat, 28 Mar 2026 21:09:52 +0100 Subject: [PATCH 02/14] donzo --- blogs/day7.md | 7 ++++--- push.sh | 2 +- test.sh | 5 +++++ upload.sh | 1 - 4 files changed, 10 insertions(+), 5 deletions(-) create mode 100755 test.sh delete mode 100755 upload.sh diff --git a/blogs/day7.md b/blogs/day7.md index 2814f1a..218064e 100644 --- a/blogs/day7.md +++ b/blogs/day7.md @@ -1,5 +1,6 @@ -title: A statement +title: Infrastructure complete author: Rakarake -pubDate: Fri, Mar 27 2026 +pubDate: Sat, Mar 28 2026 --- -Kyuuuuuuu! 🐳 +It's been done 🐍🥰💕. + diff --git a/push.sh b/push.sh index 3b30755..5b2db9d 100755 --- a/push.sh +++ b/push.sh @@ -2,6 +2,6 @@ for file in $(find public -type f) do echo "uploading: $file" - curl -X PUT --data @$file -u "Rakarake:h7us3lTlFWVaRTKq16" https://mdf.farm/api/$file + curl -X PUT --data @$file -u "Rakarake:h7us3lTlFWVaRTKq16" https://mdf.farm/api/${file#*/} done diff --git a/test.sh b/test.sh new file mode 100755 index 0000000..c416550 --- /dev/null +++ b/test.sh @@ -0,0 +1,5 @@ +x=a/b/c/d +y=a/ +echo ${x#a/} +echo ${x#$y} +echo ${x#*/} diff --git a/upload.sh b/upload.sh deleted file mode 100755 index 730c2c4..0000000 --- a/upload.sh +++ /dev/null @@ -1 +0,0 @@ -rsync -rvz -e 'ssh -p 8022' --progress public/* rakarake@chat.mdf.farm:/data/website From fde9e32fe00bca53169a48c040662ed0dbae7291 Mon Sep 17 00:00:00 2001 From: Rakarake Date: Sat, 28 Mar 2026 21:27:33 +0100 Subject: [PATCH 03/14] nice --- push.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/push.sh b/push.sh index 5b2db9d..edfda1c 100755 --- a/push.sh +++ b/push.sh @@ -2,6 +2,6 @@ for file in $(find public -type f) do echo "uploading: $file" - curl -X PUT --data @$file -u "Rakarake:h7us3lTlFWVaRTKq16" https://mdf.farm/api/${file#*/} + curl -X PUT --data @$file -u "$USER:$PASSWORD" https://mdf.farm/api/${file#*/} done From a237f584dc214a04df11755f144b11ef83be1809 Mon Sep 17 00:00:00 2001 From: Rakarake Date: Sat, 28 Mar 2026 21:38:22 +0100 Subject: [PATCH 04/14] yeay --- blogs/day8.md | 5 +++++ new.sh | 4 ++++ src/main.rs | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 blogs/day8.md create mode 100755 new.sh diff --git a/blogs/day8.md b/blogs/day8.md new file mode 100644 index 0000000..31b48b5 --- /dev/null +++ b/blogs/day8.md @@ -0,0 +1,5 @@ +title: We love slop +author: Rakarake +pubDate: Sat, Mar 28 2026 +--- +🐖 diff --git a/new.sh b/new.sh new file mode 100755 index 0000000..5e7c7d8 --- /dev/null +++ b/new.sh @@ -0,0 +1,4 @@ +printf "name of file (e.g. day67.md): " +read filename +cargo run -- new > blogs/$filename + diff --git a/src/main.rs b/src/main.rs index b2b39f2..a98c61f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,7 +3,7 @@ use markdown::to_html; use rss::{Channel, GuidBuilder, ItemBuilder}; fn main() -> io::Result<()> { - let posts = std::env::args().skip(2).map(|f| { + let posts = std::env::args().skip(2).rev().map(|f| { let contents = std::fs::read_to_string(f.clone())?; // parse metadata, then the rest to html let mut metadata: HashMap = contents.lines().take_while(|l| { From af8b7ba27999e98a9c7bf85490dcbdd6fa0973fc Mon Sep 17 00:00:00 2001 From: Rakarake Date: Sat, 28 Mar 2026 21:52:12 +0100 Subject: [PATCH 05/14] readme --- README.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..d914aab --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +- Use `./new.sh` to create new blogpost in ./blogs. +- Use `./run.sh` to generate all output files in "./public" +- Use `USERNAME="your username" PASSWORD="your password" ./push.sh` to + push to server. From abbb7b7e2e52de8d284730ff2a420c6f25b8b8fd Mon Sep 17 00:00:00 2001 From: Rakarake Date: Sun, 29 Mar 2026 18:07:12 +0200 Subject: [PATCH 06/14] the culprit --- push.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/push.sh b/push.sh index edfda1c..f42d4e3 100755 --- a/push.sh +++ b/push.sh @@ -2,6 +2,6 @@ for file in $(find public -type f) do echo "uploading: $file" - curl -X PUT --data @$file -u "$USER:$PASSWORD" https://mdf.farm/api/${file#*/} + curl -u "$USER:$PASSWORD" https://mdf.farm/api/${file#*/} --upload-file $file done From 0beaa152b446fce4a9b30f4f1197d1df6c7999f9 Mon Sep 17 00:00:00 2001 From: Rakarake Date: Wed, 1 Apr 2026 20:23:13 +0200 Subject: [PATCH 07/14] wow --- README.md | 3 ++- blogs/day8.md | 2 +- blogs/day9.md | 9 +++++++++ new.sh | 1 + 4 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 blogs/day9.md diff --git a/README.md b/README.md index d914aab..38032ea 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -- Use `./new.sh` to create new blogpost in ./blogs. +- Use `./new.sh` to create new blogpost in ./blogs. This will open your + editor defined by the EDITOR environment variable. - Use `./run.sh` to generate all output files in "./public" - Use `USERNAME="your username" PASSWORD="your password" ./push.sh` to push to server. diff --git a/blogs/day8.md b/blogs/day8.md index 31b48b5..fcd57bf 100644 --- a/blogs/day8.md +++ b/blogs/day8.md @@ -2,4 +2,4 @@ title: We love slop author: Rakarake pubDate: Sat, Mar 28 2026 --- -🐖 +🐖🐖 diff --git a/blogs/day9.md b/blogs/day9.md new file mode 100644 index 0000000..d8f8bff --- /dev/null +++ b/blogs/day9.md @@ -0,0 +1,9 @@ +title: NEW MDF MEMBER IN AGES +author: Rakarake +pubDate: Wed, Apr 1 2026 +--- +Welcome Loriik! + +Huge moment for the MDF, the interview process was long and tedious. +Hundreds of candidates. Many work hours. (real). + diff --git a/new.sh b/new.sh index 5e7c7d8..d6b9ffe 100755 --- a/new.sh +++ b/new.sh @@ -1,4 +1,5 @@ printf "name of file (e.g. day67.md): " read filename cargo run -- new > blogs/$filename +$EDITOR blogs/$filename From 36c39671708e1feeb309418d1d7195de6e491899 Mon Sep 17 00:00:00 2001 From: Rakarake Date: Sun, 5 Apr 2026 21:19:40 +0200 Subject: [PATCH 08/14] fixed rss order --- flake.lock | 71 +---------------------------------------------------- flake.nix | 27 ++------------------ src/main.rs | 47 ++++++++++++++++++----------------- 3 files changed, 27 insertions(+), 118 deletions(-) diff --git a/flake.lock b/flake.lock index 6f8bad3..e3816b4 100644 --- a/flake.lock +++ b/flake.lock @@ -1,21 +1,5 @@ { "nodes": { - "flake-compat": { - "flake": false, - "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, "flake-utils": { "inputs": { "systems": "systems" @@ -66,28 +50,11 @@ "type": "github" } }, - "nixpkgs_3": { - "locked": { - "lastModified": 1771043024, - "narHash": "sha256-O1XDr7EWbRp+kHrNNgLWgIrB0/US5wvw9K6RERWAj6I=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "3aadb7ca9eac2891d52a9dec199d9580a6e2bf44", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-25.11", - "repo": "nixpkgs", - "type": "github" - } - }, "root": { "inputs": { "flake-utils": "flake-utils", "nixpkgs": "nixpkgs", - "rust-overlay": "rust-overlay", - "zig-overlay": "zig-overlay" + "rust-overlay": "rust-overlay" } }, "rust-overlay": { @@ -122,42 +89,6 @@ "repo": "default", "type": "github" } - }, - "systems_2": { - "flake": false, - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, - "zig-overlay": { - "inputs": { - "flake-compat": "flake-compat", - "nixpkgs": "nixpkgs_3", - "systems": "systems_2" - }, - "locked": { - "lastModified": 1772540502, - "narHash": "sha256-HXlx2i9gGH2HKfBSMihKCvU6DQMVlR4iyOulkSOe+Cg=", - "owner": "mitchellh", - "repo": "zig-overlay", - "rev": "03fa375def0685b8ce282f118452532845f16a20", - "type": "github" - }, - "original": { - "owner": "mitchellh", - "repo": "zig-overlay", - "type": "github" - } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 5a56704..e41a803 100644 --- a/flake.nix +++ b/flake.nix @@ -5,10 +5,9 @@ nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; # or whatever vers flake-utils.url = "github:numtide/flake-utils"; rust-overlay.url = "github:oxalica/rust-overlay"; - zig-overlay.url = "github:mitchellh/zig-overlay"; }; - outputs = { self, nixpkgs, flake-utils, rust-overlay, zig-overlay, ... }: + outputs = { nixpkgs, flake-utils, rust-overlay, ... }: flake-utils.lib.eachDefaultSystem (system: let overlays = [ (import rust-overlay) ]; @@ -17,35 +16,13 @@ }; in { - devShell = pkgs.mkShell rec { - LD_LIBRARY_PATH = "${pkgs.lib.makeLibraryPath buildInputs}"; + devShell = pkgs.mkShell { packages = with pkgs; [ rustc cargo rust-analyzer - gcc - zig-overlay.packages."x86_64-linux".master curl ]; - buildInputs = with pkgs; [ - libdisplay-info - libgbm - #mesa - libinput - pixman - seatd - udev - libxkbcommon - wayland - wayland.dev - wayland-protocols - libGL - vulkan-headers vulkan-loader - vulkan-tools vulkan-tools-lunarg - vulkan-extension-layer - vulkan-validation-layers # don't need them *strictly* but immensely helpful - #libglvnd - ]; }; } ); diff --git a/src/main.rs b/src/main.rs index a98c61f..41ec8ff 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,9 @@ use std::{collections::HashMap, io, path::Path}; use markdown::to_html; -use rss::{Channel, GuidBuilder, ItemBuilder}; +use rss::{Channel, ChannelBuilder, GuidBuilder, Item, ItemBuilder}; fn main() -> io::Result<()> { - let posts = std::env::args().skip(2).rev().map(|f| { + let posts = std::env::args().skip(2).map(|f| { let contents = std::fs::read_to_string(f.clone())?; // parse metadata, then the rest to html let mut metadata: HashMap = contents.lines().take_while(|l| { @@ -31,30 +31,31 @@ fn main() -> io::Result<()> { if let Some(mode) = std::env::args().skip(1).next() { match mode.as_str() { "rss" => { - let mut channel = Channel::default(); - channel.title = "MDF blog huge".to_string(); - channel.link = "https://mdf.farm".to_string(); - channel.description = "The MDF blog".to_string(); - channel.generator = Some("Rakabaka's tooling".to_string()); - channel.items = posts.iter().map(|(body, metadata)| { - let guid = metadata.get("guid").map(|guid| - GuidBuilder::default() - .value(guid) - .permalink(false) - .build() - ); - ItemBuilder::default() - .title(metadata.get("title").map(|title| title.clone())) - .description(Some(body.clone())) - .pub_date(metadata.get("pubDate").map(|title| title.clone())) - .link(metadata.get("guid").map(|g| format!("https://mdf.farm/#{g}"))) - .guid(guid) - .build() - }).collect(); + let channel = ChannelBuilder::default() + .title("MDF blog huge".to_string()) + .link("https://mdf.farm".to_string()) + .description("The MDF blog".to_string()) + .generator(Some("Rakabaka's tooling".to_string())) + .items(posts.iter().map(|(body, metadata)| { + let guid = metadata.get("guid").map(|guid| + GuidBuilder::default() + .value(guid) + .permalink(false) + .build() + ); + ItemBuilder::default() + .title(metadata.get("title").map(|title| title.clone())) + .description(Some(body.clone())) + .pub_date(metadata.get("pubDate").map(|title| title.clone())) + .link(metadata.get("guid").map(|g| format!("https://mdf.farm/#{g}"))) + .guid(guid) + .build() + }).collect::>()) + .build(); print!("{}", channel); }, "html" => { - print!("{}", posts.iter().enumerate().map(|(i, (body, metadata))| { + print!("{}", posts.iter().rev().enumerate().map(|(i, (body, metadata))| { let guid = metadata.get("guid").unwrap_or(&i.to_string()).clone(); let title = metadata.get("title").map(|title| format!("

{title}

")).unwrap_or("".to_string()); let pub_date = metadata.get("pubDate").map(|pub_date| format!("{pub_date}")).unwrap_or("".to_string()); From f398e4336daadec562de62d3e75c252d41187a81 Mon Sep 17 00:00:00 2001 From: Rakarake Date: Sun, 5 Apr 2026 22:07:32 +0200 Subject: [PATCH 09/14] nix package, better errors --- flake.nix | 10 +++++++++- src/main.rs | 7 ++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/flake.nix b/flake.nix index e41a803..84f3dd5 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,5 @@ { - description = "Rust flake"; + description = "mdf-blog"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; # or whatever vers @@ -16,6 +16,14 @@ }; in { + defaultPackage = pkgs.rustPlatform.buildRustPackage { + name = "mdf-blog"; + pname = "mdf-blog"; + src = ./.; + cargoLock = { + lockFile = ./Cargo.lock; + }; + }; devShell = pkgs.mkShell { packages = with pkgs; [ rustc diff --git a/src/main.rs b/src/main.rs index 41ec8ff..00dc41e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,9 +2,10 @@ use std::{collections::HashMap, io, path::Path}; use markdown::to_html; use rss::{Channel, ChannelBuilder, GuidBuilder, Item, ItemBuilder}; -fn main() -> io::Result<()> { +fn main() -> Result<(), String> { let posts = std::env::args().skip(2).map(|f| { - let contents = std::fs::read_to_string(f.clone())?; + let contents = std::fs::read_to_string(f.clone()).map_err(|e| format!("when reading file {f} got {e}"))?; + // parse metadata, then the rest to html let mut metadata: HashMap = contents.lines().take_while(|l| { // header ends here @@ -26,7 +27,7 @@ fn main() -> io::Result<()> { }).concat(); Ok((to_html(&body), metadata)) - }).collect::)>, io::Error>>()?; + }).collect::)>, String>>()?; if let Some(mode) = std::env::args().skip(1).next() { match mode.as_str() { From 1efb3f5e692afdfea2517245afe779151af82132 Mon Sep 17 00:00:00 2001 From: Rakarake Date: Sun, 5 Apr 2026 22:48:57 +0200 Subject: [PATCH 10/14] using binary in project root instead --- .gitignore | 1 + run.sh | 6 ++++-- test.sh | 5 ----- 3 files changed, 5 insertions(+), 7 deletions(-) delete mode 100755 test.sh diff --git a/.gitignore b/.gitignore index d556b87..ca16980 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ index.html blog-tmp.html public/index.html public/rss.xml +mdf-blog diff --git a/run.sh b/run.sh index 7f08741..94ca468 100755 --- a/run.sh +++ b/run.sh @@ -1,8 +1,10 @@ #/bin/sh -cargo run -- html blogs/* > blog-tmp.html +cargo build && cp target/debug/mdf-blog . || true + +./mdf-blog html blogs/* > blog-tmp.html sed template.html -e '/INSERT_HERE/{ r blog-tmp.html d }' > public/index.html -cargo run -- rss blogs/* > public/rss.xml +./mdf-blog rss blogs/* > public/rss.xml diff --git a/test.sh b/test.sh deleted file mode 100755 index c416550..0000000 --- a/test.sh +++ /dev/null @@ -1,5 +0,0 @@ -x=a/b/c/d -y=a/ -echo ${x#a/} -echo ${x#$y} -echo ${x#*/} From 08ab6070d42e50031c2077688ccb4296a8436564 Mon Sep 17 00:00:00 2001 From: Rakarake Date: Sun, 5 Apr 2026 23:11:43 +0200 Subject: [PATCH 11/14] better run.sh --- run.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/run.sh b/run.sh index 94ca468..a5d9d19 100755 --- a/run.sh +++ b/run.sh @@ -1,10 +1,12 @@ #/bin/sh cargo build && cp target/debug/mdf-blog . || true -./mdf-blog html blogs/* > blog-tmp.html +BLOGS=$(ls $PWD/blogs/*) + +./mdf-blog html $BLOGS > blog-tmp.html sed template.html -e '/INSERT_HERE/{ r blog-tmp.html d }' > public/index.html -./mdf-blog rss blogs/* > public/rss.xml +./mdf-blog rss $BLOGS > public/rss.xml From 6a5baa5416941bde84a4969d025e198469307c61 Mon Sep 17 00:00:00 2001 From: Rakarake Date: Sun, 5 Apr 2026 23:13:06 +0200 Subject: [PATCH 12/14] README update --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 38032ea..bf446d5 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +- If using a precompiled version of mdf-blog, place the `mdf-blog` executable + in this directory (project root). - Use `./new.sh` to create new blogpost in ./blogs. This will open your editor defined by the EDITOR environment variable. - Use `./run.sh` to generate all output files in "./public" From 770a20de04222ed41600bd75e4d130f5a41fd61b Mon Sep 17 00:00:00 2001 From: Rakarake Date: Sun, 5 Apr 2026 23:26:40 +0200 Subject: [PATCH 13/14] automatic git version control in scripts --- new.sh | 3 +++ push.sh | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/new.sh b/new.sh index d6b9ffe..94810cd 100755 --- a/new.sh +++ b/new.sh @@ -1,3 +1,6 @@ +#!/bin/sh +git pull + printf "name of file (e.g. day67.md): " read filename cargo run -- new > blogs/$filename diff --git a/push.sh b/push.sh index f42d4e3..8bddad4 100755 --- a/push.sh +++ b/push.sh @@ -1,4 +1,9 @@ #!/bin/sh + +git add blogs +git commit -m "blog update" +git push + for file in $(find public -type f) do echo "uploading: $file" From 71de0c15a705c60ab6d61f9ed43a853512ce70bf Mon Sep 17 00:00:00 2001 From: Rakarake Date: Thu, 9 Apr 2026 18:01:40 +0200 Subject: [PATCH 14/14] blog update --- blogs/day6.md | 1 + 1 file changed, 1 insertion(+) diff --git a/blogs/day6.md b/blogs/day6.md index f574318..9baac1f 100644 --- a/blogs/day6.md +++ b/blogs/day6.md @@ -3,6 +3,7 @@ author: Rakarake pubDate: Fri, Mar 27 2026 --- Warframe. +Erm, yeah. ![a spinning golden banana](./golden-banana.gif "Oh Banana")