Compare commits
78 changed files with 80 additions and 7764 deletions
|
|
@ -11,40 +11,6 @@ complete -W '--force' dotfiles-install dotfiles-update
|
||||||
complete -W '--quieter' generate-shell-completions
|
complete -W '--quieter' generate-shell-completions
|
||||||
|
|
||||||
|
|
||||||
_color_palette() {
|
|
||||||
local cur="$2" prev="$3"
|
|
||||||
local flags='--scheme --show --write'
|
|
||||||
|
|
||||||
# Values for `--scheme`, in both the "--scheme value"
|
|
||||||
# and the "--scheme=value" form
|
|
||||||
case "$prev" in
|
|
||||||
--scheme)
|
|
||||||
mapfile -t COMPREPLY < <(compgen -W 'dark light' -- "$cur")
|
|
||||||
return
|
|
||||||
;;
|
|
||||||
=)
|
|
||||||
if [ "${COMP_WORDS[COMP_CWORD - 2]}" = "--scheme" ]; then
|
|
||||||
mapfile -t COMPREPLY < <(compgen -W 'dark light' -- "$cur")
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Offer only flags not already on the line
|
|
||||||
local flag remaining=''
|
|
||||||
for flag in $flags; do
|
|
||||||
case " ${COMP_WORDS[*]} " in
|
|
||||||
*" $flag "*) ;;
|
|
||||||
*) remaining="$remaining $flag" ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
mapfile -t COMPREPLY < <(compgen -W "$remaining" -- "$cur")
|
|
||||||
}
|
|
||||||
|
|
||||||
complete -F _color_palette color-palette
|
|
||||||
|
|
||||||
|
|
||||||
# Fuzzy completion with the `**` trigger
|
# Fuzzy completion with the `**` trigger
|
||||||
# (e.g., `vi **<Tab>`, `ssh **<Tab>`)
|
# (e.g., `vi **<Tab>`, `ssh **<Tab>`)
|
||||||
#
|
#
|
||||||
|
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
# Nextcloud-related Configurations
|
|
||||||
|
|
||||||
This folder contains
|
|
||||||
the [sync exclude list](./sync-exclude.lst)
|
|
||||||
for the [Nextcloud](https://nextcloud.com/) client.
|
|
||||||
|
|
||||||
The client's other files here (e.g., `nextcloud.cfg`) are untracked
|
|
||||||
and re-created by [`nextcloud-restore`](../../.local/bin/nextcloud-restore).
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
||||||
# Global exclude patterns
|
|
||||||
|
|
||||||
*~
|
|
||||||
~$*
|
|
||||||
.~lock.*
|
|
||||||
~*.tmp
|
|
||||||
]*.~*
|
|
||||||
]Icon\r*
|
|
||||||
].DS_Store
|
|
||||||
].ds_store
|
|
||||||
*.textClipping
|
|
||||||
._*
|
|
||||||
]Thumbs.db
|
|
||||||
]photothumb.db
|
|
||||||
System Volume Information
|
|
||||||
|
|
||||||
.*.sw?
|
|
||||||
.*.*sw?
|
|
||||||
|
|
||||||
].TemporaryItems
|
|
||||||
].Trashes
|
|
||||||
].DocumentRevisions-V100
|
|
||||||
].Trash-*
|
|
||||||
.fseventd
|
|
||||||
.apdisk
|
|
||||||
.Spotlight-V100
|
|
||||||
|
|
||||||
.directory
|
|
||||||
|
|
||||||
*.part
|
|
||||||
*.filepart
|
|
||||||
*.crdownload
|
|
||||||
|
|
||||||
*.kate-swp
|
|
||||||
*.gnucash.tmp-*
|
|
||||||
|
|
||||||
.synkron.*
|
|
||||||
.sync.ffs_db
|
|
||||||
.symform
|
|
||||||
.symform-store
|
|
||||||
.fuse_hidden*
|
|
||||||
*.unison
|
|
||||||
.nfs*
|
|
||||||
|
|
||||||
# syncthing
|
|
||||||
.stfolder
|
|
||||||
.stignore
|
|
||||||
.stversions
|
|
||||||
|
|
||||||
*.sb-*
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
# `alacritty`-related Configurations
|
|
||||||
|
|
||||||
This folder contains
|
|
||||||
the [config](./alacritty.toml)
|
|
||||||
for the [`alacritty`](https://alacritty.org/) terminal.
|
|
||||||
|
|
||||||
`colors.toml` is untracked
|
|
||||||
and written by [`color-palette`](../../.local/bin/color-palette).
|
|
||||||
|
|
@ -1,97 +0,0 @@
|
||||||
[general]
|
|
||||||
|
|
||||||
import = ["colors.toml"]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[bell]
|
|
||||||
|
|
||||||
animation = "EaseOutSine"
|
|
||||||
duration = 250
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[cursor]
|
|
||||||
|
|
||||||
blink_interval = 500
|
|
||||||
blink_timeout = 0
|
|
||||||
thickness = 0.1
|
|
||||||
unfocused_hollow = true
|
|
||||||
|
|
||||||
|
|
||||||
[cursor.style]
|
|
||||||
|
|
||||||
blinking = "On"
|
|
||||||
shape = "Block"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[font]
|
|
||||||
|
|
||||||
size = 12.0
|
|
||||||
|
|
||||||
|
|
||||||
[font.bold]
|
|
||||||
|
|
||||||
family = "FiraCode Nerd Font"
|
|
||||||
style = "Bold"
|
|
||||||
|
|
||||||
|
|
||||||
[font.bold_italic]
|
|
||||||
|
|
||||||
family = "FiraCode Nerd Font"
|
|
||||||
style = "Semibold"
|
|
||||||
|
|
||||||
|
|
||||||
[font.italic]
|
|
||||||
|
|
||||||
family = "FiraCode Nerd Font"
|
|
||||||
style = "Light"
|
|
||||||
|
|
||||||
|
|
||||||
[font.normal]
|
|
||||||
|
|
||||||
family = "FiraCode Nerd Font"
|
|
||||||
style = "Regular"
|
|
||||||
|
|
||||||
|
|
||||||
[font.offset]
|
|
||||||
|
|
||||||
x = 0
|
|
||||||
y = 0
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
|
|
||||||
action = "SpawnNewInstance"
|
|
||||||
key = "Return"
|
|
||||||
mods = "Control|Shift"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[scrolling]
|
|
||||||
|
|
||||||
history = 99999
|
|
||||||
multiplier = 10
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[terminal.shell]
|
|
||||||
|
|
||||||
args = ["-l"]
|
|
||||||
program = "/usr/bin/zsh"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[window]
|
|
||||||
|
|
||||||
decorations = "none"
|
|
||||||
dynamic_padding = true
|
|
||||||
opacity = 0.90
|
|
||||||
|
|
||||||
|
|
||||||
[window.padding]
|
|
||||||
|
|
||||||
x = 10
|
|
||||||
y = 10
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
||||||
# Session defaults, read by `systemd --user` at login
|
|
||||||
#
|
|
||||||
# Applied by:
|
|
||||||
# - set-brightness-default.service
|
|
||||||
# - set-keyboard-brightness-default.service
|
|
||||||
# - set-volume-default.service
|
|
||||||
#
|
|
||||||
# For machine-local overrides create an untracked
|
|
||||||
# ~/.config/environment.d/90-local.conf instead
|
|
||||||
# and repeat only the keys you want to change
|
|
||||||
#
|
|
||||||
# Apply with: `systemctl --user daemon-reload`,
|
|
||||||
# then log out and back in
|
|
||||||
#
|
|
||||||
# Verify with: `systemctl --user show-environment`
|
|
||||||
|
|
||||||
DEFAULT_BRIGHTNESS=30
|
|
||||||
DEFAULT_KEYBOARD_BRIGHTNESS=50
|
|
||||||
DEFAULT_VOLUME=30
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
# Session Environment Defaults
|
|
||||||
|
|
||||||
This folder contains environment variables
|
|
||||||
read by `systemd --user` at login.
|
|
||||||
|
|
||||||
Machine-local overrides go into an untracked `90-local.conf`.
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
# `fastfetch`-related Configurations
|
# `fastfetch`-related Configurations
|
||||||
|
|
||||||
This folder contains configurations
|
This folder contains
|
||||||
|
the [config](./config.jsonc)
|
||||||
for [`fastfetch`](https://github.com/fastfetch-cli/fastfetch).
|
for [`fastfetch`](https://github.com/fastfetch-cli/fastfetch).
|
||||||
|
|
||||||
`config.jsonc` is untracked
|
|
||||||
and written by [`color-palette`](../../.local/bin/color-palette).
|
|
||||||
|
|
|
||||||
47
.config/fastfetch/config.jsonc
Normal file
47
.config/fastfetch/config.jsonc
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
// Config for `fastfetch`
|
||||||
|
//
|
||||||
|
// See: https://github.com/fastfetch-cli/fastfetch
|
||||||
|
|
||||||
|
{
|
||||||
|
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
|
||||||
|
|
||||||
|
"logo": {
|
||||||
|
"type": "small",
|
||||||
|
"padding": {
|
||||||
|
"top": 1,
|
||||||
|
"right": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"display": {
|
||||||
|
"separator": " ",
|
||||||
|
"key": {
|
||||||
|
"width": 12
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"modules": [
|
||||||
|
"title",
|
||||||
|
"separator",
|
||||||
|
|
||||||
|
"os",
|
||||||
|
"kernel",
|
||||||
|
"uptime",
|
||||||
|
"packages",
|
||||||
|
"shell",
|
||||||
|
|
||||||
|
"break",
|
||||||
|
|
||||||
|
"cpu",
|
||||||
|
"memory",
|
||||||
|
{
|
||||||
|
"type": "disk",
|
||||||
|
"folders": "/"
|
||||||
|
},
|
||||||
|
"localip",
|
||||||
|
|
||||||
|
"break",
|
||||||
|
|
||||||
|
"colors"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
# Forge-related Configurations
|
|
||||||
|
|
||||||
This folder contains settings
|
|
||||||
for the [Forge GNOME shell extension](https://extensions.gnome.org/extension/4481/forge/).
|
|
||||||
|
|
||||||
`~/.config/forge/stylesheet/forge/stylesheet.css` is untracked
|
|
||||||
and written by [`color-palette`](../../.local/bin/color-palette).
|
|
||||||
|
|
@ -1,136 +0,0 @@
|
||||||
{
|
|
||||||
"overrides": [
|
|
||||||
{
|
|
||||||
"wmClass": "Ibus-ui-emojier",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "Nextcloud",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "org.gnome.Shell.Extensions",
|
|
||||||
"wmTitle": "Forge Settings",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "jetbrains-toolbox",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "jetbrains-goland",
|
|
||||||
"wmTitle": "splash",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "jetbrains-webstorm",
|
|
||||||
"wmTitle": "splash",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "jetbrains-phpstorm",
|
|
||||||
"wmTitle": "splash",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "jetbrains-datagrip",
|
|
||||||
"wmTitle": "splash",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "jetbrains-rubymine",
|
|
||||||
"wmTitle": "splash",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "jetbrains-idea",
|
|
||||||
"wmTitle": "splash",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "com.github.amezin.ddterm",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "com.github.donadigo.eddy",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "Conky",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "Gnome-initial-setup",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "org.gnome.Calculator",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "gnome-terminal-server",
|
|
||||||
"wmTitle": "Preferences – General",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "gnome-terminal-preferences",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "Guake",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "zoom",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "firefox",
|
|
||||||
"wmTitle": "About Mozilla Firefox",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "firefox",
|
|
||||||
"wmTitle": "!Mozilla Firefox",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "org.mozilla.firefox.desktop",
|
|
||||||
"wmTitle": "About Mozilla Firefox",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "org.mozilla.firefox.desktop",
|
|
||||||
"wmTitle": "!Mozilla Firefox",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "thunderbird",
|
|
||||||
"wmTitle": "About Mozilla Thunderbird",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "thunderbird",
|
|
||||||
"wmTitle": "!Mozilla Thunderbird",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "org.mozilla.Thunderbird.desktop",
|
|
||||||
"wmTitle": "About Mozilla Thunderbird",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "org.mozilla.Thunderbird.desktop",
|
|
||||||
"wmTitle": "!Mozilla Thunderbird",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "evolution-alarm-notify",
|
|
||||||
"mode": "float"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wmClass": "variety",
|
|
||||||
"mode": "float"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
@ -350,20 +350,6 @@ ui = auto
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# The named colors below follow the semantic roles defined
|
|
||||||
# in ~/.config/gnome-settings/COLORS.md:
|
|
||||||
#
|
|
||||||
# red errors, failures, deletions
|
|
||||||
# green success, additions
|
|
||||||
# yellow warnings, highlights, modifications
|
|
||||||
# blue information
|
|
||||||
# magenta special items (e.g., tags, stashes)
|
|
||||||
# cyan secondary information (e.g., remotes)
|
|
||||||
#
|
|
||||||
# The terminals have "bold is bright" turned off,
|
|
||||||
# so "bold" is only a weight and "bright<color>" is the emphasis shade
|
|
||||||
|
|
||||||
|
|
||||||
[color "branch"]
|
[color "branch"]
|
||||||
|
|
||||||
current = cyan dim bold reverse
|
current = cyan dim bold reverse
|
||||||
|
|
|
||||||
|
|
@ -1,58 +0,0 @@
|
||||||
# GNOME Settings
|
|
||||||
|
|
||||||
|
|
||||||
This folder contains my GNOME settings
|
|
||||||
split into several `*.ini` files by logical group.
|
|
||||||
|
|
||||||
Machine-specific overrides may live in `local/*.ini` and are loaded last.
|
|
||||||
See this [README.md](./local/README.md) for details and examples.
|
|
||||||
|
|
||||||
|
|
||||||
All paths inside the files are absolute,
|
|
||||||
anchored at the root of `dconf`.
|
|
||||||
Therefore, they must always be loaded anchored at the root as well.
|
|
||||||
|
|
||||||
The files are machine independent and use `/home/user` as a placeholder,
|
|
||||||
which must be rewritten to the real home directory before loading:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sed "s|/home/user|$HOME|g" <file> | dconf load /
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
[`gnome-restore`](../../.local/bin/gnome-restore) automates this upon every login
|
|
||||||
(via the `gnome-restore.service` systemd user unit).
|
|
||||||
|
|
||||||
Process:
|
|
||||||
1. Back up the current `dconf` state into ~/.local/state/gnome-settings-backups/
|
|
||||||
2. On a fresh session, remove the temporary background state
|
|
||||||
written by [`randomize-background`](../../.local/bin/randomize-background)
|
|
||||||
3. Reset all managed sub-trees,
|
|
||||||
so that keys removed from the `*.ini` files do not linger in the live state
|
|
||||||
4. Patch a broken backup path in the installed `forge` extension (`theme.js`)
|
|
||||||
5. Ensure the enabled GNOME extensions' schemas are imported
|
|
||||||
6. Load every `*.ini` here, then every `local/*.ini`
|
|
||||||
|
|
||||||
[`dconf-load`](../../.local/bin/dconf-load) captures step 6 as an independent utility,
|
|
||||||
or for just one file given as an argument,
|
|
||||||
which is handy while iterating on a single `*.ini`:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
dconf-load key-bindings.ini
|
|
||||||
```
|
|
||||||
|
|
||||||
It neither backs up nor resets anything,
|
|
||||||
so keys removed from the `*.ini` files stay active until the next `gnome-restore`.
|
|
||||||
Its purpose is to help during development of the `*.ini` files.
|
|
||||||
|
|
||||||
|
|
||||||
[`dconf-verify`](../../.local/bin/dconf-verify) lists keys diverging
|
|
||||||
between the live state and the `*.ini` files,
|
|
||||||
and can be used to find live keys worth adopting.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Color Palette
|
|
||||||
|
|
||||||
`COLORS.md` is an untracked, human-readable overview of the palette,
|
|
||||||
written by [`color-palette`](../../.local/bin/color-palette).
|
|
||||||
|
|
@ -1,463 +0,0 @@
|
||||||
# Settings for various desktop apps
|
|
||||||
|
|
||||||
# Note that configurations for apps no longer in use
|
|
||||||
# or not yet installed are dragged along here on purpose
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[ca/desrt/dconf-editor]
|
|
||||||
|
|
||||||
show-warning=false
|
|
||||||
|
|
||||||
bookmarks=['/org/gnome/shell/extensions/']
|
|
||||||
|
|
||||||
behaviour='safe'
|
|
||||||
|
|
||||||
refresh-settings-schema-source=true
|
|
||||||
small-bookmarks-rows=true
|
|
||||||
|
|
||||||
# Always start at dconf's root
|
|
||||||
restore-view=false
|
|
||||||
saved-pathbar-path='/'
|
|
||||||
saved-view='/'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[desktop/ibus/panel]
|
|
||||||
|
|
||||||
use-custom-font=true
|
|
||||||
custom-font='Adwaita Sans 11'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/baobab]
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/baobab/ui]
|
|
||||||
|
|
||||||
active-chart='rings'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/calculator]
|
|
||||||
|
|
||||||
accuracy=12
|
|
||||||
angle-units='degrees'
|
|
||||||
base=10
|
|
||||||
|
|
||||||
button-mode='basic'
|
|
||||||
|
|
||||||
number-format='fixed'
|
|
||||||
|
|
||||||
# For exchange rates
|
|
||||||
refresh-interval=86400
|
|
||||||
|
|
||||||
show-thousands=true
|
|
||||||
show-zeroes=true
|
|
||||||
|
|
||||||
source-currency='EUR'
|
|
||||||
target-currency='USD'
|
|
||||||
|
|
||||||
source-units='degree'
|
|
||||||
target-units='radian'
|
|
||||||
|
|
||||||
window-maximized=false
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/calendar]
|
|
||||||
|
|
||||||
active-view='week'
|
|
||||||
|
|
||||||
weather-settings=(true, true, '', @mv nothing)
|
|
||||||
|
|
||||||
window-maximized=false
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/Characters]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/clocks]
|
|
||||||
|
|
||||||
geolocation=true
|
|
||||||
|
|
||||||
# Keep in sync with "locations" in [org/gnome/shell/world-clocks]
|
|
||||||
world-clocks=[{'location': <(uint32 2, <('Phoenix', 'KPHX', true, [(0.58353629681163499, -1.955660817467636)], [(0.58378430809834336, -1.9560609516519483)])>)>}, {'location': <(uint32 2, <('New York', 'KNYC', true, [(0.71180344078725644, -1.2909618758762367)], [(0.71059804659265924, -1.2916478949920254)])>)>}, {'location': <(uint32 2, <('UTC', 'BIRK', true, [(1.1216380205691279, -0.38222710618675809)], [(1.1195629471197465, -0.38251373858977449)])>)>}, {'location': <(uint32 2, <('London', 'EGLL', true, [(0.89845190959903677, -0.0080529408042633736)], [(0.89899290734596930, -0.0021946055346929697)])>)>}, {'location': <(uint32 2, <('Berlin', 'EDDB', true, [(0.91426163401859872, 0.23591034304566436)], [(0.91658875132345297, 0.23387411976724018)])>)>}]
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/clocks/state/window]
|
|
||||||
|
|
||||||
maximized=false
|
|
||||||
|
|
||||||
panel-id='world'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/Connections]
|
|
||||||
|
|
||||||
first-run=false
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/Contacts]
|
|
||||||
|
|
||||||
did-initial-setup=true
|
|
||||||
|
|
||||||
sort-on-surname=false
|
|
||||||
|
|
||||||
window-fullscreen=false
|
|
||||||
window-maximized=false
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/control-center]
|
|
||||||
|
|
||||||
last-panel='system'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/Disks]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/evince]
|
|
||||||
|
|
||||||
auto-reload=true
|
|
||||||
|
|
||||||
allow-links-change-zoom=false
|
|
||||||
|
|
||||||
# Default search path when opening a document
|
|
||||||
document-directory=@ms nothing
|
|
||||||
|
|
||||||
# Last location to save extracted images to
|
|
||||||
pictures-directory=@ms nothing
|
|
||||||
|
|
||||||
# Ignore a PDF's own copy/print prohibitions
|
|
||||||
override-restrictions=true
|
|
||||||
|
|
||||||
# We know what F7 does
|
|
||||||
show-caret-navigation-message=false
|
|
||||||
|
|
||||||
# Make scrolling larger PDFs smoother
|
|
||||||
page-cache-size=uint32 512
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/evince/default]
|
|
||||||
|
|
||||||
continuous=true
|
|
||||||
|
|
||||||
dual-page=false
|
|
||||||
dual-page-odd-left=false
|
|
||||||
|
|
||||||
enable-spellchecking=true
|
|
||||||
|
|
||||||
fullscreen=false
|
|
||||||
inverted-colors=false
|
|
||||||
|
|
||||||
show-sidebar=false
|
|
||||||
sidebar-size=128
|
|
||||||
|
|
||||||
sizing-mode='automatic'
|
|
||||||
zoom=1.0
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/evolution/mail]
|
|
||||||
|
|
||||||
use-custom-font=true
|
|
||||||
|
|
||||||
monospace-font='FiraCode Nerd Font 12'
|
|
||||||
variable-width-font='Adwaita Sans 12'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/gedit]
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/gedit/plugins/filebrowser]
|
|
||||||
|
|
||||||
tree-view=true
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/gedit/preferences/ui]
|
|
||||||
|
|
||||||
show-tabs-mode='auto'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/gnome-system-monitor]
|
|
||||||
|
|
||||||
cpu-smooth-graph=true
|
|
||||||
cpu-stacked-area-chart=false
|
|
||||||
|
|
||||||
disks-interval=1000
|
|
||||||
graph-update-interval=250
|
|
||||||
network-in-bits=true
|
|
||||||
|
|
||||||
maximized=false
|
|
||||||
|
|
||||||
show-all-fs=true
|
|
||||||
show-dependencies=false
|
|
||||||
show-whose-processes='user'
|
|
||||||
|
|
||||||
update-interval=1000
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/Loupe]
|
|
||||||
|
|
||||||
# Show the image properties sidebar
|
|
||||||
show-properties=true
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/maps]
|
|
||||||
|
|
||||||
map-type='MapsVectorSource'
|
|
||||||
|
|
||||||
last-viewed-location=[49.616891519885499, 9.1811720200844604]
|
|
||||||
zoom-level=13
|
|
||||||
|
|
||||||
show-scale=true
|
|
||||||
|
|
||||||
transportation-type='car'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/nautilus]
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/nautilus/compression]
|
|
||||||
|
|
||||||
default-compression-format='zip'
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/nautilus/icon-view]
|
|
||||||
|
|
||||||
captions=['size', 'none', 'none']
|
|
||||||
|
|
||||||
default-zoom-level='large'
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/nautilus/list-view]
|
|
||||||
|
|
||||||
default-column-order=['name', 'size', 'type', 'owner', 'group', 'permissions', 'where', 'date_modified', 'date_modified_with_time', 'date_accessed', 'recency', 'starred', 'detailed_type']
|
|
||||||
default-visible-columns=['name', 'size', 'date_modified', 'starred']
|
|
||||||
|
|
||||||
default-zoom-level='small'
|
|
||||||
|
|
||||||
use-tree-view=true
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/nautilus/preferences]
|
|
||||||
|
|
||||||
migrated-gtk-settings=true
|
|
||||||
|
|
||||||
always-use-location-entry=true
|
|
||||||
|
|
||||||
default-folder-viewer='list-view'
|
|
||||||
|
|
||||||
search-filter-time-type='last_modified'
|
|
||||||
|
|
||||||
show-create-link=false
|
|
||||||
show-delete-permanently=true
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/software]
|
|
||||||
|
|
||||||
allow-updates=false
|
|
||||||
|
|
||||||
download-updates=false
|
|
||||||
download-updates-notify=false
|
|
||||||
|
|
||||||
enable-repos-dialog=true
|
|
||||||
|
|
||||||
show-only-free-apps=false
|
|
||||||
|
|
||||||
# `flatpak` authors must be verified
|
|
||||||
show-only-verified-apps=true
|
|
||||||
|
|
||||||
prompt-for-nonfree=false
|
|
||||||
show-nonfree-ui=true
|
|
||||||
|
|
||||||
installed-page-show-size=true
|
|
||||||
|
|
||||||
first-run=false
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/terminal]
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/terminal/legacy]
|
|
||||||
|
|
||||||
always-check-default-terminal=false
|
|
||||||
|
|
||||||
confirm-close=false
|
|
||||||
|
|
||||||
|
|
||||||
# [org/gnome/terminal/legacy/keybindings]
|
|
||||||
# See ~/.config/gnome-settings/key-bindings.ini for the key bindings
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/terminal/legacy/profiles:]
|
|
||||||
|
|
||||||
# Dummy value
|
|
||||||
default='12345678-1234-5678-9000-123456789000'
|
|
||||||
list=['12345678-1234-5678-9000-123456789000']
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/terminal/legacy/profiles:/:12345678-1234-5678-9000-123456789000]
|
|
||||||
|
|
||||||
visible-name='Default Profile'
|
|
||||||
|
|
||||||
use-custom-command=true
|
|
||||||
custom-command='/usr/bin/bash'
|
|
||||||
login-shell=false
|
|
||||||
|
|
||||||
audible-bell=false
|
|
||||||
|
|
||||||
use-theme-colors=false
|
|
||||||
|
|
||||||
# The 16 ANSI colors come from ~/.config/gnome-settings/COLORS.md,
|
|
||||||
# generated by ~/.local/bin/color-palette, with these semantic roles:
|
|
||||||
#
|
|
||||||
# 1. black chrome tone, "background-like", counterpart of white
|
|
||||||
# 2. red errors, failures, deletions (e.g., `diff`)
|
|
||||||
# 3. green success, executables, additions (e.g., `diff`)
|
|
||||||
# 4. yellow warnings, highlights, modifications (e.g., `diff`)
|
|
||||||
# 5. blue information, directories
|
|
||||||
# 6. magenta keywords, constants, special items
|
|
||||||
# 7. cyan strings, symlinks, secondary information
|
|
||||||
# 8. white default foreground text
|
|
||||||
#
|
|
||||||
# Each color also has a bright shade with the same role but more emphasis
|
|
||||||
#
|
|
||||||
# In light mode the bright shades are darker, not lighter,
|
|
||||||
# because they are solved for contrast against "base", not for luminance
|
|
||||||
|
|
||||||
# Fallback values for when theme coloring is turned off
|
|
||||||
background-color='rgb(252,234,227)'
|
|
||||||
foreground-color='rgb(42,11,1)'
|
|
||||||
|
|
||||||
# Keep in sync with the "Terminal ANSI Colors" table in ~/.config/gnome-settings/COLORS.md
|
|
||||||
#
|
|
||||||
# Order as described above, first normal version, then the bright shade of each
|
|
||||||
palette=['rgb(235,235,237)', 'rgb(177,79,35)', 'rgb(59,121,63)', 'rgb(126,107,24)', 'rgb(39,92,179)', 'rgb(143,77,138)', 'rgb(0,121,121)', 'rgb(42,11,1)', 'rgb(252,108,39)', 'rgb(174,47,0)', 'rgb(0,111,26)', 'rgb(115,92,0)', 'rgb(0,69,190)', 'rgb(138,47,133)', 'rgb(0,106,107)', 'rgb(42,11,1)']
|
|
||||||
|
|
||||||
bold-is-bright=false
|
|
||||||
|
|
||||||
use-system-font=false
|
|
||||||
font='FiraCode Nerd Font 11'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/TextEditor]
|
|
||||||
|
|
||||||
style-scheme='builder'
|
|
||||||
|
|
||||||
use-system-font=false
|
|
||||||
custom-font='FiraCode Nerd Font 11'
|
|
||||||
|
|
||||||
discover-settings=true
|
|
||||||
|
|
||||||
highlight-current-line=true
|
|
||||||
|
|
||||||
auto-indent=true
|
|
||||||
indent-style='space'
|
|
||||||
tab-width=4
|
|
||||||
|
|
||||||
wrap-text=false
|
|
||||||
|
|
||||||
last-save-directory='file:///home/user'
|
|
||||||
|
|
||||||
show-grid=true
|
|
||||||
show-line-numbers=true
|
|
||||||
show-map=true
|
|
||||||
show-right-margin=false
|
|
||||||
|
|
||||||
spellcheck=true
|
|
||||||
|
|
||||||
restore-session=false
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/Totem]
|
|
||||||
|
|
||||||
subtitle-font='Adwaita Sans Bold 20'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/tweaks]
|
|
||||||
|
|
||||||
show-extensions-notice=false
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/Weather]
|
|
||||||
|
|
||||||
# Keep in sync with "locations" in [org/gnome/shell/weather]
|
|
||||||
locations=[<(uint32 2, <('Berlin', 'EDDB', true, [(0.91426163401859872, 0.23591034304566436)], [(0.91658875132345297, 0.23387411976724018)])>)>, <(uint32 2, <('Heidelberg', 'EDFM', true, [(0.86345801419289459, 0.14862448983795826)], [(0.86238428763706787, 0.1517127801361921)])>)>, <(uint32 2, <('London', 'EGLL', true, [(0.89845190959903677, -0.0080529408042633736)], [(0.89899290734596930, -0.0021946055346929697)])>)>, <(uint32 2, <('New York', 'KNYC', true, [(0.71180344078725644, -1.2909618758762367)], [(0.71059804659265924, -1.2916478949920254)])>)>, <(uint32 2, <('Phoenix', 'KPHX', true, [(0.58353629681163499, -1.955660817467636)], [(0.58378430809834336, -1.9560609516519483)])>)>]
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/GWeather4]
|
|
||||||
|
|
||||||
default-location=('Heidelberg', 'EDFM', @m(dd) nothing)
|
|
||||||
|
|
||||||
distance-unit='meters'
|
|
||||||
pressure-unit='hpa'
|
|
||||||
speed-unit='kph'
|
|
||||||
temperature-unit='celsius'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [org/gtk/*/settings/file-chooser]
|
|
||||||
|
|
||||||
# This is the "GTK file-chooser dialog"
|
|
||||||
|
|
||||||
|
|
||||||
[org/gtk/gtk4/settings/file-chooser]
|
|
||||||
# Keep in sync with [org/gtk/settings/file-chooser]
|
|
||||||
|
|
||||||
date-format='regular'
|
|
||||||
|
|
||||||
location-mode='path-bar'
|
|
||||||
|
|
||||||
show-hidden=false
|
|
||||||
show-size-column=true
|
|
||||||
show-type-column=true
|
|
||||||
|
|
||||||
sort-column='name'
|
|
||||||
sort-directories-first=true
|
|
||||||
sort-order='ascending'
|
|
||||||
|
|
||||||
type-format='category'
|
|
||||||
|
|
||||||
|
|
||||||
[org/gtk/settings/file-chooser]
|
|
||||||
# Keep in sync with [org/gtk/gtk4/settings/file-chooser]
|
|
||||||
|
|
||||||
date-format='regular'
|
|
||||||
|
|
||||||
location-mode='path-bar'
|
|
||||||
|
|
||||||
show-hidden=false
|
|
||||||
show-size-column=true
|
|
||||||
show-type-column=true
|
|
||||||
|
|
||||||
sort-column='name'
|
|
||||||
sort-directories-first=true
|
|
||||||
sort-order='ascending'
|
|
||||||
|
|
||||||
type-format='category'
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/portal/filechooser]
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/portal/filechooser/com.google.Chrome]
|
|
||||||
|
|
||||||
last-folder-path='/home/user'
|
|
||||||
|
|
@ -1,799 +0,0 @@
|
||||||
# Unify all key bindings to conveniently keep them consistent
|
|
||||||
|
|
||||||
# Target: `i3wm` defaults are the rough spec,
|
|
||||||
# but with "hjkl" for direction instead of "jkl;"
|
|
||||||
# and arrows mapped differently than "hjkl"
|
|
||||||
# => We make GNOME/forge bend to match
|
|
||||||
#
|
|
||||||
#--------------------------------------------------------------------------------------------------
|
|
||||||
# Modifier Layers
|
|
||||||
#--------------------------------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# - Everything bound globally lives on <Super>
|
|
||||||
#
|
|
||||||
# <Super> + ... Navigate windows and workspaces,
|
|
||||||
# which includes launching the app we want to get to
|
|
||||||
#
|
|
||||||
# <Super><Shift> + ... Move windows within or to another workspace
|
|
||||||
#
|
|
||||||
# <Super><Control> + ... Swap and float windows (GNOME/forge only)
|
|
||||||
# + primary system layer, including
|
|
||||||
# media, devices, session, power, and some more
|
|
||||||
#
|
|
||||||
# <Super><Alt> + ... Grow windows
|
|
||||||
# + secondary system layer, including
|
|
||||||
# lights, brightness, and overflow from primary
|
|
||||||
#
|
|
||||||
# <Super><Alt><Shift> + ... Shrink windows
|
|
||||||
# + tertiary layer
|
|
||||||
#
|
|
||||||
# Each group may contain a few self-explanatory exceptions
|
|
||||||
#
|
|
||||||
# - These layers are never bound globally and stay free for the active app:
|
|
||||||
#
|
|
||||||
# <Control> + ...
|
|
||||||
#
|
|
||||||
# <Control><Shift> + ... Browser extension shortcuts
|
|
||||||
#
|
|
||||||
# <Control><Alt> + ...
|
|
||||||
#
|
|
||||||
# <Alt><Shift> + ... Browser extension shortcuts
|
|
||||||
#
|
|
||||||
# - F1-F12 are deliberately not bound globally, with a few exceptions,
|
|
||||||
#
|
|
||||||
# <Super>F1 to show these key bindings
|
|
||||||
#
|
|
||||||
# <Alt>F4 to close windows
|
|
||||||
#
|
|
||||||
# F11 to (un-)maximize a window
|
|
||||||
#
|
|
||||||
# <Control><Alt>F1-F12 are claimed by the X11 server for switching virtual terminals
|
|
||||||
#
|
|
||||||
# - A few exceptions to the layers above are kept on purpose,
|
|
||||||
# either because a binding is so common that people expect it,
|
|
||||||
# or because a key already says on its own what it does
|
|
||||||
#
|
|
||||||
# - Note that "compose:ralt" in ~/.config/gnome-settings/misc.ini
|
|
||||||
# turns the right <Alt> key into <Compose>
|
|
||||||
# => Every <Super><Alt> binding must be pressed with the LEFT <Alt>
|
|
||||||
#
|
|
||||||
#------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# <Super> Layers
|
|
||||||
#------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# - "hjkl" act on windows in the tree
|
|
||||||
# - arrows act on the "machine"
|
|
||||||
# - "WS" => "workspace"
|
|
||||||
# - Rows read from window navigation over launchers to system control,
|
|
||||||
# with the destructive session & power rows last
|
|
||||||
#
|
|
||||||
# | Navigation | Window Management | Primary System | Secondary System | Tertiary System
|
|
||||||
# | | | | |
|
|
||||||
# Key(s) | <Super> | <Super><Shift> | <Super><Control> | <Super><Alt> | <Super><Alt><Shift>
|
|
||||||
# ------------------+------------------------+------------------------+------------------------+------------------------+------------------------
|
|
||||||
# | Jump to window ... | Move window ... | Swap window with ... | Grow window at ... | Shrink window at ...
|
|
||||||
# k | ... up | ... up | ... window above | ... top edge | ... bottom edge
|
|
||||||
# j | ... down | ... down | ... window below | ... bottom edge | ... top edge
|
|
||||||
# h | ... left | ... left | ... window left | ... left edge | ... right edge
|
|
||||||
# l | ... right | ... right | ... window right | ... right edge | ... left edge
|
|
||||||
# | | | | |
|
|
||||||
# | | | Adjust volume ... | Adjust brightness ... |
|
|
||||||
# Up | | | ... up | ... up |
|
|
||||||
# Down | | | ... down | ... down |
|
|
||||||
# | | | | |
|
|
||||||
# | | | Play ... | Seek ... |
|
|
||||||
# Left | | | ... previous track | ... backward |
|
|
||||||
# Right | | | ... next track | ... forward |
|
|
||||||
# ------------------+------------------------+------------------------+------------------------+------------------------+------------------------
|
|
||||||
# m | Evolution | Maximize the window | Mute the volume | Mute the microphone |
|
|
||||||
# | | | | |
|
|
||||||
# f | Files (nautilus) | Toggle fullscreen | Toggle float ... | Toggle float ... | Toggle float ...
|
|
||||||
# | | | ... for the window | ... for the app | ... for entire WS
|
|
||||||
# | | | | |
|
|
||||||
# q | | Close the window | | |
|
|
||||||
# ------------------+------------------------+------------------------+------------------------+------------------------+------------------------
|
|
||||||
# b | Split beside | | Toggle bluetooth | Randomize wallpaper |
|
|
||||||
# v | Split below | | (Un-)Mount the ~/Vault | |
|
|
||||||
# e | Split toggle | | Show battery load | |
|
|
||||||
# s | Stacked layout | | | |
|
|
||||||
# w | Tabbed layout | | Toggle WiFi | Toggle airplane mode |
|
|
||||||
# ------------------+------------------------+------------------------+------------------------+------------------------+------------------------
|
|
||||||
# grave ~ ` | | | Swap last two windows | |
|
|
||||||
# | | | | |
|
|
||||||
# n | Jump to first ... | Move window to ... | | |
|
|
||||||
# | ... empty WS | ... first empty WS | | |
|
|
||||||
# | | | | |
|
|
||||||
# | Jump to WS ... | Move window to WS ... | | |
|
|
||||||
# 1 to 0 | ... No. 1 to 0 | ... No. 1 to 0 | | |
|
|
||||||
# | | | | Adjust key lights ... |
|
|
||||||
# comma < , | ... on the left | ... on the left | | ... down |
|
|
||||||
# period > . | ... on the right | ... on the right | | ... up |
|
|
||||||
# ------------------+------------------------+------------------------+------------------------+------------------------+------------------------
|
|
||||||
# slash / ? | GNOME's app drawer | GNOME's search | GNOME's message tray | Toggle key lights | Open quick settings
|
|
||||||
# | | | | |
|
|
||||||
# Tab | Show open windows | | | |
|
|
||||||
# | | | | |
|
|
||||||
# space | Open the launcher | Run a command | Toggle media playback | |
|
|
||||||
# | | | | |
|
|
||||||
# d | Open the launcher | Run a command | | Toggle dark scheme |
|
|
||||||
# | | | | |
|
|
||||||
# Return t | Alacritty (zsh) | GNOME Terminal (bash) | | |
|
|
||||||
# | | | | |
|
|
||||||
# semicolon : ; | Type an emoji | Copy an emoji | | |
|
|
||||||
# | | | | |
|
|
||||||
# i | Firefox | Chromium | Google Chrome | Toggle touchpad |
|
|
||||||
# ------------------+------------------------+------------------------+------------------------+------------------------+------------------------
|
|
||||||
# | | | | Make night light ... |
|
|
||||||
# bracketleft [ | | | | ... cooler |
|
|
||||||
# bracketright ] | | | | ... warmer |
|
|
||||||
# | | | | |
|
|
||||||
# backslash \ | | | | Force night light ... | Turn night light ...
|
|
||||||
# | | | | ... on/off | ... on/off
|
|
||||||
# ------------------+------------------------+------------------------+------------------------+------------------------+------------------------
|
|
||||||
# p | | | Open screenshot UI (1) | Capture the window (1) | Capture the screen (1)
|
|
||||||
# | | | | |
|
|
||||||
# r | | | Start screen recording | | Restart GNOME shell
|
|
||||||
# ------------------+------------------------+------------------------+------------------------+------------------------+------------------------
|
|
||||||
# Escape | | | Lock screen | Suspend with lock (2) | Hibernate with lock (2)
|
|
||||||
# | | | | |
|
|
||||||
# BackSpace Delete | | | Log out | Reboot the machine | Shutdown the machine
|
|
||||||
# | | | | |
|
|
||||||
# Home | | | Reboot the machine | |
|
|
||||||
# | | | | |
|
|
||||||
# End | | | Shutdown the machine | |
|
|
||||||
#
|
|
||||||
# (1) If a machine has a Print key,
|
|
||||||
# pressing Print (UI), <Alt>Print (Window), and <Shift>Print (Screen)
|
|
||||||
# also works
|
|
||||||
# (2) Bound in local/*.ini only, on machines that support it
|
|
||||||
#
|
|
||||||
#--------------------------------------------------------------------------------------------------
|
|
||||||
# Browser extension shortcuts
|
|
||||||
#--------------------------------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# - Two in-app layers are used because no single layer is conflict-free:
|
|
||||||
# + <Control><Shift> dodges Firefox's <Alt> menu accelerators
|
|
||||||
# and Vimium, which treats <Alt><Shift>letter as the plain shifted letter
|
|
||||||
# + <Alt><Shift> keeps the c/d mnemonics for Dark Reader
|
|
||||||
#
|
|
||||||
# - Set manually, NOT managed by `dconf`:
|
|
||||||
# + Chrome => chrome://extensions/shortcuts (use scope: "In Chrome")
|
|
||||||
# + Firefox => about:addons -> gear icon -> "Manage Extension Shortcuts"
|
|
||||||
#
|
|
||||||
# - Notes:
|
|
||||||
# + "compose:ralt" applies here too => Must press with the left <Alt>
|
|
||||||
# + <Control><Shift>b toggles the bookmarks toolbar in Firefox
|
|
||||||
# + <Control><Shift>v shadows the browsers' "paste without formatting"
|
|
||||||
#
|
|
||||||
# Key | Extension | Action
|
|
||||||
# ------------------------+----------------+-----------------------------------------------------------------------
|
|
||||||
# <Control><Shift>l | Bitwarden | Open Bitwarden popup
|
|
||||||
# <Control><Shift>comma | Bitwarden | Generate & copy password
|
|
||||||
# <Control><Shift>period | Bitwarden | Autofill last login (i.e., "password")
|
|
||||||
# | |
|
|
||||||
# <Alt><Shift>d | Dark Reader | Toggle extension for all sites
|
|
||||||
# <Alt><Shift>c | Dark Reader | Toggle extension for current site only
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/wm/keybindings]
|
|
||||||
|
|
||||||
activate-window-menu=@as []
|
|
||||||
|
|
||||||
always-on-top=@as []
|
|
||||||
|
|
||||||
# <Alt>F4 is an exception to the F-key rule,
|
|
||||||
# because everyone expects it
|
|
||||||
close=['<Super><Shift>q', '<Alt>F4']
|
|
||||||
|
|
||||||
# F11 is an exception to the F-key rule,
|
|
||||||
# because everyone expects it
|
|
||||||
toggle-fullscreen=['<Super><Shift>f', 'F11']
|
|
||||||
|
|
||||||
toggle-maximized=['<Super><Shift>m']
|
|
||||||
maximize=@as []
|
|
||||||
unmaximize=@as []
|
|
||||||
|
|
||||||
minimize=@as []
|
|
||||||
|
|
||||||
switch-applications=@as []
|
|
||||||
switch-applications-backward=@as []
|
|
||||||
|
|
||||||
switch-input-source=@as []
|
|
||||||
switch-input-source-backward=@as []
|
|
||||||
|
|
||||||
switch-group=@as []
|
|
||||||
switch-group-backward=@as []
|
|
||||||
switch-panels=@as []
|
|
||||||
switch-panels-backward=@as []
|
|
||||||
switch-windows=@as []
|
|
||||||
switch-windows-backward=@as []
|
|
||||||
|
|
||||||
cycle-group=@as []
|
|
||||||
cycle-group-backward=@as []
|
|
||||||
cycle-panels=@as []
|
|
||||||
cycle-panels-backward=@as []
|
|
||||||
# Kept mainly because other people may expect this;
|
|
||||||
# otherwise, redundant because of <Super>Tab
|
|
||||||
cycle-windows=['<Alt>Tab']
|
|
||||||
cycle-windows-backward=['<Alt><Shift>Tab']
|
|
||||||
|
|
||||||
begin-move=@as []
|
|
||||||
begin-resize=@as []
|
|
||||||
|
|
||||||
# Deprecated and ignored, listed only for completeness
|
|
||||||
panel-main-menu=@as []
|
|
||||||
|
|
||||||
# GNOME's own run prompt on <Alt>F2,
|
|
||||||
# replaced by `rofi` on <Super><Shift>space
|
|
||||||
panel-run-dialog=@as []
|
|
||||||
|
|
||||||
toggle-above=@as []
|
|
||||||
toggle-on-all-workspaces=@as []
|
|
||||||
|
|
||||||
show-desktop=@as []
|
|
||||||
|
|
||||||
switch-to-workspace-1=[ '<Super>1']
|
|
||||||
switch-to-workspace-2=[ '<Super>2']
|
|
||||||
switch-to-workspace-3=[ '<Super>3']
|
|
||||||
switch-to-workspace-4=[ '<Super>4']
|
|
||||||
switch-to-workspace-5=[ '<Super>5']
|
|
||||||
switch-to-workspace-6=[ '<Super>6']
|
|
||||||
switch-to-workspace-7=[ '<Super>7']
|
|
||||||
switch-to-workspace-8=[ '<Super>8']
|
|
||||||
switch-to-workspace-9=[ '<Super>9']
|
|
||||||
switch-to-workspace-10=['<Super>0']
|
|
||||||
switch-to-workspace-11=@as []
|
|
||||||
switch-to-workspace-12=@as []
|
|
||||||
switch-to-workspace-last=@as []
|
|
||||||
|
|
||||||
switch-to-workspace-up=@as []
|
|
||||||
switch-to-workspace-down=@as []
|
|
||||||
switch-to-workspace-left=[ '<Super>comma']
|
|
||||||
switch-to-workspace-right=['<Super>period']
|
|
||||||
# "hotkey" in [desktop/ibus/panel/emoji]
|
|
||||||
# must remove <Super>period from its (default) binding;
|
|
||||||
# otherwise it contradicts "switch-to-workspace-right"
|
|
||||||
|
|
||||||
move-to-workspace-1=[ '<Super><Shift>1']
|
|
||||||
move-to-workspace-2=[ '<Super><Shift>2']
|
|
||||||
move-to-workspace-3=[ '<Super><Shift>3']
|
|
||||||
move-to-workspace-4=[ '<Super><Shift>4']
|
|
||||||
move-to-workspace-5=[ '<Super><Shift>5']
|
|
||||||
move-to-workspace-6=[ '<Super><Shift>6']
|
|
||||||
move-to-workspace-7=[ '<Super><Shift>7']
|
|
||||||
move-to-workspace-8=[ '<Super><Shift>8']
|
|
||||||
move-to-workspace-9=[ '<Super><Shift>9']
|
|
||||||
move-to-workspace-10=['<Super><Shift>0']
|
|
||||||
move-to-workspace-11=@as []
|
|
||||||
move-to-workspace-12=@as []
|
|
||||||
move-to-workspace-last=@as []
|
|
||||||
|
|
||||||
move-to-workspace-up=@as []
|
|
||||||
move-to-workspace-down=@as []
|
|
||||||
move-to-workspace-left=[ '<Super><Shift>comma']
|
|
||||||
move-to-workspace-right=['<Super><Shift>period']
|
|
||||||
|
|
||||||
move-to-monitor-up=@as []
|
|
||||||
move-to-monitor-down=@as []
|
|
||||||
move-to-monitor-left=@as []
|
|
||||||
move-to-monitor-right=@as []
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/shell/extensions/forge/keybindings]
|
|
||||||
|
|
||||||
# The latest `forge` on https://extensions.gnome.org/extension/4481/forge/
|
|
||||||
# may break "window-toggle-float", and is currently not maintained
|
|
||||||
# => Build from source with `gnome-shell-extension-forge-install`
|
|
||||||
window-toggle-float=['<Super><Control>f']
|
|
||||||
window-toggle-always-float=['<Super><Alt>f']
|
|
||||||
|
|
||||||
window-focus-up=[ '<Super>k']
|
|
||||||
window-focus-down=[ '<Super>j']
|
|
||||||
window-focus-left=[ '<Super>h']
|
|
||||||
window-focus-right=['<Super>l']
|
|
||||||
|
|
||||||
window-move-up=[ '<Super><Shift>k']
|
|
||||||
window-move-down=[ '<Super><Shift>j']
|
|
||||||
window-move-left=[ '<Super><Shift>h']
|
|
||||||
window-move-right=['<Super><Shift>l']
|
|
||||||
|
|
||||||
window-swap-up=[ '<Super><Control>k']
|
|
||||||
window-swap-down=[ '<Super><Control>j']
|
|
||||||
window-swap-left=[ '<Super><Control>h']
|
|
||||||
window-swap-right=['<Super><Control>l']
|
|
||||||
|
|
||||||
window-swap-last-active=['<Super><Control>grave']
|
|
||||||
|
|
||||||
# <Super><Alt> + hjkl pushes an edge outward (i.e., "grow")
|
|
||||||
# while <Super><Alt><Shift> + hjkl pulls the opposite edge inward (i.e., "shrink")
|
|
||||||
window-resize-top-increase=[ '<Super><Alt>k']
|
|
||||||
window-resize-top-decrease=[ '<Super><Alt><Shift>j']
|
|
||||||
window-resize-bottom-increase=['<Super><Alt>j']
|
|
||||||
window-resize-bottom-decrease=['<Super><Alt><Shift>k']
|
|
||||||
window-resize-left-increase=[ '<Super><Alt>h']
|
|
||||||
window-resize-left-decrease=[ '<Super><Alt><Shift>l']
|
|
||||||
window-resize-right-increase=[ '<Super><Alt>l']
|
|
||||||
window-resize-right-decrease=[ '<Super><Alt><Shift>h']
|
|
||||||
|
|
||||||
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 []
|
|
||||||
|
|
||||||
window-gap-size-decrease=@as []
|
|
||||||
window-gap-size-increase=@as []
|
|
||||||
|
|
||||||
# Split direction is the container's axis, not the divider drawn
|
|
||||||
# - b => "beside"/"horizontal" => new window opens "beside", to the right
|
|
||||||
# - v => "vertical" => new window opens below
|
|
||||||
con-split-horizontal=['<Super>b']
|
|
||||||
con-split-vertical=[ '<Super>v']
|
|
||||||
|
|
||||||
con-split-layout-toggle=['<Super>e']
|
|
||||||
|
|
||||||
con-stacked-layout-toggle=['<Super>s']
|
|
||||||
|
|
||||||
con-tabbed-layout-toggle=['<Super>w']
|
|
||||||
con-tabbed-showtab-decoration-toggle=@as []
|
|
||||||
|
|
||||||
workspace-active-tile-toggle=['<Super><Alt><Shift>f']
|
|
||||||
|
|
||||||
prefs-open=@as []
|
|
||||||
|
|
||||||
# Allow tiling via drag-and-drop with the mouse
|
|
||||||
mod-mask-mouse-tile='None'
|
|
||||||
|
|
||||||
focus-border-toggle=@as []
|
|
||||||
prefs-tiling-toggle=@as []
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/mutter/keybindings]
|
|
||||||
|
|
||||||
cancel-input-capture=@as []
|
|
||||||
|
|
||||||
# We must set the XF86 key here explicitly
|
|
||||||
# because by default <Super>p is also bound with it
|
|
||||||
# and we want to disable this
|
|
||||||
switch-monitor=['XF86Display']
|
|
||||||
|
|
||||||
toggle-tiled-left=@as []
|
|
||||||
toggle-tiled-right=@as []
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys]
|
|
||||||
|
|
||||||
search=['<Super><Shift>slash']
|
|
||||||
|
|
||||||
calculator=@as []
|
|
||||||
control-center=@as []
|
|
||||||
email=@as []
|
|
||||||
help=@as []
|
|
||||||
home=@as []
|
|
||||||
media=@as []
|
|
||||||
www=@as []
|
|
||||||
|
|
||||||
|
|
||||||
# Session & Power related
|
|
||||||
|
|
||||||
# "Escape" means "step away" while the session survives,
|
|
||||||
# and "the deeper the layer, the deeper the sleep"
|
|
||||||
#
|
|
||||||
# `suspend` and `hibernate` are bound per machine in local/*.ini
|
|
||||||
# because not every machine supports them:
|
|
||||||
# - `mem` and `disk` must appear in /sys/power/state
|
|
||||||
# - `hibernate` additionally needs more swap than RAM,
|
|
||||||
# with swap inside the LUKS container
|
|
||||||
#
|
|
||||||
screensaver=['<Super><Control>Escape']
|
|
||||||
#
|
|
||||||
# Reserved: <Super><Alt>Escape
|
|
||||||
suspend=@as []
|
|
||||||
#
|
|
||||||
# Reserved: <Super><Alt><Shift>Escape
|
|
||||||
hibernate=@as []
|
|
||||||
|
|
||||||
# "BackSpace" means "end the session",
|
|
||||||
# and "the deeper the layer, the further the machine goes"
|
|
||||||
#
|
|
||||||
# "Delete" mirrors it because on many keyboards it sits in the top right corner
|
|
||||||
# while "BackSpace" is the one key guaranteed to exist
|
|
||||||
#
|
|
||||||
# "Home" and "End" say what they do on their own
|
|
||||||
# (i.e., "back to the start" and "the end");
|
|
||||||
# so, they need no layer to express severity
|
|
||||||
# and serve as intuitive shortcuts
|
|
||||||
logout=[ '<Super><Control>BackSpace', '<Super><Control>Delete']
|
|
||||||
reboot=[ '<Super><Alt>BackSpace', '<Super><Alt>Delete', '<Super><Control>Home']
|
|
||||||
shutdown=['<Super><Alt><Shift>BackSpace', '<Super><Alt><Shift>Delete', '<Super><Control>End']
|
|
||||||
|
|
||||||
# The physical power button
|
|
||||||
# is disarmed by "power-button-action" in ~/.config/gnome-settings/misc.ini
|
|
||||||
# => A binding here would do "nothing" anyways
|
|
||||||
power=@as []
|
|
||||||
|
|
||||||
|
|
||||||
# Devices
|
|
||||||
|
|
||||||
# Shows an OSD message only if a machine has a battery
|
|
||||||
battery-status=['<Super><Control>e']
|
|
||||||
|
|
||||||
touchpad-toggle=['<Super><Alt>i']
|
|
||||||
touchpad-on=@as []
|
|
||||||
touchpad-off=@as []
|
|
||||||
|
|
||||||
# "Airplane mode", i.e., all radios at once
|
|
||||||
# (for WiFi only see <Super><Control>w below)
|
|
||||||
rfkill=['<Super><Alt>w']
|
|
||||||
rfkill-bluetooth=['<Super><Control>b']
|
|
||||||
|
|
||||||
|
|
||||||
# Audio related
|
|
||||||
|
|
||||||
# `play` toggles, so `pause` and `stop` are not needed
|
|
||||||
play=['<Super><Control>space']
|
|
||||||
pause=@as []
|
|
||||||
stop=@as []
|
|
||||||
|
|
||||||
eject=@as []
|
|
||||||
|
|
||||||
next=[ '<Super><Control>Right']
|
|
||||||
previous=['<Super><Control>Left']
|
|
||||||
|
|
||||||
playback-forward=['<Super><Alt>Right']
|
|
||||||
playback-rewind=[ '<Super><Alt>Left']
|
|
||||||
|
|
||||||
playback-random=@as []
|
|
||||||
playback-repeat=@as []
|
|
||||||
|
|
||||||
volume-up=['<Super><Control>Up']
|
|
||||||
volume-up-precise=@as []
|
|
||||||
volume-up-quiet=@as []
|
|
||||||
volume-down=['<Super><Control>Down']
|
|
||||||
volume-down-precise=@as []
|
|
||||||
volume-down-quiet=@as []
|
|
||||||
volume-mute=['<Super><Control>m']
|
|
||||||
volume-mute-quiet=@as []
|
|
||||||
|
|
||||||
mic-mute=['<Super><Alt>m']
|
|
||||||
|
|
||||||
|
|
||||||
# Screen and light related
|
|
||||||
|
|
||||||
# "Auto rotate"
|
|
||||||
rotate-video-lock=@as []
|
|
||||||
|
|
||||||
toggle-contrast=@as []
|
|
||||||
|
|
||||||
screen-brightness-up=[ '<Super><Alt>Up']
|
|
||||||
screen-brightness-down=['<Super><Alt>Down']
|
|
||||||
screen-brightness-cycle=@as []
|
|
||||||
|
|
||||||
magnifier=@as []
|
|
||||||
magnifier-zoom-in=@as []
|
|
||||||
magnifier-zoom-out=@as []
|
|
||||||
|
|
||||||
decrease-text-size=@as []
|
|
||||||
increase-text-size=@as []
|
|
||||||
|
|
||||||
screenreader=@as []
|
|
||||||
|
|
||||||
on-screen-keyboard=@as []
|
|
||||||
|
|
||||||
keyboard-brightness-up=[ '<Super><Alt>period']
|
|
||||||
keyboard-brightness-down=[ '<Super><Alt>comma']
|
|
||||||
keyboard-brightness-toggle=['<Super><Alt>slash']
|
|
||||||
|
|
||||||
|
|
||||||
# Non-default or "custom" GNOME bindings
|
|
||||||
|
|
||||||
# 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/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/vault_toggle/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/workspace_switch_to_empty/']
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/show_key_bindings]
|
|
||||||
binding='<Super>F1'
|
|
||||||
command='/home/user/.local/bin/key-bindings'
|
|
||||||
name='Show the key bindings'
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/move_window_to_empty_workspace]
|
|
||||||
binding='<Super><Shift>n'
|
|
||||||
command='/home/user/.local/bin/move-window-to-empty-workspace'
|
|
||||||
name='Move window to first empty workspace'
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/list_windows]
|
|
||||||
binding='<Super>Tab'
|
|
||||||
command='rofi -show window'
|
|
||||||
name='Show open windows'
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/show_launcher_1]
|
|
||||||
binding='<Super>space'
|
|
||||||
command='rofi -show drun'
|
|
||||||
name='Open the launcher [1/2]'
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/show_launcher_2]
|
|
||||||
# i3wm's default
|
|
||||||
binding='<Super>d'
|
|
||||||
command='rofi -show drun'
|
|
||||||
name='Open the launcher [2/2]'
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/show_run_1]
|
|
||||||
binding='<Super><Shift>space'
|
|
||||||
command='rofi -show run'
|
|
||||||
name='Run a command [1/2]'
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/show_run_2]
|
|
||||||
binding='<Super><Shift>d'
|
|
||||||
command='rofi -show run'
|
|
||||||
name='Run a command [2/2]'
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_primary_terminal_1]
|
|
||||||
# i3wm's default, used for our primary terminal with `zsh`
|
|
||||||
binding='<Super>Return'
|
|
||||||
command='alacritty'
|
|
||||||
name='Alacritty (zsh) [1/2]'
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_primary_terminal_2]
|
|
||||||
binding='<Super>t'
|
|
||||||
command='alacritty'
|
|
||||||
name='Alacritty (zsh) [2/2]'
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_secondary_terminal_1]
|
|
||||||
# Our secondary terminal with `bash`
|
|
||||||
binding='<Super><Shift>Return'
|
|
||||||
command='gnome-terminal'
|
|
||||||
name='GNOME Terminal (bash) [1/2]'
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_secondary_terminal_2]
|
|
||||||
binding='<Super><Shift>t'
|
|
||||||
command='gnome-terminal'
|
|
||||||
name='GNOME Terminal (bash) [2/2]'
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_file_manager]
|
|
||||||
binding='<Super>f'
|
|
||||||
command='nautilus'
|
|
||||||
name='Files'
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_firefox]
|
|
||||||
binding='<Super>i'
|
|
||||||
command='firefox-esr'
|
|
||||||
name='Firefox'
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_chromium]
|
|
||||||
binding='<Super><Shift>i'
|
|
||||||
command='chromium'
|
|
||||||
name='Chromium'
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_google_chrome]
|
|
||||||
binding='<Super><Control>i'
|
|
||||||
command='google-chrome'
|
|
||||||
name='Google Chrome'
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_evolution]
|
|
||||||
binding='<Super>m'
|
|
||||||
command='/home/user/.local/bin/evolution-on-workspace-0'
|
|
||||||
name='Evolution'
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/dark_scheme_toggle]
|
|
||||||
binding='<Super><Alt>d'
|
|
||||||
command='/home/user/.local/bin/dark-scheme-toggle'
|
|
||||||
name='Toggle dark scheme'
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/night_light_force]
|
|
||||||
binding='<Super><Alt>backslash'
|
|
||||||
command='/home/user/.local/bin/night-light-toggle-schedule'
|
|
||||||
name='Force night light on/off (i.e., override the automatic schedule)'
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/night_light_toggle]
|
|
||||||
binding='<Super><Alt><Shift>backslash'
|
|
||||||
command='/home/user/.local/bin/night-light-toggle-enabled'
|
|
||||||
name='Turn night light on/off (i.e., the feature as a whole)'
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/night_light_make_cooler]
|
|
||||||
binding='<Super><Alt>bracketleft'
|
|
||||||
command='/home/user/.local/bin/night-light-make-cooler'
|
|
||||||
name='Make night light cooler'
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/night_light_make_warmer]
|
|
||||||
binding='<Super><Alt>bracketright'
|
|
||||||
command='/home/user/.local/bin/night-light-make-warmer'
|
|
||||||
name='Make night light warmer'
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/randomize_background]
|
|
||||||
binding='<Super><Alt>b'
|
|
||||||
command='/home/user/.local/bin/randomize-background'
|
|
||||||
name='Randomize wallpaper'
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/wifi_toggle]
|
|
||||||
binding='<Super><Control>w'
|
|
||||||
command='/home/user/.local/bin/wifi-toggle'
|
|
||||||
name='Toggle WiFi'
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/restart_gnome_shell]
|
|
||||||
binding='<Super><Alt><Shift>r'
|
|
||||||
command='/home/user/.local/bin/gnome-shell-restart'
|
|
||||||
name='Restart GNOME shell (X11 only)'
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/emoji_picker_type]
|
|
||||||
binding='<Super>semicolon'
|
|
||||||
command='/home/user/.local/bin/rofimoji --action type'
|
|
||||||
name='Type an emoji'
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/emoji_picker_copy]
|
|
||||||
binding='<Super><Shift>semicolon'
|
|
||||||
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/settings-daemon/plugins/media-keys/custom-keybindings/workspace_switch_to_empty]
|
|
||||||
binding='<Super>n'
|
|
||||||
command='/home/user/.local/bin/workspace-switch-to-empty'
|
|
||||||
name='Jump to first empty workspace'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/shell/keybindings]
|
|
||||||
|
|
||||||
# Overview is still reachable indirectly but turned off on purpose
|
|
||||||
toggle-application-view=[ '<Super>slash']
|
|
||||||
toggle-message-tray=[ '<Super><Control>slash']
|
|
||||||
toggle-overview=@as []
|
|
||||||
toggle-quick-settings=['<Super><Alt><Shift>slash']
|
|
||||||
|
|
||||||
# Take fast screenshots without manual selection first,
|
|
||||||
# as opposed to the interactive UI below
|
|
||||||
screenshot=[ '<Shift>Print', '<Super><Alt><Shift>p']
|
|
||||||
screenshot-window=['<Alt>Print', '<Super><Alt>p']
|
|
||||||
|
|
||||||
# Manually select what to screenshot ...
|
|
||||||
show-screenshot-ui=['Print', '<Super><Control>p']
|
|
||||||
# ... or what to record
|
|
||||||
show-screen-recording-ui=['<Super><Control>r']
|
|
||||||
|
|
||||||
focus-active-notification=@as []
|
|
||||||
|
|
||||||
# The defaults would collide with "screen-brightness-up/down" on <Super><Alt> + Up/Down
|
|
||||||
shift-overview-up=@as []
|
|
||||||
shift-overview-down=@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 []` does not exist by default
|
|
||||||
|
|
||||||
open-new-window-application-1=@as []
|
|
||||||
open-new-window-application-2=@as []
|
|
||||||
open-new-window-application-3=@as []
|
|
||||||
open-new-window-application-4=@as []
|
|
||||||
open-new-window-application-5=@as []
|
|
||||||
open-new-window-application-6=@as []
|
|
||||||
open-new-window-application-7=@as []
|
|
||||||
open-new-window-application-8=@as []
|
|
||||||
open-new-window-application-9=@as []
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/terminal/legacy/keybindings]
|
|
||||||
|
|
||||||
copy='<Control><Shift>c'
|
|
||||||
paste='<Control><Shift>v'
|
|
||||||
|
|
||||||
# Search in GNOME's terminal:
|
|
||||||
# - terminal feature that belongs on the in-app <Control><Shift> layer
|
|
||||||
# - the bare <Control> layer must stay free for the programs running inside,
|
|
||||||
# for example, <Control>f forwards pages in `vi`, `less`, and others,
|
|
||||||
# and <Control>g aborts or shows file info
|
|
||||||
# - these bindings are also the default
|
|
||||||
find='<Control><Shift>f'
|
|
||||||
find-clear='<Control><Shift>j'
|
|
||||||
find-next='<Control><Shift>g'
|
|
||||||
find-previous='<Control><Shift>h'
|
|
||||||
|
|
||||||
fullscreen='F11'
|
|
||||||
|
|
||||||
# "equal" because it is below "plus" on a US keyboard
|
|
||||||
zoom-in='<Control>equal'
|
|
||||||
zoom-out='<Control>minus'
|
|
||||||
zoom-normal='<Control>0'
|
|
||||||
|
|
||||||
|
|
||||||
# Unset on purpose because with a tiling window manager
|
|
||||||
# we don't want to have to manage tabs inside a window
|
|
||||||
|
|
||||||
close-tab='disabled'
|
|
||||||
close-window='disabled'
|
|
||||||
|
|
||||||
new-tab='disabled'
|
|
||||||
new-window='disabled'
|
|
||||||
|
|
||||||
detach-tab='disabled'
|
|
||||||
next-tab='disabled'
|
|
||||||
prev-tab='disabled'
|
|
||||||
|
|
||||||
move-tab-left='disabled'
|
|
||||||
move-tab-right='disabled'
|
|
||||||
|
|
||||||
switch-to-tab-1='disabled'
|
|
||||||
switch-to-tab-2='disabled'
|
|
||||||
switch-to-tab-3='disabled'
|
|
||||||
switch-to-tab-4='disabled'
|
|
||||||
switch-to-tab-5='disabled'
|
|
||||||
switch-to-tab-6='disabled'
|
|
||||||
switch-to-tab-7='disabled'
|
|
||||||
switch-to-tab-8='disabled'
|
|
||||||
switch-to-tab-9='disabled'
|
|
||||||
switch-to-tab-10='disabled'
|
|
||||||
switch-to-tab-11='disabled'
|
|
||||||
switch-to-tab-12='disabled'
|
|
||||||
switch-to-tab-13='disabled'
|
|
||||||
switch-to-tab-14='disabled'
|
|
||||||
switch-to-tab-15='disabled'
|
|
||||||
switch-to-tab-16='disabled'
|
|
||||||
switch-to-tab-17='disabled'
|
|
||||||
switch-to-tab-18='disabled'
|
|
||||||
switch-to-tab-19='disabled'
|
|
||||||
switch-to-tab-20='disabled'
|
|
||||||
switch-to-tab-21='disabled'
|
|
||||||
switch-to-tab-22='disabled'
|
|
||||||
switch-to-tab-23='disabled'
|
|
||||||
switch-to-tab-24='disabled'
|
|
||||||
switch-to-tab-25='disabled'
|
|
||||||
switch-to-tab-26='disabled'
|
|
||||||
switch-to-tab-27='disabled'
|
|
||||||
switch-to-tab-28='disabled'
|
|
||||||
switch-to-tab-29='disabled'
|
|
||||||
switch-to-tab-30='disabled'
|
|
||||||
switch-to-tab-31='disabled'
|
|
||||||
switch-to-tab-32='disabled'
|
|
||||||
switch-to-tab-33='disabled'
|
|
||||||
switch-to-tab-34='disabled'
|
|
||||||
switch-to-tab-35='disabled'
|
|
||||||
switch-to-tab-last='disabled'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[desktop/ibus/panel/emoji]
|
|
||||||
|
|
||||||
# <Super>period is the default "hotkey", but it conflicts with
|
|
||||||
# "switch-to-workspace-right" in [org/gnome/desktop/wm/keybindings]
|
|
||||||
#
|
|
||||||
# Instead of GNOME's `ibus emoji` we use `rofimoji`
|
|
||||||
# in [org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/emoji_picker_*]
|
|
||||||
#
|
|
||||||
hotkey=@as []
|
|
||||||
|
|
@ -1,62 +0,0 @@
|
||||||
# Machine-Specific Overrides
|
|
||||||
|
|
||||||
|
|
||||||
`*.ini` files here are loaded *after* the shared files one level up
|
|
||||||
and may override any of their keys.
|
|
||||||
|
|
||||||
Use them for anything tied to one machine's hardware or capabilities,
|
|
||||||
for example, suspend/hibernate bindings, HiDPI scaling, or night light warmth.
|
|
||||||
|
|
||||||
Same rules as for the shared files:
|
|
||||||
paths are anchored at the root of `dconf`,
|
|
||||||
and `/home/user` is rewritten before loading.
|
|
||||||
|
|
||||||
Two files are *generated* and must not be edited by hand:
|
|
||||||
|
|
||||||
- `palette.ini` is written by [`color-palette`](../../../.local/bin/color-palette)
|
|
||||||
- `temporary_background.ini` is written by
|
|
||||||
[`randomize-background`](../../../.local/bin/randomize-background)
|
|
||||||
and removed again by
|
|
||||||
[`gnome-restore`](../../../.local/bin/gnome-restore)
|
|
||||||
on the next login
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Examples
|
|
||||||
|
|
||||||
|
|
||||||
Suspend and hibernate bindings are reserved
|
|
||||||
in [`key-bindings.ini`](../key-bindings.ini)
|
|
||||||
but only bound here
|
|
||||||
on machines that support them:
|
|
||||||
|
|
||||||
```ini
|
|
||||||
# local/power.ini
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys]
|
|
||||||
|
|
||||||
suspend=['<Super><Alt>Escape']
|
|
||||||
hibernate=['<Super><Alt><Shift>Escape']
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
A HiDPI panel:
|
|
||||||
|
|
||||||
```ini
|
|
||||||
# local/display.ini
|
|
||||||
|
|
||||||
[org/gnome/desktop/interface]
|
|
||||||
|
|
||||||
text-scaling-factor=1.25
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
A machine in a dim room that should run warmer by default:
|
|
||||||
|
|
||||||
```ini
|
|
||||||
# local/night-light.ini
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/color]
|
|
||||||
|
|
||||||
night-light-temperature=uint32 1800
|
|
||||||
```
|
|
||||||
|
|
@ -1,530 +0,0 @@
|
||||||
# Various other settings
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/freedesktop/tracker/miner/files]
|
|
||||||
|
|
||||||
# This is the `localsearch` indexing service
|
|
||||||
|
|
||||||
index-recursive-directories=['/home/user/Cloud']
|
|
||||||
index-single-directories=['&DOWNLOAD']
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/a11y]
|
|
||||||
|
|
||||||
# Caret browsing for read-only text and GTK3 only
|
|
||||||
always-show-text-caret=false
|
|
||||||
|
|
||||||
# Show the "Universal Access" icon even when no feature is active
|
|
||||||
always-show-universal-access-status=false
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/a11y/applications]
|
|
||||||
|
|
||||||
# Touchscreen keyboard
|
|
||||||
screen-keyboard-enabled=false
|
|
||||||
|
|
||||||
# Master switch for [org/gnome/desktop/a11y/magnifier] below
|
|
||||||
screen-magnifier-enabled=false
|
|
||||||
|
|
||||||
# Disable `orca`
|
|
||||||
screen-reader-enabled=false
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/a11y/interface]
|
|
||||||
|
|
||||||
# Replace the GTK theme,
|
|
||||||
# overriding our "color-scheme" in [org/gnome/desktop/interface]
|
|
||||||
high-contrast=false
|
|
||||||
|
|
||||||
# Adds a glyph inside toggle switches, for color blindness
|
|
||||||
show-status-shapes=false
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/a11y/keyboard]
|
|
||||||
|
|
||||||
enable=false
|
|
||||||
|
|
||||||
# Latch modifiers instead of holding them
|
|
||||||
stickykeys-enable=false
|
|
||||||
|
|
||||||
# Only accept keys held for "slowkeys-delay" ms
|
|
||||||
slowkeys-enable=false
|
|
||||||
|
|
||||||
# Ignore a repeat of the same key within bouncekeys-delay ms
|
|
||||||
bouncekeys-enable=false
|
|
||||||
|
|
||||||
# Move the pointer with the numeric keypad
|
|
||||||
# (Collides with "numlock-state" in [org/gnome/desktop/peripherals/keyboard])
|
|
||||||
mousekeys-enable=false
|
|
||||||
|
|
||||||
# Beep when Caps/Num/Scroll Lock are toggled
|
|
||||||
togglekeys-enable=false
|
|
||||||
|
|
||||||
|
|
||||||
# [org/gnome/desktop/a11y/magnifier]
|
|
||||||
# Inert because "screen-magnifier-enabled" above is false
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/a11y/mouse]
|
|
||||||
|
|
||||||
# Click by resting the pointer for "dwell-time" seconds
|
|
||||||
dwell-click-enabled=false
|
|
||||||
|
|
||||||
# Hold the left button for "secondary-click-time" seconds to right-click
|
|
||||||
secondary-click-enabled=false
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/app-folders]
|
|
||||||
|
|
||||||
# If this is non-empty, `gnome-shell` does not recreate the default folders
|
|
||||||
folder-children=['Unused']
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/background]
|
|
||||||
|
|
||||||
color-shading-type='solid'
|
|
||||||
|
|
||||||
# Keep "picture-uri"s in sync with [org/gnome/desktop/screensaver] below
|
|
||||||
picture-options='zoom'
|
|
||||||
picture-uri-dark='file:///home/user/.local/share/backgrounds/dark.jpg'
|
|
||||||
picture-uri='file:///home/user/.local/share/backgrounds/light.jpg'
|
|
||||||
|
|
||||||
primary-color='#fceae3'
|
|
||||||
secondary-color='#fceae3'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/break-reminders]
|
|
||||||
|
|
||||||
# We keep the settings below as defaults
|
|
||||||
# for when we re-enable the feature again
|
|
||||||
|
|
||||||
selected-breaks=@as []
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/break-reminders/eyesight]
|
|
||||||
|
|
||||||
# The 20-20-20 rule: every 20 minutes, look away for 20 seconds
|
|
||||||
|
|
||||||
countdown=false
|
|
||||||
|
|
||||||
delay-seconds=uint32 180
|
|
||||||
duration-seconds=uint32 20
|
|
||||||
interval-seconds=uint32 1200
|
|
||||||
|
|
||||||
fade-screen=true
|
|
||||||
lock-screen=false
|
|
||||||
|
|
||||||
notify=true
|
|
||||||
notify-overdue=true
|
|
||||||
notify-upcoming=false
|
|
||||||
|
|
||||||
play-sound=true
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/break-reminders/movement]
|
|
||||||
|
|
||||||
# Get up and move for 5 minutes every 30 minutes
|
|
||||||
|
|
||||||
countdown=false
|
|
||||||
|
|
||||||
delay-seconds=uint32 180
|
|
||||||
duration-seconds=uint32 300
|
|
||||||
interval-seconds=uint32 1800
|
|
||||||
|
|
||||||
fade-screen=true
|
|
||||||
lock-screen=false
|
|
||||||
|
|
||||||
notify=true
|
|
||||||
notify-overdue=true
|
|
||||||
notify-upcoming=true
|
|
||||||
|
|
||||||
play-sound=true
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/calendar]
|
|
||||||
|
|
||||||
show-weekdate=true
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/datetime]
|
|
||||||
|
|
||||||
automatic-timezone=true
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/file-sharing]
|
|
||||||
|
|
||||||
require-password='always'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/input-sources]
|
|
||||||
|
|
||||||
per-window=false
|
|
||||||
|
|
||||||
sources=[('xkb', 'us')]
|
|
||||||
|
|
||||||
# `xkb-options` are purely additive and there is no "off" token;
|
|
||||||
# so, whatever is listed below is enabled, and everything else is disabled
|
|
||||||
#
|
|
||||||
# Enabled:
|
|
||||||
#
|
|
||||||
# - "caps:ctrl_modifier"
|
|
||||||
# => Caps Lock becomes an additional Control for quicker access when typing
|
|
||||||
# - "compose:ralt"
|
|
||||||
# => Right Alt can be used to Compose, e.g., Compose a " gives ä
|
|
||||||
# - "lv3:menu_switch"
|
|
||||||
# => Menu becomes "AltGr", which unlocks the third level of the layout,
|
|
||||||
# and which is different from the normal <Alt> modifier
|
|
||||||
#
|
|
||||||
# Alternative:
|
|
||||||
#
|
|
||||||
# - "caps:ctrl_super"
|
|
||||||
# => Caps Lock becomes an additional <Super> for quicker window navigation
|
|
||||||
#
|
|
||||||
# Deliberately NOT enabled:
|
|
||||||
#
|
|
||||||
# - "grp:alt_shift_toggle"
|
|
||||||
# => Makes a bare tap of Alt+Shift cycle the active keyboard layouts
|
|
||||||
# - "terminate:ctrl_alt_bksp"
|
|
||||||
# => Maps <Control><Alt>BackSpace to the X keysym "Terminate_Server",
|
|
||||||
# which Kills the X server instantly with no prompt and no session save
|
|
||||||
#
|
|
||||||
xkb-options=['caps:ctrl_modifier', 'compose:ralt', 'lv3:menu_switch']
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/interface]
|
|
||||||
|
|
||||||
accent-color='orange'
|
|
||||||
|
|
||||||
clock-format='24h'
|
|
||||||
clock-show-date=true
|
|
||||||
clock-show-seconds=true
|
|
||||||
clock-show-weekday=true
|
|
||||||
|
|
||||||
# Options are:
|
|
||||||
# - "default"
|
|
||||||
# + Basically a light theme
|
|
||||||
# + Some of the shell chrome remains dark (e.g., the top bar)
|
|
||||||
# + Selectable in the `gnome-control-center`
|
|
||||||
# - "prefer-dark"
|
|
||||||
# + Official dark theme
|
|
||||||
# + Selectable in the `gnome-control-center`
|
|
||||||
# - "prefer-light"
|
|
||||||
# + Unofficial light theme
|
|
||||||
# + Not selectable in the `gnome-control-center`
|
|
||||||
# + Usable via the "Dark Style" toggle in the quick settings menu
|
|
||||||
# only with the "Light Style" extension
|
|
||||||
color-scheme='prefer-light'
|
|
||||||
|
|
||||||
font-name='Adwaita Sans 11'
|
|
||||||
document-font-name='Adwaita Sans 11'
|
|
||||||
monospace-font-name='FiraCode Nerd Font 11'
|
|
||||||
|
|
||||||
font-antialiasing='grayscale'
|
|
||||||
font-hinting='slight'
|
|
||||||
|
|
||||||
enable-animations=true
|
|
||||||
enable-hot-corners=false
|
|
||||||
|
|
||||||
# `ibus` is needed for Unicode/emoji input (e.g., Ctrl+Shift+u), but
|
|
||||||
# we leave it to auto-detection in case the system does not support it
|
|
||||||
# gtk-im-module='ibus'
|
|
||||||
|
|
||||||
gtk-theme='Adwaita'
|
|
||||||
icon-theme='Adwaita'
|
|
||||||
|
|
||||||
show-battery-percentage=true
|
|
||||||
|
|
||||||
toolkit-accessibility=false
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/lockdown]
|
|
||||||
|
|
||||||
# Keep in sync with "user-switch-enabled" in [org/gnome/desktop/screensaver]
|
|
||||||
disable-user-switching=true
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/media-handling]
|
|
||||||
|
|
||||||
automount=true
|
|
||||||
automount-open=false
|
|
||||||
|
|
||||||
autorun-never=true
|
|
||||||
autorun-x-content-ignore=@as []
|
|
||||||
autorun-x-content-open-folder=@as []
|
|
||||||
autorun-x-content-start-app=@as []
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/peripherals/keyboard]
|
|
||||||
|
|
||||||
numlock-state=true
|
|
||||||
remember-numlock-state=true
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/peripherals/mouse]
|
|
||||||
|
|
||||||
natural-scroll=false
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/peripherals/touchpad]
|
|
||||||
|
|
||||||
send-events='enabled'
|
|
||||||
|
|
||||||
edge-scrolling-enabled=false
|
|
||||||
natural-scroll=true
|
|
||||||
two-finger-scrolling-enabled=true
|
|
||||||
|
|
||||||
tap-to-click=true
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/privacy]
|
|
||||||
|
|
||||||
disable-camera=false
|
|
||||||
disable-microphone=false
|
|
||||||
disable-sound-output=false
|
|
||||||
|
|
||||||
hide-identity=true
|
|
||||||
|
|
||||||
old-files-age=uint32 7
|
|
||||||
recent-files-max-age=7
|
|
||||||
|
|
||||||
remember-app-usage=true
|
|
||||||
remember-recent-files=true
|
|
||||||
|
|
||||||
remove-old-temp-files=true
|
|
||||||
remove-old-trash-files=true
|
|
||||||
|
|
||||||
report-technical-problems=false
|
|
||||||
send-software-usage-stats=false
|
|
||||||
|
|
||||||
show-full-name-in-top-bar=false
|
|
||||||
|
|
||||||
usb-protection=true
|
|
||||||
|
|
||||||
# TODO: Uncomment only together with a populated /etc/usbguard/rules.conf,
|
|
||||||
# or every new device is blocked
|
|
||||||
# usb-protection-level='always'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/remote-desktop]
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/remote-desktop/rdp]
|
|
||||||
|
|
||||||
enable=false
|
|
||||||
view-only=true
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/remote-desktop/vnc]
|
|
||||||
|
|
||||||
enable=false
|
|
||||||
view-only=true
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/screen-time-limits]
|
|
||||||
|
|
||||||
daily-limit-enabled=false
|
|
||||||
daily-limit-seconds=uint32 28800
|
|
||||||
|
|
||||||
grayscale=false
|
|
||||||
|
|
||||||
history-enabled=false
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/screensaver]
|
|
||||||
|
|
||||||
color-shading-type='solid'
|
|
||||||
|
|
||||||
# Make the machine locked after suspend
|
|
||||||
lock-enabled=true
|
|
||||||
|
|
||||||
# Only applies to the idle path, and
|
|
||||||
# "Suspend" locks immediately, regardless of this delay
|
|
||||||
# => Together with the "idle-*" settings we follow a
|
|
||||||
# "Blank first, lock much later" strategy
|
|
||||||
lock-delay=uint32 7200
|
|
||||||
|
|
||||||
logout-enabled=true
|
|
||||||
|
|
||||||
# Keep "picture-uri" in sync with [org/gnome/desktop/background] above
|
|
||||||
picture-options='zoom'
|
|
||||||
picture-uri='file:///home/user/.local/share/backgrounds/dark.jpg'
|
|
||||||
|
|
||||||
primary-color='#000000'
|
|
||||||
secondary-color='#000000'
|
|
||||||
|
|
||||||
show-full-name-in-top-bar=false
|
|
||||||
|
|
||||||
status-message-enabled=false
|
|
||||||
|
|
||||||
# Keep in sync with "disable-user-switching" in [org/gnome/desktop/lockdown]
|
|
||||||
user-switch-enabled=false
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/search-providers]
|
|
||||||
|
|
||||||
disable-external=false
|
|
||||||
|
|
||||||
# The disabled entries should also be the end of the sort-order
|
|
||||||
disabled=['org.gnome.Characters.desktop', 'org.gnome.clocks.desktop', 'org.gnome.seahorse.Application.desktop', 'org.gnome.Terminal.desktop']
|
|
||||||
sort-order=['org.gnome.Nautilus.desktop', 'org.gnome.Settings.desktop', 'org.gnome.Software.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Contacts.desktop', 'org.gnome.Characters.desktop', 'org.gnome.clocks.desktop', 'org.gnome.seahorse.Application.desktop', 'org.gnome.Terminal.desktop']
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/session]
|
|
||||||
|
|
||||||
# Blank the screen after 10 minutes of idle time
|
|
||||||
# => Together with the other "idle-*" and the "lock-delay" settings
|
|
||||||
# we follow a "Blank first, lock much later" strategy
|
|
||||||
idle-delay=uint32 600
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/sound]
|
|
||||||
|
|
||||||
allow-volume-above-100-percent=true
|
|
||||||
|
|
||||||
event-sounds=true
|
|
||||||
input-feedback-sounds=true
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [org/gnome/desktop/wm/keybindings]
|
|
||||||
# See ~/.config/gnome-settings/key-bindings.ini for the key bindings
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/wm/preferences]
|
|
||||||
|
|
||||||
audible-bell=false
|
|
||||||
visual-bell=false
|
|
||||||
|
|
||||||
action-double-click-titlebar='toggle-maximize'
|
|
||||||
action-middle-click-titlebar='none'
|
|
||||||
action-right-click-titlebar='none'
|
|
||||||
|
|
||||||
mouse-button-modifier=''
|
|
||||||
|
|
||||||
# Right-drag resizes when true, and middle-drag when false
|
|
||||||
# (May only be enabled if "mouse-button-modifier" is set above)
|
|
||||||
resize-with-right-button=false
|
|
||||||
|
|
||||||
# Just show an "X" to close a window in the GUI
|
|
||||||
button-layout='close:'
|
|
||||||
|
|
||||||
focus-mode='click'
|
|
||||||
raise-on-click=true
|
|
||||||
|
|
||||||
# 'strict' would withhold focus from windows launched from a terminal
|
|
||||||
focus-new-windows='smart'
|
|
||||||
|
|
||||||
titlebar-uses-system-font=false
|
|
||||||
titlebar-font='Adwaita Sans Bold 11'
|
|
||||||
|
|
||||||
num-workspaces=10
|
|
||||||
workspace-names=['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/mutter]
|
|
||||||
|
|
||||||
dynamic-workspaces=false
|
|
||||||
|
|
||||||
# We use `forge` for tiling
|
|
||||||
edge-tiling=false
|
|
||||||
|
|
||||||
# Keep in sync with "overlay-key" under [org/gnome/shell/extensions/just-perfection]
|
|
||||||
overlay-key=''
|
|
||||||
|
|
||||||
workspaces-only-on-primary=true
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [org/gnome/mutter/keybindings]
|
|
||||||
# See ~/.config/gnome-settings/key-bindings.ini for the key bindings
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/color]
|
|
||||||
|
|
||||||
# We add some custom logic in ~/.local/bin/night-light-* scripts
|
|
||||||
# for more convenient management of the tool via keyboard bindings
|
|
||||||
|
|
||||||
night-light-enabled=true
|
|
||||||
|
|
||||||
# We use the live location to determine the schedule by default,
|
|
||||||
# and use ~/.local/bin/night-light-toggle-schedule to force "Night Light" on
|
|
||||||
night-light-schedule-automatic=true
|
|
||||||
|
|
||||||
# If automatic does not work, we fall back to something reasonable
|
|
||||||
night-light-schedule-from=18.0
|
|
||||||
night-light-schedule-to=6.0
|
|
||||||
|
|
||||||
# The `$_DEFAULT_TEMPERATURE` used in the ~/.local/bin/night-light-* scripts
|
|
||||||
night-light-temperature=uint32 2200
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/media-keys]
|
|
||||||
|
|
||||||
# See ~/.config/gnome-settings/key-bindings.ini for the key bindings
|
|
||||||
|
|
||||||
volume-step=10
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/settings-daemon/plugins/power]
|
|
||||||
|
|
||||||
# Together with the "idle-delay" and "lock-delay" settings
|
|
||||||
# we follow a "Blank first, lock much later" strategy
|
|
||||||
idle-dim=true
|
|
||||||
idle-brightness=10
|
|
||||||
|
|
||||||
power-button-action='nothing'
|
|
||||||
|
|
||||||
power-saver-profile-on-low-battery=true
|
|
||||||
|
|
||||||
# 0 => "never"
|
|
||||||
sleep-inactive-ac-timeout=0
|
|
||||||
sleep-inactive-ac-type='nothing'
|
|
||||||
|
|
||||||
# 0 => "never"
|
|
||||||
sleep-inactive-battery-timeout=0
|
|
||||||
sleep-inactive-battery-type='nothing'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/system/location]
|
|
||||||
|
|
||||||
enabled=true
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[system/locale]
|
|
||||||
|
|
||||||
region='en_DK.UTF-8'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[system/proxy]
|
|
||||||
|
|
||||||
mode='none'
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,56 +0,0 @@
|
||||||
# Basic GNOME Shell configuration
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/shell]
|
|
||||||
|
|
||||||
# Always reset the command history
|
|
||||||
command-history=@as []
|
|
||||||
|
|
||||||
development-tools=false
|
|
||||||
|
|
||||||
# Empty because we disable the "dash" in [org/gnome/shell/extensions/just-perfection]
|
|
||||||
favorite-apps=@as []
|
|
||||||
|
|
||||||
last-selected-power-profile='balanced'
|
|
||||||
|
|
||||||
# For mounting encrypted or remote filesystems
|
|
||||||
remember-mount-password=true
|
|
||||||
|
|
||||||
# Never show GNOME's welcome dialog again
|
|
||||||
welcome-dialog-last-shown-version='999.999'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/shell/app-switcher]
|
|
||||||
|
|
||||||
current-workspace-only=true
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [org/gnome/shell/keybindings]
|
|
||||||
# See ~/.config/gnome-settings/key-bindings.ini for the key bindings
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/shell/weather]
|
|
||||||
|
|
||||||
automatic-location=true
|
|
||||||
|
|
||||||
# Keep in sync with "locations" in [org/gnome/Weather]
|
|
||||||
locations=[<(uint32 2, <('Berlin', 'EDDB', true, [(0.91426163401859872, 0.23591034304566436)], [(0.91658875132345297, 0.23387411976724018)])>)>, <(uint32 2, <('Heidelberg', 'EDFM', true, [(0.86345801419289459, 0.14862448983795826)], [(0.86238428763706787, 0.1517127801361921)])>)>, <(uint32 2, <('London', 'EGLL', true, [(0.89845190959903677, -0.0080529408042633736)], [(0.89899290734596930, -0.0021946055346929697)])>)>, <(uint32 2, <('New York', 'KNYC', true, [(0.71180344078725644, -1.2909618758762367)], [(0.71059804659265924, -1.2916478949920254)])>)>, <(uint32 2, <('Phoenix', 'KPHX', true, [(0.58353629681163499, -1.955660817467636)], [(0.58378430809834336, -1.9560609516519483)])>)>]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/shell/window-switcher]
|
|
||||||
|
|
||||||
app-icon-mode='app-icon-only'
|
|
||||||
|
|
||||||
current-workspace-only=true
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/shell/world-clocks]
|
|
||||||
|
|
||||||
# Keep in sync with "world-clocks" in [org/gnome/clocks]
|
|
||||||
locations=[<(uint32 2, <('Phoenix', 'KPHX', true, [(0.58353629681163499, -1.955660817467636)], [(0.58378430809834336, -1.9560609516519483)])>)>, <(uint32 2, <('New York', 'KNYC', true, [(0.71180344078725644, -1.2909618758762367)], [(0.71059804659265924, -1.2916478949920254)])>)>, <(uint32 2, <('UTC', 'BIRK', true, [(1.1216380205691279, -0.38222710618675809)], [(1.1195629471197465, -0.38251373858977449)])>)>, <(uint32 2, <('London', 'EGLL', true, [(0.89845190959903677, -0.0080529408042633736)], [(0.89899290734596930, -0.0021946055346929697)])>)>, <(uint32 2, <('Berlin', 'EDDB', true, [(0.91426163401859872, 0.23591034304566436)], [(0.91658875132345297, 0.23387411976724018)])>)>]
|
|
||||||
|
|
@ -1,272 +0,0 @@
|
||||||
# Configure all the GNOME Shell extensions
|
|
||||||
|
|
||||||
# - "alphabetical-app-grid" and "app-hider" create a simple and flat app drawer
|
|
||||||
# - "forge" takes the major role for the desktop layout
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/shell]
|
|
||||||
|
|
||||||
enabled-extensions=['AlphabeticalAppGrid@stuarthayhurst', 'app-hider@lynith.dev', 'appindicator-hider@theophilediot.github.io', 'appindicatorsupport@rgcjonas.gmail.com', 'drive-menu@gnome-shell-extensions.gcampax.github.com', 'forge@jmmaranan.com', 'improved-workspace-indicator@michaelaquilina.github.io', 'just-perfection-desktop@just-perfection', 'launch-new-instance@gnome-shell-extensions.gcampax.github.com', 'light-style@gnome-shell-extensions.gcampax.github.com', 'no-screenshot-box@screenshot', 'panel-date-format@keiii.github.com']
|
|
||||||
|
|
||||||
disabled-extensions=@as []
|
|
||||||
|
|
||||||
disable-user-extensions=false
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/shell/extensions/alphabetical-app-grid]
|
|
||||||
|
|
||||||
folder-order-position='alphabetical'
|
|
||||||
sort-folder-contents=true
|
|
||||||
|
|
||||||
logging-enabled=false
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/shell/extensions/app-hider]
|
|
||||||
|
|
||||||
# We hide CLI utilities and rarely needed apps from the app drawer
|
|
||||||
hidden-apps=['com.nextcloud.desktopclient.nextcloud.desktop', 'display-im7.q16.desktop', 'gvim.desktop', 'htop.desktop', 'idle-python3.13.desktop', 'idle.desktop', 'im-config.desktop', 'jupyter-notebook.desktop', 'jupyterlab.desktop', 'libreoffice-startcenter.desktop', 'lynis.desktop', 'nvidia-settings.desktop', 'org.bpython-interpreter.bpython.desktop', 'org.freedesktop.MalcontentControl.desktop', 'org.gnome.Extensions.desktop', 'org.gnome.Settings.desktop', 'org.gnome.Software.desktop', 'org.gnome.Totem.desktop', 'org.gnome.Tour.desktop', 'org.gnome.tweaks.desktop', 'ranger.desktop', 'rofi-theme-selector.desktop', 'rofi.desktop', 'screenshot-screen.desktop', 'screenshot-ui.desktop', 'screenshot-window.desktop', 'system-config-printer.desktop', 'texdoctk.desktop', 'yelp.desktop']
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/shell/extensions/appindicator]
|
|
||||||
|
|
||||||
tray-pos='right'
|
|
||||||
tray-order=999
|
|
||||||
|
|
||||||
compact-mode-enabled=true
|
|
||||||
|
|
||||||
# E.g., needed for `nextcloud`
|
|
||||||
legacy-tray-enabled=true
|
|
||||||
|
|
||||||
icon-opacity=240
|
|
||||||
|
|
||||||
# 0 => Use the icon's native size
|
|
||||||
icon-size=0
|
|
||||||
|
|
||||||
# 0.0 => No adjustment
|
|
||||||
icon-saturation=0.0
|
|
||||||
icon-brightness=0.0
|
|
||||||
icon-contrast=0.0
|
|
||||||
|
|
||||||
# Per-indicator icon overrides (indicator-id, icon-name, attention-icon-name)
|
|
||||||
custom-icons=@a(sss) []
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/shell/extensions/appindicator-hider]
|
|
||||||
|
|
||||||
# Hide RustDesk's tray icon
|
|
||||||
hidden-indicators=['id:tray-icon']
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [org/gnome/shell/extensions/drive-menu]
|
|
||||||
# This extension does not have any settings
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/shell/extensions/forge]
|
|
||||||
|
|
||||||
# "Magic number" such that forge's stylesheet at
|
|
||||||
# ~/.config/forge/stylesheet/forge/stylesheet.css
|
|
||||||
# is not rewritten with default values
|
|
||||||
css-last-update=uint32 37
|
|
||||||
|
|
||||||
logging-enabled=false
|
|
||||||
|
|
||||||
primary-layout-mode='tiling'
|
|
||||||
|
|
||||||
workspace-skip-tile=''
|
|
||||||
|
|
||||||
tiling-mode-enabled=true
|
|
||||||
|
|
||||||
stacked-tiling-mode-enabled=true
|
|
||||||
|
|
||||||
tabbed-tiling-mode-enabled=true
|
|
||||||
auto-exit-tabbed=true
|
|
||||||
showtab-decoration-enabled=true
|
|
||||||
|
|
||||||
auto-split-enabled=false
|
|
||||||
split-border-toggle=false
|
|
||||||
|
|
||||||
dnd-center-layout='tabbed'
|
|
||||||
|
|
||||||
float-always-on-top-enabled=true
|
|
||||||
|
|
||||||
focus-border-toggle=true
|
|
||||||
|
|
||||||
focus-on-hover-enabled=false
|
|
||||||
move-pointer-focus-enabled=false
|
|
||||||
|
|
||||||
preview-hint-enabled=true
|
|
||||||
quick-settings-enabled=false
|
|
||||||
|
|
||||||
resize-amount=uint32 32
|
|
||||||
|
|
||||||
window-gap-hidden-on-single=false
|
|
||||||
window-gap-size=uint32 3
|
|
||||||
window-gap-size-increment=uint32 2
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/shell/extensions/improved-workspace-indicator]
|
|
||||||
|
|
||||||
panel-position='left'
|
|
||||||
|
|
||||||
# Only workspaces with windows are listed
|
|
||||||
skip-taskbar-mode=true
|
|
||||||
|
|
||||||
change-on-click=true
|
|
||||||
change-on-scroll=false
|
|
||||||
|
|
||||||
wrap-scroll=true
|
|
||||||
|
|
||||||
# `just-perfection` already hides the "Activities" button
|
|
||||||
hide-activities=false
|
|
||||||
|
|
||||||
hide-single-workspaces=false
|
|
||||||
|
|
||||||
# Written by ~/.local/bin/color-palette
|
|
||||||
custom-css-path='/home/user/.config/improved-workspace-indicator/stylesheet.css'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/shell/extensions/just-perfection]
|
|
||||||
|
|
||||||
support-notifier-type=0
|
|
||||||
|
|
||||||
|
|
||||||
# Keep in sync with "overlay-key" in [org/gnome/mutter]
|
|
||||||
overlay-key=false
|
|
||||||
|
|
||||||
# Does not work with "overlay-key" turned off
|
|
||||||
double-super-to-appgrid=false
|
|
||||||
|
|
||||||
|
|
||||||
background-menu=false
|
|
||||||
|
|
||||||
# On-screen display for volume, brightness, ...
|
|
||||||
osd=true
|
|
||||||
# Show OSD notifications in the center of the screen
|
|
||||||
osd-position=8
|
|
||||||
|
|
||||||
# When switching between workspaces
|
|
||||||
workspace-popup=false
|
|
||||||
|
|
||||||
|
|
||||||
# Windows related stuff
|
|
||||||
|
|
||||||
window-demands-attention-focus=true
|
|
||||||
|
|
||||||
window-maximized-on-create=false
|
|
||||||
|
|
||||||
# Right-click in the title bar
|
|
||||||
window-menu=false
|
|
||||||
window-menu-take-screenshot-button=true
|
|
||||||
|
|
||||||
|
|
||||||
# Panel related stuff
|
|
||||||
|
|
||||||
panel=true
|
|
||||||
panel-in-overview=true
|
|
||||||
|
|
||||||
panel-notification-icon=true
|
|
||||||
|
|
||||||
# Panel should be at the top
|
|
||||||
top-panel-position=0
|
|
||||||
|
|
||||||
activities-button=false
|
|
||||||
|
|
||||||
clock-menu=true
|
|
||||||
clock-menu-position=0
|
|
||||||
clock-menu-position-offset=0
|
|
||||||
calendar=true
|
|
||||||
events-button=true
|
|
||||||
invert-calendar-column-items=false
|
|
||||||
weather=true
|
|
||||||
world-clock=true
|
|
||||||
|
|
||||||
keyboard-layout=false
|
|
||||||
|
|
||||||
accessibility-menu=false
|
|
||||||
|
|
||||||
power-icon=true
|
|
||||||
|
|
||||||
quick-settings=true
|
|
||||||
quick-settings-airplane-mode=true
|
|
||||||
quick-settings-backlight=true
|
|
||||||
quick-settings-dark-mode=true
|
|
||||||
quick-settings-night-light=true
|
|
||||||
|
|
||||||
screen-recording-indicator=true
|
|
||||||
screen-sharing-indicator=true
|
|
||||||
|
|
||||||
# "Hot Corner" animation
|
|
||||||
ripple-box=false
|
|
||||||
|
|
||||||
|
|
||||||
# In app drawer and overview menu
|
|
||||||
|
|
||||||
# Do not start in overview menu after login
|
|
||||||
startup-status=0
|
|
||||||
|
|
||||||
search=true
|
|
||||||
type-to-search=true
|
|
||||||
|
|
||||||
dash=false
|
|
||||||
dash-app-running=false
|
|
||||||
dash-separator=false
|
|
||||||
show-apps-button=false
|
|
||||||
|
|
||||||
# Reduce the noise in the overview menu
|
|
||||||
window-picker-icon=false
|
|
||||||
window-preview-caption=false
|
|
||||||
window-preview-close-button=false
|
|
||||||
|
|
||||||
workspace=false
|
|
||||||
workspaces-in-app-grid=false
|
|
||||||
workspace-peek=false
|
|
||||||
workspace-wrap-around=true
|
|
||||||
|
|
||||||
workspace-background-corner-size=0
|
|
||||||
workspace-switcher-should-show=false
|
|
||||||
workspace-thumbnail-to-main-view=false
|
|
||||||
|
|
||||||
|
|
||||||
# Look & Feel
|
|
||||||
|
|
||||||
accent-color-icon=false
|
|
||||||
|
|
||||||
animation=1
|
|
||||||
|
|
||||||
theme=false
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [org/gnome/shell/extensions/launch-new-instance]
|
|
||||||
# This extension does not have any settings
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [org/gnome/shell/extensions/light-style]
|
|
||||||
# This extension does not have any settings
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/shell/extensions/no-screenshot-box]
|
|
||||||
|
|
||||||
mute-screenshot-sound=true
|
|
||||||
|
|
||||||
remove-preselected-box=true
|
|
||||||
|
|
||||||
# On a laptop with a touchpad "true" would be too tedious
|
|
||||||
screenshot-on-release=false
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/shell/extensions/panel-date-format]
|
|
||||||
|
|
||||||
format='%A %B %-d, %Y %H:%M:%S %Z%z'
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
/* Window corners of GTK3 apps,
|
|
||||||
kept in sync with `FORGE_RING_RADIUS` in ~/.local/bin/color-palette
|
|
||||||
(ring radius = this value + 4px border) */
|
|
||||||
decoration { border-radius: 6px; }
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
/* Window corners of libadwaita and GTK4 apps,
|
|
||||||
kept in sync with `FORGE_RING_RADIUS` in ~/.local/bin/color-palette
|
|
||||||
(ring radius = this value + 4px border) */
|
|
||||||
window.csd { border-radius: 6px; }
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
# Improved Workspace Indicator Configurations
|
|
||||||
|
|
||||||
This folder contains the stylesheet
|
|
||||||
for the [Improved Workspace Indicator GNOME shell extension](https://extensions.gnome.org/extension/3968/improved-workspace-indicator/).
|
|
||||||
|
|
||||||
`stylesheet.css` is untracked
|
|
||||||
and written by [`color-palette`](../../.local/bin/color-palette).
|
|
||||||
|
|
@ -1,308 +0,0 @@
|
||||||
[Default Applications]
|
|
||||||
application/pdf=org.gnome.Evince.desktop
|
|
||||||
application/x-shellscript=org.gnome.TextEditor.desktop
|
|
||||||
application/xhtml+xml=firefox.desktop;firefox-esr.desktop;google-chrome.desktop;chromium.desktop
|
|
||||||
audio/3gpp2=vlc.desktop
|
|
||||||
audio/3gpp=vlc.desktop
|
|
||||||
audio/AMR-WB=vlc.desktop
|
|
||||||
audio/AMR=vlc.desktop
|
|
||||||
audio/aac=vlc.desktop
|
|
||||||
audio/ac3=vlc.desktop
|
|
||||||
audio/basic=vlc.desktop
|
|
||||||
audio/dv=vlc.desktop
|
|
||||||
audio/eac3=vlc.desktop
|
|
||||||
audio/flac=vlc.desktop
|
|
||||||
audio/m4a=vlc.desktop
|
|
||||||
audio/midi=vlc.desktop
|
|
||||||
audio/mp1=vlc.desktop
|
|
||||||
audio/mp2=vlc.desktop
|
|
||||||
audio/mp3=vlc.desktop
|
|
||||||
audio/mp4=vlc.desktop
|
|
||||||
audio/mpeg=vlc.desktop
|
|
||||||
audio/mpegurl=vlc.desktop
|
|
||||||
audio/mpg=vlc.desktop
|
|
||||||
audio/ogg=vlc.desktop
|
|
||||||
audio/opus=vlc.desktop
|
|
||||||
audio/scpls=vlc.desktop
|
|
||||||
audio/vnd.dolby.heaac.1=vlc.desktop
|
|
||||||
audio/vnd.dolby.heaac.2=vlc.desktop
|
|
||||||
audio/vnd.dolby.mlp=vlc.desktop
|
|
||||||
audio/vnd.dts.hd=vlc.desktop
|
|
||||||
audio/vnd.dts=vlc.desktop
|
|
||||||
audio/vnd.rn-realaudio=vlc.desktop
|
|
||||||
audio/vorbis=vlc.desktop
|
|
||||||
audio/wav=vlc.desktop
|
|
||||||
audio/webm=vlc.desktop
|
|
||||||
audio/x-aac=vlc.desktop
|
|
||||||
audio/x-adpcm=vlc.desktop
|
|
||||||
audio/x-aiff=vlc.desktop
|
|
||||||
audio/x-ape=vlc.desktop
|
|
||||||
audio/x-flac=vlc.desktop
|
|
||||||
audio/x-gsm=vlc.desktop
|
|
||||||
audio/x-it=vlc.desktop
|
|
||||||
audio/x-m4a=vlc.desktop
|
|
||||||
audio/x-matroska=vlc.desktop
|
|
||||||
audio/x-mod=vlc.desktop
|
|
||||||
audio/x-mp1=vlc.desktop
|
|
||||||
audio/x-mp2=vlc.desktop
|
|
||||||
audio/x-mp3=vlc.desktop
|
|
||||||
audio/x-mpeg=vlc.desktop
|
|
||||||
audio/x-mpegurl=vlc.desktop
|
|
||||||
audio/x-mpg=vlc.desktop
|
|
||||||
audio/x-ms-asf=vlc.desktop
|
|
||||||
audio/x-ms-asx=vlc.desktop
|
|
||||||
audio/x-ms-wax=vlc.desktop
|
|
||||||
audio/x-ms-wma=vlc.desktop
|
|
||||||
audio/x-musepack=vlc.desktop
|
|
||||||
audio/x-pn-aiff=vlc.desktop
|
|
||||||
audio/x-pn-au=vlc.desktop
|
|
||||||
audio/x-pn-realaudio-plugin=vlc.desktop
|
|
||||||
audio/x-pn-realaudio=vlc.desktop
|
|
||||||
audio/x-pn-wav=vlc.desktop
|
|
||||||
audio/x-pn-windows-acm=vlc.desktop
|
|
||||||
audio/x-real-audio=vlc.desktop
|
|
||||||
audio/x-realaudio=vlc.desktop
|
|
||||||
audio/x-s3m=vlc.desktop
|
|
||||||
audio/x-scpls=vlc.desktop
|
|
||||||
audio/x-shorten=vlc.desktop
|
|
||||||
audio/x-speex=vlc.desktop
|
|
||||||
audio/x-tta=vlc.desktop
|
|
||||||
audio/x-vorbis+ogg=vlc.desktop
|
|
||||||
audio/x-vorbis=vlc.desktop
|
|
||||||
audio/x-wav=vlc.desktop
|
|
||||||
audio/x-wavpack=vlc.desktop
|
|
||||||
audio/x-xm=vlc.desktop
|
|
||||||
image/avif=org.gnome.Loupe.desktop
|
|
||||||
image/bmp=org.gnome.Loupe.desktop
|
|
||||||
image/gif=org.gnome.Loupe.desktop
|
|
||||||
image/heic=org.gnome.Loupe.desktop
|
|
||||||
image/jpeg=org.gnome.Loupe.desktop
|
|
||||||
image/jxl=org.gnome.Loupe.desktop
|
|
||||||
image/png=org.gnome.Loupe.desktop
|
|
||||||
image/qoi=org.gnome.Loupe.desktop
|
|
||||||
image/svg+xml-compressed=org.gnome.Loupe.desktop
|
|
||||||
image/svg+xml=org.gnome.Loupe.desktop
|
|
||||||
image/tiff=org.gnome.Loupe.desktop
|
|
||||||
image/vnd-ms.dds=org.gnome.Loupe.desktop
|
|
||||||
image/vnd.microsoft.icon=org.gnome.Loupe.desktop
|
|
||||||
image/vnd.radiance=org.gnome.Loupe.desktop
|
|
||||||
image/webp=org.gnome.Loupe.desktop
|
|
||||||
image/x-dds=org.gnome.Loupe.desktop
|
|
||||||
image/x-exr=org.gnome.Loupe.desktop
|
|
||||||
image/x-portable-anymap=org.gnome.Loupe.desktop
|
|
||||||
image/x-portable-bitmap=org.gnome.Loupe.desktop
|
|
||||||
image/x-portable-graymap=org.gnome.Loupe.desktop
|
|
||||||
image/x-portable-pixmap=org.gnome.Loupe.desktop
|
|
||||||
image/x-qoi=org.gnome.Loupe.desktop
|
|
||||||
image/x-tga=org.gnome.Loupe.desktop
|
|
||||||
text/calendar=org.gnome.Evolution.desktop
|
|
||||||
text/html=firefox.desktop;firefox-esr.desktop;google-chrome.desktop;chromium.desktop
|
|
||||||
text/markdown=org.gnome.TextEditor.desktop
|
|
||||||
text/plain=org.gnome.TextEditor.desktop
|
|
||||||
text/x-python=org.gnome.TextEditor.desktop
|
|
||||||
video/3gp=vlc.desktop
|
|
||||||
video/3gpp2=vlc.desktop
|
|
||||||
video/3gpp=vlc.desktop
|
|
||||||
video/avi=vlc.desktop
|
|
||||||
video/divx=vlc.desktop
|
|
||||||
video/dv=vlc.desktop
|
|
||||||
video/fli=vlc.desktop
|
|
||||||
video/flv=vlc.desktop
|
|
||||||
video/mp2t=vlc.desktop
|
|
||||||
video/mp4=vlc.desktop
|
|
||||||
video/mp4v-es=vlc.desktop
|
|
||||||
video/mpeg-system=vlc.desktop
|
|
||||||
video/mpeg=vlc.desktop
|
|
||||||
video/msvideo=vlc.desktop
|
|
||||||
video/ogg=vlc.desktop
|
|
||||||
video/quicktime=vlc.desktop
|
|
||||||
video/vivo=vlc.desktop
|
|
||||||
video/vnd.avi=vlc.desktop
|
|
||||||
video/vnd.divx=vlc.desktop
|
|
||||||
video/vnd.mpegurl=vlc.desktop
|
|
||||||
video/vnd.rn-realvideo=vlc.desktop
|
|
||||||
video/vnd.vivo=vlc.desktop
|
|
||||||
video/webm=vlc.desktop
|
|
||||||
video/x-anim=vlc.desktop
|
|
||||||
video/x-avi=vlc.desktop
|
|
||||||
video/x-flc=vlc.desktop
|
|
||||||
video/x-fli=vlc.desktop
|
|
||||||
video/x-flic=vlc.desktop
|
|
||||||
video/x-flv=vlc.desktop
|
|
||||||
video/x-m4v=vlc.desktop
|
|
||||||
video/x-matroska=vlc.desktop
|
|
||||||
video/x-mjpeg=vlc.desktop
|
|
||||||
video/x-mpeg-system=vlc.desktop
|
|
||||||
video/x-mpeg2=vlc.desktop
|
|
||||||
video/x-mpeg=vlc.desktop
|
|
||||||
video/x-ms-asf-plugin=vlc.desktop
|
|
||||||
video/x-ms-asf=vlc.desktop
|
|
||||||
video/x-ms-asx=vlc.desktop
|
|
||||||
video/x-ms-wm=vlc.desktop
|
|
||||||
video/x-ms-wmv=vlc.desktop
|
|
||||||
video/x-ms-wmx=vlc.desktop
|
|
||||||
video/x-ms-wvx=vlc.desktop
|
|
||||||
video/x-msvideo=vlc.desktop
|
|
||||||
video/x-nsv=vlc.desktop
|
|
||||||
video/x-ogm+ogg=vlc.desktop
|
|
||||||
video/x-ogm=vlc.desktop
|
|
||||||
video/x-theora+ogg=vlc.desktop
|
|
||||||
video/x-theora=vlc.desktop
|
|
||||||
x-scheme-handler/claude-cli=claude-code-url-handler.desktop
|
|
||||||
x-scheme-handler/http=firefox.desktop;firefox-esr.desktop;google-chrome.desktop;chromium.desktop
|
|
||||||
x-scheme-handler/https=firefox.desktop;firefox-esr.desktop;google-chrome.desktop;chromium.desktop
|
|
||||||
|
|
||||||
[Added Associations]
|
|
||||||
application/pdf=org.gnome.Evince.desktop;
|
|
||||||
application/x-shellscript=org.gnome.TextEditor.desktop;
|
|
||||||
application/xhtml+xml=firefox.desktop;firefox-esr.desktop;google-chrome.desktop;chromium.desktop;
|
|
||||||
audio/3gpp2=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/3gpp=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/AMR-WB=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/AMR=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/aac=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/ac3=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/basic=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/dv=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/eac3=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/flac=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/m4a=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/midi=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/mp1=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/mp2=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/mp3=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/mp4=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/mpeg=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/mpegurl=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/mpg=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/ogg=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/opus=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/scpls=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/vnd.dolby.heaac.1=vlc.desktop;
|
|
||||||
audio/vnd.dolby.heaac.2=vlc.desktop;
|
|
||||||
audio/vnd.dolby.mlp=vlc.desktop;
|
|
||||||
audio/vnd.dts.hd=vlc.desktop;
|
|
||||||
audio/vnd.dts=vlc.desktop;
|
|
||||||
audio/vnd.rn-realaudio=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/vorbis=vlc.desktop;
|
|
||||||
audio/wav=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/webm=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-aac=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-adpcm=vlc.desktop;
|
|
||||||
audio/x-aiff=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-ape=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-flac=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-gsm=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-it=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-m4a=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-matroska=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-mod=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-mp1=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-mp2=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-mp3=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-mpeg=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-mpegurl=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-mpg=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-ms-asf=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-ms-asx=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-ms-wax=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-ms-wma=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-musepack=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-pn-aiff=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-pn-au=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-pn-realaudio-plugin=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-pn-realaudio=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-pn-wav=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-pn-windows-acm=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-real-audio=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-realaudio=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-s3m=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-scpls=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-shorten=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-speex=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-tta=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-vorbis+ogg=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-vorbis=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-wav=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-wavpack=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
audio/x-xm=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
image/avif=org.gnome.Loupe.desktop;
|
|
||||||
image/bmp=org.gnome.Loupe.desktop;
|
|
||||||
image/gif=org.gnome.Loupe.desktop;
|
|
||||||
image/heic=org.gnome.Loupe.desktop;
|
|
||||||
image/jpeg=org.gnome.Loupe.desktop;
|
|
||||||
image/jxl=org.gnome.Loupe.desktop;
|
|
||||||
image/png=org.gnome.Loupe.desktop;
|
|
||||||
image/qoi=org.gnome.Loupe.desktop;
|
|
||||||
image/svg+xml-compressed=org.gnome.Loupe.desktop;
|
|
||||||
image/svg+xml=org.gnome.Loupe.desktop;
|
|
||||||
image/tiff=org.gnome.Loupe.desktop;
|
|
||||||
image/vnd-ms.dds=org.gnome.Loupe.desktop;
|
|
||||||
image/vnd.microsoft.icon=org.gnome.Loupe.desktop;
|
|
||||||
image/vnd.radiance=org.gnome.Loupe.desktop;
|
|
||||||
image/webp=org.gnome.Loupe.desktop;
|
|
||||||
image/x-dds=org.gnome.Loupe.desktop;
|
|
||||||
image/x-exr=org.gnome.Loupe.desktop;
|
|
||||||
image/x-portable-anymap=org.gnome.Loupe.desktop;
|
|
||||||
image/x-portable-bitmap=org.gnome.Loupe.desktop;
|
|
||||||
image/x-portable-graymap=org.gnome.Loupe.desktop;
|
|
||||||
image/x-portable-pixmap=org.gnome.Loupe.desktop;
|
|
||||||
image/x-qoi=org.gnome.Loupe.desktop;
|
|
||||||
image/x-tga=org.gnome.Loupe.desktop;
|
|
||||||
text/calendar=org.gnome.Evolution.desktop;org.gnome.Calendar.desktop;
|
|
||||||
text/html=firefox.desktop;firefox-esr.desktop;google-chrome.desktop;chromium.desktop;
|
|
||||||
text/markdown=org.gnome.TextEditor.desktop;
|
|
||||||
text/plain=org.gnome.TextEditor.desktop;
|
|
||||||
text/x-python=org.gnome.TextEditor.desktop;
|
|
||||||
video/3gp=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/3gpp2=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/3gpp=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/avi=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/divx=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/dv=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/fli=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/flv=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/mp2t=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/mp4=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/mp4v-es=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/mpeg-system=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/mpeg=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/msvideo=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/ogg=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/quicktime=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/vivo=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/vnd.avi=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/vnd.divx=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/vnd.mpegurl=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/vnd.rn-realvideo=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/vnd.vivo=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/webm=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-anim=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-avi=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-flc=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-fli=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-flic=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-flv=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-m4v=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-matroska=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-mjpeg=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-mpeg-system=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-mpeg2=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-mpeg=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-ms-asf-plugin=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-ms-asf=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-ms-asx=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-ms-wm=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-ms-wmv=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-ms-wmx=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-ms-wvx=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-msvideo=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-nsv=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-ogm+ogg=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-ogm=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-theora+ogg=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-theora=vlc.desktop;org.gnome.Totem.desktop;
|
|
||||||
video/x-totem-stream=org.gnome.Totem.desktop;
|
|
||||||
x-scheme-handler/claude-cli=claude-code-url-handler.desktop;
|
|
||||||
x-scheme-handler/http=firefox.desktop;firefox-esr.desktop;google-chrome.desktop;chromium.desktop;
|
|
||||||
x-scheme-handler/https=firefox.desktop;firefox-esr.desktop;google-chrome.desktop;chromium.desktop;
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
# `rofi`-related Configurations
|
|
||||||
|
|
||||||
This folder contains
|
|
||||||
the [config](./config.rasi)
|
|
||||||
and [theme](./theme.rasi)
|
|
||||||
for the [`rofi`](https://github.com/davatorium/rofi) launcher.
|
|
||||||
|
|
||||||
`colors.rasi` is untracked
|
|
||||||
and written by [`color-palette`](../../.local/bin/color-palette).
|
|
||||||
|
|
@ -1,48 +0,0 @@
|
||||||
configuration {
|
|
||||||
|
|
||||||
/* Bound in ~/.config/gnome-settings/key-bindings.ini:
|
|
||||||
- <Super>space => drun
|
|
||||||
+ <Super>d
|
|
||||||
- <Super><Shift>space => run
|
|
||||||
+ <Super><Shift>d
|
|
||||||
- <Super>Tab => window
|
|
||||||
*/
|
|
||||||
|
|
||||||
modes: "combi,drun,window,run";
|
|
||||||
|
|
||||||
combi-modes: [ window, drun ];
|
|
||||||
combi-hide-mode-prefix: true;
|
|
||||||
|
|
||||||
font: "Adwaita Sans 12";
|
|
||||||
|
|
||||||
show-icons: true;
|
|
||||||
icon-theme: "Adwaita";
|
|
||||||
|
|
||||||
drun-display-format: "{name}";
|
|
||||||
window-format: "{w} {c} {t}";
|
|
||||||
|
|
||||||
matching: "fuzzy";
|
|
||||||
sort: true;
|
|
||||||
|
|
||||||
terminal: "/usr/bin/alacritty";
|
|
||||||
|
|
||||||
/* `vi`-style list navigation */
|
|
||||||
kb-row-down: "Down,Control+j";
|
|
||||||
kb-row-up: "Up,Control+k";
|
|
||||||
kb-mode-next: "Shift+Right,Control+l";
|
|
||||||
kb-mode-previous: "Shift+Left,Control+h";
|
|
||||||
kb-accept-entry: "Return,KP_Enter";
|
|
||||||
kb-cancel: "Escape,Control+bracketleft";
|
|
||||||
kb-remove-char-back: "BackSpace,Shift+BackSpace";
|
|
||||||
/* Defaults stripped of the keys taken over above */
|
|
||||||
kb-clear-line: "";
|
|
||||||
kb-mode-complete: "";
|
|
||||||
kb-remove-to-eol: "";
|
|
||||||
|
|
||||||
|
|
||||||
kb-row-select: "Tab"; /* Tab completes the selection into the input */
|
|
||||||
kb-element-next: ""; /* must be freed first - it owns Tab by default */
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@theme "theme"
|
|
||||||
|
|
@ -1,80 +0,0 @@
|
||||||
/* The colors are from the palette in ~/.config/gnome-settings/COLORS.md */
|
|
||||||
/* => The values below are the "orange" defaults, overridden */
|
|
||||||
/* at the bottom by the color-palette written import */
|
|
||||||
|
|
||||||
* {
|
|
||||||
accent-c: #ed5b00; /* accent: active accents */
|
|
||||||
bg-dark: #fceae3; /* base: input bar */
|
|
||||||
bg: #ebebed; /* chrome: menu surfaces */
|
|
||||||
border-c: #992600; /* active-border: border */
|
|
||||||
emphasis-c: #fc6c27; /* emphasis-dim: selected tabs */
|
|
||||||
fg: #2a0b01; /* text */
|
|
||||||
fg-a12: rgba(42, 11, 1, 0.12); /* text @ 12%: selected row */
|
|
||||||
fg-dim: #631200; /* chrome-quiet: quiet text */
|
|
||||||
|
|
||||||
background-color: transparent;
|
|
||||||
text-color: @fg;
|
|
||||||
}
|
|
||||||
|
|
||||||
window {
|
|
||||||
background-color: @bg;
|
|
||||||
border: 2px;
|
|
||||||
border-color: @border-c;
|
|
||||||
border-radius: 12px; /* == libadwaita, forge */
|
|
||||||
width: 32em;
|
|
||||||
padding: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
mainbox {
|
|
||||||
children: [ inputbar, listview, mode-switcher ];
|
|
||||||
}
|
|
||||||
|
|
||||||
inputbar {
|
|
||||||
background-color: @bg-dark;
|
|
||||||
border-radius: 8px;
|
|
||||||
padding: 8px 12px;
|
|
||||||
children: [ prompt, entry ];
|
|
||||||
}
|
|
||||||
prompt { text-color: @fg-dim; margin: 0 8px 0 0; }
|
|
||||||
entry { placeholder: ""; }
|
|
||||||
|
|
||||||
listview {
|
|
||||||
lines: 6;
|
|
||||||
spacing: 0.2em;
|
|
||||||
fixed-height: true;
|
|
||||||
margin: 12px 0 0 0;
|
|
||||||
scrollbar: false;
|
|
||||||
}
|
|
||||||
|
|
||||||
element {
|
|
||||||
padding: 0.6em 0.8em;
|
|
||||||
border-radius: 8px;
|
|
||||||
spacing: 0.8em; /* gap between icon and text */
|
|
||||||
text-color: @fg-dim;
|
|
||||||
}
|
|
||||||
element active { text-color: @accent-c; }
|
|
||||||
element urgent { text-color: @border-c; background-color: @bg-dark; }
|
|
||||||
element selected {
|
|
||||||
background-color: @fg-a12;
|
|
||||||
text-color: @fg;
|
|
||||||
}
|
|
||||||
element selected.active { background-color: @emphasis-c; text-color: @fg; }
|
|
||||||
element-text, element-icon {
|
|
||||||
background-color: transparent;
|
|
||||||
text-color: inherit;
|
|
||||||
}
|
|
||||||
element-icon { size: 1.8em; }
|
|
||||||
|
|
||||||
mode-switcher { margin: 12px 0 0 0; spacing: 8px; }
|
|
||||||
button {
|
|
||||||
padding: 4px 10px;
|
|
||||||
border-radius: 8px;
|
|
||||||
background-color: @bg-dark;
|
|
||||||
text-color: @fg-dim;
|
|
||||||
}
|
|
||||||
button selected {
|
|
||||||
background-color: @emphasis-c; /* active tab, like forge */
|
|
||||||
text-color: @fg;
|
|
||||||
}
|
|
||||||
|
|
||||||
@import "colors"
|
|
||||||
|
|
@ -78,21 +78,6 @@ alias lla='lal'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if _command_exists age; then
|
|
||||||
alias aged='age -d -i ~/.config/age/identity.txt'
|
|
||||||
alias agee='age -r age1gzy6tj8y93ljuelcedrkcsv3p6gygk7ng3386u32av9a4ujh737qef8crp'
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if _command_exists xclip; then
|
|
||||||
alias clip='xclip -selection clipboard'
|
|
||||||
alias clip-out='xclip -selection clipboard -o'
|
|
||||||
alias c='clip'
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if _command_exists git; then
|
if _command_exists git; then
|
||||||
|
|
||||||
# Manage the bare `git` repository in ~/ holding the dotfiles
|
# Manage the bare `git` repository in ~/ holding the dotfiles
|
||||||
|
|
|
||||||
|
|
@ -1,42 +1,24 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# Locale settings for desktop machines
|
# Locale settings for headless machines
|
||||||
# as run by the author of this `dotfiles` repository
|
|
||||||
|
|
||||||
# Requires the en_US.UTF-8, en_DK.UTF-8, en_IE.UTF-8, and de_DE.UTF-8
|
|
||||||
# locales be installed which is checked by ~/.local/bin/ensure-locales
|
|
||||||
|
|
||||||
# Other hosts (e.g., servers) usually lack some of these locales,
|
|
||||||
# and Debian's /etc/ssh/ssh_config forwards all of them via `SendEnv LANG LC_*`
|
|
||||||
# => ~/.local/bin/ssh, ~/.local/bin/scp, and ~/.local/bin/sftp
|
|
||||||
# send `LC_ALL=C.UTF-8` on top to mask them on remote hosts
|
|
||||||
|
|
||||||
|
|
||||||
export LANG=en_US.UTF-8 # Fallback for any (future) LC_* not set below
|
# Drop what a client may forward over `ssh`,
|
||||||
|
# because `AcceptEnv LANG LC_*` may be set in /etc/ssh/sshd_config
|
||||||
|
unset \
|
||||||
|
LC_ALL \
|
||||||
|
LC_ADDRESS \
|
||||||
|
LC_COLLATE \
|
||||||
|
LC_CTYPE LC_IDENTIFICATION \
|
||||||
|
LC_MEASUREMENT \
|
||||||
|
LC_MESSAGES \
|
||||||
|
LC_MONETARY \
|
||||||
|
LC_NAME \
|
||||||
|
LC_NUMERIC \
|
||||||
|
LC_PAPER \
|
||||||
|
LC_TELEPHONE \
|
||||||
|
LC_TIME
|
||||||
|
|
||||||
|
|
||||||
# Base: US English for language, text handling, and sorting
|
# Set every LC_* category implicitly with the `$LANG` fallback
|
||||||
|
export LANG=C.UTF-8
|
||||||
export LC_COLLATE=en_US.UTF-8 # Dictionary sort order => Ignore punctuation
|
|
||||||
export LC_CTYPE=en_US.UTF-8 # UTF-8 character classification
|
|
||||||
export LC_MESSAGES=en_US.UTF-8
|
|
||||||
export LC_NUMERIC=en_US.UTF-8 # 1,234.56 rather than 1.234,56
|
|
||||||
|
|
||||||
|
|
||||||
# Exceptions: European conventions with English number formatting
|
|
||||||
|
|
||||||
export LC_MEASUREMENT=en_IE.UTF-8 # Use the metric system
|
|
||||||
export LC_MONETARY=en_IE.UTF-8 # Euro with 1,234.56
|
|
||||||
export LC_PAPER=en_IE.UTF-8 # Use DIN-A4 for a page
|
|
||||||
export LC_TIME=en_DK.UTF-8 # ISO dates, 24h clock, Monday first
|
|
||||||
|
|
||||||
|
|
||||||
# (German) metadata
|
|
||||||
|
|
||||||
export LC_ADDRESS=de_DE.UTF-8 # German postal layout
|
|
||||||
export LC_IDENTIFICATION=en_US.UTF-8
|
|
||||||
export LC_NAME=en_US.UTF-8
|
|
||||||
export LC_TELEPHONE=de_DE.UTF-8 # For "+49" and "030 12345"
|
|
||||||
|
|
||||||
|
|
||||||
export TZ="Europe/Berlin"
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ if [ "$SHLVL" = 1 ]; then # ~ if on the outermost shell instance
|
||||||
|
|
||||||
# Clear screen and scrollback without a `terminfo` lookup
|
# Clear screen and scrollback without a `terminfo` lookup
|
||||||
# because `clear` fails on hosts that do not know `$TERM`
|
# because `clear` fails on hosts that do not know `$TERM`
|
||||||
# (e.g., `alacritty`)
|
|
||||||
printf '\033[H\033[2J\033[3J'
|
printf '\033[H\033[2J\033[3J'
|
||||||
|
|
||||||
# On a real Linux `tty`, run `clear_console` for a full reset also
|
# On a real Linux `tty`, run `clear_console` for a full reset also
|
||||||
|
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
# `systemd` User Units
|
|
||||||
|
|
||||||
This folder contains user services and timers,
|
|
||||||
enabled by [`dotfiles-install`](../../../.local/bin/dotfiles-install).
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
[Unit]
|
|
||||||
Description=Restore of the GNOME settings upon login
|
|
||||||
Before=graphical-session-pre.target
|
|
||||||
ConditionPathIsDirectory=%h/.config/gnome-settings
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Environment=FRESH_SESSION=1
|
|
||||||
Type=oneshot
|
|
||||||
ExecStart=%h/.local/bin/gnome-restore
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=graphical-session-pre.target
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
[Unit]
|
|
||||||
Description=Return "Night Light" to the automatic schedule and default warmth
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
ExecStart=%h/.local/bin/night-light-reset
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
[Timer]
|
|
||||||
OnCalendar=03:00
|
|
||||||
Persistent=true
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=timers.target
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
[Unit]
|
|
||||||
Description=Set default screen brightness
|
|
||||||
After=graphical-session.target
|
|
||||||
ConditionPathExistsGlob=/sys/class/backlight/*
|
|
||||||
PartOf=graphical-session.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
ExecStart=%h/.local/bin/set-brightness-default
|
|
||||||
TimeoutStartSec=30
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=graphical-session.target
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
[Unit]
|
|
||||||
Description=Set default keyboard backlight brightness
|
|
||||||
After=graphical-session.target
|
|
||||||
PartOf=graphical-session.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
ExecStart=%h/.local/bin/set-keyboard-brightness-default
|
|
||||||
TimeoutStartSec=30
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=graphical-session.target
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
[Unit]
|
|
||||||
Description=Set default output volume
|
|
||||||
After=wireplumber.service
|
|
||||||
PartOf=graphical-session.target
|
|
||||||
Wants=wireplumber.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
ExecStart=%h/.local/bin/set-volume-default
|
|
||||||
TimeoutStartSec=30
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=graphical-session.target
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
[Unit]
|
|
||||||
# Works together with "xkb-options" in ~/.config/gnome-settings/misc.ini
|
|
||||||
Description=Tap Caps Lock (acting as Control) to send Escape
|
|
||||||
ConditionEnvironment=XDG_SESSION_TYPE=x11
|
|
||||||
ConditionPathExists=/usr/bin/xcape
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=forking
|
|
||||||
ExecStart=/usr/bin/xcape -e 'Caps_Lock=Escape'
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=graphical-session.target
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
Alacritty.desktop
|
|
||||||
org.gnome.Console.desktop
|
|
||||||
org.gnome.Terminal.desktop
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,59 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Triggered by <Super><Alt>d
|
|
||||||
# as defined in [org/gnome/settings-daemon/plugins/media-keys]
|
|
||||||
# in ~/.config/gnome-settings/key-bindings.ini
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
|
|
||||||
|
|
||||||
Forge=org.gnome.shell.extensions.forge
|
|
||||||
Interface=org.gnome.desktop.interface
|
|
||||||
|
|
||||||
|
|
||||||
if [ "$(gsettings get $Interface color-scheme)" = "'prefer-dark'" ]; then
|
|
||||||
new_theme="light"
|
|
||||||
else
|
|
||||||
new_theme="dark"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Render and apply the palette for the target scheme before flipping,
|
|
||||||
# so that the visible switch happens in one step
|
|
||||||
"$HOME/.local/bin/color-palette" --write --scheme "$new_theme"
|
|
||||||
|
|
||||||
|
|
||||||
dconf load / < "$XDG_CONFIG_HOME/gnome-settings/local/palette.ini"
|
|
||||||
|
|
||||||
|
|
||||||
# Set the "color-scheme" explicitly here to be on the safe side
|
|
||||||
# (although it is also contained in the palette.ini file)
|
|
||||||
#
|
|
||||||
# See comments for "color-scheme" under [org/gnome/desktop/interface]
|
|
||||||
# in ~/.config/gnome-settings/misc.ini
|
|
||||||
gsettings set $Interface color-scheme "prefer-$new_theme"
|
|
||||||
|
|
||||||
|
|
||||||
# `forge` only re-reads its stylesheet on a restart;
|
|
||||||
# however, it takes about one second to do so
|
|
||||||
# gnome-extensions disable forge@jmmaranan.com
|
|
||||||
# gnome-extensions enable forge@jmmaranan.com
|
|
||||||
|
|
||||||
# As a hack, we make `forge` re-read its stylesheet by poking a watched setting
|
|
||||||
if gnome-extensions list --enabled 2>/dev/null | grep -qxF "forge@jmmaranan.com"; then
|
|
||||||
_gap=$(gsettings get $Forge window-gap-size | awk '{print $2}')
|
|
||||||
gsettings set $Forge window-gap-size "uint32 $((_gap + 1))"
|
|
||||||
gsettings set $Forge window-gap-size "uint32 $_gap"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# The "workspace indicator" extension only re-reads its stylesheet on a restart
|
|
||||||
_iwi=improved-workspace-indicator@michaelaquilina.github.io
|
|
||||||
if gnome-extensions list --enabled 2>/dev/null | grep -qxF "$_iwi"; then
|
|
||||||
gnome-extensions disable "$_iwi"
|
|
||||||
gnome-extensions enable "$_iwi"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
echo "Switched the color theme to $new_theme"
|
|
||||||
|
|
@ -1,84 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Load the ~/.config/gnome-settings[/local]/*.ini files into `dconf`,
|
|
||||||
# or just the single <file> given as an argument
|
|
||||||
#
|
|
||||||
# Unlike ~/.local/bin/gnome-restore this neither backs up nor resets
|
|
||||||
# anything, so keys removed from the *.ini files stay active
|
|
||||||
# => Use this for a quick iteration on the *.ini files,
|
|
||||||
# and `gnome-restore` for a deterministic state
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
|
|
||||||
|
|
||||||
GNOME_CFG_DIR="$XDG_CONFIG_HOME/gnome-settings"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_usage() {
|
|
||||||
echo "Usage: $(basename "$0") [<file>]" >&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
_load() {
|
|
||||||
# The *.ini files are machine independent and use a placeholder /home/user
|
|
||||||
echo " $(basename "$1")"
|
|
||||||
sed "s|/home/user|$HOME|g" "$1" | dconf load /
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ! command -v dconf >/dev/null 2>&1; then
|
|
||||||
echo "dconf is not installed" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
[ "$#" -le 1 ] || _usage
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# A single file, e.g., while iterating on it
|
|
||||||
|
|
||||||
if [ "$#" -eq 1 ]; then
|
|
||||||
|
|
||||||
if [ ! -f "$1" ]; then
|
|
||||||
echo "No such file: $1" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Loading a single GNOME settings file:"
|
|
||||||
|
|
||||||
_load "$1"
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Load all *.ini files in ~/.config/gnome-settings[/local]/
|
|
||||||
|
|
||||||
|
|
||||||
if [ ! -d "$GNOME_CFG_DIR" ]; then
|
|
||||||
echo "No such directory: $GNOME_CFG_DIR" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
echo "Loading GNOME settings from: $GNOME_CFG_DIR"
|
|
||||||
|
|
||||||
|
|
||||||
for file in "$GNOME_CFG_DIR"/*.ini; do
|
|
||||||
[ -e "$file" ] || continue # because the glob does not expand if empty
|
|
||||||
_load "$file"
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
for file in "$GNOME_CFG_DIR"/local/*.ini; do
|
|
||||||
[ -e "$file" ] || continue # because the glob does not expand if empty
|
|
||||||
_load "$file"
|
|
||||||
done
|
|
||||||
|
|
@ -1,43 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# List GNOME `dconf` keys that are live but not described by ~/.config/gnome-settings/*.ini
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
# Keep in sync with the `RESET_PATHS` in ~/.local/bin/gnome-restore
|
|
||||||
# (Note: The `$FILTER` below is a bit more generic than the `RESET_PATHS`)
|
|
||||||
FILTER='^(org/gnome/|org/gtk/|desktop/ibus/|org/freedesktop/tracker/|ca/desrt/|system/)'
|
|
||||||
|
|
||||||
GNOME_CFG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/gnome-settings"
|
|
||||||
|
|
||||||
|
|
||||||
flat() {
|
|
||||||
awk '/^\[/ { s = substr($0, 2, length($0) - 2); next }
|
|
||||||
/^[A-Za-z0-9][A-Za-z0-9_-]*=/ { i = index($0, "="); print s "/" substr($0, 1, i - 1) }'
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
live=$(mktemp)
|
|
||||||
managed=$(mktemp)
|
|
||||||
|
|
||||||
trap 'rm -f "$live" "$managed"' EXIT INT TERM
|
|
||||||
|
|
||||||
|
|
||||||
dconf dump / | flat | grep -E "$FILTER" | sort -u > "$live"
|
|
||||||
|
|
||||||
find "$GNOME_CFG_DIR" -maxdepth 2 -type f -name '*.ini' -exec cat {} + \
|
|
||||||
| sed "s|/home/user|$HOME|g" \
|
|
||||||
| flat | grep -E "$FILTER" | sort -u > "$managed"
|
|
||||||
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "== Live keys NOT in the ~/.config/gnome-settings/*.ini files =="
|
|
||||||
comm -23 "$live" "$managed"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "== Keys in the ~/.config/gnome-settings/*.ini files but NOT live =="
|
|
||||||
comm -13 "$live" "$managed"
|
|
||||||
echo ""
|
|
||||||
|
|
@ -11,17 +11,15 @@ set -eu
|
||||||
|
|
||||||
|
|
||||||
XDG_BIN_HOME="${XDG_BIN_HOME:-$HOME/.local/bin}"
|
XDG_BIN_HOME="${XDG_BIN_HOME:-$HOME/.local/bin}"
|
||||||
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
|
|
||||||
XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}"
|
XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}"
|
||||||
XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}"
|
XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}"
|
||||||
|
|
||||||
# Each branch's first commit sets the default to its own name
|
# Each branch's first commit sets the default to its own name
|
||||||
# => Overridable via the environment (e.g., done by `dotfiles-update`)
|
# => Overridable via the environment (e.g., done by `dotfiles-update`)
|
||||||
DOTFILES_BRANCH="${DOTFILES_BRANCH:-desktop}"
|
DOTFILES_BRANCH="${DOTFILES_BRANCH:-main}"
|
||||||
|
|
||||||
DOTFILES_DIR="${DOTFILES_DIR:-$XDG_DATA_HOME/dotfiles}"
|
DOTFILES_DIR="${DOTFILES_DIR:-$XDG_DATA_HOME/dotfiles}"
|
||||||
DOTFILES_HTTPS="${DOTFILES_HTTPS:-https://code.webartifex.de/alexander/dotfiles}"
|
DOTFILES_HTTPS="${DOTFILES_HTTPS:-https://code.webartifex.de/alexander/dotfiles}"
|
||||||
DOTFILES_SSH="${DOTFILES_SSH:-git@git.webartifex.de:alexander/dotfiles.git}"
|
|
||||||
|
|
||||||
BACKUPS_DIR="$XDG_STATE_HOME/dotfiles-backups"
|
BACKUPS_DIR="$XDG_STATE_HOME/dotfiles-backups"
|
||||||
BACKUP_DIR="$BACKUPS_DIR/$(date +%Y%m%d-%H%M%S)"
|
BACKUP_DIR="$BACKUPS_DIR/$(date +%Y%m%d-%H%M%S)"
|
||||||
|
|
@ -131,22 +129,6 @@ _git checkout --force "$DOTFILES_BRANCH"
|
||||||
_git config --local status.showUntrackedFiles no
|
_git config --local status.showUntrackedFiles no
|
||||||
|
|
||||||
|
|
||||||
# Prefer `ssh` for syncing, but only if this machine may have access,
|
|
||||||
# which we proxy with the presence of a default private key file
|
|
||||||
for _key in id_ed25519 id_ecdsa id_rsa; do
|
|
||||||
if [ -f "$HOME/.ssh/$_key" ]; then
|
|
||||||
_git remote set-url origin "$DOTFILES_SSH"
|
|
||||||
echo "The dotfiles now sync via: $DOTFILES_SSH"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
unset _key
|
|
||||||
|
|
||||||
|
|
||||||
locales_ok=1
|
|
||||||
sh "$XDG_BIN_HOME/ensure-locales" >/dev/null 2>&1 || locales_ok=0
|
|
||||||
|
|
||||||
|
|
||||||
if command -v batcat >/dev/null 2>&1 && ! command -v bat >/dev/null 2>&1; then
|
if command -v batcat >/dev/null 2>&1 && ! command -v bat >/dev/null 2>&1; then
|
||||||
ln -sf "$(command -v batcat)" "$XDG_BIN_HOME/bat"
|
ln -sf "$(command -v batcat)" "$XDG_BIN_HOME/bat"
|
||||||
fi
|
fi
|
||||||
|
|
@ -156,35 +138,6 @@ sh "$XDG_BIN_HOME/generate-shell-completions" --quieter \
|
||||||
|| echo "WARN: generating shell completions failed" >&2
|
|| echo "WARN: generating shell completions failed" >&2
|
||||||
|
|
||||||
|
|
||||||
if command -v python3 >/dev/null 2>&1; then
|
|
||||||
|
|
||||||
python3 -m \
|
|
||||||
pip install \
|
|
||||||
--user \
|
|
||||||
--upgrade \
|
|
||||||
--break-system-packages \
|
|
||||||
coloraide \
|
|
||||||
rofimoji \
|
|
||||||
|| echo "WARN: pip install failed" >&2
|
|
||||||
|
|
||||||
python3 "$XDG_BIN_HOME/color-palette" --write \
|
|
||||||
|| echo "WARN: color-palette failed" >&2
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if systemctl --user daemon-reload 2>/dev/null; then
|
|
||||||
systemctl --user enable gnome-restore.service
|
|
||||||
systemctl --user enable night-light-reset.timer
|
|
||||||
systemctl --user enable set-brightness-default.service
|
|
||||||
systemctl --user enable set-keyboard-brightness-default.service
|
|
||||||
systemctl --user enable set-volume-default.service
|
|
||||||
systemctl --user enable xcape.service
|
|
||||||
else
|
|
||||||
echo "WARN: no systemd user session, units not enabled" >&2
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Keep only the most recent backups
|
# Keep only the most recent backups
|
||||||
_keep=10
|
_keep=10
|
||||||
if [ -d "$BACKUPS_DIR" ]; then
|
if [ -d "$BACKUPS_DIR" ]; then
|
||||||
|
|
@ -199,13 +152,6 @@ fi
|
||||||
echo ""
|
echo ""
|
||||||
echo "The dotfiles were installed successfully (branch: $DOTFILES_BRANCH)"
|
echo "The dotfiles were installed successfully (branch: $DOTFILES_BRANCH)"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
if [ "$locales_ok" -ne 1 ]; then
|
|
||||||
echo "WARNING: Some locales are missing, fix:"
|
|
||||||
echo " sudo $XDG_BIN_HOME/ensure-locales"
|
|
||||||
echo ""
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Reload your shell to use them:"
|
echo "Reload your shell to use them:"
|
||||||
echo " exec \$SHELL -l"
|
echo " exec \$SHELL -l"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
|
||||||
|
|
@ -1,112 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Ensure all locales specified in ~/.config/shell/locale are installed
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
LOCALES="en_US.UTF-8 de_DE.UTF-8 en_DK.UTF-8 en_IE.UTF-8"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Because `locale -a` prints, for example, "en_US.utf8",
|
|
||||||
# and `locale.gen` wants "en_US.UTF-8" instead
|
|
||||||
_locale_present() {
|
|
||||||
norm=$(printf '%s' "$1" | tr 'A-Z' 'a-z' | tr -d '-')
|
|
||||||
locale -a 2>/dev/null | tr 'A-Z' 'a-z' | tr -d '-' | grep -qx "$norm"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# In most cases there should be no missing `$LOCALES`
|
|
||||||
|
|
||||||
missing=""
|
|
||||||
|
|
||||||
for l in $LOCALES; do
|
|
||||||
_locale_present "$l" || missing="$missing $l"
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -z "$missing" ]; then
|
|
||||||
echo ""
|
|
||||||
echo "All locales present"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# If there are missing `$LOCALES`, just notify the user
|
|
||||||
# because this script most likely was run as part of `dotfiles-install`
|
|
||||||
# and therefore without root privileges
|
|
||||||
|
|
||||||
if [ "$(id -u)" != 0 ]; then
|
|
||||||
|
|
||||||
self=$(cd "$(dirname "$0")" && pwd)/$(basename "$0")
|
|
||||||
|
|
||||||
echo "" >&2
|
|
||||||
echo "Missing locales:$missing" >&2
|
|
||||||
echo "" >&2
|
|
||||||
echo "Fix with: sudo $self" >&2
|
|
||||||
echo "" >&2
|
|
||||||
|
|
||||||
exit 1
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Install the missing `$LOCALES`
|
|
||||||
|
|
||||||
if ! command -v locale-gen >/dev/null 2>&1; then
|
|
||||||
|
|
||||||
echo "" >&2
|
|
||||||
echo "locale-gen not found, generate manually:" >&2
|
|
||||||
echo "" >&2
|
|
||||||
|
|
||||||
for l in $missing; do
|
|
||||||
echo " localedef -i ${l%.*} -f UTF-8 $l" >&2
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "" >&2
|
|
||||||
|
|
||||||
exit 1
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
[ -f /etc/locale.gen ] || : > /etc/locale.gen
|
|
||||||
|
|
||||||
|
|
||||||
for l in $missing; do
|
|
||||||
|
|
||||||
# Uncomment existing line, or append if not present at all
|
|
||||||
|
|
||||||
esc=$(printf '%s' "$l" | sed 's/\./\\./g')
|
|
||||||
|
|
||||||
if grep -qE "^#? *$esc UTF-8" /etc/locale.gen; then
|
|
||||||
sed -i "s/^# *\($esc UTF-8\)/\1/" /etc/locale.gen
|
|
||||||
else
|
|
||||||
printf '%s UTF-8\n' "$l" >> /etc/locale.gen
|
|
||||||
fi
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
locale-gen
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# verify all missing `$LOCALES` were installed
|
|
||||||
|
|
||||||
rc=0
|
|
||||||
|
|
||||||
for l in $missing; do
|
|
||||||
_locale_present "$l" || {
|
|
||||||
echo "Failed to generate: $l" >&2;
|
|
||||||
rc=1;
|
|
||||||
}
|
|
||||||
done
|
|
||||||
|
|
||||||
exit $rc
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Raise Evolution and switch to its workspace,
|
|
||||||
# or switch to the target workspace first and launch it there
|
|
||||||
#
|
|
||||||
# Switching before the launch avoids the flicker that
|
|
||||||
# `auto-move-windows` causes by relocating an already mapped window
|
|
||||||
#
|
|
||||||
# Note that `auto-move-windows` must not also manage Evolution,
|
|
||||||
# or both mechanisms fight over the placement
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
_CLASS=evolution
|
|
||||||
_COMMAND=/usr/bin/evolution
|
|
||||||
|
|
||||||
# This is the last of the 10 named but 0-based workspaces
|
|
||||||
# in "num-workspaces" under [org/gnome/desktop/wm/preferences]
|
|
||||||
_WORKSPACE=9
|
|
||||||
|
|
||||||
|
|
||||||
# "wmctrl -x -a" already switches to the window's workspace
|
|
||||||
wmctrl -x -a "$_CLASS" && exit 0
|
|
||||||
|
|
||||||
|
|
||||||
wmctrl -s "$_WORKSPACE"
|
|
||||||
|
|
||||||
|
|
||||||
exec "$_COMMAND"
|
|
||||||
|
|
@ -1,189 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Install the GDM greeter's `dconf` settings into /etc/dconf/db/gdm.d/
|
|
||||||
#
|
|
||||||
# The keys listed in `$MIRROR_PATHS` below are read from
|
|
||||||
# the live user session and written as one keyfile
|
|
||||||
#
|
|
||||||
# The greeter runs as the `Debian-gdm` user and never sees
|
|
||||||
# the user-level settings in ~/.config/gnome-settings/*.ini
|
|
||||||
#
|
|
||||||
# The keyfile is written, not symlinked,
|
|
||||||
# so that the greeter does not depend on ~/ being readable
|
|
||||||
#
|
|
||||||
# Without root privileges, this script only checks and reports
|
|
||||||
# => Run with `sudo` to install
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
SELF_DIR=$(cd "$(dirname "$0")" && pwd)
|
|
||||||
|
|
||||||
TARGET_DIR=/etc/dconf/db/gdm.d
|
|
||||||
COMPILED_DB=/etc/dconf/db/gdm
|
|
||||||
|
|
||||||
# Only files with this prefix are managed (and pruned) here
|
|
||||||
PREFIX=90-dotfiles-
|
|
||||||
MIRRORED=mirrored
|
|
||||||
|
|
||||||
|
|
||||||
# Keys mirrored from the live user session into the GDM greeter
|
|
||||||
#
|
|
||||||
# One absolute `dconf` path per line
|
|
||||||
# => Unset keys are skipped, so the greeter keeps its defaults
|
|
||||||
MIRROR_PATHS='
|
|
||||||
|
|
||||||
# Idle and power
|
|
||||||
#
|
|
||||||
# Only the AC keys => On battery, the greeter keeps suspending
|
|
||||||
/org/gnome/desktop/session/idle-delay
|
|
||||||
/org/gnome/settings-daemon/plugins/power/idle-brightness
|
|
||||||
/org/gnome/settings-daemon/plugins/power/idle-dim
|
|
||||||
/org/gnome/settings-daemon/plugins/power/power-saver-profile-on-low-battery
|
|
||||||
/org/gnome/settings-daemon/plugins/power/sleep-inactive-ac-timeout
|
|
||||||
/org/gnome/settings-daemon/plugins/power/sleep-inactive-ac-type
|
|
||||||
|
|
||||||
# Would disarm the physical power button at the greeter as well
|
|
||||||
# /org/gnome/settings-daemon/plugins/power/power-button-action
|
|
||||||
|
|
||||||
# Keyboard (e.g., Caps Lock as Control while typing the password)
|
|
||||||
/org/gnome/desktop/input-sources/sources
|
|
||||||
/org/gnome/desktop/input-sources/xkb-options
|
|
||||||
/org/gnome/desktop/peripherals/keyboard/numlock-state
|
|
||||||
|
|
||||||
# Touchpad and mouse
|
|
||||||
/org/gnome/desktop/peripherals/mouse/natural-scroll
|
|
||||||
/org/gnome/desktop/peripherals/touchpad/natural-scroll
|
|
||||||
/org/gnome/desktop/peripherals/touchpad/tap-to-click
|
|
||||||
|
|
||||||
# Top bar
|
|
||||||
/org/gnome/desktop/interface/accent-color
|
|
||||||
/org/gnome/desktop/interface/clock-format
|
|
||||||
/org/gnome/desktop/interface/clock-show-date
|
|
||||||
/org/gnome/desktop/interface/clock-show-seconds
|
|
||||||
/org/gnome/desktop/interface/clock-show-weekday
|
|
||||||
/org/gnome/desktop/interface/show-battery-percentage
|
|
||||||
'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ! command -v gdm3 >/dev/null 2>&1 && [ ! -d /etc/gdm3 ]; then
|
|
||||||
echo "GDM is not installed => Nothing to do"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if ! command -v dconf >/dev/null 2>&1; then
|
|
||||||
echo "dconf is not installed" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# As root, the live settings must come from the invoking user
|
|
||||||
if [ "$(id -u)" = 0 ] && [ "${SUDO_USER:-root}" = "root" ]; then
|
|
||||||
echo "Run via sudo from the user whose settings to mirror" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# The mirrored paths, without comments and blank lines
|
|
||||||
_mirror_paths() {
|
|
||||||
printf '%s\n' "$MIRROR_PATHS" | grep -Ev '^[[:space:]]*(#|$)' | sort -u
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# `dconf read` as the session user, also when run via `sudo`
|
|
||||||
# (reads need no D-Bus, only the user's database file)
|
|
||||||
_dconf_read() {
|
|
||||||
if [ "$(id -u)" = 0 ]; then
|
|
||||||
_home=$(getent passwd "$SUDO_USER" | cut -d: -f6)
|
|
||||||
runuser -u "$SUDO_USER" -- env \
|
|
||||||
HOME="$_home" \
|
|
||||||
XDG_CONFIG_HOME="$_home/.config" \
|
|
||||||
XDG_RUNTIME_DIR="/run/user/$(id -u "$SUDO_USER")" \
|
|
||||||
dconf read "$1"
|
|
||||||
else
|
|
||||||
dconf read "$1"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
_render_mirrored() {
|
|
||||||
echo "# Written by gdm-settings-install from the live user session - do not edit"
|
|
||||||
_mirror_paths | while IFS= read -r path; do
|
|
||||||
_value=$(_dconf_read "$path")
|
|
||||||
[ -n "$_value" ] || continue # Unset => Keep the greeter's default
|
|
||||||
_dir=${path%/*}
|
|
||||||
_dir=${_dir#/}
|
|
||||||
if [ "$_dir" != "${_last:-}" ]; then
|
|
||||||
printf '\n[%s]\n' "$_dir"
|
|
||||||
_last=$_dir
|
|
||||||
fi
|
|
||||||
printf '%s=%s\n' "${path##*/}" "$_value"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
_in_sync() {
|
|
||||||
[ -f "$COMPILED_DB" ] || return 1
|
|
||||||
|
|
||||||
_render_mirrored | cmp -s - "$TARGET_DIR/$PREFIX$MIRRORED" || return 1
|
|
||||||
|
|
||||||
# No other managed file may be left over (e.g., from older versions)
|
|
||||||
for dst in "$TARGET_DIR/$PREFIX"*; do
|
|
||||||
[ -e "$dst" ] || continue
|
|
||||||
[ "${dst##*/$PREFIX}" = "$MIRRORED" ] || return 1
|
|
||||||
done
|
|
||||||
|
|
||||||
# The compiled database must be newer than the keyfiles
|
|
||||||
[ -z "$(find "$TARGET_DIR" -newer "$COMPILED_DB" 2>/dev/null)" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if _in_sync; then
|
|
||||||
echo "GDM settings are up to date"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if [ "$(id -u)" != 0 ]; then
|
|
||||||
echo "" >&2
|
|
||||||
echo "GDM settings are not installed or outdated" >&2
|
|
||||||
echo "" >&2
|
|
||||||
echo "Fix with: sudo $SELF_DIR/$(basename "$0")" >&2
|
|
||||||
echo "" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mkdir -p "$TARGET_DIR"
|
|
||||||
|
|
||||||
|
|
||||||
for dst in "$TARGET_DIR/$PREFIX"*; do
|
|
||||||
[ -e "$dst" ] || continue
|
|
||||||
[ "${dst##*/$PREFIX}" = "$MIRRORED" ] || rm -v -- "$dst"
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
_rendered=$(mktemp)
|
|
||||||
trap 'rm -f "$_rendered"' EXIT
|
|
||||||
|
|
||||||
_render_mirrored > "$_rendered"
|
|
||||||
install -v -m 644 -- "$_rendered" "$TARGET_DIR/$PREFIX$MIRRORED"
|
|
||||||
|
|
||||||
|
|
||||||
dconf update
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Debian's `gdm` profile must read the "gdm" system database
|
|
||||||
if ! grep -qs '^system-db:gdm$' /etc/dconf/profile/gdm /usr/share/dconf/profile/gdm; then
|
|
||||||
echo "WARN: no dconf profile for gdm reads system-db:gdm" >&2
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
echo "Installed the GDM settings into: $TARGET_DIR"
|
|
||||||
echo "They take effect at the next start of the greeter (e.g., reboot)"
|
|
||||||
|
|
@ -1,141 +0,0 @@
|
||||||
#!/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}"
|
|
||||||
XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}"
|
|
||||||
XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}"
|
|
||||||
|
|
||||||
BACKUP_DIR="$XDG_STATE_HOME/gnome-settings-backups"
|
|
||||||
GNOME_CFG_DIR="$XDG_CONFIG_HOME/gnome-settings"
|
|
||||||
|
|
||||||
|
|
||||||
# Subtrees either
|
|
||||||
# - fully described by the *.ini files
|
|
||||||
# - or reset to their defaults
|
|
||||||
#
|
|
||||||
# Notes:
|
|
||||||
# - Keep in sync with the `grep`s in ~/.local/bin/dconf-verify
|
|
||||||
# - "/org/freedesktop/tracker/" is exempted as we think resetting it
|
|
||||||
# makes `localsearch3` re-index everything from scratch
|
|
||||||
RESET_PATHS="
|
|
||||||
/ca/desrt/dconf-editor/
|
|
||||||
/desktop/ibus/
|
|
||||||
/org/gnome/baobab/
|
|
||||||
/org/gnome/calculator/
|
|
||||||
/org/gnome/calendar/
|
|
||||||
/org/gnome/Characters/
|
|
||||||
/org/gnome/clocks/
|
|
||||||
/org/gnome/Connections/
|
|
||||||
/org/gnome/Contacts/
|
|
||||||
/org/gnome/control-center/
|
|
||||||
/org/gnome/desktop/
|
|
||||||
/org/gnome/Disks/
|
|
||||||
/org/gnome/evince/
|
|
||||||
/org/gnome/Extensions/
|
|
||||||
/org/gnome/file-roller/
|
|
||||||
/org/gnome/gedit/
|
|
||||||
/org/gnome/gnome-system-monitor/
|
|
||||||
/org/gnome/Loupe/
|
|
||||||
/org/gnome/maps/
|
|
||||||
/org/gnome/mutter/
|
|
||||||
/org/gnome/nautilus/
|
|
||||||
/org/gnome/nm-applet/
|
|
||||||
/org/gnome/portal/
|
|
||||||
/org/gnome/settings-daemon/
|
|
||||||
/org/gnome/shell/
|
|
||||||
/org/gnome/simple-scan/
|
|
||||||
/org/gnome/software/
|
|
||||||
/org/gnome/system/location/
|
|
||||||
/org/gnome/terminal/
|
|
||||||
/org/gnome/TextEditor/
|
|
||||||
/org/gnome/Totem/
|
|
||||||
/org/gnome/tweaks/
|
|
||||||
/org/gnome/Weather/
|
|
||||||
/org/gnome/GWeather4/
|
|
||||||
/org/gtk/
|
|
||||||
/system/
|
|
||||||
"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ! command -v dconf >/dev/null 2>&1; then
|
|
||||||
echo "dconf is not installed => Nothing to do" >&2
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if [ ! -d "$GNOME_CFG_DIR" ]; then
|
|
||||||
echo "No settings found at: $GNOME_CFG_DIR" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
echo "Backing up current GNOME settings to: $BACKUP_DIR"
|
|
||||||
|
|
||||||
mkdir -p "$BACKUP_DIR"
|
|
||||||
dconf dump / > "$BACKUP_DIR/$(date +%Y%m%d-%H%M%S).ini"
|
|
||||||
|
|
||||||
# Keep the ten most recent backups
|
|
||||||
# shellcheck disable=SC2012 # File names are timestamps => `ls` is safe
|
|
||||||
ls -1t "$BACKUP_DIR"/*.ini | tail -n +11 | xargs -r rm --
|
|
||||||
|
|
||||||
|
|
||||||
# Remove temporary background image files
|
|
||||||
# created by ~/.local/bin/randomize-background
|
|
||||||
if [ "${FRESH_SESSION:-}" = "1" ]; then
|
|
||||||
echo "Removing session-scoped background image files"
|
|
||||||
rm -f "$XDG_CONFIG_HOME/gnome-settings/local/temporary_background.ini"
|
|
||||||
find "$XDG_DATA_HOME/backgrounds" -name '*-tmp-*.jpg' -delete 2>/dev/null || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
echo "Resetting managed subtrees in dconf"
|
|
||||||
|
|
||||||
for path in $RESET_PATHS; do
|
|
||||||
echo " $path"
|
|
||||||
dconf reset -f "$path"
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# forge's `patchCss()` writes its stylesheet backup to a path built from a
|
|
||||||
# property that no longer exists, yielding "~/undefined.bak"
|
|
||||||
# => Patch the path in the installed extension
|
|
||||||
THEME_JS="$XDG_DATA_HOME/gnome-shell/extensions/forge@jmmaranan.com/lib/shared/theme.js"
|
|
||||||
if [ -w "$THEME_JS" ]; then
|
|
||||||
sed -i 's|this\.configMgr\.stylesheetFileName + "\.bak"|configCss.get_path() + ".bak"|' "$THEME_JS"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
echo "Import GNOME extensions' schemas"
|
|
||||||
|
|
||||||
SCHEMAS="$HOME/.local/bin/gnome-shell-extensions-schemas-import"
|
|
||||||
if [ -x "$SCHEMAS" ]; then
|
|
||||||
"$SCHEMAS" || echo "WARN: importing GNOME extension schemas failed" >&2
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
LOAD="$HOME/.local/bin/dconf-load"
|
|
||||||
|
|
||||||
if [ -x "$LOAD" ]; then
|
|
||||||
"$LOAD"
|
|
||||||
else
|
|
||||||
echo "ERROR: $LOAD is missing" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
echo "Restored GNOME to the defaults defined in ~/.config/gnome-settings"
|
|
||||||
|
|
@ -1,49 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Install `forge` from source into the same place that
|
|
||||||
# https://extensions.gnome.org/extension/4481/forge/ would use
|
|
||||||
#
|
|
||||||
# The released version may break "window-toggle-float"
|
|
||||||
# (see https://github.com/forge-ext/forge/issues/492)
|
|
||||||
# and is not maintained at the moment
|
|
||||||
#
|
|
||||||
# A re-login is required afterwards,
|
|
||||||
# because `gnome-shell` only scans the extensions directory on startup
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
_UUID=forge@jmmaranan.com
|
|
||||||
_REPO=https://github.com/forge-ext/forge.git
|
|
||||||
_TARGET="${XDG_DATA_HOME:-$HOME/.local/share}/gnome-shell/extensions/$_UUID"
|
|
||||||
|
|
||||||
|
|
||||||
for _tool in git make glib-compile-schemas msgfmt xgettext; do
|
|
||||||
command -v "$_tool" >/dev/null || {
|
|
||||||
echo "ERROR: $_tool is missing (try: apt install git make libglib2.0-bin gettext)" >&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
_workdir=$(mktemp -d)
|
|
||||||
trap 'rm -rf "$_workdir"' EXIT
|
|
||||||
|
|
||||||
|
|
||||||
git clone --depth 1 "$_REPO" "$_workdir"
|
|
||||||
|
|
||||||
|
|
||||||
_commit=$(git -C "$_workdir" rev-parse --short HEAD)
|
|
||||||
|
|
||||||
|
|
||||||
make -C "$_workdir" build
|
|
||||||
|
|
||||||
|
|
||||||
rm -rf "$_TARGET"
|
|
||||||
|
|
||||||
|
|
||||||
make -C "$_workdir" install
|
|
||||||
|
|
||||||
|
|
||||||
echo "Installed $_UUID from $_commit into $_TARGET"
|
|
||||||
echo "Log out and back in, then: gnome-extensions enable $_UUID"
|
|
||||||
|
|
@ -1,34 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Make the `GSettings` schemas of all user-installed GNOME Shell extensions
|
|
||||||
# visible to a plain `gsettings`, by symlinking the *.gschema.xml files
|
|
||||||
# into the user schema directory and compiling them
|
|
||||||
#
|
|
||||||
# Idempotent: Re-running refreshes the links, prunes dangling ones
|
|
||||||
# (e.g., from removed extensions), and recompiles
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}"
|
|
||||||
|
|
||||||
EXTENSIONS_DIR="$XDG_DATA_HOME/gnome-shell/extensions"
|
|
||||||
SCHEMAS_DIR="$XDG_DATA_HOME/glib-2.0/schemas"
|
|
||||||
|
|
||||||
|
|
||||||
mkdir -p "$SCHEMAS_DIR"
|
|
||||||
|
|
||||||
|
|
||||||
# Prune symlinks whose target no longer exists
|
|
||||||
find "$SCHEMAS_DIR" -maxdepth 1 -type l ! -exec test -e {} \; -exec rm -v -- {} \;
|
|
||||||
|
|
||||||
|
|
||||||
# Link every schema shipped by an extension
|
|
||||||
for xml in "$EXTENSIONS_DIR"/*/schemas/*.gschema.xml; do
|
|
||||||
[ -e "$xml" ] || continue # because the glob does not expand if empty
|
|
||||||
echo " $(basename "$xml")"
|
|
||||||
ln -sf -- "$xml" "$SCHEMAS_DIR/"
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
glib-compile-schemas "$SCHEMAS_DIR"
|
|
||||||
|
|
@ -1,75 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Restart `gnome-shell` in place,
|
|
||||||
# preserving the session and all windows
|
|
||||||
#
|
|
||||||
# Usually survives, but treat it like a logout:
|
|
||||||
# save your work first, because a crash on the way down can end the session
|
|
||||||
#
|
|
||||||
# Debian normally forbids starting/stopping this unit by hand;
|
|
||||||
# we allow it via a user-level drop-in (installed on first run)
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
if [ "${XDG_SESSION_TYPE:-}" != "x11" ]; then
|
|
||||||
echo "gnome-shell-restart: only works on X11, not on ${XDG_SESSION_TYPE:-unknown}" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
_UNIT="org.gnome.Shell@x11.service"
|
|
||||||
|
|
||||||
_DROPIN_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/systemd/user/$_UNIT.d"
|
|
||||||
_DROPIN_FILE="$_DROPIN_DIR/allow-restart.conf"
|
|
||||||
|
|
||||||
|
|
||||||
if [ ! -f "$_DROPIN_FILE" ] || ! grep -q "SuccessExitStatus" "$_DROPIN_FILE"; then
|
|
||||||
|
|
||||||
mkdir -p "$_DROPIN_DIR"
|
|
||||||
|
|
||||||
cat > "$_DROPIN_FILE" << 'EOF'
|
|
||||||
# Written by ~/.local/bin/gnome-shell-restart
|
|
||||||
|
|
||||||
# Debian forbids starting and stopping this unit by hand
|
|
||||||
# to protect Wayland sessions, where the shell cannot restart in place
|
|
||||||
# => We are on X11
|
|
||||||
[Unit]
|
|
||||||
RefuseManualStart=no
|
|
||||||
RefuseManualStop=no
|
|
||||||
|
|
||||||
# The old shell sometimes crashes while shutting down.
|
|
||||||
#
|
|
||||||
# Without this line, `systemd` treats that crash as a real failure
|
|
||||||
# and ends the whole session (i.e., logs us out)
|
|
||||||
#
|
|
||||||
# => We count a segfault as a normal exit
|
|
||||||
#
|
|
||||||
# If the shell truly keeps crashing, the start limit still ends the session
|
|
||||||
[Service]
|
|
||||||
SuccessExitStatus=1 SEGV
|
|
||||||
EOF
|
|
||||||
|
|
||||||
systemctl --user daemon-reload
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# The unit allows at most 3 starts per 15 seconds
|
|
||||||
# and one restart too many counts as a failure and logs us out
|
|
||||||
# => Refuse to restart again too soon after the last one
|
|
||||||
_STARTED="$(systemctl --user show -p ActiveEnterTimestamp --value "$_UNIT")"
|
|
||||||
if [ -n "$_STARTED" ]; then
|
|
||||||
_AGE=$(( $(date +%s) - $(date -d "$_STARTED" +%s) ))
|
|
||||||
if [ "$_AGE" -lt 20 ]; then
|
|
||||||
echo "gnome-shell-restart: last shell start was only ${_AGE}s ago" >&2
|
|
||||||
echo "gnome-shell-restart: refusing to trip the start limit (wait $(( 20 - _AGE ))s)" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Forget any earlier failure, so it does not block this restart
|
|
||||||
systemctl --user reset-failed "$_UNIT" 2> /dev/null || true
|
|
||||||
|
|
||||||
|
|
||||||
exec systemctl --user restart "$_UNIT"
|
|
||||||
|
|
@ -1,78 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Show the key bindings from ~/.config/gnome-settings/key-bindings.ini,
|
|
||||||
# one binding per line, flattened from the comment tables in that file
|
|
||||||
#
|
|
||||||
# The key column comes first and the search input is prefilled with "^",
|
|
||||||
# so that a typed pattern only matches the key column
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
INI="${XDG_CONFIG_HOME:-$HOME/.config}/gnome-settings/key-bindings.ini"
|
|
||||||
|
|
||||||
|
|
||||||
awk -F '|' '
|
|
||||||
/^# .*\|/ {
|
|
||||||
sub(/^# ?/, "")
|
|
||||||
for (i = 1; i <= NF; i++) gsub(/^[ \t]+|[ \t]+$/, "", $i)
|
|
||||||
key = $1
|
|
||||||
|
|
||||||
if (key == "Key(s)") { # Header of the <Super> table
|
|
||||||
mode = "layers"
|
|
||||||
for (i = 2; i <= NF; i++) mod[i] = $i
|
|
||||||
next
|
|
||||||
}
|
|
||||||
if (key == "Key") { # Header of the browser table
|
|
||||||
mode = "browser"
|
|
||||||
next
|
|
||||||
}
|
|
||||||
if (mode == "" || key ~ /^[-+]+$/) next
|
|
||||||
|
|
||||||
# Every line starts with a layer rank used by `sort` below:
|
|
||||||
# 1 <Super>, 2 <Super><Shift>, 3 <Super><Control>,
|
|
||||||
# 4 <Super><Alt>, 5 <Super><Alt><Shift>, 6 browser bindings
|
|
||||||
|
|
||||||
if (mode == "browser") {
|
|
||||||
if (key == "") next
|
|
||||||
k = split(key, parts, ">")
|
|
||||||
line[++n] = sprintf("6 %-17s %-20s %s: %s", parts[k],
|
|
||||||
substr(key, 1, length(key) - length(parts[k])), $2, $3)
|
|
||||||
next
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == "") { # Row without a key => prefix or continuation
|
|
||||||
for (i = 2; i <= NF; i++) {
|
|
||||||
cell = $i
|
|
||||||
if (cell == "") continue
|
|
||||||
if (cell ~ /^\.\.\./) { # Continues the row above
|
|
||||||
sub(/^\.\.\. */, "", cell)
|
|
||||||
sub(/ \.\.\.$/, "", line[last[i]])
|
|
||||||
line[last[i]] = line[last[i]] " " cell
|
|
||||||
} else { # Prefix for the rows below
|
|
||||||
sub(/ \.\.\.$/, "", cell)
|
|
||||||
prefix[i] = cell
|
|
||||||
}
|
|
||||||
}
|
|
||||||
next
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 2; i <= NF; i++) {
|
|
||||||
cell = $i
|
|
||||||
if (cell == "") continue
|
|
||||||
if (cell ~ /^\.\.\./) {
|
|
||||||
sub(/^\.\.\. */, "", cell)
|
|
||||||
cell = prefix[i] " " cell
|
|
||||||
}
|
|
||||||
line[++n] = sprintf("%d %-17s %-20s %s", i - 1, key, mod[i], cell)
|
|
||||||
last[i] = n
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
END { for (i = 1; i <= n; i++) print line[i] }
|
|
||||||
' "$INI" \
|
|
||||||
| LC_ALL=C sort -s -f -k2,2 -k1,1n \
|
|
||||||
| cut -d ' ' -f 2- \
|
|
||||||
| rofi -dmenu -i -p keys -no-custom -matching regex -filter '^' -no-sort \
|
|
||||||
-theme-str '* { font: "FiraCode Nerd Font 10"; } window { width: 60em; } listview { lines: 20; }' \
|
|
||||||
>/dev/null
|
|
||||||
|
|
@ -1,49 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Move the active window to the first empty workspace and follow it
|
|
||||||
#
|
|
||||||
# Note: This assumes that only the main monitor has workspaces enabled
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
active=$(xprop -root _NET_ACTIVE_WINDOW | awk '{print $NF}')
|
|
||||||
desktop=$(xprop -id "$active" _NET_WM_DESKTOP 2>/dev/null | awk '{print $NF}')
|
|
||||||
|
|
||||||
# 4294967295 (i.e., 0xFFFFFFFF) means "on all workspaces",
|
|
||||||
# which is what `mutter` reports for windows on secondary monitors
|
|
||||||
# when "workspaces-only-on-primary" is true
|
|
||||||
if [ "$desktop" = "4294967295" ] || [ -z "$desktop" ]; then
|
|
||||||
command -v notify-send >/dev/null \
|
|
||||||
&& notify-send 'Window Management' 'Active window is not on a workspace on the main screen'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
occupied_workspaces=$(wmctrl -l) || exit 1 # fail safe
|
|
||||||
occupied_workspaces=$(echo "$occupied_workspaces" | awk '{print $2}' | sort -u)
|
|
||||||
|
|
||||||
total=$(wmctrl -d | wc -l)
|
|
||||||
|
|
||||||
|
|
||||||
# 0-based index for the first workspace
|
|
||||||
i=0
|
|
||||||
|
|
||||||
|
|
||||||
while [ "$i" -lt "$total" ]; do
|
|
||||||
|
|
||||||
if ! echo "$occupied_workspaces" | grep -qx "$i"; then
|
|
||||||
wmctrl -r :ACTIVE: -t "$i"
|
|
||||||
wmctrl -s "$i"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
i=$((i + 1))
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
command -v notify-send >/dev/null \
|
|
||||||
&& notify-send 'Window Management' 'No empty workspace available'
|
|
||||||
|
|
||||||
exit 1
|
|
||||||
|
|
@ -1,162 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# This script ensures my `nextcloud` clients operate in a uniform way
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}"
|
|
||||||
|
|
||||||
NEXTCLOUD_CFG="${XDG_CONFIG_HOME:-$HOME/.config}/Nextcloud/nextcloud.cfg"
|
|
||||||
SERVER_URL_FILE="${XDG_CONFIG_HOME:-$HOME/.config}/Nextcloud/server.txt"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if [ -r "$SERVER_URL_FILE" ]; then
|
|
||||||
# `tr` strips spaces, tabs, and CR/LF
|
|
||||||
SERVER_URL=$(head -n 1 "$SERVER_URL_FILE" | tr -d '[:space:]')
|
|
||||||
else
|
|
||||||
SERVER_URL=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
[ "${1:-}" = "--force" ] && force=1 || force=0
|
|
||||||
|
|
||||||
if [ -z "$SERVER_URL" ]; then
|
|
||||||
|
|
||||||
if [ "$force" -eq 1 ]; then
|
|
||||||
|
|
||||||
echo "" >&2
|
|
||||||
echo "WARN: No usable server URL at $SERVER_URL_FILE, leaving the server URL unmanaged" >&2
|
|
||||||
echo "" >&2
|
|
||||||
|
|
||||||
else
|
|
||||||
|
|
||||||
echo "" >&2
|
|
||||||
echo "No usable server URL found at $SERVER_URL_FILE" >&2
|
|
||||||
echo "" >&2
|
|
||||||
echo "Create it with a single line, e.g., 'https://cloud.example.com'," >&2
|
|
||||||
echo "or re-run with --force to skip the URL settings" >&2
|
|
||||||
echo "" >&2
|
|
||||||
|
|
||||||
exit 1
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ! command -v crudini >/dev/null 2>&1; then
|
|
||||||
echo "crudini is not installed => cannot configure nextcloud" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if ! command -v nextcloud >/dev/null 2>&1; then
|
|
||||||
echo "Nextcloud is not installed" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
del_key() { # section key
|
|
||||||
crudini --del "$NEXTCLOUD_CFG" "$1" "$2"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
set_key() { # section key value
|
|
||||||
crudini --set "$NEXTCLOUD_CFG" "$1" "$2" "$3"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Stop `nextcloud`
|
|
||||||
|
|
||||||
nextcloud --quit 2>/dev/null || true
|
|
||||||
|
|
||||||
for _ in $(seq 30); do
|
|
||||||
pgrep -x nextcloud >/dev/null || break
|
|
||||||
sleep 0.5
|
|
||||||
done
|
|
||||||
|
|
||||||
if pgrep -x nextcloud >/dev/null; then
|
|
||||||
echo "Nextcloud did not exit; aborting" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mkdir -p "$(dirname "$NEXTCLOUD_CFG")"
|
|
||||||
touch "$NEXTCLOUD_CFG"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Configure base settings for `nextcloud`
|
|
||||||
|
|
||||||
if [ -n "$SERVER_URL" ]; then
|
|
||||||
set_key General forceOverrideServerUrl true
|
|
||||||
set_key General overrideServerUrl "$SERVER_URL"
|
|
||||||
fi
|
|
||||||
|
|
||||||
set_key General overrideLocalDir "$HOME/Cloud"
|
|
||||||
|
|
||||||
set_key General launchOnSystemStartup true
|
|
||||||
set_key General monoIcons true
|
|
||||||
set_key General crashReporter false
|
|
||||||
|
|
||||||
# Windows-only, kept for completeness
|
|
||||||
set_key General showInExplorerNavigationPane true
|
|
||||||
|
|
||||||
set_key General optionalServerNotifications false
|
|
||||||
set_key General showCallNotifications false
|
|
||||||
set_key General showChatNotifications 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
|
|
||||||
set_key General notifyExistingFoldersOverLimit false
|
|
||||||
set_key General stopSyncingExistingFoldersOverLimit false
|
|
||||||
|
|
||||||
set_key General moveToTrash true
|
|
||||||
set_key General promptDeleteAllFiles true
|
|
||||||
|
|
||||||
set_key Proxy type 0
|
|
||||||
|
|
||||||
|
|
||||||
# Make `nextcloud` sync at full speed, with sane fallback limits
|
|
||||||
|
|
||||||
# Modes:
|
|
||||||
# - 0 => unlimited
|
|
||||||
# - -1 => automatic limit
|
|
||||||
# - +1 => manually set limit
|
|
||||||
|
|
||||||
# Limits:
|
|
||||||
# - values are in KBytes/s
|
|
||||||
# - we assume line speeds of 100/30 Mbit/s, to be capped at 80%
|
|
||||||
|
|
||||||
set_key BWLimit useDownloadLimit 0
|
|
||||||
# 100 Mbit/s / 8 => 12500 KBytes/s * 0.8 => 10000
|
|
||||||
set_key BWLimit downloadLimit 10000
|
|
||||||
|
|
||||||
set_key BWLimit useUploadLimit 0
|
|
||||||
# 30 Mbit/s / 8 => 3750 KBytes/s * 0.8 => 3000
|
|
||||||
set_key BWLimit uploadLimit 3000
|
|
||||||
|
|
||||||
|
|
||||||
set_key Nextcloud remotePollInterval 60000
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Because of a bug, `nextcloud` wants to create logs at a deprecated location
|
|
||||||
# => An empty file at that location makes `nextcloud` use the new location
|
|
||||||
# inside ~/.config/Nextcloud
|
|
||||||
rm -rf "$XDG_DATA_HOME/Nextcloud"
|
|
||||||
touch "$XDG_DATA_HOME/Nextcloud"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Resume `nextcloud`
|
|
||||||
setsid nextcloud --background >/dev/null 2>&1 &
|
|
||||||
|
|
@ -1,88 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Triggered by <Super><Alt>bracketleft
|
|
||||||
# as defined in [org/gnome/settings-daemon/plugins/media-keys]
|
|
||||||
# in ~/.config/gnome-settings/key-bindings.ini
|
|
||||||
#
|
|
||||||
# This script makes the screen a bit cooler than it currently is,
|
|
||||||
# unless it is currently in a ramping phase and not fully tinted
|
|
||||||
#
|
|
||||||
# The default warmth is restored at login by ~/.local/bin/gnome-restore
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
# GNOME's GUI lets one choose between 1700 and 4700 only,
|
|
||||||
# and 6500 is the point where no color correction is applied at all
|
|
||||||
# while 1000 is the absolute minimum supported by the OS
|
|
||||||
_MIN_TEMPERATURE=1200
|
|
||||||
_MAX_TEMPERATURE=4700
|
|
||||||
|
|
||||||
|
|
||||||
notify() {
|
|
||||||
ID_FILE="${XDG_RUNTIME_DIR}/night-light-notification-id"
|
|
||||||
_id=$(cat "$ID_FILE" 2>/dev/null || true)
|
|
||||||
|
|
||||||
if [ -n "$_id" ]; then
|
|
||||||
notify-send -p -t 5000 --replace-id="$_id" "Night Light" "$1" > "$ID_FILE" || rm -f "$ID_FILE"
|
|
||||||
else
|
|
||||||
notify-send -p -t 5000 "Night Light" "$1" > "$ID_FILE" || rm -f "$ID_FILE"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Schema=org.gnome.settings-daemon.plugins.color
|
|
||||||
|
|
||||||
|
|
||||||
active=$(gdbus call --session \
|
|
||||||
--dest org.gnome.SettingsDaemon.Color \
|
|
||||||
--object-path /org/gnome/SettingsDaemon/Color \
|
|
||||||
--method org.freedesktop.DBus.Properties.Get \
|
|
||||||
org.gnome.SettingsDaemon.Color NightLightActive)
|
|
||||||
|
|
||||||
applied=$(gdbus call --session \
|
|
||||||
--dest org.gnome.SettingsDaemon.Color \
|
|
||||||
--object-path /org/gnome/SettingsDaemon/Color \
|
|
||||||
--method org.freedesktop.DBus.Properties.Get \
|
|
||||||
org.gnome.SettingsDaemon.Color Temperature \
|
|
||||||
| sed -E 's/.*uint32 ([0-9]+).*/\1/')
|
|
||||||
|
|
||||||
automatic=$(gsettings get $Schema night-light-schedule-automatic)
|
|
||||||
current=$(gsettings get $Schema night-light-temperature | awk '{print $2}')
|
|
||||||
|
|
||||||
|
|
||||||
# Cooling never turns "Night Light" on
|
|
||||||
if [ "$active" = "(<false>,)" ]; then
|
|
||||||
notify "is not tinting the screen right now (target: ${current}K)"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# While the screen is not (fully) tinted,
|
|
||||||
# stepping the target has no visible effect
|
|
||||||
# => Only show what is going on
|
|
||||||
if [ "$automatic" = "true" ] && [ $((applied - current)) -gt 300 ]; then
|
|
||||||
notify "is still following the schedule's ramp (target: ${current}K)"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Walking past the cool end switches the feature off
|
|
||||||
if [ "$current" -ge $_MAX_TEMPERATURE ]; then
|
|
||||||
gsettings set $Schema night-light-enabled false
|
|
||||||
notify "is now off (stepped past ${_MAX_TEMPERATURE}K)"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# 500 = (4700 - 1700 + 500) / 7
|
|
||||||
# => Seven steps spanning more than the range in the GUI,
|
|
||||||
# mainly because we want to allow a bit more warmth (i.e., +500)
|
|
||||||
new=$((current + 500))
|
|
||||||
|
|
||||||
if [ "$new" -gt $_MAX_TEMPERATURE ]; then
|
|
||||||
new=$_MAX_TEMPERATURE
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
gsettings set $Schema night-light-temperature "uint32 $new"
|
|
||||||
|
|
@ -1,102 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Triggered by <Super><Alt>bracketright
|
|
||||||
# as defined in [org/gnome/settings-daemon/plugins/media-keys]
|
|
||||||
# in ~/.config/gnome-settings/key-bindings.ini
|
|
||||||
#
|
|
||||||
# This script ensures "Night Light" is forced on
|
|
||||||
# or makes the screen a bit warmer than it currently is
|
|
||||||
#
|
|
||||||
# The default warmth is restored at login by ~/.local/bin/gnome-restore
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
# GNOME's GUI lets one choose between 1700 and 4700 only,
|
|
||||||
# and 6500 is the point where no color correction is applied at all
|
|
||||||
# while 1000 is the absolute minimum supported by the OS
|
|
||||||
_MIN_TEMPERATURE=1200
|
|
||||||
_MAX_TEMPERATURE=4700
|
|
||||||
|
|
||||||
_DEFAULT_TEMPERATURE=2200
|
|
||||||
|
|
||||||
|
|
||||||
notify() {
|
|
||||||
ID_FILE="${XDG_RUNTIME_DIR}/night-light-notification-id"
|
|
||||||
_id=$(cat "$ID_FILE" 2>/dev/null || true)
|
|
||||||
|
|
||||||
if [ -n "$_id" ]; then
|
|
||||||
notify-send -p -t 5000 --replace-id="$_id" "Night Light" "$1" > "$ID_FILE" || rm -f "$ID_FILE"
|
|
||||||
else
|
|
||||||
notify-send -p -t 5000 "Night Light" "$1" > "$ID_FILE" || rm -f "$ID_FILE"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Schema=org.gnome.settings-daemon.plugins.color
|
|
||||||
|
|
||||||
|
|
||||||
active=$(gdbus call --session \
|
|
||||||
--dest org.gnome.SettingsDaemon.Color \
|
|
||||||
--object-path /org/gnome/SettingsDaemon/Color \
|
|
||||||
--method org.freedesktop.DBus.Properties.Get \
|
|
||||||
org.gnome.SettingsDaemon.Color NightLightActive)
|
|
||||||
|
|
||||||
applied=$(gdbus call --session \
|
|
||||||
--dest org.gnome.SettingsDaemon.Color \
|
|
||||||
--object-path /org/gnome/SettingsDaemon/Color \
|
|
||||||
--method org.freedesktop.DBus.Properties.Get \
|
|
||||||
org.gnome.SettingsDaemon.Color Temperature \
|
|
||||||
| sed -E 's/.*uint32 ([0-9]+).*/\1/')
|
|
||||||
|
|
||||||
automatic=$(gsettings get $Schema night-light-schedule-automatic)
|
|
||||||
current=$(gsettings get $Schema night-light-temperature | awk '{print $2}')
|
|
||||||
|
|
||||||
|
|
||||||
if [ "$active" = "(<true>,)" ] \
|
|
||||||
&& { [ "$automatic" = "false" ] || [ $((applied - current)) -le 300 ]; }; then
|
|
||||||
at_target=true
|
|
||||||
else
|
|
||||||
at_target=false
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Step only if the screen already shows the target tint
|
|
||||||
# while off or ramping in, forcing on below provides the warming already
|
|
||||||
if [ "$at_target" = "true" ]; then
|
|
||||||
|
|
||||||
# 500 = (4700 - 1700 + 500) / 7
|
|
||||||
# => Seven steps spanning more than the range in the GUI,
|
|
||||||
# mainly because we want to allow a bit more warmth (i.e., +500)
|
|
||||||
new=$((current - 500))
|
|
||||||
|
|
||||||
if [ "$new" -lt $_MIN_TEMPERATURE ]; then
|
|
||||||
new=$_MIN_TEMPERATURE
|
|
||||||
fi
|
|
||||||
|
|
||||||
gsettings set $Schema night-light-temperature "uint32 $new"
|
|
||||||
|
|
||||||
# Untinted and parked at a cool target
|
|
||||||
# => Forcing on would barely show otherwise
|
|
||||||
elif [ "$active" = "(<false>,)" ] && [ "$current" -gt $_DEFAULT_TEMPERATURE ]; then
|
|
||||||
|
|
||||||
gsettings set $Schema night-light-temperature "uint32 $_DEFAULT_TEMPERATURE"
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Always force "Night Light" on, saving a <Super><Alt>backslash call,
|
|
||||||
# with the same settings as in ~/.local/bin/night-light-toggle-schedule
|
|
||||||
if [ "$active" = "(<false>,)" ] || [ "$automatic" = "true" ]; then
|
|
||||||
gsettings set $Schema night-light-enabled true
|
|
||||||
gsettings set $Schema night-light-schedule-automatic false
|
|
||||||
gsettings set $Schema night-light-schedule-from 0.0
|
|
||||||
gsettings set $Schema night-light-schedule-to 24.0
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Notify only if the press produced no visible change
|
|
||||||
# (i.e., already at the minimum and not just snapped to full warmth by the force)
|
|
||||||
if [ "$at_target" = "true" ] && [ "$current" -le $_MIN_TEMPERATURE ]; then
|
|
||||||
notify "is already as warm as it gets (${_MIN_TEMPERATURE}K)"
|
|
||||||
fi
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Ensure "Night Light" is enabled,
|
|
||||||
# set to run according to the automatic schedule,
|
|
||||||
# and reverted to the `_DEFAULT_TEMPERATURE`
|
|
||||||
#
|
|
||||||
# Intended to be run at 03:00 by the `night-light-reset.timer` systemd
|
|
||||||
# user unit, so that a forced state does not persist
|
|
||||||
#
|
|
||||||
# See ~/.local/bin/night-light-toggle-schedule for detailed documentation
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
_DEFAULT_TEMPERATURE=2200
|
|
||||||
|
|
||||||
|
|
||||||
Schema=org.gnome.settings-daemon.plugins.color
|
|
||||||
|
|
||||||
gsettings set $Schema night-light-enabled true
|
|
||||||
gsettings set $Schema night-light-schedule-automatic true
|
|
||||||
gsettings set $Schema night-light-schedule-from 18.0
|
|
||||||
gsettings set $Schema night-light-schedule-to 6.0
|
|
||||||
|
|
||||||
gsettings set $Schema night-light-temperature "uint32 $_DEFAULT_TEMPERATURE"
|
|
||||||
|
|
@ -1,75 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Triggered by <Super><Alt><Shift>backslash
|
|
||||||
# as defined in [org/gnome/settings-daemon/plugins/media-keys]
|
|
||||||
# in ~/.config/gnome-settings/key-bindings.ini
|
|
||||||
#
|
|
||||||
# See ~/.local/bin/night-light-toggle-schedule
|
|
||||||
# for the other half of the toggling logic
|
|
||||||
# and extensive documentation
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
notify() {
|
|
||||||
ID_FILE="${XDG_RUNTIME_DIR}/night-light-notification-id"
|
|
||||||
_id=$(cat "$ID_FILE" 2>/dev/null || true)
|
|
||||||
|
|
||||||
if [ -n "$_id" ]; then
|
|
||||||
notify-send -p -t 5000 --replace-id="$_id" "Night Light" "$1" > "$ID_FILE" || rm -f "$ID_FILE"
|
|
||||||
else
|
|
||||||
notify-send -p -t 5000 "Night Light" "$1" > "$ID_FILE" || rm -f "$ID_FILE"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Schema=org.gnome.settings-daemon.plugins.color
|
|
||||||
|
|
||||||
|
|
||||||
if [ "$(gsettings get $Schema night-light-enabled)" = "true" ]; then
|
|
||||||
|
|
||||||
active_before=$(gdbus call --session \
|
|
||||||
--dest org.gnome.SettingsDaemon.Color \
|
|
||||||
--object-path /org/gnome/SettingsDaemon/Color \
|
|
||||||
--method org.freedesktop.DBus.Properties.Get \
|
|
||||||
org.gnome.SettingsDaemon.Color NightLightActive)
|
|
||||||
|
|
||||||
gsettings set $Schema night-light-enabled false
|
|
||||||
|
|
||||||
if [ "$active_before" = "(<false>,)" ]; then
|
|
||||||
notify "is now disabled, but the screen was not tinted anyways"
|
|
||||||
fi
|
|
||||||
|
|
||||||
else
|
|
||||||
|
|
||||||
gsettings set $Schema night-light-enabled true
|
|
||||||
|
|
||||||
# We could start from our default warmth, as defined
|
|
||||||
# in [org/gnome/settings-daemon/plugins/color]
|
|
||||||
# in ~/.config/gnome-settings/misc.ini
|
|
||||||
# but choose not to do that because this is meant to be
|
|
||||||
# a plain on/off switch with no side effects
|
|
||||||
# => Snapping is left to <Super><Alt>bracketright, which is about
|
|
||||||
# warmth rather than about the feature being on or off
|
|
||||||
#
|
|
||||||
# _DEFAULT_TEMPERATURE=2200
|
|
||||||
# current=$(gsettings get $Schema night-light-temperature | awk '{print $2}')
|
|
||||||
#
|
|
||||||
# if [ "$current" -gt $_DEFAULT_TEMPERATURE ]; then
|
|
||||||
# gsettings set $Schema night-light-temperature "uint32 $_DEFAULT_TEMPERATURE"
|
|
||||||
# fi
|
|
||||||
|
|
||||||
# Give the settings daemon a moment to recompute "NightLightActive"
|
|
||||||
sleep 0.1
|
|
||||||
|
|
||||||
active_after=$(gdbus call --session \
|
|
||||||
--dest org.gnome.SettingsDaemon.Color \
|
|
||||||
--object-path /org/gnome/SettingsDaemon/Color \
|
|
||||||
--method org.freedesktop.DBus.Properties.Get \
|
|
||||||
org.gnome.SettingsDaemon.Color NightLightActive)
|
|
||||||
|
|
||||||
if [ "$active_after" = "(<false>,)" ]; then
|
|
||||||
notify "is now enabled, but the schedule keeps it off for now"
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
@ -1,145 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Triggered by <Super><Alt>backslash
|
|
||||||
# as defined in [org/gnome/settings-daemon/plugins/media-keys]
|
|
||||||
# in ~/.config/gnome-settings/key-bindings.ini
|
|
||||||
#
|
|
||||||
# Night Light control:
|
|
||||||
#
|
|
||||||
# - <Super><Alt>backslash => "when" toggle
|
|
||||||
# + "Force" the screen to be warm right now!
|
|
||||||
# (Turns Night Light on if it was off, and keeps it on all day)
|
|
||||||
# + "Un-force" the Night Light into the local evening schedule
|
|
||||||
# - <Super><Alt><Shift>backslash => "if" toggle
|
|
||||||
# Plain on/off switch for the Night Light feature
|
|
||||||
# - <Super><Alt>bracketleft => Make the screen cooler
|
|
||||||
# - <Super><Alt>bracketright => Make the screen warmer, and "force" warmness
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# State machine:
|
|
||||||
#
|
|
||||||
# +-----------------------+------------------------------+------------------------------+------------------------------+------------------------------+
|
|
||||||
# | | "IF" toggle | "WHEN" toggle | "make COOLER" | "make WARMER" |
|
|
||||||
# | Current STATE | <Super><Alt><Shift>backslash | <Super><Alt>backslash | <Super><Alt>bracketleft | <Super><Alt>bracketright |
|
|
||||||
# | | | | | |
|
|
||||||
# +-----------------------+------------------------------+------------------------------+------------------------------+------------------------------+
|
|
||||||
# +-----------------------+------------------------------+------------------------------+------------------------------+------------------------------+
|
|
||||||
# | DISABLED | ENABLE | enabled | still disabled | enabled |
|
|
||||||
# | + scheduled | + still scheduled | + FORCED on | + still scheduled | + FORCED on |
|
|
||||||
# | => no tint | => no or set tint | => set tint | => still no tint | => set tint |
|
|
||||||
# | | based on time N? | | N! | *1 |
|
|
||||||
# +-----------------------+------------------------------+------------------------------+------------------------------+------------------------------+
|
|
||||||
# | DISABLED | ENABLE | enabled | still disabled | enabled |
|
|
||||||
# | + forced on | + still forced | + still FORCED on | + still forced | + still FORCED on |
|
|
||||||
# | => no tint | => set tint | => set tint | => still no tint | => set tint |
|
|
||||||
# | | | | N! | *1 |
|
|
||||||
# +-----------------------+------------------------------+------------------------------+------------------------------+------------------------------+
|
|
||||||
# | enabled | DISABLE | still enabled | still enabled | still enabled |
|
|
||||||
# | + SCHEDULED (day) | + still scheduled | + FORCED on | + still scheduled | + FORCED on |
|
|
||||||
# | => no tint yet | => still no tint | => set tint | => still no tint | => set tint |
|
|
||||||
# | | N! | | N! | *1 |
|
|
||||||
# +-----------------------+------------------------------+------------------------------+------------------------------+------------------------------+
|
|
||||||
# | enabled | DISABLE | still enabled | still enabled | still enabled |
|
|
||||||
# | + SCHEDULED (ramping) | + still scheduled | + FORCED on | + still scheduled | + FORCED on |
|
|
||||||
# | => some tint already | => no tint | => set tint | => no change in tint | => set tint |
|
|
||||||
# | | | | N! | |
|
|
||||||
# +-----------------------+------------------------------+------------------------------+------------------------------+------------------------------+
|
|
||||||
# | enabled | DISABLE | still enabled | still enabled | still enabled |
|
|
||||||
# | + SCHEDULED (night) | + still scheduled | + FORCED on | + still scheduled | + FORCED on |
|
|
||||||
# | => set tint | => no tint | => set tint | => LESS tint | => MORE tint |
|
|
||||||
# | | | N! | *2 N? | N? |
|
|
||||||
# +-----------------------+------------------------------+------------------------------+------------------------------+------------------------------+
|
|
||||||
# | enabled | DISABLE | still enabled | still enabled | still enabled |
|
|
||||||
# | + FORCED on | + still forced on | + back to SCHEDULED | + still forced on | + still forced on |
|
|
||||||
# | => set tint | => no tint | => no or set tint | => LESS tint | => MORE tint |
|
|
||||||
# | | | based on time N? | *2 N? | N? |
|
|
||||||
# +-----------------------+------------------------------+------------------------------+------------------------------+------------------------------+
|
|
||||||
# Legend:
|
|
||||||
# - N! => A notification is shown for sure because there is no visible change on the screen
|
|
||||||
# - N? => A notification is shown if there was no visible change on the screen
|
|
||||||
# - *1 => The temperature is snapped to 2200K to ensure a visible effect
|
|
||||||
# - *2 => The tint is turned off entirely when stepping over the maximum temperature
|
|
||||||
#
|
|
||||||
# Notes:
|
|
||||||
# - The main state property or state change is shown in CAPS
|
|
||||||
# - Steps range from 1200K (warmest) to 4700K (coolest),
|
|
||||||
# which is a bit more than the 1700K to 4700K in `gnome-control-center`
|
|
||||||
# - If the range is already exhausted, so that the tint does not change, a notification is shown
|
|
||||||
# - A 03:00 timer re-enables the Night Light feature and puts it back on the automatic schedule
|
|
||||||
# with the `$_DEFAULT_TEMPERATURE` set
|
|
||||||
#
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
notify() {
|
|
||||||
ID_FILE="${XDG_RUNTIME_DIR}/night-light-notification-id"
|
|
||||||
_id=$(cat "$ID_FILE" 2>/dev/null || true)
|
|
||||||
|
|
||||||
if [ -n "$_id" ]; then
|
|
||||||
notify-send -p -t 5000 --replace-id="$_id" "Night Light" "$1" > "$ID_FILE" || rm -f "$ID_FILE"
|
|
||||||
else
|
|
||||||
notify-send -p -t 5000 "Night Light" "$1" > "$ID_FILE" || rm -f "$ID_FILE"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Schema=org.gnome.settings-daemon.plugins.color
|
|
||||||
|
|
||||||
|
|
||||||
active_before=$(gdbus call --session \
|
|
||||||
--dest org.gnome.SettingsDaemon.Color \
|
|
||||||
--object-path /org/gnome/SettingsDaemon/Color \
|
|
||||||
--method org.freedesktop.DBus.Properties.Get \
|
|
||||||
org.gnome.SettingsDaemon.Color NightLightActive)
|
|
||||||
|
|
||||||
applied=$(gdbus call --session \
|
|
||||||
--dest org.gnome.SettingsDaemon.Color \
|
|
||||||
--object-path /org/gnome/SettingsDaemon/Color \
|
|
||||||
--method org.freedesktop.DBus.Properties.Get \
|
|
||||||
org.gnome.SettingsDaemon.Color Temperature \
|
|
||||||
| sed -E 's/.*uint32 ([0-9]+).*/\1/')
|
|
||||||
|
|
||||||
automatic=$(gsettings get $Schema night-light-schedule-automatic)
|
|
||||||
enabled=$(gsettings get $Schema night-light-enabled)
|
|
||||||
target=$(gsettings get $Schema night-light-temperature | awk '{print $2}')
|
|
||||||
|
|
||||||
|
|
||||||
if [ "$automatic" = "true" ] || [ "$enabled" = "false" ]; then
|
|
||||||
|
|
||||||
# Force "Night Light" enabled, enabling it if needed
|
|
||||||
gsettings set $Schema night-light-enabled true
|
|
||||||
gsettings set $Schema night-light-schedule-automatic false
|
|
||||||
gsettings set $Schema night-light-schedule-from 0.0
|
|
||||||
gsettings set $Schema night-light-schedule-to 24.0
|
|
||||||
|
|
||||||
if [ "$active_before" = "(<true>,)" ] && [ "$automatic" = "true" ] \
|
|
||||||
&& [ $((applied - target)) -le 300 ]; then
|
|
||||||
notify "is now forced to stay on and no longer on an automatic schedule"
|
|
||||||
fi
|
|
||||||
|
|
||||||
else
|
|
||||||
|
|
||||||
# Back to the live location's schedule
|
|
||||||
gsettings set $Schema night-light-schedule-automatic true
|
|
||||||
gsettings set $Schema night-light-schedule-from 18.0
|
|
||||||
gsettings set $Schema night-light-schedule-to 6.0
|
|
||||||
|
|
||||||
if [ "$active_before" = "(<true>,)" ]; then
|
|
||||||
|
|
||||||
# Give the settings daemon a moment to recompute "NightLightActive"
|
|
||||||
sleep 0.1
|
|
||||||
|
|
||||||
active_after=$(gdbus call --session \
|
|
||||||
--dest org.gnome.SettingsDaemon.Color \
|
|
||||||
--object-path /org/gnome/SettingsDaemon/Color \
|
|
||||||
--method org.freedesktop.DBus.Properties.Get \
|
|
||||||
org.gnome.SettingsDaemon.Color NightLightActive)
|
|
||||||
|
|
||||||
if [ "$active_after" = "(<true>,)" ]; then
|
|
||||||
notify "is still on because of an automatic schedule"
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
@ -1,152 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Determine the next wallpaper by round robin from the cloud
|
|
||||||
# and install it as the background files referenced in
|
|
||||||
# ~/.config/gnome-settings/misc.ini
|
|
||||||
#
|
|
||||||
# Candidates:
|
|
||||||
# - Pairs => Both "<name>-d.jpg" and "<name>-l.jpg" exist
|
|
||||||
# - Singles => Any other "*.jpg" not following the -d/-l scheme,
|
|
||||||
# used as dark and light at the same time
|
|
||||||
#
|
|
||||||
# The live `gsettings` URIs point at uniquely named copies
|
|
||||||
# because `gnome-shell` caches background images by file URI;
|
|
||||||
# `gnome-restore` cleans up that temporary state during the next login
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
|
|
||||||
XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}"
|
|
||||||
XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}"
|
|
||||||
|
|
||||||
SOURCE_DIR="$HOME/Cloud/Null-Tech/Backgrounds"
|
|
||||||
TARGET_DIR="$XDG_DATA_HOME/backgrounds"
|
|
||||||
|
|
||||||
LOCAL_INI="$XDG_CONFIG_HOME/gnome-settings/local/temporary_background.ini"
|
|
||||||
STATE_FILE="$XDG_STATE_HOME/current-background.txt"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[ -d "$SOURCE_DIR" ] || {
|
|
||||||
echo "No such folder: $SOURCE_DIR" >&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# One candidate per line, tab-separated: <dark-file> <light-file>
|
|
||||||
candidates=$(
|
|
||||||
for jpg in "$SOURCE_DIR"/*.jpg; do
|
|
||||||
[ -e "$jpg" ] || continue # because the glob does not expand if empty
|
|
||||||
|
|
||||||
case "$jpg" in
|
|
||||||
|
|
||||||
*-d.jpg) # Complete pairs only
|
|
||||||
stem="${jpg%-d.jpg}"
|
|
||||||
[ -f "$stem-l.jpg" ] && printf '%s\t%s\n' "$jpg" "$stem-l.jpg"
|
|
||||||
;;
|
|
||||||
|
|
||||||
*-l.jpg) # Already handled via its "-d" counterpart above
|
|
||||||
;;
|
|
||||||
|
|
||||||
*) # A single file to be used for both modes
|
|
||||||
printf '%s\t%s\n' "$jpg" "$jpg"
|
|
||||||
;;
|
|
||||||
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
)
|
|
||||||
|
|
||||||
if [ -z "$candidates" ]; then
|
|
||||||
echo "No usable *.jpg files in: $SOURCE_DIR" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Found $(printf '%s\n' "$candidates" | wc -l) candidate(s)"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# The glob expands alphabetically => "$candidates" is already sorted
|
|
||||||
# => Pick the first candidate sorting strictly after the last-used one,
|
|
||||||
# falling back to the first one if necessary
|
|
||||||
# (e.g., for start, wrap-around, or missing state file)
|
|
||||||
last_background=$(cat "$STATE_FILE" 2>/dev/null || true)
|
|
||||||
next_background=$(printf '%s\n' "$candidates" | awk -F '\t' -v last_background="$last_background" '$1 > last_background { print; exit }')
|
|
||||||
[ -n "$next_background" ] || next_background=$(printf '%s\n' "$candidates" | head -n 1)
|
|
||||||
|
|
||||||
|
|
||||||
dark_source=$(printf '%s' "$next_background" | cut -f 1)
|
|
||||||
light_source=$(printf '%s' "$next_background" | cut -f 2)
|
|
||||||
echo "Chosen background: $(basename "$dark_source")"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
dark_target="$TARGET_DIR/dark.jpg"
|
|
||||||
light_target="$TARGET_DIR/light.jpg"
|
|
||||||
|
|
||||||
# Create a unique name per run
|
|
||||||
# so that the URIs below never repeat
|
|
||||||
timestamp=$(date +%s)
|
|
||||||
|
|
||||||
dark_live_target="$TARGET_DIR/dark-tmp-$timestamp.jpg"
|
|
||||||
light_live_target="$TARGET_DIR/light-tmp-$timestamp.jpg"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mkdir -p \
|
|
||||||
"$TARGET_DIR" \
|
|
||||||
"$(dirname "$LOCAL_INI")" \
|
|
||||||
"$(dirname "$STATE_FILE")"
|
|
||||||
|
|
||||||
|
|
||||||
# Fixed-name copies, referenced as login-time defaults in the *.ini files
|
|
||||||
cp -- "$dark_source" "$dark_target"
|
|
||||||
cp -- "$light_source" "$light_target"
|
|
||||||
|
|
||||||
|
|
||||||
# Uniquely named copies for the live `gsettings` URIs
|
|
||||||
# to ensure `gnome-shell` uses the correct files right away
|
|
||||||
cp -- "$dark_source" "$dark_live_target"
|
|
||||||
cp -- "$light_source" "$light_live_target"
|
|
||||||
|
|
||||||
|
|
||||||
printf '%s\n' "$dark_source" > "$STATE_FILE"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Background=org.gnome.desktop.background
|
|
||||||
Screensaver=org.gnome.desktop.screensaver
|
|
||||||
|
|
||||||
gsettings set $Background picture-uri-dark "file://$dark_live_target"
|
|
||||||
gsettings set $Background picture-uri "file://$light_live_target"
|
|
||||||
gsettings set $Screensaver picture-uri "file://$dark_live_target"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Persist the unique URIs for `gnome-restore`,
|
|
||||||
# which loads local/*.ini after the base *.ini files
|
|
||||||
cat > "$LOCAL_INI" <<EOF
|
|
||||||
# Written by $(basename "$0") - do not edit
|
|
||||||
|
|
||||||
[org/gnome/desktop/background]
|
|
||||||
|
|
||||||
picture-uri-dark='file://$dark_live_target'
|
|
||||||
picture-uri='file://$light_live_target'
|
|
||||||
|
|
||||||
|
|
||||||
[org/gnome/desktop/screensaver]
|
|
||||||
|
|
||||||
picture-uri='file://$dark_live_target'
|
|
||||||
EOF
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Remove the uniquely named copies of previously chosen wallpapers
|
|
||||||
find "$TARGET_DIR" -name 'dark-tmp-*.jpg' ! -name "dark-tmp-$timestamp.jpg" -delete
|
|
||||||
find "$TARGET_DIR" -name 'light-tmp-*.jpg' ! -name "light-tmp-$timestamp.jpg" -delete
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
echo "Installed as: $TARGET_DIR/{dark,light}.jpg"
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# See ~/.local/bin/ssh
|
|
||||||
|
|
||||||
exec /usr/bin/scp -o SetEnv=LC_ALL=C.UTF-8 "$@"
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Take a screenshot of the whole screen
|
|
||||||
# (i.e., what "<Shift>Print" does)
|
|
||||||
#
|
|
||||||
# The screenshot machinery lives inside `gnome-shell`
|
|
||||||
# and cannot be called directly because
|
|
||||||
# its D-Bus methods are restricted to trusted callers
|
|
||||||
#
|
|
||||||
# => We synthesize the key press instead, after a short delay
|
|
||||||
# so that a launcher's keyboard grab (e.g., `rofi`) is released
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
[ "${XDG_SESSION_TYPE:-}" = "x11" ] || {
|
|
||||||
echo "X11 only (xdotool)" >&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Optional countdown in seconds (e.g., `screenshot-screen 3`),
|
|
||||||
# defaulting to 0.2
|
|
||||||
countdown="${1:-0.2}"
|
|
||||||
|
|
||||||
case "$countdown" in
|
|
||||||
''|.|*[!0-9.]*|*.*.*)
|
|
||||||
echo "Not a number: $countdown" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
sleep "$countdown"
|
|
||||||
|
|
||||||
|
|
||||||
xdotool key shift+Print
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Open GNOME's screenshot UI
|
|
||||||
# (i.e., what a simple "Print" does)
|
|
||||||
#
|
|
||||||
# The screenshot machinery lives inside `gnome-shell`
|
|
||||||
# and cannot be called directly because
|
|
||||||
# its D-Bus methods are restricted to trusted callers
|
|
||||||
#
|
|
||||||
# => We synthesize the key press instead, after a short delay
|
|
||||||
# so that a launcher's keyboard grab (e.g., `rofi`) is released
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
[ "${XDG_SESSION_TYPE:-}" = "x11" ] || {
|
|
||||||
echo "X11 only (xdotool)" >&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sleep 0.2
|
|
||||||
|
|
||||||
|
|
||||||
xdotool key Print
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Take a screenshot of the focused window
|
|
||||||
# (i.e., what "<Alt>Print" does)
|
|
||||||
#
|
|
||||||
# The screenshot machinery lives inside `gnome-shell`
|
|
||||||
# and cannot be called directly because
|
|
||||||
# its D-Bus methods are restricted to trusted callers
|
|
||||||
#
|
|
||||||
# => We synthesize the key press instead, after a short delay
|
|
||||||
# so that a launcher's keyboard grab (e.g., `rofi`) is released
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
[ "${XDG_SESSION_TYPE:-}" = "x11" ] || {
|
|
||||||
echo "X11 only (xdotool)" >&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Optional countdown in seconds (e.g., `screenshot-window 3`),
|
|
||||||
# defaulting to 0.2
|
|
||||||
countdown="${1:-0.2}"
|
|
||||||
|
|
||||||
case "$countdown" in
|
|
||||||
''|.|*[!0-9.]*|*.*.*)
|
|
||||||
echo "Not a number: $countdown" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
sleep "$countdown"
|
|
||||||
|
|
||||||
|
|
||||||
xdotool key alt+Print
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
# Loaded from ~/.config/environment.d/50-defaults.conf or a local override
|
|
||||||
BRIGHTNESS="${DEFAULT_BRIGHTNESS:?unset, check ~/.config/environment.d/}"
|
|
||||||
|
|
||||||
|
|
||||||
gdbus wait --session --timeout 10 org.gnome.SettingsDaemon.Power
|
|
||||||
|
|
||||||
gdbus call --session \
|
|
||||||
--dest org.gnome.SettingsDaemon.Power \
|
|
||||||
--object-path /org/gnome/SettingsDaemon/Power \
|
|
||||||
--method org.freedesktop.DBus.Properties.Set \
|
|
||||||
org.gnome.SettingsDaemon.Power.Screen Brightness "<int32 $BRIGHTNESS>" \
|
|
||||||
>/dev/null
|
|
||||||
|
|
||||||
|
|
||||||
echo "Set screen brightness to $BRIGHTNESS"
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
# Loaded from ~/.config/environment.d/50-defaults.conf or a local override
|
|
||||||
BRIGHTNESS="${DEFAULT_KEYBOARD_BRIGHTNESS:?unset, check ~/.config/environment.d/}"
|
|
||||||
|
|
||||||
|
|
||||||
# Nothing to do on machines without a keyboard backlight
|
|
||||||
KBD_DEVICE=
|
|
||||||
for led in /sys/class/leds/*kbd_backlight*; do
|
|
||||||
[ -e "$led" ] || break
|
|
||||||
KBD_DEVICE=$led
|
|
||||||
break
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -z "$KBD_DEVICE" ]; then
|
|
||||||
echo "No keyboard backlight, skipping"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
kbd_set() {
|
|
||||||
gdbus call --session \
|
|
||||||
--dest org.gnome.SettingsDaemon.Power \
|
|
||||||
--object-path /org/gnome/SettingsDaemon/Power \
|
|
||||||
--method org.freedesktop.DBus.Properties.Set \
|
|
||||||
org.gnome.SettingsDaemon.Power.Keyboard Brightness "<int32 $BRIGHTNESS>" \
|
|
||||||
>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
gdbus wait --session --timeout 10 org.gnome.SettingsDaemon.Power
|
|
||||||
|
|
||||||
|
|
||||||
# `gsd-power` owns its bus name before it has probed the keyboard
|
|
||||||
# backlight, so at login the first write may silently be discarded
|
|
||||||
kbd_set
|
|
||||||
|
|
||||||
if [ "$(cat "$KBD_DEVICE/brightness")" = "0" ]; then
|
|
||||||
sleep 3
|
|
||||||
kbd_set
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
echo "Set keyboard brightness to $BRIGHTNESS"
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
# Loaded from ~/.config/environment.d/50-defaults.conf or a local override
|
|
||||||
VOLUME="${DEFAULT_VOLUME:?unset, check ~/.config/environment.d/}"
|
|
||||||
|
|
||||||
|
|
||||||
i=0
|
|
||||||
while ! wpctl status >/dev/null 2>&1; do
|
|
||||||
i=$((i + 1))
|
|
||||||
if [ "$i" -ge 20 ]; then
|
|
||||||
echo "no PipeWire sink after 10s" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
sleep 0.5
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
wpctl set-volume @DEFAULT_AUDIO_SINK@ "$VOLUME%"
|
|
||||||
wpctl set-mute @DEFAULT_AUDIO_SINK@ 0
|
|
||||||
|
|
||||||
|
|
||||||
echo "Set volume to $VOLUME%"
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# See ~/.local/bin/ssh
|
|
||||||
|
|
||||||
exec /usr/bin/sftp -o SetEnv=LC_ALL=C.UTF-8 "$@"
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Mask the exotic `LC_*` values from ~/.config/shell/locale on remote hosts
|
|
||||||
#
|
|
||||||
# Debian's /etc/ssh/ssh_config forwards them via `SendEnv LANG LC_*`,
|
|
||||||
# which cannot be cleared from ~/.ssh/config
|
|
||||||
# => Send `LC_ALL` on top, which overrides all `LC_*` and `LANG` remotely
|
|
||||||
#
|
|
||||||
# `C.UTF-8` is built into `glibc` and thus available on every host
|
|
||||||
#
|
|
||||||
# Found via the `$PATH` by `git`, `rsync`, `sshfs`, scripts, and GUI apps;
|
|
||||||
# `scp` and `sftp` call /usr/bin/ssh directly and have their own wrappers
|
|
||||||
|
|
||||||
exec /usr/bin/ssh -o SetEnv=LC_ALL=C.UTF-8 "$@"
|
|
||||||
|
|
@ -1,101 +0,0 @@
|
||||||
#!/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
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Toggle the WiFi on or off
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
_notify() {
|
|
||||||
command -v notify-send >/dev/null 2>&1 || return 0
|
|
||||||
notify-send 'WiFi' "$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
case "$(nmcli -t radio wifi)" in
|
|
||||||
enabled)
|
|
||||||
nmcli radio wifi off
|
|
||||||
_notify 'Radio turned off'
|
|
||||||
;;
|
|
||||||
disabled)
|
|
||||||
nmcli radio wifi on
|
|
||||||
_notify 'Radio turned on'
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
_notify 'No radio available'
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Jump to the first empty workspace
|
|
||||||
#
|
|
||||||
# Triggered by <Super>n
|
|
||||||
# as defined in [org/gnome/settings-daemon/plugins/media-keys]
|
|
||||||
# in ~/.config/gnome-settings/key-bindings.ini
|
|
||||||
#
|
|
||||||
# Note: This assumes that only the main monitor has workspaces enabled
|
|
||||||
# (see ~/.local/bin/move-window-to-empty-workspace)
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
|
|
||||||
occupied=$(wmctrl -l) || exit 1 # fail safe
|
|
||||||
occupied=$(echo "$occupied" | awk '{print $2}' | sort -u)
|
|
||||||
|
|
||||||
total=$(wmctrl -d | wc -l)
|
|
||||||
|
|
||||||
|
|
||||||
# 0-based index for the first workspace
|
|
||||||
i=0
|
|
||||||
|
|
||||||
while [ "$i" -lt "$total" ]; do
|
|
||||||
|
|
||||||
if ! echo "$occupied" | grep -qx "$i"; then
|
|
||||||
exec wmctrl -s "$i"
|
|
||||||
fi
|
|
||||||
|
|
||||||
i=$((i + 1))
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
command -v notify-send >/dev/null \
|
|
||||||
&& notify-send 'Workspaces' 'No empty workspace available'
|
|
||||||
|
|
||||||
exit 1
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
# Desktop Entries
|
|
||||||
|
|
||||||
This folder contains `*.desktop` launchers
|
|
||||||
for some scripts in [`~/.local/bin`](../../bin).
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
[Desktop Entry]
|
|
||||||
Type=Application
|
|
||||||
Name=Capture the whole screen
|
|
||||||
Exec=screenshot-screen
|
|
||||||
Icon=applets-screenshooter
|
|
||||||
Terminal=false
|
|
||||||
Categories=Utility;
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
[Desktop Entry]
|
|
||||||
Type=Application
|
|
||||||
Name=Open GNOME's screenshot UI
|
|
||||||
Exec=screenshot-ui
|
|
||||||
Icon=applets-screenshooter
|
|
||||||
Terminal=false
|
|
||||||
Categories=Utility;
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
[Desktop Entry]
|
|
||||||
Type=Application
|
|
||||||
Name=Capture the focused window
|
|
||||||
Exec=screenshot-window
|
|
||||||
Icon=applets-screenshooter
|
|
||||||
Terminal=false
|
|
||||||
Categories=Utility;
|
|
||||||
9
.zshrc
9
.zshrc
|
|
@ -75,15 +75,6 @@ compdef '_arguments "--force[skip safety checks / reinstall]"' dotfiles-install
|
||||||
# Complete the `--quieter` flag of the `generate-shell-completions` utility in ~/.local/bin
|
# Complete the `--quieter` flag of the `generate-shell-completions` utility in ~/.local/bin
|
||||||
compdef '_arguments "--quieter[suppress the reload hint]"' generate-shell-completions
|
compdef '_arguments "--quieter[suppress the reload hint]"' generate-shell-completions
|
||||||
|
|
||||||
# Complete the flags of the `color-palette` in ~/.local/bin
|
|
||||||
# => Keep the (short) descriptions in sync
|
|
||||||
# with the `argparse` section in ~/.local/bin/color-palette
|
|
||||||
compdef '_arguments \
|
|
||||||
"--scheme[Override the live GNOME color-scheme]:scheme:(dark light)" \
|
|
||||||
"--show[Show the derived colors as swatches]" \
|
|
||||||
"--write[Write the palette into all consumer files]"' \
|
|
||||||
color-palette
|
|
||||||
|
|
||||||
# Enable match highlighting and scrolling through long lists,
|
# Enable match highlighting and scrolling through long lists,
|
||||||
# and provide a different style of menu completion
|
# and provide a different style of menu completion
|
||||||
zmodload zsh/complist
|
zmodload zsh/complist
|
||||||
|
|
|
||||||
26
README.md
26
README.md
|
|
@ -26,7 +26,7 @@ If I told you to go here and copy/paste my public `ssh` keys
|
||||||
either [here](.ssh/authorized_keys_webartifex)
|
either [here](.ssh/authorized_keys_webartifex)
|
||||||
or [here](https://code.webartifex.de/alexander.keys).
|
or [here](https://code.webartifex.de/alexander.keys).
|
||||||
|
|
||||||
Read [this](https://code.webartifex.de/alexander/dotfiles/src/branch/desktop/.ssh#how-the-keys-are-managed)
|
Read [this](https://code.webartifex.de/alexander/dotfiles/src/branch/main/.ssh#how-the-keys-are-managed)
|
||||||
for how the keys are managed.
|
for how the keys are managed.
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -35,28 +35,18 @@ Read [this](https://code.webartifex.de/alexander/dotfiles/src/branch/desktop/.ss
|
||||||
Simply run:
|
Simply run:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
curl https://code.webartifex.de/alexander/dotfiles/raw/branch/desktop/.local/bin/dotfiles-install > dotfiles-install && sh ./dotfiles-install && rm ./dotfiles-install
|
curl https://code.webartifex.de/alexander/dotfiles/raw/branch/main/.local/bin/dotfiles-install > dotfiles-install && sh ./dotfiles-install && rm ./dotfiles-install
|
||||||
```
|
```
|
||||||
|
|
||||||
or
|
or
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
wget https://code.webartifex.de/alexander/dotfiles/raw/branch/desktop/.local/bin/dotfiles-install -O dotfiles-install && sh ./dotfiles-install && rm ./dotfiles-install
|
wget https://code.webartifex.de/alexander/dotfiles/raw/branch/main/.local/bin/dotfiles-install -O dotfiles-install && sh ./dotfiles-install && rm ./dotfiles-install
|
||||||
```
|
```
|
||||||
|
|
||||||
This downloads a simple [installation script](.local/bin/dotfiles-install)
|
This downloads a simple [installation script](.local/bin/dotfiles-install)
|
||||||
and then executes it.
|
and then executes it.
|
||||||
Besides [git](https://git-scm.com/), the script assumes
|
The script's only dependency is [`git`](https://git-scm.com/).
|
||||||
a [Debian](https://www.debian.org/) 13 desktop
|
|
||||||
with [GNOME](https://www.gnome.org/) 48+
|
|
||||||
on [X11](https://www.x.org/),
|
|
||||||
though older GNOME versions
|
|
||||||
and [Wayland](https://wayland.freedesktop.org/) should mostly work,
|
|
||||||
except for some X11-only stuff.
|
|
||||||
Further, it uses
|
|
||||||
[`python3`](https://www.python.org/) with `pip`
|
|
||||||
to generate the [color palette](.local/bin/color-palette)
|
|
||||||
and enables a few `systemd` user units.
|
|
||||||
So, it should not be too hard to get this going.
|
So, it should not be too hard to get this going.
|
||||||
|
|
||||||
The repository is cloned as a bare repository into `~/.local/share/dotfiles`
|
The repository is cloned as a bare repository into `~/.local/share/dotfiles`
|
||||||
|
|
@ -66,12 +56,12 @@ Afterwards, the files can be managed with the
|
||||||
[`dotfiles` alias](.config/shell/aliases),
|
[`dotfiles` alias](.config/shell/aliases),
|
||||||
for example, `dotfiles status` or `dotfiles pull`.
|
for example, `dotfiles status` or `dotfiles pull`.
|
||||||
|
|
||||||
The above commands install the *desktop* variant.
|
The above commands install the *main* variant.
|
||||||
To install the *main* variant,
|
To install the *desktop* variant,
|
||||||
switch to the [main](https://code.webartifex.de/alexander/dotfiles/src/branch/main) branch first.
|
switch to the [desktop](https://code.webartifex.de/alexander/dotfiles/src/branch/desktop) branch first.
|
||||||
|
|
||||||
Normally, I advise against executing shell scripts from the internet,
|
Normally, I advise against executing shell scripts from the internet,
|
||||||
but this one is still short enough to be read in a few minutes.
|
but this one is short enough to be read even by beginners.
|
||||||
So, convince yourself that it is not harmful!
|
So, convince yourself that it is not harmful!
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue