Add configuration for GNOME
This commit is contained in:
parent
46b9bacd18
commit
7804080953
47 changed files with 6899 additions and 0 deletions
|
|
@ -11,6 +11,40 @@ 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>`)
|
||||||
#
|
#
|
||||||
|
|
|
||||||
8
.config/Nextcloud/README.md
Normal file
8
.config/Nextcloud/README.md
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
# 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).
|
||||||
50
.config/Nextcloud/sync-exclude.lst
Normal file
50
.config/Nextcloud/sync-exclude.lst
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
# 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-*
|
||||||
7
.config/forge/README.md
Normal file
7
.config/forge/README.md
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# 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).
|
||||||
136
.config/forge/config/windows.json
Normal file
136
.config/forge/config/windows.json
Normal file
|
|
@ -0,0 +1,136 @@
|
||||||
|
{
|
||||||
|
"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,6 +350,20 @@ 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
|
||||||
|
|
|
||||||
60
.config/gnome-settings/README.md
Normal file
60
.config/gnome-settings/README.md
Normal file
|
|
@ -0,0 +1,60 @@
|
||||||
|
# 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`
|
||||||
|
7. Apply a small [patch](../../.local/bin/gnome-shell-extension-forge-patch)
|
||||||
|
to the `forge` extension to draw borders on unfocused windows
|
||||||
|
|
||||||
|
[`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).
|
||||||
463
.config/gnome-settings/apps.ini
Normal file
463
.config/gnome-settings/apps.ini
Normal file
|
|
@ -0,0 +1,463 @@
|
||||||
|
# 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'
|
||||||
835
.config/gnome-settings/key-bindings.ini
Normal file
835
.config/gnome-settings/key-bindings.ini
Normal file
|
|
@ -0,0 +1,835 @@
|
||||||
|
# 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 | | | |
|
||||||
|
# e | Split toggle | | Show battery load | |
|
||||||
|
# s | Stacked layout | | | |
|
||||||
|
# w | Tabbed layout | | Toggle WiFi | Toggle airplane mode |
|
||||||
|
# ------------------+------------------------+------------------------+------------------------+------------------------+------------------------
|
||||||
|
# grave ~ ` | Toggle last two WS | | 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 []
|
||||||
|
|
||||||
|
# The following could also be populated automatically
|
||||||
|
# in [org/gnome/shell/extensions/space-bar/shortcuts]
|
||||||
|
# but we use the more deterministic configuration here
|
||||||
|
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"
|
||||||
|
|
||||||
|
# The following could also be populated automatically
|
||||||
|
# in [org/gnome/shell/extensions/space-bar/shortcuts]
|
||||||
|
# but we use the more deterministic configuration here
|
||||||
|
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/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/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/shell/extensions/nightthemeswitcher/time]
|
||||||
|
# This extension is not in use any more and its config kept as archive
|
||||||
|
|
||||||
|
# nightthemeswitcher-ondemand-keybinding=['<Super><Alt>d']
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [org/gnome/shell/extensions/project-hamster]
|
||||||
|
# This extension is not in use any more and its config kept as archive
|
||||||
|
|
||||||
|
# show-hamster-dropdown=['<Super><Control>t']
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[org/gnome/shell/extensions/space-bar/shortcuts]
|
||||||
|
|
||||||
|
# We use the `switch-to-workspace-N`s in [org/gnome/desktop/wm/keybindings]
|
||||||
|
enable-activate-workspace-shortcuts=false
|
||||||
|
|
||||||
|
# We use the `move-to-workspace-N`s in [org/gnome/desktop/wm/keybindings]
|
||||||
|
enable-move-to-workspace-shortcuts=false
|
||||||
|
|
||||||
|
# Jump back to the previous workspace,
|
||||||
|
# also allowing toggling between two workspaces
|
||||||
|
# (Note that "grave" is the formal word for "backtick")
|
||||||
|
activate-previous-key=['<Super>grave']
|
||||||
|
|
||||||
|
# Jump to the first empty workspace
|
||||||
|
activate-empty-key=['<Super>n']
|
||||||
|
|
||||||
|
# Use the mouse to move to the previous workspace
|
||||||
|
# by clicking on the current one (again)
|
||||||
|
back-and-forth=false
|
||||||
|
|
||||||
|
move-workspace-left=@as []
|
||||||
|
move-workspace-right=@as []
|
||||||
|
|
||||||
|
# Preferences window
|
||||||
|
open-menu=@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 []
|
||||||
62
.config/gnome-settings/local/README.md
Normal file
62
.config/gnome-settings/local/README.md
Normal file
|
|
@ -0,0 +1,62 @@
|
||||||
|
# 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
|
||||||
|
```
|
||||||
530
.config/gnome-settings/misc.ini
Normal file
530
.config/gnome-settings/misc.ini
Normal file
|
|
@ -0,0 +1,530 @@
|
||||||
|
# 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'
|
||||||
1235
.config/gnome-settings/notifications.ini
Normal file
1235
.config/gnome-settings/notifications.ini
Normal file
File diff suppressed because it is too large
Load diff
56
.config/gnome-settings/shell-base.ini
Normal file
56
.config/gnome-settings/shell-base.ini
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
# 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)])>)>]
|
||||||
609
.config/gnome-settings/shell-extensions.ini
Normal file
609
.config/gnome-settings/shell-extensions.ini
Normal file
|
|
@ -0,0 +1,609 @@
|
||||||
|
# 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', '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', 'rounded-window-corners@fxgn', 'space-bar@luchrioh']
|
||||||
|
|
||||||
|
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/auto-move-windows]
|
||||||
|
# This extension is not in use any more and its config kept as archive
|
||||||
|
|
||||||
|
# Open these apps on fixed workspaces
|
||||||
|
# where the format is "<app>.desktop:<ws_no>"
|
||||||
|
# application-list=['org.gnome.Evolution.desktop:10']
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [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/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/nightthemeswitcher]
|
||||||
|
# This extension is not in use any more and its config kept as archive
|
||||||
|
|
||||||
|
|
||||||
|
# [org/gnome/shell/extensions/nightthemeswitcher/time]
|
||||||
|
|
||||||
|
# manual-schedule=true
|
||||||
|
|
||||||
|
# sunrise=6.0
|
||||||
|
# sunset=18.0
|
||||||
|
|
||||||
|
|
||||||
|
# [org/gnome/shell/extensions/nightthemeswitcher/cursor-variants]
|
||||||
|
|
||||||
|
# enabled=false
|
||||||
|
|
||||||
|
|
||||||
|
# [org/gnome/shell/extensions/nightthemeswitcher/gtk-variants]
|
||||||
|
|
||||||
|
# enabled=false
|
||||||
|
|
||||||
|
|
||||||
|
# [org/gnome/shell/extensions/nightthemeswitcher/icon-variants]
|
||||||
|
|
||||||
|
# enabled=false
|
||||||
|
|
||||||
|
|
||||||
|
# [org/gnome/shell/extensions/nightthemeswitcher/shell-variants]
|
||||||
|
|
||||||
|
# enabled=false
|
||||||
|
|
||||||
|
|
||||||
|
# See ~/.config/gnome-settings/key-bindings.ini for the key bindings
|
||||||
|
# nightthemeswitcher-ondemand-keybinding=['<Super><Alt>d']
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[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/openbar]
|
||||||
|
# This extension is not in use any more and its config kept as archive
|
||||||
|
|
||||||
|
# Top Bar Properties
|
||||||
|
# bartype='Floating'
|
||||||
|
# position='Top'
|
||||||
|
# set-notif-position=true
|
||||||
|
# height=32.0
|
||||||
|
# set-overview=true
|
||||||
|
# set-fullscreen=true
|
||||||
|
# fitts-widgets=true
|
||||||
|
# margin=3.0
|
||||||
|
# set-bottom-margin=true
|
||||||
|
# bottom-margin=0.0
|
||||||
|
|
||||||
|
# Top bar properties when a window is maximized
|
||||||
|
# => We want the same unified bar at all times
|
||||||
|
# wmaxbar=false
|
||||||
|
|
||||||
|
# Disable "Auto Theming" because we manage colors manually
|
||||||
|
# accent-override=false
|
||||||
|
# auto-bgalpha=false
|
||||||
|
# autohg-bar=false
|
||||||
|
# autofg-bar=false
|
||||||
|
# autofg-menu=false
|
||||||
|
# autotheme-font=false
|
||||||
|
# autotheme-refresh=false
|
||||||
|
# smbgoverride=false
|
||||||
|
|
||||||
|
# `openbar` keeps per-mode shadow profiles (i.e., "dark-*"/"light-*" below)
|
||||||
|
# and copies them over the live keys on every dark/light toggle
|
||||||
|
# => The "Live" keys below must always match the "dark-*" profile
|
||||||
|
# because we run dark mode by default
|
||||||
|
|
||||||
|
# "Live" Bar
|
||||||
|
# bguri='file:///home/user/.local/share/backgrounds/dark.jpg'
|
||||||
|
# bgcolor=['0.180', '0.180', '0.196']
|
||||||
|
# bgcolor-wmax=['0.180', '0.180', '0.196']
|
||||||
|
# bgcolor2=['0.020', '0.290', '0.333']
|
||||||
|
# fgcolor=['0.871', '0.929', '0.945']
|
||||||
|
# bcolor=['0.588', '0.816', '0.867']
|
||||||
|
# hcolor=['0.024', '0.478', '0.553']
|
||||||
|
# iscolor=['0.180', '0.180', '0.196']
|
||||||
|
# boxcolor=['0.180', '0.180', '0.196']
|
||||||
|
# shcolor=['0', '0', '0']
|
||||||
|
# balpha=1.0
|
||||||
|
# bwidth=2.0
|
||||||
|
# bradius=12.0
|
||||||
|
# neon=false
|
||||||
|
# default-font='FiraCode Nerd Font 12'
|
||||||
|
|
||||||
|
# "Live" Menus
|
||||||
|
# mbgcolor=['0.180', '0.180', '0.196']
|
||||||
|
# smbgcolor=['0.020', '0.290', '0.333']
|
||||||
|
# mfgcolor=['0.871', '0.929', '0.945']
|
||||||
|
# mbcolor=['0.290', '0.643', '0.714']
|
||||||
|
# mhcolor=['0.024', '0.478', '0.553']
|
||||||
|
# mscolor=['0.129', '0.565', '0.643']
|
||||||
|
# mshcolor=['0', '0', '0']
|
||||||
|
|
||||||
|
# "Live" Accents
|
||||||
|
# accent-color=['0.129', '0.565', '0.643']
|
||||||
|
# hscd-color=['0.129', '0.565', '0.643']
|
||||||
|
# vw-color=['0.129', '0.565', '0.643']
|
||||||
|
# winbcolor=['0.290', '0.643', '0.714']
|
||||||
|
|
||||||
|
# Dark profile
|
||||||
|
# => Keep identical to the "Live" keys above
|
||||||
|
# dark-bguri='file:///home/user/.local/share/backgrounds/dark.jpg'
|
||||||
|
# dark-bgcolor=['0.180', '0.180', '0.196']
|
||||||
|
# dark-bgcolor-wmax=['0.180', '0.180', '0.196']
|
||||||
|
# dark-bgcolor2=['0.020', '0.290', '0.333']
|
||||||
|
# dark-fgcolor=['0.871', '0.929', '0.945']
|
||||||
|
# dark-bcolor=['0.588', '0.816', '0.867']
|
||||||
|
# dark-hcolor=['0.024', '0.478', '0.553']
|
||||||
|
# dark-iscolor=['0.180', '0.180', '0.196']
|
||||||
|
# dark-boxcolor=['0.180', '0.180', '0.196']
|
||||||
|
# dark-shcolor=['0', '0', '0']
|
||||||
|
# dark-mbgcolor=['0.180', '0.180', '0.196']
|
||||||
|
# dark-smbgcolor=['0.020', '0.290', '0.333']
|
||||||
|
# dark-mfgcolor=['0.871', '0.929', '0.945']
|
||||||
|
# dark-mbcolor=['0.290', '0.643', '0.714']
|
||||||
|
# dark-mhcolor=['0.024', '0.478', '0.553']
|
||||||
|
# dark-mscolor=['0.129', '0.565', '0.643']
|
||||||
|
# dark-mshcolor=['0', '0', '0']
|
||||||
|
# dark-accent-color=['0.129', '0.565', '0.643']
|
||||||
|
# dark-hscd-color=['0.129', '0.565', '0.643']
|
||||||
|
# dark-vw-color=['0.129', '0.565', '0.643']
|
||||||
|
# dark-winbcolor=['0.290', '0.643', '0.714']
|
||||||
|
|
||||||
|
# Light profile
|
||||||
|
# light-bguri='file:///home/user/.local/share/backgrounds/light.jpg'
|
||||||
|
# light-bgcolor=['0.180', '0.180', '0.196']
|
||||||
|
# light-bgcolor-wmax=['0.180', '0.180', '0.196']
|
||||||
|
# light-bgcolor2=['0.020', '0.290', '0.333']
|
||||||
|
# light-fgcolor=['0.871', '0.929', '0.945']
|
||||||
|
# light-bcolor=['0.588', '0.816', '0.867']
|
||||||
|
# light-hcolor=['0.024', '0.478', '0.553']
|
||||||
|
# light-iscolor=['0.180', '0.180', '0.196']
|
||||||
|
# light-boxcolor=['0.180', '0.180', '0.196']
|
||||||
|
# light-shcolor=['0', '0', '0']
|
||||||
|
# light-mbgcolor=['0.180', '0.180', '0.196']
|
||||||
|
# light-smbgcolor=['0.020', '0.290', '0.333']
|
||||||
|
# light-mfgcolor=['0.871', '0.929', '0.945']
|
||||||
|
# light-mbcolor=['0.290', '0.643', '0.714']
|
||||||
|
# light-mhcolor=['0.024', '0.478', '0.553']
|
||||||
|
# light-mscolor=['0.129', '0.565', '0.643']
|
||||||
|
# light-mshcolor=['0', '0', '0']
|
||||||
|
# light-accent-color=['0.129', '0.565', '0.643']
|
||||||
|
# light-hscd-color=['0.129', '0.565', '0.643']
|
||||||
|
# light-vw-color=['0.129', '0.565', '0.643']
|
||||||
|
# light-winbcolor=['0.290', '0.643', '0.714']
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[org/gnome/shell/extensions/panel-date-format]
|
||||||
|
|
||||||
|
format='%A %B %-d, %Y %H:%M:%S %Z%z'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [org/gnome/shell/extensions/project-hamster]
|
||||||
|
# This extension is not in use any more and its config kept as archive
|
||||||
|
|
||||||
|
# How Hamster is shown in the top bar:
|
||||||
|
# - 0 => label
|
||||||
|
# - 1 => icon
|
||||||
|
# - 2 => label and icon
|
||||||
|
#
|
||||||
|
# Note that the icon does not adapt to a light panel
|
||||||
|
# panel-appearance=0
|
||||||
|
|
||||||
|
# Position among the panel's items,
|
||||||
|
# where `3` means "center, next to calendar",
|
||||||
|
# which is the only option not replacing another GUI element
|
||||||
|
# panel-placement=3
|
||||||
|
|
||||||
|
|
||||||
|
# See ~/.config/gnome-settings/key-bindings.ini for the key bindings
|
||||||
|
# show-hamster-dropdown=['<Super><Control>t']
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[org/gnome/shell/extensions/rounded-window-corners-reborn]
|
||||||
|
|
||||||
|
# Rounds all window corners uniformly (e.g., needed for `alacritty`)
|
||||||
|
#
|
||||||
|
# The rings drawn by forge sit 1px outside the frame and therefore use
|
||||||
|
# a "border-radius" of 13px (12px + 1px inset) in
|
||||||
|
# ~/.config/forge/stylesheet/forge/stylesheet.css so their curves
|
||||||
|
# stay concentric with the 12px window corners
|
||||||
|
#
|
||||||
|
# "padding" stays 0 because the unfocused borders drawn by
|
||||||
|
# ~/.local/bin/gnome-shell-extension-forge-patch sit 1px outside
|
||||||
|
# the window frame (its "inset" of 1) and never cover the contents
|
||||||
|
#
|
||||||
|
custom-rounded-corner-settings=@a{sv} {}
|
||||||
|
global-rounded-corner-settings={'padding': <{'left': uint32 0, 'right': 0, 'top': 0, 'bottom': 0}>, 'keepRoundedCorners': <{'maximized': true, 'fullscreen': true}>, 'borderRadius': <uint32 12>, 'smoothing': <0.0>, 'borderColor': <(0.6, 0.149, 0.0, 1.0)>, 'enabled': <true>}
|
||||||
|
|
||||||
|
focused-shadow={'horizontalOffset': 0, 'verticalOffset': 4, 'blurOffset': 28, 'spreadRadius': 3, 'opacity': 60}
|
||||||
|
unfocused-shadow={'horizontalOffset': 0, 'verticalOffset': 2, 'blurOffset': 12, 'spreadRadius': -1, 'opacity': 65}
|
||||||
|
|
||||||
|
# `forge` draws the borders
|
||||||
|
# => This extension must not
|
||||||
|
border-width=0
|
||||||
|
|
||||||
|
# Round GTK3/legacy apps,
|
||||||
|
# but not libadwaita's ones that are already rounded
|
||||||
|
skip-libadwaita-app=true
|
||||||
|
skip-libhandy-app=false
|
||||||
|
|
||||||
|
blacklist=@as []
|
||||||
|
|
||||||
|
enable-preferences-entry=false
|
||||||
|
|
||||||
|
tweak-kitty-terminal=false
|
||||||
|
|
||||||
|
debug-mode=false
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[org/gnome/shell/extensions/space-bar]
|
||||||
|
|
||||||
|
|
||||||
|
[org/gnome/shell/extensions/space-bar/appearance]
|
||||||
|
|
||||||
|
# The colors below are the "orange"/light defaults from
|
||||||
|
# ~/.config/gnome-settings/COLORS.md and are overridden at load time
|
||||||
|
# by local/palette.ini, written by ~/.local/bin/color-palette
|
||||||
|
|
||||||
|
custom-styles-enabled=false
|
||||||
|
|
||||||
|
workspace-margin=2
|
||||||
|
workspaces-bar-padding=0
|
||||||
|
|
||||||
|
active-workspace-font-size=10
|
||||||
|
active-workspace-font-weight='700'
|
||||||
|
active-workspace-text-color='rgb(42,11,1)'
|
||||||
|
active-workspace-background-color='rgb(237,91,0)'
|
||||||
|
active-workspace-border-color='rgb(153,38,0)'
|
||||||
|
active-workspace-border-radius=8
|
||||||
|
active-workspace-border-width=0
|
||||||
|
active-workspace-padding-h=8
|
||||||
|
active-workspace-padding-v=2
|
||||||
|
|
||||||
|
inactive-workspace-font-size=10
|
||||||
|
inactive-workspace-font-weight='600'
|
||||||
|
inactive-workspace-text-color='rgb(99,18,0)'
|
||||||
|
inactive-workspace-background-color='rgb(235,235,237)'
|
||||||
|
inactive-workspace-border-color='rgb(235,235,237)'
|
||||||
|
inactive-workspace-border-radius=8
|
||||||
|
inactive-workspace-border-width=0
|
||||||
|
inactive-workspace-padding-h=8
|
||||||
|
inactive-workspace-padding-v=2
|
||||||
|
|
||||||
|
empty-workspace-font-size=10
|
||||||
|
empty-workspace-font-weight='600'
|
||||||
|
empty-workspace-text-color='rgb(252,108,39)'
|
||||||
|
empty-workspace-background-color='rgb(235,235,237)'
|
||||||
|
empty-workspace-border-color='rgb(235,235,237)'
|
||||||
|
empty-workspace-border-radius=8
|
||||||
|
empty-workspace-border-width=0
|
||||||
|
empty-workspace-padding-h=8
|
||||||
|
empty-workspace-padding-v=2
|
||||||
|
|
||||||
|
|
||||||
|
[org/gnome/shell/extensions/space-bar/behavior]
|
||||||
|
|
||||||
|
system-workspace-indicator=false
|
||||||
|
|
||||||
|
position='left'
|
||||||
|
position-index=0
|
||||||
|
|
||||||
|
indicator-style='workspaces-bar'
|
||||||
|
|
||||||
|
always-show-numbers=false
|
||||||
|
show-empty-workspaces=false
|
||||||
|
smart-workspace-names=false
|
||||||
|
|
||||||
|
enable-custom-label=true
|
||||||
|
enable-custom-label-in-menu=true
|
||||||
|
custom-label-named='{{name}}'
|
||||||
|
custom-label-unnamed='{{number}}'
|
||||||
|
|
||||||
|
scroll-wheel='disabled'
|
||||||
|
|
||||||
|
toggle-overview=false
|
||||||
|
|
||||||
|
|
||||||
|
# [org/gnome/shell/extensions/space-bar/shortcuts]
|
||||||
|
# See ~/.config/gnome-settings/key-bindings.ini for the key bindings
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [org/gnome/shell/extensions/system-monitor]
|
||||||
|
# This extension is not in use any more and its config kept as archive
|
||||||
|
|
||||||
|
# center-display=false
|
||||||
|
# compact-display=false
|
||||||
|
# icon-display=false
|
||||||
|
# move-clock=false
|
||||||
|
# show-tooltip=false
|
||||||
|
|
||||||
|
# battery-display=false
|
||||||
|
# battery-hidesystem=false
|
||||||
|
# battery-show-menu=false
|
||||||
|
# battery-show-text=false
|
||||||
|
# battery-time=false
|
||||||
|
|
||||||
|
# cpu-display=true
|
||||||
|
# cpu-show-menu=false
|
||||||
|
# cpu-show-text=true
|
||||||
|
# cpu-style='digit'
|
||||||
|
# cpu-individual-cores=false
|
||||||
|
|
||||||
|
# disk-display=false
|
||||||
|
# disk-show-menu=false
|
||||||
|
# disk-show-text=false
|
||||||
|
# disk-style='digit'
|
||||||
|
# disk-usage-style='none'
|
||||||
|
|
||||||
|
# fan-display=false
|
||||||
|
# fan-show-menu=false
|
||||||
|
# fan-show-text=false
|
||||||
|
# fan-style='digit'
|
||||||
|
|
||||||
|
# freq-display=false
|
||||||
|
# freq-show-menu=false
|
||||||
|
# freq-show-text=false
|
||||||
|
# freq-style='digit'
|
||||||
|
|
||||||
|
# gpu-display=false
|
||||||
|
# gpu-show-menu=false
|
||||||
|
# gpu-show-text=false
|
||||||
|
# gpu-style='digit'
|
||||||
|
|
||||||
|
# memory-display=true
|
||||||
|
# memory-show-menu=false
|
||||||
|
# memory-show-text=true
|
||||||
|
# memory-style='digit'
|
||||||
|
|
||||||
|
# net-display=false
|
||||||
|
# net-show-menu=false
|
||||||
|
# net-show-text=false
|
||||||
|
# net-style='digit'
|
||||||
|
|
||||||
|
# swap-display=false
|
||||||
|
# swap-show-menu=false
|
||||||
|
# swap-show-text=false
|
||||||
|
# swap-style='digit'
|
||||||
|
|
||||||
|
# thermal-display=false
|
||||||
|
# thermal-show-menu=false
|
||||||
|
# thermal-show-text=false
|
||||||
|
# thermal-style='digit'
|
||||||
|
# thermal-fahrenheit-unit=false
|
||||||
4
.config/systemd/user/README.md
Normal file
4
.config/systemd/user/README.md
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
# `systemd` User Units
|
||||||
|
|
||||||
|
This folder contains user services and timers,
|
||||||
|
enabled by [`dotfiles-install`](../../../.local/bin/dotfiles-install).
|
||||||
12
.config/systemd/user/gnome-restore.service
Normal file
12
.config/systemd/user/gnome-restore.service
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
[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
|
||||||
6
.config/systemd/user/night-light-reset.service
Normal file
6
.config/systemd/user/night-light-reset.service
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Return "Night Light" to the automatic schedule and default warmth
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=%h/.local/bin/night-light-reset
|
||||||
6
.config/systemd/user/night-light-reset.timer
Normal file
6
.config/systemd/user/night-light-reset.timer
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
[Timer]
|
||||||
|
OnCalendar=03:00
|
||||||
|
Persistent=true
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=timers.target
|
||||||
1121
.local/bin/color-palette
Executable file
1121
.local/bin/color-palette
Executable file
File diff suppressed because it is too large
Load diff
52
.local/bin/dark-scheme-toggle
Executable file
52
.local/bin/dark-scheme-toggle
Executable file
|
|
@ -0,0 +1,52 @@
|
||||||
|
#!/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
|
||||||
|
|
||||||
|
|
||||||
|
echo "Switched the color theme to $new_theme"
|
||||||
84
.local/bin/dconf-load
Executable file
84
.local/bin/dconf-load
Executable file
|
|
@ -0,0 +1,84 @@
|
||||||
|
#!/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
|
||||||
43
.local/bin/dconf-verify
Executable file
43
.local/bin/dconf-verify
Executable file
|
|
@ -0,0 +1,43 @@
|
||||||
|
#!/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/|org/freedesktop/(ibus|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 ""
|
||||||
|
|
@ -151,6 +151,31 @@ 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
|
||||||
|
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
|
||||||
|
|
|
||||||
30
.local/bin/evolution-on-workspace-0
Executable file
30
.local/bin/evolution-on-workspace-0
Executable file
|
|
@ -0,0 +1,30 @@
|
||||||
|
#!/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"
|
||||||
152
.local/bin/gnome-restore
Executable file
152
.local/bin/gnome-restore
Executable file
|
|
@ -0,0 +1,152 @@
|
||||||
|
#!/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 "Patching forge"
|
||||||
|
|
||||||
|
# Draw a whitish border on unfocused windows as well
|
||||||
|
|
||||||
|
PATCH="$HOME/.local/bin/gnome-shell-extension-forge-patch"
|
||||||
|
if [ -x "$PATCH" ]; then
|
||||||
|
"$PATCH" || echo "WARN: forge border patch failed" >&2
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
echo "Restored GNOME to the defaults defined in ~/.config/gnome-settings"
|
||||||
49
.local/bin/gnome-shell-extension-forge-install
Executable file
49
.local/bin/gnome-shell-extension-forge-install
Executable file
|
|
@ -0,0 +1,49 @@
|
||||||
|
#!/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"
|
||||||
73
.local/bin/gnome-shell-extension-forge-patch
Executable file
73
.local/bin/gnome-shell-extension-forge-patch
Executable file
|
|
@ -0,0 +1,73 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Patch `forge` to draw a border on all tiled and unfocused windows
|
||||||
|
#
|
||||||
|
# Idempotent: Re-running on a patched file changes nothing
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
|
||||||
|
XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}"
|
||||||
|
|
||||||
|
WINDOW_JS="$XDG_DATA_HOME/gnome-shell/extensions/forge@jmmaranan.com/lib/extension/window.js"
|
||||||
|
|
||||||
|
|
||||||
|
[ -w "$WINDOW_JS" ] || { echo "Not writable or missing: $WINDOW_JS" >&2; exit 1; }
|
||||||
|
|
||||||
|
|
||||||
|
grep -q "showUnfocusedBorders" "$WINDOW_JS" && { echo "Already patched"; exit 0; }
|
||||||
|
|
||||||
|
|
||||||
|
# Call our method after the focused border is drawn
|
||||||
|
sed -i '/^ updateBorderLayout() {$/,/^ }$/ s|this\.showWindowBorders();|this.showWindowBorders();\n this.showUnfocusedBorders();|' "$WINDOW_JS"
|
||||||
|
|
||||||
|
|
||||||
|
# Append the method right after `updateBorderLayout()`
|
||||||
|
awk '
|
||||||
|
/^ updateBorderLayout\(\) \{$/ { inFn=1 }
|
||||||
|
inFn && /^ \}$/ {
|
||||||
|
print
|
||||||
|
print ""
|
||||||
|
print " showUnfocusedBorders() {"
|
||||||
|
print " if (!this.ext.settings.get_boolean(\"focus-border-toggle\")) return;"
|
||||||
|
print " this.tree.nodeWindows.forEach((nodeWindow) => {"
|
||||||
|
print " let metaWindow = nodeWindow.nodeValue;"
|
||||||
|
print " if (!metaWindow || metaWindow === this.focusMetaWindow) return;"
|
||||||
|
print " if (metaWindow.minimized || metaWindow.is_fullscreen()) return;"
|
||||||
|
print " if (metaWindow.get_workspace() !== global.workspace_manager.get_active_workspace()) return;"
|
||||||
|
print " let maximized = false;"
|
||||||
|
print " try { maximized = metaWindow.is_maximized(); }"
|
||||||
|
print " catch (e) { maximized = metaWindow.get_maximized() === 3; }"
|
||||||
|
print " if (maximized) return;"
|
||||||
|
print " if (nodeWindow.parentNode.isTabbed() || nodeWindow.parentNode.isStacked()) return;"
|
||||||
|
print " let windowActor = metaWindow.get_compositor_private();"
|
||||||
|
print " if (!windowActor || !windowActor.border) return;"
|
||||||
|
print " let border = windowActor.border;"
|
||||||
|
print " border.set_style_class_name(\"window-unfocused-border\");"
|
||||||
|
print " let rect = metaWindow.get_frame_rect();"
|
||||||
|
print " let inset = 1;"
|
||||||
|
print " border.set_size(rect.width + inset * 2, rect.height + inset * 2);"
|
||||||
|
print " border.set_position(rect.x - inset, rect.y - inset);"
|
||||||
|
print " border.show();"
|
||||||
|
print " if (global.window_group && global.window_group.contains(border)) {"
|
||||||
|
print " global.window_group.remove_child(border);"
|
||||||
|
print " global.window_group.insert_child_above(border, windowActor);"
|
||||||
|
print " }"
|
||||||
|
print " });"
|
||||||
|
print " }"
|
||||||
|
inFn=0
|
||||||
|
next
|
||||||
|
}
|
||||||
|
{ print }
|
||||||
|
' "$WINDOW_JS" > "$WINDOW_JS.tmp" && mv "$WINDOW_JS.tmp" "$WINDOW_JS"
|
||||||
|
|
||||||
|
|
||||||
|
grep -q 'this\.showUnfocusedBorders();' "$WINDOW_JS" \
|
||||||
|
&& grep -q 'showUnfocusedBorders() {' "$WINDOW_JS" \
|
||||||
|
|| {
|
||||||
|
echo "ERROR: patch anchors did not match (upstream changed?): $WINDOW_JS" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
echo "Patched: $WINDOW_JS"
|
||||||
34
.local/bin/gnome-shell-extensions-schemas-import
Executable file
34
.local/bin/gnome-shell-extensions-schemas-import
Executable file
|
|
@ -0,0 +1,34 @@
|
||||||
|
#!/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"
|
||||||
75
.local/bin/gnome-shell-restart
Executable file
75
.local/bin/gnome-shell-restart
Executable file
|
|
@ -0,0 +1,75 @@
|
||||||
|
#!/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"
|
||||||
78
.local/bin/key-bindings
Executable file
78
.local/bin/key-bindings
Executable file
|
|
@ -0,0 +1,78 @@
|
||||||
|
#!/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
|
||||||
49
.local/bin/move-window-to-empty-workspace
Executable file
49
.local/bin/move-window-to-empty-workspace
Executable file
|
|
@ -0,0 +1,49 @@
|
||||||
|
#!/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
|
||||||
162
.local/bin/nextcloud-restore
Executable file
162
.local/bin/nextcloud-restore
Executable file
|
|
@ -0,0 +1,162 @@
|
||||||
|
#!/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
|
||||||
|
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 &
|
||||||
88
.local/bin/night-light-make-cooler
Executable file
88
.local/bin/night-light-make-cooler
Executable file
|
|
@ -0,0 +1,88 @@
|
||||||
|
#!/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"
|
||||||
102
.local/bin/night-light-make-warmer
Executable file
102
.local/bin/night-light-make-warmer
Executable file
|
|
@ -0,0 +1,102 @@
|
||||||
|
#!/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
|
||||||
25
.local/bin/night-light-reset
Executable file
25
.local/bin/night-light-reset
Executable file
|
|
@ -0,0 +1,25 @@
|
||||||
|
#!/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"
|
||||||
75
.local/bin/night-light-toggle-enabled
Executable file
75
.local/bin/night-light-toggle-enabled
Executable file
|
|
@ -0,0 +1,75 @@
|
||||||
|
#!/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
|
||||||
145
.local/bin/night-light-toggle-schedule
Executable file
145
.local/bin/night-light-toggle-schedule
Executable file
|
|
@ -0,0 +1,145 @@
|
||||||
|
#!/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
|
||||||
152
.local/bin/randomize-background
Executable file
152
.local/bin/randomize-background
Executable file
|
|
@ -0,0 +1,152 @@
|
||||||
|
#!/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"
|
||||||
36
.local/bin/screenshot-screen
Executable file
36
.local/bin/screenshot-screen
Executable file
|
|
@ -0,0 +1,36 @@
|
||||||
|
#!/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
|
||||||
25
.local/bin/screenshot-ui
Executable file
25
.local/bin/screenshot-ui
Executable file
|
|
@ -0,0 +1,25 @@
|
||||||
|
#!/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
|
||||||
36
.local/bin/screenshot-window
Executable file
36
.local/bin/screenshot-window
Executable file
|
|
@ -0,0 +1,36 @@
|
||||||
|
#!/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
|
||||||
27
.local/bin/wifi-toggle
Executable file
27
.local/bin/wifi-toggle
Executable file
|
|
@ -0,0 +1,27 @@
|
||||||
|
#!/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
|
||||||
4
.local/share/applications/README.md
Normal file
4
.local/share/applications/README.md
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
# Desktop Entries
|
||||||
|
|
||||||
|
This folder contains `*.desktop` launchers
|
||||||
|
for some scripts in [`~/.local/bin`](../../bin).
|
||||||
7
.local/share/applications/screenshot-screen.desktop
Normal file
7
.local/share/applications/screenshot-screen.desktop
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Application
|
||||||
|
Name=Capture the whole screen
|
||||||
|
Exec=screenshot-screen
|
||||||
|
Icon=applets-screenshooter
|
||||||
|
Terminal=false
|
||||||
|
Categories=Utility;
|
||||||
7
.local/share/applications/screenshot-ui.desktop
Normal file
7
.local/share/applications/screenshot-ui.desktop
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Application
|
||||||
|
Name=Open GNOME's screenshot UI
|
||||||
|
Exec=screenshot-ui
|
||||||
|
Icon=applets-screenshooter
|
||||||
|
Terminal=false
|
||||||
|
Categories=Utility;
|
||||||
7
.local/share/applications/screenshot-window.desktop
Normal file
7
.local/share/applications/screenshot-window.desktop
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Application
|
||||||
|
Name=Capture the focused window
|
||||||
|
Exec=screenshot-window
|
||||||
|
Icon=applets-screenshooter
|
||||||
|
Terminal=false
|
||||||
|
Categories=Utility;
|
||||||
9
.zshrc
9
.zshrc
|
|
@ -75,6 +75,15 @@ 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
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue