how i use computers
table of contents
- 2024-08-24
- series : 5/6 in liberatory computing : [previous] [next]
- tags : qubesOS , programming , haskell , purescript
introduction
what follows is an outline of the various hardware & software i currently use for daily computing tasks , in case it's useful for someone else . this is not a prescription of how other people should use technology , nor is it a description of my ideal computing environment .
todo : explain choices in more detailhardware
if i need to purchase a new device , i prefer to find one that is already used , due to the numerous ethical issues with the production of electronics by large companies .
my primary computer is a Thinkpad T430 running QubesOS . i chose this laptop because , out of the options that can be flashed with coreboot , it was old enough to be somewhat affordable[1] , while still running fast enough for most tasks that don't involve graphics ( & some that do ) .
i don't use any peripherals except for a large monitor , to maintain good posture . i have tried mechanical keyboards , but i dislike like how they feel & sound compared to the built-in Thinkpad keyboard . split keyboards are more ergonomic though , so it would be nice to find a split rubber dome keyboard .
my "smart"phone is a Pixel 4a[2] running CalyxOS[3] .
software
i primarily use CalyxOS for taking notes with Orgzly , tracking sleep with Plees Tracker , web browsing away from home , insecure communications , & listening to audio-based educational materials .
i use QubesOS for web browsing , programming , Serious Writing , & other forms of expression .
i chose QubesOS because i find ambient authority horrifying , but i'm not aware of any robust capability-based operating systems that would fill the same need for me .
QubesOS is slow & doesn't have screen reader support yet , but it does have some great features like configuration using Salt[4], Whonix qubes , & offline qubes . here are a few things i've learned that make it more tolerable :
- install i3
- name qubes using two-character strings so they can be searched for more quickly using dmenu
- make shortcuts for locking the screen & toggling the status bar
- make a shortcut ( mine is bound to Alt + i ) for opening a dmenu list of helper scripts & frequently opened programs
- use Salt , but not for everything . some tasks are much simpler ior faster with a shell script in dom0 , so i use a top-level shell script to apply salt files & do other things
- dark mode can be enabled in XFCE qubes by
qvm-run
ing the following command in each of them :1xfconf-query -c xsettings -p /Net/ThemeName -s 'Adwaita-dark'
- it may not always seem like it at first , but most tasks can be automated from dom0 , including mounting & attaching drives inside qubes . i take advantage of this in a backup script that backs up specific qubes using BorgBackup
- i wrote a shell script that copies dotfiles from one qube to the others & applies them , so i only have to clone my dotfiles in one place , but still have my bash aliases , helix config , etc. in every qube
- rofi can be opened inside a qube using
qvm-run
in dom0 scripts , but the rofi flag-normal-window
must be added to disableoverride_redirect
, which allows the program window to appear undecorated & on top in X11
programming
language
currently , the languages i find most useful are Haskell & PureScript ( which is very similar to Haskell , but compiles to JavaScript ) .
a few things i like about them are :
- very clean syntax
- functional purity
- Hindley-Milner type system
- typeclasses
- Hoogle/Pursuit
- ghcid/pscid
- high abstraction power
- automatically curried functions
- lazy evaluation
- row polymorphism ( PureScript only )
- wonderful libraries like Concur , optics & apecs
i'm autistic & get overwhelmed by extraneous detail very easily , so i view many of these as accessibility features[5] , because of way they encourage code that is easy to read & reduce the number of things i must keep in working memory at once - while still feeling quite empowering .
for native programs that target embedded devices ior need to be statically built ior cross compiled , Rust is a nice language that provides a somewhat similar experience to Haskell , while making those tasks much easier .
i've experimented a lot with Nix for provisioning systems & development environments , but i'm hesitant to recommend using it , particularly if , like me , one is significantly constrained by the power of their computer hardware / disk space / network speed , ior are marginalized in some way[6] . i've definitely benefited from Nix before , but those benefits have only barely outweighed the many negatives i've experienced along the way . maybe Lix & Aux will manage to solve some of those issues .
code editor
the code editor i use most often is helix .
my first editor was Sublime Text , then VSCodium , then Atom , & i finally found an editor i liked when i tried vim & realized i could mostly avoid using the mouse[7] . once i was proficient with vim , i moved on to Doom Emacs .
Emacs has a lot going for it , like radical introspection & extensibility , but it was just too slow for me . the language servers for Haskell & PureScript would often crash my qube because of how much memory they used in Emacs . i also disliked dealing with the Doom abstraction , but when i tried going without it , maintaining a complex configuration was too time consuming .
so , i switched to helix . it is rarely too slow for me , even in a qube with 4GB of RAM . it hardly requires any configuration to match my Doom Emacs setup . after learning them properly , i've also grown to appreciate the Kakoune-inspired keybindings more than vim's .
footnotes
- around 200 USD on Newegg [back]
- this was also around 200 USD on eBay [back]
- i am planning to switch to GrapheneOS soon , for the additional security features & ability to use TalkBack , a screen reader . i could not figure out how to enable a screen reader on CalyxOS . [back]
- ior maybe even Nix-like configuration in the future if Spectrum goes well [back]
- however , i have heard that for some people , these languages are unpleasant to work with for the some of the same reasons . [back]
- i've seen many folks point out that the Nix forum & subreddit have been particularly ineffectual at fighting bigotry & fascist rhetoric , which has been corroborated by my own experience . from what i can understand , the community has also become a place of heavy conflict after a considerable amount of members were okay with the Nix convention being sponsored by an evil "defence" technology company called Anduril . [back]
- using a mouse as an input device is fine , & i wish development software would use it more often . my issue is the precision required in most mouse-driven interfaces . precise clicks are difficult for me, & it would be much more accessible if elements that have a larger hitbox ( like radial menus ) were used more often . [back]