diff --git a/setup b/setup
index cc3414c..647022f 100755
--- a/setup
+++ b/setup
@@ -16,8 +16,8 @@
 # limitations under the License.
 #
 if [ -z "$ZSH_NAME" ] && [ "$(basename -- "$0")" = "setup" ]; then
-	echo The script must be sourced, not executed
-	exit 1
+    echo The script must be sourced, not executed
+    exit 1
 fi
 
 # Check if 'column' command is present
@@ -28,25 +28,25 @@
 fi
 
 machine() {
-	local target=$1
-	local build_dir=$2
-	local cfg name tmpl
-	local configs
+    local target=$1
+    local build_dir=$2
+    local cfg name tmpl
+    local configs
 
-	# zsh requires wordsplit so that variable expansion behaves like bash
-	if [ -n "$ZSH_NAME" ]; then
-		setopt local_options shwordsplit
-	fi
-	if which find > /dev/null 2>&1; then
-		configs=$(find meta-* -path "*/conf/machine/*.conf")
-	else
-		configs=$(ls -1 meta-*/meta-*/conf/machine/*.conf meta-*/conf/machine/*.conf)
-	fi
+    # zsh requires wordsplit so that variable expansion behaves like bash
+    if [ -n "$ZSH_NAME" ]; then
+        setopt local_options shwordsplit
+    fi
+    if which find > /dev/null 2>&1; then
+        configs=$(find meta-* -path "*/conf/machine/*.conf")
+    else
+        configs=$(ls -1 meta-*/meta-*/conf/machine/*.conf meta-*/conf/machine/*.conf)
+    fi
 
-	for cfg in $configs; do
-		name=${cfg##*/}
-		name=${name%.conf}
-		tmpl=${cfg%/machine/*.conf}
+    for cfg in $configs; do
+        name=${cfg##*/}
+        name=${name%.conf}
+        tmpl=${cfg%/machine/*.conf}
 
         # Skip any machines that don't support meta-phosphor.
         if [ ! -e "$tmpl/bblayers.conf.sample" ]; then
@@ -56,40 +56,40 @@
             continue
         fi
 
-		# If a target is specified, then check for a match,
-		# otherwise just list what we've discovered
-		if [ -n "$target" ]; then
-			if [ "${name}" = "${target}" ]; then
-				echo "Machine ${target} found in ${tmpl%/conf}"
-				mkdir -p "${build_dir}"
-				TEMPLATECONF="${tmpl}" source \
-						oe-init-build-env "${build_dir}"
+        # If a target is specified, then check for a match,
+        # otherwise just list what we've discovered
+        if [ -n "$target" ]; then
+            if [ "${name}" = "${target}" ]; then
+                echo "Machine ${target} found in ${tmpl%/conf}"
+                mkdir -p "${build_dir}"
+                TEMPLATECONF="${tmpl}" source \
+                        oe-init-build-env "${build_dir}"
 
-				if [ "$(cat conf/templateconf.cfg)" = "${tmpl}" ]; then
-					sed "s/^\(MACHINE\s*[?:]*\s*=\s*\).*$/\1\"${target}\"/" \
-						-i conf/local.conf
-				fi
-				return
-			fi
+                if [ "$(cat conf/templateconf.cfg)" = "${tmpl}" ]; then
+                    sed "s/^\(MACHINE\s*[?:]*\s*=\s*\).*$/\1\"${target}\"/" \
+                        -i conf/local.conf
+                fi
+                return
+            fi
         else
-			echo "${name}"
-		fi
-	done
+            echo "${name}"
+        fi
+    done
 
-	[ -n "$target" ] && echo "No such machine!" >&2 && return 1
+    [ -n "$target" ] && echo "No such machine!" >&2 && return 1
 }
 
 if [ -z "$1" ]; then
-	echo Target machine must be specified. Use one of:
-	echo
-	(echo qemuarm; machine) | sort | $COLUMN
+    echo Target machine must be specified. Use one of:
+    echo
+    (echo qemuarm; machine) | sort | $COLUMN
 elif [ "$1" = "qemuarm" ]; then
-	source openbmc-env
+    source openbmc-env
 else
-	bld_dir=$2
-	if [ -z "$2" ]; then
-		bld_dir="build/$1"
-	fi
-	machine "$1" "$bld_dir"
+    bld_dir=$2
+    if [ -z "$2" ]; then
+        bld_dir="build/$1"
+    fi
+    machine "$1" "$bld_dir"
 fi
 
