#!/usr/bin/env bash # Installs user preferences the way I like it # (sourceable) function install-preferences { # Configuration function prompt { # text while true; do read -p "$1 [yn] " yn case $yn in [Yy]* ) return 1;; [Nn]* ) return 0;; * ) echo "Please answer yes or no.";; esac done } # Don't ask for things that are already there local TERMUX=0 if [ -d /data/data/com.termux/files ]; then local TERMUX=1 local GUI=0 fi if which i3 &> /dev/null; then local GUI=1 fi if [ -z $ADMIN ]; then prompt "Are you a superuser on this machine?" local ADMIN=$? fi if [ -z $GUI ]; then prompt "Do you want a X environment on this machine?" local GUI=$? fi if [ -z $EXTRA ]; then prompt "Do you want not-so-needed software on this machine?" local EXTRA=$? fi # TODO Verify if the package exists before installing it # System detection if which pacman &> /dev/null; then ARCH=1 if [ $ADMIN == 1 ]; then sudo pacman -Sy function installOne { # package pacman -Q $1 &> /dev/null if [ $? == 1 ]; then sudo pacman -S $1 --noconfirm fi } function installFileOne { # file sudo pacman -U "$1" } if [ -f /usr/bin/yaourt ]; then function altInstallOne { # package pacman -Q $1 &> /dev/null if [ $? == 1 ]; then yaourt -S "$1" --noconfirm fi } else # Install package from PKGBUILD file function installPKGBUILD { # url TMP_DIR="$(mktemp -d /tmp/pkgbuild.XXXXXXXXXX)" cd "$TMP_DIR" wget "$1" -O PKGBUILD makepkg -si cd - rm -rf "$TMP_DIR" } function altInstallOne { # package pacman -Q $1 &> /dev/null if [ $? == 1 ]; then installPKGBUILD "https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=$1" fi } fi else echo "You're on a Arch System but it's not yours? Did Arch got that popular?" return 42 fi elif which dpkg &> /dev/null; then DEBIAN=1 if [[ $ADMIN == 1 || $TERMUX == 1 ]]; then if [ $TERMUX == 1 ]; then DEBIAN=0 apt update -y else sudo apt-get update -y fi function installOne { # package # Finding out if it's already installed or not STATUS=$(mktemp) LANG=C dpkg-query --status $1 &> $STATUS local installed=0 if [ $? == 0 ]; then cat $STATUS | grep '^Status:' | grep ' installed' --quiet if [ $? == 0 ]; then installed=1 fi fi rm -f $STATUS > /dev/null echo 101 $1 $installed # Installing if it's not installed if [ $installed == 0 ]; then # TODO noconfirm if [ $TERMUX == 1 ]; then apt install $1 -y else sudo apt-get install $1 -y fi fi } function installFileOne { # file dpkg -i "$1" } else function installOne { # package debloc-install $1 } function installFileOne { # file debloc-deb "$1" } fi function altInstallOne { echo "[ERROR] There's no alternate installer for this distribution. Can't install $1." } else echo "Uuuh, what kind of distribution is this?" return 1 fi # Install package with the standard # package manager for the distribution function inst { for pkg in $*; do installOne $pkg done } # Install package FILE with the standard # package manager for the distribution function instFile { for pkg in $*; do installFileOne $pkg done } # Install package with the alternate # package manager for the distribution function altInst { for pkg in $*; do altInstallOne $pkg done } # Common CLI # Utils inst grep sed sh tar if [ $TERMUX == 1 ]; then inst coreutils man termux-api openssl-tool if [ $ADMIN == 1 ]; then inst tsu fi fi inst moreutils screen ncdu lsof htop proxytunnel pv curl wget sshfs netcat mosh if [ $ARCH == 1 ]; then inst gopass else inst pass fi if [[ $ARCH == 1 && $ADMIN == 1 ]]; then inst pkgfile systemctl enable pkgfile-update.timer fi # Dev if [ $DEBIAN == 1 ]; then inst build-essential elif [ $ARCH == 1 ]; then inst base-devel else inst make fi inst git cmake clang llvm # Text editor if [ $TERMUX == 1 ]; then inst vim-python elif [ $DEBIAN == 1 ]; then inst vim-youcompleteme ln -s $DEBLOC_ROOT/usr/bin/vim{.nox,} else inst vim fi if [ $DEBIAN == 1 ]; then inst exuberant-ctags else inst ctags fi git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim vim +PluginInstall +qall # YouCompleteMe (vim plugin) if [ $DEBIAN != 1 ]; then if [ $DEBIAN == 1 || $TERMUX == 1 ]; then inst python-dev python3-dev fi local YCM_ARGS="" if [ $TERMUX == 0 ]; then YCM_ARGS="$YCM_ARGS --clang-completer --tern-completer" fi python $HOME/.vim/bundle/YouCompleteMe/install.py $YCM_ARGS fi # Common GUI if [ $GUI == 1 ]; then # Desktop manager inst i3 i3lock i3status dunst unclutter xautolock feh numlockx scrot if [ $DEBIAN == 1 ]; then inst suckless-tools if [ $ADMIN == 0 ]; then ln -s $DEBLOC_ROOT/usr/bin/dmenu{.xft,} fi else inst dmenu fi if [ "$(source /etc/os-release; echo $NAME)" == "Manjaro Linux" ]; then inst menda-themes menda-circle-icon-theme xcursor-menda fi # qutebrowser if [ $DEBIAN == 1 ]; then inst python3-lxml python-tox python3-pyqt5 python3-pyqt5.qtwebkit python3-pyqt5.qtquick python3-sip python3-jinja2 python3-pygments python3-yaml TMP_DIR=$(mktemp -d) $(cd $TMP_DIR; wget https://qutebrowser.org/python3-pypeg2_2.15.2-1_all.deb) $(cd $TMP_DIR; wget https://github.com/qutebrowser/qutebrowser/releases/download/v0.9.1/qutebrowser_0.9.1-2_all.deb) instFile $TMP_DIR/*.deb rm -rf $TMP_DIR elif [ $ARCH == 1 ]; then altInst qutebrowser fi # Screen filter if [ $ARCH == 1 ]; then altInst sct elif [ $DEBIAN == 1 ]; then if [ ! -f $DEBLOC_ROOT/usr/bin/sct ]; then TMP=$(mktemp) wget http://www.tedunangst.com/flak/files/sct.c -O $TMP cc -std=c99 -O2 -I /usr/X11R6/include -o $DEBLOC_ROOT/usr/bin/sct $TMP -L /usr/X11R6/lib -lm -lX11 -lXrandr fi if [ $DEBIAN == 1 ]; then inst vim-gtk else inst gvim fi fi if [ $EXTRA == 1 ]; then # Extra CLI inst sl ffmpeg youtube-dl if [ $ARCH == 1 ]; then altInst pdftk fi # Extra GUI if [ $GUI == 1 ]; then inst vlc gimp mpd vimpc if [ $ARCH == 1 ]; then inst simplescreenrecorder fi fi fi }