Tools update for 2025
Introduction
Recently I bought a Lenovo ThinkPad T14 Gen 4 (Intel). Originally I installed Arch Linux on it but a Reddit comment along the lines of “NixOS is the new Arch” had me exploring Nix and NixOS. Along the way, this has also allowed me to explore some updates to my overall Linux experience and tooling.
Through testing out some applications and environments, it often led me to alternative solutions I ended up adopting. As a result, I’ve listed the things that didn’t work for me first.
Things that didn’t work for me
Fish
Fish shell actually has a lot going for it out of the box. This led to changes to my default Zsh configuration which have really helped ergonomics.
In the end I didn’t see a need for Fish since it’s not a common shell environment. It has a few quirks and its own shell scripting language that again wasn’t worth adopting because of compatibility reasons. It’s easier just to keep shell scripts in Bash.
Hyprland, Niri and Sway
These different tiling window managers are interesting but the amount of learning and configuration was too much.
Gnome had enough keyboard shortcuts for me to be usable.
It did lead me to look at some tiling helper extensions for Gnome.
Toshy
I had previously used Toshy which provides Mac OS keyboard shortcuts for Linux. After some flakiness, I ended up abandoning this and just succumbed to the default Gnome shortcuts which have been working great for me. There is just a small mental shift in shortcut usage when switching from Linux to Mac which is unavoidable.
Things that worked for me
Atuin
Atuin is a shell history manager which stores your history in a SQLite database. I use the CTRL+R history search shortcut a lot so this is like an enhanced history search.
Atuin has a client/server feature which allows you to share the history with your other machines but I find this concept overkill. I just use Atuin as a generic history manager.
One feature I like is the ability to exclude the history from certain directories or a matching regular expression from being logged. I find this handy as a means of privacy.
My Atuin settings look like:
programs.atuin = {
enable = true;
enableZshIntegration = true;
settings = {
enter_accept = true;
filter_mode_shell_up_key_binding = "session";
style = "compact";
inline_height = 20;
show_tabs = false;
history_filter = [
"tmp"
];
cwd_filter = [
"/Downloads"
"/tmp"
];
};
};
The history_filter
setting means that Atuin will NOT log commands which have the string tmp
.
The cwd_filter
setting means that Atuin will NOT log commands run in /Downloads
or /tmp
directories.
By default, Atuin will share the history globally across all running terminals. Running ls
in one terminal makes the last run up arrow command ls
in another terminal. This is confusing and unintuitive so I set the up arrow history to be tied to the running session with the filter_mode_shell_up_key_binding
setting.
Devenv
Coupled with Nix, I’ve started using Devenv. This effectively replaces a lot of individual programming virtual environment tools such as Nvm for NodeJS and Virtualenv for Python. A similar tool is Mise but since I’m on the Nix bandwagon, this is an effective way to consolidate tooling and knowledge.
Ghostty
I started using Wezterm on Linux but couldn’t get over the inconsistency of the window decorations. Getting the window resize cursor to show up for Wezterm under Gnome is problematic.
Ghostty has also allowed me to standardize my terminal across Mac and Linux.
A couple of features missing with Ghostty is the lack of scroll bar for scroll back history and search. Other than that, there’s nothing major I need from a terminal program.
My configuration settings is only a few lines long:
settings = {
theme = "Novel";
copy-on-select = true;
cursor-style = "block";
shell-integration-features = "no-cursor";
};
Ghostty also supports the Kitty graphics protocol which makes tools like Yazi work seamlessly. You can even play videos with MPV within the terminal window using a command like:
mpv --vo=kitty --vo-kitty-use-shm=yes [video].mp4
Nix and NixOS
There is some learning curve to NixOS and the Nix ecosystem but once you experience a declarative system, it’s hard to go back. I now run NixOS on my day to day Linux machine.
I also share Home Manager configurations between my Linux and Mac machines. Home Manager has replaced Homebrew for CLI applications on my Mac laptop.
Tiling Shell extension for Gnome
I found the Tiling Shell extension for Gnome filled my need for a helper application for window layouts in Gnome.
Yazi
Yazi is a handy utility I found while browsing the Nix configurations of other people. Yazi has some nice features like integrated picture viewing within the terminal window. Definitely a tool I never knew I needed.
Zsh
I have been using Zsh on my Mac since it became the default shell. It was a pretty simple upgrade from Bash but since Bash is GPL, Zsh became the default Mac OS shell.
I have since decided to just standardize and use Zsh as my default shell for desktop Linux and Mac. On servers I still just use the default Bash since I don’t customize that set up and spend as little time on the actual servers as possible.
I have integrated some features of Fish shell.
Here’s my current Zsh configuration:
programs.zsh = {
enable = true;
defaultKeymap = "emacs";
enableCompletion = true;
syntaxHighlighting.enable = true;
autosuggestion.enable = true;
history.size = 0;
shellAliases = {
ls = "ls --color=tty -F";
} // (
if !pkgs.stdenv.isDarwin then {
code = "codium";
} else {}
);
initExtra = ''
# Disable Zsh history
unset HISTFILE
PROMPT='%F{cyan}%n%f@%F{green}%m:%f%F{yellow}%1~%f%(?..%F{red}[%?]%f)%# '
bindkey "^[[3~" delete-char
export PATH="$PATH:$HOME/bin:$HOME/go/bin"
precmd() {
local dir="${"$"}{PWD/#$HOME/~}"
echo -ne "\033]0;${"$"}{dir}\a"
}
'';
};
The things to point out:
- It adds useful features like completion, syntax highlighting and autosuggestions. These now work similarly to Fish.
- Command history is disabled since Atuin now handles this.
- The shell prompt now includes the error status of the previous command if an error occurs. This was something cool that I noticed Fish did.
Things I want to try
Credits
Post inspired by: Matthew Sanabria: Tools Worth Changing To in 2025