diff --git a/changelog b/changelog index 20b5a09..56c313f 100644 --- a/changelog +++ b/changelog @@ -28,4 +28,5 @@ 2024-08-09: tidy server directory, fix back button 2024-08-09: fix css issue on homepage 2024-08-09: fix thoughts not displaying in correct order -2026-08-19: rewrite .*-info pages, add footer, update home.html, make all* images links +2024-08-19: rewrite .*-info pages, add footer, update home.html, make all* images links +2024-08-20: update my-laptop.html, create my-old-laptop.html diff --git a/files/niri-dev-keybind-graph.png b/files/niri-dev-keybind-graph.png new file mode 100644 index 0000000..a499817 Binary files /dev/null and b/files/niri-dev-keybind-graph.png differ diff --git a/html/my-laptop.html b/html/my-laptop.html index 3f5a86c..b2964b6 100644 --- a/html/my-laptop.html +++ b/html/my-laptop.html @@ -7,95 +7,92 @@ - $[include html/header.html] + $[include html/header.html]
-

DEPRECATED My laptop

-

see blog post +

my laptop is rather haunted

+ I am bad at using technology.
+ this is not due to lack of technical ability, but instead due to the accumulation of unreasonable quirks over time in every computer I exert any degree of control over. +
+
+

booting and the operating system

- Currently, I am using a T530 that has been heavily modified. - I used to use a W530, but I fucked it up trying to get tianocore on it and haven't bothered fixing the bios on it yet. - I have preordered a Framework 16 because I am the definition of their target audience. - Since W530s and T530s are basically identical baring the mainboard, there is no external difference between my W530 and T530 because I just yoinked all the parts from the W530.
- my-laptop.html was last modified on $[stat -c %y ./html/my-laptop.html | head -c 10].
+ I do not use a bootloader. + instead, I have a custom kernel build based off the arch kernel with filesystem and compression drivers such that I can boot straight from my kernel. + I also do not have an initramfs. +

+

+ technically, I don't use arch linux. + I use [a custom build of] the arch kernel and arch package repos, but actually run artix. + a function of this is that instead of systemd, I use openrc.

- - - - $[img-caption "/files/laptop-keyboard.png" "photograph of my laptops keyboard, which is blank because I sanded it."] - $[img-caption "/files/laptop-radio.jpg" "The software defined radio that goes in my laptop's disc drive."] - $[img-caption "/files/keybinds_graph.png" "Graph of my keybindings, they are hard to see"] - $[img-caption "/files/laptop-charger-barrel.jpg" "charger barrel size adapter sticking out the back of my laptop"] - - - -

I have put an unreasonable amount of time in to messing with my laptop and as such am equally unreasonably proud of it.

-

Hardware modifications I have made to my laptop:

-

-

    -
  • Installed an older model's keyboard
  • -
  • Sanded the keyboard such that it is blank.
  • -
  • Upgraded most of its parts.
  • -
  • Put an SDR in its disc drive
  • -
  • Replaced the charging barrel with a worst bodge ever contest finalist because I left my charger at school for a weekend once and wanted to use my laptop.
  • -
- Additionally, I have written a custom xkb file. Unfortunately the geometry file hasn't been updated since I modded in the new keyboard, but here it is anyways:
-

- $[img-caption "/files/laptop-xkb-geometry.png" "my xkb geometry file compiled to a pdf"] -

- Disregard the fucked up escape key, I was messing with it earlier. My keyboard isn't that notable beyond binding control to caps lock and binding the old control key to mode_switch. - Additionally, when mode_switch is pressed while an alphabetic key is pressed, it types a greek letter instead. -

-

- I run artix (for the anti systemd meme), though upon getting my framework I intend to switch to gentoo. - I use i3 as my window manager with a somewhat cursed script to programatically generate it's config from a yaml file. - This script is vaguely necessary because

    -
  • I wanted a (programatically generated) graph of all my keybinds as leaf nodes with different modes as trunk nodes and individual keys as edges
  • -
  • I wanted to easily nest an arbitrarily large number of modes without it being a hassle
  • -

- an example of the function of this script is something like

-
-
-

Input (yaml):

-

-keybinds:
-a: !Mode
-    name: a
-    keybinds:
-        b: !Mode
-            name: b
-            keybinds: ...
-                                    
-
-
-

Output (i3config):

-

-mode a {
-    bindsym b mode b 
-}
-
-mode b {
-    bindsym ... ...
-}
-
-bindsym a mode a
-                                    
-
-
- From the yaml config, my python script can parse it either in to a (really bad) graph of keybinds (using the graphviz library or something like that) or in to a valid i3 config file. - In my real config, I have a mode 'base' which is the default mode with no keybinds other than mod4+space, followed by a mode 'space' reached by pressing mod4+space. - From 'space' mode, other modes may be accessed, such as 'workspaces or windows' mode, bound under w. - This gets rather absurd (intentionally so) very quickly. - The combination to move to workspace 0 while in 'base' mode is to press mod4+space ('space' mode), w ('workspaces_or_windows' mode), s ('workspaces'), g ('workspaces_goto'), 0 (move to workspace 0). -

-

- This system results in horrible user experience (but I don't care), great security (close to least intuitive setup possible), and—most importantly—an incredibly stupid graph of keybinds. - I find this unreasonably amusing. -

-
-
+

seat management and hardware issue mitigation

+

+ I once thought it would be entertaining to remove elogind from my system. + of course, I still needed it installed as a library, but disabling it was trivial. + it was replaced with seatd for seat management and acpid to suspend my computer when I close the lid. + this worked for a time, however after a couple months of this setup, elogind inexplicably began to be started by my init system. + I do not know how or why, I did not change anything, nor is there anything matching 'elogind' in /etc/init.d/. + this was bad because it would interfere with acpid. +

+

the solution

+
+~ λ cat /etc/acpi/lid.sh
+#!/bin/sh
+cat /proc/acpi/button/lid/LID0/state | grep open && (modprobe i2c_hid_acpi) || (
+    killall elogind-daemon
+    rmmod i2c_hid_acpi
+    (test -e /home/catalie/.should-power-off) && s2ram
+)               
+

+ I overcame this issue simply by attempting to kill elogind every time I close the lid of my computer. +

+

+ you may wonder, why is it running rmmod i2c_hid_acpi every time it close its laptop's lid. + you see, the framework 16 has an issue in which the trackpad and keyboard are not properly barred from waking the computer from suspend while the lid is closed. + in addition to this, the screen can flex just enough to press a key or bump the trackpad. + this causes the laptop to wake in my bag and attempt to boil the contents of my backpack. + the keyboard waking the computer from suspend can be ammended by running +

sudo acpitool -w | grep enabled | awk '{print $1}' | sed 's/\.//' | xargs -I{} sudo acpitool -W {}
+ however, the trackpad is not in the list of acpi wakeup devices for whatever reason. + thus, upon the lid being closed, I simply unload the kernel module the trackpad requires and load it again upon opening the lid. +

+
+
+

environment

+

+ I use wayland, specifically hyprland. + this is unfortunate because it is bad software (this will be elaborated upon), but I like the special workspace system. + my status bar and notification system are written in gjs with ags. I resent this because it involves javascript, but oh well. + when libastal gets documentation, I will probably rewrite my ui in that. + my terminal emulator is my own build of st. + I have yet to find a good terminal that supports all the things I want for wayland, so xwayland it is. +

+
+
+

keyboard

+

+ unlike my previous laptop, I had the option to buy this laptop such that it came with a blank keyboard. + in accordance with this, I have not sanded my keyboard. + the framework 16 keyboard runs qmk, this is very nice. + the keyboard firmware is now hardcoded to be dvorak instead of using a custom console and xkb map. + on one hand this is nice because it means I do not need to edit xkb files to remap caps lock to control, but on the other hand if I plug an external keyboard in to my laptop, it will be qwerty and I will have to load my xkb map or type in qwerty. I can probably type in qwerty. + I need to remember to finish my keyboard config at some point. also, I should make the button that breaks the keyboard until I remove it and put it back in harder to press. +

+
+
+

irregular bugs

+
$[include html/footer.html] diff --git a/html/my-old-laptop.html b/html/my-old-laptop.html new file mode 100644 index 0000000..7560820 --- /dev/null +++ b/html/my-old-laptop.html @@ -0,0 +1,105 @@ + + + laptop + + + + + $[include html/header.html] +
+
+

DEPRECATED My laptop

+

see blog post +

+ Currently, I am using a T530 that has been heavily modified. + I used to use a W530, but I fucked it up trying to get tianocore on it and haven't bothered fixing the bios on it yet. + I have preordered a Framework 16 because I am the definition of their target audience. + Since W530s and T530s are basically identical baring the mainboard, there is no external difference between my W530 and T530 because I just yoinked all the parts from the W530.
+ my-laptop.html was last modified on $[stat -c %y ./html/my-laptop.html | head -c 10].
+

+
+
+ + + + $[img-caption "/files/laptop-keyboard.png" "photograph of my laptops keyboard, which is blank because I sanded it."] + $[img-caption "/files/laptop-radio.jpg" "The software defined radio that goes in my laptop's disc drive."] + $[img-caption "/files/keybinds_graph.png" "Graph of my keybindings, they are hard to see"] + $[img-caption "/files/laptop-charger-barrel.jpg" "charger barrel size adapter sticking out the back of my laptop"] + + + +

I have put an unreasonable amount of time in to messing with my laptop and as such am equally unreasonably proud of it.

+

Hardware modifications I have made to my laptop:

+

+

    +
  • Installed an older model's keyboard
  • +
  • Sanded the keyboard such that it is blank.
  • +
  • Upgraded most of its parts.
  • +
  • Put an SDR in its disc drive
  • +
  • Replaced the charging barrel with a worst bodge ever contest finalist because I left my charger at school for a weekend once and wanted to use my laptop.
  • +
+ Additionally, I have written a custom xkb file. Unfortunately the geometry file hasn't been updated since I modded in the new keyboard, but here it is anyways:
+

+ $[img-caption "/files/laptop-xkb-geometry.png" "my xkb geometry file compiled to a pdf"] +

+ Disregard the fucked up escape key, I was messing with it earlier. My keyboard isn't that notable beyond binding control to caps lock and binding the old control key to mode_switch. + Additionally, when mode_switch is pressed while an alphabetic key is pressed, it types a greek letter instead. +

+

+ I run artix (for the anti systemd meme), though upon getting my framework I intend to switch to gentoo. + I use i3 as my window manager with a somewhat cursed script to programatically generate it's config from a yaml file. + This script is vaguely necessary because

    +
  • I wanted a (programatically generated) graph of all my keybinds as leaf nodes with different modes as trunk nodes and individual keys as edges
  • +
  • I wanted to easily nest an arbitrarily large number of modes without it being a hassle
  • +

+ an example of the function of this script is something like

+
+
+

Input (yaml):

+

+keybinds:
+a: !Mode
+    name: a
+    keybinds:
+        b: !Mode
+            name: b
+            keybinds: ...
+                                    
+
+
+

Output (i3config):

+

+mode a {
+    bindsym b mode b 
+}
+
+mode b {
+    bindsym ... ...
+}
+
+bindsym a mode a
+                                    
+
+
+ From the yaml config, my python script can parse it either in to a (really bad) graph of keybinds (using the graphviz library or something like that) or in to a valid i3 config file. + In my real config, I have a mode 'base' which is the default mode with no keybinds other than mod4+space, followed by a mode 'space' reached by pressing mod4+space. + From 'space' mode, other modes may be accessed, such as 'workspaces or windows' mode, bound under w. + This gets rather absurd (intentionally so) very quickly. + The combination to move to workspace 0 while in 'base' mode is to press mod4+space ('space' mode), w ('workspaces_or_windows' mode), s ('workspaces'), g ('workspaces_goto'), 0 (move to workspace 0). +

+

+ This system results in horrible user experience (but I don't care), great security (close to least intuitive setup possible), and—most importantly—an incredibly stupid graph of keybinds. + I find this unreasonably amusing. +

+

to my endless amusement, I may be partially to blame for the niri compositor having keybinding modes

+ $[img-caption /files/niri-dev-keybind-graph.png 'YaLTeR, the niri dev, seeing my keybind graph and deciding to implement keybinding modes'] +
+
+
+
+ $[include html/footer.html] + + diff --git a/html/natalie-info.html b/html/natalie-info.html index f9919e3..d50e086 100644 --- a/html/natalie-info.html +++ b/html/natalie-info.html @@ -54,7 +54,7 @@

contact information

Discord: _natalieeee_ - email: natalie at natalieee.net + email: natalie at natalieee.net
xmpp: nat@natalieee.net
diff --git a/html/stats.html b/html/stats.html index 93fe07f..d8e2cbc 100644 --- a/html/stats.html +++ b/html/stats.html @@ -14,7 +14,7 @@

Currently available information:

- $[for line in $(cat main.py | grep Route -A1 | grep '/stats/' | sed "s/'//g; s/,//g"); do echo "$(make-link $line)"; done] + $[for line in $(cat sludge/src/lib/router.py | grep Route -A1 | grep '/stats/' | sed "s/'//g; s/,//g" | cut -d= -f3); do echo "$(make-link $line)"; done]
$[include html/footer.html]