Linux

Linux (yet again)

So things have changed rather a lot since I last wrote about my, Linux journey? I guess. Looking back, I had been using openSUSE, but in the meantime migrated over to Arch Linux yet have recently landed on NixOS which feels oddly right. It is strange though, I was fairly happy with my Arch setup and was not really seeing myself switching, when I stumbled upon a blog post describing a non-persistent NixOS setup. Essentially, the idea is, since NixOS can boot from only the /nix directory, make the rest non-persistent in some way1, and then create some sort of system with either mounts or symlinks to store only the things you actually care about between boots. Before this, I hadn’t really seen the appeal of Nix; sure the whole language is pretty nice and there is a certain elegance in descriptively building your system, but it just felt like I would end up doing different sorts of “hacks” to get some things working and forget about them thus rendering the Nix code incomplete. This approach forces me to be explicit about everything I do2 which means it’s actually oddly satisfying to use since I know I’m not accumulating cruft over time.

My setup

I’m using impermanence to manage the linking with three partitions in total: one for /boot, one for /nix and finally one for /nix/persist where impermanence links anything I actually want persisted. As mentioned above, / is mounted on a tmpfs, meaning it’s store in RAM3 and as such gets erased when the computer is powered off. On my desktop I am “cheating” a bit since I do have a separate SSD for games that is then mounted separately for my Steam library and Bottles… bottles, but everything else including flatpaks is managed through my Nix configuration.

It’s oddly freeing not to really have to think about trying out some software since I know it won’t really persistently mess up anything, and with how many things are available through nixpkgs it’s been really convenient to just try things out as necessary4 and keep the base system clean. It really does give that fresh install feel constantly, which is awesome.

Drawbacks

At the same time, it does mean that anything not available through nixpkgs is a bit more effort to try out since NixOS doesn’t follow the FHS and as such some prebuilt binaries that work fine in other distros don’t realy work without effort; this is especially a problem with proprietary software, since I can’t just build the binaries myself. Luckily this isn’t a huge use-case for me outside of gaming for which I have Steam and Bottles, so I’ve mostly been able to avoid this problem, but it is still something that has come up.

The other minor annoyance is the need to rebuild the system to apply configuration changes, which can be especially annoying when I am in the middle of customizing something. Now, yes, I can just use mkOutOfStoreSymlink to use dotfiles in a normal manner (which means it once again becomes easier for me to configure things in an ad-hoc manner), or use things like --config launch arguments to start the software with a different configuration file or directory, but both of those are extra things I need to take into account while making changes. All in all, not a huge issue, but still something to be aware of.

Conclusion

For now, I’m quite happy with this setup, and I don’t really see myself changing it anytime in the near future. It feels like a good compromise of stability (with the previous “generations” being available at boot) and customizability with pretty cutting-edge features and packages. I do, at times, miss the good old paru -Syu to just get everything up-to-date, but I think I’ve arrived at a good place for me.


  1. The blog post uses ZFS, which I’m personally not a huge fan of on the desktop since it feels like a bit of a resource hog and as such ended up using tmpfs for simplicity ↩︎

  2. Well, most things, I can certainly still work around it by persisting some state, but that’s a choice not the default state ↩︎

  3. Or swap, depending on the amount of free RAM ↩︎

  4. Or even just install them as necessary with nix shell ↩︎

Linux

I didn’t end up writing about it at the time—which I now kind of regret since I’m no longer quite sure when exactly it was—but I ended up trying Linux again. Looking back at last time, it doesn’t necessarily feel like all that much has changed—though I don’t have the stuttering in World of Warcraft any more—except for perhaps no longer streaming and as such not having the hassle of setting that up, yet I’ve by now used it for several months and just been content.

There have certainly been some minor annoyances still, especially with how badly Battle.net performs, but overall it’s just been rather uneventful.

It feels a bit anticlimactic even, because I guess I was somehow expecting the change to be a bigger deal, which of course was a very misguided expectation but still. One of the really nice things however, is how much better the keyboard layouts are on Linux; specifically how many more things are accessible with Alt Gr or angry Alt.

This post has been sitting in my drafts folder for months because I’m honestly just not sure what to say since it all has just been so normal, but somehow it still feels right posting about it since I’ve mentioned trying Linux before. So that’s the update I guess.

PostmarketOS

I recently wanted to do a bit of experimenting with an old tablet I have, a Galaxy Tab 10.1 (yes, one of the original ones), and happened to notice that installing Linux—more specifically PostmarketOS—was possible and in fact somewhat simple.

Now, it is still very much an unfinished product, and it did take a couple of tries before I got something that actually worked, and I’m not quite sure what I’m going to use the tablet for now, but it was quite a fun time experimenting around with it. To be fair, I wasn’t using the tablet before anyway, it is kind of stuck on Android 4, anything newer runs rather terribly, and even the old Android just works rather slow on it.

I have been considering making it into some sort of dashboard or info display, and that should now be rather easily achievable with simply some sort of browser running in kiosk-mode, after I create the website with the info I want displayed of course. There comes the next problem however, since I’m not quite sure what I would want displayed, I simply want to make the thing. Something like weather and possibly messages seems like the obvious thing, but does that actually even make any sense? Do I need that? Weather I guess could be rather nice for my parents, since my father at least does have a tendency to check it rather often, so maybe there is some use-case for the thing.

Of course, me just wanting to make it is enough of a reason to do so, but it is always a bit unfortunate to have projects that then end up just lying around somewhere unused.

The installation I ended up with after some experimenting of what actually works and what doesn’t, is basically Alpine Linux with XFCE, and it is all surprisingly useable, even though me not having a keyboard connected does make it all a bit more difficult, especially as the standard installation didn’t include an on-screen keyboard. Luckily that was rather easily solved, and now it’s actually possible to do things with the device again. It, oddly enough, actually also feels a good bit more responsive now than it did before with Android, even if the user interface is a lot more clunky to drive since it really is built for a mouse and the touchscreen just controls the mouse which isn’t the best experience at all times.

Another problem I’ve encountered is that Firefox doesn’t seem to launch, I’m not quite sure why yet and I’ll have to look into that, but luckily for now Midori is a decent enough alternative especially since I’m probably not going to be using the device for all that much for now. Hm, that does get me thinking though, with simply a keyboard it would actually make for a decent Linux portable for me, and a Bluetooth keyboard shouldn’t be that expensive to get, maybe I’ll have to research that next… Though maybe it would need to be a keyboard+mouse combo, it will get tiring at some point to poke at the screen especially since the interface isn’t designed for it as noted.

So I guess I have a couple of ideas there of what to do with the device now, I’ll update in the future if any one of them ends up actually panning out.