This post was cross-posted to my personal blog for archival purposes.
I wanted to list a few utilities that either help my productivity on Linux or make working in Linux more pleasant in some way.
I really enjoy setting up tools so that they're easier to use when I use them -- so instead of just saying "this tool is great", it's also worth noting how some tools can be very powerful once you spend the time to set them up, even if you don't use them often.
You might notice that most of these are terminal based utilities. I primarily interact with Linux via the terminal and almost everything that's not terminal based is just the usual cross-platform applications (Discord, Opera, Slack, VSCode, etc.) so I'm not mentioning any of those.
I asked the community for everyone's recommendations.
NeoVIM
From git messages to quick file changes (or full development), it's totally worth setting up NeoVIM with at least syntax highlighting. I often reach for VIM when I don't want to bother opening VSCode or when VSCode is just too much for a quick edit.
Why NeoVIM and not VIM? NeoVIM retains full backward compatibility with VIM and exposes some new features. Either one works! :)
ZSH
I've had my bash config setup just the way I liked it but recently switched to ZSH. Why?
- it's quick and easy to setup
- you don't have to be a power user to take advantage of it
- zsh command highlighting makes things easier to read
- theme support is much better than bash/terminal theme support
- lots of plugins
Make sure to check out oh-my-zsh which gives you the theme support and plugin support.
nmtui
A TUI (terminal UI) for network management. I reach for it more so than any other built-in utilities because of how simple and straightforward it is. For some reason, I also trust it more. When a GUI network manager freezes, I'm always paranoid that the GUI froze -- not that the network manager is doing its job. With NMTUI, there's more trust on my part for sure.
I know, I know, it looks like it's from the 80s BUT, it allows you to manage all of your saved wifi settings, your ethernet connections, and so much more. It is fully-featured and lacking nothing as far as I can tell.
ncdu
NCDU is a terminal UI (an ncurses
UI to be more specific) for the du
command. What does du
do? du is a disk usage
utility. What's cool about ncdu
is that it scans everything in a folder or on your system and allows you to explore your file system with all of the computed size values.
This is so useful when you're trying to figure out what's taking up so much space on your drive, or when you're trying to delete the space hogs.
htop
Another terminal utility. This one is an interactive process viewer. Think of it as your Activity Manager or Task Manager. It can filter, search, and sort through processes. It displays all of the relevant process information included full command path which started the process. This is so useful when trying to find runaway node processes.
You can then send commands to the processes but the only one I really use is the kill
command to close stuck processes.
notify-send
notify-send
is a utility that allows you to send notifications to yourself. This is super useful -- so much so that I aliased it in my .bashrc
:
alias lmk="notify-send 'Something happened!'"
Might seem useless but if you're running a long-running process, it's great to have a notification system that lets you know when it's done. So I tend to use notify-send
in conjunction with other commands, like npm install && lmk
.
Rofi
Unlike others, this one isn't a terminal application. This is an application launcher/window switcher/so much more. If you're using something like i3, it is a perfect replacement for dmenu. If you're using something else, it's still a power tool.
What makes it special is that it handles command line utilities and GUI apps at the same time AND it'll switch you over to a running instance of an app as well. On top of that, it's insanely fast.
Other notable tools
I don't want to go off to the deep end with every single tool I use so here are a few I'd check out:
-
bat - an alternative to
cat
with syntax highlighting and better display of file contents. Install and alias it tocat
- notepadqq - inspired by the Windows-only Notepad++, a easy-to-use auto-draft-saving text editor
- emacs org-mode - Emacs is a powerful text editor and org-mode is a plain-text productivity/task-management tool
- conky - a desktop system monitoring tool - tells you CPU/RAM loads, active processes, etc. on your desktop
- Archey - a cool utility that tells about your machine. It was used to generate the screenshot at the top of this post
Note: If you use any of my screenshots for anything, please let me know and credit me somehow. Especially if it's used as a texture for computer hacker monitors in a AAA video game
Like my content? Follow me on Twitter or just buy me a coffee
Top comments (47)
notify-send
looks like a good one! I like the example you gave. Might have to give this one a try.Yes this one particually is interesting because we all know the struggle of long running processes where we end up surfing or doing something else and totally forget to check back if it is done 😅
That is so true! Good to know other people do it too! 😂
It's sooo easy to use. I tried to make an alternative for powershell on windows and had to install an additional tool 😞.
I do believe it's Ubuntu only but other systems should have something similar available
Since you use ZSH, you can enable hooks which will automatically notify you when your command takes more than a certain amount of time gist.github.com/jpouellet/5278239 this was my starting point, I expanded it to send me a notifiy-send message with the info instead of just triggering a alert.
That statement
ubuntu only
is dangerous sir!in fact notify-send is part of libnotify which at least in Gentoo is a dependency of wxGTK, in Linux if it works in one distro it works on all of them (with different levels of difficulty)
Thanks for the tip, I wasn't aware of this and is much more elegant than my current way, appending mpv (CLI media player) with some noise after the long command :D
oooh interesting. Thanks for chiming! i went to check if it works on Arch (I switch between Arch/Ubuntu every couple of years) and it looks like it's required by gnome and a bunch of other packages. So, cool! :)
Glad I could help!
I didn't find it on Pop!_OS by default. Installing it was confusing since you actually install
libnotify-bin
... so heads up for anyone looking for it!Yeah, I guess I should specify to check out what kind of notification utilities your specific flavor of Linux supports/has.
notify-send
is dead-simple in usage so I hope other OSes are as well.I was remarking on the fact that Windows/Powershell still sucks with this because you gotta make a whole script for it.
For anyone interested in how PS handles this: you can install BurntToast and write a 1-liner function
function letmeknow {New-BurntToastNotification -Text "I'm letting you know!", "Something you wanted to happen, happened"}
in your ps1 profile script.@antoninjanuska u bring up a good point here. There are so many mitigating factors in configuring a shell env. For me, this took time to really grasp this concept and once I did, game changer! 👏👏
You can download the Source Code from here and compile It for your distro: galago-project.org/downloads.php although maybe it's not so straight forward, never tried to compile it since Debian has binary packages. There is a shell scrip version from Arch Linux users you can also try.
Have a look at fish shell, notifications for long running processes are built-in !
tmux
is the big missing one for my point of view.Otherwise, an alternative of
htop
isglances
.This is so useful when trying to find runaway node processes.
Why not use
killall -9 node
?I'd like to add 'screen' to the list. Useful when you want to leave your terminal session running after leaving VPS.
You usually don't want to kill all your node processes, just the one that's running away...
and using SIGKILL like a hammer is a slippery slope.
yep! VSCode and other processes spin up their own node processes. I'd want to kill a specific one.
What doesn't help is that if you're using webpack or nodemon, or a combination of tools, they'll just spin up another node process as soon as you kill it.
Quicky bash function using AppleScipt Engine to provide
notify-send
with macOS notifications:Now you can just do:
notify-send "This is a notice"
To get a popup notification on your Mac.
Note you can change the sound by looking for sounds in /System/Library/Sounds on the Mac
multitail
,jq
, andhtop
(worth a 2nd mention) are some of the best, underrated cli tools out thereI think the big reason they're so good is because they're cross-linux available. While GUI tools might need GTK, KDE, or whatever else. And on top of that, Linux users don't always have a GUI available.
I definitely love those utils!
jq is a very handy tool; just like httpie.
fx is also a killer app. You can browse JSON in the terminal:
Thanks for posting and sharing! I 💚things that
++productivity
🍻Here a few that I find myself using the majority of the day:
slack-term keeps you in your terminal longer, and it has vim bindings 😍
exa is
++ls -la
tig is a must if you have any 🐱
I really like fzf (fuzzy finder) and ranger.
ranger is a command-line based file manager with vi-bindings.
+1 for ranger
terminator - Terminal emulator
screen - run things in background
miniconda - python virtual environments
I've used
notify-send
to set a cron job in my work computer that reminds me to go home every workday at 5 pm, but I had never thought of your way to use it, I'm definitely going to borrow that :DThat's an awesome idea! I love that. Now if only there was an easier-to-use tool for cronjobs!
For me
killall
proved useful when working with PHP. For example when there is this one rogue script that did not finish like it should.killall -9 php
is not a problem because apache will spawn another one as soon as new request is made, but currently made request would be interrupted, so I only use in dev env.