Add (un-)mount ~/Vault toggle

This commit is contained in:
Alexander Hess 2026-09-23 15:05:23 +02:00
commit 0f94baacaf
Signed by: alexander
GPG key ID: B46EDB4DFC26805D
3 changed files with 110 additions and 3 deletions

View file

@ -93,7 +93,7 @@
# q | | Close the window | | |
# ------------------+------------------------+------------------------+------------------------+------------------------+------------------------
# b | Split beside | | Toggle bluetooth | Randomize wallpaper |
# v | Split below | | | |
# v | Split below | | (Un-)Mount the ~/Vault | |
# e | Split toggle | | Show battery load | |
# s | Stacked layout | | | |
# w | Tabbed layout | | Toggle WiFi | Toggle airplane mode |
@ -501,7 +501,7 @@ keyboard-brightness-toggle=['<Super><Alt>slash']
# Due to the structure of the below groups,
# we must duplicate some of them to allow multiple bindings
custom-keybindings=['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/show_key_bindings/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/move_window_to_empty_workspace/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/list_windows/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/show_launcher_1/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/show_launcher_2/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/show_run_1/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/show_run_2/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_primary_terminal_1/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_primary_terminal_2/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_secondary_terminal_1/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_secondary_terminal_2/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_file_manager/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_firefox/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_chromium/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_google_chrome/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_evolution/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/dark_scheme_toggle/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/night_light_force/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/night_light_toggle/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/night_light_make_cooler/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/night_light_make_warmer/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/randomize_background/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/wifi_toggle/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/restart_gnome_shell/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/emoji_picker_type/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/emoji_picker_copy/']
custom-keybindings=['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/show_key_bindings/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/move_window_to_empty_workspace/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/list_windows/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/show_launcher_1/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/show_launcher_2/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/show_run_1/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/show_run_2/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_primary_terminal_1/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_primary_terminal_2/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_secondary_terminal_1/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_secondary_terminal_2/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_file_manager/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_firefox/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_chromium/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_google_chrome/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_evolution/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/dark_scheme_toggle/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/night_light_force/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/night_light_toggle/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/night_light_make_cooler/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/night_light_make_warmer/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/randomize_background/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/wifi_toggle/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/restart_gnome_shell/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/emoji_picker_type/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/emoji_picker_copy/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/vault_toggle/']
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/show_key_bindings]
@ -653,6 +653,12 @@ command='/home/user/.local/bin/rofimoji --action copy'
name='Copy an emoji'
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/vault_toggle]
binding='<Super><Control>v'
command='/home/user/.local/bin/vault-toggle'
name='(Un-)Mount the vault'
[org/gnome/shell/keybindings]

View file

@ -113,7 +113,7 @@ set_key General optionalServerNotifications false
set_key General showCallNotifications false
set_key General showChatNotifications false
set_key General isVfsEnabled false
set_key General isVfsEnabled false # `true` is also not good for `gocryptfs` syncs
set_key General confirmExternalStorage true
set_key General useNewBigFolderSizeLimit false
set_key General newBigFolderSizeLimit 999

101
.local/bin/vault-toggle Executable file
View file

@ -0,0 +1,101 @@
#!/bin/sh
# Mount or unmount the `gocryptfs` ~/Vault synced via the ~/Cloud
#
# Triggered by <Super><Control>v
# as defined in [org/gnome/settings-daemon/plugins/media-keys]
# in ~/.config/gnome-settings/key-bindings.ini
#
# The password is taken from the secret service (e.g., GNOME Keyring)
# and, if not stored there, asked for with a GUI prompt
#
# Store the password once with:
# secret-tool store --label='gocryptfs ~/Vault' gocryptfs vault
#
# Requires:
# - gocryptfs
# - libnotify-bin
# - libsecret-tools
# - zenity
set -eu
CIPHER_DIR="$HOME/Cloud/Misc/Vault.enc"
MOUNT_POINT="$HOME/Vault"
_command_exists() {
command -v "$1" 1>/dev/null 2>&1
}
_notify() {
_command_exists notify-send || return 0
notify-send 'Vault' "$1"
}
# Print the password to stdout,
# instead of storing it in a variable
_password() {
if _command_exists secret-tool \
&& secret-tool lookup gocryptfs vault 2>/dev/null; then
return 0
fi
zenity --password --title='Unlock the Vault' 2>/dev/null
}
_unmount() {
if _command_exists fusermount3; then
fusermount3 -u "$MOUNT_POINT"
else
fusermount -u "$MOUNT_POINT"
fi
}
# Unmount if mounted
if mountpoint -q "$MOUNT_POINT"; then
if _unmount 2>/dev/null; then
_notify 'Locked'
exit 0
fi
# Most likely a shell or an app still has a file open inside
_notify 'Still in use => Close all files and shells inside first'
exit 1
fi
# Mount otherwise
if [ ! -f "$CIPHER_DIR/gocryptfs.conf" ]; then
_notify "No vault found at $CIPHER_DIR"
exit 1
fi
# Nextcloud does not sync mode bits
# => Enforce owner-only access on every client,
# which `gocryptfs` also shows as the mode of the mount point
chmod 700 "$CIPHER_DIR"
mkdir -p "$MOUNT_POINT"
# `gocryptfs` reads the password from stdin if that is not a terminal
if _password | gocryptfs -idle 1h -quiet -sharedstorage "$CIPHER_DIR" "$MOUNT_POINT"; then
_notify 'Unlocked'
else
_notify 'Not unlocked (wrong or no password?)'
exit 1
fi