What I use
I am usually very interested in other people’s setups, especially when they have a highly personalized environments that make them be highly efficient while working. Because of this, I believe my workflow could be of interest to someone.
Software
In case you want to have a look at my dotfiles, you can find them here.
Tmux
When I started entering the suckless rabbit hole, I used to use a WM (Window Manager) where I opened as many terminals as I needed. The rest of the applications I ran in full-screen most of the times.
Here is where tmux
(terminal multiplexer) comes in. Think of it as a WM for
terminals. There are many guides out there so I won’t go into detail. But the
main idea is that you have the tmux server, that takes care of handling your
sessions. Each session can have multiple panes (think browser tab), and each
pane can have multiple window splits.
The tmux server is running as long as there is any session running. You can
detach and attach to an existing tmux server. For example, I can have my tmux
server running on my desktop, then leave the house and connect to it via SSH. I
only have to type tmux attach
to access my tmux server and continue working.
Moreover, with the tmux-resurrect you can make your tmux sessions persistent to
reboots.
Tmux also has commands for managing your layout, and you can configure every
keybind. So it is basically a WM in your terminal. I like to have a main
session where I do whatever I need with the terminal, and then one session for
every project or lecture I’m taking.
Newer versions of tmux incorporate support for popup windows. I use them to spawn fuzzy finders to my tmux sessions, among other things. You can have your own scripts executed on this pop-up windows, or new panes, sessions or splits. The possibilities are endless.
For example, I usually store my projects in the same folder. I have a script that finds all the directories with a git repository in that folder and feed them to a fuzzy finder. If that project is not open, a new session will be created for it. If it exists, tmux will simply open that session without changing anything.
I also do something similar with my password manager, creating and viewing
queries to cht.sh
, or opening Lazygit.
Neovim
Lazygit
Lazygit is a TUI for git.
ZSh
I like working inside the terminal. I got into using command lines and TUIs (text-based user interfaces) because once I overcame the steep learning curve, I enjoyed working with incredibly responsive programs, that have the same look and feel no matter on what hardware and OS I am running.
My shell of preference is zsh
. It is easily installable in any Linux distro
and it comes as the default shell for MacOS. I copied the .zshrc
that was used
in the Arch Linux installation media, since it came with autocompletion and
other nice things by default. On top of that, I am using the Z plugin. This
plugin allows me to type:
z my_folder
And zsh will take me to the most recent folder I have visited with a similar name. I used to use terminal based file managers like Ranger or lf, but with this plugin I stopped using them. It is that convenient.
Pass
The UNIX Password Manager is basically a shell script that will take care of generating, encrypting with your GnuPG id, and running a git repository of your passwords. Since each component is so simple, it is compatible with every OS, even mobile. I use it daily on Linux, MacOS, Android and iOS and I have never had a problem.
Stow
Services (WIP)
Contabo
Contabo is a company based in Germany that offers very competitive pricing for their VPSs. For those who don’t know, a VPS (virtual private server) is a cloud computer that you can rent. For a bit more than 6 euros per month, I get 200Gb of SSD storage, 8Gb of RAM and 4 CPU cores. Once you self-host multiple services from your VPS, it quickly becomes way more cost effective than subscribing to independent services. But you ‘pay’ with your time by having to set up and maintain everything. Although to be honest today it is very easy to just go the Docker way, if you don’t have much time on your hands.
This are some of the services that I self-host:
-
Wireguard VPN
Wireguard is a surprisingly simple and fast VPN implementation. I mainly use this service to securely connect my devices that are physically in different places. For example, I was assigned a computer while working on my master thesis that was behind the university firewall. By connecting this computer to my VPN, now I am able to SSH to the computer and remote work from anywhere!
-
Gitea
Basically a lightweight Github/Gitlab replacement. I use this to save some personal repositories that I don’t want to share with the world mainly.
-
Syncthing
By having a syncthing node running 24/7 on my VPS, I essentially achieve the same functionality as Dropbox for syncing my files across computers. As long as my devices have internet, I can just switch from one device to another without having to worry about refreshing my files.
I have been running this setup for a couple of years now and I have almost never had any problems with conflicting files. Mainly because I make sure that the files are synchronized before I am to make any conflicting change.
-
WebDAV
Very convenient for a self-hosted Zotero storage. Also useful for a Google Drive replacement, although I haven’t used it this way much.
-
CalDAV/CardDAV
With radicale I have Calendar and Contacts synchronization over all my devices, regardless of brand. I can create an appointment on my Android phone, and it will show up on my iPad or Linux desktop. Same way with contacts. Very comfortable.
-
Music streaming
Basically your own Spotify. I’m using Navidrome. Not much to say, you can install clients for any platform, or just use the web based player. But of course you will have to bring your own music, which makes discovering new music impossible.
Migadu
A no-bullshit e-mail provider. For not even 2 euros per month, you can have virtually unlimited addresses on your custom domain. Moreover, you can easily log in with any e-mail client app through IMAP/SMTP.