Talking about all the cool tools I use in my daily technology life
Published on
In today's episode of me trying to add pages to my website, I decided upon the classic "things I use" in computing tasks. This is a simple post to go over tools, how/where I use them, and why I will probably continue to use them for a long time.
I have been using i3-wm for a super long time now, and I don't think I've ever had major complaints about it. It's one of the best window managers out there. It doesn't require a lot of software to get it going. It's highly customizable, and it's lightweight on computer resources (very low CPU / RAM usage, which for me is a big deal).
At work, where I use a Linux desktop 100% of my time, my machine is pretty old. It's a four-core 7th generation Intel i5. Normally this would be totally fine, but we currently live in a post-Spectre/Meltdown era where CPU mitigations are something we should be expecting every few months now due to branch predictions. Intel got hit the hardest by this since they use predictive branching a ton, and as such a lot of their older generation CPUs had their performance benchmarks lose points after all the mitigations were deployed.
# mitigations employed by Linux kernel
➜ ~ cat /proc/cpuinfo | grep meltdown | uniq
bugs: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass
l1tf mds swapgs taa itlb_multihit srbds
My computer using a normal i5 7th generation series CPU with Windows is truly a horrific experience. Within the first week of working here, I got a bluescreen. With any given browser open it can use up to 5-6GB of RAM and start slowing down randomly at times. I was given a blessing to use Linux because a lot of my work is web-based anyway. I plug in a portable disk drive with Linux installed on it, and off I go, far away from this Windows office computer nightmare.
Due to the low resources I have to be picky about what works. The CPU isn't great, the RAM isn't high, and my disk is through a USB 3.0 port which I don't think I get true USB 3.0 speeds with.
I tried several desktop flavors of Linux using Manjaro. Manjaro usually comes with xfce4, the de-facto desktop for many distributions of Linux. I however don't really enjoy XFCE4 because it is pretty terrible at remembering my odd monitor display setup. My monitors would go to sleep, then once I come back, one monitor won't turn on and I constantly have to reset it through the XFCE4 display manager. So no, I don't really want to relive those pains, but XFCE4 is what I would generally roll with otherwise.
Next is Gnome, which I've tried several times to make work. My issue with Gnome is that I really enjoy how simple and fun it is to hop into the Activities menu, move my windows around, quickly hop between programs, and it's a very clean minimal approach to a desktop. Customization isn't super high, but usability is great. Love using Gnome. But Gnome is a massive memory, CPU and disk hog. The recent Gnome version has become almost unusable on my desktop at work. Programs would take significantly longer to open, general performance of the environment got really awful, and overall not a pleasant experience on this computer. Sorry Gnome.
At this point I went with what I know works: i3-wm. It's simple, easy, and fun. It lets you take full advantage of your screen space and is great for multitasking and hopping between several programs quickly. I don't customize my i3 much, I use a pretty close-to-default configuration because after installing i3 so much on so many computers, I got very used to using near-default configurations and never had any interest in doing more. I like i3 a lot.
Alternate notes: instead of i3-wm
, you can use sway which supports Wayland, if that is your jam.
I don't think any introduction is needed. Despite the ongoings of Mozilla over the past two years, it's still my favorite browser.
Chrome is something I used to be excited for in the past, but sadly I think Firefox is actually a lot more usable for my cases. Firefox Containers might be downright one of the coolest and easy-to-use plugins that provides a very useful abstraction for web browsing.
At work I have to juggle multiple accounts for my company, so it helps to switch between different logins. I have a few different emails that need to be logged into various services from time to time, and it's much much easier to use Containers. The only alternative I've seen to this in Chrome is quite literally signing out of your primary Chrome account, or using Incognito mode to start on an empty page. I also explored possibilities using alternate profile directories, which Firefox has, but I can't tell if Chrome supports it or not.
Either way, I'm not leaving Firefox anytime soon.
This one is a wild one to pitch. It takes a certain person to want to use Emacs in a modern day 2021 setting where editors like VS Code exist, which is almost the de-facto editor for all coders now.
Frankly, I just don't want to be anywhere near VS Code. Not with the crap that they pulled with the PyLance language server. In short, it's no longer possible to build the open-source version of VS Code using PyLance because of how it's licensed. There's a difference "open-source" and "free software", and I'll tell you VS Code is not free software.
Long before VS Code was ever a thing, I was a Vim user. I like Vim for it's simplicity. It's (sort of) easy to learn, but learning plugins is a hot mess. The editor itself naturally doesn't come with any type of plugin management, so you have to install a third-party plugin manager like Vundle. This is often a pain in my butt process when I have a fresh system.
Then, after a period of time, NeoVim was the hottest rage. NeoVim brought about truly modern ideas for Vim like multithreading plugins, better language server integrations, and even a terminal emulator to use from inside the editor.
But, Vim wasn't doing it for me anymore. The Vim configuration language is a pain in the ass, and I didn't feel like dealing with inconsistent plugins for years. Maybe there would be some plugins that made the editor make more sense, but I've had nothing but bad experiences trying new plugins that it made me almost anti-plugins. I just want syntax highlighting and rainbow parentheses.
Emacs, after I finally learned Lisp nice and proper, made more sense to me. Emacs has a built-in package manager named package.el
which is easy to use. I wrote out my needed packages (which is pretty cool to be able to browse from within the editor) in my .emacs
file, and I wrote a quick script to install all my packages from having zero packages installed.
; My packages as a list
(setq stovepkgs '(neotree smex ido smartparens ...))
; My "install everything please" function
(defun install-all-packages ()
(interactive)
(package-refresh-contents)
(mapcar #'package-install packages))
This was a more enjoyable approach to installing my packages using one of my favorite Lisp functions mapcar
. I'm no Emacs Lisp expert by any means but this was a pretty simple thing to try doing.
There are installations like Doom Emacs and Spacemacs which streamline the process of making Emacs a "true IDE experience", but honestly, it soured me. I went into them, tried learning how to add plugins, and gave up. It was too obscure to figure out what I had to do to get my regular Emacs back, so I deleted them both and prefer my minimal Emacs setup to those.
I use Alacritty every day. It is by far the fastest terminal emulator I've used. I used to use rxvt-unicode
, but the font issues pushed me away one last time last year.
Alacritty is important, because for me, spawning terminals is something I do several times an hour. I quickly close terminals, I open them, I move them all around my i3 workspace. I like terminals a lot. From an aesthetics standpoint, I enjoy decorating my screens with terminal emulators all around the place. From time to time people call me a "hacker", which is a feeling I can get used to (despite never "hacking" anything).
Alacritty is great, fast, a bit more modern with better support for graphics libraries, cross-platform, and does exactly what I need it to do.
For monitoring purposes, I like to keep a tool open to see what went wrong before my system freezes randomly. Sometimes it's a memory overload and my swap file gets hit too hard and I experience a massive lock-up, forcing me to reboot. Or sometimes it's forkbombs in my own code or maybe the computer took too long to process my inputs and opened thirty Firefoxes.
htop
, traditionally everyone's favorite replacement for top
, can do just that well enough. It shows you processes, you can sort, kill and monitor resources from it. But the one thing it doesn't really do too well is showing you history; you don't get to see a recent enough timeline of your system. You can see CPU load at different intervals, but that isn't a great storyteller.
For a while I have been using bottom, which is a full htop
replacement with graphic visuals. It shows CPU, RAM, disk usage and network usage. Very basic set of tools but works very well.
As an avid Android user for years, Android is kind of a mess. I've been looking for alternate solutions to applications I use on my phone that are a bit more "freedom friendly". I recently had a dilemma where I wanted to move files from my phone to a USB stick attached through the phone's OTG port. Did you know Google Files will not do that at all?
Nope. It's not possible to do that through Google Files for whatever reason. I was bashing my head into a wall over how stupid it was, but it's whatever. I decided to find another route and use something else; called Simple File Manager, hosted on F-Droid.
F-Droid traditionally hosts the open-source version of the Play Store, but their apps are not on the level of some of the things out there. There's no open-source Instagram or Facebook or Snapchat, but rather there are simple replacements for doing tasks on the web or on your phone. There's camera software replacements like Open Camera, alternate Twitter systems like Mastodon using clients like Tusky, or even one of my favorites K-9, one of the best email softwares out there.
I cannot recommend F-Droid enough. It's a great solution for Android users who want to free themselves of Google Play Store shackles and use software that "just is" and comes with no overhead like ads and microtransactions. Plus if you're keen, you can always contribute too.
This one I use pretty regularly. Copy and pasting text to the right buffer is hard when it comes to Linux. I almost never copy the right thing on the first try. I still don't really understand how copying anything works or where it goes, but xclip
sure as hell simplifies the process.
With xclip
you can pipe any text input you want from shell and then paste it anywhere on your desktop. I use this a bunch at work to automate putting things into my clipboard for mass-pasting sessions.
# How to copy a file from terminal into clipboard
$ cat some_text_file.txt | xclip -sel clipboard
# Even pipe text filtering into it as well
$ ip addr | grep inet | uniq | xclip -sel clipboard
Or calling it from Python, which is convenient to me from time to time.
import os
# same as a shell command, but from python
os.system("ls -al | xclip -sel clipboard")
# do weird string formats or whatever you want
my_name = "Steven"
os.system(f"echo My name is {my_name} | xclip -sel clipboard")
I couldn't live without scrot
installed on my system. It is by far the easiest way to get a screenshot in the world. Fast, responsive, easy to use, it's great. It works well with shell script hacking too. You can use scrot
to create a screenshot file, then you can even curl
it to Imgur for immediate upload.
For the most part I use this to clip all my screenshots to post in various Discord channels or upload things to my work Slack. It's mostly invoked using scrot -s
to do a selection of a screen area. scrot -s -d 1
will delay that screenshot by one second, and scrot -s -d 0.1
will even delay it by a tenth of a second. You should make sure to include a tiny delay, else scrot
will run too fast and capture the white border of the selection tool.
Out of all the launchers out there in the world, rofi
is the one I like. It's a great lightweight application launcher that's capable of even running shell scripts from it as well.
The appearance can be changed, it's easy to add anywhere, highly customizable, you can even add an emoji picking plugin to help find the right emoji to express yourself.
Not much else I can add here, it's just downright useful. Great dmenu
replacement.
These are a sample of the majority of tools I use on a daily basis. On some odd days I may use something else that I'm just not mentioning. Things I don't mention would be scripting languages, because why wouldn't those help? Here's a full list.