The next step after Terminal Setup: Basics: tools for keeping long-running sessions alive, running coding agents, editing code, and working with Git.

1. tmux

tmux keeps terminal sessions alive after you close the window or lose an SSH connection, and splits one terminal into windows and panes.

Installation

# Install packages
sudo apt install git xclip tmux
 
# Install TPM (Tmux Plugin Manager)
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

Basic Configuration

Create ~/.tmux.conf:

# Core Options
set -g mouse on
# set-option -g default-shell /bin/zsh # When using zsh shell
set -g default-terminal "tmux-256color"
set-option -sa terminal-overrides ",xterm*:Tc"
 
# Clipboard setup
set-option -g set-clipboard on
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -in"
 
# Window and Pane Settings
set -g base-index 1
set -g pane-base-index 1
set-window-option -g pane-base-index 1
set-option -g renumber-windows on
set-window-option -g mode-keys vi
 
# Key Bindings
bind -n M-H previous-window
bind -n M-L next-window
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle
# bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
bind '"' split-window -v -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
 
# Plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'christoomey/vim-tmux-navigator'
# set -g @plugin 'catppuccin/tmux'
set -g @plugin 'dreamsofcode-io/catppuccin-tmux'
 
set -g automatic-rename on
set -g automatic-rename-format '#{b:pane_current_path}'
 
# Initialize TPM (keep this line at the very end)
run '~/.tmux/plugins/tpm/tpm'

Install plugins: Start tmux, then press Ctrl + b + I

Essential Commands

  • Sessions: tmux new -s name, tmux attach -t name
  • Windows: Ctrl + b + c (new), Alt + H/L (navigate)
  • Panes: Ctrl + b + " (horizontal), Ctrl + b + % (vertical)

2. herdr

herdr is a terminal multiplexer built for AI coding agents such as Claude Code and Codex. Like tmux, it keeps your terminals running in a background server when you close the window or lose an SSH connection. On top of that, it marks every agent as working, blocked, or idle, so you can see at a glance which one needs your answer.

Installation

curl -fsSL https://herdr.dev/install.sh | sh

Basic Usage

Start it in your project directory, then run your agent inside a pane:

herdr

herdr works with the mouse: click to focus panes and tabs, drag borders to resize, and right-click for menus. For the keyboard, press the prefix Ctrl + b, then an action key:

ActionKey
Split right / downprefix + v / prefix + -
Move between panesprefix + h/j/k/l
New tab / next / previousprefix + c / prefix + n / prefix + p
New workspaceprefix + Shift + n
Workspace navigationprefix + w
Show all key bindingsprefix + ?
Detach (everything keeps running)prefix + q

Run herdr again to reattach. To stop all panes, run herdr server stop.

Same prefix as tmux

tmux and herdr both use Ctrl + b as the prefix. Avoid running one inside the other, or change one of the prefixes. See the herdr keyboard docs.

tmux or herdr?

Use caseTool
Servers, builds, ROS 2 nodes, SSH sessionstmux
Several coding agents running in parallelherdr

3. VS Code

Download the .deb package from code.visualstudio.com and install it. This also adds Microsoft’s apt repository, so VS Code updates with apt:

sudo apt install ./code_*_amd64.deb

Open the current directory from the terminal:

code .
ExtensionIDUse
C/C++ Extension Packms-vscode.cpptools-extension-packC++ IntelliSense and debugging
Pythonms-python.pythonPython development
rust-analyzerrust-lang.rust-analyzerRust development
ROS 2Ranch-Hand-Robotics.rde-ros-2ROS 2 build, launch, and debugging
Remote - SSHms-vscode-remote.remote-sshDevelop on a robot or server over SSH
Dev Containersms-vscode-remote.remote-containersDevelop inside Docker containers

Install them from the terminal:

code --install-extension ms-vscode.cpptools-extension-pack
code --install-extension rust-lang.rust-analyzer

4. Neovim

Download newest Neovim on Ubuntu

Installation

# Install dependencies (optional)
sudo apt install ninja-build gettext cmake unzip curl
# Build from source
git clone https://github.com/neovim/neovim
cd neovim && git checkout stable
make CMAKE_BUILD_TYPE=RelWithDebInfo
sudo make install

Quick Theme Setup

NvChad (Recommended):

git clone https://github.com/NvChad/starter ~/.config/nvim && nvim

Custom Configuration (Made by me. Focus on Rust):

git clone https://github.com/JisangYun00/clean-nvim.git ~/.config/nvim && nvim

5. Lazygit

What is Lazygit?

Lazygit github Lazygit provides a simple terminal UI for Git commands, making Git operations visual and intuitive without memorizing complex commands.

Installation

LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | \grep -Po '"tag_name": *"v\K[^"]*')
curl -Lo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/download/v${LAZYGIT_VERSION}/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz"
tar xf lazygit.tar.gz lazygit
sudo install lazygit -D -t /usr/local/bin/

Install for Jetson Orin Nano

# Get the latest version of lazygit
LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | \grep -Po '"tag_name": *"v\K[^"]*')
 
# Download the ARM64 version for Jetson Orin Nano
curl -Lo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/download/v${LAZYGIT_VERSION}/lazygit_${LAZYGIT_VERSION}_Linux_arm64.tar.gz"
 
# Extract and install
tar xf lazygit.tar.gz lazygit
sudo install lazygit -D -t /usr/local/bin/

Key Features:

  • Visual file staging and committing
  • Easy branch switching and merging
  • Interactive rebase and conflict resolution
  • Built-in diff viewer

6. More CLI Tools

Small tools that make everyday terminal work faster:

sudo apt install ripgrep fd-find bat zoxide btop tldr
ToolCommandWhat it does
ripgreprgFast text search across files
fdfdfindFast, simple alternative to find
batbatcatcat with syntax highlighting
zoxidezJump to frequently used directories
btopbtopSystem monitor for CPU, memory, and processes
tldrtldrShort, practical examples for commands

On Ubuntu, fd and bat are installed as fdfind and batcat. Add these lines to ~/.bashrc to use the usual names and enable zoxide:

alias fd=fdfind
alias bat=batcat
eval "$(zoxide init bash)"

See also