My Computing Setup

Principles

  • P1. Free software over proprietary software, community-driven over company-driven -> I want the benefits of my time investment last longer.
  • P2. Keyboard over mouse -> I find my flow state is less interrupted this way.
  • P3. After all, fun over anything else -> so that I’m willing to continue.

Operating System + Desktop Environment + Windows Manager

  • Operating System: Debian GNU/Linux
  • Desktop Environment: Xfce4
  • Windows Manager: i3

I’ve been using this combination for years and had no big issues.

Debian is super reliable and its package system (apt) is awesome. Xfce4 is a lightweight alternative to GNOME/KDE and it has all the features I need. i3 enables me to control application windows using a keyboard (#P2). And they’re all community-driven free software (#P1).

Web Browser

Firefox is my choice of web browser:

  • Compared to Chromium: Firefox is not highly controlled by a large corporate company (#P1)
  • Keysnail (and now Surfingkeys) make it possible to do web browsing without a mouse/touchpad (#P2)
  • Tor-browser is based on Firefox -> so I get a similar experience when I want anonymity.

Text Editor

I do most of my text editing (blogging, programming…) inside GNU Emacs:

  • Compared to VSCode: Emacs is not highly controlled by a large corporate company (#P1), keyboard-centric by default (#P2) and can run in terminals.
  • Compared to Vim: Lisp is a lot more fun to program in (#P3) and I don’t get used to modal editing.
  • Emacs has plugins for almost everything, which means knowledge learned can be applied to broader areas.

Miscellaneous Tools

  • XMind: mindmap tool, free software.
  • Anki: free software, help to memorize things by utilizing the forgetting curve concept.
  • MPlayer: free software, keyboard-centric media player
  • Telegram: instant messaging tool, its clients are free software.
  • Dropbox: non-free software, I use it for cloud storage (private data is encrypted by myself).
  • Lastpass: non-free software, I use it to manage unimportant passwords.
  • Calibre: ebook reader, free software, but I end up reading books in Emacs with nov.el more.
  • GIMP: graphics editor, free software.
  • Darktable: photography editor, free software, I use it to process camera RAW images.
  • Blender: free software, I use it for video editing (it has a lot more features).

Hardware

Computer

I use a Macbook Air as my main computer. I purchased it because I wanted a lightweight laptop with relatively long battery life and I heard that Linus Torvalds used a MacBook Air too.

Although the only problem is I have to use an external wifi adapter, I probably won’t buy Apple laptops anymore since 1. they’re expensive for the computing power they provide; 2. they don’t seem to have any advantages (especially if I don’t use Mac OS).

Keyboard

I’ve been using Microsoft Ergonomic keyboards since 2011.

I used to use Natural 4000 and liked it except it’s too big and its space bar is heavy to press.

Then I switched to Sculpt Ergonomic in 2014 as it fixes the only two problems I had with Natural 4000.

I use xmodmap to remap two keys so I can press both Ctrl and Alt with thumbs (to avoid RSI):

  • the key on the left of the space bar => Ctrl
  • the key on the right of the space bar => Alt

I’ve tried different mechanical keyboards, but I didn’t like positioning my wrists on a traditional keyboard (the problem most ergonomic keyboards try to solve) so I kept my current choice.

Earphone

Bose QC20, which provides me enough audio quality and noise canceling.

Mobile Phone

I use Android phones. I wouldn’t say I like Android, but I’m sure I dislike the restrictions Apple put on iPhones.

Programming

Languages

C and Lisp

C is a must-to-learn to deepen my knowledge of computing foundations: operating systems, network, game engines …

Lisp is my favorite language: 1. elegant syntax with s-expressions, 2. interactive programming with REPL, 3. syntax level abstractions with macros.

I know 3 dialects:

  • Emacs Lisp: I use it to customize Emacs.
  • Scheme: I learned it by reading Structure and Interpretation of Computer Programs.
  • Clojure & ClojureScript: I think it might be the Lisp dialect I can use in commercial projects someday.

Python

I sometimes use Python for scripting.

I don’t like indentation-based languages. However, with its large library base, Python is not a bad tool for scripting.

Java and JavaScript

I program in Java and JavaScript for a living.

I like Java.

I don’t like plain JavaScript, but I find it’s enjoyable to write with a static type checker (flow).

Environment

  • Emacs: I do most of my programming related tasks in Emacs.
  • IDEs: sometimes I use IDEs for debugging (except Lisp, since Emacs has already got a very nice debugging feature for it), e.g. VSCode for JavaScript/Python and Eclipse for C/Java.
  • Xmind: sometimes I use XMind to organize ideas, I find it’s easier to come up with new ideas in a visual tool.

Conclusion

  • Software: Debian + Xfce4 + i3 + Emacs + Firefox
  • Hardware: Any reasonable Laptop + Microsoft Sculpt Ergonomic + Bose QC 20
  • Programming Languages: C, Lisp, Python, Java, JavaScript