diff --git a/src/trixie.sh b/src/trixie.sh index 904f010..d969623 100755 --- a/src/trixie.sh +++ b/src/trixie.sh @@ -8,206 +8,206 @@ LOGOUT_REQUIRED=false BASEDIR=$(readlink -f "$(dirname "$0")/..") ALLOWED_USERS=$(id -un) # CUSTOMIZE if needed! REQUIRED_PACKAGES=( - bash-completion - vim micro git wget - htop jq unzip tilix - zram-tools systemd-timesyncd + bash-completion + vim micro git wget + htop jq unzip tilix + zram-tools systemd-timesyncd ) # FUNCTIONS # --------- function trap_error() { - error_code=$1 - error_line=$2 + 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 + 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 + 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 + 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 + 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 + 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_system_lang { - echo "# fix system language" - echo "=====================" - - if grep -q ^LANG=C.UTF-8 /etc/default/locale; then - LANG='en_US.UTF-8' - if gsettings get org.gnome.desktop.input-sources sources | grep -q "'xkb', 'fr"; then - LANG='fr_FR.UTF-8' - else - if gsettings get org.gnome.desktop.input-sources sources | grep -q "'xkb', 'es"; then - LANG='es_ES.UTF-8' - fi - fi - - echo "fix found LANG=$LANG" - - cat << EOF | sudo tee /etc/locale.gen -$LANG UTF-8 -EOF - sudo locale-gen - sudo update-locale LANG=$LANG - - xdg-user-dirs-update --force - for entry in $(grep -v ^# /etc/xdg/user-dirs.defaults); do - key=$(echo $entry | cut -d= -f1) - default_value="$HOME/$(echo $entry | cut -d= -f2)" - real_value=$(xdg-user-dir $key) - if [[ $real_value != "$default_value" ]] && [[ -d $default_value ]] && [[ -z "$(ls -A $default_value)" ]]; then - rmdir $default_value - echo $default_value removed! - fi - done - echo > $HOME/.config/gtk-3.0/bookmarks - for i in DOCUMENTS DOWNLOAD; do - destination=$(xdg-user-dir $i) - echo file://$destination $(basename $destination) >> $HOME/.config/gtk-3.0/bookmarks - done + echo "# fix system language" + echo "=====================" + if grep -q ^LANG=C.UTF-8 /etc/default/locale; then + LANG='en_US.UTF-8' + if gsettings get org.gnome.desktop.input-sources sources | grep -q "'xkb', 'fr"; then + LANG='fr_FR.UTF-8' else - echo 'already fixed!' + if gsettings get org.gnome.desktop.input-sources sources | grep -q "'xkb', 'es"; then + LANG='es_ES.UTF-8' + fi fi - source /etc/default/locale - export LANG + echo "fix found LANG=$LANG" + + cat <$HOME/.config/gtk-3.0/bookmarks + for i in DOCUMENTS DOWNLOAD; do + destination=$(xdg-user-dir $i) + echo file://$destination $(basename $destination) >>$HOME/.config/gtk-3.0/bookmarks + done + + else + echo 'already fixed!' + fi + + source /etc/default/locale + export LANG } function fix_input_sources { - echo "# fix input sources containing french variants" - echo "==============================================" - if gsettings get org.gnome.desktop.input-sources sources | egrep -q 'fr\+|mozc-jp'; 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 "# fix input sources containing french variants" + echo "==============================================" + if gsettings get org.gnome.desktop.input-sources sources | egrep -q 'fr\+|mozc-jp'; 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 + 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 + 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 /opt/miaou-bash/tools/append_or_replace "^GRUB_CMDLINE_LINUX_DEFAULT=.*$" "GRUB_CMDLINE_LINUX_DEFAULT=\"quiet splash\"" /etc/default/grub - sudo update-grub - echo OK - else - echo changes already done! - 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 /opt/miaou-bash/tools/append_or_replace "^GRUB_CMDLINE_LINUX_DEFAULT=.*$" "GRUB_CMDLINE_LINUX_DEFAULT=\"quiet splash\"" /etc/default/grub + sudo update-grub + echo OK + else + echo changes already done! + fi } function install_firefox { - echo "## firefox latest" - echo "=================" - firefox_lang=$(echo $LANG | cut -d. -f1) - - case "$firefox_lang" in - fr*) firefox_lang=fr ;; - es*) firefox_lang=es-ES ;; - *) firefox_lang=en-US ;; - esac - echo "$firefox_lang" - - if [[ ! /usr/local/bin/firefox -ef /opt/firefox/firefox ]]; then - set -e - cd /tmp - - # https://download-installer.cdn.mozilla.net/pub/firefox/releases/146.0.1/linux-x86_64/en-US/firefox-146.0.1.tar.xz - firefox_version=$(curl -sI https://www.firefox.com/$firefox_lang/firefox/notes/ | grep location: | cut -d/ -f4) - firefox_archive_url="https://download-installer.cdn.mozilla.net/pub/firefox/releases/$firefox_version/linux-x86_64/$firefox_lang/firefox-$firefox_version.tar.xz" - echo $firefox_archive_url - - 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 + echo "## firefox latest" + echo "=================" + firefox_lang=$(echo $LANG | cut -d. -f1) + + case "$firefox_lang" in + fr*) firefox_lang=fr ;; + es*) firefox_lang=es-ES ;; + *) firefox_lang=en-US ;; + esac + echo "$firefox_lang" + + if [[ ! /usr/local/bin/firefox -ef /opt/firefox/firefox ]]; then + set -e + cd /tmp + + # https://download-installer.cdn.mozilla.net/pub/firefox/releases/146.0.1/linux-x86_64/en-US/firefox-146.0.1.tar.xz + firefox_version=$(curl -sI https://www.firefox.com/$firefox_lang/firefox/notes/ | grep location: | cut -d/ -f4) + firefox_archive_url="https://download-installer.cdn.mozilla.net/pub/firefox/releases/$firefox_version/linux-x86_64/$firefox_lang/firefox-$firefox_version.tar.xz" + echo $firefox_archive_url + + 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 + echo "## prevent displaying desktop entries (gnome-terminal replaced by tilix)" + echo "========================================================================" + if [[ ! -f ~/.local/share/applications/org.gnome.Terminal.desktop ]]; then + cat <<'EOF' >~/.local/share/applications/org.gnome.Terminal.desktop [Desktop Entry] NoDisplay=true EOF - reload=true - else - echo Hidden default terminal in favor of Tilix! - fi - - echo "## prevent displaying desktop entries (xiterm+thai replaced by tilix)" - echo "========================================================================" - if [[ ! -f ~/.local/share/applications/xiterm+thai.desktop ]]; then - cat << 'EOF' > ~/.local/share/applications/xiterm+thai.desktop + reload=true + else + echo Hidden default terminal in favor of Tilix! + fi + + echo "## prevent displaying desktop entries (xiterm+thai replaced by tilix)" + echo "========================================================================" + if [[ ! -f ~/.local/share/applications/xiterm+thai.desktop ]]; then + cat <<'EOF' >~/.local/share/applications/xiterm+thai.desktop [Desktop Entry] NoDisplay=true EOF - reload=true - else - echo Hidden default terminal in favor of Tilix! - fi + reload=true + else + echo Hidden default terminal in favor of Tilix! + fi - if [[ ! -f ~/.local/share/applications/com.gexperts.Tilix.desktop ]]; then - cat << 'EOF' > ~/.local/share/applications/com.gexperts.Tilix.desktop + if [[ ! -f ~/.local/share/applications/com.gexperts.Tilix.desktop ]]; then + cat <<'EOF' >~/.local/share/applications/com.gexperts.Tilix.desktop [Desktop Entry] Version=1.0 Name=Tilix @@ -320,204 +320,207 @@ Name[fr]=Préférences Name=Preferences Exec=tilix --preferences EOF - reload=true - fi - - [[ $reload ]] && update-desktop-database ~/.local/share/applications - - echo "Tiling Settings" - gsettings set com.gexperts.Tilix.Settings paste-strip-trailing-whitespace true - gsettings set com.gexperts.Tilix.Settings focus-follow-mouse true - gsettings set com.gexperts.Tilix.Settings window-style 'disable-csd-hide-toolbar' - gsettings set com.gexperts.Tilix.Settings control-click-titlebar true - gsettings set com.gexperts.Tilix.Settings terminal-title-show-when-single false - gsettings set com.gexperts.Tilix.Settings warn-vte-config-issue false - gsettings set com.gexperts.Tilix.Settings theme-variant 'dark' - gsettings set com.gexperts.Tilix.Settings control-click-titlebar true + reload=true + fi + + [[ $reload ]] && update-desktop-database ~/.local/share/applications + + echo "Tiling Settings" + gsettings set com.gexperts.Tilix.Settings paste-strip-trailing-whitespace true + gsettings set com.gexperts.Tilix.Settings focus-follow-mouse true + gsettings set com.gexperts.Tilix.Settings window-style 'disable-csd-hide-toolbar' + gsettings set com.gexperts.Tilix.Settings control-click-titlebar true + gsettings set com.gexperts.Tilix.Settings terminal-title-show-when-single false + gsettings set com.gexperts.Tilix.Settings warn-vte-config-issue false + gsettings set com.gexperts.Tilix.Settings theme-variant 'dark' + gsettings set com.gexperts.Tilix.Settings control-click-titlebar true } 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 + 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 "['firefox.desktop','org.gnome.Nautilus.desktop','org.gnome.Software.desktop']" - else - echo "preserve existing apps!" - 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 "['firefox.desktop','org.gnome.Nautilus.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 + 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 } function golden_dict_autostart { - 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 + 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 "=========================================" - - $BASEDIR/tools/gnome-extensions-helper dash-to-dock@micxgx.gmail.com --apply-custom-theme=true --multi-monitor=true --dash-max-icon-size=58 | - grep -q '^please logout to take effect!' && LOGOUT_REQUIRED=true - $BASEDIR/tools/gnome-extensions-helper runcat@kolesnikov.se --idle-threshold=66 | - grep -q 'please logout to take effect!' && LOGOUT_REQUIRED=true - # $BASEDIR/tools/gnome-extensions-helper netspeedsimplified@prateekmedia.extension | - # grep -q 'please logout to take effect!' && LOGOUT_REQUIRED=true - $BASEDIR/tools/gnome-extensions-helper appindicatorsupport@rgcjonas.gmail.com --tray-pos=left --icon-saturation=0.9 | - grep -q 'please logout to take effect!' && LOGOUT_REQUIRED=true - $BASEDIR/tools/gnome-extensions-helper weeks-start-on-monday@extensions.gnome-shell.fifi.org | - grep -q 'please logout to take effect!' && LOGOUT_REQUIRED=true - - true + echo "## gnome-shell install several extensions" + echo "=========================================" + + $BASEDIR/tools/gnome-extensions-helper dash-to-dock@micxgx.gmail.com --apply-custom-theme=true --multi-monitor=true --dash-max-icon-size=58 | + grep -q '^please logout to take effect!' && LOGOUT_REQUIRED=true + $BASEDIR/tools/gnome-extensions-helper runcat@kolesnikov.se --idle-threshold=66 | + grep -q 'please logout to take effect!' && LOGOUT_REQUIRED=true + # $BASEDIR/tools/gnome-extensions-helper netspeedsimplified@prateekmedia.extension | + # grep -q 'please logout to take effect!' && LOGOUT_REQUIRED=true + $BASEDIR/tools/gnome-extensions-helper appindicatorsupport@rgcjonas.gmail.com --tray-pos=left --icon-saturation=0.9 | + grep -q 'please logout to take effect!' && LOGOUT_REQUIRED=true + $BASEDIR/tools/gnome-extensions-helper weeks-start-on-monday@extensions.gnome-shell.fifi.org | + grep -q 'please logout to take effect!' && LOGOUT_REQUIRED=true + + true } function developer_flavor { - gsettings set org.gnome.shell.extensions.runcat custom-system-monitor-command "xterm -fa Monospace -fs 12 -fullscreen -s htop" + gsettings set org.gnome.shell.extensions.runcat custom-system-monitor-command "xterm -fa Monospace -fs 12 -fullscreen -s htop" } 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 + 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 "#=========================" + echo "# Firefox default settings" + echo "#=========================" - if [[ ! -f /opt/firefox/firefox.cfg ]]; then - cat << EOF | sudo tee -a /opt/firefox/firefox.cfg + if [[ ! -f /opt/firefox/firefox.cfg ]]; then + cat <