## Justfile (https://github.com/casey/justfile)
##
## Helps automate various homelab tasks.

set export
distro := `grep -G "\bID\b" /etc/os-release | awk -F= '{print $2}'`
id_like := `grep -G "\bID_LIKE\b" /etc/os-release | awk -F= '{print $2}'`
release := `grep "VERSION_CODENAME" /etc/os-release | awk -F= '{print $2}'`
run_user := env_var("USER")

caddy:
    #!/usr/bin/env bash
    if [ "$distro" == "debian" ]; then
        sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
        curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
        curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
        sudo apt update
        sudo apt install caddy
    elif echo "$id_like" | grep "rhel"; then
        sudo dnf install -y 'dnf-command(copr)'
        sudo dnf copr enable -y @caddy/caddy
        sudo dnf install -y caddy
    elif [ "$distro" == "freebsd" ]; then
        sudo pkg install -y caddy
    fi

thelounge:
    #!/usr/bin/env bash
    if [ "$distro" == "debian" ]; then
        curl -s https://api.github.com/repos/thelounge/thelounge-deb/releases/latest | grep "browser_download_url.*deb" | cut -d : -f 2,3 | tr -d '"' | wget -qi -
        sudo apt install -y ./thelounge*.deb
        rm -fv ./thelounge*.deb
    else
        echo "This justfile only supports The Lounge on Debian systems."
    fi

tailscale:
    curl -fsSL https://tailscale.com/install.sh | sh
    sudo tailscale up

scihub:
    mkdir ~/scihub-torrent-urls
    lynx -dump -nonumbers -listonly=on https://libgen.rs/repository_torrent/ | grep "\.torrent" | tee ~/scihub-torrent-urls/urls.txt
    cd ~/scihub-torrent-urls && split -l 60 ~/scihub-torrent-urls/urls.txt torrent-
    rm -fv ~/scihub-torrent-urls/urls.txt

docker:
    #!/usr/bin/env bash
    if [ "$distro" == "debian" ]; then
        for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt remove $pkg; done
        sudo apt update
        sudo apt install -y ca-certificates curl
        sudo install -m 0755 -d /etc/apt/keyrings
        sudo curl -fsSL https://download.docker.com/linux/{{distro}}/gpg -o /etc/apt/keyrings/docker.asc
        sudo chmod a+r /etc/apt/keyrings/docker.asc
        echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/{{distro}} {{release}} stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
        sudo apt update
        sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose docker-compose-plugin
        sudo systemctl enable --now docker.service
        sudo usermod -aG docker {{run_user}}
    else
        echo "This justfile only supports Docker on Debian systems."
    fi

rustup:
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

neovim:
    sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
        https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'

    mkdir -p "${HOME}/.config/nvim"
    wget https://files.hyperreal.coffee/init.vim -O "${HOME}/.config/nvim/init.vim"

neovim-root:
    sudo sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
        https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'

    sudo mkdir -p /root/.config/nvim
    sudo wget https://files.hyperreal.coffee/init.vim -O /root/.config/nvim/init.vim

install-dust:
    #!/usr/bin/env bash
    set -euo pipefail
    dl_url=$(curl -s "https://api.github.com/repos/bootandy/dust/releases/latest" | jq '.assets | .[].browser_download_url' | grep "x86_64-unknown-linux-gnu.tar.gz" | tr -d '"')
    wget "$dl_url"
    filename=$(basename -s .tar.gz dust*)
    tar xvf "${filename}.tar.gz"
    sudo cp -v "${filename}/dust" /usr/local/bin/
    sudo chown root:root /usr/local/bin/dust
    rm -rf "$filename" "${filename}.tar.gz"

install-fzf:
    #!/usr/bin/env bash
    set -euo pipefail
    curl -s https://api.github.com/repos/junegunn/fzf/releases/latest | grep "browser_download_url" | grep "linux_$(dpkg --print-architecture)" | cut -d : -f 2,3 | tr -d '"' | wget -qi -
    curl -s https://api.github.com/repos/junegunn/fzf/releases/latest | grep "browser_download_url" | grep "checksums.txt" | cut -d : -f 2,3 | tr -d '"' | wget -qi -
    if [ $(grep "linux_$(dpkg --print-architecture)" *checksums.txt | sha256sum -c | awk '{print $2}') = "OK" ]; then
        tar xvf fzf*.tar.gz
        sudo mv fzf /usr/bin/fzf
    fi
    rm -v fzf*.txt fzf*.tar.gz