Browse Source

gnome-extensions-helper

master
pvincent 3 weeks ago
parent
commit
adceb09319
  1. 21
      .vscode/settings.json
  2. 58
      extensions.bash
  3. 10
      interactive.bash
  4. 0
      src/bookworm.sh
  5. 6
      src/install.sh
  6. 434
      src/trixie.sh
  7. 154
      tools/gnome-extensions-helper
  8. 413
      trixie.sh

21
.vscode/settings.json

@ -0,0 +1,21 @@
{
"bashIde.shfmt.caseIndent": true,
"bashIde.shfmt.simplifyCode": true,
"bashIde.shfmt.spaceRedirects": true,
"editor.formatOnSave": true,
"todohighlight.include": [
"**/*.js",
"**/*.jsx",
"**/*.ts",
"**/*.tsx",
"**/*.html",
"**/*.css",
"**/*.scss",
"**/*.php",
"**/*.rb",
"**/*.txt",
"**/*.mdown",
"**/*.md",
"**/*"
]
}

58
extensions.bash

@ -1,58 +0,0 @@
#!/bin/bash
# CONSTANTS
array=(
netspeedsimplified@prateekmedia.extension
runcat@kolesnikov.se
dash-to-dock@micxgx.gmail.com
appindicatorsupport@rgcjonas.gmail.com
weeks-start-on-monday@extensions.gnome-shell.fifi.org
)
# FUNCTIONS
function find_extension_by_uuid {
local uuid=$1
local page=${2:-1}
JSON=$(curl -Lfs "https://extensions.gnome.org/extension-query/?search='${i}'&page=$page")
local numpages=$(echo $JSON | jq ".numpages")
local extension=$(echo $JSON | jq ".extensions[] | select(.uuid==\"$i\") ")
if [[ -z $extension ]]; then
page=$((page + 1))
[[ $page -gt $numpages ]] && echo "not found, exiting!" && exit 2
echo >&2 "not found, trying page #$page..."
find_extension_by_uuid "$uuid" "$page"
else
echo "$extension"
fi
}
# MAIN
set -Eue
gnome_version=$(gnome-extensions version | cut -d. -f1)
echo "GNOME=$gnome_version"
for i in "${array[@]}"; do
page=1
if ! gnome-extensions list | grep --quiet "$i"; then
EXTENSION=$(find_extension_by_uuid "$i")
name=$(echo "$i" | sed 's/@//')
version_tag=$(echo "$EXTENSION" | jq ".shell_version_map.\"$gnome_version\".version")
echo "$i => $name => $version_tag"
zip_file="$i.zip"
URL="https://extensions.gnome.org/extension-data/$name.v$version_tag.shell-extension.zip"
wget -O "$zip_file" "$URL"
gnome-extensions install --force "$zip_file"
rm "$zip_file"
# interactive ONLY!
busctl call --timeout 20 --expect-reply=yes --user org.gnome.Shell.Extensions /org/gnome/Shell/Extensions org.gnome.Shell.Extensions InstallRemoteExtension s "$i"
fi
gnome-extensions enable "$i"
echo "successfully enabled extension: $i"
# break
done

10
interactive.bash

@ -1,10 +0,0 @@
#!/usr/bin/env bash
read -p 'press [ENTER] to continue:' </dev/tty
echo REPLY=$REPLY
choices=( one two three)
select choice in "${choices[@]}"; do
[[ -n $choice ]] && break
done </dev/tty
echo "choice is: $choice"

0
src/main → src/bookworm.sh

6
src/install.sh

@ -1,14 +1,16 @@
#!/bin/bash #!/bin/bash
# MAIN
echo "install on: $HOSTNAME" echo "install on: $HOSTNAME"
echo ---------------------- echo ----------------------
[ "$(id -u)" -eq 0 ] && echo 'normal user required: ie, not <root>!' && exit 1 [ "$(id -u)" -eq 0 ] && echo 'normal user required: ie, not <root>!' && exit 1
if [[ ! $PWD == '/opt/debian-gnome' ]]; then
if [[ $PWD != '/opt/debian-gnome' ]]; then
if [[ ! -L /opt/debian-gnome ]]; then if [[ ! -L /opt/debian-gnome ]]; then
sudo rm -rf /opt/debian-gnome sudo rm -rf /opt/debian-gnome
sudo git clone --depth=1 https://git.artcode.re/pvincent/debian-gnome /opt/debian-gnome sudo git clone --depth=1 https://git.artcode.re/pvincent/debian-gnome /opt/debian-gnome
fi fi
/opt/debian-gnome/src/main
/opt/debian-gnome/src/bookworm.sh
fi fi

434
src/trixie.sh

@ -0,0 +1,434 @@
#!//usr/bin/env bash
# CONSTANTS
# ---------
GIT_BASE_URL="https://git.artcode.re/pvincent/debian-gnome"
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
)
# 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 | 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
}
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.gtk.gtk4.Settings.FileChooser sort-directories-first true
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 {
local reload=false
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
[Desktop Entry]
NoDisplay=true
EOF
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
[Desktop Entry]
Version=1.0
Name=Tilix
Comment[fr]=Un terminal scindable pour GNOME
Comment=A tiling terminal for GNOME
Keywords[fr]=shell;terminal;prompt;commande;ligne de commande;cmd;
Keywords=shell;terminal;prompt;command;commandline;cmd;
Exec=tilix
Terminal=false
Type=Application
StartupNotify=true
Categories=System;TerminalEmulator;X-GNOME-Utilities;
Icon=com.gexperts.Tilix
DBusActivatable=true
Actions=new-window;new-session;preferences;
[Desktop Action new-window]
Name[fr]=Nouvelle fenêtre
Name=New Window
Exec=tilix --action=app-new-window
[Desktop Action new-session]
Name[fr]=Nouvelle session
Name=New Session
Exec=tilix --action=app-new-session
[Desktop Action preferences]
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
}
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 "========================================="
$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 |
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
# gsettings --schemadir ~/.local/share/gnome-shell/extensions/dash-to-dock@micxgx.gmail.com/schemas set org.gnome.shell.extensions.dash-to-dock dash-max-icon-size 58
true
}
function developer_flavor {
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
}
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
}
function clear_system_extensions {
sudo rm /usr/share/gnome-shell/extensions/* -rf
}
## 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
clear_system_extensions
gnome_extensions
firefox_addons
firefox_settings
libre_re_pixmap
echo
if [[ $LOGOUT_REQUIRED == true ]]; then
echo '# DEBIAN-GNOME new extensions have been installed, please logout/login to apply changes!'
else
echo "# DEBIAN-GNOME successfully installed!"
fi
echo

154
tools/gnome-extensions-helper

@ -0,0 +1,154 @@
#!/bin/bash
# CONSTANTS
declare -A settings=()
declare -a setting_keys=()
declare -a setting_values=()
LOGOUT_NEEDED=false
# FUNCTIONS
function usage {
echo "USAGE: $(basename "$0") {UUID} [--key1=value1|--key2=value2|...]"
echo "provide additional facilities to install gnome-extension based on a UUID name + optional predefined settings"
echo 'a valid UUID name would be: "runcat@kolesnikov.se"'
echo 'a valid key/value would be: "--idle-threshold=66"'
echo "thus, a valid final command would be: "$0" runcat@kolesnikov.se --idle-threshold=66"
}
function parse_options {
[[ -z ${1:-} || $1 =~ ^- ]] && usage && exit 1
uuid=$1
shift 1
while [[ $# -gt 0 ]]; do
case "$1" in
--*)
local key_value=${1#--}
local key=$(echo $key_value | cut -d= -f1)
local value=$(echo $key_value | cut -d= -f2)
echo ["$key"]="$value"
settings+=(["$key"]="$value")
;;
--help | -h)
usage
exit 0
;;
*)
echo "Unknown option: $1"
usage
exit 2
;;
esac
shift 1 # Move to the next argument
done
}
function gnome_version {
gnome-extensions version | cut -d. -f1
}
function find_extension_by_uuid {
local page=${2:-1}
JSON=$(curl -Lfs "https://extensions.gnome.org/extension-query/?search='${uuid}'&page=$page")
local numpages=$(echo $JSON | jq ".numpages")
local extension=$(echo $JSON | jq ".extensions[] | select(.uuid==\"$uuid\") ")
if [[ -z $extension ]]; then
page=$((page + 1))
[[ $page -gt $numpages ]] && echo "not found, exiting!" && exit 2
>&2 echo "not found, trying page #$page..."
find_extension_by_uuid "$uuid" "$page"
else
echo "$extension"
fi
}
function install_extension {
if ! gnome-extensions list | grep -q "$uuid"; then
EXTENSION=$(find_extension_by_uuid "$uuid")
name=$(echo "$uuid" | sed 's/@//')
version_tag=$(echo "$EXTENSION" | jq ".shell_version_map.\"$(gnome_version)\".version")
zip_file="$uuid.zip"
URL="https://extensions.gnome.org/extension-data/$name.v$version_tag.shell-extension.zip"
wget -qO "$zip_file" "$URL"
gnome-extensions install --force "$zip_file"
rm "$zip_file"
LOGOUT_NEEDED=true
# busctl call --timeout 20 --expect-reply=yes --user org.gnome.Shell.Extensions /org/gnome/Shell/Extensions org.gnome.Shell.Extensions InstallRemoteExtension s "$uuid"
else
>&2 echo "$uuid already installed!"
fi
}
function enable_extension {
status=$(gnome-extensions info $uuid | grep Enabled | cut -d' ' -f4)
if [[ $status != 'Yes' ]]; then
gnome-extensions enable $uuid
>&2 echo $uuid now enabled!
else
>&2 echo $uuid already enabled!
fi
}
function find_settings_schema {
local gschema_file=$(ls ~/.local/share/gnome-shell/extensions/$uuid/schemas/*.gschema.xml)
gschema_file=$(basename $gschema_file)
gschema_file=${gschema_file%.gschema.xml}
echo $gschema_file
}
function convert_to_gvalue {
value=$1
# >&2 echo "original=[$value]"
if [[ $value =~ true|false ]]; then
echo "$value"
elif [[ $value =~ ^[0-9]+$ ]]; then
echo "$value"
elif [[ $value =~ ^-?[0-9]+\.[0-9]+$ ]]; then
echo "double $value"
else
echo "'$value'"
fi
}
function define_settings {
local found=${#settings[@]}
if [[ $found -gt 0 ]]; then
local schema=$(find_settings_schema)
cd ~/.local/share/gnome-shell/extensions/$uuid/schemas
override="20_$schema.gschema.override"
[[ -f $override ]] && cp $override $override.old
echo "[$schema]" > $override
for key in "${!settings[@]}"; do
local value=${settings[$key]}
value=$(convert_to_gvalue "$value")
echo "$key=$value" >> $override
done
glib-compile-schemas ~/.local/share/gnome-shell/extensions/$uuid/schemas
if [[ -f $override.old ]] && diff -q $override $override.old > /dev/null; then
>&2 echo default settings already set!
else
>&2 echo "override schema: ~/.local/share/gnome-shell/extensions/$uuid/schemas/$override"
gnome-extensions disable $uuid
gnome-extensions reset $uuid
fi
fi
}
# MAIN
set -Eue
parse_options $*
install_extension
define_settings
enable_extension
[[ $LOGOUT_NEEDED == 'true' ]] && echo "please logout to take effect!" || true

413
trixie.sh

@ -1,413 +0,0 @@
#!//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
Loading…
Cancel
Save