Akseli

@akselmo.dev.web.brid.gy

I'm Akseli, also known as Aks from Finland! KDE dev by day and a hobbyist gamedev/FOSS-dev by night. Loves video games and metal/EBM music.

Initial Release of Union QtWidgets

It has begun. After couple months of work, I have now finally managed to cobble together the QtWidgets side of Union. This means that your QtWidgets apps, such as Dolphin, KMail, Kate etc. can now use the Union CSS files as the source of their styling. **However, temper your expectations, as this is the first initial release!** Do note that there are visual bugs and oddities! I'm still working on things! So yes, as you can see, some things look off. Not Breeze at all! Some things are just different, some other things have wrong colors. These are all fixable and I will do my best to get as many things as possible fixed for the Plasma 6.8 release. But some other oddities are kind of expected: This is the first time ever Breeze QtWidgets and QtQuick style have **same shared source-of-truth** as an easily editable file! (Excluding colorschemes.) So some of these designs are made with QtQuick in mind, so they can look a bit off in QtWidgets. I'll go through here what I did and what still needs to be done, but this was a huge undertaking, so I'm having a small celebration for the very first release of this. :) ## Hold on, can I try it!? Yes! It should be released in Plasma 6.8, unless someone tells me no. As of writing this, nobody has said no. You can make your own CSS files and see them affect QtWidgets apps too. Just expect some breakage and report all the bugs! Go crazy with the themes. Try everything. Bring back whimsy to computers. Tell us about the theming experience in general. **Have fun.** Your computer should be just as cool as you are. The rest of this blogpost is more a technical rant and ramble as I am venting all the exhaustion over this thing, lol. ## QStyle is difficult QStyle themes, which are the styles that modify the look of QtWidgets applications, are not easy to work on. Most themes I've seen take an existing one, such as Fusion or Breeze and make their changes on top of those. But for Union, we had to start from scratch. I took the very basic base of QStyle, which is called QCommonStyle (kind of a fallback theme), and began building on top of that. Then, there was multiple parts: * Figure out a way for the QStyle to paint things using CSS * Build a hierarchy of the style by reading the CSS data and applying it to QStyle world * Create a completely new set of element files we use * The QStyle themes are very unwieldy and hard to work on otherwise * Go through _every single element_ and ensure they read all data from the CSS correctly * And ensure the style stays backwards compatible! * This is still ongoing process, most bugs lurk here. :P * Figure out how to use Union layouting system within QStyle elements * This is also buggy, as QStyle is more "rigid" with layouting * Applications expect very specific layouting from QStyles over the years it has existed * So any application that deviates from those expectations will look broken * Caching so that the style is performant * Here Arjen helped me a lot, thank you! * And a lot of other stuff I have already forgotten.. Thankfully redstrate had already made the painting part for the very simplified proxystyle (which took Breeze and modified it a bit), so I did not have to modify that too much. I mostly had to poke at it to make it work with my hierarchy system. So thanks! <3 It's hard to put it into words how much work there was involving the actual QStyle itself and creating a sort of "framework within a framework" so that the Union rules would translate better for the QStyle rules. For example, when a widget, such as a PushButton, wants to be styled, it informs the QStyle about it with something called `QStyleOptionButton`. This class holds bunch of information about the button, and the style can use that information to decorate it better. But of course, the styleoption does not necessarily need to exist. If there is no styleoption, the style can use the `QWidget` itself for style information. But even that can be empty! And at that point, you do not know how to style something, since you do not even know what it is. What made matters even worse was that the documentation just Does Not Exist. Sure, there is the QStyle documentation, but it is more about "what" and not "why" or "how." I could have used somekind of tutorial for how to make a QStyle from scratch, but I could not really find anything, except super old information from Qt4 times. So very very often I resorted to just reading the raw source code itself, which is also not very easy to read. There is a lot of variables that are just named `pw` or `w`. So even the codebase is very undocumented..! Most of the work had to be done with trial and error! "What happens if I change this value?" "What if I use debugger to follow this variable, where will it lead?" I also used Breeze as my information bank a lot, as it had gone through it all before. That was very helpful. But the lack of documentation and old codebase nobody seems to really touch anymore, much less document, was the thing that made this all take so long time. Not to forget the completely misleading names in the API. "PM_MenuPanelWidth" is not the width of the panel, but actually "Border width (applied on all sides) for a QMenu." The total work was 9000 lines of code. Yes. And all of it is required. Lot's of boilerplate, as QStyle seems to love boilerplate. Pretty much all of it is artisanal, handwritten slop by yours truly. I had to painstakingly go through all the elements we're drawing and sizes we're calculating, then turning it into an `Element` that we can easily modify without modifying the whole style. If you have managed to make a working QStyle theme completely from scratch, going through every little detail, I salute you. **This is some of the toughest stuff I've ever worked on.** So in summary: I had to backwards engineer a lot of stuff to figure out what order we even draw some things, or what size affects what in the actual application. Then make it work with Union core and CSS. DOCUMENT YOUR API PLEASE I BEG YOU ## Next steps Next up is testing and bugfixing. There's already a lot of bugs being found here: https://invent.kde.org/plasma/union/-/work_items/205 And more will be found. There will be weird edgecases where application expects everything to work like in Fusion style, as it's the default Qt style, but Union does not handle that situation yet well. So here's what I need from you, dear reader: See what breaks. Document it. Make a bugreport. Let's find these weird things and figure them out, so that the QtWidgets side can finally be themed without so much pain. Of course, there's also the design side: Like I mentioned earlier, the Breeze CSS we have now is very QtQuick oriented, so QtWidgets applications can look and feel odd. Something to keep in mind though is that QtQuick and QtWidgets applications will likely never look the exact same, due to the way how they work and are drawn. But we can try to make the QtWidgets style work reliably first and then try to make it look as close to QtQuick side as possible. My todo list is pretty much following: * Fix as many bugs as I can before 6.8 release * Figure out a layouting system for the QStyle that is robust * Even if it can't do all the tricks QtQuick can * Make sure the QStyle is backwards compatible with as many applications as possible So, more work. A lot of work. But at least we can now properly start that work, which is what this first release is about. Getting the tedium out of the way, so the interesting parts can begin. And boy how much tedium that was. I would never do it again, but honestly.. It was _fun_ at times. Super interesting to figure out. Like a very tough puzzle game. I'm happy with what I've achieved here, even if it's not perfect yet. And I hope all this work is useful for you too, dear users. I really want to see the crazy things you all will come up with. Thanks for reading! _ps. Again sorry if this reads all over the place, I just needed to get it out of my system._ _I don't like writing drafts much, so I just write a braindump and go._

akselmo.dev

Deleted my fedi account

Aaaand it's gone. I deleted my fedi account because I got tired of how aggressive it all was, and I had so many followers I felt like every move I did, everything I said, was scrutinized by some people. Few of these said people tried to influence my way of thinking, trying to make me agree with them about everything. And if I didn't, that would cause me to be outcasted as the evil one. It was very hard to be myself under the constant scrutiny of 1400 followers. "Ignore the haters" yeah sure but that's not how shit works. I left twitter long ago (before the rich cunt bought the site), because it had turned already back then into godawful site where "dunking" and being just mean to each other was rewarded. I joined fedi back then, and it was nice, rather safe space for autistic queers like myself. (I say autistic here with love, as I'm part of that.) Now fedi is very similar to twitter, and the more followers I had the more I felt like I was under constant surveillance. I had my followers set to requests for a while but I kept just accepting people, then at some point just opened the follow requests. I was past of the point where I could just go my follower list and nuke it all without it being a huge operation. I also don't want to pay extra for a site that constantly makes me feel like shit. So yeah, my `@aks@scalie.zone` handle is gone. Scalie.zone itself will be gone soon. As I am glutton for punishment, I will likely join fedi again at some point to share photos of our new snake, but I will make it my own solo instance and not advertise it anywhere. All followers will be vetted through. Dunno when though, and I will not let you know unless we're close friends. I'll keep blogging and my matrix `@aks:mx.scalie.zone` is still there. That's enough social media for me for now. ps. You can actually follow this blog on fedi, the handle is `@akselmo.dev@akselmo.dev`

akselmo.dev

KDE Linux experiences

I daily drove KDE Linux for almost a year and I liked it, but I'm also switching back to Fedora KDE. Here's my ramblings about it all. KDE Linux is the hot new Linux distro from KDE themselves. At the moment it uses Arch Linux as it's base but with heavy modifications and changes. You can read more about it on the site, but to sum up: It's an atomic/"immutable" distro that does not have any kind of package management outside of installing flatpaks. _(Do note that they're epxerimenting on using buildstream instead of Arch Linux.)_ As one of the KDE devs I've been daily driving it on my desktop, which I use for both work and leisure (gaming). The following text can be quite technical as I am viewing this through my developer workflow lense, though I will also touch on regular user things. ## Upsides For general purpose computing and KDE dev, things are looking great! Honestly, it works rather well, considering the alpha status. And for development purposes, the nightly builds of the newest hottest stuff from our git repos is very nice: I don't have to build everything myself every morning. Though there are some issues with that too: Sometimes the servers are not producing a new image, for reason or another, so I may end up building things myself anyway. Some other times, there is an image that just has some broken change in. Luckily in those situations I can just boot a previous image and use that. What I really liked though was the systemd-sysext workflow. Sysext is a tool that allows me to layer my changes to the system on top of the previous stuff. So when the system is running `/usr/bin/konsole` it actually runs my self-built `/home/akseli/Projects/kde/usr/bin/konsole`. As far as the system is concerned, it's in the same path. What we currently do in other distros is some environment flag magic to run things from the build-path, instead of `/usr/bin/`. It also works fine, but can be a bit more brittle, especially when testing something like a login manager. The workflow is simple: * I build my changes to an app, Plasma desktop component, etc. using kde-builder. * I refresh the sysext with `run0·systemd-sysext·--always-refresh=yes·refresh;` * `sudo` works too, i use `run0` because it has the popup so I notice it after a long build. * The changes are now live on my system! * Apps may need to be restarted sometimes of course. * If something goes wrong, I can just clean the sysext folder. It feels more robust and easier to manage. So on this front, KDE Linux has been really fun to work with. Perfect for testing and development of all the KDE Plasma stuff. When it comes to applications from flatpaks, they usually work fine, but they can have the typical flatpak issues: Some app needs a permission to a folder that it can't see, so you have to turn off the app, add permissions, turn back on the app, yadda yadda. Apps that use XDG portals properly usually work fine, though there's a bug somewhere in the stack that when the system updates (the atomic image of the OS changes), the portal forgets the folder paths and you have to reopen the file for the path to refresh. When it comes to gaming stuff, Steam Flatpak has worked really well. I have not noticed any issues compared to the native package. Same with Bottles, all has been just fine and nice. Though sometimes there has been bugs with running games, such as games not locking your cursor properly, but they're often gone with the next update as more people spot these bugs now. ## Downsides With anything more complex than what the system is intended for, things get difficult. As an atomic distribution, it is expected that any dev tools that are not already installed on the machine, such as your favorite terminal tools or text editors, you will have to either to download them from the internet like a Windows user (plop the binary in `~/.local/bin`), or use Distrobox/Kapsule/Toolbox... etc. Container workflow feels cumbersome to me most of the time. For KDE work, since all the tools to build and run applications are already installed on the system, it's rather effortless. But when I want to continue a game project like my Artificial Rage game project, I would have to enter a distrobox, install all the things, then edit and build the application inside that container. And when I switch a project, it's expected I create a new container for that, and so on. I don't really like that. I prefer my tools to just be available on the host so I can run them without messing with containers: I have bad memory and am terrible with context switching, so I keep forgetting changing or creating containers. What I did instead was create bunch of dumb scripts called dbi that are a wrapper for installing tools and "exporting" them from the distrobox so I can use them on host without having to enter them. By exporting I mean they use the `distrobox-export` command that creates a symlink to your `~/.local/bin` with the app name, so you can just run them from terminal like always. It's not ideal, but it works. Sadly this comes with a performance deficit when running programs like eza, which is `ls` alternative that shows icons. I like my little icons. :) When running `eza` directly on host, it runs immediately, but when using the distrobox version, it will take 1-2 seconds, which gets surprisingly annoying when going through folders. No idea if that could be improved somehow, but the speedbump is likely from the part where it enters the container. This reveals the larger downside: Lack of "blessed" package management, especially for commandline applications. I have tried multiple tools, but all of them had some issues: * Brew, while had great user experience, would sometimes overtake the system python installation and break kde-builder * I don't know if this has been fixed? I have not dared to try. * Coldbrew, which has similarly nice user experience, but the package versions can be hit or miss * Nix, which is very overcomplicated for this usecase and the user experience is just annoying * It works, but you will have to remember to garbage-collect and whatnot every time you update apps * Fixable with a nice wrapper, I think * However some claim this is "not the Nix way" so I'm left here wanting something this tool can do but is not meant for? Which left me with always just using distrobox and accepting the performance and UX penalty. Another thing I miss is having KMail and KOrganizer just installed on my system, talking with my digital clock applet so when I click on it, I would see my calendar event. It's very small thing, but it's huge quality of life feature for me. The Kontact flatpak can't do that, and it's sadly really broken in general. Lastly, as I work on the Union style engine, flatpak applications will not see the Union styles yet. This means I will have either to build a separate KDE platform for it myself using the CI, which can be super slow. Especially if I have to build it multiple times to see the changes. I can build some apps myself but more complex ones such as KMail will take a lot of time for me. This is where I miss just installing an app from `dnf` on Fedora, as it can just use the styles on my computer, as the app is also installed on the host like the Union style is. ## Regular use and my use For regular user, who plays video games and uses a web browser and never really touches terminal, I think KDE Linux will do very fine, especially when it starts having stable releases that do not update every night. At it's current iteration, it's more a developer tool than something I would recommend for regular user, unless you're super enthusiastic or have spare machines. But me, being the nerd that writes blogposts about Linux and KDE that I am, I like having more control over the system. I don't mind having all my dev tools cluttered on my host system. _(However if it touches NPM, it's going into a container. Luckily I rarely have to bother with that.)_ And in general, atomic distributions can be rather opinionated: If those don't match your view of the distribution, it can be hard to get along as you can't really modify it for your usecase. (Yes I know about ostree.) So I would say that the more complicated your usecase gets and if you need tools that are not already in the base system, it can get quite cumbersome. So that's why I'm switching back to Fedora KDE: It gave me all the control I needed. I will likely stil use flatpaks for almost all apps on my machine though, as I do find sandboxing rather useful at times. I highly encourage anyone who wants to test newest KDE stuff to run KDE Linux on a VM or a secondary machine. I will keep using KDE Linux on my laptop as there I don't have so many different needs, and I want to just install the new shiny stuff from git, not build on it, as building anything on that laptop is super slow. This whole thing has also made me realise something.. All distros have their own strenghts, weaknesses and tradeoffs. It's all about choosing what works for you and your system. My desktop system will benefit from Fedora KDE, but my laptop will benefit from KDE Linux. I will keep observing how the story of KDE Linux develops. I may try it again on my desktop later, we will see. Some of you reading might ask: _"But why Fedora KDE?"_ It's one of the nicest distros I've used when it comes to KDE stuff. The people working on Fedora KDE are some of the nicest folks I've met with, and they work very closely with KDE upstream. Fedora KDE follows KDE releases really closely so it feels like I'm always on current release, making the development workflow very easy. Thanks for reading! ps. Friend sent me this and I cackled like a hyena.

akselmo.dev

Ramblings about complacency

I'm fueled by my spite to write this incoherent rambling of a madman. This is highly related to my previous post, but I can't stop thinking about this so I'll make a new post. My blog anyways. Over the many past years I have just been rather tired of tech. It overrides our wants and needs to serve the corporate overlords. Sounds like bad cyberpunk writing, but sadly it's true. And it's likely going to get worse. Unless you just.. Refuse to play. This does not mean "i will sell my computer, buy a farm, realise im now overwhelmed by farm work because I was naive enough to believe the romantification of farms in my head" but it means "Fine. I'll make my own thing or help others to work on better thing." Obviously there are situations where you can just not do this. But it's about minimizing the bullshit in your life. I even wrote about that here: https://akselmo.dev/posts/minimizing-impact-of-negative-thingsin-my-life/ But as someone who can write computery thing, I will make my damnest sure to write things that serve the user and make things better for people. I know not everyone is this lucky and have to do whatever to get food on the table. But your hobby stuff can be someones day saver. I refuse to subject myself to anykind of "doomerism." This means the dumb negativity that serves those who have caused it in the first place: "our data gets harvested, our privacy is gone, why do you even bother?" Because I genuinely want to try to improve things. If that makes me a "naive fool" then so be it: kindly fuck off and leave me to my naivety. Or be a real doomer and make maps for Doom. I am sick of this "haha u are naive because you think you can make thing better" bullshit. Then what the fuck should I be doing? Whine on internet all day? It's time to stop feeding that bullshit negativity, but keep the necessary, critical negativity. Stop hating on the helpers, hate on those who caused the situation which is why the help is needed in the first place. Be critical, make sure tech serves the user, not anyone else. We will all have shit days and these thoughts will feel impossible. But succumbing to the "convenience is king" complancency just allows the ones offering the convenience to take over any agency you have, and surprise, you're fucked. Help people fix things. Even if you're skeptical if it will help. At least you will learn new lessons for next try. This post is mostly aimed to myself. I am tired of my doomer mindser and actively trying to fix it. I cannot reject it fully, since that just means bottling up feelings. But what I can do is take those feelings and construct them to something useful. So I will keep working on stuff that I believe will help improve the world. Either as my job or as volunteer. This is the "magic power" I have so I will keep using it for good. It's funny how much my stance has changed. I used to be so apathetic, so complacent. But no more. (Within reason, of course. And that reason is different for everyone.) May you, dear reader, feel better too.

akselmo.dev

Leaving lobste.rs rant

For context, I have gotten a lot of emails either asking why I deactivated my account or just sending me well wishes after the deactivation. This post is more for them than anyone else. If you don't care about random techbro website drama, feel free to skip. _Edit: I do sincerely appreciate all the well wishes and nice messages. Thank you, truly. I had no idea anyone would care about me leaving._ I had been tired of the site for a while. When I joined lobste.rs it was pretty much hacker news but good: people were reasonable and found joy in crafting stuff with computer, instead of trying to make profit at all means possible which is just tiresome to read about. Well, time seems to have catched up on lobste.rs too since the joy of crafting is gone. Many are instead dickswinging about some new thing they generated which will be unmaintained in couple weeks, or just trying to do what hacker news do: make profit at all means possible. Discussions are usually: "hey is this tag evil" and bunch of "yes/no" or something else similar. But what really got me leave was the fucking audacity of some people implicitly proclaiming that ADHD is not a disorder/disability, but a preference. See this thread: https://lobste.rs/s/y4hgjd (Archive link: https://web.archive.org/web/20260624234832/https://lobste.rs/s/y4hgjd/please_keep_code_descriptions_simple ) My post was mostly a plea of wanting people to acknowledge people like me who get overwhelmed by huge walls of texts their generator tools love to make. (And some people do too, but they usually have a good reason.) But then I get someone coaxing me to admit it's a preference and not an accessibility need. Maybe I read into it too much, but definitely felt that way. Had it been one offhand comment that never got many upvotes, meh. But it was clearly liked comment, on lobsters upvote means "I agree" just like on every other site that has upvotes. Well, I am following the neurotypical preferences 24/7. I have so much bullshit I have to tolerate: * Walls of texts that have nothing of substance. * Giving me a huge timeslot to wait for something: * For example, "I will call you between 9-15" will lead me to either forget the call or get stuck waiting for the call until it happens, having hard time to focus on anything. * Not understanding my executive dysfunction at all and going "just push through it bro" * Constant context switching which will fuck me over every time, but I smile and nod through it * And so on.. I put up with a lot of your shit, neurotypicals. But when I make one damned fucking plea of please help me out here to work together, I get "that's your preference, fuck you, I'm not going to tolerate it." And this happened on lobste.rs of all websites. I expected this behavior from hacker news, not lobste.rs. So have your hypetech fantasy land where accessibility does not matter except on paper when it makes you look good and feel the warm fuzzies. I'm sorry to break it to you, but ADHD can be a disability. Yes, my disability sometimes lets me hyperfocus for three hours and fix up bugs and whatnot. But that same hyperfocus makes me forget to eat, sleep or piss. But productivity is the king, right? Fuck anything else. **Yes yes technically ADHD is a disorder** but it still affects me in such debiliating ways at times. It definitely is NOT a preference. I did not go to ADHD store and select my preferred brand of not being able to do shit. I felt betrayed by this site and bunch of it's users for not giving a fuck, even when they often do pretend to give a fuck (check any accessibility posts around linux for example). Maybe that answers why I left the site then. It's just not fun to use and I felt like I am just bothering everyone with my bullshit "preferences." It made me angry often due to the absolute nonsense being posted there. It is just not anymore the site I signed up on. And that feels like shit, because I genuinely liked it all. That's why I'm so angry about all of this. Sad that I had to leave such a nice place behind, but it had not been the nice place I recalled for long time. Or maybe I'm delusional and it was always like this. I'm sure someone will send me email about this and tell me I'm stupid, as is tradition. Oh well. Life goes on. ps. "You were on the site just for a year" I had second account I deactivated before for addiction reasons, and before that I had been lurking for quite some time. I sadly still open the site every now and then. Old addictions die hard, but at least I can't comment on anything anymore.

akselmo.dev

Please keep code descriptions simple

Just something I experience more and more these days. When it comes to reviewing code, the descriptions, commits and such can be massive blast of information: Full of extraneous details depicting what was changed. The main point is why was something changed. And often in only one huge commit with massive diffs. I'm sorry but my poor ADHD brain can't take this very well. I don't want to read a novel. Usually blurbs of text are fine: Extraneous detail I can ask about if I need to know. So this is my plea, from accessibility-ish(?) standpoint, to keep commit messages, merge request descriptions and code comments clear, to the point, need-to-know basis. Do not explain what, but why. Usually the code itself is enough to tell rest of the story. If not, I will ask questions. That's why it's a review. It's easy to think that having huge description with all and everything is the way to go, but it will just make it slower for people like me to review it. I can barely concentrate already.. Then commits should always be atomic, especially during merge review. Use git amend to make small changes. Before merging, rebase and clean up, or squash. But try your best keep commits atomic: changes that can stand alone. (Note that this is not aimed at any specific individual, I just finally had brains to write this post since I was reminded of the topic.) If you use LLM tools, please still write comments, descriptions, commit messages etc. yourself. It helps you to understand whats going on, and it's more accessible for me to review. _(Or better yet, try to avoid these tools if you can. I don't think anyone actually needs them. You're good enough without, I promise!)_ edit: Seems people are upset about me mentioning accessiblity there. I do not know what is the best way to describe it. But you can just ignore this blog post if it annoys you.

akselmo.dev

I like the Uruky search engine

Silly name but works wonders. I have been using this search engine called Uruky for about a week: https://uruky.com/ As a software dev, big part of my workflow is searching for information. As search engines in general keep getting worse and worse, it has became more difficult. However with Uruky I have managed to find the exact results I need. No silly "AI" summaries. No other weird shit. Just list of links. That's all I want and that's exactly whar Uruky provides. It seems like a search engine that actually trusts me to be able to read and understand the results. It doesn't nag me with "hey you idiot, heres a hallucinated summary." It respects me as it doesn't try to throw me some magic bullshit but just allows me to open links and read with my own damn brains. I know I am getting older, but modern websites seem to have this expectation that the users are stupid and can't think for themselves. Uruky does not have this issue. I hope Uruky just keeps being list of links and that's all. Sure, maybe showing a location on a map or small wikipedia blurb I can deal with. Anything more is just frustrating. It costs 5e/month. But if that is the price for a website to respect me, especially something as important as search engine, then I will gladly pay. Hope it stay this way for years to come. Oh and if you pay for 12 months you get the source code, which is really nice to me: can self-host it if the situation demands it, making sure the site can keep living. And no, I am not interested in Kagi: https://www.osnews.com/story/139270/do-not-use-kagi/ Uruky has not paid me for posting this or anything, I am just genuinely happy user.

akselmo.dev

Minimizing impact of negative things in my life

I am tired of many things. Some of them have bothered me for years. Some are rather recent. Here's how I have dealt with all that. Minimizing. I try to minimize anything related to negative things in my life, until I can either nullify the whole thing from my life, or it is so insignificant, it doesn't bother me anymore. For example, when moving my email from gmail to my own domain, what I did was make gmail redirect the mails to the new one. Then every time I got an email, I moved only that email. Eventually all things I need are in my real email, and gmail is now very insignificant for me. When it comes to things that are harmful to me in larger scale, such as bad corporations ruining things as they like to do, all I can really do is minimize my dependency and interactions with that thing. There are very bad things out there, so if I can, I just won't use their stuff. Good for my wallet too! I'm far from perfect. For example I still eat meat. But I try plant-based products whenever I can, they're often very expensive here. And sadly, I'm allergic to so many things that I can not fully go vegan/vegetarian. So I try to minimize my meat enjoying activities by sometimes buying plant based things instead. It's not 100% of the time, but more like.. 10%? Which is better than always buying meat, I think. I try to minimize in a way that leaves me energy to continue minimizing things in future. Otherwise I'll burn out and just start ignoring the minimizing process, which makes me just dependent on the thing again. And it's harder to minimize that dependency again. It's rather difficult and tiresome at times.. But I think it's provided me good results. Some things, especially around tech, are far less annoying to me now. Some other tech things, well.. They're really annoying. Especially any current hype-cycles that seem to be making things worse for us. With those, I try my best to just ignore the hype and not use the things that the hypecorps peddle to me. Instead.. I'll wait and see. And keep minimizing my own (negative) impact on this planet as best as I can, and maximizing the positives, if at all possible. If you can't do it like others do, that's fine! Just do your best! Because that's what we all can do in the end: Our best. Anyway sorry for flooding your RSS feed with this drivel lol.

akselmo.dev

Splitting Konsole views from Helix to run tools

I have been tinkering with Helix editor lately since I quite like it. It's a fun little editor. Can recommend for those who like modal editing. I do not know if it'll ever replace Kate editor for me, but I'm challenging myself to try new tools, just for the fun of it. With Helix, I've used this git tool called gitu that is rather quick and easy to work with. Though I still use lazygit for more complex tasks. Main pain point for me has been how to use some of these tools like gitu within Helix. Lazygit could be done with some magic, but I was never really satisfied with it. I also tried Zellij for terminal multiplexing and running commands between two splits and so on. It was a bit cumbersome to get it to work as I wanted, since Zellij has tons of features I'll never need. This also caused my fingers to get entangled since I had to remember all sorts of shortcuts. Just not for me. In Konsole terminal, there is a shortcut for splitting views easily and automatically to a fitting size. I use it a bunch. But because I'm lazy, I would have to press the shortcut, go to the other splitview, type the command for other tool, do things and then close commands. I wanted something a bit more automated. I found that Konsole can be set to allow scripting over dbus commands: Scripting Konsole. So I made myself a little shell script that I placed in my path: konsole-split.sh! Here's what it does: #!/usr/bin/env bash # In konsole settings, make sure # - run all konsole windows in single process is disabled # - enable the security sensitive parts is enabled if [ $# -eq 0 ]; then echo "Command is missing!" exit fi # Split the view automagically. We can use MainWindow_1 since we qdbus6 "$KONSOLE_DBUS_SERVICE" /konsole/MainWindow_1 org.kde.KMainWindow.activateAction split-view-auto >/dev/tty # Get the session of the current terminal window CURRENTSESSION=$(qdbus6 "$KONSOLE_DBUS_SERVICE" "$KONSOLE_DBUS_WINDOW" org.kde.konsole.Window.currentSession) >/dev/tty # Run the given arguments as a command in that session qdbus6 "$KONSOLE_DBUS_SERVICE" /Sessions/"${CURRENTSESSION}" org.kde.konsole.Session.runCommand "$@" >/dev/tty It's really simple, but now I can use this in my helix config like this: [keys.normal."+"] b = ":sh git log -L %{cursor_line},+1:%{buffer_name}" #This is git log for a line, also useful, kinda like git blame s = ":sh konsole-split.sh 'exec scooter'" # Scooter is a search and replace in multiple files tool, very handy g = ":sh konsole-split.sh 'exec gitu'" In practice, what happens is: 1. In helix, i press `+` 2. Then I select the command, in this case `gitu`, so `g` 3. Konsole splits itself automatically to a comfortable size 4. It then gets the session of that new split 5. And runs the `gitu` command with `exec` * So if the execution stops/fails, it just closes the split instantly This works really well for my needs, and I was surprised to see how simple it was to create something like this. I think the error handling when command does not work could be better, but oh well, works for me for now. Let me know if you do anything similar or have any improvement ideas! :)

akselmo.dev

Arctic Lights ComicCon 2026 cosplay photos

I visited Arctic Lights ComicCon and it was fun! Here's some photos and thoughts on the whole thing. I had fun at the ComicCon! I mostly spent the days in my cosplay, hidden behind my lizard mask. Sadly the mask took some damage during the whole ordeal, but nothing major. For example I hugged a fellow furry and it was such an aggressive hug, one of the jaw spikes of my mask flew off, lol. ## Photos! ## Trip itself So yeah, fun trip, I had a good time. Bunch of people took photos of me, which is always fun! There was a lot of people who found my getup really interesting, which is always entertaining. I think the best reactions are always from the kids, pointing and going "MOM LOOK!" or being generally shy. And when I wave back to them when they think I don't notice, they get all excited. It's a great feeling to just entertain people in general. I feel so relaxed and comfortable wearing this cosplay/fursuit. Like I can finally be myself. Confident and a bit silly. We also ate bunch of nice food (I still feel bloated) and met some of our friends. Our hotel room was also rather comfy and chill. One of the most fun things was to walk from the comiccon venue to the mall (where our hotel was) in my suit. I hope I made some peoples day, at least. Like, I hope I was the "interesting thing" to them to happen that day. Idk. I just feel the best when I make people smile. And this trip was full of that! Time to see what other excuses I can find to wear this cosplay this year!

akselmo.dev

I wrote simple pastebin clone: Vivipara

I just spent this weekend writing my own little pastebin clone, called Vivipara. I also have bunch of thoughts about various programming languages. Read about it all in this one blogpost! ## Vivipara, my smol and quick text paste service For a while now, I have been looking for some sort of pastebin clone for myself. However, all of the ones I could find seem to be rather public: Anyone can create a paste. What I wanted is only _I_ can create pastes, but anyone can read them. I used Privatebin for a while, even tried self-hosting it, but it was a bit too much for my simple needs. I just need to share a backtrace occasionally. I also try to avoid javascript if at all possible, so that this can be run in any browser. So I thought hey, I'm gonna try make my own. Why not, seems like a fun weekend project. And it was fun! I genuinely enjoyed thinking this project through. In the end, it turned out to be very simple and smol. Very smolweb friendly, too! You can see a demo-paste in here: https://paste.akselmo.dev/paste/akseli/f2c85d38-2600-4263-8ea2-a337feaeb195 The creation process was not that bad. Go language was really easy for my lizard brains to understand, so I could just start creating the site. There's little technical nitty gritty to talk about, in the end this is very simple Create and Read webapp. Deletion is handled automatically by the application, if user has set the items to be deleted. Currently the files have all same deletion date, I'd like to make that file specific at some point. No "AI" was used when creating Vivipara, it's all artisanal, handcrafted slop! I will avoid those tools as long as I can, since they would take the fun of the craft away from me, and make the learning process much more difficult, if not impossible. Now I was going to try to make this with Zig at first, but ended up settling with Go. Which gets me into the language thoughts.. ## Thinking about programming languages for As much as I want to make ideological choices a priority, sometimes I just have to admit that the pragmatic choice prevails. In this case it was using a language that excels in the specific field (Go and web) because that was the only way I could create what i wanted in reasonable time, with reasonable effort. My ideological side is of course not very happy on relying anything by Google. Had i more free time, I would follow those ideological choices more, I think: I would try to use a language that is very "underdog" and avoids anything corporate, such as Zig. Zig community has very much the values I share, so my ideological side would love to join the fray and use it as much as possible. I applaud the effort that has gone into the language. Also Zig mascots are cute lizards, of course I want to use it! Buut.. It wasn't in the cards in this time. _I also have some bonus thoughts on couple other languages, though I did not use them this time._ ### Zig Learning this language is very difficult for me. There are not many good examples I could find, though search engines are dreadful these days so it's possible I missed something. Zig does have a HTTP server stuff in it's stdlib, but I could not find any good examples how to set up anything. And when I do find examples, they're always out of date and incompatible! Zig moves really fast, changing and refactoring things, so the language suddenly moves a feature to somewhere else, and I'm following a guide that is too old, so I get confused.. Seems most people who like the language have been there from the start, so they know when things change and know where to go. They understand the basics of the language already, so adapting to changes is easier and easier every time. But little ol' me? I have no idea where to even start. I can write a hello world, sure, but anything more complicated I am at loss. I thought writing this pastebin clone would be simple way to learn a language: Listen requests, serve web pages, save files. That's all it does, essentially. So where I ended up is: I _want_ to use Zig, but I _can't_ even learn it! I mean sure, I could spend week(s) to learn it, but this was supposed to be a weekend project. Thus for my smol brains, learning Zig is not a weekend thing. Especially when things keep changing and guides are out of date often. I really hope Zig stabilizes soon enough for me to start properly learning it. I am very keen to learn it. I'd like to write a game with it. But at the moment, the effort required is too much, as I already have a dayjob with wrangling C++. Also the Zig language server had some issues where it sometimes showed I'm doing things wrong and sometimes not. ### Go Go surprised me. It was so easy to pick up and just start tinkering with. The syntax is small and concise, I can just.. Get it. Within a hour or two. It was refreshing to work with a language that just lets you do things instead of figuring out how to do even _start_ doing things. The documentation I could find for it was rather good, though there is a lot of "AI" slop sites that were annoying me and giving me false info. But mostly the official docs were good enough. Even I knew nothing, I could still create something useful for myself while learning the language. It was just that easy for me to get in the flow and just have fun writing Vivipara. I also found out that I don't really mind `if err != nil` that much, but maybe it's because I have only spent one weekend with the language, not years. :D Of course, the whole Google problem is there, so I'm not very happy about that, but this was the pragmatic choice and I'm glad I made it this time. I also think that Go will pretty much replace Python for me in my toolbelt, for the most part at least. The tooling and distribution of Go applications is thousand times better than with Python, in my opinion. So yeah, I think I like Go, despite some of it's warts. One of my favorite languages for sure. ### Bonus: Rust "But why not Rust?" the 🦀 in the audience asks. Honestly.. I'm bit afraid of this language and the learning curve. Every time I've tried to use it, I get confused by the syntax. The lifetime syntax being `'` is for example something I easily just glance over. Maybe I need my eyes checked, I don't know, but that symbol is just way too easy to miss! But I believe I can make it work for myself. I just wanted to try Go this time. I am planning to write a new driver for my TuftySysMon project. Currently it's a Python script, but I want to replace it with a Rust application. Whenever I'll tackle that, I'll let you know how it goes! I do want to learn Rust, because it's being used more and more in KDE stuff too! ### Bonus: Hare I really admire the goal of Hare being stable for long time. The community behind it seems to share very much my values, and I _love_ "boring" languages. Sadly it's not usable for me yet: I am very much dependant on language servers. I wish it wasn't like that, but let me explain. My ADHD can be rough. I lose track of time easily. I confuse myself easily, I forget what I was doing.. Language servers help me keep my focus: They help me avoid context switching. Instead of going through documentation in another window, typing stuff in another window, I can read documentation in my editor. I can also go through all the available functions, variables etc. within the editor. For me it's very common to open a documentation, read about a Thing, then go back to editor.. And I already have forgot the name of the thing! Like, super common. Happens daily. I can jump around the code really easily, without having to search stuff (in Kate this is CTRL+Click a symbol), so I don't forget how I was going to do something. I also get distracted easily. The amount of times I open browser to read documentation but end up browsing something else is too high. And then I forget what I was doing. When everything is inside the editor, I do not have this issue as much. I guess one could say "Skill issue" and sure, but my ADHD does what it does. Rapid context switching is very much a mind killer for me. So when Hare gets a language server implementation that is daily driveable, I'm going to use it for something. Write a small game with it. Because everything else in that language is very appealing to me. And I believe I will love it way more than Go. ## That was many words Here you go, long incoherent ramble. Anyway, if you are going to self-host Vivipara, let me know! And yes, I moved to Sourcehut recently! I am very interested in trying the email workflow and I genuinely like how the site looks and feels like. I am still keeping my donations up for Codeberg and will likely use it for some projects. :) That's all for this time, thanks for reading!

akselmo.dev

Aks plays EVE, part 9: How is my ship still working?

Woah. My ship didn't explode. Twice. I've been roaming a bit of lowsec again in my hookbill. I managed to reach 6 killmarks today! So that's 6 kills in this one ship, which of 4 were today. Holy crap, my ships never stay running this long. I am flying back to base as I'm writing this, so I'm expecting it to blow up while writing, lol. Anyway, I had two really close calls. One of them was with a Federation Navy Comet, that was really tough, because of the drones and it had also railguns. But I managed to keep my transversal high and avoid its shots. It was in very rough shape after the fight, I had like sliver of hull left. But I managed to win this time. I then undocked again and went for more roaming. Fly safe indeed. I found someone ratting around with a Catalyst Navy Issue and managed to catch it unaware, then just made it go boom. Simple enough, it could not fight back at all. After that, I found a Cormorant Navy Issue that managed to also take me down to hull.. Another very close call. But I managed to fly under its guns and keep the transversal velocity really high again, so it couldn't track me anymore. I then just made sure to get rid of it, slowly but surely. But again my ship was on fire..! I had such adrenaline rush today I had to just call it quits for now. Such an amazing feeling to win multiple fights with same ship. Here's the killmails of today: * https://zkillboard.com/kill/135273655/ * https://zkillboard.com/kill/135273811/ (The first one that got me to hull) * https://zkillboard.com/kill/135273995/ * https://zkillboard.com/kill/135274086/ (The second that got me into hull) The two other killmarks were from sunday. More soon again, but now I need to calm down. My hands are shaking. Fuck I love this game. *Watch this thing spontaneously combust into massive ball of fire tomorrow when i undock lol, i try not to get attached to my ships (and this ships name is "Yolo")*

akselmo.dev

I tried XCOM 2 but I do not think it's for me

And that's fine. I tried to play XCOM 2 and XCOM Chimera Squad. I liked the premise of both games, especially Chimera Squad: The idea of aliens being left on earth after humans vs aliens war is rather intriguing. Sadly, due to the nature of the game, it doesn't really explore it as much. XCOM 2 was fine but way too difficult. And I played on the easiest mode with all the helpers. I just don't find this type of gameplay enjoyable no matter how much I try. I much rather have it something like a third-person shooter where I am one of the people in the unit and have to actually do something. At least I would hit more shots than my characters in the game. I even tried modding XCOM 2 to allow having the vipers (snake race) in my team, and there was even a mod to add argonians in your team. Meanwhile fun to look at, it still is a turn based strategy game. And these types of games mostly just feel like absolute slog to me. I then added cheats to the game to get through things faster but that just defeated the whole purpose. Slog turned into super easy speedrun. There is no inbetween for my kind of ADHD Quake player. Bit disappointed, both in the games and myself, but well, can't win them all. At least they didn't cost much. When I play strategy games, I much more prefer games like Stellaris, or Heroes of Might and Magic 3. Especially Stellaris, because it doesn't have turns. But I think my point here is that I have Mass Effect shaped hole in my heart, and I'm looking for something to fill that.

akselmo.dev

Smolwebifying my site

I found this thing called smolweb and it spoke to me. Like yeah, websites are quite heavy these days. Older hardware (from like 2010s) has really difficult time loading it, and the big chunks of Javascript do not help either. And not to forget web browsers such as Netsurf that do not have the resources to recreate the whole HTML/CSS/JS standard. So, as you can see, this site is now much more plain and simple. Very easy to scroll from top to bottom and read the stuff. I think I will have to modify some of the paddings/margins around some elements, but other than that, I'm quite happy with it. I may also need to rework some colors. I tried to follow closely my Revontuli colorscheme. Smolweb.org has a cool little validator that gives me valid score, and my CSS grade is C-. I will have to see if I can make that grade bit better, at least B. :) I also ran my site through the W3C HTML and CSS validators, like back in the olden days! And they told me my site is valid. :D I spent quite a long time on this and I'm clearly not a designer. Probably ~12h total. I managed to remove at least ~1000 lines of extra stuff, which is awesome. One big thing I did was starting to use SCSS with Zola, so it compiles the CSS instead of relying on CSS variables. This makes the site work even on browsers that do not support CSS variables! Let me know what you think of the look! And I'm curious what scores others get from the smolweb validator!

akselmo.dev