#!/bin/bash ## CONSTANTS ## --------- GIT_BASE_URL="https://git.artcode.re/pvincent/debian-gnome" ## 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=$(readlink -f "$(dirname "$0")/..") ALLOWED_USERS=$(id -un) #CUSTOMIZE if needed! REQUIRED_PACKAGES=( bash-completion vim git wget curl htop jq unzip python3-pip gir1.2-gtop-2.0 gir1.2-nm-1.0 gir1.2-clutter-1.0 gnome-system-monitor tilix wl-clipboard cups hplip ttf-mscorefonts-installer nautilus-share nautilus-image-converter goldendict ) ## MAIN ## --------- [ "$(id -u)" -eq 0 ] && echo 'normal user required' && exit 1 echo "# configure apt sources to the mithril's" echo "========================================" if grep cdrom /etc/apt/sources.list; then echo "deb http://debian.mithril.re/debian bookworm main contrib non-free-firmware" | sudo tee /etc/apt/sources.list echo "deb http://debian.mithril.re/debian bookworm-updates main contrib non-free-firmware" | sudo tee -a /etc/apt/sources.list echo "deb http://debian.mithril.re/debian-security bookworm-security main contrib non-free-firmware" | sudo tee -a /etc/apt/sources.list sudo apt update sudo apt autoremove -y else 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 fi echo "# required packages" echo "===================" sudo apt-add-repository contrib non-free -y 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 "# fix input sources containing french variants" echo "==============================================" if gsettings get org.gnome.desktop.input-sources sources | grep fr+; then gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'fr')]" echo no more french variant found, fixed else echo no french variant found, ok! fi echo "## miaou-bash" echo "==============" if [[ ! -d /opt/miaou-bash ]]; then curl https://git.artcode.re/miaou/miaou-bash/raw/branch/main/install.sh | sudo bash -s else echo "miaou-bash already installed!" /opt/miaou-bash/tools/upgrade-miaou-bash 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/miaou-bash/tools/append_or_replace "^#\?PermitRootLogin.*$" "PermitRootLogin no" /etc/ssh/sshd_config sudo /opt/miaou-bash/tools/append_or_replace "^#\?PasswordAuthentication.*$" "PasswordAuthentication no" /etc/ssh/sshd_config sudo /opt/miaou-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 "## grub faster and smarter" echo "==========================" if grep -q GRUB_TIMEOUT=5 /etc/default/grub; then echo "grub was not modified yet, applying changes..." sudo /opt/miaou-bash/tools/append_or_replace "^GRUB_TIMEOUT=5$" "GRUB_TIMEOUT=0" /etc/default/grub sudo update-grub echo OK else echo changes already done! fi echo "## firefox latest" echo "=================" firefox_lang=$(echo $LANG | cut -d_ -f1) [[ $firefox_lang == "en" ]] && firefox_lang="en-US" [[ $firefox_lang == "es" ]] && firefox_lang="en-US" echo $firefox_lang 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=$firefox_lang" | 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 < use Super_L for LOCK" echo "========================================================" gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type nothing gsettings set org.gnome.desktop.screensaver lock-enabled false 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 "['firefox.desktop','org.gnome.Nautilus.desktop','org.gnome.Software.desktop']" fi echo "## golden dict" echo "================" if [[ ! -d /usr/share/goldendict/dicts ]]; then sudo git clone --depth 1 https://git.artcode.re/non-free/dicts.git /usr/share/goldendict/dicts fi if [[ ! -f $HOME/.config/goldendict/config ]] || ! grep -q "path.*/usr/share/goldendict/dicts" $HOME/.config/goldendict/config; then mkdir -p "$HOME/.config/goldendict/" cp "$BASEDIR/lib/goldendict/config" "$HOME/.config/goldendict/" nohup goldendict & fi mkdir -p $HOME/.config/autostart if [[ ! -f $HOME/.config/autostart/org.goldendict.GoldenDict.desktop ]]; then echo -n "autostart GoldenDict ..." ln -sf /usr/share/applications/org.goldendict.GoldenDict.desktop $HOME/.config/autostart/ echo OK else echo "autostart GoldenDict already installed!" fi echo "## gnome-extensions-cli" echo "=======================" if [[ ! -f ~/.local/bin/gext ]]; then pip install gnome-extensions-cli --break-system-packages else echo "gnome-extensions-cli already installed!" fi echo "## gnome-shell install several extensions" echo "=========================================" EXTENSIONS=( "appindicatorsupport@rgcjonas.gmail.com" "system-monitor-next@paradoxxx.zero.gmail.com" "dash-to-dock@micxgx.gmail.com" "gsconnect@andyholmes.github.io" "network-stats@gnome.noroadsleft.xyz" "bluetooth-quick-connect@bjarosze.gmail.com" ) compile_schemas_needed=false for extension in "${EXTENSIONS[@]}"; do if [[ ! -d $HOME/.local/share/gnome-shell/extensions/$extension ]]; then "$HOME/.local/bin/gext" install "$extension" sudo cp "$HOME"/.local/share/gnome-shell/extensions/"$extension"/schemas/*.gschema.xml /usr/share/glib-2.0/schemas/ compile_schemas_needed=true else echo "extension <${extension}> already installed!" fi done if "$compile_schemas_needed"; then sudo glib-compile-schemas /usr/share/glib-2.0/schemas/ fi 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 net-show-text false gsettings set org.gnome.shell.extensions.system-monitor net-graph-width 40 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.dash-to-dock apply-custom-theme true gsettings set org.gnome.shell.extensions.dash-to-dock multi-monitor true gsettings set org.gnome.shell.extensions.network-stats display-bytes true if [[ $(gsettings get org.gnome.shell.extensions.network-stats show-icon) == "true" ]]; then gsettings set org.gnome.shell.extensions.network-stats show-icon false "$HOME/.local/bin/gext" disable network-stats@gnome.noroadsleft.xyz "$HOME/.local/bin/gext" enable network-stats@gnome.noroadsleft.xyz fi gsettings set org.gnome.shell.extensions.bluetooth-quick-connect keep-menu-on-toggle true gsettings set org.gnome.shell.extensions.bluetooth-quick-connect bluetooth-auto-power-on 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 <