From 4f137bd19a682833bb1a6903c0ae87ba1e8aaf02 Mon Sep 17 00:00:00 2001 From: Carl Kittelberger Date: Sat, 17 Feb 2018 20:12:09 +0100 Subject: [PATCH] Add package installation script. --- packages/os.sh | 92 ++++++++++++++++++++++++++++++++ packages/packages.sh | 121 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 213 insertions(+) create mode 100644 packages/os.sh create mode 100755 packages/packages.sh diff --git a/packages/os.sh b/packages/os.sh new file mode 100644 index 0000000..8e2a8f2 --- /dev/null +++ b/packages/os.sh @@ -0,0 +1,92 @@ +#!/bin/sh -e + +tag_file="$(mktemp)" +trap 'rm "${tag_file}"' EXIT + +add_tag() { + for tag in "$@"; do + if ! has_tags "$tag"; then + echo "Adding detected tag: $tag" + echo "${tag}" >> "${tag_file}" + fi + done +} + +has_tags() { + for req in "$@"; do + printf "Checking for tag: $req... " + local detected=0 + while IFS= read -r line; do + if [ "$line" = "$req" ]; then + echo "yes" + detected=1 + break + fi + done < "$tag_file" + if [ "$detected" -eq 0 ]; then + echo "no" + return 1 + fi + done + return 0 +} + +has_binary() { + printf "Checking for binary: $1... " + if ! command -v "$1" >/dev/null 2>&1; then + echo "no" + return 1 + fi + echo "yes" + return 0 +} + +# arch linux + +if [ -f /etc/arch-release ]; then + add_tag os:arch + add_tag os_like:archlinux +fi + +# os-release + +if [ -f /etc/os-release ]; then + ( + source /etc/os-release + add_tag "os:${ID}" + if [ ! -z "${ID_LIKE}" ]; then + add_tag "os_like:${ID_LIKE}" + fi + if [ ! -z "${VERSION_ID}" ]; then + add_tag "version:${VERSION_ID}" + fi + if [ ! -z "${VERSION_CODENAME}" ]; then + add_tag "version:${VERSION_CODENAME}" + fi + if [ ! -z "${UBUNTU_CODENAME}" ]; then + add_tag "version:${UBUNTU_CODENAME}" + fi + ) +fi + +# package manager detection + +for pm in \ + pacaur \ + pacman \ + pip \ + npm \ + yaourt \ + yarn \ + yay \ + ; do + if has_binary "$pm"; then + add_tag "pm:$pm" + fi +done + +# graphics UI detection +# basically just checks if an X server is running on the machine and if yes, we just assume it's a desktop, not a server +if ps aux | grep Xorg >/dev/null 2>&1; then + add_tag "xorg_running" "desktop" +fi diff --git a/packages/packages.sh b/packages/packages.sh new file mode 100755 index 0000000..3808904 --- /dev/null +++ b/packages/packages.sh @@ -0,0 +1,121 @@ +#!/bin/sh + +source ./os.sh + +apt_install() { + DEBIAN_FRONTEND="noninteractive" apt-get install -y "$@" +} + +pacman_install() { + sudo pacman -S --noconfirm --needed "$@" +} + +yay_install() { + yay -S --noconfirm --needed "$@" +} + +pacaur_install() { + pacaur -S --noconfirm --needed "$@" +} + +yaourt_install() { + yaourt -S --noconfirm --needed "$@" +} + +pip3_install() { + pip3 install --user -U "$@" +} + +### + +# Actual package installation code from here + +# Arch Linux + +if has_tags pm:pacman; then + # libarchive for bsdtar + pacman_install \ + makepkg \ + base-devel \ + libarchive \ + tar \ + gzip \ + xz + + # yay + if ! has_tags pm:yay; then + if has_tags pacaur; then + pacaur_install yay + elif has_tags yaourt; then + yaourt_install yay + else + ( + dir="$(mktemp -d)" + cd "${dir}" + wget https://aur.archlinux.org/cgit/aur.git/snapshot/yay.tar.gz -O- | tar -xz --strip=1 + makepkg -sri --noconfirm + cd + rm -rf "${dir}" + ) + fi + add_tag pm:yay + fi + + # from here on we should have yay available + yay_install \ + zsh \ + zsh-syntax-highlighting + + if has_tags desktop; then + yay_install \ + powerline-fonts \ + rxvt-unicode-better-wheel-scrolling-unicode3 \ + ttf-fantasque-sans-mono \ + rxvt-unicode \ + urxvt-tabbedex \ + ibus + else + yay_install \ + rxvt-unicode-terminfo + fi + + # pip + if ! has_tags pm:pip3; then + yay_install python-pip + add_tag pm:pip3 + fi +fi + +# Debian/Ubuntu-ish + +if has_tags pm:apt; then + sudo apt update + apt_install \ + bsdtar \ + tar \ + gzip \ + xz-utils \ + python-pip \ + zsh \ + zsh-syntax-highlighting \ + ibus + add_tag pm:pip3 +fi + +# Python3 + +if has_tags pm:pip3; then + pip3_install powerline-status +fi + +# change default terminal to urxvt + +if has_tags desktop; then + if has_tags os_like:debian; then + sudo update-alternatives --config urxvt + fi + for de in gnome cinnamon; do + gsettings set org.${de}.desktop.default-applications.terminal exec /usr/bin/urxvt + gsettings set org.${de}.desktop.default-applications.terminal exec-arg "-x" + done +fi