diff --git a/build.sh b/build.sh
index b0f4110e..9ed6e350 100755
--- a/build.sh
+++ b/build.sh
@@ -1,37 +1,88 @@
 #!/usr/bin/env bash
 
 function msg_err {
-  printf "\033[41;30m err \033[0m %s\n" "$@"
+  printf "\033[31;1m** \033[0m%s\n" "$@"
   exit 1
 }
 
 function msg {
-  printf "\033[36;1m info \033[0m%s\n" "$@"
+  printf "\033[32;1m** \033[0m%s\n" "$@"
 }
 
 function main
 {
-  [[ -d ./build ]] && msg_err "A build directory already exists"
   [[ -d ./.git ]] && {
+    msg "Fetching submodules"
     git submodule update --init --recursive || msg_err "Failed to clone submodules"
   }
 
+  [[ -d ./build ]] && {
+    if [[ "$1" == "-f" ]]; then
+      msg "Removing existing build dir (-f)"
+      rm -rf ./build >/dev/null || msg_err "Failed to remove existing build dir"
+    else
+      msg_err "A build dir already exists (pass -f to replace)"
+    fi
+  }
+
   mkdir ./build || msg_err "Failed to create build dir"
   cd ./build || msg_err "Failed to enter build dir"
 
-  cmake -DCMAKE_INSTALL_PREFIX=/usr .. || \
-    msg_err "Failed to generate build... read output to get a hint of what went wrong"
+  local enable_alsa="ON"
+  local enable_i3="ON"
+  local enable_network="ON"
+  local enable_mpd="ON"
 
+  msg "Setting build options"
+
+  read -r -p "$(msg "Enable i3 module ------- [Y/n]: ")" -n 1 p && echo
+  [[ "${p^^}" != "Y" ]] && enable_i3="OFF"
+  read -r -p "$(msg "Enable volume module --- [Y/n]: ")" -n 1 p && echo
+  [[ "${p^^}" != "Y" ]] && enable_alsa="OFF"
+  read -r -p "$(msg "Enable network module -- [Y/n]: ")" -n 1 p && echo
+  [[ "${p^^}" != "Y" ]] && enable_network="OFF"
+  read -r -p "$(msg "Enable mpd module ------ [Y/n]: ")" -n 1 p && echo
+  [[ "${p^^}" != "Y" ]] && enable_mpd="OFF"
+
+  local cxx="c++"
+  local cc="cc"
+
+  if command -v clang++ >/dev/null; then
+    msg "Using compiler: clang++/clang"
+    cxx="clang++"
+    cc="clang"
+  elif command -v g++ >/dev/null; then
+    msg "Using compiler: g++/gcc"
+    cxx="g++"
+    cc="gcc"
+  fi
+
+  msg "Executing cmake command"
+  cmake                                       \
+    -DCMAKE_C_COMPILER="${cc}"                \
+    -DCMAKE_CXX_COMPILER="${cxx}"             \
+    -DENABLE_ALSA:BOOL="${enable_alsa}"       \
+    -DENABLE_I3:BOOL="${enable_i3}"           \
+    -DENABLE_MPD:BOOL="${enable_mpd}"         \
+    -DENABLE_NETWORK:BOOL="${enable_network}" \
+    .. || msg_err "Failed to generate build... read output to get a hint of what went wrong"
+
+  msg "Building project"
   make || msg_err "Failed to build project"
 
-  echo -e "\n"
-
-  read -N1 -p "Do you want to execute \"sudo make install\"? [Y/n] " -r choice
-  echo
-
-  if [[ "${choice^^}" == "Y" ]]; then
+  read -r -p "$(msg "Execute 'sudo make install'? [Y/n] ")" -n 1 p && echo
+  [[ "${p^^}" == "Y" ]] && {
     sudo make install || msg_err "Failed to install executables..."
-  fi
+  }
+
+  read -r -p "$(msg "Install example configuration? [Y/n]: ")" -n 1 p && echo
+  [[ "${p^^}" == "Y" ]] && {
+    make userconfig || msg_err "Failed to install user configuration..."
+  }
+
+  msg "Build complete!"
+
+  exit 0
 }
 
 main "$@"