#!/bin/bash

# Headless
NVIM=true
ZSH=true
PROFILE=true
TMUX=true

# 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 ripgrep npm"
    if [[ $OS == "NAME=\"Arch Linux\"" ]]; then
        $SUDO pacman -Sy --needed --noconfirm "$dependencies" npm go fd
    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 fd-find
    fi

    ln -s "$PWD"/nvim "$XDG_CONFIG_HOME"/nvim
    ln -s "$PWD"/clang/.clang-tidy "$HOME"/.clang-tidy
    nvim --headless "+Lazy! sync" +qa
    nvim --headless "+MasonInstall bash-language-server pyright typescript-language-server rust-analyzer clangd cmake-language-server css-lsp dockerfile-language-server emmet-ls gopls html-lsp jdtls json-lsp ltex-ls lua-language-server ruff-lsp rustfmt rustywind texlab vetur-vls vim-language-server yaml-language-server" +qa

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 || exit
    make install
    ln -s "$XDG_CONFIG_HOME"/zsh/.smartcd_config "$HOME"/.smartcd_config
    cd - || exit
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