diff --git a/.gitignore b/.gitignore
index 05aa345..07eefe1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,5 +2,6 @@ filesystem.cpio.gz
 linux-system.axf
 uImage
 model.lds
+config.mk
 *.o
 *.swp
diff --git a/Makefile b/Makefile
index e1635ea..54cdbf5 100644
--- a/Makefile
+++ b/Makefile
@@ -5,47 +5,21 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE.txt file.
 
-CPPFLAGS	+= -DSMP
-#CPPFLAGS	+= -DTHUMB2_KERNEL
-CPPFLAGS	+= -march=armv7-a
-CPPFLAGS	+= -DVEXPRESS
-
-# Turn this on to use an initrd whose contents are in filesystem.cpio.gz
-USE_INITRD = no
-ifeq ($(USE_INITRD),yes)
-CPPFLAGS	+= -DUSE_INITRD
-FILESYSTEM	= filesystem.cpio.gz
+
+# Include config file (prefer config.mk, fall back to config-default.mk)
+ifneq ($(wildcard config.mk),)
+include config.mk
 else
-FILESYSTEM =
+include config-default.mk
 endif
 
-# MPS (Cortex-M3) definitions
-#CPPFLAGS	+= -DMACH_MPS -DTHUMB2_KERNEL
-#CPPFLAGS	+= -march=armv7-m
-#CPPFLAGS	+= -mthumb -Wa,-mthumb -Wa,-mimplicit-it=always
-
-# Kernel command line
-# MPS:
-# KCMD = "rdinit=/bin/sh console=ttyAMA3 mem=4M earlyprintk"
-# not-vexpress (ie EB, RealviewPB, etc), with initrd
-# KCMD = "console=ttyAMA0 mem=256M earlyprintk"
-# not-vexpress, without initrd:
-# KCMD = "root=/dev/nfs nfsroot=10.1.77.43:/work/debootstrap/arm ip=dhcp console=ttyAMA0 mem=256M earlyprintk"
-# Vexpress, with initrd:
-# KCMD = "console=ttyAMA0 mem=512M mem=512M@0x880000000 earlyprintk ip=192.168.27.200::192.168.27.1:255.255.255.0:angstrom:eth0:off"
-# VExpress, without initrd:
-KCMD ?= "console=ttyAMA0 mem=512M mem=512M@0x880000000 earlyprintk root=/dev/nfs nfsroot=172.31.252.250:/srv/arm-oneiric-root,tcp rw ip=dhcp nfsrootdebug"
-
 MONITOR		= monitor.S
 BOOTLOADER	= boot.S
-KERNEL_SRC	= ../linux-kvm-arm
 KERNEL		= uImage
 
 IMAGE		= linux-system.axf
 LD_SCRIPT	= model.lds.S
 
-CROSS_COMPILE	?= arm-unknown-eabi-
-ARCH		?= arm
 
 CC		= $(CROSS_COMPILE)gcc
 LD		= $(CROSS_COMPILE)ld
@@ -85,4 +59,4 @@ force: ;
 
 Makefile: ;
 
-.PHONY: all clean
+.PHONY: all clean config.mk config-default.mk
diff --git a/config-default.mk b/config-default.mk
new file mode 100644
index 0000000..c465634
--- /dev/null
+++ b/config-default.mk
@@ -0,0 +1,89 @@
+# Configuration file included in Makefile
+#
+# Copyright (C) 2011 Columbia University. All rights reserved.
+# 		     Christoffer Dall <cdall@cs.columbia.edu>
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE.txt file.
+#
+# This is a sample configuration file. To make changes, copy this file to
+# config.mk and modify that file.
+#
+# For all systems you can override USE_INITRD and KCMD from the command-line.
+#
+
+###########################################################################
+# Main options
+#
+CROSS_COMPILE	?= arm-unknown-eabi-
+ARCH		?= arm
+KERNEL_SRC	?= ../linux-kvm-arm
+
+# Select system:
+# mps:		MPS (Cortex-M3)
+# realview_eb:	RealViewPB, EB, etc.
+# vexpress:	Versatile Express
+SYSTEM ?= vexpress
+
+###########################################################################
+# Turn this on to use an initrd whose contents are in filesystem.cpio.gz
+USE_INITRD ?= no
+ifeq ($(USE_INITRD),yes)
+CPPFLAGS	+= -DUSE_INITRD
+FILESYSTEM	?= filesystem.cpio.gz
+else
+FILESYSTEM =
+endif
+
+###########################################################################
+# Default NFS root
+NFS_ROOT	?= /srv/nfsroot
+ifeq ($(origin NFS_SERVER), undefined)
+NFS_SERVER	:= $(shell ip addr show scope global | \
+		   sed -ne '/inet/{s/ *inet \([^/]*\)\/.*/\1/p;q}')
+endif
+
+
+###########################################################################
+# MPS (Cortex-M3) definitions
+#
+ifeq ($(SYSTEM),mps)
+# C-flags
+CPPFLAGS	+= -DMACH_MPS -DTHUMB2_KERNEL
+CPPFLAGS	+= -march=armv7-m
+CPPFLAGS	+= -mthumb -Wa,-mthumb -Wa,-mimplicit-it=always
+
+# Kernel command line
+KCMD ?= "rdinit=/bin/sh console=ttyAMA3 mem=4M earlyprintk"
+endif
+
+
+###########################################################################
+# EB, RealviewPB, etc
+#
+ifeq ($(SYSTEM),realview_eb)
+# Default kernel command line, using initrd:
+ifeq ($(USE_INITRD),yes)
+KCMD ?= "console=ttyAMA0 mem=256M earlyprintk"
+endif
+#
+# Default kernel command line, without initrd:
+ifneq ($(USE_INITRD),yes)
+	KCMD ?= "root=/dev/nfs nfsroot=$(NFS_HOST):$(NFS_ROOT) ip=dhcp console=ttyAMA0 mem=256M earlyprintk"
+endif
+endif
+
+
+###########################################################################
+# Versatile Express
+#
+ifeq ($(SYSTEM),vexpress)
+# Default kernel command line, using initrd:
+ifeq ($(USE_INITRD),yes)
+KCMD ?= "console=ttyAMA0 mem=512M mem=512M@0x880000000 earlyprintk ip=dhcp"
+endif
+#
+# Default kernel command line, without initrd:
+ifneq ($(USE_INITRD),yes)
+	KCMD ?= "console=ttyAMA0 mem=512M mem=512M@0x880000000 earlyprintk root=/dev/nfs nfsroot=$(NFS_SERVER):$(NFS_ROOT),tcp rw ip=dhcp nfsrootdebug"
+endif
+endif
diff --git a/get_ip.sh b/get_ip.sh
new file mode 100755
index 0000000..2ef9eac
--- /dev/null
+++ b/get_ip.sh
@@ -0,0 +1,7 @@
+#/bin/bash
+
+ifconfig | \
+	grep 'inet addr:'| \
+	grep -v '127.0.0.1' | \
+	cut -d: -f2 | \
+	awk '{ print $1}'
