Shell

Personal Linux command shell and prompt setup.

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.

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.