diff --git a/install.sh b/install.sh
new file mode 100755
index 0000000..856a485
--- /dev/null
+++ b/install.sh
@@ -0,0 +1,149 @@
+#!/bin/bash
+
+# Headless
+NVIM=true
+ZSH=true
+PROFILE=true
+TMUX=true
+
+# GUI
+AWESOME=false
+ALACRITTY=false
+MPV=false
+
+
+#################################################
+# Basic Preparation                             #
+#################################################
+OS=$(grep -E '^(NAME)=' /etc/os-release )
+
+if [[ -z "${XDG_CONFIG_HOME}" ]]; then
+    mkdir -p $HOME/.config
+    XDG_CONFIG_HOME=$HOME/.config
+fi
+
+if [[ -z "${XDG_DATA_HOME}" ]]; then
+    mkdir -p $HOME/.local/share
+    XDG_DATA_HOME=$HOME/.local/share
+fi
+
+#################################################
+# Neovim                                        #
+#################################################
+
+if $NVIM; then
+    dependencies="neovim git npm unzip fzf cmake gcc make curl wget"
+    if [[ $OS == "NAME=\"Arch Linux\"" ]]; then
+        pacman -Sy --noconfirm $dependencies
+    elif [[ $OS == "NAME=\"Ubuntu\"" ]]; then
+        apt update
+        apt install -y software-properties-common
+        add-apt-repository ppa:neovim-ppa/unstable -y
+        apt update
+        apt install -y $dependencies
+    fi
+
+    ln -s $PWD/nvim $XDG_CONFIG_HOME/nvim
+    ln -s $PWD/clang/.clang-tidy $HOME/.clang-tidy
+    git clone --depth 1 https://github.com/wbthomason/packer.nvim $XDG_DATA_HOME/nvim/site/pack/packer/start/packer.nvim
+    nvim --headless -c 'autocmd User PackerComplete quitall' -c 'PackerSync'
+fi
+
+#################################################
+# ZSH                                           #
+#################################################
+if $ZSH; then
+    PROFILE=true
+    dependencies="fzf zsh curl"
+    if [[ $OS == "NAME=\"Arch Linux\"" ]]; then
+        pacman -Sy --noconfirm $dependencies
+        echo "Please manually install yay and autojump-rs"
+    elif [[ $OS == "NAME=\"Ubuntu\"" ]]; then
+        apt update
+        apt install -y $dependencies autojump
+    fi
+
+    ln -s $PWD/zsh $XDG_CONFIG_HOME/zsh
+    ln -s $PWD/zsh/.zshrc $HOME/.zshrc
+    mkdir -p $HOME/.local/state/zsh/
+
+    curl -L http://smartcd.org/install | bash
+fi
+
+#################################################
+# Profile                                       #
+#################################################
+if $PROFILE; then
+    rm -rf $HOME/.profile && ln -s $PWD/profile/.profile $HOME/.profile
+fi
+
+#################################################
+# Awesome                                       #
+#################################################
+
+if $AWESOME; then
+    dependencies="awesome picom xbindkeys numlockx xcape"
+    if [[ $OS == "NAME=\"Arch Linux\"" ]]; then
+        pacman -Sy --noconfirm $dependencies network-manager-applet
+    elif [[ $OS == "NAME=\"Ubuntu\"" ]]; then
+        apt update
+        apt install -y $dependencies awesome-extra
+    fi
+
+    ln -s $PWD/awesome $XDG_CONFIG_HOME/awesome
+    ln -s $PWD/picom/picom.conf $XDG_CONFIG_HOME/picom.conf
+    ln -s $PWD/picom/picom.conf $XDG_CONFIG_HOME/picom.conf
+fi
+
+#################################################
+# Alacritty                                     #
+#################################################
+
+if $ALACRITTY; then
+    dependencies="alacritty"
+    if [[ $OS == "NAME=\"Arch Linux\"" ]]; then
+        pacman -Sy --noconfirm $dependencies
+    elif [[ $OS == "NAME=\"Ubuntu\"" ]]; then
+        apt update
+        apt install -y software-properties-common
+        add-apt-repository ppa:aslatter/ppa -y
+        apt update
+        apt install -y $dependencies
+    fi
+
+    ln -s $PWD/alacritty $XDG_CONFIG_HOME/alacritty
+fi
+
+#################################################
+# MPV                                           #
+#################################################
+
+if $MPV; then
+    dependencies="mpv"
+    if [[ $OS == "NAME=\"Arch Linux\"" ]]; then
+        pacman -Sy --noconfirm $dependencies
+    elif [[ $OS == "NAME=\"Ubuntu\"" ]]; then
+        apt update
+        apt install -y $dependencies
+    fi
+
+    ln -s $PWD/mpv $XDG_CONFIG_HOME/mpv
+fi
+
+#################################################
+# Tmux                                          #
+#################################################
+
+if $TMUX; then
+    dependencies="tmux git zsh xdg-utils"
+    if [[ $OS == "NAME=\"Arch Linux\"" ]]; then
+        pacman -Sy --noconfirm $dependencies
+    elif [[ $OS == "NAME=\"Ubuntu\"" ]]; then
+        apt update
+        apt install -y $dependencies
+    fi
+
+    ln -s $PWD/tmux/.tmux.conf $HOME/.tmux.conf
+    git clone https://github.com/tmux-plugins/tpm $HOME/.tmux/plugins/tpm
+    $HOME/.tmux/plugins/tpm/bin/install_plugins
+fi