2017-02-12 11:41:03 +01:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
# Installs user preferences the way I like it
|
|
|
|
|
|
|
|
# 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
|
2017-03-27 10:03:44 +02:00
|
|
|
TERMUX=0
|
2017-02-12 11:41:03 +01:00
|
|
|
if [ -d /data/data/com.termux/files ]; then
|
2017-03-27 10:03:44 +02:00
|
|
|
TERMUX=1
|
|
|
|
GUI=0
|
2017-02-12 11:41:03 +01:00
|
|
|
fi
|
|
|
|
|
|
|
|
if which i3 &> /dev/null; then
|
2017-03-27 10:03:44 +02:00
|
|
|
GUI=1
|
2017-02-12 11:41:03 +01:00
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -z $ADMIN ]; then
|
|
|
|
prompt "Are you a superuser on this machine?"
|
2017-03-27 10:03:44 +02:00
|
|
|
ADMIN=$?
|
2017-02-12 11:41:03 +01:00
|
|
|
fi
|
|
|
|
if [ -z $GUI ]; then
|
|
|
|
prompt "Do you want a X environment on this machine?"
|
2017-03-27 10:03:44 +02:00
|
|
|
GUI=$?
|
2017-02-12 11:41:03 +01:00
|
|
|
fi
|
|
|
|
if [ -z $EXTRA ]; then
|
|
|
|
prompt "Do you want not-so-needed software on this machine?"
|
2017-03-27 10:03:44 +02:00
|
|
|
EXTRA=$?
|
2017-02-12 11:41:03 +01:00
|
|
|
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
|
2017-07-26 04:34:10 +02:00
|
|
|
sudo pacman -S $1 --noconfirm --needed
|
2017-02-12 11:41:03 +01:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
function installFileOne { # file
|
|
|
|
sudo pacman -U "$1"
|
|
|
|
}
|
2017-11-02 16:48:43 +01:00
|
|
|
if which pacaur &> /dev/null; then
|
|
|
|
function altInstallOne { # package
|
|
|
|
pacman -Q $1 &> /dev/null
|
|
|
|
if [ $? == 1 ]; then
|
|
|
|
pacaur -S "$1" --noconfirm --noedit
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
elif which yaourt &> /dev/null; then
|
2017-02-12 11:41:03 +01:00
|
|
|
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
|
2017-03-27 10:03:44 +02:00
|
|
|
installed=0
|
2017-02-12 11:41:03 +01:00
|
|
|
if [ $? == 0 ]; then
|
|
|
|
cat $STATUS | grep '^Status:' | grep ' installed' --quiet
|
|
|
|
if [ $? == 0 ]; then
|
|
|
|
installed=1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
rm -f $STATUS > /dev/null
|
|
|
|
|
|
|
|
# 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
|
2017-02-12 13:29:03 +01:00
|
|
|
debloc install $1
|
2017-02-12 11:41:03 +01:00
|
|
|
}
|
|
|
|
function installFileOne { # file
|
2017-02-12 13:29:03 +01:00
|
|
|
debloc deb "$1"
|
2017-02-12 11:41:03 +01:00
|
|
|
}
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2018-03-19 07:29:56 +01:00
|
|
|
function systemdUserUnit {
|
2018-04-10 15:38:18 +02:00
|
|
|
systemctl enable "$1"
|
|
|
|
systemctl start "$1"
|
2018-03-19 07:29:56 +01:00
|
|
|
}
|
2017-02-12 11:41:03 +01:00
|
|
|
|
|
|
|
# Common CLI
|
|
|
|
|
2017-06-27 09:19:26 +02:00
|
|
|
.Xresources.d/configure
|
|
|
|
|
2017-02-12 11:41:03 +01:00
|
|
|
# Utils
|
2017-02-12 15:14:51 +01:00
|
|
|
inst coreutils man openssl-tool grep sed sh tar
|
2017-02-12 11:41:03 +01:00
|
|
|
if [ $TERMUX == 1 ]; then
|
2017-02-12 15:14:51 +01:00
|
|
|
inst termux-api
|
2017-02-12 11:41:03 +01:00
|
|
|
if [ $ADMIN == 1 ]; then
|
|
|
|
inst tsu
|
|
|
|
fi
|
|
|
|
fi
|
2017-11-26 08:53:39 +01:00
|
|
|
inst moreutils screen ncdu lsof htop proxytunnel pv curl wget sshfs netcat mosh bash-completion rsync pwgen
|
2017-02-12 11:41:03 +01:00
|
|
|
if [ $ARCH == 1 ]; then
|
2017-11-02 16:48:43 +01:00
|
|
|
inst bash-completion
|
|
|
|
altInst gopass
|
2017-02-12 11:41:03 +01:00
|
|
|
else
|
|
|
|
inst pass
|
2017-09-17 18:42:53 +02:00
|
|
|
wget -qO ~/.bin/ https://raw.githubusercontent.com/pepa65/tldr-bash-client/master/tldr
|
|
|
|
chmod +x ~/.bin/tldr
|
2017-02-12 11:41:03 +01:00
|
|
|
fi
|
2017-09-17 18:42:53 +02:00
|
|
|
tldr -u
|
2017-02-12 11:41:03 +01:00
|
|
|
if [[ $ARCH == 1 && $ADMIN == 1 ]]; then
|
|
|
|
inst pkgfile
|
2017-07-10 06:53:24 +02:00
|
|
|
sudo systemctl enable pkgfile-update.timer
|
2017-02-12 11:41:03 +01:00
|
|
|
fi
|
|
|
|
|
|
|
|
# Dev
|
|
|
|
if [ $DEBIAN == 1 ]; then
|
|
|
|
inst build-essential
|
|
|
|
elif [ $ARCH == 1 ]; then
|
|
|
|
inst base-devel
|
|
|
|
else
|
|
|
|
inst make
|
|
|
|
fi
|
2017-02-12 13:29:03 +01:00
|
|
|
inst git
|
2017-02-12 11:41:03 +01:00
|
|
|
|
|
|
|
|
|
|
|
# Text editor
|
|
|
|
if [ $TERMUX == 1 ]; then
|
|
|
|
inst vim-python
|
|
|
|
elif [ $DEBIAN == 1 ]; then
|
2017-02-12 13:29:03 +01:00
|
|
|
inst vim-nox
|
2017-02-12 15:14:51 +01:00
|
|
|
if [ $ADMIN == 0 ]; then
|
|
|
|
debloc altern vim nox
|
|
|
|
fi
|
2017-02-12 11:41:03 +01:00
|
|
|
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)
|
2017-07-26 04:34:10 +02:00
|
|
|
if [ $ARCH == 1 ] && [ $ADMIN == 1 ]; then
|
|
|
|
if [ $EXTRA == 1 ]; then
|
|
|
|
altInst vim-youcompleteme-git
|
|
|
|
else
|
|
|
|
altInst vim-youcompleteme-core-git
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
if [ $DEBIAN == 1 || $TERMUX == 1 ]; then
|
2017-09-20 11:47:30 +02:00
|
|
|
inst python-dev python3-dev cmake
|
2017-07-26 04:34:10 +02:00
|
|
|
fi
|
|
|
|
YCM_ARGS=""
|
|
|
|
if [ $TERMUX != 1 ]; then
|
|
|
|
YCM_ARGS="$YCM_ARGS --clang-completer --tern-completer"
|
|
|
|
fi
|
2017-09-20 11:47:30 +02:00
|
|
|
|
2017-07-26 04:34:10 +02:00
|
|
|
python $HOME/.vim/bundle/YouCompleteMe/install.py $YCM_ARGS
|
2017-02-12 13:29:03 +01:00
|
|
|
fi
|
2017-02-12 11:41:03 +01:00
|
|
|
|
|
|
|
# Common GUI
|
|
|
|
|
|
|
|
if [ $GUI == 1 ]; then
|
|
|
|
# Desktop manager
|
2017-09-01 18:39:06 +02:00
|
|
|
inst i3 i3lock dunst unclutter xautolock feh numlockx scrot xterm xclip
|
2018-01-08 12:26:49 +01:00
|
|
|
curl "https://raw.githubusercontent.com/FortAwesome/Font-Awesome/a8386aae19e200ddb0f6845b5feeee5eb7013687/fonts/fontawesome-webfont.ttf" > ~/.local/share/fonts/fontawesome-webfont.ttf
|
2017-07-02 22:06:24 +02:00
|
|
|
if [ $ARCH == 1 ]; then
|
2017-11-02 16:48:43 +01:00
|
|
|
inst xorg-xinit
|
2018-01-08 12:26:49 +01:00
|
|
|
altInst polybar-git autorandr-git keynav-enhanced pacmixer
|
2017-07-02 22:06:24 +02:00
|
|
|
else
|
2017-09-20 11:47:30 +02:00
|
|
|
# Compiling polybar
|
|
|
|
if ! which polybar > /dev/null; then
|
|
|
|
inst debhelper cmake libxcb-icccm4-dev libxcb-image0-dev libxcb-randr0-dev libx11-dev libxcb1-dev libxcb-util-dev libx11-xcb-dev linux-libc-dev libboost-dev x11proto-core-dev libxcb-ewmh-dev libxft-dev libasound2-dev libiw-dev libmpdclient-dev xcb-proto python-xcbgen libxcb-xkb-dev i3-wm libcairo2-dev libxcb-xrm-dev
|
|
|
|
# TODO Figure which one are really needed
|
|
|
|
#inst libasound2 libc6 libgcc1 libiw30 libmpdclient2 libstdc++6 libx11-6 libx11-xcb1 libxcb-ewmh2 libxcb-icccm4 libxcb-randr0 libxcb-xkb1 libxcb1 libxft2
|
|
|
|
TMP=$(mktemp -d)
|
|
|
|
git clone --branch 3.0.5 --recursive https://github.com/jaagr/polybar $TMP
|
|
|
|
mkdir $TMP/build
|
|
|
|
cd $TMP/build
|
|
|
|
cmake ..
|
|
|
|
make -j`nproc`
|
|
|
|
strip bin/polybar
|
|
|
|
mv bin/polybar ~/.bin/
|
|
|
|
rm -rf $TMP
|
|
|
|
fi
|
2017-07-02 22:06:24 +02:00
|
|
|
fi
|
2017-02-12 11:41:03 +01:00
|
|
|
if [ $DEBIAN == 1 ]; then
|
2017-07-26 09:42:41 +02:00
|
|
|
inst suckless-tools keynav
|
2017-02-12 11:41:03 +01:00
|
|
|
if [ $ADMIN == 0 ]; then
|
2017-02-12 13:29:03 +01:00
|
|
|
debloc altern dmenu xft
|
2017-02-12 11:41:03 +01:00
|
|
|
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
|
2017-09-20 11:47:30 +02:00
|
|
|
inst python3-lxml python-tox python3-pyqt5 python3-pyqt5.qtwebkit python3-pyqt5.qtquick python3-sip python3-jinja2 python3-pygments python3-yaml python3-pyqt5.qtsql libqt5sql5-sqlite python3-pyqt5.qtwebengine python3-pyqt5.qtopengl python3-opengl
|
2017-02-12 11:41:03 +01:00
|
|
|
TMP_DIR=$(mktemp -d)
|
|
|
|
$(cd $TMP_DIR; wget https://qutebrowser.org/python3-pypeg2_2.15.2-1_all.deb)
|
2017-09-20 11:47:30 +02:00
|
|
|
$(cd $TMP_DIR; wget https://github.com/qutebrowser/qutebrowser/releases/download/v0.11.0/qutebrowser_0.11.0-1_all.deb)
|
2017-02-12 11:41:03 +01:00
|
|
|
instFile $TMP_DIR/*.deb
|
|
|
|
rm -rf $TMP_DIR
|
|
|
|
|
|
|
|
elif [ $ARCH == 1 ]; then
|
2017-07-26 09:42:41 +02:00
|
|
|
inst qutebrowser qt5-webengine python-opengl
|
2017-02-12 11:41:03 +01:00
|
|
|
fi
|
|
|
|
|
|
|
|
# Screen filter
|
|
|
|
if [ $ARCH == 1 ]; then
|
|
|
|
altInst sct
|
2017-02-12 13:29:03 +01:00
|
|
|
elif [ $TERMUX != 1 ]; then
|
2017-09-01 18:39:06 +02:00
|
|
|
if [ ! -f $HOME/.bin/sct ]; then
|
2017-09-20 11:47:30 +02:00
|
|
|
TMP=$(mktemp /tmp/XXXXXXXXXX.c)
|
|
|
|
wget https://gist.githubusercontent.com/ajnirp/208c03d3aa7f02c743d2/raw/55bf3eed25739173d8be57b5179ed5542cf40ed6/sct.c -O $TMP
|
|
|
|
cc $TMP --std=c99 -lX11 -lXrandr -o $HOME/.bin/sct
|
2017-09-01 18:39:06 +02:00
|
|
|
rm $TMP
|
2017-02-12 11:41:03 +01:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Graphical vim
|
|
|
|
if [ $DEBIAN == 1 ]; then
|
|
|
|
inst vim-gtk
|
|
|
|
else
|
|
|
|
inst gvim
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2018-03-19 07:29:56 +01:00
|
|
|
|
2017-02-12 11:41:03 +01:00
|
|
|
if [ $EXTRA == 1 ]; then
|
2017-02-12 13:29:03 +01:00
|
|
|
# Extra dev
|
2017-06-14 13:04:36 +02:00
|
|
|
inst cmake clang llvm npm
|
2017-02-12 13:29:03 +01:00
|
|
|
|
2017-02-12 11:41:03 +01:00
|
|
|
# Extra CLI
|
2018-04-10 15:38:18 +02:00
|
|
|
inst ffmpeg youtube-dl optipng syncthing ccache mutt
|
|
|
|
systemdUserUnit syncthing.service
|
2017-02-12 11:41:03 +01:00
|
|
|
if [ $ARCH == 1 ]; then
|
2017-07-10 08:54:00 +02:00
|
|
|
inst jq
|
2017-07-02 22:06:24 +02:00
|
|
|
altInst pdftk translate-shell git-lfs js-beautify insect visidata-git
|
2018-03-19 07:29:56 +01:00
|
|
|
|
|
|
|
# Orga
|
|
|
|
# TODO For others
|
|
|
|
inst vdirsyncer khard
|
2018-04-10 15:38:18 +02:00
|
|
|
altInst khal todoman offlineimap
|
2018-03-19 07:29:56 +01:00
|
|
|
systemdUserUnit vdirsyncer.timer
|
2017-10-30 11:44:12 +01:00
|
|
|
else
|
|
|
|
# translate-shell
|
|
|
|
curl -L git.io/trans > ~/.bin/trans
|
|
|
|
chmod +x ~/.bin/trans
|
2017-02-12 11:41:03 +01:00
|
|
|
fi
|
|
|
|
|
|
|
|
# Extra GUI
|
|
|
|
if [ $GUI == 1 ]; then
|
2017-11-26 08:53:39 +01:00
|
|
|
inst vlc gimp mpd thunar noto-fonts-emoji musescore
|
2017-02-12 11:41:03 +01:00
|
|
|
|
|
|
|
if [ $ARCH == 1 ]; then
|
|
|
|
inst simplescreenrecorder
|
2018-03-19 07:29:56 +01:00
|
|
|
altInst pacmixer xcursor-menda-git menda-themes-git menda-maia-icon-theme vimpc-git mpc ashuffle-git
|
2017-02-12 11:41:03 +01:00
|
|
|
fi
|
|
|
|
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|