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.
		
		
		
		
		
			
		
			
				
					
					
						
							380 lines
						
					
					
						
							13 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							380 lines
						
					
					
						
							13 KiB
						
					
					
				
								#!/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 ! command -v upgrade-miaou-bash >/dev/null; then
							 | 
						|
								    curl https://git.artcode.re/miaou/miaou-bash/raw/branch/main/install.sh | sudo bash -s
							 | 
						|
								else
							 | 
						|
								    echo "miaou-bash already installed!"
							 | 
						|
								    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|es ]] && firefox_lang="en-US"
							 | 
						|
								echo "$firefox_lang"
							 | 
						|
								if [[ ! /usr/local/bin/firefox -ef /opt/firefox/firefox ]]; then
							 | 
						|
								    set -e
							 | 
						|
								    cd /tmp
							 | 
						|
								    firefox_archive_url=$(curl -s "https://download.mozilla.org/?product=firefox-latest-ssl&os=linux64&lang=$firefox_lang" | cut -d '"' -f2)
							 | 
						|
								    wget "$firefox_archive_url"
							 | 
						|
								    firefox_archive=${firefox_archive_url##*/}
							 | 
						|
								    sudo mkdir /opt/firefox -p
							 | 
						|
								    sudo chown $USER /opt/firefox
							 | 
						|
								    tar -xf "$firefox_archive" -C /opt
							 | 
						|
								    cat <<EOF | sudo tee -a /usr/share/applications/firefox.desktop
							 | 
						|
								[Desktop Entry]
							 | 
						|
								Name=Firefox
							 | 
						|
								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=Navigator
							 | 
						|
								Actions=new-window;new-private-window;profile-manager;
							 | 
						|
								
							 | 
						|
								[Desktop Action new-window]
							 | 
						|
								Name=New Window
							 | 
						|
								Exec=/opt/firefox/firefox --new-window %u
							 | 
						|
								
							 | 
						|
								[Desktop Action new-private-window]
							 | 
						|
								Name=New Private Window
							 | 
						|
								Exec=/opt/firefox/firefox --private-window %u
							 | 
						|
								
							 | 
						|
								[Desktop Action profile-manager]
							 | 
						|
								Name=Profile Manager
							 | 
						|
								Exec=/opt/firefox/firefox -P %u
							 | 
						|
								EOF
							 | 
						|
								    sudo ln -sf /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
							 | 
						|
								    sudo apt install -y libdbus-glib-1-2
							 | 
						|
								    set +e
							 | 
						|
								else
							 | 
						|
								    echo "firefox latest already installed!"
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								echo "## firefox by default"
							 | 
						|
								echo "====================="
							 | 
						|
								xdg-settings set default-web-browser firefox.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 "## prevent displaying desktop entries (gnome-terminal replaced by tilix)"
							 | 
						|
								echo "========================================================================"
							 | 
						|
								if [[ ! -f $HOME/.local/share/applications/org.gnome.Terminal.desktop ]]; then
							 | 
						|
								    cat << 'EOF' > ~/.local/share/applications/org.gnome.Terminal.desktop
							 | 
						|
								[Desktop Entry]
							 | 
						|
								Name=Terminal
							 | 
						|
								Exec=gnome-terminal
							 | 
						|
								NoDisplay=true
							 | 
						|
								Icon=org.gnome.Terminal
							 | 
						|
								Type=Application
							 | 
						|
								Categories=GNOME;GTK;System;TerminalEmulator;
							 | 
						|
								StartupNotify=true
							 | 
						|
								StartupWMClass=Gnome-terminal
							 | 
						|
								X-GNOME-SingleWindow=false
							 | 
						|
								OnlyShowIn=GNOME;Unity;
							 | 
						|
								EOF
							 | 
						|
								else
							 | 
						|
								    echo Tilix already set up!
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								echo "## disable automatic lock screen => 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"
							 | 
						|
								
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								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/
							 | 
						|
								    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 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 <<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 "# libre_re pixmap"
							 | 
						|
								echo "================="
							 | 
						|
								if [[ ! -f /usr/share/pixmaps/faces/libre_re.png ]]; then
							 | 
						|
								    sudo curl -o /usr/share/pixmaps/faces/libre_re.png "$GIT_BASE_URL/raw/branch/master/lib/pixmap/libre_re.png"
							 | 
						|
								    dbus-send --system --dest=org.freedesktop.Accounts  \
							 | 
						|
								    --type=method_call --print-reply \
							 | 
						|
								    /org/freedesktop/Accounts/User$(id -u) \
							 | 
						|
								    org.freedesktop.Accounts.User.SetIconFile \
							 | 
						|
								    string:"/usr/share/pixmaps/faces/libre_re.png"
							 | 
						|
								else
							 | 
						|
								    echo "pixmap already copied!"
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								echo
							 | 
						|
								echo
							 | 
						|
								echo "# DEBIAN-GNOME successfully installed!"
							 | 
						|
								echo
							 |