2 changed files with 603 additions and 0 deletions
			
			
		- 
					273src/bookworm
 - 
					330src/bullseye
 
@ -0,0 +1,273 @@ | 
			
		|||||
 | 
				#!/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=( | 
			
		||||
 | 
				    bash-completion | 
			
		||||
 | 
				    vim git wget curl | 
			
		||||
 | 
				    htop jq unzip | 
			
		||||
 | 
				    tilix wl-clipboard  | 
			
		||||
 | 
				    nextcloud-desktop nautilus-nextcloud nautilus-share nautilus-image-converter | 
			
		||||
 | 
				    cups hplip | 
			
		||||
 | 
				    ttf-mscorefonts-installer | 
			
		||||
 | 
				) | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				## MAIN | 
			
		||||
 | 
				## --------- | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				[ $(id -u) -eq 0 ] && echo 'normal user required' && exit -1 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				echo "# configure apt sources to the mithril's" | 
			
		||||
 | 
				echo "========================================" | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				if ! grep -q debian.mithril.re /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 "===================" | 
			
		||||
 | 
				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 "## 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 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				firefox_lang=$(echo $LANG | cut -d. -f1 | tr "_" "-") | 
			
		||||
 | 
				echo $firefox_lang | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				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=$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 <<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 "## gnome default settings" | 
			
		||||
 | 
				echo "=============" | 
			
		||||
 | 
				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 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				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 "=======================" | 
			
		||||
 | 
				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@paradoxxx.zero.gmail.com" | 
			
		||||
 | 
				    "dash-to-dock@micxgx.gmail.com" | 
			
		||||
 | 
				    "gsconnect@andyholmes.github.io" | 
			
		||||
 | 
				) | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				for extension in "${EXTENSIONS[@]}"; do | 
			
		||||
 | 
				    if [[ ! -d $HOME/.local/share/gnome-shell/extensions/$extension ]]; then | 
			
		||||
 | 
				        ~/.local/bin/gext install "$extension" | 
			
		||||
 | 
						sudo cp $HOME/.local/share/gnome-shell/extensions/$extension/schemas/*.gschema.xml /usr/share/glib-2.0/schemas/ | 
			
		||||
 | 
				    else | 
			
		||||
 | 
				        echo "extension <${extension}> already installed!" | 
			
		||||
 | 
				    fi | 
			
		||||
 | 
				done | 
			
		||||
 | 
				sudo glib-compile-schemas /usr/share/glib-2.0/schemas/ | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				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 true | 
			
		||||
 | 
				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 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 | 
			
		||||
 | 
				
 | 
			
		||||
@ -0,0 +1,330 @@ | 
			
		|||||
 | 
				#!/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 hplip | 
			
		||||
 | 
				    ttf-mscorefonts-installer | 
			
		||||
 | 
				) | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				## MAIN | 
			
		||||
 | 
				## --------- | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				[ $(id -u) -eq 0 ] && echo 'normal user required' && exit -1 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				echo "# configure apt sources to the mithril's" | 
			
		||||
 | 
				echo "========================================" | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				if ! grep -q debian.mithril.re /etc/apt/sources.list; then | 
			
		||||
 | 
				    echo "deb http://debian.mithril.re/debian bullseye main contrib non-free" | sudo tee /etc/apt/sources.list | 
			
		||||
 | 
				    echo "deb http://debian.mithril.re/debian bullseye-updates main contrib non-free" | sudo tee -a /etc/apt/sources.list | 
			
		||||
 | 
				    echo "deb http://debian.mithril.re/debian-security/ bullseye-security main contrib non-free" | 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 "===================" | 
			
		||||
 | 
				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 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				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" | 
			
		||||
 | 
				    "gsconnect@andyholmes.github.io" | 
			
		||||
 | 
				) | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				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/ | 
			
		||||
 | 
				        fi | 
			
		||||
 | 
				    else | 
			
		||||
 | 
				        gnome-extensions-cli --backend file update "$extension" | 
			
		||||
 | 
				        echo "extension <${extension}> already installed!" | 
			
		||||
 | 
				    fi | 
			
		||||
 | 
				done | 
			
		||||
 | 
				sudo glib-compile-schemas /usr/share/glib-2.0/schemas/ # recompile each time | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				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.netspeed use-bytes 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 "# AppImageLauncher" | 
			
		||||
 | 
				echo "#===============" | 
			
		||||
 | 
				# TEST ABSENCE | 
			
		||||
 | 
				if [[ ! $(dpkg -l | grep appimagelauncher) ]]; then | 
			
		||||
 | 
				    # INSTALL | 
			
		||||
 | 
				    wget https://github.com/TheAssassin/AppImageLauncher/releases/download/v2.2.0/appimagelauncher_2.2.0-travis995.0f91801.bionic_amd64.deb -O /tmp/appimagelauncher.deb | 
			
		||||
 | 
				    sudo dpkg -i /tmp/appimagelauncher.deb | 
			
		||||
 | 
				else | 
			
		||||
 | 
				    # ELSE ALREADY INSTALLED | 
			
		||||
 | 
				    echo "AppImageLauncher already installed!" | 
			
		||||
 | 
				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 | 
			
		||||
 | 
				    trap - ERR | 
			
		||||
 | 
				    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 | 
			
		||||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue