installSoftware
This commit is contained in:
parent
10f8511294
commit
1b104be690
|
@ -2,307 +2,29 @@
|
|||
|
||||
# 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
|
||||
}
|
||||
# NOTE In the process of migrating to a new install workflow.
|
||||
# This holds stuff that have not been migrated yet.
|
||||
# TODO A lot of stuff
|
||||
|
||||
# Don't ask for things that are already there
|
||||
TERMUX=0
|
||||
if [ -d /data/data/com.termux/files ]; then
|
||||
TERMUX=1
|
||||
GUI=0
|
||||
fi
|
||||
cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1
|
||||
. softwareList
|
||||
|
||||
if which i3 &> /dev/null; then
|
||||
GUI=1
|
||||
fi
|
||||
|
||||
if [ -z $ADMIN ]; then
|
||||
prompt "Are you a superuser on this machine?"
|
||||
ADMIN=$?
|
||||
fi
|
||||
if [ -z $GUI ]; then
|
||||
prompt "Do you want a X environment on this machine?"
|
||||
GUI=$?
|
||||
fi
|
||||
if [ -z $EXTRA ]; then
|
||||
prompt "Do you want not-so-needed software on this machine?"
|
||||
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 --needed
|
||||
fi
|
||||
}
|
||||
function installFileOne { # file
|
||||
sudo pacman -U "$1"
|
||||
}
|
||||
if which aurman &> /dev/null; then
|
||||
function altInstallOne { # package
|
||||
pacman -Q $1 &> /dev/null
|
||||
if [ $? == 1 ]; then
|
||||
aurman -S "$1" --noconfirm --noedit
|
||||
fi
|
||||
}
|
||||
elif 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
|
||||
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
|
||||
installed=0
|
||||
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
|
||||
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
|
||||
}
|
||||
|
||||
function systemdUserUnit {
|
||||
systemctl --user enable "$1"
|
||||
systemctl --user start "$1"
|
||||
}
|
||||
|
||||
# Common CLI
|
||||
echo "Doing stuff cuz"
|
||||
|
||||
changeColors monokai
|
||||
|
||||
# Utils
|
||||
if [ $TERMUX == 1 ]; then
|
||||
inst coreutils man openssl-tool grep sed sh tar
|
||||
inst termux-api
|
||||
if [ $ADMIN == 1 ]; then
|
||||
inst tsu
|
||||
fi
|
||||
fi
|
||||
inst moreutils screen ncdu lsof htop proxytunnel pv curl wget socat mosh bash-completion rsync pwgen fzf highlight
|
||||
# TODO Test those who are on Debian machines and those who aren't
|
||||
if [ $ARCH == 1 ]; then
|
||||
inst bash-completion
|
||||
altInst gopass
|
||||
else
|
||||
inst pass
|
||||
fi
|
||||
|
||||
# Dev
|
||||
if [ $DEBIAN == 1 ]; then
|
||||
inst build-essential
|
||||
elif [ $ARCH == 1 ]; then
|
||||
inst base-devel
|
||||
else
|
||||
inst make
|
||||
fi
|
||||
inst git
|
||||
|
||||
|
||||
# Text editor
|
||||
inst neovim
|
||||
if [ $DEBIAN == 1]; then
|
||||
inst python-neovim pyhon3-neovim
|
||||
elif [ $ARCH == 1]; then
|
||||
inst python2-neovim python-neovim
|
||||
fi
|
||||
|
||||
if [ $DEBIAN == 1 ]; then
|
||||
inst exuberant-ctags
|
||||
else
|
||||
inst ctags
|
||||
fi
|
||||
vim +PlugUpgrade +PlugUpdate +PlugInstall +qall
|
||||
|
||||
# Common GUI
|
||||
if [ $GUI == 1 ]; then
|
||||
.Xresources.d/configure
|
||||
### RECYCLE BIN
|
||||
# Help yourself
|
||||
|
||||
# Desktop manager
|
||||
inst dunst feh i3-wm i3lock numlockx qutebrowser rofi rxvt-unicode scrot trayer unclutter xautolock xclip
|
||||
if [ $ARCH == 1 ]; then
|
||||
inst xorg-xinit xorg-xbacklight ttf-dejavu autorandr
|
||||
altInst lemonbar-xft-git keynav-enhanced pacmixer rofi-pass
|
||||
elif [ $DEBIAN == 1 ]; then
|
||||
# TODO autorandr pacmixer rofi-pass ttf-dejavu
|
||||
inst lemonbar keynav xbacklight
|
||||
fi
|
||||
|
||||
# Screen filter
|
||||
if [ $ARCH == 1 ]; then
|
||||
altInst sct
|
||||
elif [ $TERMUX != 1 ]; then
|
||||
if [ ! -f $HOME/.local/bin/sct ]; then
|
||||
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/.local/bin/sct
|
||||
rm $TMP
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
# # translate-shell
|
||||
# curl -L git.io/trans > ~/.local/bin/trans
|
||||
# chmod +x ~/.local/bin/trans
|
||||
|
||||
|
||||
if [ $EXTRA == 1 ]; then
|
||||
# Extra dev (not on mobile though ^^)
|
||||
if [ $TERMUX == 0 ]; then
|
||||
inst cmake clang llvm ccache python-pip gdb
|
||||
fi
|
||||
|
||||
# Extra CLI
|
||||
inst ffmpeg optipng syncthing mutt msmtp notmuch mbsync jq lynx strace
|
||||
inst unzip unrar jdupes bedup p7zip
|
||||
inst youtube-dl megatools speedtest-cli
|
||||
systemdUserUnit syncthing
|
||||
if [ $ARCH == 1 ]; then
|
||||
insta pandoc youtube-dl translate-shell imagemagick
|
||||
altInst insect pdftk visidata
|
||||
|
||||
# Orga
|
||||
# TODO For others
|
||||
inst vdirsyncer khard todoman offlineimap khal
|
||||
systemdUserUnit vdirsyncer.timer
|
||||
elif [ $DEBIAN == 1]; then
|
||||
inst pandoc pdftk visidata translate-shell youtube-dl
|
||||
else
|
||||
# translate-shell
|
||||
curl -L git.io/trans > ~/.local/bin/trans
|
||||
chmod +x ~/.local/bin/trans
|
||||
|
||||
# TODO Others
|
||||
fi
|
||||
|
||||
# FPGA goodness
|
||||
if [ $ARCH == 1 ]; then
|
||||
inst iverilog
|
||||
altInst ghdl
|
||||
fi
|
||||
|
||||
# Extra GUI
|
||||
if [ $GUI == 1 ]; then
|
||||
inst vlc gimp inkscape mpd thunar musescore llpp pdfpc texlive-{most,lang}
|
||||
|
||||
if [ $ARCH == 1 ]; then
|
||||
inst simplescreenrecorder mpc
|
||||
altInst vimpc-git ashuffle-git ttf-emojione-color puddletag
|
||||
|
||||
# FPGA goodness
|
||||
inst gtkwave
|
||||
fi
|
||||
|
||||
# TODO Others
|
||||
|
||||
fi
|
||||
fi
|
||||
|
||||
# # sct
|
||||
# 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/.local/bin/sct
|
||||
# rm $TMP
|
||||
|
|
331
config/scripts/installSoftware
Executable file
331
config/scripts/installSoftware
Executable file
|
@ -0,0 +1,331 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# set -x
|
||||
|
||||
# Allows to install software
|
||||
|
||||
# Find list of available installers in order of preference
|
||||
# Read wanted packages and their availability
|
||||
# Install packages per installer (after prompting)
|
||||
|
||||
# COMMON FUNCTIONS
|
||||
|
||||
# GLOBAL VARIABLES
|
||||
|
||||
# TODO Lock or temp folder
|
||||
CACHE_DIR="${XDG_CACHE_DIR:-$HOME/.cache}/installSoftware"
|
||||
INSTALLERS_DIR="${CACHE_DIR}/installers"
|
||||
INSTALLERS_LIST="${CACHE_DIR}/installers.list"
|
||||
|
||||
|
||||
# INSTALLER SPECIFIC FUNCTIONS
|
||||
|
||||
# Test if available
|
||||
available_pkgbuild() {
|
||||
true
|
||||
}
|
||||
|
||||
# Update the database
|
||||
update_Rpacman() {
|
||||
sudo pacman -Syu --noconfirm
|
||||
}
|
||||
|
||||
update_Ryay() {
|
||||
yay -Syu --noconfirm --devel
|
||||
}
|
||||
|
||||
update_Rapt() {
|
||||
# TODO non-interactive
|
||||
sudo apt update -y
|
||||
sudo apt upgrade -y
|
||||
}
|
||||
|
||||
# Test if installed
|
||||
|
||||
installed_Rpacman() { # packageName
|
||||
pacman -Qq "$1" &> /dev/null
|
||||
}
|
||||
|
||||
installed_Ryay() { # package
|
||||
installed_Rpacman "$@"
|
||||
}
|
||||
|
||||
installed_pip() { # package
|
||||
pip show "$@" > /dev/null
|
||||
}
|
||||
|
||||
installed_makepkg() { # package
|
||||
installed_Rpacman "$@"
|
||||
}
|
||||
|
||||
installed_pkgbuild() { # package
|
||||
installed_Rpacman "$@"
|
||||
# TODO Might need all the systems package too
|
||||
}
|
||||
|
||||
installed_Rapt() {
|
||||
STATUS=$(mktemp)
|
||||
LANG=C dpkg-query --status $1 &> $STATUS
|
||||
installed=0
|
||||
if [ $? == 0 ]; then
|
||||
cat $STATUS | grep '^Status:' | grep ' installed' --quiet
|
||||
if [ $? == 0 ]; then
|
||||
installed=1
|
||||
fi
|
||||
fi
|
||||
rm -f $STATUS > /dev/null
|
||||
return $installed
|
||||
}
|
||||
|
||||
# Test if available in the repositories
|
||||
|
||||
installable_aur() {
|
||||
curl --fail --silent --head "https://aur.archlinux.org/packages/$@" > /dev/null
|
||||
}
|
||||
|
||||
installable_Rpacman() {
|
||||
pacman -Ss "$1" > /dev/null
|
||||
}
|
||||
|
||||
installable_Ryay() {
|
||||
# yay -Ss "$1" > /dev/null
|
||||
installable_aur
|
||||
}
|
||||
|
||||
installable_pkgbuild() {
|
||||
installable_aur
|
||||
}
|
||||
|
||||
installable_makepkg() {
|
||||
installable_aur
|
||||
}
|
||||
|
||||
# Tell if it hadles mutiple argument for install
|
||||
|
||||
multiinstall_pacman() {
|
||||
true
|
||||
}
|
||||
|
||||
multiinstall_pip() {
|
||||
true
|
||||
}
|
||||
|
||||
multiinstall_apt() {
|
||||
true
|
||||
}
|
||||
|
||||
# Really install
|
||||
|
||||
install_Rpacman() {
|
||||
sudo pacman -S --needed --noconfirm $@
|
||||
}
|
||||
|
||||
install_Ryay() {
|
||||
yay -S --needed --noconfirm $@
|
||||
}
|
||||
|
||||
install_Rapt() {
|
||||
apt install -y $@
|
||||
}
|
||||
|
||||
install_Rpip() {
|
||||
sudo pip install $@
|
||||
}
|
||||
|
||||
install_Upip() {
|
||||
pip install --user $@
|
||||
}
|
||||
|
||||
installable_Rmakepkg() {
|
||||
old_pwd="$PWD"
|
||||
TMP_DIR="$(mktemp -d /tmp/pkgbuild.XXXXXXXXXX)"
|
||||
cd "$TMP_DIR"
|
||||
wget "https://aur.archlinux.org/cgit/aur.git/snapshot/$1.tar.gz"
|
||||
tar xzvf "$1.tar.gz"
|
||||
cd "$1"
|
||||
makepkg -si
|
||||
cd "$old_pwd"
|
||||
rm -rf "$TMP_DIR"
|
||||
}
|
||||
|
||||
# GENERIC INSTALLER FUNCTIONS
|
||||
|
||||
installerCanonicalName() { # installerName
|
||||
echo "${1:1}"
|
||||
}
|
||||
|
||||
notImplementedFallback() { # command installerName
|
||||
echo "[NIMPL] Not implemented: command $1_$2"
|
||||
false
|
||||
}
|
||||
|
||||
# Wrapper to run a command for an installer
|
||||
commandInstaller() { # command installerName fallback args...
|
||||
# echo "[DEBUG] commandInstaller $*"
|
||||
command="$1"
|
||||
installerName="$2"
|
||||
fallback="$3"
|
||||
shift; shift; shift
|
||||
installerCName="$(installerCanonicalName "$installerName")"
|
||||
if command -v "${command}_$installerName" > /dev/null
|
||||
then
|
||||
"${command}_$installerName" "$@"
|
||||
elif command -v "${command}_$installerCName" > /dev/null
|
||||
then
|
||||
"${command}_$installerCName" "$@"
|
||||
else
|
||||
$fallback "$command" "$installerName" "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
# INSTALLER LIST FUNCTIONS
|
||||
|
||||
availableInstallerFallback() { # command installerName
|
||||
command -v "$(installerCanonicalName "$2")" > /dev/null
|
||||
}
|
||||
|
||||
availableInstaller() { # installerName
|
||||
commandInstaller "available" "$1" availableInstallerFallback
|
||||
}
|
||||
|
||||
# Clears the list of installers to use
|
||||
resetInstallers() {
|
||||
rm -f "$INSTALLERS_LIST"
|
||||
touch "$INSTALLERS_LIST"
|
||||
rm -rf "$INSTALLERS_DIR"
|
||||
mkdir -p "$INSTALLERS_DIR"
|
||||
}
|
||||
|
||||
addInstaller() { # installername
|
||||
if availableInstaller "$1"
|
||||
then
|
||||
echo "$1" >> "$INSTALLERS_LIST"
|
||||
rm -f "$INSTALLERS_DIR/$1"
|
||||
touch "$INSTALLERS_DIR/$1"
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
|
||||
listInstallers() {
|
||||
cat "$INSTALLERS_LIST"
|
||||
}
|
||||
|
||||
hasInstaller() { # installerName
|
||||
[ -f "${INSTALLERS_DIR}/$1" ]
|
||||
}
|
||||
|
||||
|
||||
# Installers that install in the user directory
|
||||
addUserInstallers() {
|
||||
addInstaller Umakepkg
|
||||
addInstaller Upip
|
||||
addInstaller Upkgbuild
|
||||
}
|
||||
|
||||
# Installers that install with the system package manager
|
||||
addSystemInstallers() {
|
||||
addInstaller Rapt
|
||||
addInstaller Rpacman
|
||||
addInstaller Ryay || addInstaller Rmakepkg
|
||||
}
|
||||
|
||||
# Installers that install in the system root but not tracked with system package manager
|
||||
addRootInstallers() {
|
||||
addInstaller Rnode
|
||||
addInstaller Rpip
|
||||
addInstaller Rpkgbuild
|
||||
|
||||
}
|
||||
|
||||
# UPDATING INSTALLER DATABASES
|
||||
|
||||
updateInstallers() {
|
||||
for installerName in $(listInstallers)
|
||||
do
|
||||
commandInstaller "update" "$installerName" true
|
||||
done
|
||||
}
|
||||
|
||||
# MARKING PACKAGES TO INSTALL
|
||||
|
||||
markPackage() { # installer package
|
||||
# echo "[DEBUG] Marked $*"
|
||||
echo "$2" >> "$INSTALLERS_DIR/$1"
|
||||
}
|
||||
|
||||
# Test if a package is installed
|
||||
installedPackage() { # package
|
||||
for installerName in $(listInstallers)
|
||||
do
|
||||
if commandInstaller "installed" "$installerName" notImplementedFallback "$1"
|
||||
then
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
installablePackageBy() { # installer package
|
||||
commandInstaller "installable" "$1" notImplementedFallback "$2"
|
||||
}
|
||||
|
||||
# List packages to install by given installer
|
||||
listPackagesForInstaller() { # installer
|
||||
cat "$INSTALLERS_DIR/$1"
|
||||
}
|
||||
|
||||
isToInstall() { # package
|
||||
for installerName in $(listInstallers)
|
||||
do
|
||||
listPackagesForInstaller "$installerName" | grep -q "^$1\$" && return 0
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
# Mark package to installer list where available
|
||||
tryPackage() { # packageNames
|
||||
# If package is already installed or marked to install, skip
|
||||
for package in "$@"
|
||||
do
|
||||
installedPackage "$package" && return 0
|
||||
isToInstall "$package" && return 0
|
||||
|
||||
done
|
||||
# For each installer
|
||||
for installerName in $(listInstallers)
|
||||
do
|
||||
# For each name given
|
||||
for package in "$@"
|
||||
do
|
||||
# Mark if name available to installer
|
||||
if installablePackageBy "$installerName" "$package"
|
||||
then
|
||||
markPackage "$installerName" "$package"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
done
|
||||
echo "[ERR] Cannot install package with aliases: $*"
|
||||
return 1
|
||||
}
|
||||
alias i=tryPackage
|
||||
|
||||
installPackages() {
|
||||
for installerName in $(listInstallers)
|
||||
do
|
||||
# If we can install multiple packages in one go
|
||||
if commandInstaller "multiinstall" "$installerName" false
|
||||
then
|
||||
packages=$(listPackagesForInstaller "$installerName")
|
||||
[ -z "$packages" ] && continue
|
||||
commandInstaller "install" "$installerName" notImplementedFallback $packages
|
||||
else
|
||||
for packageName in $(listPackagesForInstaller "$installerName")
|
||||
do
|
||||
commandInstaller "install" "$installerName" notImplementedFallback "$packageName"
|
||||
done
|
||||
fi
|
||||
done
|
||||
}
|
325
config/scripts/softwareList
Executable file
325
config/scripts/softwareList
Executable file
|
@ -0,0 +1,325 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# List of the software I use divided by categories.
|
||||
# Oh and it asks the category you want to install on
|
||||
# the running machine too.
|
||||
|
||||
# TODO Not really tested in conditions
|
||||
# TODO Not tested with Debian derivate
|
||||
# TODO Not tested on home folder
|
||||
|
||||
CONFIG_FILE="${XDG_CONFIG_DIR:=$HOME/.config}/softwareList"
|
||||
mkdir -p $XDG_CONFIG_DIR
|
||||
touch $CONFIG_FILE
|
||||
. $CONFIG_FILE
|
||||
|
||||
prompt() { # text
|
||||
res="none"
|
||||
while [ "$res" = "none" ]
|
||||
do
|
||||
printf "%s [yn] " "$1"
|
||||
read -r yn
|
||||
case $yn in
|
||||
[Yy]* ) return 0;;
|
||||
[Nn]* ) return 1;;
|
||||
* ) echo "Please answer y or n.";;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
uservar() { # var text
|
||||
if [ -z "${!1}" ]
|
||||
then
|
||||
prompt "${2}" && res=true || res=false
|
||||
export "$1"="$res"
|
||||
echo "$1"="$res" >> "$CONFIG_FILE"
|
||||
fi
|
||||
}
|
||||
|
||||
echo "Please answer some questions about this machine and what you want to do on it:"
|
||||
|
||||
# Setting variables
|
||||
[ -d /data/data/com.termux/files ] && TERMUX=true || TERMUX=false
|
||||
$TERMUX && INSTALL_GUI=false
|
||||
[ "$USER" = "root" ] && SUPERUSER=true
|
||||
|
||||
uservar SUPERUSER "Have root permissions?"
|
||||
uservar INSTALL_GUI "Install a GUI environment?"
|
||||
$INSTALL_GUI && INSTALL_X=true
|
||||
INSTALL_WAYLAND=false
|
||||
uservar INSTALL_PASSWORD "Handle password?"
|
||||
uservar INSTALL_MAIL "Read/send mail?"
|
||||
uservar INSTALL_ORGANISATION "Handle agenda/contacts?"
|
||||
uservar INSTALL_HOUSEKEEPING "Do some housekeeping?"
|
||||
uservar INSTALL_FPGA "Handle FPGAs?"
|
||||
uservar INSTALL_UTILITIES "Extra utilities?"
|
||||
uservar INSTALL_DOCUMENT "Create documents?"
|
||||
uservar INSTALL_IMAGE "Do image editing?"
|
||||
uservar INSTALL_MUSIC "Play/edit music?"
|
||||
uservar INSTALL_VIDEO "Play/edit videos?"
|
||||
|
||||
echo "(you can change those answers later in $CONFIG_FILE)"
|
||||
|
||||
# Preparing installers
|
||||
. ./installSoftware
|
||||
|
||||
resetInstallers
|
||||
$SUPERUSER && addSystemInstallers
|
||||
addUserInstallers
|
||||
|
||||
echo "Installers that will be used:"
|
||||
listInstallers | sed 's/^/- /'
|
||||
|
||||
echo "Updating databases & packages"
|
||||
# updateInstallers # DEBUG put back
|
||||
|
||||
echo "Finding packages to install"
|
||||
# Note: i A B: will try A then B for each installer
|
||||
# i A || i B: will try A for each installer, then B for each installer
|
||||
|
||||
# Package managers (install first)
|
||||
i yay
|
||||
i python-pip python3-pip pip3
|
||||
|
||||
# TODO Install first and recharge installers
|
||||
|
||||
# Utils used by those scripts
|
||||
i base coreutils # Basic shell commands (ls, rm, cp...)
|
||||
i bash # Shell
|
||||
i grep # Text finder
|
||||
i sed # Text replacer
|
||||
i tar # Archive tool
|
||||
i openssl openssl-tools # machines script verification
|
||||
|
||||
# Various utilities
|
||||
|
||||
$SUPERUSER && i sudo tsu
|
||||
$TERMUX && termux-api
|
||||
|
||||
# Shell utilities
|
||||
i moreutils # Advanced shell commands (ts, sponge...)
|
||||
i tmux # Terminal multiplexer
|
||||
i bash-completion # Shell completions
|
||||
i fzf # Fancy file finder
|
||||
i highlight # Syntax highlighter
|
||||
|
||||
i zsh # Shell
|
||||
i zsh-autosuggestions # Shell suggestions
|
||||
i zsh-completions # Shell completions
|
||||
i zsh-history-substring-search # Shell config
|
||||
i zsh-syntax-highlighting # Shell highlighting
|
||||
|
||||
# Text edition
|
||||
(i neovim nvim && i python-neovim python3-neovim) || i vim || i vi # Text editor
|
||||
|
||||
# Monitoring utilities
|
||||
i ncdu # Explore directories by weight on disk
|
||||
i lsof # Find who/what uses the files
|
||||
i htop # List process by resources
|
||||
i pv # Allow to show progress in pipe
|
||||
i progress # Show progress of functions
|
||||
|
||||
# Network utilities
|
||||
i proxytunnel # Proxy connections through HTTPS
|
||||
i curl # Transfer URL
|
||||
i wget # Download URL
|
||||
i gnu-netcat # Network piping
|
||||
i socat # Multi-purpose relay
|
||||
i rsync # Remote file-copying tool
|
||||
i speedtest-cli # Network speed benchmarker
|
||||
|
||||
# Archives utilities
|
||||
i unzip # Unarchive ZIP files
|
||||
i unrar # Unarchive RAR files
|
||||
i p7zip # Unarchive 7z files
|
||||
|
||||
# Password handling
|
||||
if $INSTALL_PASSWORD
|
||||
then
|
||||
i pwgen # Password generator
|
||||
i gopass || i pass # Password manager
|
||||
if $INSTALL_GUI
|
||||
then
|
||||
i rofi-pass # Password selector
|
||||
fi
|
||||
fi
|
||||
|
||||
if $INSTALL_MAIL
|
||||
then
|
||||
# i offlineimap # Synchronize IMAP (legacy)
|
||||
i isync mbsync # Synchronize IMAP
|
||||
i msmtp # Send mail via SMTP
|
||||
i notmuch # Index mail
|
||||
i neomutt || i mutt # CLI mail client
|
||||
i lynx # CLI web browser (for HTML mail)
|
||||
if $INSTALL_GUI
|
||||
then
|
||||
i thunderbird # GUI mail client (just in case)
|
||||
fi
|
||||
fi
|
||||
|
||||
if $INSTALL_ORGANISATION
|
||||
then
|
||||
i vdirsyncer # Synchronize DAV
|
||||
i khard # Contacts editor
|
||||
i khal # Calendar editor
|
||||
i task # Todo-list
|
||||
i timew # Time-tracker
|
||||
fi
|
||||
|
||||
|
||||
if $INSTALL_HOUSEKEEPING
|
||||
then
|
||||
i syncthing # Synchronize files amongst devices
|
||||
i jdupes # Find duplicates
|
||||
i duperemove # Find and merge dupplicates on BTRFS partitions
|
||||
i optipng # Optimize PNG files
|
||||
i jpegtran libjpeg-turbo # Compress JPEG files
|
||||
fi
|
||||
|
||||
|
||||
|
||||
# Dev utilities
|
||||
i base-devel build-essential || (i make; i gcc)
|
||||
i git
|
||||
[ -z "$INSTALL_DEV" ] && $TERMUX && INSTALL_DEV=false
|
||||
if $INSTALL_DEV
|
||||
then
|
||||
# Misc/Reusable
|
||||
i strace # Tracer
|
||||
i ctags universal-ctags exuberant-ctags # Tags generator
|
||||
|
||||
# C/C++
|
||||
i cmake # C++ Build system
|
||||
i clang # C/C++ Compiler
|
||||
i ccache # Build cache
|
||||
i gdb # Debugger
|
||||
|
||||
# JS
|
||||
i jq # CLI JSON file handler
|
||||
|
||||
# Python
|
||||
i python-language-server # Python language server
|
||||
i mypy && i pyls-mypy # Static typing checker for Python
|
||||
|
||||
# Bash
|
||||
i bash-language-server # Bash / SH language server
|
||||
fi
|
||||
|
||||
|
||||
if $INSTALL_FPGA
|
||||
then
|
||||
i yosys # Verilog processor
|
||||
i iverilog # Verilog simulator
|
||||
i ghdl # VHDL simulator
|
||||
i gtkwave # Simulation file viewer
|
||||
fi
|
||||
|
||||
if $INSTALL_UTILITIES
|
||||
then
|
||||
i visidata # CSV file reader
|
||||
i insect # Unit calculator
|
||||
fi
|
||||
|
||||
|
||||
if $INSTALL_DOCUMENT
|
||||
then
|
||||
i pandoc # Document converter
|
||||
i texlive-most && i texlive-lang # LaTeX renderer
|
||||
i pdftk # PDF manipulator
|
||||
i translate-shell # Translator
|
||||
i inkscape # Vector image converter
|
||||
i optipng # Optimize PNG files
|
||||
i jpegtran libjpeg-turbo # Compress JPEG files
|
||||
fi
|
||||
|
||||
if $INSTALL_IMAGE
|
||||
then
|
||||
i imagemagick # CLI Image manipulator
|
||||
i gimp # Photo editor
|
||||
i darktable # Raw photo editor
|
||||
i inkscape # Vectorial image editor
|
||||
i optipng # Optimize PNG files
|
||||
i jpegtran libjpeg-turbo # Compress JPEG files
|
||||
fi
|
||||
|
||||
if $INSTALL_MUSIC
|
||||
then
|
||||
i mpv # Audio/Video player
|
||||
i puddletag # Musig tag editor
|
||||
i mpd # Music player daemon
|
||||
i mpc # CLI MPD client
|
||||
i vimpc-git # CLI UI MPD client
|
||||
i musescore # Music sheet editor
|
||||
i ashuffle # Auto-fill MPD playlist
|
||||
fi
|
||||
|
||||
|
||||
if $INSTALL_VIDEO
|
||||
then
|
||||
i vlc # Video player
|
||||
i mpv # Audio/Video player
|
||||
i ffmpeg # Video/Audio file handler
|
||||
i youtube-dl # Downloader for videos
|
||||
i megatools # Downloader for mega.nz
|
||||
if $INSTALL_X
|
||||
then
|
||||
i simplescreenrecorder # Screen recorder
|
||||
fi
|
||||
fi
|
||||
|
||||
# Desktop environment
|
||||
if $INSTALL_GUI
|
||||
then
|
||||
i firefox # Web browser
|
||||
i thunar # Directory browser (just in case)
|
||||
i feh # Background / Image viewer
|
||||
i zathura && i zathura-pdf-mupdf # PDF viewer
|
||||
i ttf-twemoji # Emoji fonts
|
||||
|
||||
if $INSTALL_X
|
||||
then
|
||||
i i3-wm # WM
|
||||
i dunst # Notifications
|
||||
i i3lock # Locker
|
||||
i numlockx # Numlock auto-unlock
|
||||
i rofi # HUD selector
|
||||
i rxvt-unicode # Terminal emulator
|
||||
i scrot # Screenshot taker
|
||||
i trayer # Tray icons (just in case)
|
||||
i unclutter # Auto mask mouse
|
||||
i xautolock # Auto lock screen
|
||||
i xclip # Copy/paste
|
||||
i lemonbar-xft-git lemonbar # Bottom bar
|
||||
i autorandr # Multiple screen configurations
|
||||
i ttf-dejavu # Font
|
||||
i keynav-enhanced keynav # Use mouse with keyboard
|
||||
i pacmixer # To change PA volumes
|
||||
i sct # Red filter # TODO Autocompile
|
||||
|
||||
i xorg-xinit # To launch X
|
||||
i xorg-xbacklight xbacklight # For laptop brightness
|
||||
i pulseaudio # To get ausdio
|
||||
# TODO Bluetooth headset stuff
|
||||
|
||||
fi
|
||||
|
||||
if $INSTALL_WAYLAND
|
||||
then
|
||||
i sway
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Listing software to install"
|
||||
|
||||
listInstallers | while read -r installerName
|
||||
do
|
||||
echo " Installer $installerName will install:"
|
||||
listPackagesForInstaller "$installerName" | sed 's/^/ - /'
|
||||
done
|
||||
|
||||
prompt "Okay with those?" || exit 0
|
||||
|
||||
echo "Installing packages"
|
||||
|
||||
installPackages
|
|
@ -71,6 +71,8 @@ if len(sys.argv) >= 3:
|
|||
show_name = sys.argv[2]
|
||||
else:
|
||||
show_name = os.path.split(os.path.realpath(os.path.curdir))[1]
|
||||
if '(' in show_name:
|
||||
show_name = show_name.split('(')[0].strip()
|
||||
|
||||
search = tv.search(show_name)
|
||||
|
||||
|
@ -180,6 +182,9 @@ for association in associations:
|
|||
if a_basename == basename:
|
||||
old_path = os.path.join(root, a_filename)
|
||||
new_path = os.path.join(root, new_name + a_ext)
|
||||
if old_path == new_path:
|
||||
continue
|
||||
|
||||
print(old_path, "->", new_path)
|
||||
if not dryrun:
|
||||
os.rename(old_path, new_path)
|
||||
|
|
Loading…
Reference in a new issue