Watch
1
0
Fork
You've already forked dotfiles
0

Add configuration for GNOME

This commit is contained in:
Alexander Hess 2026-08-03 14:30:55 +02:00
commit 5166031fa2
Signed by: alexander
GPG key ID: B46EDB4DFC26805D
2 changed files with 325 additions and 0 deletions

View file

@ -0,0 +1,254 @@
# Unify all key bindings in this file to conveniently keep them consistent
[org/gnome/desktop/wm/keybindings]
# <Super><Shift>q is i3wm's default
close=['<Super>Q', '<Super><Shift>Q', '<Primary><Shift>Q', '<Alt>F4']
maximize=@as []
unmaximize=@as []
toggle-maximized=['<Super>M']
minimize=@as []
switch-applications=['<Super>Tab', '<Primary>Tab']
switch-applications-backward=['<Super><Shift>Tab', '<Primary><Shift>Tab']
switch-input-source=@as []
switch-input-source-backward=@as []
switch-group=@as []
switch-group-backward=@as []
switch-panels=@as []
switch-panels-backward=@as []
cycle-group=@as []
cycle-group-backward=@as []
cycle-panels=@as []
cycle-panels-backward=@as []
cycle-windows=@as []
cycle-windows-backward=@as []
begin-move=@as []
begin-resize=@as []
# <Super>1-5 is i3wm's default; the directional variants are cleared
# because forge uses <Super><Primary>Left/Right to swap windows
switch-to-workspace-1=['<Super>1', '<Super><Primary>1']
switch-to-workspace-2=['<Super>2', '<Super><Primary>2']
switch-to-workspace-3=['<Super>3', '<Super><Primary>3']
switch-to-workspace-4=['<Super>4', '<Super><Primary>4']
switch-to-workspace-5=['<Super>5', '<Super><Primary>5']
switch-to-workspace-6=['<Super>6', '<Super><Primary>6']
switch-to-workspace-7=['<Super>7', '<Super><Primary>7']
switch-to-workspace-8=['<Super>8', '<Super><Primary>8']
switch-to-workspace-9=['<Super>9', '<Super><Primary>9']
switch-to-workspace-10=['<Super>0', '<Super><Primary>0']
switch-to-workspace-last=@as []
switch-to-workspace-left=@as []
switch-to-workspace-right=@as []
# <Super><Shift>1-5 is i3wm's default
move-to-workspace-1=['<Super><Shift>1', '<Primary><Shift>1']
move-to-workspace-2=['<Super><Shift>2', '<Primary><Shift>2']
move-to-workspace-3=['<Super><Shift>3', '<Primary><Shift>3']
move-to-workspace-4=['<Super><Shift>4', '<Primary><Shift>4']
move-to-workspace-5=['<Super><Shift>5', '<Primary><Shift>5']
move-to-workspace-6=['<Super><Shift>6', '<Primary><Shift>6']
move-to-workspace-7=['<Super><Shift>7', '<Primary><Shift>7']
move-to-workspace-8=['<Super><Shift>8', '<Primary><Shift>8']
move-to-workspace-9=['<Super><Shift>9', '<Primary><Shift>9']
move-to-workspace-10=['<Super><Shift>0', '<Primary><Shift>0']
move-to-workspace-last=@as []
move-to-workspace-left=@as []
move-to-workspace-right=@as []
[org/gnome/mutter/keybindings]
toggle-tiled-left=@as []
toggle-tiled-right=@as []
[org/gnome/settings-daemon/plugins/media-keys]
email=['<Super>E']
help=@as []
home=['<Super>F']
search=['<Super>slash']
terminal=@as []
www=['<Super>B']
screensaver=['<Super>Escape']
logout=@as []
# Besides the numkeys, we use "/", ".", and "," to control the media
play=['<Primary><Alt>Slash']
next=['<Primary><Alt>Right']
previous=['<Primary><Alt>Left']
# Note: I often type "m" for "mute" intuitively
volume-mute=['<Primary><Alt>M']
volume-up=['<Primary><Alt>Up']
volume-down=['<Primary><Alt>Down']
magnifier=@as []
magnifier-zoom-in=@as []
magnifier-zoom-out=@as []
on-screen-keyboard=@as []
screenreader=@as []
custom-keybindings=['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom3/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom5/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom6/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom7/']
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0]
binding='<Primary><Alt>Home'
command='gnome-session-quit --reboot'
name='Reboot Machine'
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1]
binding='<Primary><Alt>End'
command='gnome-session-quit --power-off'
name='Shutdown Machine'
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2]
binding='<Primary><Alt>Delete'
command='gnome-session-quit --logout'
name='Log out (1)'
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom3]
binding='<Primary><Alt>BackSpace'
command='gnome-session-quit --logout'
name='Log out (2)'
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4]
binding='<Super>G'
command='google-chrome'
name='Google Chrome'
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom5]
# Mimic i3wm's default way to open terminals
binding='<Super>Return'
command='/usr/bin/alacritty'
name='Terminal (1)'
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom6]
# Faster than the default <Primary><Alt>t
binding='<Super>T'
command='/usr/bin/alacritty'
name='Terminal (2)'
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom7]
# Gnome's actual default, but with a custom terminal emulator
binding='<Primary><Alt>T'
command='/usr/bin/alacritty'
name='Terminal (3)'
[org/gnome/shell/extensions/forge/keybindings]
mod-mask-mouse-tile='Super'
# In [org/freedesktop/ibus/panel/emoji], "hotkey" must be "@as []"
# to turn GNOME's Emoji picker off, which also uses <Super>Period
prefs-open=['<Super>Period']
focus-border-toggle=@as []
prefs-tiling-toggle=@as []
# Changing the gap size dynamically is not needed
window-gap-size-decrease=@as []
window-gap-size-increase=@as []
workspace-active-tile-toggle=['<Super><Shift>Y']
window-toggle-float=['<Super>Y']
window-toggle-always-float=@as []
window-focus-up=['<Super>k', '<Super>Up']
window-focus-down=['<Super>j', '<Super>Down']
window-focus-left=['<Super>h', '<Super>Left']
window-focus-right=['<Super>l', '<Super>Right']
window-move-up=['<Super><Shift>k', '<Super><Shift>Up']
window-move-down=['<Super><Shift>j', '<Super><Shift>Down']
window-move-left=['<Super><Shift>h', '<Super><Shift>Left']
window-move-right=['<Super><Shift>l', '<Super><Shift>Right']
window-swap-up=['<Super><Primary>k', '<Super><Primary>Up']
window-swap-down=['<Super><Primary>j', '<Super><Primary>Down']
window-swap-left=['<Super><Primary>h', '<Super><Primary>Left']
window-swap-right=['<Super><Primary>l', '<Super><Primary>Right']
window-swap-last-active=['<Super><Primary>Return']
window-resize-top-increase=['<Super><Alt>k', '<Super><Alt>Up']
window-resize-top-decrease=['<Super><Alt><Primary>j', '<Super><Alt><Primary>Down']
window-resize-bottom-increase=['<Super><Alt>j', '<Super><Alt>Down']
window-resize-bottom-decrease=['<Super><Alt><Primary>k', '<Super><Alt><Primary>Up']
window-resize-left-increase=['<Super><Alt>h', '<Super><Alt>Left']
window-resize-left-decrease=['<Super><Alt><Primary>l', '<Super><Alt><Primary>Right']
window-resize-right-increase=['<Super><Alt>l', '<Super><Alt>Right']
window-resize-right-decrease=['<Super><Alt><Primary>h', '<Super><Alt><Primary>Left']
window-snap-center=@as []
window-snap-one-third-left=@as []
window-snap-one-third-right=@as []
window-snap-two-third-left=@as []
window-snap-two-third-right=@as []
# Container stuff
con-split-horizontal=@as []
con-split-vertical=@as []
con-split-layout-toggle=@as []
con-stacked-layout-toggle=@as []
con-tabbed-layout-toggle=@as []
con-tabbed-showtab-decoration-toggle=@as []
[org/gnome/shell/extensions/nightthemeswitcher/time]
nightthemeswitcher-ondemand-keybinding=['<Primary><Alt>D']
[org/gnome/shell/keybindings]
focus-active-notification=@as []
open-application-menu=@as []
# Disable Gnome's default behavior of opening "favorite" apps
# with <Super>1-10 and instead switch workspaces
switch-to-application-1=@as []
switch-to-application-2=@as []
switch-to-application-3=@as []
switch-to-application-4=@as []
switch-to-application-5=@as []
switch-to-application-6=@as []
switch-to-application-7=@as []
switch-to-application-8=@as []
switch-to-application-9=@as []
switch-to-application-10=@as []
toggle-message-tray=@as []
toggle-overview=@as []
[org/gnome/terminal/legacy/keybindings]
close-tab='<Primary>W'
close-window='<Primary>Q'
find='<Primary>F'
find-clear='<Primary>J'
find-next='<Primary>N'
find-previous='<Primary>H'
new-tab='<Primary>T'
new-window='<Primary>N'
zoom-in='<Primary><Shift>Plus'
# default: zoom-out='<Primary>minus'
# To avoid conflict with prefs-open in [org/gnome/shell/extensions/forge/keybindings]
[org/freedesktop/ibus/panel/emoji]
hotkey=@as []

71
.local/bin/restore-gnome Executable file
View file

@ -0,0 +1,71 @@
#!/bin/sh
# Restore the Gnome settings from ~/.config/gnome-settings/*.ini
#
# `dconf load` merges into the existing state, implying
# that keys removed from the *.ini files would still be active
# => Reset the subtrees we fully manage first,
# which makes the resulting state deterministic
set -eu
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
SETTINGS_DIR="$XDG_CONFIG_HOME/gnome-settings"
# Subtrees fully described by the *.ini files
RESET_PATHS="
/org/gnome/desktop/app-folders/
/org/gnome/desktop/notifications/
/org/gnome/desktop/wm/keybindings/
/org/gnome/mutter/keybindings/
/org/gnome/settings-daemon/plugins/media-keys/
/org/gnome/shell/extensions/
/org/gnome/shell/keybindings/
"
if ! command -v dconf >/dev/null 2>&1; then
echo "dconf is not installed => Nothing to do" >&2
exit 0
fi
if [ ! -d "$SETTINGS_DIR" ]; then
echo "No settings found at: $SETTINGS_DIR" >&2
exit 1
fi
echo "Backing up the current GNOME settings to: /tmp/gnome-settings-backup.ini"
dconf dump / > /tmp/gnome-settings-backup.ini
echo "Resetting the managed subtrees"
for path in $RESET_PATHS; do
echo " $path"
dconf reset -f "$path"
done
echo "Loading the settings from: $SETTINGS_DIR"
for file in "$SETTINGS_DIR"/*.ini; do
[ -e "$file" ] || continue # because the glob does not expand if empty
echo " $(basename "$file")"
dconf load / < "$file"
done
echo ""
echo "Log out and back in for all changes to take effect"
echo ""