Until 2023, I was using X11, with a tiling manager and a custom desktop. The latter my life a little harder sometimes, but I'm so used to the setup that using anything else is extremely disorienting and less productive.

In 2023, I have switched to wayland, this is kept for historical reference.

Window manager: i3

I have switched from xmonad to i3. I (again) don't quite remember why: but I probably got tired of battling Haskell configuration files. In comparison, i3 is much easier to configure and closer to what I had with awesome all the way back then.

One nice thing with i3 is the way it handles external monitors: they're just other workspaces.

You can review my i3 configuration here.

I was first using the built-in i3status bar, but eventually switched to taffybar because it had a lot of cool fancy stuff like historic graphs for the CPU. But taffybar is difficult to maintain in Debian and has weird bugs, like the scaling and background of the notification area. The styling of the windows list was also especially troublesome to figure out.

So I eventually gave up on taffybar and gave py3status a shot. The results are pretty cool, although it doesn't have historical graphs and probably never will, because of a limitation in i3status. Performance benchmarks seem to show that py3status and i3status (when used together) use slightly more resources than taffybar, for what it's worth.

I have high hopes in polybar but it is not packaged in Debian yet. Update: it's now in NEW and might just be the right thing.

It looks like it's the fastest of all three in terms of CPU usage although it uses slightly more memory than py3status/i3status:

anarcat@curie:bin(master)$ date
lundi 2 mars 2020, 16:29:17 (UTC-0500)
anarcat@curie:bin(master)$ ps axfu | grep -e polybar -e status -e CPU -e taffybar
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
anarcat   4685  0.6  0.5 1074556760 90908 pts/4 Sl  16:09   0:08          \_ /home/anarcat/.cache/taffybar/taffybar-linux-x86_64 +RTS -I0 -V0 --RTS --dyre-master-binary=/usr/bin/taffybar
anarcat   4686  0.5  0.1 1267248 30804 pts/4   Sl   16:09   0:06          \_ polybar example
anarcat  24629  0.0  0.0   6032   888 pts/4    S+   16:29   0:00          \_ grep -e polybar -e status -e CPU -e taffybar
anarcat   4658  0.0  0.0   2388   756 ?        S    16:09   0:00      \_ /bin/sh -c py3status
anarcat   4659  1.1  0.1 552932 26964 ?        Sl   16:09   0:13          \_ py3status
anarcat   4664  0.0  0.0 374532  6296 ?        Sl   16:09   0:00              \_ /usr/bin/i3status -c /tmp/py3status_vs2xhih_
anarcat@curie:bin(master)$

Web browser: Firefox

I always have a web browser opened, so that is a key tool for me since, unfortunately, everything seems to be moving inside a browser window... After using chromium for a few years, I am now back to using Firefox, see the firefox page for more details.

Emails: notmuch

Boy oh boy that one is crazy. Not enough space for this here, but let's just say I have piles of lisp code that allow me to have 83k mails in my inbox and not notice, which makes the sysadmin in me quite angry.

I have improved on that setup and documented it in 2016-05-12-email-setup.

News: feed2exec and gnus

I tried Liferea and Tiny Tiny RSS, both would take up too much resources - how hard can RSS be really?? Unbelievable. I ended up using a simple feed2imap cron job (@hourly nice feed2imap). The configuration is fairly simple, and I imported an old OPML feed I had lying around from Liferea.

Eventually, however, feed2imap wasn't enough: I wanted to do more things on the RSS feeds I use, like checking for broken links on my new posts or archiving them automatically to the Internet Archive. So I ended up writing my own RSS feed reader, feed2exec.

I also use Emacs' GNUS to read whatever is left of Usenet, which really, for me, is free software mailing lists through Gmane and (eventually? hopefully?) public-inbox.

Editor: emacs or vim

I am not a religious zealot, except when it's about fighting religion. Therefore, I use vim for quick edits on server, but Emacs for everything else. I have a long history of emacs programming that I have only begun to document in emacs. See also the Emacs wiki.

My Emacs configuration files are in this git repository.

Backups: borg

I used to have a custom script to do a rsync to a crypted drive regularly - but it was not that regular, and i was worried about not having an incremental history.

I started to work on using Bup and ended up writing a whole wrapper around it named bup-cron. Then I found out about attic, tried to help, which ended up creating a fork called borg which ended up being used by everyone and more active, so I'm using that now.

I contributed to borg for a while (see borg for reports) as well.

I also considered Obnam but it seems it doesn't scale so well.

See backup for details on backups.

Color theme: srcery and redshift

I am using the srcery color theme now. I like how it has a better contrast than solarized. Main disadvantage is that srcery doesn't have a light theme.

I previously used Solarized, mostly because it made by desktop usable in plain daylight. But it was a huge pain in the butt, because many console applications broke, especially those using colors like iptraf or htop.

I also use redshift to reduce the amount of "blue light" in my face. If you are in Montreal, this is the magic formula: redshift -l 45.5:-73.7.

Terminal: xterm

I have used urxvt for a long time because of text reflow, clickable links, some bracketed paste protection. But its color support is really bad, and I have doubts about its security and maintenance status overall. I recently (late 2022) went back to using xterm

I have considered using godothecorrectthing or dsearch to handle URLs and .. uh... other things, but that code really looks pretty clunky. Instead, now I have a Xterm keybinding to this wrapper script. It's kind of annoying.

Hilariously, I wrote a full, two-part review of terminal emulators, yet it seems I can't make up my mind of what the best terminal emulator is. I'm interested in going back to xterm now, but foot (for Wayland) and zutty (for performance) are quite interesting as well. I am keeping a directory of known terminal emulators in the terms-benchmark page.

Launcher: rofi

I'm using rofi to launch commands, for power management (restart, power off, reboot, suspend, etc), password management (through rofi-pass-modi and rofi-wrap).

Image viewer: geeqie / eog

I'm using geeqie as my generic image viewer. It literally "claiming to be the best image viewer / photo collection browser", but I have a few issues with it: the UI is a little counter-intuitive and it doesn't have simple "copy-paste this image" support (you can copy an image file path, but not the actual image content), which, it turns out, is something I do quite often. So I sometimes switch to the generic GNOME viewer (eog).

Other alternatives I have considered or used in the past:

I'm also using RPD and Darktable for my photography work, see photo for details.

See also this Wayland list, this list, or that list.

Screensaver: xsecurelock

I used to use xscreensaver, I recently (2022) switched to xss-lock and xsecurelock.

Screenshots: maim, pubpaste

I use and maintain the Debian package for maim. I mostly use it through pubpaste my own pastebin software.

Screen recorder: simplescreenrecorder

I like to use peek to record short animations, but it lacks audio support so I use simplescreenrecorder when I actually need audio as well.

RSI tracker: workrave

I have been using Workrave for a long time.

I have tested and reviewed SafeEyes as an alternative, but it was lacking the counters that keep track of how much work you do on a daily basis and make up those so interesting graphs. I considered packaging selfspy but it turned out the project is still not in great shape. Another alternative for tracking usage is activity watch and timekpr-next, both of which support Wayland.

Other apps

My session also automatically starts a few more tools, through .xsession which also loads a host-specific .xsession-$(hostname) file to allow per-host customizations.

Here are the other tools that are generally running in my session:

Created . Edited .