My Linux setup (as of 10/2020)
Description of my daily Linux setup as of October 2019
Edit (2020-10-02):
change termite to kitty due to font ligatures support.
Edit (2020-06-01):
change urxvt to termite, update info on qutebrowser with tor.*
Overview
In this post I’m documenting the current (March 2019) system setup I use in my development machines. This has been converging for a long time already, and It will surely evolve in the future. However, right now, it works well for me. I use the machines mostly for development work (Gaia Sky, Gaia First Look, Ph.D., etc.). I also use my personal computers for the occasional light gaming session (Terraria, C&C remastered, or whatever I feel like at the moment) and as all-around computing devices to manage stuff.
The setup is based around the keyboard and command-line tools (CLI), that run in the terminal. Of course, I use also plenty of GUI applications, but the basic workflow is just optimized to minimal mouse use. It is just faster to get around and get things done quickly.
I use this configuration in the following machines:
- ARI desktop - hidalgo, i7-7700, 16 Gb RAM, GTX 1070, Ubuntu 18.04
- IWR desktop - herschel, i7-4790K, 16 Gb RAM, GTX 970, Manjaro Linux
- Home laptop - simian, Dell XPS 13 9370 13", i7-8550U, 16 Gb RAM, Intel UHD 620, Arch Linux
- Home desktop - bonobo, i5-4460, 16 Gb RAM, GTX 970, Antergos Linux
Dotfiles project
All of the configuration files are hosted in my dotfiles repository. I try to keep things clean, simple and generic. For more information see this post where I originally shared the repo.
Bootstrapping and deploying
I have a couple of scripts to painlessly and automatically bootstrap and deploy the configuration. Please, see the README file for more details. Basically, run:
bash <(curl -s https://gitlab.com/langurmonkey/dotfiles/raw/master/bootstrap.sh)
To check out the repository to ~/.dotfiles
and install the required software. Then, do:
~/.dotfiles/deploy
To deploy the configuration. You are done.
Window manager
I use i3wm
, and in particular, Airblader’s fork i3-gaps
in every computer I have to do work with. Additionally, Gnome Shell is installed to my home desktop bonobo for convenience, since it is connected to the TV in my living room. It is not very convenient to operate i3 with one of these.
Shell
I use zsh
(actually, oh-my-zsh
) because I’m used to lots of its features that I otherwise miss when using bash
.
Terminal emulator
My terminal emulator of choice is kitty
because it is simple and easy to configure. It is not the fastest terminal emulator in the west, but it supports font ligatures. Ligatures are important to developers, and not many terminal emulators support them. I use the FiraCode Nerd Font
font. It looks crisp and is just a beautiful monospace font for code, with ligatures. Other than that, I have bindings to modify the font size automatically, scroll up and down using k
and j
and little else.
I’ve played around with st
but I’m a fan of having to apply patches for even the most basic of functionalities. It is just not too convenient for me, even though I keep it installed in my systems.
Bar
I tried a few bars: i3bar
, i3blocks
, bumblebee-status
, you name it. The only one which worked with very little quirks and easy config with my two-monitor setup with different DPI is polybar
. Also, it looks gorgeous, and it is very easy to write modules for. Check out this post for an example of a script which shows CPU and memory usage.
My polybar displays the workspaces, the current keyboard layout, available updates, memory usage, CPU and temperature, the current wireless network, the screen brightness, the battery, the volume, date and time and the systray.
Text editor
When it comes to text editors, my opinion is that there is no other than vim
(or neovim
- sorry emacs folks. I only use just a couple of plugins: Ctrl-P
for fuzzy searches and vim-surround
. Other that that, I don’t have much else to add. If you don’t use vim
, try it. The first few days (or weeks) are hard, but once you build up the muscle memory you’ll become dependent on it and you will find yourself trying to use the same paradigm in your browser, your terminal and your mail client.
File manager
ranger
is amazing. It has all the features I ever want, and tweaking and configuring it is so easy it is a pleasure. I have defined a couple of bindings that allow me to move directly to the wallpapers folder, change the current wallpaper with feh and change the current wallpaper and generate a new theme with pywal. For example, the following moves me directly to the wallpapers folder when I press gw:
map gw cd ~/.dotfiles/assets/wallpaper
Then, I can select a wallpaper and I can either use bg
to set as background or bw
to set as background, generate a new palette and apply the theme.
map bg shell cp %f ~/Pictures/wallpaper.jpg \
&& feh --bg-fil ~/Pictures/wallpaper.jpg
map bw shell cp %f ~/Pictures/wallpaper.jpg \
&& ~/.local/bin/wal -c && ~/.local/bin/wal -a 85 -i ~/Pictures/wallpaper.jpg
Additionally, I use this wee script to launch a new instance of ranger inside a terminal with a specific working directory:
#!/bin/bash
kitty -cd "$1" -e ranger --cmd="shell ~/.local/bin/wal -R"
Whenever I need a new instance of ranger, I use the script. For example, I bind $sup+f to a new ranger-in-term starting at the working directory of the currently focused window in my i3 configuration:
bindsym $sup+f exec ~/.dotfiles/bin/ranger-term "\`$HOME/.dotfiles/bin/xcwd\`"
Or I use ranger for displaying the mounted volumes from the udiskie tray icon, starting udiskie in this manner:
exec --no-startup-id udiskie -f "/home/tsagrista/.dotfiles/bin/ranger-term" --tray
Finally, I use the following line to open the highlighted file instead of the selected file when pressing l
or arrow_right
.
map l move right=1 selection=False
Browser
qutebrowser
all the way. It is light and snappy. Only thing I’m missing right now is some sort of advanced ad blocking (current ad blocking system is host-based). This does not always work with youtube videos, but most of the time I use mpv
to watch them anyway, for I have V
mapped to ‘open video with mpv’. Additionally, the way it integrates with pass
is very neat.
You can use qutebrowser easily with the tor network. Check it out here. It has a built-in ad-blocker and, if that is not enough, I also use a custom /etc/hosts
file.
Password manager
I used KeePassX for many years until I discovered pass
. It is a simple CLI password manager where the passwords are stored in text files encrypted with your PGP key. Then you can version control the pass
folder to sync it across all your devices. Simple to set up and simpler to use, the passwords can even be decrypted directly with gpg
, so you are always in control.
Mail client
Right now I’m using Thunderbird with Enigmail. I need to research mutt
and try it out when I have some time.
Music player
I have used cmus
with vis
for a long time, coupled with beets
to keep my library organised and my tags up to date. However, lately I’ve turned to the mdp
+ ncmpcpp
tandem. The MPD service is running in the background and maintains the libary, playlists and player state. NCMPCPP connects to it and offers a terminal-based clean interface. Every day I like it more and more.
RAW photo editing
I’ve been mostly using RawTherapee (please, disregard the name) for years, but lately I’ve been playing around more and more with darktable. Both have their strong points. I think I prefer RawTherapee’s user interface, but darktable has more options and is better at memory management. One of the killer features that might end up tipping the balance for me in darktable’s favour is the GPU acceleration support via OpenCL which makes editing operations lightning fast. Also, darktable supports masks, which RawTherapee does not.
At the end of the day, both are very capable and produce good results. Also, both support .CR2
and .RW2
from my Canon 40D and my Panasonic Lumix LX10/15 respectively.
Scripting
Most of my scripts are written in bash
, even though for more complex things I also use python
from time to time.
Additional utilities
Here is a list of utilities I have installed and use regularly.
cava
- Audio visualizer and equalizerfd
- Amazing replacement forfind
fzf
- Terminal fuzzy finder and vim pluginsshfs
- Mount file systems over SSH/SFTPapropos
- Search the man pagesunits
- Convert units on the terminaltranslate-shell
- Google translate terminal wrapperrtv
- Reddit Terminal Viewertealdeer
- Accesstldr-pages
with stylepdfpc
- Presenter console for for PDF filestig
- Text interface forgit
bc
- Best calculator ;)
Closing Notes
I think this post sums up my basic setup pretty accurately. It will, of course, become obsolete at some point, but for the time being, I will try to keep it up to date whenever I implement major changes.