aboutsummaryrefslogtreecommitdiff
path: root/bin/gnome-set-config
diff options
context:
space:
mode:
Diffstat (limited to 'bin/gnome-set-config')
-rwxr-xr-xbin/gnome-set-config87
1 files changed, 87 insertions, 0 deletions
diff --git a/bin/gnome-set-config b/bin/gnome-set-config
index 5bfb476..509d542 100755
--- a/bin/gnome-set-config
+++ b/bin/gnome-set-config
@@ -1,12 +1,99 @@
#!/bin/sh
+# Sets my preferred Gnome config.
+# Find existing bindings with:
+# for e in $(gsettings list-schemas | grep bind); do gsettings list-recursively $e; done
NUM_WORKSPACES=9
+WORKSPACE_ROUTER_UUID=workspace-router@rbenencia.name
+ORG_AGENDA_INDICATOR_UUID=org-agenda-indicator@rbenencia.name
+
+ensure_extension_enabled() {
+ uuid="$1"
+ extension_dir=""
+
+ for candidate in \
+ "$HOME/.local/share/gnome-shell/extensions/$uuid" \
+ "$HOME/.local/gnome-shell/extensions/$uuid"; do
+ if [ -d "$candidate" ]; then
+ extension_dir="$candidate"
+ break
+ fi
+ done
+
+ if [ -z "$extension_dir" ]; then
+ return 0
+ fi
+
+ if [ -d "$extension_dir/schemas" ] && command -v glib-compile-schemas >/dev/null 2>&1; then
+ glib-compile-schemas "$extension_dir/schemas" >/dev/null 2>&1 || true
+ fi
+
+ enabled_extensions=$(
+ python3 - "$uuid" "$(gsettings get org.gnome.shell enabled-extensions)" <<'PY'
+import ast
+import sys
+
+uuid = sys.argv[1]
+enabled_extensions = ast.literal_eval(sys.argv[2])
+
+if uuid not in enabled_extensions:
+ enabled_extensions.append(uuid)
+
+print(enabled_extensions)
+PY
+ )
+ gsettings set org.gnome.shell enabled-extensions "$enabled_extensions"
+
+ if command -v gnome-extensions >/dev/null 2>&1; then
+ gnome-extensions enable "$uuid" >/dev/null 2>&1 || true
+ fi
+}
gsettings set org.gnome.mutter dynamic-workspaces false
gsettings set org.gnome.desktop.wm.preferences num-workspaces $NUM_WORKSPACES
+ensure_extension_enabled "$WORKSPACE_ROUTER_UUID"
+ensure_extension_enabled "$ORG_AGENDA_INDICATOR_UUID"
+
+ROFI_CMD="$HOME/bin/rofi"
+
+# Disable the default <Super>p. I don't use it, and it's disruptive when I accidentally trigger it.
+gsettings set org.gnome.mutter.keybindings switch-monitor '[]'
+
for i in $(seq 1 $NUM_WORKSPACES); do
gsettings set org.gnome.shell.keybindings switch-to-application-$i '[]'
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-$i "['<Super>$i']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-$i "['<Shift><Super>$i']"
done
+
+# This configuration is not present in gsettings; we need to fall back to dconf
+bindings="emacs org-mode move-windows rofi rofi-run"
+keybindings_key="/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings"
+keybindings=$(echo $bindings | awk -v key="$keybindings_key" '{for(i=1;i<=NF;i++) printf("'\''" key "/" $i "/'\''%s", (i==NF ? "" : ","))}')
+keybindings="[$keybindings]"
+
+dconf write "$keybindings_key" "$keybindings"
+
+dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/emacs/binding "'<Shift><Super>e'"
+dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/emacs/command "'emacsclient -c'"
+dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/emacs/name "'Emacs'"
+
+dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/org-mode/binding "'<Shift><Super>o'"
+dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/org-mode/command "'emacsclient -e \"(prot-window-popup-org-capture)\"'"
+dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/org-mode/name "'org-capture'"
+
+dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/move-windows/binding "'<Shift><Super>m'"
+dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/move-windows/command "'gnome-move-windows'"
+dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/move-windows/name "'move-windows'"
+
+# Disable default for <Super>space.
+gsettings set org.gnome.desktop.wm.keybindings switch-input-source "[]"
+gsettings set org.gnome.desktop.wm.keybindings switch-input-source-backward '[]'
+
+dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/rofi/binding "'<Super>space'"
+dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/rofi/command "'$ROFI_CMD -show window'"
+dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/rofi/name "'rofi'"
+
+dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/rofi-run/binding "'<Super>f2'"
+dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/rofi-run/command "'$ROFI_CMD -show run'"
+dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/rofi-run/name "'rofi-run'"
nihil fit ex nihilo