Bit Cannon

Being Productive on Linux

This is the third in my series on finding an alternative to Mac OS X. Part 2 was about my experience with elementary OS and the switch back to Arch Linux.

I received a lot of great responses to the last post, thanks to all that commented, emailed and shared the post. I’d like to particularly call out the comment that Daniel Foré, the founder of elementary OS left on Reddit:

Hey /u/wezm Sorry to hear that you decided to leave us. We committed HiDPI fixes to screenshot very recently but overall HiDPI support is something we still consider a work in progress. We recently backported the dbus fix and I believe the patched package is currently in staging for testing. The copy paste issue in Mail was also resolved recently. We try to push out updates pretty regularly so this fixes should go out to stable soon.

I hadn’t heard about a couple of the other issues you raised but I’ll follow up on those and see what we can do. We’re a very small team, but I can allocate a bit of our bounty budget to some of these long outstanding problems.

We agree that getting the latest apps is less than ideal right now and we’re working on a solution to address that issue in elementary OS. For now, if you need to install a deb, using apt install ./app.deb will automatically resolve package dependencies unlike dpkg -i

We really appreciate your feedback and support and hope you’ll decide to come back soon. Either way, I’m glad to see you trying more open source software instead of just going back to MacOS :)

His response was helpful, gracious, and positive, so thank you Daniel.

Desktop Environment Update

In part 2 I settled on Budgie for my desktop environment. I’ve since switched back to GNOME with the Dash to panel extension, which gives a very Budgie-esque result:

GNOME with Dash to panel extension

The following issues led me to switch back to GNOME:

The Budgie developers are aware of many of these issues and are working on a 10.3 release to address them.

On Being Productive

xkcd: Is It Worth the Time?

I received some comments regarding my desire to replicate parts of my macOS environment on Linux and the amount of time I’ve taken to make it work for me:

maxm commented:

Amazing amount of work to make the environment fit the person. I have long since resigned, and just use the defaults of whatever distro i use. I dont spend much time in the os anyway. Mainly in the apps.

bostand commented:

I really don’t get why someone would want to change platform while doing his damnest to keep things exactly as before.[…]

I believe it’s worth the time to optimise my environment. I use a computer every day for work plus a lot of my hobbies/leisure time. As the comic above shows, little wins add up. Even if I spend a bit more time than will be paid back directly, these tweaks can still help you stay in the zone and bring a bit of happiness each time I use them. :-)

I gradually incorporated the tools that I use on macOS over many years. There’s no denying attempting to replicate that gradual work all at once is time-consuming but I think it’s worth it if only to give Linux a fair chance as a macOS replacement. If there are better options on Linux I’m open to them. However, given I know these ones already, the best approach seems to be replicating the functionality I know first. Over time I’m sure I’ll gradually incorporate more Linux specific tools into my workflow.

So here’s how I’ve gone about replacing my most important productivity tools:

  1. Alfred
    1. Launcher
    2. Clipboard history
    3. Snippets
  2. Karabiner – Keyboard customisation and enhancement



Many people pointed me at Albert. I was aware of it but was holding off on installing it because I wanted to give the built-in launchers a fair go before replacing them. elementary, GNOME and Budgie all have a way to summon a search field, enter a search term and launch an app. In the end, I did install Albert as it shows up faster and has extra features like custom web searches (E.g AUR and Arch packages) and a calculator that I was missing from Alfred.

I did have to disable file indexing though. Albert’s memory consumption would climb to over 2Gb with it enabled (bug).


Clipboard History


Jim Priest suggested I check out CopyQ for clipboard history. It’s been a great clipboard history replacement. It’s packed with features and I’ve barely scratched the surface on what it can do. I look forward to making more use of it in the future.

The one minor annoyance is that it’s a Qt app so it feels a bit out of place on my predominantly GTK+ desktop. Its window is hidden most of the time anyway so this isn’t a huge issue.


Snippets (Text Expansion)


After not having much luck with AutoKey-Py3 I did some more searching and came up with Xpander. I created a PKGBUILD for it since it wasn’t already in the AUR. I then made a conversion script to convert my Alfred snippets into Xpander phrases.

Xpander is pretty reliable at triggering and expanding phrases when it should, which was not my experience with AutoKey. However, it does weird things to the Tab key. It appears to send the Tab keypress to all apps and also makes it necessary to press Tab twice to invoke completion in the shell and vim. Needless to say, this is quite frustrating. As a result, I’ve stopped using it for the moment in favour of my custom keyboard firmware described in the next section.

I haven’t given up entirely on Xpander though. It mostly works so I’ve been working on cleaning up the code with a view to adding tests, fixing the Tab issue and ultimately start shifting the implementation from Python to Rust.

Keyboard Customisation

In Part 2 I said the following regarding Karabiner:

The main thing that I’m missing from Karabiner is simultaneous keys. These allow holding s and d to access the arrow keys on the hjkl keys (I.e. access arrow keys without leaving the home row). I haven’t looked into whether this is possible to replicate because I’ve ordered a programmable replacement controller for my Filco mechanical keyboard. I plan to build home row arrows into it so they work on any computer. This will also allow me to move the Caps Lock, Super and Alt config from earlier into the keyboard.

The replacement controller has arrived and I’ve programmed a custom keymap into it that does the following:

  • Caps Lock as Control
  • Swap Alt and Super
  • Tab operates as a modifier to switch to a function layer when held and normal Tab key when pressed and released normally.
  • The function layer has arrow keys mapped to hjkl, so holding Tab allows me to arrow around without leaving the home row.
  • Home, Page Down, Page Up, End are bound to keys above hjkl on the function layer.

This has largely replicated my use of Karabiner. As a bonus, the new keyboard firmware also has macro support so I’ve been able to put some of my most used Alfred snippets directly in the keyboard. I have macros for my name, personal and work email address, phone number, and more. For example, Tab+2 types my email address into any application on any computer the keyboard is plugged into. I have published the firmware on GitHub.

Previous Post