#!/bin/bash

# Headless
NVIM=false
ZSH=false
PROFILE=false
TMUX=false

# GUI
AWESOME=false
ALACRITTY=false
MPV=false

SUDO="sudo"

if [[ $(whoami) == "root" ]]; then
    SUDO=""
fi

#################################################
# 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 unzip fzf cmake gcc make curl wget"
    if [[ $OS == "NAME=\"Arch Linux\"" ]]; then
        $SUDO pacman -Sy --needed --noconfirm $dependencies npm go
    elif [[ $OS == "NAME=\"Ubuntu\"" ]]; then
        $SUDO apt update
        $SUDO apt install -y software-properties-common
        $SUDO add-apt-repository ppa:neovim-ppa/unstable -y
        $SUDO curl -sL https://deb.nodesource.com/setup_21.x | $SUDO bash -
        $SUDO apt update
        $SUDO apt install -y $dependencies python3-venv nodejs golang
    fi

    ln -s $PWD/nvim $XDG_CONFIG_HOME/nvim
    ln -s $PWD/clang/.clang-tidy $HOME/.clang-tidy
fi

#################################################
# ZSH                                           #
#################################################
if $ZSH; then
    PROFILE=true
    dependencies="fzf zsh curl zoxide"
    if [[ $OS == "NAME=\"Arch Linux\"" ]]; then
        $SUDO pacman -Sy --needed --noconfirm $dependencies zsh-autosuggestions
        echo "Please manually install yay"
    elif [[ $OS == "NAME=\"Ubuntu\"" ]]; then
        $SUDO apt update
        $SUDO apt install -y $dependencies
    fi

    ln -s $PWD/zsh $XDG_CONFIG_HOME/zsh
    ln -s $PWD/zsh/.zshrc $HOME/.zshrc
    mkdir -p $HOME/.local/state/zsh/

    git clone https://github.com/cxreg/smartcd.git /tmp/smartcd
    cd /tmp/smartcd
    make install
    ln -s $XDG_CONFIG_HOME/zsh/.smartcd_config $HOME/.smartcd_config
    cd -
fi

#################################################
# Profile                                       #
#################################################
if $PROFILE; then
    rm -rf $HOME/.profile && ln -s $PWD/profile/.profile $HOME/.profile
fi

#################################################
# Awesome                                       #
#################################################

if $AWESOME; then
    dependencies="awesome picom numlockx xcape rofi"
    if [[ $OS == "NAME=\"Arch Linux\"" ]]; then
        $SUDO pacman -Sy --needed --noconfirm $dependencies network-manager-applet xorg-xmodmap adobe-source-code-pro-fonts noto-fonts ttf-nerd-fonts-symbols
    elif [[ $OS == "NAME=\"Ubuntu\"" ]]; then
        $SUDO apt update
        $SUDO 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/xmodmap/.Xmodmap $XDG_CONFIG_HOME/.Xmodmap
    ln -s $PWD/rofi $XDG_CONFIG_HOME/rofi
fi

#################################################
# Alacritty                                     #
#################################################

if $ALACRITTY; then
    dependencies="alacritty"
    if [[ $OS == "NAME=\"Arch Linux\"" ]]; then
        $SUDO pacman -Sy --needed --noconfirm $dependencies
    elif [[ $OS == "NAME=\"Ubuntu\"" ]]; then
        $SUDO apt update
        $SUDO apt install -y software-properties-common
        $SUDO add-apt-repository ppa:aslatter/ppa -y
        $SUDO apt update
        $SUDO 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
        $SUDO pacman -Sy --needed --noconfirm $dependencies
    elif [[ $OS == "NAME=\"Ubuntu\"" ]]; then
        $SUDO apt update
        $SUDO 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
        $SUDO pacman -Sy --needed --noconfirm $dependencies

        ln -s $PWD/tmux $XDG_CONFIG_HOME/tmux
        git clone https://github.com/tmux-plugins/tpm $XDG_DATA_HOME/tmux/plugins/tpm
        $XDG_DATA_HOME/tmux/plugins/tpm/bin/install_plugins
    elif [[ $OS == "NAME=\"Ubuntu\"" ]]; then
        $SUDO apt update
        $SUDO apt install -y $dependencies

        ln -s $PWD/tmux $HOME/.tmux
        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
fi
