2020-10-02 edit: change termite to kitty due to font ligatures support.
2020-06-01 edit: change urxvt to termite, update info on qutebrowser with tor.
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 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
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:
To deploy the configuration. You are done.
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.
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
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.
I tried a few bars:
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.
When it comes to text editors, my opinion is that there is no other than
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.
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
map l move right=1 selection=False
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
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.
I have used
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
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
.RW2 from my Canon 40D and my Panasonic Lumix LX10/15 respectively.
Most of my scripts are written in
bash, even though for more complex things I also use
python from time to time.
Here is a list of utilities I have installed and use regularly.
cava- Audio visualizer and equalizer
fd- Amazing replacement for
fzf- Terminal fuzzy finder and vim plugin
sshfs- Mount file systems over SSH/SFTP
apropos- Search the man pages
units- Convert units on the terminal
translate-shell- Google translate terminal wrapper
rtv- Reddit Terminal Viewer
pdfpc- Presenter console for for PDF files
tig- Text interface for
bc- Best calculator ;)
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.