So, after some time with Arch Linux, I've moved to Debian testing. Debian testing seems to strike a nice balance between being new and not breaking things (Debian stable on the other hand has really old packages). Compared to Arch, upgrades have thus far been a lot less painful. Arch, while lovely, has a tendency to break things and I was always rather annoyed with python being python3 rather than python2 like the rest of the world expected it to be. I miss the minimal base install from Arch though.

First steps

I used the amd64 (e.g. x86-64) weekly testing build rather than the stable build, because, well it gets me on testing without needing to do a stable install first and comes with more up-to-date packages.

While none of the docs make it clear, all you need is the first CD (or the netinstall build) to start the install.

Edit sudoers

su -c "visudo"

At the end of the file, add:

<code>yourusername ALL=(ALL) NOPASSWD: ALL</code>

Copy ssh keys over from old machine

Update and install packages

Add "contrib" and "non-free" after "main" to /etc/apt/sources.list - this is needed for stuff like the flash plugin.

If there are lines mentioning "cdrom:" as a source, delete or comment out those lines.

sudo apt-get update &amp;&amp; sudo apt-get upgrade

sudo apt-get install git mlocate mercurial nitrogen wicd-gtk \
gnome-icon-theme htop unzip openssl chromium-browser zsh \
xterm epdfview mysql-server ruby tmux curl wget redis-server \
xcursor-themes xarchiver gzip bzip2 zip unzip unrar p7zip \
meld mplayer make gcc libc-dev build-essential openssl \
libssl-dev libx11-dev libxinerama-dev guake xfce4-notifyd \
keychain flashplugin-nonfree lxappearance tree

Install node

mkdir other
cd other
wget http://nodejs.org/dist/v0.8.12/node-v0.8.12.tar.gz
tar xvvf node-v0.8.12.tar.gz
cd node-v0.8.12
./configure &amp;&amp; make &amp;&amp; sudo make install

Install nwm, my window manager

git clone git://github.com/mixu/nwm.git
cd nwm
npm install

Create ~/nwm.sh and chmod +x:

#!/bin/sh
/usr/local/bin/node /home/m/nwm/nwm-user-sample.js 2&gt; ~/nwm.err.log 1&gt; ~/nwm.log

Create /usr/share/xsessions/nwm.desktop:

[Desktop Entry]
Encoding=UTF-8
Name=nwm
Comment=This session starts nwm
Exec=/home/m/nwm.sh
Type=Application

Set the user shell from bash to zsh

sudo chsh

Set the default xdg-open action for PDFs

In case you don't know what xdg-open is - it's the thing that decides what happens when you try to open a file (e.g. a downloaded file from Chrome).

I don't want to open PDFs and PS files in Gimp, I want to open them in a document viewer

xdg-mime default evince.desktop application/pdf

xdg-mime default evince.desktop application/postscript

To query the default app: xdg-mime query default $(xdg-mime query filetype FILENAME)

Configuring appearance

Download https://wiki.ubuntu.com/Artwork/Incoming/DustTheme and unzip the theme to ~/.themes/

I find the easiest way to configure gnome2 is to use lxappearance, since it allows you to set the gnome theme and x11 cursors in a few clicks.

Guake: disable smart terminal names

gconftool-2 --set /apps/guake/general/use_vte_titles --type boolean false

Configure git

Edit ~/.gitconfig:

[color]
ui = true
[user]
email =
name =
[core]
editor = nano
[alias]
lg = log --graph --pretty=format:'%Cred%h%Creset-%C(yellow)%d%Creset %s %Cgreen(%cr)%C(bold blue)%Creset' --abbrev-commit --date=relative
[push]
default = current

Configure zsh

# Lines configured by zsh-newuser-install
HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=9999
unsetopt beep
bindkey -e
# End of lines configured by zsh-newuser-install
# The following lines were added by compinstall
zstyle :compinstall filename '/home/m/.zshrc'

autoload -Uz compinit
compinit
# End of lines added by compinstall

bindkey "\e[1~" beginning-of-line # Home
bindkey "\e[4~" end-of-line # End
bindkey "\e[5~" beginning-of-history # PageUp
bindkey "\e[6~" end-of-history # PageDown
bindkey "\e[2~" quoted-insert # Ins
bindkey "\e[3~" delete-char # Del
bindkey "\e[5C" forward-word
bindkey "\eOc" emacs-forward-word
bindkey "\e[5D" backward-word
bindkey "\eOd" emacs-backward-word
bindkey "\e\e[C" forward-word
bindkey "\e\e[D" backward-word
bindkey "\e[Z" reverse-menu-complete # Shift+Tab
# for rxvt
bindkey "\e[7~" beginning-of-line # Home
bindkey "\e[8~" end-of-line # End
# for non RH/Debian xterm
bindkey "\eOH" beginning-of-line
bindkey "\eOF" end-of-line
# for freebsd console
bindkey "\e[H" beginning-of-line
bindkey "\e[F" end-of-line
# for guake
bindkey "\eOF" end-of-line
bindkey "\eOH" beginning-of-line
bindkey "^[[1;5D" backward-word
bindkey "^[[1;5C" forward-word
bindkey "\e[3~" delete-char # Del

alias ls='ls --color=auto -F'
alias ga='git add'
alias gp='git push'
alias gl='git log'
alias gs='git status'
alias gd='git diff'
alias gdc='git diff --cached'

autoload -U colors &amp;&amp; colors

PROMPT="%{$fg_bold[white]%}[%1~]%{$reset_color%} "

PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting
[[ -s "$HOME/.rvm/scripts/rvm" ]] &amp;&amp; . "$HOME/.rvm/scripts/rvm"

gr() {
   local cmd="$"
   for dir in /home/{FILL IN REPOSITORIES HERE}; do
    (
     print "\nin $dir"
     cd $dir
     eval "$cmd"
    )
   done
}

alias grs="gr git --no-pager status -sb"
alias grl="gr git --no-pager log --decorate --graph --oneline -n 3"
alias grd="gr git diff"
alias grdc="gr git diff --cached"
alias grn="gr npm ls"

eval `keychain --eval --agents ssh id_rsa`

# Stuff for git
parse_git_branch () {
    git branch 2&gt; /dev/null | grep "" | sed -e 's/ (.)/ @\1/g'
}

# colors for prompt
BLACK=$'\033[0m'
RED=$'\033[38;5;167m'
GREEN=$'\033[38;5;71m'
BLUE=$'\033[38;5;111m'
YELLOW=$'\033[38;5;228m'
ORANGE=$'\033[38;5;173m'

function precmd() {
    export PROMPT="%{$fg_bold[white]%}[%1~%{$reset_color%}%{$YELLOW%}$(parse_git_branch)%{$fg_bold[white]%}]%{$BLACK%}%\ "
}