Highly Productive Linux Toolset
Many beginner Linux users experience difficulties in using this operating system that limit their productivity. This is especially true for robotics students, shifting their interests from mechatronics to robotics software development, who recognize the need to learn the Linux ecosystem, but sometimes treat it as a necessary evil.
The main purpose of this guide is to share a Linux workflow that embraces productive work and personal growth. I am going to describe here the software (and hardware) tools I use on a daily basis with Linux that enable these improvements.
Features Discussed in this Guide:
- Efficient interaction with the system with my favorite command line shell and programs
(ZSH, Vim, Ranger, TMUX and others) - Hassle-free setup of local and remote robotics software development environments
(Docker, CLion, Remote GDB) - Effective multitasking with a i3 tiling window manager
- Fast prototyping in MATLAB supercharged with VIM (no GUI)
- Improving typing speed with a custom ergonomic keyboard like Ergodox
I have been using this workflow for a few years and find it enjoyable and very effective. If you are a beginner Linux user, my goal is to show you practical use-cases and encourage you to look into these tools. If you take the challenge of using them on a daily basis, you might be surprised how fast it becomes a new normal and how early your time commitment pays off. High return on investment is the main driving force for my choices described here.
If you are already a seasoned Linux user, you might consider around 90% of this text to be basic common knowledge, and I could probably learn from you. But please don’t mind scrolling around to at least see some innovative and ergonomic keyboards for seamless touch-typing focused workflow.
What is unique about this guide?
While there are many excellent learning resources on the internet, they commonly focus on solving a specific problem or describing a single piece of software. However, many beginner users may not even know where to start their learning. They may not yet have the terms to search for the information they need. This guide offers you an introduction to such terms and more. It will expose you to high-level overview of tools which will ignite your development. And I promise: I will use plain English to do that.
I will often direct you to some great, detailed resources. In fact, my setup is heavily influenced by many experienced users who generously share their knowledge with regular users like you and me. I provide appropriate credits in the files or in this text whenever applicable. Besides that, I would be happy to hear your feedback and suggestions on further improvement of this guide and work practices. You can email me via my email provided on this page.
How is this guide structured?
This guide is divided into two parts. In the first part I show use cases of various Linux programs, utilities and frameworks I use on a daily basis. Occasionally, I present a practical application of these tools in robotics engineering projects. Additionally, while I am not talking about my Windows tools here, I will also refer to some alternatives from other operating systems you might know. Finally, there is one tool which stands out from the software tools crowd: the ErgoDox keyboard. It has a profound impact on my interaction with computers, and therefore will be a honorable hardware guest in this guide :).
Every tool introduced here is accompanied by:
- explanation why the tool is worth using
- description and demonstration of common use cases
- my configuration files and external resources
- troubleshooting
- Alternative
In the beginning of this guide I provide a list of tools which enable navigation to their longer descriptions and use-cases in the text. Okay, let’s get started!
Tools Summary:
Main Tools & System Navigation
i3wm – tiling window manager
Vim/Neovim – powerful text editor
Vimium – Vim-inspired navigation in a browser
Emacs (Spacemacs) – powerful text editor, I use if for note-taking and language learning with Anki Flashcards; ♡ for diversity, no editor wars 😉
File Versioning & System Backups
git – version control system
Borg – deduplicating backups
Timeshift – system snapshot backups
Macrium – disk image backups (from Windows)
Robotics Software Development
CLion – C++ IDE, oftentimes full-remote setup
Docker – system-level virtualization by containers
ROS – framework or robotics software development, I frequently use it with Docker
PyCharm – Python IDE
MATLAB & Toolboxes, Vim, Command Line – prototyping MATLAB programs faster
Jenkins – Continuous Integration
System Utilities used with i3wm:
Rofi – application launcher
SpaceFN – alternative functions of space key
Redshift – screen color temperature adjustment
Flameshot – system clipboard tool
unclutter – hide still mouse cursor
undistract-me – report completing commands in the background
Zathura – Vim-inspired pdf viewer
PDFsam basic – pdf manipulation app
feh – image viewer
MPlayer – video player
task-warrior – task management tool
aw-watch – track time spent in system apps
ErgoDox – ergonomic keyboard
Main Tools & System Navigation
XTerm
XTerm is “the standard terminal emulator for the X Window System”. When you type “XTerm” in your current terminal emulator window, a new window opens with a quite archaic xterm interface. This is because xterm uses default settings, with no configuration file. It will become beautiful when you define some presents in the .Xresouces file.
Motivation: The main reason I like xterm is that it properly captures various combinations of multiple keys such as Ctrl+Shift+Tab which can be used by other programs running in it (like TMUX, ov Vim), just like you would use your web browser to switch tabs. Many modern terminal emulators fail on this, and that was a deal-breaker for ergonomic shortcuts.
Use cases: for starters: any interaction with the command line tools will rely on a terminal emulators. XTerm is great to use with Tmux sessions with multiple panes and windows, for instance when you use many terminals for ROS.
Configs: ~/.Xresources – contains the information about the XTerm display settings (fonts, colors, text and cursor scaling, escape characters) [in the past these configs used to be stored in ~/.Xdefaults]
Troubleshooting: You might notice occasional problems with refreshing the XTerm window when scrolling text in VIM in TMUX. Redrawing the Tmux window usually helps in such cases. XTerm can display different 256 colors, I have never found it limitation, but some users (who use recent emulators with 16 million colors) could find it inferior.
Sample alternatives: Default Gnome-Terminal; URxvt
Description of other tools in Progress