You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

303 lines
10 KiB

#!/bin/bash
## FUNCTIONS
## ---------
function trap_error() {
error_code=$1
error_line=$2
printf "\nEXIT #${error_code} due to error at line ${error_line} : \n-----------------------------------------\n"
sed "${error_line}q;d" $0
echo
exit $error_code
}
function runVoid() {
trap - ERR
local COMMAND="$@"
bash -c "${COMMAND}" >/dev/null 2>&1
runVoidError=$?
trap 'trap_error $? $LINENO' ERR
}
function askConfirmation() {
case "$1" in
y | Y | yes | YES)
QUESTION="(Y/n)?"
DEFAULT=0
;;
*)
QUESTION="(y/N)?"
DEFAULT=1
;;
esac
read -p "$QUESTION : " choice
case "$choice" in
y | Y | yes | YES) return 0 ;; #true
n | no | N | NO) return 1 ;; #false
*) return $DEFAULT ;;
esac
}
# Variables and constants
## ---------
BASEDIR=/opt/debian-gnome
ALLOWED_USERS=$(id -un) #CUSTOMIZE if needed!
REQUIRED_PACKAGES=(
vim git wget
python3 python3-pip
gir1.2-gtop-2.0
htop tilix jq unzip
tilix bash-completion
nextcloud-desktop nautilus-nextcloud nautilus-share nautilus-image-converter
wl-clipboard
cups
)
## MAIN
## ---------
[ $(id -u) -eq 0 ] && echo 'normal user required' && exit -1
echo "# updating repositories"
echo "==================="
if [[ $(date --date='-12 hours' +%s) -gt $(date -d "$(stat -c %y /var/lib/apt/lists/partial)" +%s) ]]; then
sudo apt update
sudo apt autoremove -y
else
echo "repositories recently updated!"
fi
echo "# required packages"
echo "==================="
for package in ${REQUIRED_PACKAGES[@]}; do
runVoid dpkg-query --status $package
if [ $runVoidError -ne 0 ]; then
echo -n "installing package <$package> ... "
sudo DEBIAN_FRONTEND=noninteractive apt install -y $package
echo "DONE"
fi
done
#echo "## remove hplip annoyance"
#echo "========================="
#if [[ -f /etc/xdg/autostart/hplip-systray.desktop ]]; then
# sudo rm /etc/xdg/autostart/hplip-systray.desktop
#else
# echo "hplip annoyance already removed!"
#fi
echo "## debian-bash"
echo "=============="
if [[ ! -d /opt/debian-bash ]]; then
curl https://git.artcode.re/pvincent/debian-bash/raw/branch/master/install.sh | sudo bash -s -- --host
else
echo "debian-bash already installed!"
fi
echo "## openssh-server"
echo "================="
PGKNAME='openssh-server'
runVoid dpkg-query --status $PGKNAME
if [ $runVoidError -ne 0 ]; then
set -e
sudo apt install -y $PGKNAME
sudo /opt/debian-bash/tools/append_or_replace "^#\?PermitRootLogin.*$" "PermitRootLogin no" /etc/ssh/sshd_config
sudo /opt/debian-bash/tools/append_or_replace "^#\?PasswordAuthentication.*$" "PasswordAuthentication no" /etc/ssh/sshd_config
sudo /opt/debian-bash/tools/append_or_replace "^#\?AllowUsers.*$" "AllowUsers $ALLOWED_USERS" /etc/ssh/sshd_config
sudo systemctl restart sshd
set +e
else
echo "${PGKNAME} already installed!"
fi
echo "## allow hotplug eth0"
echo "====================="
if [[ $(grep 'auto eth0' /etc/network/interfaces.d/setup) ]]; then
sudo /opt/debian-bash/tools/append_or_replace "^auto eth0.*$" "allow-hotplug eth0" /etc/network/interfaces.d/setup
else
echo "allow-hotplug already set up"
fi
echo "## firefox latest"
echo "================="
if [[ ! /usr/local/bin/firefox -ef /opt/firefox/firefox ]]; then
set -e
cd /tmp
wget $(curl 'https://download.mozilla.org/?product=firefox-latest-ssl&os=linux64&lang=en-US' | cut -d '"' -f2) -O firefox-latest.tar.bz2
sudo mkdir /opt/firefox -p
sudo chown $USER /opt/firefox
tar -xjf firefox-latest.tar.bz2 -C /opt
cat <<EOF | sudo tee -a /usr/share/applications/firefox-stable.desktop
[Desktop Entry]
Name=Firefox Stable
Comment=Web Browser
Exec=/opt/firefox/firefox %u
Terminal=false
Type=Application
Icon=/opt/firefox/browser/chrome/icons/default/default128.png
Categories=Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/vnd.mozilla.xul+xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;
StartupNotify=true
StartupWMClass=Firefox
EOF
sudo ln -s /opt/firefox/firefox /usr/local/bin/firefox
sudo update-alternatives --install /usr/bin/x-www-browser x-www-browser /opt/firefox/firefox 200 && sudo update-alternatives --set x-www-browser /opt/firefox/firefox
sudo apt remove -y firefox-esr
set +e
else
echo "firefox latest already installed!"
fi
echo "## firefox by default"
echo "====================="
xdg-settings set default-web-browser firefox-stable.desktop
echo "## disable apparmor evince"
echo "=========================="
if [[ ! -L /etc/apparmor.d/disable/usr.bin.evince ]]; then
sudo ln -s /etc/apparmor.d/usr.bin.evince /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/disable/usr.bin.evince
else
echo "evince apparmor already disabled!"
fi
echo "## gnome default settings"
echo "============="
#gsettings set org.gnome.settings-daemon.peripherals.keyboard remember-numlock-state true
gsettings set org.gnome.desktop.interface clock-show-date true
gsettings set org.gnome.nautilus.preferences click-policy 'single'
gsettings set org.gnome.mutter dynamic-workspaces false
gsettings set org.gnome.desktop.wm.preferences num-workspaces 1
gsettings set org.gnome.desktop.peripherals.touchpad tap-to-click true
gsettings set org.gnome.shell.extensions.netspeed use-bytes true
echo "## favorite apps"
echo "================"
favorite_apps=$(gsettings get org.gnome.shell favorite-apps)
if [[ "$favorite_apps" == "['firefox-esr.desktop', 'org.gnome.Evolution.desktop', 'rhythmbox.desktop', 'libreoffice-writer.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'yelp.desktop']" ]]; then
gsettings set org.gnome.shell favorite-apps "['org.gnome.Nautilus.desktop','firefox-stable.desktop','org.gnome.Software.desktop']"
fi
echo "## gnome-extensions-cli"
echo "======================="
runVoid command gnome-extensions-cli
if [[ $runVoidError -ne 0 ]]; then
sudo pip3 install gnome-extensions-cli
else
echo "gnome-extensions-cli already installed!"
fi
echo "## gnome-shell install several extensions"
echo "========================================="
EXTENSIONS=(
"appindicatorsupport@rgcjonas.gmail.com"
"system-monitor@paradoxxx.zero.gmail.com"
"dash-to-dock@micxgx.gmail.com"
"netspeed@hedayaty.gmail.com"
)
NEED_GNOME_SHELL_RESTART=false
for extension in "${EXTENSIONS[@]}"; do
if [[ ! -d $HOME/.local/share/gnome-shell/extensions/$extension ]]; then
NEED_GNOME_SHELL_RESTART=true
gnome-extensions-cli --backend file install $extension
if [[ -d $HOME/.local/share/gnome-shell/extensions/$extension/schemas ]]; then
sudo cp $HOME/.local/share/gnome-shell/extensions/$extension/schemas/*.gschema.xml /usr/share/glib-2.0/schemas/
sudo glib-compile-schemas /usr/share/glib-2.0/schemas/
fi
else
echo "extension <${extension}> already installed!"
fi
done
echo "# gnome extra settings"
echo "======================"
gsettings set org.gnome.shell.extensions.system-monitor show-tooltip true
gsettings set org.gnome.shell.extensions.system-monitor cpu-show-text false
gsettings set org.gnome.shell.extensions.system-monitor cpu-graph-width 60
gsettings set org.gnome.shell.extensions.system-monitor memory-display false
gsettings set org.gnome.shell.extensions.system-monitor net-display false
gsettings set org.gnome.shell.extensions.system-monitor disk-display false
gsettings set org.gnome.shell.extensions.system-monitor icon-display false
gsettings set org.gnome.shell.extensions.netspeed show-sum true
gsettings set org.gnome.shell.extensions.dash-to-dock dock-fixed true
gsettings set org.gnome.shell.extensions.dash-to-dock apply-custom-theme true
gsettings set org.gnome.shell.extensions.dash-to-dock extend-height true
gsettings set org.gnome.shell.extensions.dash-to-dock multi-monitor true
echo "# firefox addons"
echo "================"
declare -A FIREFOX_ADDONS
FIREFOX_ADDONS['uBlock0@raymondhill.net']="3740966/ublock_origin-1.34.0-an+fx.xpi"
FIREFOX_ADDONS['fr-dicollecte@dictionaries.addons.mozilla.org']='3581786/dictionnaire_francais-7.0b.xpi'
FIREFOX_ADDONS['chrome-gnome-shell@gnome.org']='898030/gnome_shell_integration-10.1-an+fx-linux.xpi'
FIREFOX_ADDONS['jid1-ZAdIEUB7XOzOJw@jetpack']='3741831/duckduckgo_privacy_essentials-2021.3.8-an+fx.xpi'
mkdir -p /opt/firefox/distribution/extensions
for addon_id in "${!FIREFOX_ADDONS[@]}"; do
addon_part_url="${FIREFOX_ADDONS[$addon_id]}"
addon_xpi="/opt/firefox/distribution/extensions/${addon_id}.xpi"
if [[ ! -f "$addon_xpi" ]]; then
echo -n "Firefox addon <$addon_id> installing ..."
wget -q "https://addons.mozilla.org/firefox/downloads/file/${addon_part_url}" -O $addon_xpi
echo DONE
else
echo "Firefox addon <$addon_id> already installed!"
fi
done
echo "# Firefox default settings"
echo "#========================="
if [[ ! -f /opt/firefox/firefox.cfg ]]; then
cat <<EOF | sudo tee -a /opt/firefox/firefox.cfg
// IMPORTANT: Start your code on the 2nd line
lockPref("browser.pocket.enabled", false);
lockPref("extensions.pocket.enabled", false);
lockPref("browser.shell.checkDefaultBrowser", false);
EOF
cat <<EOF | sudo tee -a /opt/firefox/defaults/pref/autoconfig.js
pref("general.config.filename", "firefox.cfg");
pref("general.config.obscure_value", 0);
EOF
else
echo "Firefox default settings already defined!"
fi
echo "# favourite apps"
echo "#==============="
runVoid "gsettings get org.gnome.shell favorite-apps | grep firefox-esr"
if [[ "$runVoidError" == 0 ]]; then
gsettings set org.gnome.shell favorite-apps "['org.gnome.Nautilus.desktop','firefox-stable.desktop','org.gnome.Software.desktop']"
else
echo "preserve existing apps!"
fi
echo
echo
echo "# DEBIAN-GNOME successfully installed!"
echo
if [[ $NEED_GNOME_SHELL_RESTART == true ]]; then
#INTERESTING: nested wayland!!!
#dbus-run-session -- gnome-shell --nested --wayland
zenity --question --title "Rechargement de la session demandée" --width 600 --text "Des extensions GNOME ont été rajoutées à votre session.\n Voulez-vous rechargez votre session pour voir les changements ?" --timeout 10
case $? in
0)
echo "You answered yes"
killall -3 gnome-shell
;;
1) echo "You answered no" ;;
5) echo "Time out" ;;
*) echo "Unexpected!" ;;
esac
fi