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");
}