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