What to Pack for a Deserted Linux Island

This post has appeared as an article on issue #1 of PagedOut! magazine.

Physical

Things I insist on installing on every new Linux server I work on, and you should too.

Why

It’s that time again. You finally manage to ssh into your brand-new server, aaaand…

Sad shell

😖 It sucks. You think to yourself, “ah, if only I had time to set this up like I WANT it to be, this machine would’ve been a treat”. But alas; you choose to save time by chugging on with the basic terminal for hours, which end up slowing you down. My point is: Tooling is king.

Tooling increases productivity, lowers frustration, and makes you look cool. 😎

pro·duc·tiv·i·ty noun; The effectiveness of productive effort, especially in industry, as measured in terms of the rate of output per unit of input. source

ℹ Tooling is important where you intend to actually work. If this is a server you just ssh into to restart a crashed service, then this guide might be somewhat irrelevant.

So, what do I install the moment I log into a new Linux machine, as a starter pack of efficiency? Grab your coffee and ssh into your neglected server that wants some love.

Prep

Note: This guide is for Debian-based releases. Make adaptations as necessary.

First thing first, update your current software.

sudo apt get update

And get software that gets other software.

sudo apt install curl
sudo apt install git-all

Now for the fun and oh so opinionated stuff. These are personal (but tried and true) favorite programs and configurations. Give them a shot.

The Shell

I recommend you get the coolest one:

sudo apt install zsh

When you launch it for the first time, use the wizard to configure it to your liking. If you don’t configure autocomplete and chdir without cd, you’re wrong. Then get oh-my-zsh (for the security-minded folks out there - after reviewing the script of course).

sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Don’t forget to add 2-letters-long aliases to the most frequently used paths (e.g. source, bin and logs). Super fast cd-ing 🏎. Also, random themes are fun, but I find myself returning to agnoster. Do that by putting the following line in ~/.zshrc:

ZSH_THEME="agnoster"

I recommend checking out plugins which are useful and installing them as well. I use these, but this is really personal preference stuff:

plugins=(
  git
  zsh-autosuggestions
  zsh-syntax-highlighting
  virtualenv
)

After adding the git plugin as well, it’ll end up looking like this:

Happy shell

The Terminal(s)

More terminals == more throughput == more productivity == more happiness. That’s just math. Get tmux, oh-my-tmux, powerline and nerdfonts.

sudo apt install tmux
git clone https://github.com/gpakosz/.tmux.git
ln -s -f .tmux/.tmux.conf
cp .tmux/.tmux.conf.local .

The Text Editor

I could write a whole article on why to use vim. In short, it’s fast and effective. To improve the experience of using vim: get pathogen (vim’s package manager) and nerdtree to browse files quickly. Map <C+n> to open nerdtree.

In the terminal,

mkdir -p ~/.vim/autoload ~/.vim/bundle && curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
git clone https://github.com/preservim/nerdtree.git ~/.vim/bundle/nerdtree

In your ~/.vimrc,

call pathogen#infect()
syntax on
filetype plugin indent on

The Browser

If you need one, get one (I like Chrome). One thing you can’t miss is the extension vimium: it allows you to navigate the web using the keyboard alone.

Thank me later. Now you’ll have the time 😉