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) makes 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 fixed 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
The two languages I’m comfortable with for commercial software development.
I don’t like plain JavaScript, but I find it’s enjoyable to write with a static type checker (flowtype / typescript).
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