Shell
Tuesday, 2025-08-12 Comments
Personal Linux command shell and prompt setup.
- Zoxide
- Delta
- Git difftool Meld
- Nushell
- Helix
- Atuin
- Oh-My-Posh
- Bat
- Direnv
- Zellij
- Claude-code
- Ripgrep
- Github CLI
- Carapace
- Broot
- NCDU
- Powertop
- Geekbench
From most-useful to less-useful
Zoxide
A fuzzy version of cd
. A fuzzy search engine for folders in your filesystem. It learns where you want to go through usage. You can configure it to replace cd
.
Delta
A replacement for diff
that adds syntax highlighting and paging. You can configure it as the default diff tool for Git.
Git difftool Meld
Not really a shell tool, but you can configure meld
as the default difftool for Git. You can also add it as a git
alias, you just have to write: git meld [BRANCH]
to compare the current branch with another branch.
Nushell
A shell that consciously avoids being POSIX compliant. This may look like a disadvantage, because you can’t blindly copy-past Bash scripts from the internet anymore, but that is also the only disadvantage.
- Nu shell has an
rm
command that can be configured to delete files to the trash always. - It also has an
ls
command that can be queried using a kind of SQL syntax with traditional pipes.
Want an audio notification when a long-running command finishes? In your ~/.config/nushell/config.nu
:
def notify-long-command [] {
const NOTIFICATION_THRESHOLD = 30sec
const SOUND_FILE = "/run/current-system/sw/share/sounds/freedesktop/stereo/bell.oga"
# Skip notifications if explicitly disabled
if ($env.DISABLE_COMMAND_NOTIFICATIONS? | default false) {
return
}
let cmd_duration = (($env.CMD_DURATION_MS? | default "0") | into int | into duration -u ms)
if $cmd_duration > $NOTIFICATION_THRESHOLD {
try { ^pw-play $SOUND_FILE } catch { ^paplay $SOUND_FILE }
}
}
$env.config = (
$env.config | merge {
hooks: {
pre_prompt: [
{||
refresh-theme
notify-long-command
}
]
}
}
)
Helix
Terminal editor with powerful keybindings and language server support out of the box.
Atuin
A search engine for your shell history that sync between devices. In a sense it is a replacement for the old history
command.
Beware: By default it hijacks your upper arrow key to suggest commands from your history. However, you can make it narrow down to commands within the same Git repository or folder.
Oh-My-Posh
Extend your system prompt with extra information (about package version, git status). A prompt that shows me my Git branch and status is essential.
It’s easy to use one of the themes.
Bat
A replacement for cat
that adds paging (so you don’t have to pipe it through less
), syntax highlighting, and line numbers. Use it to override cat
.
Direnv
Scaffold system environments by just entering and exiting directories. In combination with Nix or other declarative package managers, only the packages you need are available within your projects.
Zellij
Easy terminal splitting. Detaching from views is possible to keep processes running in the background, you can re-attach later.
Claude-code
For refactorings in human language. Good for matching local journal debug entries with online bug reports.
Ripgrep
Recursively search your current directory for a string or regex pattern, ignoring git-ignored and hidden files.
Github CLI
Create PRs from the terminal. Check their status from the terminal. Has shortcut commands to open the corresponding Github web pages in your browser. List CI action caches.
Carapace
Aggregator for a useful set of shell-completers. Can even complete online GitHub repositories. Integrates with most shells.
In Nu-shell, you can combine zoxide completions with carapace using this in your ~/.config/nushell/config.nu
:
let external_completer = {|spans|
match $spans.0 {
z|zi => {
$spans | skip 1 | zoxide query -l ...$in | lines | where {|x| $x != $env.PWD }
}
_ => {
carapace $spans.0 nushell ...$spans | from json
}
}
}
$env.config = (
$env.config | merge {
completions: {
external: {
enable: true
completer: $external_completer
}
}
}
)
Broot
Pretty file-system trees.
NCDU
Analyze which folders use the most disk space.
Powertop
See how many Watts your system is using and which processes are consuming the most power.
Use it to create custom “power profiles” with power-profiles-daemon
.
Geekbench
Compare your personal hardware / operating system with others using a standardised benchmark and upload scores.