Customising plan9 rio - 07.08.2026
I kinda abandoned this blog for a while, but today i noticed that there's no good tutorials how to customize rio from plan9, so today i gonna at least tell you how to do some minimal configuration
To customize rio, i recommend you to copy the sources so you won't break original rio:
mkdir rio
cp /sys/src/cmd/rio/* rio/
Rio folder contains a couple of .c and .h files, we will edit them to customize because rio is very minimal and not configurable without editing source code. First thing we can do is change window border width, just look up dat.h file and change one line:
Selborder = 2, /* border of selected window */
That line tells rio how much pixels should border be, also we have Unselborder but it's not that important because who even cares about unselect window border, i set it to 3 for example
Also you can change console colors, editing lines like:
cols[BACK] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, 0xFFFFFFFF);
cols[TEXT] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, 0xCCCCCCFF);
They usually located in data.c or in wind.c in wmk function, depends on plan9 version, if you wanna set colors like 0xAAAAAAFF or 0x333333FF you can just change that "0x..." line, but if you wanna set like 0xA3AFA2, you will need to create something like:
#define COLORIDK 0x[your color]FF
In dat.h and use
cols[BACK] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, COLORIDK);
Idk why you can just type hex code but it works only like that
To set wallpaper, use:
int fd;
Image *bimg = nil;
fd = open("/usr/glenda/lib/wallpaper", OREAD);
if(fd >= 0){
bimg = readimage(display, fd, 0);
close(fd);
}
if(bimg){
background = allocimage(display, Rect(0, 0, Dx(bimg->r), Dy(bimg->r)), RGB24, 1, 0x000000FF);
draw(background, background->r, bimg, 0, bimg->r.min);
}
else
fprint(2, "iconinit: %r\n");
I just copypasted it from xxiivv site, but who even cares if almost everyone uses it and it works?
This is a screenshot what i got
I know that doesn't look very nice but i started to configure it only 1-3 hours ago and i can't find normal wallpaper, and also at least it's something
My second attempt to make Rozine - 29.07.2026
Yesterday and today I tried to start it from scratch, and I made it better, because now it have musl instead of glibc and at least toolchain, but unfortunately it was GCC because I dont know how to cross-compile Clang and LLVM, and also if im not wrong, LLVM doesn't have prebuilds for musl, but GCC have it, but at least it's something, not just TinyCC which can't compile anything except Hello World code and some easy programs like doba. Also, i installed muon instead of meson, samurai to replace ninja, u-config(but after i removed it and installed pkgconf), bmake and etc.
But... Problem with curl is still here, I dont know why does that happen, i think i will add wget support in alyvine. I think that's problem with libressl and i should try default openssl or wolfssl, because pkgconf or something another cant find openssl. About kernel, idk, I tried to do this only once and it failed. Also, i need to learn at least default LFS because yea, i can compile programs, but i can't configure /etc files because i dont know how to. I need to learn busybox, need to learn how to install my own init and et cetera. I still didn't used alyvine on rozine because neither rozine or alyvine is ready to that
My attempt to made Rozine Linux - 28.07.2026
Rozine Linux should be the distro for alyvine, like Void Linux's for xbps, but unfortunately, it failed, I failed to build it because:
I dont know how to build musl libc if my host system is on glibc
I dont know much about compilation and linking
I failed to build curl because... just because
I failed to build kernel by some reason
And etc. etc. etc... Also, my lack of musl knowledge made me use glibc on Rozine Linux
MangoWM - 27.07.2026
Yesterday, I installed MangoWM and configured it, and you know, this is kinda great because it written on C, not on filthy Rust or Zig(I disappointed in Zig tbh), because it doesn't have app scale problem as niri have, i can stream in Discord and also it very easy, but... It uses scenefx, it's bloat, and also I dont understand scroller logic and bind logic, but i think i will understand it later. Also, i wanted to install some neuswc-based wm, but at first i got problems with LD_LIBRARY_PATH etc. vars, after i got problem with zig, and after a problem with LD_LIBRARY_PATH again, so i just gave up and uninstalled everything(skill issue), but i wanted to install neuwc and shko(this piece of one thing written on older Zig version and also unmaintained) because as i know they have scrolling, i love scrolling very very much tbh
Alyvine again - 27.07.2026
Today I created avadd which installs the package in directory, root at default, and also I made avdel which reads list file and deletes all those files. When alyvine will be ready to at least build, install and delete packages, I will improve code, especially the avmk, and also I will make alyvine as the shell which will work with alyvine-utils(avmk, avdel etc.), work with dependencies and etc. For today that's all what i did
About alyvine - 25.07.2026
Today I fixed the packaging in alyvine, the problem was in changing directory part because i wrote `cd "$PKG" | exit 1`, not `cd "$PKG" || exit 1` with double vertical bars. Alyvine still in very pre-beta because it can only compile and package and it's code very dumb, but at least it something, I just started and I know POSIX sh not on very professional level to be honest, I still look up some things from scratchpkg and stack overflow answers. I think my next step is understand the package deleting logic, because `tar tf (package name).avp.tar.xz` outputs not only just only package's directories, it also outputs like usr/local/bin if DESTDIR had DESTDIR/usr/local/bin/... etc.
About alyvine's early working, it uses the `receipt` file like Pkgbuild in prt-get:
name=sjon
version=v13.3
release=1
source="https://codeberg.org/snchart/$name/archive/$version.tar.gz"
build(){
cd $name
$MAKE_CMD DESTDIR=$PKG
}
This is simple receipt example, it makes sjon and installs it into $PKG, for current day it located in ~/other/alyvine/work/pkg/sjon in my system, but it's just a test and i plan to relocate it into /var/cacha/alyvine/work/sjon after. And also today i made a logo for Rozine/alyvine, you can see it here
About my package managers - alyvine and aufstieg - 25.07.2026
For those who didn't know - I tried to make package managers - aufstieg(snpkg before) and alyvine. Aufstieg is very, VERY BAD, because it was unusable - yea, you can build packages, but can't delete them from the system because it actually just compiles program straight into your /, not into DESTDIR to make a package tarball and unpack it in /. Also, the code was disgusting. I created it at 2025 December, and abandoned it at 2026 March with promises that I will continue to develop it further in next month, but actually, nothing ever happened. So i created alyvine, or rather, started to create it. I learned the basics from CRUX pkgutils when I was trying to rewrite it on POSIX sh, and now learning it from Venom scratchpkg
Alyvine, despite the fact it's new, also have problems, like the packaging is broken because I wrote wrong tar options, it's doesn't check checksums and doesn't generate it. And also, about packaging - it kinda works, but... brokes, again, it compesses the source dir, not the package dir by some reason and I dont know how to fix it, im honestly bad at using tar and etc, but im trying to learn it. Why I am even doing it? I wanna to write my own package manager because it actually interesting to do, and also, i want to create my own distro, i think i will name it Rozine, because alyvine it's Lithuanian syringa/lilac, and Rozine it's lithuanian Pink. I don't wanna to explain fully why lithuanian, but i love this language even if i dont know it
Why arch linux isn't really minimalist? - 23.07.2026
I've heard about that distro very much, but never liked it and kinda never tried it outside virtual machines(hopefully), even when I was mint larper, and I had different reasons for different times: at first i hated it because arch users was very toxic and i liked mint and debian, now i hate it because it's kinda actual pseudominimalistic LARP or idk. Arch uses systemd and you already know what im talking about, but if we dont talk about init system, i wanna remind that this distro uses ZSH AND BASH AT THE SAME TIME IN FREAKING LIVE BOOT. for me, that is lowk antiminimalism.. i love zsh because it's like mksh but much better, but why we have bash and zsh? why not just dash? It's live iso. And also, pacstrap, the creation of devil himself, I honestly dont know why this thing exists. Why not just 'pacman -S arch-base' or using rootfs tarball? It's better than using separate utility for installing base system, it's called bloat, not "minimalism"
When arch was created, it was just a clone of CRUX, the minimalist system which still in 2026 use manual kernel compiling and sysVinit, but now it's just like ubuntu, but without DE/WM preinstalled and with another package manager. Also, the pacman is gross, i was using Bedrock Linux once with Void+Arch, and that... thing, named pacman, installed very much dependencies with Firefox that no one even need i think, like avahi etc. Im not denying that other distros like Gentoo don't have useless dependency problems, i myself have that problem with cups installing itself by no reason, but arch have this problem worse that others. And i dont wanna even mention AUR hacking, tho it was kinda fun when arch users genuinely got scared from that. Only thing that arch did good is helped Steam to create SteamOS and made Linux more popular, but Arch still sucks
Also, i dont think that's about KISS philosophy, but arch mirrors is always unstable, they are oftenly down by some reason, i deleted arch strat on Bedrock Linux because of "could not host archlinux.gay" or sum idk
My opinion on Rust - 23.07.2026
Idk what to say about it, Rust is kinda bloat, kinda have strange syntax and kinda not oldschool(tho im not ogg myself). And Rustceans pissing me of, why not just stop rewriting everything? What's even point of that? That's hella unstable, we already have unbloated alternatives of famous C programms(i described it in "My opinion about GNU software") which more stable than yours broken rust utils etc. For today, unfortunately I use niri, which written on rust, but I can't do anything with that until I learn C and neuswc/wlroots. To be honest, Zig or Go have more future than rust, maybe even haskell, but I dont think that mathematically-or-whatever correct lang can overpower C. I'm forcing anyone not to use it(dont do Rust, kids), because it's kinda my problem that i hate very much languages like C++, Python, bash(i mean GNU/bash) etc. because of their syntax, their issues and whatever
My opinion about GNU software - 23.07.2026
Honestly, I don't hate GNU or FOSS itself, I just hate that they're doing. I hate GNU software because actually it's just bunch of legacy, bloat and unstable code, which making app compatible to hardware that no one actually uses to be honest. And unfortunately, we are kinda forced to use it. Wanna play Steam or proprietary games - use glibc. Wanna to keep your dotfiles clean in one directory - use stow. Wanna boot ur system without any problems - use grub. "But we can use flatpak and limine?", yes, we can, but flatpak isn't better than gnu software, and limine is kinda... unusable for me, it have very small documentation to be honest, but maybe it's just mine skill issues... Anyway, I think that GNU software is of course open source and etc, but it's bad, y'know. I'd like to use the alternatives of gnu software, but: make doesn't have any perfect alternatives, and i use Gentoo where GNU make is very matter, i like play Steam games but it's hard to run them on musl. But i replaced gcc for clang, and would like to replace others, and you also can replace something like:
glibc to musl
gcc to clang
coreutils to busybox
flex to reflex
autotools to hell, or just write makefiles manually, lol
grub to limine
bash to mksh/zsh/yash
...and others, just look up this, thanks to dérivelinux!