home tags events about login

nilix rss

lv. 0̶̢͓̯͇̦̙̲͈̜̠̩̰̜̿͒̅̄0̴̛̺̫̠̫͚̱̙̪̩̇͂̆͋̀͂̇̈̋́̋̿̇͘ cyber mage (she/her)

dragon, witch, combat doll

you might learn more

nilix shared 28 Mar 2026 05:15 +0000
original: astraleureka@social.treehouse.systems

not screen-reader friendly

not screen-reader friendly

on to some really cursed bullshit:

𝓮𝔁𝓮𝓬𝓿𝓮("/usr/bin/id", ["id"], ٠𝔁٧𝓯𝓯𝓭٤٩٣٠٦٦٤٨ /* ٥٠ 𝓿𝓪𝓻𝓼 */) = ٠

nilix posted 27 Mar 2026 23:06 +0000

Hey everyone. I'm about to finish my in-progress contract and I've got availability for more work. I build desktop and web software, design and build websites, and do other stuff like digital archiving and tech education[1].

Alternatively, if you think the software I build is cool[2], and can spare a few bucks, donations[3] go a long way.

Financial goals right now:

  • child support
  • May's rent
  • new tires for my van so I can safely make it to iwp9

[1]: https://lightcrystal.systems
[2]: https://forge.lightcrystal.systems/nilix
[3]: https://lightcrystal.systems/support

nilix posted 27 Mar 2026 01:53 +0000

even with the 9pfs i still need to keep stdin and out on hand so i can

  • send a byte to tell the window to reread some data out of the 9pfs or terminate itself
  • know when the window is closed so i can destroy its 9pfs

this is gonna be really cool tho ><

nilix posted 24 Mar 2026 16:33 +0000

i'm not leaving my house till i get a perfect(ly satisfactory) recording of nwc8

nilix posted 23 Mar 2026 19:17 +0000

redesigning the 9pfs for kuro, very excited but it's gonna involve implementing some more heavy duty xrxs modules than the ones i built so far ><

nilix posted 23 Mar 2026 15:11 +0000

i promise nwc8 is still happening, i recorded another run yesterday and its sounding really fucking good

nilix shared 22 Mar 2026 17:01 +0000
original: urchin@mk.shrine.moe

Free yourself from the bondage of time and place and status
For what peace do they give?
What truth do they reveal?
What lie do they live?
Whose blood weeps from these wounds?
Detach yourself!
Detach yourself!

For there is a war
Deep in our hearts
And that's where all battles ought to be fought
Come here
Lower your eyes
And surrender

nilix posted 21 Mar 2026 16:08 +0000

happy saturday :>

update from my side of the world- ive been fortunate enough to get another short term contract and a gracious donation this week but im still about $100 from making April rent without dipping into my savings. if youve got another gig to keep the ball rolling or a few bucks to spare please help a girl out

https://lightcrystal.systems/support

#mutualAid #fediHire

nilix posted 19 Mar 2026 20:30 +0000

Taro v0.3.0 is here! New stuff:

  • uf2 support (includes a monospace version of Geneva which makes the mscan output look nice)
  • the order of the theme colors follows the standard
  • scrollbars are pixel-perfect and the mouse pointer is a bit nicer
  • search and pending indicators are gone; search button stays hilighted when search is active; pending indicator is not needed with the synchronous architecture
  • new architecture! the backend uses the xrxs framework to expose a 9p filesystem, which the uxn instance reads and writes to

https://forge.lightcrystal.systems/nilix/taro

taro window showing the mailbox Archives/2025 with a search query active showing the uxn mailing list in the mailbox contents; a translucent terminal reading the announcement of SUPERFLY is open in front of the uxn window

nilix posted 17 Mar 2026 17:59 +0000

came up with a neat way to simplify text rendering in the new taro. since i'm always either:

  • drawing multiple lines of text in a listbox
  • or drawing a single line of text in a label or text entrybox

when drawing a line of text, when i reach a newline, i increment the address and return it, so the calling function can draw the next line of text without having to reseek to it; when i reach the end of the string, i return a null short for the calling function to check against :>

nilix posted 16 Mar 2026 18:13 +0000

ugh i have had multiple people tell me recently during my job search how brave it was that i quit my job and am trying to fight the current...

as i explained at the beginning of my last blog post, it's not like i had a choice. i literally couldn't function anymore, so yeah i guess there's an element of bravery in quitting instead of letting them fire me but the end result would have been the same

nilix posted 16 Mar 2026 04:37 +0000

banging my head against the wall all day has been very frustrating however i am getting used to thinking like a stack machine again and i have made a bit of progress ^^

nilix posted 15 Mar 2026 22:58 +0000

my font rendering adventures are not going well -.-

|00 @System     &vector $2 &wst      $1 &rst    $1 &eaddr  $2 &ecode  $1 &pad     $1 &r       $2 &g      $2 &b     $2 &debug  $1 &halt $1
|10 @Console    &vector $2 &read     $1 &pad    $5 &write  $1 &error  $1
|20 @Screen     &vector $2 &width    $2 &height $2 &auto   $1 &pad    $1 &x       $2 &y       $2 &addr   $2 &pixel $1 &sprite $1
|30 @Audio0     &vector $2 &position $2 &output $1 &pad    $3 &adsr   $2 &length  $2 &addr    $2 &volume $1 &pitch $1
|40 @Audio1     &vector $2 &position $2 &output $1 &pad    $3 &adsr   $2 &length  $2 &addr    $2 &volume $1 &pitch $1
|50 @Audio2     &vector $2 &position $2 &output $1 &pad    $3 &adsr   $2 &length  $2 &addr    $2 &volume $1 &pitch $1
|60 @Audio3     &vector $2 &position $2 &output $1 &pad    $3 &adsr   $2 &length  $2 &addr    $2 &volume $1 &pitch $1
|80 @Controller &vector $2 &button   $1 &key    $1 &func   $1
|90 @Mouse      &vector $2 &x        $2 &y      $2 &state  $1 &pad    $3 &scrollx $2 &scrolly $2
|a0 @File      &vector $2 &success  $2 &stat   $2 &delete $1 &append $1 &name    $2 &length  $2 &read   $2 &write $2
|b0 @File_      &vector $2 &success  $2 &stat   $2 &delete $1 &append $1 &name    $2 &length  $2 &read   $2 &write $2
|c0 @DateTime   &year   $2 &month    $1 &day    $1 &hour   $1 &minute $1 &second  $1 &dotw    $1 &doty   $2 &isdst $1

( variables )

|0000

( program )

|0100 ( -> )

  ( default theme ) 
  #028d .System/r DEO2 
  #0a8d .System/g DEO2 
  #098d .System/b DEO2
  
  load_font

  #0400 .Screen/width DEO2
  #0300 .Screen/height DEO2
  
  #0010 .Screen/x DEO2
  #0010 .Screen/y DEO2
  ;wtf  uf2/draw
  
BRK

@load_font ( -- )

  ;font_file .File/name DEO2
  #2100 .File/length DEO2
  ;font .File/read DEO2
  
JMP2r

@wtf "Taro 20 "or 20 "something $1
@font_file "font.uf2 00

@uf2/draw ( text* -- )
	
	[ LIT2 15 -Screen/auto ] DEO
	[ LIT2r 03 -Screen/sprite ]
	&>w
		LDAk DUP ?{ POP POP2 POP2r JMP2r }
		#0000 ROT #20 SUB
		( addr ) DUP2 #50 SFT2 ;font/glyphs ADD2 .Screen/addr DEO2
		( move ) ;font ADD2 LDA .Screen/x DEI2 ADD2
		( draw ) [ DEOkr DEOkr ] .Screen/x DEO2
		INC2 !&>w

@font $100
&glyphs $2000

@neauoire i can't really identify what i'm doing wrong here

screenshot of my font rendering test which ends up saying "4AROORSOMETHING" instead of "Taro or something"

nilix posted 15 Mar 2026 00:06 +0000

taro backend is rewritten as a 9p filesystem, just gotta clean things up a bit and push the changes, (also push the changes to xrxs itself) then i can start fucking around with the uxn side :D

nilix posted 14 Mar 2026 03:17 +0000

awww yeah we got the basics down. can probably have the whole backend of taro rewritten as a 9p filesystem by the end of the weekend

nilix replied 14 Mar 2026 01:14 +0000
in reply to: https://merveilles.town/users/neauoire/statuses/116224837018485966

@neauoire thanks! i'm gonna do all rendering in uxn though, it's more or less gonna be the same broad strokes architecture as taro currently is, just instead of communicating over STDIO it'll communicate over 9p, and instead of the backend being written in crystal with event loops it'll be in C using the xrxs approach!

but i'm sure as i redo the whole frontend i'll have more than a few questions for you since i haven't really touched uxntal in a couple years ^^;

nilix replied 13 Mar 2026 22:18 +0000
in reply to: https://cafe.nilfm.cc/u/nilix/h/DmGYKVvVR2nnM9tX42

ok we have a basic ass library that lets us build 9p filesystems really fast, like this :>

#include "xrxs/types.h"
#include "xrxs/fns.h"

enum FileType {
  CTL = 1,
  DATA
};

void xrxs_attach(Req* r) {
  respond(r, nil);
}

void xrxs_read(Req* r) {
  Aux* a = r->fid->file->aux;
  switch (a->type) {
    case DATA:
      readstr(r, "some data\n");
      respond(r, nil);
      break;
    default:
      respond(r, nil);
  }
}

void xrxs_write(Req* r) {
  respond(r, nil);
}

int threadmaybackground(void) { return 1; }

void threadmain(int argc, char* argv[]) {

    Srv* fs = xrxs_create(xrxs_read, xrxs_write, xrxs_attach);
    
    xrxs_build(fs->tree->root, "ctl", nil, DMAPPEND | 0600, create_aux(CTL));
    xrxs_build(fs->tree->root, "data", nil, 0400, create_aux(DATA));
    
    xrxs_srv(fs, nil, "/home/nilix/n");
}

nilix replied 13 Mar 2026 20:18 +0000
in reply to: https://cafe.nilfm.cc/u/nilix/h/29qW1x8H2J3R55VNSm

i decided to revisit xrxs as a generalized framework and keep it in plan9port c instead of migrating it to go, so i'm experimenting with what abstractions to include in the framework and what to leave to individual applications

nilix posted 13 Mar 2026 20:00 +0000

feels nice to be writing C again ngl

nilix posted 13 Mar 2026 15:37 +0000

full of CHAOS and RAGE

nilix posted 12 Mar 2026 19:40 +0000

tracing the through line between xrxs, taro, and kuro; i see something really cool waiting to be built

nilix shared 12 Mar 2026 15:45 +0000
original: cblgh@merveilles.town

textual offcuts from an unpublished essay

textual offcuts from an unpublished essay

When I engage with new technologies questions linger in the afterglow of the initial excitement. Am I wasting my time? What impact is this having on me?

I think that whenever we find ourselves enamoured with a novelty from the labs of humanity we should sooth fears of missing out. And instead ask questions. What do I gain from this? What do I lose? What does the purveyor gain from my adoption? How do I want to use this new thing? Questioning: do I even want this? To pause and consider the risks. Risks exist independent of our perception.

In Charlie Stross's noughties novel Accelerando, the main character is a prolific and virtuosic user of artificial agents, which in the book are computer programs that perform acts at his bidding. The primary interface for this novel substrate is a pair of glasses. In one part of the book the main character loses his computational glasses. Lost with them is the capacity for any kind of engagement with the world. He finds himself cognitively bereft, lost in a non-capacious haze.

Smart glasses exist today. I don't have any nor does anyone I know. I could make an analogy to "agentic AI", but I don't use LLMs. Instead, the smart device I consult every day is the smartphone. Where I live there is a personal identification app, produced and owned by a consortium of the biggest banks. This app is woven into all facets of life. If my phone breaks, I lose access to the identification app. A minor personal catastrophe ensues. I lose the ability to pay bills or file taxes. I can kiss goodbye to making second hand purchases on the regional version of eBay. In spite of my physical debit cards, most Internet transactions fail because I will have lost the ability to countersign. Out of town family can't contact me, and I can only let them know through the grace of the few others around with their phone number. Public transit would become an immense hassle. When my smartphone breaks the haze settles on me too.

Reducing this dependence relationship on technologies feels important. Whether for gadgets, technologies, or information networks. I don't want to be reliant on technology where I lack a voice in how it operates, any say in future changes. So that when deprived, whether temporary or otherwise, I keep my change-making capacity.