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.
301 lines
10 KiB
301 lines
10 KiB
#!/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=$(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 "==================="
|
|
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)
|
|
[[ $firefox_lang == "en" ]] && firefox_lang="en-US"
|
|
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.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 "## 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.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
|
|
|
|
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"
|
|
)
|
|
|
|
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
|
|
|
|
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
|