#!/usr/bin/env bash

DIR="$(dirname $(realpath "$0"))"
cd "$DIR"

if [[ ! -f /etc/os-release ]]; then
    echo "Could not determine distribution; exiting..."
    exit 1
fi

. /etc/os-release
distro=${NAME,,}

if [[ $distro == "arch linux" ]]; then
    pacman=(
        # services
        "networkmanager" "networkmanager-openvpn"
        "bluez" "bluez-libs"
        "pipewire" "pipewire-alsa" "pipewire-pulse" "pipewire-audio" "pipewire-jack" "wireplumber" "alsa-utils"
        "cups"

        # Hyprland core
        "hyprland" "hypridle" "hyprpaper" "hyprlock" 
        "hyprpolkitagent" "hyprutils" "hyprland-qtutils"
        "xdg-desktop-portal-hyprland" "xdg-desktop-portal-gtk"
        # Hyprland extra
        "qt6ct" "gnome-keyring"
        "waybar" "mako" "wofi" "wl-clipboard" "copyq" "grim" "slurp"
        "adwaita-icon-theme" "adwaita-cursors" "dolphin"
        "network-manager-applet" "blueman"
        "playerctl" "pavucontrol"
        "upower"

        # terminal
        "kitty" "fish" "ranger" "htop" "tmux" "psmisc" "terminus-font"
        
        # misc
        "wget" "curl" "git" "entr" "zip" "base-devel"
        "ninja" "make" "cmake"
        "neofetch" "fastfetch" "fortune-mod" "cowsay"
        "freerdp"
        
        # languages
        "python" "php" "go" "clang"

        # editors
        "nano" "vim" "helix"

        # network drives
        "rclone" "cifs-utils"

        # container
        "podman" "podman-compose" "podman-docker" "distrobox"

        # VMs
        "virtualbox" "virtualbox-host-modules-arch" "linux-headers"

        # fonts
        "adwaita-fonts"
        "ttf-jetbrains-mono" "ttf-jetbrains-mono-nerd"
        "noto-fonts" "noto-fonts-emoji" "noto-fonts-cjk"

        # flatpak
        "flatpak" "libportal"

        # apps
        "keepassxc" "remmina"
    )

    aur=(
        "light"
        "snapd"
        "brave-bin"
    )

    systemd=(
        "NetworkManager"
        "cups"
        "snapd"
        "snapd.apparmor"
        "bluetooth"
    )

    systemd_user=(
        "ssh-agent"
        "rclonesync.service"
        "rclonesync.timer"
    )

    snap_classic=(
        "code"
        "flutter"
        "android-studio"
    )

    flatpak=(
        "org.signal.Signal"
        "com.spotify.Client"
        "net.ankiweb.Anki"
        "org.gimp.GIMP"
        "org.inkscape.Inkscape"
        "org.onlyoffice.desktopeditors"
        "com.github.xournalpp.xournalpp"
        "com.github.flxzt.rnote"
        "net.nokyan.Resources"
        "org.gnome.Loupe"
        "com.github.rafostar.Clapper"
        "org.gnome.Evince"
    )

    # Update system
    sudo pacman -Syu --noconfirm

    # Install pacman packages
    sudo pacman --noconfirm --needed -S "${pacman[@]}"

    # Fix helix command
    sudo ln -s "$(which helix)" /usr/local/bin/hx

    # Install yet another yogurt (AUR helper)
    if ! command -v yay &> /dev/null; then
        git clone https://aur.archlinux.org/yay.git /tmp/yay
        cd /tmp/yay && makepkg -si --noconfirm
        yay -Sy --noconfirm
        cd "$DIR"
    fi

    # Instal AUR packages
    yay --noconfirm --needed -S "${aur[@]}"

    # Install snaps
    sudo systemctl start snapd.socket
    if [[ ! -e /snap ]]; then sudo ln -s /var/lib/snapd/snap /snap; fi
    while ! sudo snap refresh; do sleep 1; done
    for prog in ${snap_classic[@]}; do
        sudo snap install $prog --classic
    done

    # Install flatpaks
    flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
    flatpak install -y "${flatpak[@]}"

    # Set default shell
    sudo chsh -s /usr/bin/fish $USER

    # Add yourself to the corresponding groups
    sudo usermod -aG video $USER
    sudo usermod -aG kvm $USER

    # Configure default applications
    xdg-mime default org.gnome.Loupe.desktop image/png
    xdg-mime default org.gnome.Loupe.desktop image/jpeg
    xdg-mime default org.gnome.Loupe.desktop image/gif
    xdg-mime default org.gnome.Loupe.desktop image/webp
    xdg-mime default com.github.rafostar.Clapper.desktop video/mp4
    xdg-mime default com.github.rafostar.Clapper.desktop video/x-matroska
    xdg-mime default com.github.rafostar.Clapper.desktop video/x-msvideo
    xdg-mime default com.github.rafostar.Clapper.desktop video/quicktime
    xdg-mime default com.github.rafostar.Clapper.desktop video/webm
    xdg-mime default com.github.rafostar.Clapper.desktop video/mpeg
    xdg-mime default org.gnome.Evince.desktop application/pdf

    # Install dotfiles
    echo "[INFO]: installing dotfiles now"
    "$DIR/install"
    echo "[INFO]: finished installing dotfiles"

    # Enable global systemd services
    for item in ${systemd[@]}; do
        sudo systemctl enable $item &> /dev/null
    done

    # Enable user systemd services
    for item in ${systemd_user[@]}; do
        sudo systemctl enable --user $item &> /dev/null
    done

    if [[ ! -e "$HOME/.config/rclone/rclone.conf" ]]; then
    	echo "[WARN]: ~/.config/rclone/rclone.conf missing"
    fi
else
    echo "Unknown distribution '$distro'; exiting..."
    exit 1
fi

# YAY!
echo "-"
echo "-"
echo "Done!"