diff --git a/Makefile b/Makefile index 163ae5a..099bd80 100644 --- a/Makefile +++ b/Makefile @@ -9,17 +9,20 @@ INSTALLDIR_ANSI := public_ansi/ ARTICLEDIR := articles PANDOCDIR := pandoc STYLEDIR := styles +SCRIPTDIR := scripts IMAGEDIR := images # The name of the stylesheet. This needs to be copied to any directory containing html files that use it. style := $(STYLEDIR)/style.css +syntax_style := $(PANDOCDIR)/solarized.theme # Main html template that pandoc uses to generate .html from .md files -template_html := $(PANDOCDIR)/template.html -template_ansi := $(PANDOCDIR)/template - +template_html := $(PANDOCDIR)/html-template.html +template_ansi := $(PANDOCDIR)/ansi-template +template_rss := $(PANDOCDIR)/rss-template.xml +template_atom := $(PANDOCDIR)/atom-template.xml # Template for extracting metadata of .md files in json format -list_template := $(PANDOCDIR)/meta-json-template.txt +list_template := $(PANDOCDIR)/metadata-template.json # Location of the shark.js shark_js := $(PANDOCDIR)/shark.js @@ -33,10 +36,10 @@ articles_md := $(wildcard $(SRCDIR)/$(ARTICLEDIR)/*.md) articles_html := $(patsubst $(SRCDIR)/%.md, $(BUILDDIR)/%.html, $(articles_md)) articles_ansi := $(patsubst $(SRCDIR)/%.md, $(BUILDDIR)/%, $(articles_md)) -all: $(BUILDDIR)/index.html $(BUILDDIR)/index +all: $(BUILDDIR)/index.html $(BUILDDIR)/index $(BUILDDIR)/atom.xml install: - cp -r $(BUILDDIR)/index.html $(articles_html) $(STYLEDIR) $(IMAGEDIR) $(INSTALLDIR_HTML); \ + cp -r $(BUILDDIR)/index.html $(BUILDDIR)/atom.xml $(articles_html) $(STYLEDIR) $(SCRIPTDIR) $(IMAGEDIR) $(INSTALLDIR_HTML); \ cp -r $(BUILDDIR)/index $(articles_ansi) $(INSTALLDIR_ANSI); clean: @@ -47,23 +50,28 @@ $(BUILDDIR): mkdir $(BUILDDIR) $(BUILDDIR)/$(ARTICLEDIR) $(BUILDDIR)/$(ARTICLEDIR)/%.html: $(SRCDIR)/$(ARTICLEDIR)/%.md | $(BUILDDIR) - jq 'del(.articles[] | select(.filename == "$(notdir $@)"))' $(article_list) > articles.json.tmp; \ - mv ./articles.json.tmp $(article_list); \ - + jq 'del(.articles[] | select(.filename == "$(patsubst %.html,%,$(notdir $@))"))' $(article_list) > articles.json.tmp; \ + mv articles.json.tmp $(article_list); \ # Build articles using pandoc - pandoc $< --template $(template_html) --css $(style) --highlight-style zenburn --mathml --toc --output $@; \ - + pandoc $< --template $(template_html) --css $(style) --highlight-style $(syntax_style) --mathml --toc --output $@; \ # Extract metadata from .md file, append filename field to the article object. # This is used to link to the article from index.html. Append article object to the article list. - jq '.articles += [$(shell pandoc $< --template $(list_template) | jq '. += {"filename": "$(patsubst %.html, %, $(notdir $@))"}')]' $(article_list) > articles.json.tmp; \ - mv ./articles.json.tmp $(article_list); \ + jq '.articles += [$(shell pandoc $< --template $(list_template) | jq '. += {"filename": "$(patsubst %.html,%,$(notdir $@))"}')]' $(article_list) > articles.json.tmp; \ + mv articles.json.tmp $(article_list); + $(BUILDDIR)/$(ARTICLEDIR)/%: $(SRCDIR)/$(ARTICLEDIR)/%.md | $(BUILDDIR) pandoc $< --template $(template_ansi) --to ansi --output $@ $(BUILDDIR)/index.html: $(SRCDIR)/index.md $(articles_html) | $(BUILDDIR) + # Sort articles decending by date (date need to be in ISO 8601 format) + jq '.articles |= sort_by(.date) | .articles |= reverse' ${article_list} > articles.json.tmp; \ + mv articles.json.tmp ${article_list}; \ # Build index.html with metadata injected from articles_list - pandoc $< --template $(template_html) --include-after-body $(shark_js) --css $(style) --metadata-file $(article_list) --highlight-style zenburn --mathml --toc --output $@; \ + pandoc $< --template $(template_html) --css $(style) --metadata-file $(article_list) --highlight-style $(syntax_style) --mathml --toc --output $@; $(BUILDDIR)/index: $(SRCDIR)/index.md $(articles_ansi) | $(BUILDDIR) pandoc $< --template $(template_ansi) --metadata-file $(article_list) --to ansi --output $@ + +$(BUILDDIR)/atom.xml: $(SRCDIR)/feed.md $(articles_html) | $(BUILDDIR) + pandoc $< --template $(template_atom) --metadata-file $(article_list) --metadata "updated:$(shell date --iso-8601=minutes)" --to html --output $@ diff --git a/build/articles/beans-and-cornbread b/build/articles/beans-and-cornbread new file mode 100644 index 0000000..4df2e31 --- /dev/null +++ b/build/articles/beans-and-cornbread @@ -0,0 +1,71 @@ + Bohnen und Maisbrot + + Never + + 2026-06-22 + + ──────────────────── + +BOHNEN + +Maße Zutaten +─────────────────────────────────── ─────────────────────────────────── +2 Zwiebeln +2 Knoblauchzehen +1 rote Chili (Peperoni/Chile de + árbol¹) + Kreuzkümmel + Speckwürfel (Optional) +1 l Brühe (Gemüse/Huhn/Rind) +1 Dose Kidneybohnen +1 Dose Pintobohnen oder andere Bohnen +1 Chile Ancho² oder geräuchertes + Paprikapulver + Petersilienstängel + Limettensaft + Salz +─────────────────────────────────── ─────────────────────────────────── + +Zubereitung + +1. Zwiebeln, Knoblauch, rote Chili, Kreuzkümmel und Speckwürfel + anbraten. + +2. Mit Brühe ablöschen und die Bohnen, Ancho Chili und + Petersilienstängel hinzufügen. Köcheln und etwas reduzieren lassen. + +3. Mit Salz und Limettensaft abschmecken. + +MAISBROT + +Maße Zutaten +─────────────────────────────────── ─────────────────────────────────── +1 Tasse Mehl +1 Tasse Maismehl +4 TL Backpulver + Salz +1/4 Tasse brauner Zucker +1 Ei +1/3 Tasse flüssige Butter +1 - 2 Tassen Milch oder Buttermilch +1/3 Tasse flüssige Butter + Speckwürfel (Optional) + Gehackte grüne Chilis (Optional) +─────────────────────────────────── ─────────────────────────────────── + +Zubereitung + +1. Trockene Zutaten mischen. + +2. Ei und Butter unterrühren. + +3. Schrittweise die Milch hinzugeben, bis eine zähflüssige Masse + entstanden ist. + + ──────────────────── + + 1. ]8;;https://en.wikipedia.org/wiki/Chile_de_%C3%A1rbol\Chile de árbol]8;;\; Eine kleine, scharfe, rote Chili. Meist getrocknet + zu finden. + + 2. ]8;;https://en.wikipedia.org/wiki/Poblano\Chile Ancho]8;;\; Eine große getrocknete Chili mit rauchigem Geschmack. +]8;;\ \ No newline at end of file diff --git a/build/articles/beans-and-cornbread.html b/build/articles/beans-and-cornbread.html new file mode 100644 index 0000000..d677a42 --- /dev/null +++ b/build/articles/beans-and-cornbread.html @@ -0,0 +1,235 @@ + + + + + + + + + + Bohnen und Maisbrot + + + + + + + + + +
+
+

Bohnen und Maisbrot

+

Never

+

2026-06-22

+
+ +
+

Bohnen

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MaßeZutaten
2Zwiebeln
2Knoblauchzehen
1rote Chili (Peperoni/Chile de + árbol1)
Kreuzkümmel
Speckwürfel (Optional)
1 lBrühe (Gemüse/Huhn/Rind)
1 DoseKidneybohnen
1 DosePintobohnen oder andere + Bohnen
1Chile Ancho2 oder geräuchertes + Paprikapulver
Petersilienstängel
Limettensaft
Salz
+

Zubereitung

+
    +
  1. Zwiebeln, Knoblauch, rote Chili, Kreuzkümmel und + Speckwürfel anbraten.

  2. +
  3. Mit Brühe ablöschen und die Bohnen, Ancho Chili und + Petersilienstängel hinzufügen. Köcheln und etwas reduzieren + lassen.

  4. +
  5. Mit Salz und Limettensaft abschmecken.

  6. +
+

Maisbrot

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MaßeZutaten
1 TasseMehl
1 TasseMaismehl
4 TLBackpulver
Salz
1/4 Tassebrauner Zucker
1Ei
1/3 Tasseflüssige Butter
1 - 2 TassenMilch oder Buttermilch
1/3 Tasseflüssige Butter
Speckwürfel (Optional)
Gehackte grüne Chilis + (Optional)
+

Zubereitung

+
    +
  1. Trockene Zutaten mischen.

  2. +
  3. Ei und Butter unterrühren.

  4. +
  5. Schrittweise die Milch hinzugeben, bis eine + zähflüssige Masse entstanden ist.

  6. +
+
+
+
    +
  1. Chile + de árbol; Eine kleine, scharfe, rote Chili. Meist + getrocknet zu finden.↩︎

  2. +
  3. Chile + Ancho; Eine große getrocknete Chili mit rauchigem + Geschmack.↩︎

  4. +
+
+
+
+ + + + diff --git a/build/articles/latex-endeavors b/build/articles/latex-endeavors index 27d3079..f6e4efd 100644 --- a/build/articles/latex-endeavors +++ b/build/articles/latex-endeavors @@ -3,7 +3,7 @@ Never - 9.1.2026 + 2026-01-09 ──────────────────── diff --git a/build/articles/latex-endeavors.html b/build/articles/latex-endeavors.html index 6e860b1..dbc6f6c 100644 --- a/build/articles/latex-endeavors.html +++ b/build/articles/latex-endeavors.html @@ -1,68 +1,84 @@ - + + - - - - - Latex Endeavors - - - + + + + + + Latex Endeavors + + + + + - - -
-

Latex Endeavors

-

Some unintuitive quirks of Latex

-

Never

-

9.1.2026

-
-
- -
-

BibLaTeX and Biber

-

Biber doesn’t run

-

Biber doens’t run if the (fedora) package -libxcrypt-compat is missing. It will fail with the error -message

-
biber: error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory
-
-
- + + +
+
+

Latex Endeavors

+

Some unintuitive quirks of Latex

+

Never

+

2026-01-09

+
+ +
+

BibLaTeX and Biber

+

Biber doesn’t run

+

Biber doens’t run if the (fedora) package + libxcrypt-compat is missing. It will fail with + the error message

+
biber: error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory
+
+
+ + diff --git a/build/articles/random-linux-utils b/build/articles/random-linux-utils index 359dd0b..331d419 100644 --- a/build/articles/random-linux-utils +++ b/build/articles/random-linux-utils @@ -3,7 +3,7 @@ Never - 25.7.2025 + 2025-07-25 ──────────────────── diff --git a/build/articles/random-linux-utils.html b/build/articles/random-linux-utils.html index a04f711..cc843d8 100644 --- a/build/articles/random-linux-utils.html +++ b/build/articles/random-linux-utils.html @@ -1,134 +1,155 @@ - + + - - - - - Random linux utilities - - - + + + + + + Random linux utilities + + + + + - - -
-

Random linux utilities

-

Neat things I picked up along the way

-

Never

-

25.7.2025

-
-
- -
-

Merge pdfs

-

Using Ghostscript

-

Ghostscript has a feature to merge multiple pdf files into one. -Although ImageMagick also has this feature, I prefer this one, as it -doesn’t rasterize and scales down the pdf files.

-
gs -dNOPAUSE -sDEVICE=pdfwrite \
+    
+    
+    
+
+

Random linux utilities

+

Neat things I picked up along the +way

+

Never

+

2025-07-25

+
+ +
+

Merge pdfs

+

Using Ghostscript

+

Ghostscript has a feature to merge multiple pdf files + into one. Although ImageMagick also has this feature, I + prefer this one, as it doesn’t rasterize and scales down the + pdf files.

+
gs -dNOPAUSE -sDEVICE=pdfwrite \
     -sOUTPUTFILE=output.pdf \
     -dBATCH 1.pdf 2.pdf
-
-
- + + + + diff --git a/build/articles/rsync-android b/build/articles/rsync-android index 4f04da1..5e96bd6 100644 --- a/build/articles/rsync-android +++ b/build/articles/rsync-android @@ -2,7 +2,7 @@ Never - 12.01.2026 + 2026-01-12 ──────────────────── @@ -89,28 +89,4 @@ config. Now on your Linux machine, syncronise your Music library with rsync. rsync -av -e "ssh -p 8022" ~/Music <username>@<ip_address>:/data/data/com.termux/files/home/storage/music - -Refreshing the Android MediaStore - -Android uses a Database to store files. In order to play your music, -this database needs to be refreshed. This can be achieved by a reboot or -by using adb to manually refresh it. - - sudo dnf install adb - -Connect the Android device via USB and see if it is listed. - - adb devices - -If it is, restart adb in TCP mode with port 5555 - - adb tcpip 5555 - -Connect to the device using its . - - adb connect <ip_address> - -Refresh MediaStore. - - adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN -d file:///data/data/com.termux/files/home/storage/music/ ]8;;\ \ No newline at end of file diff --git a/build/articles/rsync-android.html b/build/articles/rsync-android.html index d291267..98c0626 100644 --- a/build/articles/rsync-android.html +++ b/build/articles/rsync-android.html @@ -1,148 +1,168 @@ - + + - - - - - Using rsync on Android to syncronise my Music library - - - + + + + + + Using rsync on Android to syncronise my Music library + + + + + - - -
-

Using rsync on Android to syncronise my Music -library

-

Never

-

12.01.2026

-
-
- -
-

Setup Termux

-

Install Termux using F-Droid.

-

Update software repos.

-
pkg update
-

Grant file access permissions using.

-
termux-setup-storage
-

Establishing an ssh -connection

-

If network (such as eduroam) is blocking ssh trafic between machines, -open a Wi-Fi Hotspot on your Linux machine and connect the Android -device to it before using rsync or ssh.

-

Configuring Android

-

Install the openssh server on Termux.

-
pkg install openssh
-

Start the ssh server daemon.

-
sshd
-

Get the ip address of the Android machine (in the Hotspot).

-
ifconfig
-
Warning: cannot open /proc/net/dev (Permission denied). Limited output.
+    
+    
+    
+
+

Using rsync on Android to syncronise my +Music library

+

Never

+

2026-01-12

+
+ +
+

Setup Termux

+

Install Termux using F-Droid.

+

Update software repos.

+
pkg update
+

Grant file access permissions using.

+
termux-setup-storage
+

Establishing an ssh + connection

+

If network (such as eduroam) is blocking ssh trafic + between machines, open a Wi-Fi Hotspot on your Linux machine + and connect the Android device to it before using + rsync or ssh.

+

Configuring Android

+

Install the openssh server on Termux.

+
pkg install openssh
+

Start the ssh server daemon.

+
sshd
+

Get the ip address of the Android machine (in the + Hotspot).

+
ifconfig
+
Warning: cannot open /proc/net/dev (Permission denied). Limited output.
 lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
         inet 127.0.0.1  netmask 255.0.0.0
         unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1000  (UNSPEC)
@@ -154,62 +174,49 @@ rmnet0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1280
 wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
         inet 10.42.0.200  netmask 255.255.255.0  broadcast 10.42.0.210
         unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1000  (UNSPEC)
-

In this case 10.42.0.200.

-

The ssh server should now be running and listening on port 8022. You -can check by running

-
nmap -Pn <ip_address>
-

For me <ip_address> whould be 10.42.0.200.

-

Get the username.

-
whoami
-
u0_a700
-

Set a password for this user.

-
passwd
-

Connecting to Android via -ssh

-

Make sure you have an ssh key pair on the Linux system. If not -generate one using ssh-keygen.

-

Now connect to Android by ssh.

-
ssh <username>@<ip_address> -p 8022
-

Syncronising files with -rsync

-

Install rsync on Termux and Linux. Make sure to keep -your own openssl config.

-
pkg install rsync
-

Now on your Linux machine, syncronise your Music library with -rsync.

-
rsync -av -e "ssh -p 8022" ~/Music <username>@<ip_address>:/data/data/com.termux/files/home/storage/music
-

Refreshing the Android -MediaStore

-

Android uses a Database to store files. In order to play your music, -this database needs to be refreshed. This can be achieved by a reboot or -by using adb to manually refresh it.

-
sudo dnf install adb
-

Connect the Android device via USB and see if it is listed.

-
adb devices
-

If it is, restart adb in TCP mode with port 5555

-
adb tcpip 5555
-

Connect to the device using its .

-
adb connect <ip_address>
-

Refresh MediaStore.

-
adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN -d file:///data/data/com.termux/files/home/storage/music/
-
-
-
- -

-Previous -CUPS -Next -

-
+

In this case 10.42.0.200.

+

The ssh server should now be running and listening on + port 8022. You can check by running

+
nmap -Pn <ip_address>
+

For me <ip_address> whould be + 10.42.0.200.

+

Get the username.

+
whoami
+
u0_a700
+

Set a password for this user.

+
passwd
+

Connecting to Android + via ssh

+

Make sure you have an ssh key pair on the Linux system. + If not generate one using ssh-keygen.

+

Now connect to Android by ssh.

+
ssh <username>@<ip_address> -p 8022
+

Syncronising files + with rsync

+

Install rsync on Termux and Linux. Make sure + to keep your own openssl config.

+
pkg install rsync
+

Now on your Linux machine, syncronise your Music library + with rsync.

+
rsync -av -e "ssh -p 8022" ~/Music <username>@<ip_address>:/data/data/com.termux/files/home/storage/music
+ + +
+ +
+ diff --git a/build/atom.xml b/build/atom.xml new file mode 100644 index 0000000..7ed60f7 --- /dev/null +++ b/build/atom.xml @@ -0,0 +1,63 @@ + + + nevereverever.de + + nevereverever.de + 2026-08-25T11:59+02:00 + 2026-03-10 + + Never + + Here I post random stuff. + + Bohnen und Maisbrot + + beans-and-cornbread + 2026-06-22T20:47+02:00 + 2026-06-22 + + Never + + Inspiriert von der Küche der Kuhtreiber des Wilden +Westens. + + + Using rsync on Android to syncronise my Music +library + + rsync-android + 2026-01-12T16:24+01:00 + 2026-01-12 + + Never + + As Spotify is getting enshittified by capitalism, +keeping a music library is kind of essential. Here I use rsync to +syncronise my library with my Android smartphone. + + + Latex Endeavors + + latex-endeavors + 2026-01-10T16:23+01:00 + 2026-01-09 + + Never + + Latex undoubtedly has some quirks. Some of them have a +rather unintuitive solution. In this article I cover some quirks and +solutions I have encountered. + + + Random linux utilities + + random-linux-utils + 2025-07-25T16:24+01:00 + 2025-07-25 + + Never + + Tricks and tools I learned about, while tweaking my +Linux sytem or trying to do productive things. + + diff --git a/build/index b/build/index index d127fcf..b382e6e 100644 --- a/build/index +++ b/build/index @@ -2,25 +2,38 @@ ──────────────────── -Hello World +Hello! I am Never and this is my little place on the internet where I +post the stuff that I am currently nerding out about. + +This Website itself is one of those projects, that I like to tweak and +tinker with. Maybe I’ll write an article about its build system. It is +also viewable via  curl . Just run + + curl nevereverever.de + +There also is an Atom Feed to stay updated about my doings. ARTICLES -Latex Endeavors (latex-endeavors) -Latex undoubtedly has some quirks. Some of them have a rather -unintuitive solution. In this article I cover some quirks and solutions -I have encountered. - Never - 9.1.2026 - -Random linux utilities (random-linux-utils) -Tricks and tools I learned about, while tweaking my Linux sytem or -trying to do productive things. - Never - 25.7.2025 +Bohnen und Maisbrot (beans-and-cornbread) +Inspiriert von der Küche der Kuhtreiber des Wilden Westens. + Never - 2026-06-22 Using rsync on Android to syncronise my Music library (rsync-android) As Spotify is getting enshittified by capitalism, keeping a music library is kind of essential. Here I use rsync to syncronise my library with my Android smartphone. - Never - 12.01.2026 + Never - 2026-01-12 + +Latex Endeavors (latex-endeavors) +Latex undoubtedly has some quirks. Some of them have a rather +unintuitive solution. In this article I cover some quirks and solutions +I have encountered. + Never - 2026-01-09 + +Random linux utilities (random-linux-utils) +Tricks and tools I learned about, while tweaking my Linux sytem or +trying to do productive things. + Never - 2025-07-25 ]8;;\ \ No newline at end of file diff --git a/build/index.html b/build/index.html index 3d7ae73..ea8d4ba 100644 --- a/build/index.html +++ b/build/index.html @@ -1,154 +1,198 @@ - + + - - - - Home - - - + + + + Home + + + + + - - -
-

Home

-
-
-
-

Hello World

-
- -
- -
- -

-Previous -CUPS -Next -

-
+ +

Latex undoubtedly has +some quirks. Some of them have a rather unintuitive solution. In this +article I cover some quirks and solutions I have encountered.

+
+
Never
+
2026-01-09
+
+ +
  • +
    + Random +linux utilities +
    +

    Tricks and tools I +learned about, while tweaking my Linux sytem or trying to do productive +things.

    +
    +
    Never
    +
    2025-07-25
    +
    +
  • + + + +
    + +
    + diff --git a/images/shark.png b/images/shark.png deleted file mode 100644 index ddab225..0000000 Binary files a/images/shark.png and /dev/null differ diff --git a/images/shork.png b/images/shork.png new file mode 100644 index 0000000..d8ede9b Binary files /dev/null and b/images/shork.png differ diff --git a/images/shork.xcf b/images/shork.xcf new file mode 100644 index 0000000..ba8e0c8 Binary files /dev/null and b/images/shork.xcf differ diff --git a/pandoc.md b/pandoc.md new file mode 100644 index 0000000..3b3e70b --- /dev/null +++ b/pandoc.md @@ -0,0 +1,209 @@ +--- +title: Testing pandoc markdown capabilities +subtitle: Things I hope just work +author: Never +email: n.gude@posteo.de +date: 2025-07-25 +summary: Pandocs wonderful Markdown features tested out. +--- + +# Level 1 Heading +A link to a Heading [Level 4 Heading] followed by another paragraph. + +* fruits + + Everything is a fruit + + apples + - macintosh + - red delicious + + pears + + peaches +* vegetables + + broccoli + + chard + +1. first +2. second +3. third + i. subone + ii. subtwo + iii. subthree + +- [ ] an unchecked task list item +- [x] checked item + +Lorem _ipsum dolor_ sit amet, consectetur *adipi*scing elit. Integer nisl enim, condimentum ~~vitae lacus vel~~, semper efficitur est. Cras pretium porta luctus. __Nulla iaculis__ nisi at quam varius, et con**sequat** lorem blandit. Ut tincidunt leo sit amet velit lobortis, et blandit metus mollis. Nam H~2~O tristique ex a quam aliquet, eget 2^10^ vehicula sapien `rhoncus`. Aliquam `return 0;`{.c} sodales pretium auctor. [Aliquam convallis]{.smallcaps} sodales [elementum]{.mark}. + +```c +#include + +// TODO: A funny comment +int main() { + char greetings[] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!', '\0'}; + char greetings2[] = "Hello World!"; + + printf("%zu\n", sizeof(greetings)); + printf("%zu\n", sizeof(greetings2)); + + return 0; +} +``` + +Aenean eros lacus, volutpat at molestie vitae, pretium eu diam. Quisque sit $1 + 2 + 3 + \cdots + n$ amet nisl ut dolor congue sodales. + +$$ +\sum_{i=1}^{n} i = \frac{n (n + 1)}{2} +$$ + + + +## Level 2 Heading +> This is a block quote with +> two lines and a +> +> 1. List item +> 2. Another list item +> +> > And a nested block quote +> +> Yeah + +Term 1 + +: Definition 1 + +Term 2 with *inline markup* + +: Definition 2 + + { some code, part of Definition 2 } + + Third paragraph of definition 2. + +Term 1 + ~ Definition 1 + +Term 2 + ~ Definition 2a + ~ Definition 2b + + +### Level 3 Heading +A little poem + +| The limerick packs laughs anatomical +| In space that is quite economical. +| But the good ones I've seen +| So seldom are clean +| And the clean ones so seldom are comical + + +* * * * + +(@) My first example will be numbered (1). +(@good) My second example will be numbered (2). + +Explanation of examples. + +(@) My third example will be numbered (3). + +As (@good) illustrates, ... + +--------------- + +#### Level 4 Heading + Right Left Center Default +------- ------ ---------- ------- + 12 12 12 12 + 123 123 123 123 + 1 1 1 1 + +Table: Demonstration of simple table syntax. + +Following is a multiline table + +------------------------------------------------------------- + Centered Default Right Left + Header Aligned Aligned Aligned +----------- ------- --------------- ------------------------- + First row 12.0 Example of a row that + spans multiple lines. + + Second row 5.0 Here's another one. Note + the blank line between + rows. +------------------------------------------------------------- + +Table: Here's the caption. It, too, may span +multiple lines. + +Then we have a Grid table + ++---------------------+-----------------------+ +| Location | Temperature 1961-1990 | +| | in degree Celsius | +| +-------+-------+-------+ +| | min | mean | max | ++:====================+======:+======:+======:+ +| Antarctica | -89.2 | N/A | 19.8 | ++---------------------+-------+-------+-------+ +| Earth | -89.2 | 14 | 56.7 | ++---------------------+-------+-------+-------+ + +Table: Grid table + +An a Pipe table + +| Right | Left | Default | Center | +|------:|:-----|---------|:------:| +| 12 | 12 | 12 | 12 | +| 123 | 123 | 123 | 123 | +| 1 | 1 | 1 | 1 | + + : Demonstration of pipe table syntax. + +##### Level 5 Heading + + + + +[my label 1]: index.html "My title, optional" +[my label 2]: . +[my label 3]: https://fsf.org (The Free Software Foundation) +[my label 4]: index.html#articles 'A title in single quotes' + +Link to [my label 1] and [my label 2] and [my label 3] and [my label 4] + +This is an [inline link](/url), and here's [one with +a title](https://fsf.org "click here for a good time!") and [Write me!](mailto:sam@green.eggs.ham) + +![The wonderful shork](images/shork.png "the shork"){width=20%} + +Here is a footnote reference,[^1] and another.[^longnote] + +[^1]: Here is the footnote. + +[^longnote]: Here's one with multiple blocks. + + Subsequent paragraphs are indented to show that they +belong to the previous footnote. + + { some.code } + + The whole paragraph can be indented, or just the first + line. In this way, multi-paragraph footnotes work like + multi-paragraph list items. + +This paragraph won't be part of the note, because it +isn't indented. + +###### Level 6 Heading +::: Warning :::::: +This is a warning. + +::: Danger +This is a warning within a warning. +::: +:::::::::::::::::: + + diff --git a/pandoc/template b/pandoc/ansi-template similarity index 79% rename from pandoc/template rename to pandoc/ansi-template index 33ef978..65009f1 100644 --- a/pandoc/template +++ b/pandoc/ansi-template @@ -26,7 +26,7 @@ $endif$ $if(articles.summary)$ $articles.summary$ $endif$ -$if(articles.author)$ $articles.author$$endif$$if(articles.date)$ - $articles.date$$endif$ +$if(articles.author)$ $articles.author$$endif$$if(articles.date)$ - $articles.date$$endif$ $endfor$ $endif$ diff --git a/pandoc/atom-template.xml b/pandoc/atom-template.xml new file mode 100644 index 0000000..3ddc2d4 --- /dev/null +++ b/pandoc/atom-template.xml @@ -0,0 +1,27 @@ + + + $title$ + + $id$ + $updated$ + $date$ + + $author$ + +$if(subtitle)$ + $subtitle$ +$endif$ +$for(articles)$ + + $articles.title$ + + $articles.filename$ + $if(articles.updated)$$articles.updated$$else$$articles.date$$endif$ + $articles.date$ + + $articles.author$ + + $articles.summary$ + +$endfor$ + diff --git a/pandoc/html-template.html b/pandoc/html-template.html new file mode 100644 index 0000000..bd11a1a --- /dev/null +++ b/pandoc/html-template.html @@ -0,0 +1,132 @@ + + + + + + + +$for(author-meta)$ + +$endfor$ +$if(date-meta)$ + +$endif$ +$if(keywords)$ + +$endif$ +$if(description-meta)$ + +$endif$ + $if(title-prefix)$$title-prefix$ – $endif$$pagetitle$ + + + +$for(css)$ + +$endfor$ +$for(header-includes)$ +$header-includes$ +$endfor$ +$if(math)$ +$if(mathjax)$ + +$endif$ +$math$ +$endif$ + + + +$for(include-before)$ +$include-before$ +$endfor$ + + +
    +$if(title)$ +
    +

    $title$

    +$if(subtitle)$ +

    $subtitle$

    +$endif$ +$for(author)$ +

    $author$

    +$endfor$ +$if(date)$ +

    $date$

    +$endif$ +$if(abstract)$ +
    +
    $abstract-title$
    + $abstract$ +
    +$endif$ +
    +$endif$ +$if(toc)$ + +$endif$ +
    + $body$ +
    +$if(articles)$ + +$endif$ +
    +
    + +
    +$for(include-after)$ +$include-after$ +$endfor$ + + + diff --git a/pandoc/meta-json-template.txt b/pandoc/metadata-template.json similarity index 100% rename from pandoc/meta-json-template.txt rename to pandoc/metadata-template.json diff --git a/pandoc/rss-template.xml b/pandoc/rss-template.xml new file mode 100644 index 0000000..b453c4b --- /dev/null +++ b/pandoc/rss-template.xml @@ -0,0 +1,53 @@ + + + + $if(title)$ + $title$ + $endif$ + $if(link)$ + $link$ + $endif$ + $if(description)$ + $description$ + $endif$ + $if(lang)$ + $lang$ + $endif$ + $if(pubdate)$ + $pubdate$ + $endif$ + $if(builddate)$ + $builddate$ + $endif$ + https://www.rssboard.org/rss-specification + pandoc + $if(editor)$ + $editor$ + $endif$ + $if(webmaster)$ + $webmaster$ + $endif$ + $for(articles)$ + + $if(articles.title)$ + $articles.title$ + $endif$ + $if(articles.email)$ + $articles.email$$if(articles.author)$ ($articles.author$)$endif$ + $endif$ + $if(articles.filename)$ + $link$/$articles.filename$.html + $endif$ + $if(articles.summary)$ + $articles.summary$ + $endif$ + $if(articles.pubdate)$ + $articles.pubdate$ + $endif$ + $if(articles.filename)$ + $articles.filename$ + $endif$ + + $endfor$ + + diff --git a/pandoc/solarized.theme b/pandoc/solarized.theme new file mode 100644 index 0000000..d9b1ca6 --- /dev/null +++ b/pandoc/solarized.theme @@ -0,0 +1,226 @@ +{ + "metadata": { + "author": "Never Gude ", + "license": "Unlicense", + "name": "solarized", + "revision": 1 + }, + + "text-color": "#839496", + "background-color": "#002b36", + "line-number-color": "#586e75", + "line-number-background-color": "#073642", + + "text-styles": { + "Alert": { + "text-color": "#d33682", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Annotation": { + "text-color": "#dc322f", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Attribute": { + "text-color": "#dc322f", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "BaseN": { + "text-color": "#2aa198", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "BuiltIn": { + "text-color": "#b58900", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Char": { + "text-color": "#2aa198", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Comment": { + "text-color": "#586e75", + "background-color": null, + "bold": false, + "italic": true, + "underline": false + }, + "CommentVar": { + "text-color": "#268bd2", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Constant": { + "text-color": "#b58900", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "ControlFlow": { + "text-color": "#859900", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "DataType": { + "text-color": "#b58900", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "DecVal": { + "text-color": "#2aa198", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Documentation": { + "text-color": "#586e75", + "background-color": null, + "bold": false, + "italic": true, + "underline": false + }, + "Error": { + "text-color": "#dc322f", + "background-color": null, + "bold": false, + "italic": false, + "underline": true + }, + "Extension": { + "text-color": "#b58900", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Float": { + "text-color": "#2aa198", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Function": { + "text-color": null, + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Import": { + "text-color": "#cb4b16", + "background-color": null, + "bold": null, + "italic": false, + "underline": false + }, + "Information": { + "text-color": "#268bd2", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Keyword": { + "text-color": "#93a1a1", + "background-color": null, + "bold": true, + "italic": false, + "underline": false + }, + "Operator": { + "text-color": null, + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Others": { + "text-color": null, + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Preprocessor": { + "text-color": "#cb4b16", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "RegionMarker": { + "text-color": "#cb4b16", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "SpecialChar": { + "text-color": "#dc322f", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "SpecialString": { + "text-color": "#b58900", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "String": { + "text-color": "#2aa198", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Variable": { + "text-color": "#cb4b16", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "VerbatimString": { + "text-color": "#dc322f", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Warning": { + "text-color": "#b58900", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + } + } +} diff --git a/pandoc/template.html b/pandoc/template.html deleted file mode 100644 index 2b5e99c..0000000 --- a/pandoc/template.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - -$for(author-meta)$ - -$endfor$ -$if(date-meta)$ - -$endif$ -$if(keywords)$ - -$endif$ -$if(description-meta)$ - -$endif$ - $if(title-prefix)$$title-prefix$ – $endif$$pagetitle$ - - -$for(css)$ - -$endfor$ -$for(header-includes)$ - $header-includes$ -$endfor$ -$if(math)$ -$if(mathjax)$ - -$endif$ - $math$ -$endif$ - - - - -$for(include-before)$ -$include-before$ -$endfor$ -$if(title)$ -
    -

    $title$

    -$if(subtitle)$ -

    $subtitle$

    -$endif$ -$for(author)$ -

    $author$

    -$endfor$ -$if(date)$ -

    $date$

    -$endif$ -$if(abstract)$ -
    -
    $abstract-title$
    -$abstract$ -
    -$endif$ -
    -
    -$endif$ -$if(toc)$ - -$endif$ -
    -$body$ -
    -$if(articles)$ - -$endif$ -
    -$for(include-after)$ -$include-after$ -$endfor$ -
    - -

    -Previous -CUPS -Next -

    -
    - - diff --git a/public_ansi/beans-and-cornbread b/public_ansi/beans-and-cornbread new file mode 100644 index 0000000..4df2e31 --- /dev/null +++ b/public_ansi/beans-and-cornbread @@ -0,0 +1,71 @@ + Bohnen und Maisbrot + + Never + + 2026-06-22 + + ──────────────────── + +BOHNEN + +Maße Zutaten +─────────────────────────────────── ─────────────────────────────────── +2 Zwiebeln +2 Knoblauchzehen +1 rote Chili (Peperoni/Chile de + árbol¹) + Kreuzkümmel + Speckwürfel (Optional) +1 l Brühe (Gemüse/Huhn/Rind) +1 Dose Kidneybohnen +1 Dose Pintobohnen oder andere Bohnen +1 Chile Ancho² oder geräuchertes + Paprikapulver + Petersilienstängel + Limettensaft + Salz +─────────────────────────────────── ─────────────────────────────────── + +Zubereitung + +1. Zwiebeln, Knoblauch, rote Chili, Kreuzkümmel und Speckwürfel + anbraten. + +2. Mit Brühe ablöschen und die Bohnen, Ancho Chili und + Petersilienstängel hinzufügen. Köcheln und etwas reduzieren lassen. + +3. Mit Salz und Limettensaft abschmecken. + +MAISBROT + +Maße Zutaten +─────────────────────────────────── ─────────────────────────────────── +1 Tasse Mehl +1 Tasse Maismehl +4 TL Backpulver + Salz +1/4 Tasse brauner Zucker +1 Ei +1/3 Tasse flüssige Butter +1 - 2 Tassen Milch oder Buttermilch +1/3 Tasse flüssige Butter + Speckwürfel (Optional) + Gehackte grüne Chilis (Optional) +─────────────────────────────────── ─────────────────────────────────── + +Zubereitung + +1. Trockene Zutaten mischen. + +2. Ei und Butter unterrühren. + +3. Schrittweise die Milch hinzugeben, bis eine zähflüssige Masse + entstanden ist. + + ──────────────────── + + 1. ]8;;https://en.wikipedia.org/wiki/Chile_de_%C3%A1rbol\Chile de árbol]8;;\; Eine kleine, scharfe, rote Chili. Meist getrocknet + zu finden. + + 2. ]8;;https://en.wikipedia.org/wiki/Poblano\Chile Ancho]8;;\; Eine große getrocknete Chili mit rauchigem Geschmack. +]8;;\ \ No newline at end of file diff --git a/public_ansi/index b/public_ansi/index index d127fcf..b382e6e 100644 --- a/public_ansi/index +++ b/public_ansi/index @@ -2,25 +2,38 @@ ──────────────────── -Hello World +Hello! I am Never and this is my little place on the internet where I +post the stuff that I am currently nerding out about. + +This Website itself is one of those projects, that I like to tweak and +tinker with. Maybe I’ll write an article about its build system. It is +also viewable via  curl . Just run + + curl nevereverever.de + +There also is an Atom Feed to stay updated about my doings. ARTICLES -Latex Endeavors (latex-endeavors) -Latex undoubtedly has some quirks. Some of them have a rather -unintuitive solution. In this article I cover some quirks and solutions -I have encountered. - Never - 9.1.2026 - -Random linux utilities (random-linux-utils) -Tricks and tools I learned about, while tweaking my Linux sytem or -trying to do productive things. - Never - 25.7.2025 +Bohnen und Maisbrot (beans-and-cornbread) +Inspiriert von der Küche der Kuhtreiber des Wilden Westens. + Never - 2026-06-22 Using rsync on Android to syncronise my Music library (rsync-android) As Spotify is getting enshittified by capitalism, keeping a music library is kind of essential. Here I use rsync to syncronise my library with my Android smartphone. - Never - 12.01.2026 + Never - 2026-01-12 + +Latex Endeavors (latex-endeavors) +Latex undoubtedly has some quirks. Some of them have a rather +unintuitive solution. In this article I cover some quirks and solutions +I have encountered. + Never - 2026-01-09 + +Random linux utilities (random-linux-utils) +Tricks and tools I learned about, while tweaking my Linux sytem or +trying to do productive things. + Never - 2025-07-25 ]8;;\ \ No newline at end of file diff --git a/public_ansi/latex-endeavors b/public_ansi/latex-endeavors index 27d3079..f6e4efd 100644 --- a/public_ansi/latex-endeavors +++ b/public_ansi/latex-endeavors @@ -3,7 +3,7 @@ Never - 9.1.2026 + 2026-01-09 ──────────────────── diff --git a/public_ansi/pandoc b/public_ansi/pandoc new file mode 100644 index 0000000..862b475 --- /dev/null +++ b/public_ansi/pandoc @@ -0,0 +1,218 @@ + Testing pandoc markdown capabilities + Things I hope just work + + Never + + 2025-07-25 + + ──────────────────── + +LEVEL 1 HEADING + +A link to a Heading ]8;;#level-4-heading\Level 4 Heading]8;;\ followed by another paragraph. + +• fruits + + Everything is a fruit + + • apples + + • macintosh + + • red delicious + + • pears + + • peaches + +• vegetables + + • broccoli + + • chard + +1. first + +2. second + +3. third + + i. subone + + ii. subtwo + + iii. subthree + +• ☐ an unchecked task list item + +• ☒ checked item + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nisl +enim, condimentum vitae lacus vel, semper efficitur est. Cras pretium +porta luctus. Nulla iaculis nisi at quam varius, et consequat lorem +blandit. Ut tincidunt leo sit amet velit lobortis, et blandit metus +mollis. Nam H₂O tristique ex a quam aliquet, eget 2¹⁰ vehicula sapien + rhoncus . Aliquam  return 0;  sodales pretium auctor. Aliquam convallis +sodales elementum. + + 1 #include  + 2 + 3 // TODO: A funny comment + 4 int main() { + 5  char greetings[] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!', '\0'}; + 6  char greetings2[] = "Hello World!"; + 7 + 8  printf("%zu\n", sizeof(greetings)); + 9  printf("%zu\n", sizeof(greetings2)); + 10 + 11  return 0; + 12 } + +Aenean eros lacus, volutpat at molestie vitae, pretium eu diam. Quisque +sit 1 + 2 + 3 + ⋯ + n amet nisl ut dolor congue sodales. + +$$ +\sum_{i=1}^{n} i = \frac{n (n + 1)}{2} +$$ + +Level 2 Heading + +│ This is a block quote with two lines and a +│ +│ 1. List item +│ +│ 2. Another list item +│ +│ │ And a nested block quote +│ +│ Yeah + +Term 1 + Definition 1 + +Term 2 with inline markup + Definition 2 + + { some code, part of Definition 2 } + + Third paragraph of definition 2. + +Term 1 + Definition 1 + +Term 2 + Definition 2a + + Definition 2b + +Level 3 Heading + +A little poem + +The limerick packs laughs anatomical +In space that is quite economical. +   But the good ones I’ve seen +   So seldom are clean +And the clean ones so seldom are comical + +──────────────────── + +(1) My first example will be numbered (1). + +(2) My second example will be numbered (2). + +Explanation of examples. + +(3) My third example will be numbered (3). + +As (2) illustrates, … + +──────────────────── + +Level 4 Heading + +Right Left Center Default +───────────────── ───────────────── ───────────────── ───────────────── +12 12 12 12 +123 123 123 123 +1 1 1 1 +───────────────── ───────────────── ───────────────── ───────────────── + + Demonstration of simple table syntax. + +Following is a multiline table + +Centered Default Right Aligned Left Aligned +Header Aligned +─────────── ─────── ─────────────── ──────────────────────── +First row 12.0 Example of a row that + spans multiple lines. +Second row 5.0 Here’s another one. Note + the blank line between + rows. +─────────── ─────── ─────────────── ──────────────────────── + + Here’s the caption. It, too, may span multiple lines. + +Then we have a Grid table + +Location Temperature 1961-1990 + in degree Celsius +min mean max +───────────────────── ─────── ─────── ─────── +Antarctica -89.2 N/A 19.8 +Earth -89.2 14 56.7 +───────────────────── ─────── ─────── ─────── + + Grid table + +An a Pipe table + +Right Left Default Center +───────────────── ───────────────── ───────────────── ───────────────── +12 12 12 12 +123 123 123 123 +1 1 1 1 +───────────────── ───────────────── ───────────────── ───────────────── + + Demonstration of pipe table syntax. + +Level 5 Heading + +]8;;https://google.com\https://google.com]8;;\ + +]8;;mailto:sam@green.eggs.ham\sam@green.eggs.ham]8;;\ + +Link to ]8;;index.html\my label 1]8;;\ and ]8;;.\my label 2]8;;\ and ]8;;https://fsf.org\my label 3]8;;\ and ]8;;index.html#articles\my label 4]8;;\ + +This is an ]8;;/url\inline link]8;;\, and here’s ]8;;https://fsf.org\one with a title]8;;\ and ]8;;mailto:sam@green.eggs.ham\Write me!]8;;\ + +[image] + + The wonderful shork + +Here is a footnote reference,¹ and another.² + +This paragraph won’t be part of the note, because it isn’t indented. + +Level 6 Heading + +This is a warning. + +This is a warning within a warning. + + ──────────────────── + + 1. Here is the footnote. + + 2. Here’s one with multiple blocks. + + Subsequent paragraphs are indented to show that they belong to the + previous footnote. + + { some.code } + + The whole paragraph can be indented, or just the first line. In + this way, multi-paragraph footnotes work like multi-paragraph list + items. +]8;;\ \ No newline at end of file diff --git a/public_ansi/random-linux-utils b/public_ansi/random-linux-utils index 359dd0b..331d419 100644 --- a/public_ansi/random-linux-utils +++ b/public_ansi/random-linux-utils @@ -3,7 +3,7 @@ Never - 25.7.2025 + 2025-07-25 ──────────────────── diff --git a/public_ansi/rsync-android b/public_ansi/rsync-android index 4f04da1..5e96bd6 100644 --- a/public_ansi/rsync-android +++ b/public_ansi/rsync-android @@ -2,7 +2,7 @@ Never - 12.01.2026 + 2026-01-12 ──────────────────── @@ -89,28 +89,4 @@ config. Now on your Linux machine, syncronise your Music library with rsync. rsync -av -e "ssh -p 8022" ~/Music <username>@<ip_address>:/data/data/com.termux/files/home/storage/music - -Refreshing the Android MediaStore - -Android uses a Database to store files. In order to play your music, -this database needs to be refreshed. This can be achieved by a reboot or -by using adb to manually refresh it. - - sudo dnf install adb - -Connect the Android device via USB and see if it is listed. - - adb devices - -If it is, restart adb in TCP mode with port 5555 - - adb tcpip 5555 - -Connect to the device using its . - - adb connect <ip_address> - -Refresh MediaStore. - - adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN -d file:///data/data/com.termux/files/home/storage/music/ ]8;;\ \ No newline at end of file diff --git a/public_html/eh/eh/eh/eh-eh/atom.xml b/public_html/eh/eh/eh/eh-eh/atom.xml new file mode 100644 index 0000000..7ed60f7 --- /dev/null +++ b/public_html/eh/eh/eh/eh-eh/atom.xml @@ -0,0 +1,63 @@ + + + nevereverever.de + + nevereverever.de + 2026-08-25T11:59+02:00 + 2026-03-10 + + Never + + Here I post random stuff. + + Bohnen und Maisbrot + + beans-and-cornbread + 2026-06-22T20:47+02:00 + 2026-06-22 + + Never + + Inspiriert von der Küche der Kuhtreiber des Wilden +Westens. + + + Using rsync on Android to syncronise my Music +library + + rsync-android + 2026-01-12T16:24+01:00 + 2026-01-12 + + Never + + As Spotify is getting enshittified by capitalism, +keeping a music library is kind of essential. Here I use rsync to +syncronise my library with my Android smartphone. + + + Latex Endeavors + + latex-endeavors + 2026-01-10T16:23+01:00 + 2026-01-09 + + Never + + Latex undoubtedly has some quirks. Some of them have a +rather unintuitive solution. In this article I cover some quirks and +solutions I have encountered. + + + Random linux utilities + + random-linux-utils + 2025-07-25T16:24+01:00 + 2025-07-25 + + Never + + Tricks and tools I learned about, while tweaking my +Linux sytem or trying to do productive things. + + diff --git a/public_html/eh/eh/eh/eh-eh/beans-and-cornbread.html b/public_html/eh/eh/eh/eh-eh/beans-and-cornbread.html new file mode 100644 index 0000000..d677a42 --- /dev/null +++ b/public_html/eh/eh/eh/eh-eh/beans-and-cornbread.html @@ -0,0 +1,235 @@ + + + + + + + + + + Bohnen und Maisbrot + + + + + + + + + +
    +
    +

    Bohnen und Maisbrot

    +

    Never

    +

    2026-06-22

    +
    + +
    +

    Bohnen

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    MaßeZutaten
    2Zwiebeln
    2Knoblauchzehen
    1rote Chili (Peperoni/Chile de + árbol1)
    Kreuzkümmel
    Speckwürfel (Optional)
    1 lBrühe (Gemüse/Huhn/Rind)
    1 DoseKidneybohnen
    1 DosePintobohnen oder andere + Bohnen
    1Chile Ancho2 oder geräuchertes + Paprikapulver
    Petersilienstängel
    Limettensaft
    Salz
    +

    Zubereitung

    +
      +
    1. Zwiebeln, Knoblauch, rote Chili, Kreuzkümmel und + Speckwürfel anbraten.

    2. +
    3. Mit Brühe ablöschen und die Bohnen, Ancho Chili und + Petersilienstängel hinzufügen. Köcheln und etwas reduzieren + lassen.

    4. +
    5. Mit Salz und Limettensaft abschmecken.

    6. +
    +

    Maisbrot

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    MaßeZutaten
    1 TasseMehl
    1 TasseMaismehl
    4 TLBackpulver
    Salz
    1/4 Tassebrauner Zucker
    1Ei
    1/3 Tasseflüssige Butter
    1 - 2 TassenMilch oder Buttermilch
    1/3 Tasseflüssige Butter
    Speckwürfel (Optional)
    Gehackte grüne Chilis + (Optional)
    +

    Zubereitung

    +
      +
    1. Trockene Zutaten mischen.

    2. +
    3. Ei und Butter unterrühren.

    4. +
    5. Schrittweise die Milch hinzugeben, bis eine + zähflüssige Masse entstanden ist.

    6. +
    +
    +
    +
      +
    1. Chile + de árbol; Eine kleine, scharfe, rote Chili. Meist + getrocknet zu finden.↩︎

    2. +
    3. Chile + Ancho; Eine große getrocknete Chili mit rauchigem + Geschmack.↩︎

    4. +
    +
    +
    +
    +
    + +
    + + + diff --git a/public_html/eh/eh/eh/eh-eh/images/shark.png b/public_html/eh/eh/eh/eh-eh/images/shark.png deleted file mode 100644 index ddab225..0000000 Binary files a/public_html/eh/eh/eh/eh-eh/images/shark.png and /dev/null differ diff --git a/public_html/eh/eh/eh/eh-eh/images/shork.png b/public_html/eh/eh/eh/eh-eh/images/shork.png new file mode 100644 index 0000000..d8ede9b Binary files /dev/null and b/public_html/eh/eh/eh/eh-eh/images/shork.png differ diff --git a/public_html/eh/eh/eh/eh-eh/images/shork.xcf b/public_html/eh/eh/eh/eh-eh/images/shork.xcf new file mode 100644 index 0000000..ba8e0c8 Binary files /dev/null and b/public_html/eh/eh/eh/eh-eh/images/shork.xcf differ diff --git a/public_html/eh/eh/eh/eh-eh/index.html b/public_html/eh/eh/eh/eh-eh/index.html index 3d7ae73..ea8d4ba 100644 --- a/public_html/eh/eh/eh/eh-eh/index.html +++ b/public_html/eh/eh/eh/eh-eh/index.html @@ -1,154 +1,198 @@ - + + - - - - Home - - - + + + + Home + + + + + - - -
    -

    Home

    -
    -
    -
    -

    Hello World

    -
    - -
    - -
    - -

    -Previous -CUPS -Next -

    -
    + +

    Latex undoubtedly has +some quirks. Some of them have a rather unintuitive solution. In this +article I cover some quirks and solutions I have encountered.

    +
    +
    Never
    +
    2026-01-09
    +
    + +
  • +
    + Random +linux utilities +
    +

    Tricks and tools I +learned about, while tweaking my Linux sytem or trying to do productive +things.

    +
    +
    Never
    +
    2025-07-25
    +
    +
  • + + + +
    + +
    + diff --git a/public_html/eh/eh/eh/eh-eh/latex-endeavors.html b/public_html/eh/eh/eh/eh-eh/latex-endeavors.html index 6e860b1..dbc6f6c 100644 --- a/public_html/eh/eh/eh/eh-eh/latex-endeavors.html +++ b/public_html/eh/eh/eh/eh-eh/latex-endeavors.html @@ -1,68 +1,84 @@ - + + - - - - - Latex Endeavors - - - + + + + + + Latex Endeavors + + + + + - - -
    -

    Latex Endeavors

    -

    Some unintuitive quirks of Latex

    -

    Never

    -

    9.1.2026

    -
    -
    - -
    -

    BibLaTeX and Biber

    -

    Biber doesn’t run

    -

    Biber doens’t run if the (fedora) package -libxcrypt-compat is missing. It will fail with the error -message

    -
    biber: error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory
    -
    -
    -
    - -

    -Previous -CUPS -Next -

    -
    + + +
    +
    +

    Latex Endeavors

    +

    Some unintuitive quirks of Latex

    +

    Never

    +

    2026-01-09

    +
    + +
    +

    BibLaTeX and Biber

    +

    Biber doesn’t run

    +

    Biber doens’t run if the (fedora) package + libxcrypt-compat is missing. It will fail with + the error message

    +
    biber: error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory
    +
    +
    +
    + +
    + diff --git a/public_html/eh/eh/eh/eh-eh/pandoc.html b/public_html/eh/eh/eh/eh-eh/pandoc.html new file mode 100644 index 0000000..f86495e --- /dev/null +++ b/public_html/eh/eh/eh/eh-eh/pandoc.html @@ -0,0 +1,451 @@ + + + + + + + + + + Testing pandoc markdown capabilities + + + + + + + + + +
    +
    +

    Testing pandoc markdown capabilities

    +

    Things I hope just work

    +

    Never

    +

    2025-07-25

    +
    + +
    +

    Level 1 Heading

    +

    A link to a Heading Level 4 + Heading followed by another paragraph.

    +
      +
    • fruits

      +

      Everything is a fruit

      +
        +
      • apples +
          +
        • macintosh
        • +
        • red delicious
        • +
      • +
      • pears
      • +
      • peaches
      • +
    • +
    • vegetables

      +
        +
      • broccoli
      • +
      • chard
      • +
    • +
    +
      +
    1. first
    2. +
    3. second
    4. +
    5. third +
        +
      1. subone
      2. +
      3. subtwo
      4. +
      5. subthree
      6. +
    6. +
    +
      +
    • +
    • +
    +

    Lorem ipsum dolor sit amet, consectetur + adipiscing elit. Integer nisl enim, condimentum + vitae lacus vel, semper efficitur est. Cras + pretium porta luctus. Nulla iaculis nisi at + quam varius, et consequat lorem blandit. Ut + tincidunt leo sit amet velit lobortis, et blandit metus + mollis. Nam H2O tristique ex a quam aliquet, eget + 210 vehicula sapien rhoncus. Aliquam + return 0; + sodales pretium auctor. Aliquam + convallis sodales elementum.

    +
    #include <stdio.h>
    +
    +// TODO: A funny comment
    +int main() {
    +    char greetings[] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!', '\0'};
    +    char greetings2[] = "Hello World!";
    +
    +    printf("%zu\n", sizeof(greetings));
    +    printf("%zu\n", sizeof(greetings2));
    +
    +    return 0;
    +}
    +

    Aenean eros lacus, volutpat at molestie vitae, pretium eu + diam. Quisque sit + 1+2+3++n1 + 2 + 3 + \cdots + n + amet nisl ut dolor congue sodales.

    +

    i=1ni=n(n+1)2 + \sum_{i=1}^{n} i = \frac{n (n + 1)}{2} +

    +

    Level 2 Heading

    +
    +

    This is a block quote with two lines and a

    +
      +
    1. List item
    2. +
    3. Another list item
    4. +
    +
    +

    And a nested block quote

    +
    +

    Yeah

    +
    +
    +
    Term 1
    +
    +

    Definition 1

    +
    +
    Term 2 with inline markup
    +
    +

    Definition 2

    +
    { some code, part of Definition 2 }
    +

    Third paragraph of definition 2.

    +
    +
    Term 1
    +
    + Definition 1 +
    +
    Term 2
    +
    + Definition 2a +
    +
    + Definition 2b +
    +
    +

    Level 3 Heading

    +

    A little poem

    +
    The limerick packs laughs + anatomical
    + In space that is quite economical.
    +    But the good ones I’ve seen
    +    So seldom are clean
    + And the clean ones so seldom are comical
    +
    +
      +
    1. My first example will be numbered (1).
    2. +
    3. My second example will be numbered (2).
    4. +
    +

    Explanation of examples.

    +
      +
    1. My third example will be numbered (3).
    2. +
    +

    As (2) illustrates, …

    +
    +

    Level 4 Heading

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Demonstration of simple table syntax.
    RightLeftCenterDefault
    12121212
    123123123123
    1111
    +

    Following is a multiline table

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Here’s the caption. It, too, may span multiple + lines.
    Centered HeaderDefault AlignedRight AlignedLeft Aligned
    Firstrow12.0Example of a row that spans + multiple lines.
    Secondrow5.0Here’s another one. Note the + blank line between rows.
    +

    Then we have a Grid table

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Grid table
    LocationTemperature + 1961-1990 in degree Celsius
    minmeanmax
    Antarctica-89.2N/A19.8
    Earth-89.21456.7
    +

    An a Pipe table

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Demonstration of pipe table syntax.
    RightLeftDefaultCenter
    12121212
    123123123123
    1111
    +
    Level 5 Heading
    +

    https://google.com

    +

    +

    Link to my label 1 and my + label 2 and my label 3 and my label 4

    +

    This is an inline link, and here’s one with a title and + Write me!

    +
    + The wonderful shork + +
    +

    Here is a footnote reference,1 and another.2

    +

    This paragraph won’t be part of the note, because it + isn’t indented.

    +
    Level 6 Heading
    +
    +

    This is a warning.

    +
    +

    This is a warning within a warning.

    +
    +
    +
    +
    +
      +
    1. Here is the footnote.↩︎

    2. +
    3. Here’s one with multiple blocks.

      +

      Subsequent paragraphs are indented to show that they + belong to the previous footnote.

      +
      { some.code }
      +

      The whole paragraph can be indented, or just the first + line. In this way, multi-paragraph footnotes work like + multi-paragraph list items.↩︎

    4. +
    +
    +
    +
    +
    + +
    + + + diff --git a/public_html/eh/eh/eh/eh-eh/random-linux-utils.html b/public_html/eh/eh/eh/eh-eh/random-linux-utils.html index a04f711..cc843d8 100644 --- a/public_html/eh/eh/eh/eh-eh/random-linux-utils.html +++ b/public_html/eh/eh/eh/eh-eh/random-linux-utils.html @@ -1,134 +1,155 @@ - + + - - - - - Random linux utilities - - - + + + + + + Random linux utilities + + + + + - - -
    -

    Random linux utilities

    -

    Neat things I picked up along the way

    -

    Never

    -

    25.7.2025

    -
    -
    - -
    -

    Merge pdfs

    -

    Using Ghostscript

    -

    Ghostscript has a feature to merge multiple pdf files into one. -Although ImageMagick also has this feature, I prefer this one, as it -doesn’t rasterize and scales down the pdf files.

    -
    gs -dNOPAUSE -sDEVICE=pdfwrite \
    +    
    +    
    +    
    +
    +

    Random linux utilities

    +

    Neat things I picked up along the +way

    +

    Never

    +

    2025-07-25

    +
    + +
    +

    Merge pdfs

    +

    Using Ghostscript

    +

    Ghostscript has a feature to merge multiple pdf files + into one. Although ImageMagick also has this feature, I + prefer this one, as it doesn’t rasterize and scales down the + pdf files.

    +
    gs -dNOPAUSE -sDEVICE=pdfwrite \
         -sOUTPUTFILE=output.pdf \
         -dBATCH 1.pdf 2.pdf
    -
    -
    -
    - -

    -Previous -CUPS -Next -

    -
    + + +
    + +
    + diff --git a/public_html/eh/eh/eh/eh-eh/rsync-android.html b/public_html/eh/eh/eh/eh-eh/rsync-android.html index d291267..98c0626 100644 --- a/public_html/eh/eh/eh/eh-eh/rsync-android.html +++ b/public_html/eh/eh/eh/eh-eh/rsync-android.html @@ -1,148 +1,168 @@ - + + - - - - - Using rsync on Android to syncronise my Music library - - - + + + + + + Using rsync on Android to syncronise my Music library + + + + + - - -
    -

    Using rsync on Android to syncronise my Music -library

    -

    Never

    -

    12.01.2026

    -
    -
    - -
    -

    Setup Termux

    -

    Install Termux using F-Droid.

    -

    Update software repos.

    -
    pkg update
    -

    Grant file access permissions using.

    -
    termux-setup-storage
    -

    Establishing an ssh -connection

    -

    If network (such as eduroam) is blocking ssh trafic between machines, -open a Wi-Fi Hotspot on your Linux machine and connect the Android -device to it before using rsync or ssh.

    -

    Configuring Android

    -

    Install the openssh server on Termux.

    -
    pkg install openssh
    -

    Start the ssh server daemon.

    -
    sshd
    -

    Get the ip address of the Android machine (in the Hotspot).

    -
    ifconfig
    -
    Warning: cannot open /proc/net/dev (Permission denied). Limited output.
    +    
    +    
    +    
    +
    +

    Using rsync on Android to syncronise my +Music library

    +

    Never

    +

    2026-01-12

    +
    + +
    +

    Setup Termux

    +

    Install Termux using F-Droid.

    +

    Update software repos.

    +
    pkg update
    +

    Grant file access permissions using.

    +
    termux-setup-storage
    +

    Establishing an ssh + connection

    +

    If network (such as eduroam) is blocking ssh trafic + between machines, open a Wi-Fi Hotspot on your Linux machine + and connect the Android device to it before using + rsync or ssh.

    +

    Configuring Android

    +

    Install the openssh server on Termux.

    +
    pkg install openssh
    +

    Start the ssh server daemon.

    +
    sshd
    +

    Get the ip address of the Android machine (in the + Hotspot).

    +
    ifconfig
    +
    Warning: cannot open /proc/net/dev (Permission denied). Limited output.
     lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
             inet 127.0.0.1  netmask 255.0.0.0
             unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1000  (UNSPEC)
    @@ -154,62 +174,49 @@ rmnet0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1280
     wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
             inet 10.42.0.200  netmask 255.255.255.0  broadcast 10.42.0.210
             unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1000  (UNSPEC)
    -

    In this case 10.42.0.200.

    -

    The ssh server should now be running and listening on port 8022. You -can check by running

    -
    nmap -Pn <ip_address>
    -

    For me <ip_address> whould be 10.42.0.200.

    -

    Get the username.

    -
    whoami
    -
    u0_a700
    -

    Set a password for this user.

    -
    passwd
    -

    Connecting to Android via -ssh

    -

    Make sure you have an ssh key pair on the Linux system. If not -generate one using ssh-keygen.

    -

    Now connect to Android by ssh.

    -
    ssh <username>@<ip_address> -p 8022
    -

    Syncronising files with -rsync

    -

    Install rsync on Termux and Linux. Make sure to keep -your own openssl config.

    -
    pkg install rsync
    -

    Now on your Linux machine, syncronise your Music library with -rsync.

    -
    rsync -av -e "ssh -p 8022" ~/Music <username>@<ip_address>:/data/data/com.termux/files/home/storage/music
    -

    Refreshing the Android -MediaStore

    -

    Android uses a Database to store files. In order to play your music, -this database needs to be refreshed. This can be achieved by a reboot or -by using adb to manually refresh it.

    -
    sudo dnf install adb
    -

    Connect the Android device via USB and see if it is listed.

    -
    adb devices
    -

    If it is, restart adb in TCP mode with port 5555

    -
    adb tcpip 5555
    -

    Connect to the device using its .

    -
    adb connect <ip_address>
    -

    Refresh MediaStore.

    -
    adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN -d file:///data/data/com.termux/files/home/storage/music/
    -
    -
    -
    - -

    -Previous -CUPS -Next -

    -
    +

    In this case 10.42.0.200.

    +

    The ssh server should now be running and listening on + port 8022. You can check by running

    +
    nmap -Pn <ip_address>
    +

    For me <ip_address> whould be + 10.42.0.200.

    +

    Get the username.

    +
    whoami
    +
    u0_a700
    +

    Set a password for this user.

    +
    passwd
    +

    Connecting to Android + via ssh

    +

    Make sure you have an ssh key pair on the Linux system. + If not generate one using ssh-keygen.

    +

    Now connect to Android by ssh.

    +
    ssh <username>@<ip_address> -p 8022
    +

    Syncronising files + with rsync

    +

    Install rsync on Termux and Linux. Make sure + to keep your own openssl config.

    +
    pkg install rsync
    +

    Now on your Linux machine, syncronise your Music library + with rsync.

    +
    rsync -av -e "ssh -p 8022" ~/Music <username>@<ip_address>:/data/data/com.termux/files/home/storage/music
    + + +
    + +
    + diff --git a/public_html/eh/eh/eh/eh-eh/scripts/shork.js b/public_html/eh/eh/eh/eh-eh/scripts/shork.js new file mode 100644 index 0000000..4556b71 --- /dev/null +++ b/public_html/eh/eh/eh/eh-eh/scripts/shork.js @@ -0,0 +1,102 @@ +let shork_image = document.getElementById("shork"); + +let zoomies = 4; +let turnies = 0.2; + +let shork = {x: 4, y: 8}; +let rotation = 0; +let shork_init = transform(shork, -rotation); +shork_image.style.transform = `matrix(${shork_init.a}, ${shork_init.b}, ${shork_init.c}, ${shork_init.d}, ${shork_init.x}, ${shork_init.y})`; + +let mouse = {x: 0, y: 0}; +onmousemove = function(e){ + mouse.x = e.pageX; + mouse.y = e.pageY; +} + +let direction = 0; +let movement = 0; +let target = 0; + +function move() { + direction = vector(shork, mouse); + + if (norm(direction) >= 4) { + movement = scalar(angletovec(rotation), zoomies * norm(direction)/128); + shork = add(shork, movement); + target = angle(direction); + rotation = interpolate(rotation, target, turnies) + Math.sin(norm(movement))/8; + } + + let trans = transform(shork, -rotation); + shork_image.style.transform = `matrix(${trans.a}, ${trans.b}, ${trans.c}, ${trans.d}, ${trans.x}, ${trans.y})`; + + setTimeout(move, 30); +} + +shork_image.addEventListener("click", function(e) {move()}, {once: true}); + +function vector(a, b) { + return { + x: b.x - a.x, + y: b.y - a.y + }; +} + +function angle(v) { + return Math.atan2(v.y, v.x); +} + +function angletovec(a) { + return {x: Math.cos(a), y: Math.sin(a)}; +} + +function norm(v) { + return Math.sqrt(Math.pow(v.x, 2) + Math.pow(v.y, 2)); +} + +function unit(v) { + let length = norm(v); + + if (length == 0) return {x: 0, y: 0}; + + return {x: v.x / length, y: v.y / length}; +} + +function scalar(v, a) { + return {x: v.x * a, y: v.y * a}; +} + +function add(v, u) { + return {x: v.x + u.x, y: v.y + u.y}; +} + +function round(v) { + return {x: Math.round(v.x), y: Math.round(v.y)}; +} + +function clamp(a, min, max) { + if (a < min) return min; + if (a > max) return max; + return a; +} + +function interpolate(a, b, c) { + let d = Math.abs(a - b) + if (d > Math.abs(a - b - 2 * Math.PI)) a = a - 2 * Math.PI; + if (d > Math.abs(a - b + 2 * Math.PI)) a = a + 2 * Math.PI; + + if (a < b) a = clamp(a + c, a, b); + if (a > b) a = clamp(a - c, b, a); + + a += 3 * Math.PI; + a = a % (2 * Math.PI); + a -= Math.PI; + + return a; +} + +function transform(v, a) { + return {a: Math.cos(a), b: -Math.sin(a), c: Math.sin(a), d: Math.cos(a), x: v.x, y: v.y}; +} + diff --git a/public_html/eh/eh/eh/eh-eh/styles/images/cups_left.svg b/public_html/eh/eh/eh/eh-eh/styles/images/cups_left.svg deleted file mode 100644 index 2412435..0000000 --- a/public_html/eh/eh/eh/eh-eh/styles/images/cups_left.svg +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - diff --git a/public_html/eh/eh/eh/eh-eh/styles/images/cups_left_dark.svg b/public_html/eh/eh/eh/eh-eh/styles/images/cups_left_dark.svg deleted file mode 100644 index 7ae7a67..0000000 --- a/public_html/eh/eh/eh/eh-eh/styles/images/cups_left_dark.svg +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - diff --git a/public_html/eh/eh/eh/eh-eh/styles/images/cups_logo.svg b/public_html/eh/eh/eh/eh-eh/styles/images/cups_logo.svg deleted file mode 100644 index cecb1db..0000000 --- a/public_html/eh/eh/eh/eh-eh/styles/images/cups_logo.svg +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public_html/eh/eh/eh/eh-eh/styles/images/cups_logo_dark.svg b/public_html/eh/eh/eh/eh-eh/styles/images/cups_logo_dark.svg deleted file mode 100644 index d01e673..0000000 --- a/public_html/eh/eh/eh/eh-eh/styles/images/cups_logo_dark.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public_html/eh/eh/eh/eh-eh/styles/images/cups_right.svg b/public_html/eh/eh/eh/eh-eh/styles/images/cups_right.svg deleted file mode 100644 index 7da7c88..0000000 --- a/public_html/eh/eh/eh/eh-eh/styles/images/cups_right.svg +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - diff --git a/public_html/eh/eh/eh/eh-eh/styles/images/cups_right_dark.svg b/public_html/eh/eh/eh/eh-eh/styles/images/cups_right_dark.svg deleted file mode 100644 index 5770ecf..0000000 --- a/public_html/eh/eh/eh/eh-eh/styles/images/cups_right_dark.svg +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - diff --git a/public_html/eh/eh/eh/eh-eh/styles/images/shark-top-small.png b/public_html/eh/eh/eh/eh-eh/styles/images/shark-top-small.png index 56e8624..a08fa23 100644 Binary files a/public_html/eh/eh/eh/eh-eh/styles/images/shark-top-small.png and b/public_html/eh/eh/eh/eh-eh/styles/images/shark-top-small.png differ diff --git a/public_html/eh/eh/eh/eh-eh/styles/images/shark-top-small.xcf b/public_html/eh/eh/eh/eh-eh/styles/images/shark-top-small.xcf index bd0e140..effd994 100644 Binary files a/public_html/eh/eh/eh/eh-eh/styles/images/shark-top-small.xcf and b/public_html/eh/eh/eh/eh-eh/styles/images/shark-top-small.xcf differ diff --git a/public_html/eh/eh/eh/eh-eh/styles/style.css b/public_html/eh/eh/eh/eh-eh/styles/style.css index e6e14cc..056a20d 100644 --- a/public_html/eh/eh/eh/eh-eh/styles/style.css +++ b/public_html/eh/eh/eh/eh-eh/styles/style.css @@ -1,114 +1,221 @@ :root { - --foreground: #1a1a1a; - --background: #fdfdfdf0; - --border: #c9c9c9; - --html-background: #e3e3e3; - --blockquote-text: #606060; - --blockquote-border: #e6e6e6; - --button-border: #e3e3e3; - --button-background: #d0d0d0; + --foreground: #586e75; + --background: #fdf6e3; + --html-border: #eee8d5; + --html-background: #268bd2; + --body-background: linear-gradient(to bottom, #2aa198, #268bd2); + --blockquote-text: #657b83; + --blockquote-border: #eee8d5; + --button-primary: #fdf6e3; + --button-secondary: #eee8d5; + --code-color: #657b83; + --code-background: #fdf6e3; + --code-line-number-color: #93a1a1; + --code-line-number-background: #eee8d5; + --code-comment-color: #93a1a1; + --code-keyword-color: #586e75; } @media (prefers-color-scheme: dark) { :root { - --foreground: #fdfdfd; - --background: #1a1a1af0; - --border: #4c4c4c; - --html-background: #303030; - --blockquote-text: #e6e6e6; - --blockquote-border: #606060; - --button-border: #4c4c4c; - --button-background: #404040; + --foreground: #93a1a1; + --background: #002b36; + --html-border: #073642; + --html-background: #6c71c4; + --body-background: linear-gradient(to bottom, #268bd2, #6c71c4); + --blockquote-text: #839496; + --blockquote-border: #073642; + --button-primary: #073642; + --button-secondary: #002b36; + --code-color: #839496; + --code-background: #002b36; + --code-line-number-color: #586e75; + --code-line-number-background: #073642; + --code-comment-color: #586e75; + --code-keyword-color: #93a1a1; } } +pre.numberSource code > span > a:first-child::before { + background-color: var(--code-line-number-background); + color: var(--code-line-number-color); +} + +pre.numberSource { + margin-left: 3em; + border-left: none; + padding-left: 4px; +} + +@media screen { + pre > code.sourceCode > span > a:first-child::before { text-decoration: none; } +} + +div.sourceCode { + color: var(--code-color); + background-color: var(--code-background); + line-height: 80%; +} + +code span.co { color: var(--code-comment-color); font-style: italic; } /* Comment */ +code span.do { color: var(--code-comment-color); font-style: italic; } /* Documentation */ +code span.kw { color: var(--code-keyword-color); font-weight: bold; } /* Keyword */ + html { color: var(--foreground); - /*background: url("recursion.gif");*/ background: var(--html-background); - background-repeat: repeat-y; - background-size: cover; font-family: serif; font-size: 14pt; } body { - background-color: var(--background); - border: solid 1px var(--border); - margin: 0 auto; + margin: 0; + background: var(--body-background); +} + +main { max-width: 48em; + + margin: 0 auto; padding-left: 50pt; padding-right: 50pt; padding-top: 50pt; padding-bottom: 50pt; + hyphens: auto; overflow-wrap: break-word; text-rendering: optimizeLegibility; font-kerning: normal; + + background-color: var(--background); + border-left: solid 3pt var(--html-border); + border-right: solid 3pt var(--html-border); } -#tv-screen { - position: fixed; - top: 0; - left: 0; - z-index: -1; +#shork { + position: absolute; + z-index: 1; + left: -36px; + top: -32px; + width: 64px; + transform-origin: 50% 50%; } #page-header { display: flex; flex-direction: row; - flex-wrap: nowrap; + gap: 2pt; justify-content: space-between; - text-align: left; - border: 4pt ridge var(--border); + max-width: 60em; + + margin: 0 auto; + padding: 4pt; + background: url("images/shark-top-small.png"); background-size: contain; + border: solid 3pt var(--html-border); } -#page-header li { - list-style: none; - display: inline-block; -} - -#page-header a:active { - border: 2pt inset var(--button-border) +#page-header div { + display: flex; + justify-content: center; + gap: 2pt; } #page-header a { + display: block; color: var(--foreground); text-decoration: none; - margin: 4pt; - padding: 4pt; - border: 2pt outset var(--button-border); - background-color: var(--button-background) + padding: 2pt; + border-radius: 3pt; +} + +.page-header-button { + background: linear-gradient(to bottom, var(--button-primary) 0%, var(--button-secondary) 100%); + border: 1pt solid var(--blockquote-border); +} + +.page-header-button:active { + background: linear-gradient(to bottom, var(--button-secondary) 0%, var(--button-primary) 100%); +} + +.rss-button { + color: #fdf6e3 !important; + background: linear-gradient(to bottom, #ff925a 0%, #d95c29 100%); + border: 1pt solid #f87741; +} + +.rss-button:active { + background: linear-gradient(to bottom, #d95c29 0%, #fb9d3a 100%); +} + +.hedgedoc-button { + color: #fdf6e3 !important; + background: linear-gradient(to bottom, #f45c39 0%, #b51f08 100%); + border: 1pt solid #d44021; +} + +.hedgedoc-button:active { + background: linear-gradient(to bottom, #b51f08 0%, #f45c39 100%); +} + +.nextcloud-button { + color: #fdf6e3 !important; + background: linear-gradient(to bottom, #539ad5 0%, #00679e 100%); + border: 1pt solid #3480b9; +} + +.nextcloud-button:active { + background: linear-gradient(to bottom, #00679e 0%, #539ad5 100%); +} + +.forgejo-button { + color: #fdf6e3 !important; + background: linear-gradient(to bottom, #ff7740 0%, #c2410c 100%); + border: 1pt solid #e15c27; +} + +.forgejo-button:active { + background: linear-gradient(to bottom, #c2410c 0%, #ff7740 100%); +} + +.jupyter-button { + color: #fdf6e3 !important; + background: linear-gradient(to bottom, #ffae5c 0%, #f37524 100%); + border: 1pt solid #ff903f; +} + +.jupyter-button:active { + background: linear-gradient(to bottom, #f37524 0%, #ffae5c 100%); } -#page-header ul, #articles ul { padding-left: 0; } #articles li { list-style: none; - display: block; } .articles-header { + margin: 8pt 0 4pt 0; + text-align: left; +} + +.articles-footer { display: flex; - flex-direction: row; - flex-wrap: nowrap; justify-content: space-between; + margin-top: 4pt; } .articles-title { - margin: 8pt 0 4pt 0; font-size: 14pt; font-weight: bold; } .articles-author { - margin: 12pt 0 4pt 0; + font-style: italic; } .articles-summary { @@ -116,42 +223,29 @@ body { } .articles-date { - margin: 0; text-align: right; } #page-footer { - border: 4pt ridge var(--border); - background: url("images/shark-top-small.png"); - background-size: contain; display: flex; justify-content: center; + max-width: 60em; + + margin: 0 auto; + padding: 4pt; + + background: url("images/shark-top-small.png"); + background-size: contain; + border: solid 3pt var(--html-border); } -#page-footer p { +#page-footer nav { display: flex; - flex-direction: row; align-items: center; } -/* -#TOC { - padding: 24px; -} - -section { - display: flex; - flex-direction: row; -} - -article { - padding: 12px; - overflow: auto; -} -*/ - @media (max-width: 600px) { - body { + main { font-size: 0.9em; padding: 12pt; } @@ -159,6 +253,10 @@ article { h1 { font-size: 1.8em; } + + #page-header { + flex-direction: column; + } } @media print { @@ -186,6 +284,14 @@ article { page-break-after: avoid; } + a { + color: black; + } + + #page { + border: none; + } + #page-header, #page-footer { display: none; @@ -284,8 +390,20 @@ hr { margin: 1em 0; } -table { +figure { margin: 1em 0; + width: 100%; + overflow-x: auto; + display: block; + text-align: center; +} + +figcaption { + margin-top: 0.75em; +} + +table { + margin: 1em auto; border-collapse: collapse; width: 100%; overflow-x: auto; diff --git a/public_html/eh/eh/eh/index.html b/public_html/eh/eh/eh/index.html old mode 100755 new mode 100644 index 9ec3fb5..a3c963c --- a/public_html/eh/eh/eh/index.html +++ b/public_html/eh/eh/eh/index.html @@ -1,7 +1,7 @@ - Page Title + EH-EH diff --git a/public_html/eh/eh/index.html b/public_html/eh/eh/index.html old mode 100755 new mode 100644 index 504e6ec..7c98223 --- a/public_html/eh/eh/index.html +++ b/public_html/eh/eh/index.html @@ -1,7 +1,7 @@ - Page Title + EH diff --git a/public_html/eh/index.html b/public_html/eh/index.html old mode 100755 new mode 100644 index f539053..b89dfe6 --- a/public_html/eh/index.html +++ b/public_html/eh/index.html @@ -1,7 +1,7 @@ - Page Title + EH diff --git a/public_html/index.html b/public_html/index.html index 753c302..130854e 100644 --- a/public_html/index.html +++ b/public_html/index.html @@ -1,7 +1,7 @@ - Page Title + NEVER EVER EVER. DEH diff --git a/scripts/shork.js b/scripts/shork.js new file mode 100644 index 0000000..4556b71 --- /dev/null +++ b/scripts/shork.js @@ -0,0 +1,102 @@ +let shork_image = document.getElementById("shork"); + +let zoomies = 4; +let turnies = 0.2; + +let shork = {x: 4, y: 8}; +let rotation = 0; +let shork_init = transform(shork, -rotation); +shork_image.style.transform = `matrix(${shork_init.a}, ${shork_init.b}, ${shork_init.c}, ${shork_init.d}, ${shork_init.x}, ${shork_init.y})`; + +let mouse = {x: 0, y: 0}; +onmousemove = function(e){ + mouse.x = e.pageX; + mouse.y = e.pageY; +} + +let direction = 0; +let movement = 0; +let target = 0; + +function move() { + direction = vector(shork, mouse); + + if (norm(direction) >= 4) { + movement = scalar(angletovec(rotation), zoomies * norm(direction)/128); + shork = add(shork, movement); + target = angle(direction); + rotation = interpolate(rotation, target, turnies) + Math.sin(norm(movement))/8; + } + + let trans = transform(shork, -rotation); + shork_image.style.transform = `matrix(${trans.a}, ${trans.b}, ${trans.c}, ${trans.d}, ${trans.x}, ${trans.y})`; + + setTimeout(move, 30); +} + +shork_image.addEventListener("click", function(e) {move()}, {once: true}); + +function vector(a, b) { + return { + x: b.x - a.x, + y: b.y - a.y + }; +} + +function angle(v) { + return Math.atan2(v.y, v.x); +} + +function angletovec(a) { + return {x: Math.cos(a), y: Math.sin(a)}; +} + +function norm(v) { + return Math.sqrt(Math.pow(v.x, 2) + Math.pow(v.y, 2)); +} + +function unit(v) { + let length = norm(v); + + if (length == 0) return {x: 0, y: 0}; + + return {x: v.x / length, y: v.y / length}; +} + +function scalar(v, a) { + return {x: v.x * a, y: v.y * a}; +} + +function add(v, u) { + return {x: v.x + u.x, y: v.y + u.y}; +} + +function round(v) { + return {x: Math.round(v.x), y: Math.round(v.y)}; +} + +function clamp(a, min, max) { + if (a < min) return min; + if (a > max) return max; + return a; +} + +function interpolate(a, b, c) { + let d = Math.abs(a - b) + if (d > Math.abs(a - b - 2 * Math.PI)) a = a - 2 * Math.PI; + if (d > Math.abs(a - b + 2 * Math.PI)) a = a + 2 * Math.PI; + + if (a < b) a = clamp(a + c, a, b); + if (a > b) a = clamp(a - c, b, a); + + a += 3 * Math.PI; + a = a % (2 * Math.PI); + a -= Math.PI; + + return a; +} + +function transform(v, a) { + return {a: Math.cos(a), b: -Math.sin(a), c: Math.sin(a), d: Math.cos(a), x: v.x, y: v.y}; +} + diff --git a/src/articles.json b/src/articles.json index 4872ffd..ee77c50 100644 --- a/src/articles.json +++ b/src/articles.json @@ -2,26 +2,41 @@ "articles": [ { "author": "Never", - "date": "9.1.2026", + "date": "2026-06-22", + "email": "n.gude@posteo.de", + "summary": "Inspiriert von der Küche der Kuhtreiber des Wilden Westens.", + "title": "Bohnen und Maisbrot", + "updated": "2026-06-22T20:47+02:00", + "filename": "beans-and-cornbread" + }, + { + "author": "Never", + "date": "2026-01-12", + "email": "n.gude@posteo.de", + "summary": "As Spotify is getting enshittified by capitalism, keeping a music library is kind of essential. Here I use rsync to syncronise my library with my Android smartphone.", + "title": "Using rsync on Android to syncronise my Music library", + "updated": "2026-01-12T16:24+01:00", + "filename": "rsync-android" + }, + { + "author": "Never", + "date": "2026-01-09", + "email": "n.gude@posteo.de", "subtitle": "Some unintuitive quirks of Latex", "summary": "Latex undoubtedly has some quirks. Some of them have a rather unintuitive solution. In this article I cover some quirks and solutions I have encountered.", "title": "Latex Endeavors", - "filename": " latex-endeavors" + "updated": "2026-01-10T16:23+01:00", + "filename": "latex-endeavors" }, { "author": "Never", - "date": "25.7.2025", + "date": "2025-07-25", + "email": "n.gude@posteo.de", "subtitle": "Neat things I picked up along the way", "summary": "Tricks and tools I learned about, while tweaking my Linux sytem or trying to do productive things.", "title": "Random linux utilities", - "filename": " random-linux-utils" - }, - { - "author": "Never", - "date": "12.01.2026", - "summary": "As Spotify is getting enshittified by capitalism, keeping a music library is kind of essential. Here I use rsync to syncronise my library with my Android smartphone.", - "title": "Using rsync on Android to syncronise my Music library", - "filename": " rsync-android" + "updated": "2025-07-25T16:24+01:00", + "filename": "random-linux-utils" } ] } diff --git a/src/articles/beans-and-cornbread.md b/src/articles/beans-and-cornbread.md new file mode 100644 index 0000000..9a80595 --- /dev/null +++ b/src/articles/beans-and-cornbread.md @@ -0,0 +1,62 @@ +--- +title: Bohnen und Maisbrot +author: Never +email: n.gude@posteo.de +date: 2026-06-22 +updated: 2026-06-22T20:47+02:00 +summary: Inspiriert von der Küche der Kuhtreiber des Wilden Westens. +--- + +# Bohnen +| Maße | Zutaten | +|-------------:|:--------| +| 2 | Zwiebeln | +| 2 | Knoblauchzehen | +| 1 | rote Chili (Peperoni/Chile de árbol[^arbol]) | +| | Kreuzkümmel | +| | Speckwürfel (Optional) | +| 1 l | Brühe (Gemüse/Huhn/Rind) | +| 1 Dose | Kidneybohnen | +| 1 Dose | Pintobohnen oder andere Bohnen | +| 1 | Chile Ancho[^ancho] oder geräuchertes Paprikapulver | +| | Petersilienstängel | +| | Limettensaft | +| | Salz + +[^arbol]: [Chile de árbol](https://en.wikipedia.org/wiki/Chile_de_%C3%A1rbol); Eine kleine, scharfe, rote Chili. Meist getrocknet zu finden. +[^ancho]: [Chile Ancho](https://en.wikipedia.org/wiki/Poblano); Eine große getrocknete Chili mit rauchigem Geschmack. + +## Zubereitung + +1. Zwiebeln, Knoblauch, rote Chili, Kreuzkümmel und Speckwürfel anbraten. + +2. Mit Brühe ablöschen und die Bohnen, Ancho Chili und Petersilienstängel hinzufügen. + Köcheln und etwas reduzieren lassen. + +3. Mit Salz und Limettensaft abschmecken. + +# Maisbrot + +| Maße | Zutaten | +|-------------:|:--------| +| 1 Tasse | Mehl | +| 1 Tasse | Maismehl | +| 4 TL | Backpulver | +| | Salz | +| 1/4 Tasse | brauner Zucker | +| 1 | Ei | +| 1/3 Tasse | flüssige Butter | +| 1 - 2 Tassen | Milch oder Buttermilch | +| 1/3 Tasse | flüssige Butter | +| | Speckwürfel (Optional) | +| | Gehackte grüne Chilis (Optional) | + +## Zubereitung + +1. Trockene Zutaten mischen. + +2. Ei und Butter unterrühren. + +3. Schrittweise die Milch hinzugeben, bis eine zähflüssige Masse + entstanden ist. + diff --git a/src/articles/latex-endeavors.md b/src/articles/latex-endeavors.md index fb19c9a..9ce1d3d 100644 --- a/src/articles/latex-endeavors.md +++ b/src/articles/latex-endeavors.md @@ -2,7 +2,9 @@ title: Latex Endeavors subtitle: Some unintuitive quirks of Latex author: Never -date: 9.1.2026 +email: n.gude@posteo.de +date: 2026-01-09 +updated: 2026-01-10T16:23+01:00 summary: Latex undoubtedly has some quirks. Some of them have a rather unintuitive solution. In this article I cover some quirks and solutions I have encountered. --- diff --git a/src/articles/random-linux-utils b/src/articles/random-linux-utils deleted file mode 100644 index 27d3079..0000000 --- a/src/articles/random-linux-utils +++ /dev/null @@ -1,18 +0,0 @@ - Latex Endeavors - Some unintuitive quirks of Latex - - Never - - 9.1.2026 - - ──────────────────── - -BIBLATEX AND BIBER - -Biber doesn’t run - -Biber doens’t run if the (fedora) package  libxcrypt-compat  is missing. -It will fail with the error message - - biber: error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory -]8;;\ \ No newline at end of file diff --git a/src/articles/random-linux-utils.html b/src/articles/random-linux-utils.html deleted file mode 100644 index df33063..0000000 --- a/src/articles/random-linux-utils.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - Latex Endeavors - - - - - - - -
    -

    Latex Endeavors

    -

    Some unintuitive quirks of Latex

    -

    Never

    -

    9.1.2026

    -
    -
    - -
    -

    BibLaTeX and Biber

    -

    Biber doesn’t run

    -

    Biber doens’t run if the (fedora) package -libxcrypt-compat is missing. It will fail with the error -message

    -
    biber: error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory
    -
    - -
    -
    - -

    - Previous - CUPS - Next -

    -
    - - diff --git a/src/articles/random-linux-utils.md b/src/articles/random-linux-utils.md index 6b5c743..852e7a3 100644 --- a/src/articles/random-linux-utils.md +++ b/src/articles/random-linux-utils.md @@ -2,7 +2,9 @@ title: Random linux utilities subtitle: Neat things I picked up along the way author: Never -date: 25.7.2025 +email: n.gude@posteo.de +date: 2025-07-25 +updated: 2025-07-25T16:24+01:00 summary: Tricks and tools I learned about, while tweaking my Linux sytem or trying to do productive things. --- diff --git a/src/articles/rsync-android b/src/articles/rsync-android deleted file mode 100644 index 27d3079..0000000 --- a/src/articles/rsync-android +++ /dev/null @@ -1,18 +0,0 @@ - Latex Endeavors - Some unintuitive quirks of Latex - - Never - - 9.1.2026 - - ──────────────────── - -BIBLATEX AND BIBER - -Biber doesn’t run - -Biber doens’t run if the (fedora) package  libxcrypt-compat  is missing. -It will fail with the error message - - biber: error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory -]8;;\ \ No newline at end of file diff --git a/src/articles/rsync-android.html b/src/articles/rsync-android.html deleted file mode 100644 index df33063..0000000 --- a/src/articles/rsync-android.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - Latex Endeavors - - - - - - - -
    -

    Latex Endeavors

    -

    Some unintuitive quirks of Latex

    -

    Never

    -

    9.1.2026

    -
    -
    - -
    -

    BibLaTeX and Biber

    -

    Biber doesn’t run

    -

    Biber doens’t run if the (fedora) package -libxcrypt-compat is missing. It will fail with the error -message

    -
    biber: error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory
    -
    - -
    -
    - -

    - Previous - CUPS - Next -

    -
    - - diff --git a/src/articles/rsync-android.md b/src/articles/rsync-android.md index 97a63f4..bf377fa 100644 --- a/src/articles/rsync-android.md +++ b/src/articles/rsync-android.md @@ -1,7 +1,9 @@ --- title: Using rsync on Android to syncronise my Music library author: Never -date: 12.01.2026 +email: n.gude@posteo.de +date: 2026-01-12 +updated: 2026-01-12T16:24+01:00 summary: As Spotify is getting enshittified by capitalism, keeping a music library is kind of essential. Here I use rsync to syncronise my library with my Android smartphone. --- @@ -97,31 +99,3 @@ Now on your Linux machine, syncronise your Music library with rsync. rsync -av -e "ssh -p 8022" ~/Music @:/data/data/com.termux/files/home/storage/music ``` -## Refreshing the Android MediaStore -Android uses a Database to store files. In order to play your music, this database -needs to be refreshed. This can be achieved by a reboot or by using adb to manually -refresh it. - -```sh -sudo dnf install adb -``` - -Connect the Android device via USB and see if it is listed. -```sh -adb devices -``` - -If it is, restart adb in TCP mode with port 5555 -```sh -adb tcpip 5555 -``` - -Connect to the device using its . -```sh -adb connect -``` - -Refresh MediaStore. -```sh -adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN -d file:///data/data/com.termux/files/home/storage/music/ -``` diff --git a/src/feed.md b/src/feed.md new file mode 100644 index 0000000..b71bec4 --- /dev/null +++ b/src/feed.md @@ -0,0 +1,8 @@ +--- +title: nevereverever.de +link: https://nevereverever.de/eh/eh/eh/eh-eh +subtitle: Here I post random stuff. +author: Never +date: 2026-03-10 +id: nevereverever.de +--- diff --git a/src/index.md b/src/index.md index fd1105f..3cc04ec 100644 --- a/src/index.md +++ b/src/index.md @@ -1,4 +1,15 @@ --- title: Home --- -Hello World + +Hello! I am Never and this is my little place on the internet where I post the +stuff that I am currently nerding out about. + +This Website itself is one of those projects, that I like to tweak and tinker +with. Maybe I'll write an article about its build system. It is also viewable +via `curl`. Just run +```sh +curl nevereverever.de +``` + +There also is an Atom Feed to stay updated about my doings. diff --git a/styles/images/shark-top-small.png b/styles/images/shark-top-small.png index 56e8624..a08fa23 100644 Binary files a/styles/images/shark-top-small.png and b/styles/images/shark-top-small.png differ diff --git a/styles/images/shark-top-small.xcf b/styles/images/shark-top-small.xcf index bd0e140..effd994 100644 Binary files a/styles/images/shark-top-small.xcf and b/styles/images/shark-top-small.xcf differ diff --git a/styles/style.css b/styles/style.css index e6e14cc..056a20d 100644 --- a/styles/style.css +++ b/styles/style.css @@ -1,114 +1,221 @@ :root { - --foreground: #1a1a1a; - --background: #fdfdfdf0; - --border: #c9c9c9; - --html-background: #e3e3e3; - --blockquote-text: #606060; - --blockquote-border: #e6e6e6; - --button-border: #e3e3e3; - --button-background: #d0d0d0; + --foreground: #586e75; + --background: #fdf6e3; + --html-border: #eee8d5; + --html-background: #268bd2; + --body-background: linear-gradient(to bottom, #2aa198, #268bd2); + --blockquote-text: #657b83; + --blockquote-border: #eee8d5; + --button-primary: #fdf6e3; + --button-secondary: #eee8d5; + --code-color: #657b83; + --code-background: #fdf6e3; + --code-line-number-color: #93a1a1; + --code-line-number-background: #eee8d5; + --code-comment-color: #93a1a1; + --code-keyword-color: #586e75; } @media (prefers-color-scheme: dark) { :root { - --foreground: #fdfdfd; - --background: #1a1a1af0; - --border: #4c4c4c; - --html-background: #303030; - --blockquote-text: #e6e6e6; - --blockquote-border: #606060; - --button-border: #4c4c4c; - --button-background: #404040; + --foreground: #93a1a1; + --background: #002b36; + --html-border: #073642; + --html-background: #6c71c4; + --body-background: linear-gradient(to bottom, #268bd2, #6c71c4); + --blockquote-text: #839496; + --blockquote-border: #073642; + --button-primary: #073642; + --button-secondary: #002b36; + --code-color: #839496; + --code-background: #002b36; + --code-line-number-color: #586e75; + --code-line-number-background: #073642; + --code-comment-color: #586e75; + --code-keyword-color: #93a1a1; } } +pre.numberSource code > span > a:first-child::before { + background-color: var(--code-line-number-background); + color: var(--code-line-number-color); +} + +pre.numberSource { + margin-left: 3em; + border-left: none; + padding-left: 4px; +} + +@media screen { + pre > code.sourceCode > span > a:first-child::before { text-decoration: none; } +} + +div.sourceCode { + color: var(--code-color); + background-color: var(--code-background); + line-height: 80%; +} + +code span.co { color: var(--code-comment-color); font-style: italic; } /* Comment */ +code span.do { color: var(--code-comment-color); font-style: italic; } /* Documentation */ +code span.kw { color: var(--code-keyword-color); font-weight: bold; } /* Keyword */ + html { color: var(--foreground); - /*background: url("recursion.gif");*/ background: var(--html-background); - background-repeat: repeat-y; - background-size: cover; font-family: serif; font-size: 14pt; } body { - background-color: var(--background); - border: solid 1px var(--border); - margin: 0 auto; + margin: 0; + background: var(--body-background); +} + +main { max-width: 48em; + + margin: 0 auto; padding-left: 50pt; padding-right: 50pt; padding-top: 50pt; padding-bottom: 50pt; + hyphens: auto; overflow-wrap: break-word; text-rendering: optimizeLegibility; font-kerning: normal; + + background-color: var(--background); + border-left: solid 3pt var(--html-border); + border-right: solid 3pt var(--html-border); } -#tv-screen { - position: fixed; - top: 0; - left: 0; - z-index: -1; +#shork { + position: absolute; + z-index: 1; + left: -36px; + top: -32px; + width: 64px; + transform-origin: 50% 50%; } #page-header { display: flex; flex-direction: row; - flex-wrap: nowrap; + gap: 2pt; justify-content: space-between; - text-align: left; - border: 4pt ridge var(--border); + max-width: 60em; + + margin: 0 auto; + padding: 4pt; + background: url("images/shark-top-small.png"); background-size: contain; + border: solid 3pt var(--html-border); } -#page-header li { - list-style: none; - display: inline-block; -} - -#page-header a:active { - border: 2pt inset var(--button-border) +#page-header div { + display: flex; + justify-content: center; + gap: 2pt; } #page-header a { + display: block; color: var(--foreground); text-decoration: none; - margin: 4pt; - padding: 4pt; - border: 2pt outset var(--button-border); - background-color: var(--button-background) + padding: 2pt; + border-radius: 3pt; +} + +.page-header-button { + background: linear-gradient(to bottom, var(--button-primary) 0%, var(--button-secondary) 100%); + border: 1pt solid var(--blockquote-border); +} + +.page-header-button:active { + background: linear-gradient(to bottom, var(--button-secondary) 0%, var(--button-primary) 100%); +} + +.rss-button { + color: #fdf6e3 !important; + background: linear-gradient(to bottom, #ff925a 0%, #d95c29 100%); + border: 1pt solid #f87741; +} + +.rss-button:active { + background: linear-gradient(to bottom, #d95c29 0%, #fb9d3a 100%); +} + +.hedgedoc-button { + color: #fdf6e3 !important; + background: linear-gradient(to bottom, #f45c39 0%, #b51f08 100%); + border: 1pt solid #d44021; +} + +.hedgedoc-button:active { + background: linear-gradient(to bottom, #b51f08 0%, #f45c39 100%); +} + +.nextcloud-button { + color: #fdf6e3 !important; + background: linear-gradient(to bottom, #539ad5 0%, #00679e 100%); + border: 1pt solid #3480b9; +} + +.nextcloud-button:active { + background: linear-gradient(to bottom, #00679e 0%, #539ad5 100%); +} + +.forgejo-button { + color: #fdf6e3 !important; + background: linear-gradient(to bottom, #ff7740 0%, #c2410c 100%); + border: 1pt solid #e15c27; +} + +.forgejo-button:active { + background: linear-gradient(to bottom, #c2410c 0%, #ff7740 100%); +} + +.jupyter-button { + color: #fdf6e3 !important; + background: linear-gradient(to bottom, #ffae5c 0%, #f37524 100%); + border: 1pt solid #ff903f; +} + +.jupyter-button:active { + background: linear-gradient(to bottom, #f37524 0%, #ffae5c 100%); } -#page-header ul, #articles ul { padding-left: 0; } #articles li { list-style: none; - display: block; } .articles-header { + margin: 8pt 0 4pt 0; + text-align: left; +} + +.articles-footer { display: flex; - flex-direction: row; - flex-wrap: nowrap; justify-content: space-between; + margin-top: 4pt; } .articles-title { - margin: 8pt 0 4pt 0; font-size: 14pt; font-weight: bold; } .articles-author { - margin: 12pt 0 4pt 0; + font-style: italic; } .articles-summary { @@ -116,42 +223,29 @@ body { } .articles-date { - margin: 0; text-align: right; } #page-footer { - border: 4pt ridge var(--border); - background: url("images/shark-top-small.png"); - background-size: contain; display: flex; justify-content: center; + max-width: 60em; + + margin: 0 auto; + padding: 4pt; + + background: url("images/shark-top-small.png"); + background-size: contain; + border: solid 3pt var(--html-border); } -#page-footer p { +#page-footer nav { display: flex; - flex-direction: row; align-items: center; } -/* -#TOC { - padding: 24px; -} - -section { - display: flex; - flex-direction: row; -} - -article { - padding: 12px; - overflow: auto; -} -*/ - @media (max-width: 600px) { - body { + main { font-size: 0.9em; padding: 12pt; } @@ -159,6 +253,10 @@ article { h1 { font-size: 1.8em; } + + #page-header { + flex-direction: column; + } } @media print { @@ -186,6 +284,14 @@ article { page-break-after: avoid; } + a { + color: black; + } + + #page { + border: none; + } + #page-header, #page-footer { display: none; @@ -284,8 +390,20 @@ hr { margin: 1em 0; } -table { +figure { margin: 1em 0; + width: 100%; + overflow-x: auto; + display: block; + text-align: center; +} + +figcaption { + margin-top: 0.75em; +} + +table { + margin: 1em auto; border-collapse: collapse; width: 100%; overflow-x: auto;