1 changed files with 413 additions and 0 deletions
-
413trixie.sh
@ -0,0 +1,413 @@ |
|||
#!//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 <<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 |
|||
|
|||
|
|||
} |
|||
|
|||
function gnome_settings { |
|||
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 |
|||
} |
|||
|
|||
function tilix_default_terminal { |
|||
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 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 <<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 |
|||
} |
|||
|
|||
function libre_re_pixmap { |
|||
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 |
|||
} |
|||
|
|||
## MAIN |
|||
## --------- |
|||
|
|||
[ "$(id -u)" -eq 0 ] && echo 'normal user required' && exit 1 |
|||
|
|||
upgrade |
|||
apt_required_packages |
|||
fix_input_sources |
|||
miaou_bash |
|||
openssh |
|||
faster_grub |
|||
true_firefox |
|||
gnome_settings |
|||
tilix_default_terminal |
|||
no_lock_screen |
|||
favorite_apps |
|||
# golden_dict |
|||
# gnome_extensions |
|||
firefox_addons |
|||
firefox_settings |
|||
libre_re_pixmap |
|||
|
|||
echo |
|||
echo |
|||
echo "# DEBIAN-GNOME successfully installed!" |
|||
echo |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue