#!//usr/bin/env bash ## CONSTANTS ## --------- GIT_BASE_URL="https://git.artcode.re/pvincent/debian-gnome" BASEDIR=$(readlink -f "$(dirname "$0")/..") ALLOWED_USERS=$(id -un) #CUSTOMIZE if needed! REQUIRED_PACKAGES=( bash-completion vim git wget curl htop jq unzip ) ## 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 } function upgrade { 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 } function apt_required_packages { 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 } function fix_input_sources { 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 } function miaou_bash { 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 } function openssh { echo "## openssh-server" echo "=================" echo TODO... # 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 } function faster_grub { 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 } function true_firefox { echo "## firefox latest" echo "=================" firefox_lang=$(echo $LANG | cut -d. -f1) [[ $firefox_lang =~ C|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 < ~/.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 TODO: configure Tilix echo 'dconf load /com/gexperts/Tilix/ < tilix.dconf' } function no_lock_screen { 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 } function favorite_apps { 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 } function golden_dict { 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 } function gnome_extensions { echo "## gnome-shell install several extensions" echo "=========================================" curl https://mise.run | sh echo "eval \"\$(/home/pvincent/.local/bin/mise activate bash)\"" >> ~/.bashrc source ~/.bashrc mise install python mise use -g python mise exec -- pip3 install --upgrade gnome-extensions-cli echo APPINDICATOR echo Alignment: left echo DASH TO DOCK echo icon size: 58 echo apparence: default theme echo RUNCAT echo idle threshold: 66 EXTENSIONS=( "dash-to-dock@micxgx.gmail.com" "appindicatorsupport@rgcjonas.gmail.com" "runcat@kolesnikov.se" ) for extension in "${EXTENSIONS[@]}"; do if [[ ! -d $HOME/.local/share/gnome-shell/extensions/$extension ]]; then 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 } function firefox_addons { 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 } function firefox_settings { echo "# Firefox default settings" echo "#=========================" if [[ ! -f /opt/firefox/firefox.cfg ]]; then cat <