416 lines
13 KiB
Bash
416 lines
13 KiB
Bash
#!/bin/bash
|
|
# Ubuntu/Trisquel GNU/Linux customization for Office.
|
|
# 2021 - SwITNet Ltd
|
|
# GNU GPLv3 or later.
|
|
|
|
# Check if user is root
|
|
if [ $(id -u) = 0 ]; then
|
|
echo "Please don't run with root or sudo privileges!
|
|
> We'll request them when necessary."
|
|
exit 1
|
|
fi
|
|
if [ "$(pwd| grep -c "/home/")" = 0 ]; then
|
|
echo "Please run within the users directory"
|
|
exit
|
|
else
|
|
echo "Let's start!"
|
|
fi
|
|
|
|
# Office use?
|
|
while [[ "$OFFICE_USE" != "yes" && "$OFFICE_USE" != "no" ]]
|
|
do
|
|
read -p "> Is this planned to be for office use: (yes or no)"$'\n' -r OFFICE_USE
|
|
if [ "$OFFICE_USE" = "no" ]; then
|
|
echo "Ok, some extra packages will be added."
|
|
elif [ "$OFFICE_USE" = "yes" ]; then
|
|
echo "Ok, we'll stick to the office related packages only."
|
|
fi
|
|
done
|
|
|
|
# External AppImages
|
|
## Nextcloud
|
|
while [[ "$NC_APPIMAGE" != "yes" && "$NC_APPIMAGE" != "no" ]]
|
|
do
|
|
read -p "> Do you want to setup Nextcloud AppImage: (yes or no)"$'\n' -r NC_APPIMAGE
|
|
if [ "$NC_APPIMAGE" = "yes" ]; then
|
|
echo "Ok, Nextcloud AppImage will be added."
|
|
elif [ "$NC_APPIMAGE" = "no" ]; then
|
|
echo "Nextcloud AppImage won't be setup."
|
|
fi
|
|
done
|
|
|
|
wait_seconds() {
|
|
secs=$(($1))
|
|
while [ $secs -gt 0 ]; do
|
|
echo -ne "$secs\033[0K\r"
|
|
sleep 1
|
|
: $((secs--))
|
|
done
|
|
}
|
|
|
|
DIST="$(lsb_release -sc)"
|
|
rename_distro() {
|
|
if [ "$DIST" = "$1" ]; then
|
|
DIST="$2"
|
|
fi
|
|
}
|
|
#Trisquel distro renaming
|
|
rename_distro flidas xenial
|
|
rename_distro etiona bionic
|
|
rename_distro nabia focal
|
|
|
|
# Functions
|
|
install_bundle_packages() {
|
|
for i in $1
|
|
do
|
|
if [ "$(dpkg-query -W -f='${Status}' $i 2>/dev/null | grep -c "ok installed")" == "1" ]; then
|
|
echo " > Package $i already installed."
|
|
else
|
|
if [ -z "$(apt-cache madison $i 2>/dev/null)" ]; then
|
|
echo " > Package $i not available on repo."
|
|
else
|
|
echo " > Add package $i to the install list"
|
|
iPackages="$iPackages $i"
|
|
fi
|
|
fi
|
|
done
|
|
echo "$iPackages"
|
|
if [ -z "$iPackages" ]; then
|
|
echo "Nothing to install..."
|
|
else
|
|
echo "Installing packages..."
|
|
sudo apt-get -y install $iPackages
|
|
fi
|
|
}
|
|
remove_bundle_packages() {
|
|
for i in $1
|
|
do
|
|
if [ "$(dpkg-query -W -f='${Status}' $i 2>/dev/null | grep -c "ok installed")" == "0" ]; then
|
|
echo " > Package $i is not installed."
|
|
else
|
|
echo " > Add package $i to the remove list"
|
|
rPackages="$rPackages $i"
|
|
fi
|
|
done
|
|
echo "$rPackages"
|
|
if [ "$(wc -w <<< $rPackages)" = "0" ]; then
|
|
echo "Nothing to remove..."
|
|
else
|
|
echo "Removing packages..."
|
|
sudo apt-get -y remove $rPackages
|
|
fi
|
|
}
|
|
set_once() {
|
|
if [ -z "$(awk '!/^ *#/ && NF {print}' "$2"|grep $(echo $1|awk -F '=' '{print$1}'))" ]; then
|
|
echo "Setting "$1" on "$2"..."
|
|
echo "$1" | sudo tee -a "$2"
|
|
else
|
|
echo " \"$(echo $1|awk -F '=' '{print$1}')\" seems present, skipping setting this variable"
|
|
fi
|
|
}
|
|
change_background() {
|
|
if [ "$(lsb_release -si)" = "$1" ]; then
|
|
if [ -f "$2" ]; then
|
|
gsettings set org.mate.background picture-filename "$2"
|
|
else
|
|
echo "Check that your desired background file exists..."
|
|
fi
|
|
fi
|
|
}
|
|
|
|
if [ "$DIST" = "bionic" ] || \
|
|
[ "$DIST" = "focal" ]; then
|
|
echo "OS: $(lsb_release -sd)"
|
|
echo "Good, this is a supported platform!"
|
|
else
|
|
echo "OS: $(lsb_release -sd)"
|
|
echo "Sorry, this platform is not supported... exiting"
|
|
exit
|
|
fi
|
|
|
|
sudo apt-get update
|
|
install_bundle_packages "curl \
|
|
net-tools \
|
|
ssh \
|
|
wget"
|
|
|
|
#Variables
|
|
NC_AppImage_API_URL="https://api.github.com/repos/nextcloud/desktop/releases/latest"
|
|
NC_ASC="https://nextcloud.com/nextcloud.asc"
|
|
NCAppImageDL="$(curl -s $NC_AppImage_API_URL | \
|
|
awk '/browser_download_url/&&/AppImage/ {print$2}' | \
|
|
tr -d \")"
|
|
NCAppImageBIN="$(awk '!/asc/{print}' <<< $NCAppImageDL|xargs basename)"
|
|
NCAppImageASC="$(awk '/asc/{print}' <<< $NCAppImageDL|xargs basename)"
|
|
KDENLIVE_LATEST_APPIMAGE="$(curl -s https://kdenlive.org/en/download/ | \
|
|
awk '/.appimage/{print}'| \
|
|
awk -F '[= "]' '{print$12}')"
|
|
KDENLIVE_BIN="$(echo $KDENLIVE_LATEST_APPIMAGE|xargs basename)"
|
|
|
|
gpg_libo="$(curl -s https://launchpad.net/~libreoffice/+archive/ubuntu/ppa | \
|
|
grep 1024R| \
|
|
awk -F'[/<]' '{print$3}' | \
|
|
tail -c 9)"
|
|
gpg_mpv="$(curl -s https://launchpad.net/~mc3man/+archive/ubuntu/mpv-tests | \
|
|
grep 1024R| \
|
|
awk -F'[/<]' '{print$3}' | \
|
|
tail -c 9)"
|
|
gpg_hb="$(curl -s https://launchpad.net/~stebbins/+archive/ubuntu/handbrake-releases | \
|
|
grep 1024R| \
|
|
awk -F'[/<]' '{print$3}' | \
|
|
tail -c 9)"
|
|
gpg_x2go="$(curl -s https://launchpad.net/~x2go/+archive/ubuntu/stable | \
|
|
grep 1024R| \
|
|
awk -F'[/<]' '{print$3}' | \
|
|
tail -c 9)"
|
|
BACKPORTS="$(apt-cache policy | \
|
|
awk '/backports/{print$3}' | \
|
|
awk -F "/" 'NR==1{print$1}')"
|
|
LIBO_REPO="$(apt-cache policy | \
|
|
awk '/libreoffice/{print$2}' | \
|
|
awk -F "/" 'NR==1{print$4}')"
|
|
MPV_REPO="$(apt-cache policy | \
|
|
awk '/mpv/{print$2}' | \
|
|
awk -F "/" 'NR==1{print$5}')"
|
|
HB_REPO="$(apt-cache policy | \
|
|
awk '/handbrake/{print$2}' | \
|
|
awk -F "/" 'NR==1{print$5}')"
|
|
X2GO_REPO="$(apt-cache policy | \
|
|
awk '/x2go/{print$2}' | \
|
|
awk -F "/" 'NR==1{print$5}')"
|
|
|
|
##Custom locale
|
|
lcl="$(env|awk -F ':' '/LANGUAGE/{print$2}')"
|
|
mfv-path="/usr/share/application/mate-font-viewer.desktop"
|
|
|
|
# == Setup ==
|
|
echo "Remove discouraged packages from system..."
|
|
remove_bundle_packages "celluloid \
|
|
evolution \
|
|
pidgin \
|
|
snapd \
|
|
transmission-gtk \
|
|
viewnior"
|
|
|
|
echo "Removing unused snap bits."
|
|
if [ -d $HOME/snap ]; then
|
|
rm -rf $HOME/snap
|
|
fi
|
|
|
|
# Remove unnecesary locales
|
|
if [ "$(lsb_release -si)" = "Trisquel" ]; then
|
|
abrowser_l10n="$(apt-cache search abrowser-locale|awk '{print$1}'|xargs)"
|
|
ab_l10n_array=( $abrowser_l10n )
|
|
for a in "${ab_l10n_array[@]}"; do
|
|
if [ "$(dpkg-query -W -f='${Status}' $a 2>/dev/null | grep -c "ok installed")" == "0" ]; then
|
|
echo " > Package $a is not installed.">/dev/null
|
|
elif [ $a != abrowser-locale-$lcl ] && [ $a != abrowser-locale-en ]; then
|
|
echo " > Add package $a to the remove list"
|
|
rAbrowser="$rAbrowser $a"
|
|
else
|
|
echo "> Keeping $a..."
|
|
fi
|
|
done
|
|
|
|
if [ "$(wc -w <<< $rAbrowser)" = "0" ]; then
|
|
echo "Nothing to remove..."
|
|
else
|
|
echo "Removing abrowser locale packages..."
|
|
sudo apt-get -y remove $rAbrowser
|
|
fi
|
|
#--
|
|
sudo apt-get -y remove "icedove-locale-*[!(en|$lcl)]"
|
|
sudo apt-get -y remove "libreoffice-l10n-*[!(en|$lcl)]"
|
|
fi
|
|
|
|
#Enable backports
|
|
if [ -z $BACKPORTS ]; then
|
|
sudo sed -i '/-backports/s|#deb|deb|g' /etc/apt/sources.list
|
|
sudo sed -i '/-backports/s|# deb|deb|g' /etc/apt/sources.list
|
|
fi
|
|
|
|
install_bundle_packages "apt-file \
|
|
clementine \
|
|
cheese \
|
|
filezilla \
|
|
font-manager \
|
|
git \
|
|
gimp \
|
|
gnome-disk-utility \
|
|
gstreamer1.0-plugins-bad \
|
|
gthumb \
|
|
kolourpaint4 \
|
|
mpv \
|
|
pdfarranger \
|
|
synaptic \
|
|
terminator \
|
|
thunderbird \
|
|
trisquel-codecs \
|
|
unar \
|
|
vlc \
|
|
vokoscreen"
|
|
sudo apt-file update
|
|
|
|
#Devel env
|
|
if [ "$OFFICE_USE" = "no" ]; then
|
|
install_bundle_packages "audacity \
|
|
bmon \
|
|
deluge \
|
|
exfalso \
|
|
geany \
|
|
htop \
|
|
inkscape \
|
|
iperf \
|
|
jq"
|
|
|
|
sudo apt-get install -y --no-install-recommends texlive-extra-utils
|
|
fi
|
|
|
|
# Install custom software
|
|
## - libreoffice
|
|
if [ "$(lsb_release -si)" = "Ubuntu" ] && [ -z "$LIBO_REPO" ]; then
|
|
echo "Installing LibreOffice Fresh"
|
|
sudo apt-key adv -q --keyserver keyserver.ubuntu.com --recv-keys "$gpg_libo"
|
|
echo "deb http://ppa.launchpad.net/libreoffice/ppa/ubuntu ${DIST} main
|
|
deb-src http://ppa.launchpad.net/libreoffice/ppa/ubuntu ${DIST} main" | \
|
|
sudo tee /etc/apt/sources.list.d/libo-fresh.list
|
|
fi
|
|
sudo apt-get update -q2
|
|
rm -rf $HOME/.config/libreoffice/
|
|
sudo apt-get -yq install libreoffice
|
|
|
|
## - x2go - desktopsharing
|
|
if [ -z "$X2GO_REPO" ]; then
|
|
echo "Installing x2go PPA"
|
|
sudo apt-key adv -q --keyserver keyserver.ubuntu.com --recv-keys "$gpg_x2go"
|
|
echo "deb http://ppa.launchpad.net/x2go/stable/ubuntu ${DIST} main
|
|
deb-src http://ppa.launchpad.net/x2go/stable/ubuntu ${DIST} main" | \
|
|
sudo tee /etc/apt/sources.list.d/x2go.list
|
|
fi
|
|
sudo apt-get update -q2
|
|
sudo apt-get -yq install x2goserver-desktopsharing x2goclient
|
|
|
|
## - mpv
|
|
if [ -z "$MPV_REPO" ]; then
|
|
echo "Installing MPV PPA"
|
|
sudo apt-key adv -q --keyserver keyserver.ubuntu.com --recv-keys "$gpg_mpv"
|
|
echo "deb http://ppa.launchpad.net/mc3man/mpv-tests/ubuntu ${DIST} main
|
|
deb-src http://ppa.launchpad.net/mc3man/mpv-tests/ubuntu ${DIST} main" | \
|
|
sudo tee /etc/apt/sources.list.d/mpv-ppa.list
|
|
fi
|
|
sudo apt-get update -q2
|
|
sudo apt-get -yq install mpv
|
|
|
|
# - handbreak
|
|
if [ "$(lsb_release -si)" = "Ubuntu" ] && [ -z "$HB_REPO" ]; then
|
|
echo "Installing Handbreak PPA"
|
|
sudo apt-key adv -q --keyserver keyserver.ubuntu.com --recv-keys "$gpg_hb"
|
|
echo "deb http://ppa.launchpad.net/stebbins/handbrake-releases/ubuntu $DIST main
|
|
deb-src http://ppa.launchpad.net/stebbins/handbrake-releases/ubuntu $DIST main" | \
|
|
sudo tee /etc/apt/sources.list.d/hb-ppa.list
|
|
fi
|
|
sudo apt-get update -q2
|
|
sudo apt -yq install handbrake-gtk
|
|
|
|
# YouTube-DL
|
|
if [ -L /usr/bin/youtube-dl ] || \
|
|
[ -f /usr/local/bin/youtube-dl ]; then
|
|
echo "Seems youtube-dl is already installed terminal..."
|
|
sudo youtube-dl -U
|
|
else
|
|
sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
|
|
sudo chmod a+rx /usr/local/bin/youtube-dl
|
|
sudo mv /usr/bin/youtube-dl /usr/bin/youtube-dl.dist.orig
|
|
sudo ln -s /usr/local/bin/youtube-dl /usr/bin/youtube-dl
|
|
if [ ! -f /usr/bin/python ]; then
|
|
sudo ln -s /usr/bin/python3 /usr/local/bin/python
|
|
else
|
|
echo "Python seems in place"
|
|
fi
|
|
fi
|
|
|
|
# Further customization
|
|
## Hardcode Terminator
|
|
if [ "$(mate-terminal -v 2>/dev/null | grep -c "terminator")" == "1" ]; then
|
|
echo "Terminator is already the default terminal..."
|
|
else
|
|
sudo mv /usr/bin/mate-terminal /usr/bin/mate-terminal.orig
|
|
sudo ln -s /usr/bin/terminator /usr/bin/mate-terminal
|
|
fi
|
|
|
|
# Disable mate-font-viewer
|
|
if [ -f "$mfv-path" ]; then
|
|
mv $mfv-path ${mfv-path}-dpkg-original
|
|
fi
|
|
|
|
## inotify_watch 2^18 (default 8192)
|
|
sudo sysctl -w fs.inotify.max_user_watches=262144
|
|
set_once "fs.inotify.max_user_watches=262144" "/etc/sysctl.conf"
|
|
|
|
# AI binaries
|
|
## Nextcloud
|
|
if [ "$NC_APPIMAGE" = "yes" ]; then
|
|
if [ ! -f $HOME/AI/$NCAppImageBIN ];then
|
|
echo "Setting Nextcloud AppImage"
|
|
mkdir ~/AI
|
|
cd ~/AI
|
|
wget -cP /tmp $NC_ASC
|
|
wget -c $NCAppImageDL
|
|
if [ "$(lsb_release -sc)" = "focal" ] || \
|
|
[ "$(lsb_release -sc)" = "nabia" ]; then
|
|
nc_fpr="$(gpg --show-keys /tmp/nextcloud.asc|awk '!/[psub]/{print$1}'|awk NF)"
|
|
elif [ "$(lsb_release -sc)" = "bionic" ] || \
|
|
[ "$(lsb_release -sc)" = "etiona" ]; then
|
|
nc_fpr="$(gpg 2>/dev/null /tmp/nextcloud.asc|awk '!/[psub]/{print$1}'|awk NF)"
|
|
fi
|
|
gpg --import /tmp/nextcloud.asc
|
|
echo -e "5\ny\n" | gpg --command-fd 0 --expert --edit-key $nc_fpr trust
|
|
|
|
echo "
|
|
|------------------ Checking Nextcloud AI client GPG Signature ------------------|"
|
|
gpg --verify $NCAppImageASC $NCAppImageBIN
|
|
echo " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|--------------------------------------------------------------------------------|
|
|
"
|
|
chmod +x $NCAppImageBIN
|
|
rm /tmp/nextcloud.asc
|
|
rm $NCAppImageASC
|
|
else
|
|
echo "Nextcloud AppImage seems already there, skiping..."
|
|
fi
|
|
fi
|
|
|
|
## kdenlive
|
|
if [ "$KDEN_APPIMAGE" = "yes" ]; then
|
|
if [ ! -f $HOME/AI/$KDENLIVE_BIN ];then
|
|
echo "Setting kdenlive AppImage"
|
|
mkdir ~/AI
|
|
cd ~/AI
|
|
wget -c $KDENLIVE_LATEST_APPIMAGE
|
|
wget -c $KDENLIVE_LATEST_APPIMAGE.sha256 -O SHA256SUMS
|
|
echo "
|
|
|------------------ Checking kdelive AI client sha256 ------------------|"
|
|
sha256sum -c SHA256SUMS
|
|
echo "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|-----------------------------------------------------------------------|
|
|
"
|
|
chmod +x $KDENLIVE_BIN
|
|
rm SHA256SUMS
|
|
else
|
|
echo "kdenlive AppImage seems already there, skiping..."
|
|
fi
|
|
fi
|
|
|
|
#Change background
|
|
change_background Ubuntu /usr/share/backgrounds/ubuntu-mate-photos/sebastian-muller-52.jpg
|
|
change_background Trisquel /usr/share/backgrounds/belenos3.png
|
|
|
|
echo -e "\n# Final upgrade..."
|
|
sudo apt-get update -q2
|
|
sudo apt-get -y dist-upgrade
|
|
sudo apt-get -y autoremove
|
|
sudo apt-get clean
|
|
|
|
echo "Rebooting in..."
|
|
wait_seconds 15
|