diff --git a/.config/Nextcloud/sync-exclude.lst b/.config/Nextcloud/sync-exclude.lst new file mode 100644 index 0000000..9e184a4 --- /dev/null +++ b/.config/Nextcloud/sync-exclude.lst @@ -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-* diff --git a/.config/forge/config/windows.json b/.config/forge/config/windows.json new file mode 100644 index 0000000..719172d --- /dev/null +++ b/.config/forge/config/windows.json @@ -0,0 +1,128 @@ +{ + "overrides": [ + { + "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" + } + ] +} \ No newline at end of file diff --git a/.config/forge/stylesheet/forge/stylesheet.css b/.config/forge/stylesheet/forge/stylesheet.css new file mode 100644 index 0000000..2fb259a --- /dev/null +++ b/.config/forge/stylesheet/forge/stylesheet.css @@ -0,0 +1,125 @@ +.window-unfocused-border { + border-width: 3px; + border-color: rgb(174, 214, 222); + border-style: solid; + border-radius: 12px; +} +.tiled { + color: rgb(222, 237, 241); + opacity: 1; + border-width: 3px; +} +.split { + color: rgb(33, 144, 164); + opacity: 1; + border-width: 3px; +} +.stacked { + color: rgb(2, 131, 151); + opacity: 1; + border-width: 3px; +} +.tabbed { + color: rgb(2, 131, 151); + opacity: 1; + border-width: 3px; +} +.floated { + color: rgb(2, 131, 151); + border-width: 3px; + opacity: 1; +} +.window-tiled-border { + border-width: 4px; + border-color: rgb(222, 237, 241); + border-style: solid; + border-radius: 12px; +} +.window-split-border { + border-width: 4px; + border-color: rgb(33, 144, 164); + border-style: solid; + border-radius: 12px; +} +.window-split-horizontal { + border-left-width: 0; + border-top-width: 0; + border-bottom-width: 0; +} +.window-split-vertical { + border-left-width: 0; + border-top-width: 0; + border-right-width: 0; +} +.window-stacked-border { + border-width: 3px; + border-color: rgb(2, 131, 151); + border-style: solid; + border-radius: 12px; +} +.window-tabbed-border { + border-width: 3px; + border-color: rgb(2, 131, 151); + border-style: solid; + border-radius: 12px; +} +.window-tabbed-bg { + border-radius: 8px; +} +.window-tabbed-tab { + background-color: rgb(10, 98, 113); + border-color: rgba(10, 98, 113, 0.6); + border-width: 1px; + border-radius: 8px; + color: rgb(174, 214, 222); + margin: 1px; + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2); +} +.window-tabbed-tab-active { + background-color: rgb(2, 131, 151); + color: rgb(222, 237, 241); + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2); +} +.window-tabbed-tab-close { + padding: 3px; + margin: 4px; + border-radius: 12px; + width: 12px; + background-color: rgb(8, 110, 127); +} +.window-tabbed-tab-icon { + margin: 3px; +} +.window-floated-border { + border-width: 4px; + border-color: rgb(2, 131, 151); + border-style: solid; + border-radius: 12px; +} +.window-tilepreview-tiled { + border-width: 1px; + border-color: rgba(33, 144, 164, 0.4); + border-style: solid; + border-radius: 12px; + background-color: rgba(33, 144, 164, 0.3); +} +.window-tilepreview-stacked { + border-width: 1px; + border-color: rgba(2, 131, 151, 0.4); + border-style: solid; + border-radius: 12px; + background-color: rgba(2, 131, 151, 0.3); +} +.window-tilepreview-swap { + border-width: 1px; + border-color: rgba(124, 189, 203, 0.4); + border-style: solid; + border-radius: 12px; + background-color: rgba(124, 189, 203, 0.4); +} +.window-tilepreview-tabbed { + border-width: 1px; + border-color: rgba(2, 131, 151, 0.4); + border-style: solid; + border-radius: 12px; +} diff --git a/.config/gnome-settings/README.md b/.config/gnome-settings/README.md new file mode 100644 index 0000000..318ca12 --- /dev/null +++ b/.config/gnome-settings/README.md @@ -0,0 +1,64 @@ +# 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. + + +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: + +```bash +dconf load / < +``` + + +[`restore-gnome`](../../.local/bin/restore-gnome) automates this upon every login + (via the `restore-gnome.service` systemd user unit). + +Process: +1. Back up the current `dconf` state into ~/.local/state/gnome-settings-backups/ +2. Reset all managed sub-trees, + so that keys removed from the `*.ini` files do not linger in the live state, + and +3. Load every `*.ini` here, then every `local/*.ini`. + + +[`verify-dconf`](../../.local/bin/verify-dconf) lists keys diverging + between the live state and the `*.ini` files, + and can be used to find live keys worth adopting. + + + +## Color Palette + + +A teal ramp from light to dark, + plus two neutral tones for the shell chrome. + +Translucent colors are always alpha-variants of a stop, + used for `forge`'s tile previews and tab decorations. + + +| Stop | Hex | RGB | Role | +|------|-----------|--------------------|----------------------------------------------| +| 1 | `#DEEDF1` | rgb(222, 237, 241) | Foreground and text, focused borders | +| 2 | `#AED6DE` | rgb(174, 214, 222) | Quiet chrome: bar and unfocused windows | +| 3 | `#7CBDCB` | rgb(124, 189, 203) | Tile previews | +| 4 | `#4AA4B6` | rgb( 74, 164, 182) | Borders of active elements | +| 5 | `#2190A4` | rgb( 33, 144, 164) | Accent | +| 6 | `#028397` | rgb( 2, 131, 151) | Stacked and tabbed layout, floated windows | +| 7 | `#067A8D` | rgb( 6, 122, 141) | Openbar Highlights | +| 8 | `#086E7F` | rgb( 8, 110, 127) | Tab decorations | +| 9 | `#0A6271` | rgb( 10, 98, 113) | Dimmed backgrounds (e.g., inactive tabs) | +| 0 | `#054A55` | rgb( 5, 74, 85) | Dark base: terminal and sub-menu backgrounds | +| gray | `#2E2E32` | rgb( 46, 46, 50) | Surfaces: bar and menu backgrounds | +| base | `#000000` | rgb( 0, 0, 0) | Screensaver, shadows | + + +Stop 5 is GNOME's default "teal" color, + which is one of nine built-in colors that cannot be changed. +"gray" is GNOME's dark surface gray. diff --git a/.config/gnome-settings/apps.ini b/.config/gnome-settings/apps.ini new file mode 100644 index 0000000..0aa733f --- /dev/null +++ b/.config/gnome-settings/apps.ini @@ -0,0 +1,404 @@ +# 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='/' + + + +[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/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] + +confirm-close=false + + +# [org/gnome/terminal/legacy/keybindings] +# See ~/.config/gnome-settings/key-bindings.ini for the key bindings + + +[org/gnome/terminal/legacy/profiles:] + +default='b1dcc9dd-5262-4d8d-a863-c897e6d979b9' +list=['b1dcc9dd-5262-4d8d-a863-c897e6d979b9'] + + +[org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9] + +visible-name='Default Profile' + +use-custom-command=true +custom-command='/usr/bin/bash' +login-shell=false + +audible-bell=false + +use-theme-colors=true +# Fallback values for when theme coloring is turned off +background-color='rgb(5,74,85)' +foreground-color='rgb(222,237,241)' + +bold-is-bright=true + + + +[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/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' diff --git a/.config/gnome-settings/key-bindings.ini b/.config/gnome-settings/key-bindings.ini new file mode 100644 index 0000000..aa089c9 --- /dev/null +++ b/.config/gnome-settings/key-bindings.ini @@ -0,0 +1,485 @@ +# Unify all key bindings to conveniently keep them consistent + +# Target: `i3wm` defaults are the spec +# => We make GNOME/forge bend to match + +# Modifier layers (with exceptions): +# +# + ... Reserved for in-app shortcuts, +# + ... e.g., `gnome-terminal` +# +# + ... Primary system layer: +# media, devices, session, power, and some more +# +# + ... Secondary system layer: +# lights, brightness, and overflow from primary +# +# + ... Navigate windows and workspaces +# and very few extras +# +# + ... Move windows within or to another workspace +# +# + ... Swap windows (GNOME/forge only) +# +# + ... Grow windows +# + ... Shrink windows +# +# F1-F12 Deliberately not bound globally +# (Exceptions: F11 for fullscreen and F4) + + + +[org/gnome/desktop/wm/keybindings] + +activate-window-menu=@as [] + +always-on-top=@as [] + +# q is i3wm's default +close=['q', 'q', 'F4'] + +toggle-fullscreen=['f', 'F11'] + +toggle-maximized=['m', 'f'] +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 [] + +cycle-group=@as [] +cycle-group-backward=@as [] +cycle-panels=@as [] +cycle-panels-backward=@as [] +cycle-windows=['Tab'] +cycle-windows-backward=['Tab'] + +begin-move=@as [] +begin-resize=@as [] + +# The following could also be populated automatically +# in [org/gnome/shell/extensions/space-bar/shortcuts] +switch-to-workspace-1=['1'] +switch-to-workspace-2=['2'] +switch-to-workspace-3=['3'] +switch-to-workspace-4=['4'] +switch-to-workspace-5=['5'] +switch-to-workspace-6=['6'] +switch-to-workspace-7=['7'] +switch-to-workspace-8=['8'] +switch-to-workspace-9=['9'] +switch-to-workspace-10=['0'] + +switch-to-workspace-last=@as [] + +switch-to-workspace-up=@as [] +switch-to-workspace-down=@as [] +switch-to-workspace-left=['comma'] +# In [org/freedesktop/ibus/panel/emoji], "hotkey" must be "@as []" +# to turn GNOME's Emoji picker off, which also uses period +switch-to-workspace-right=['period'] + +# The following could also be populated automatically +# in [org/gnome/shell/extensions/space-bar/shortcuts] +move-to-workspace-1=['1'] +move-to-workspace-2=['2'] +move-to-workspace-3=['3'] +move-to-workspace-4=['4'] +move-to-workspace-5=['5'] +move-to-workspace-6=['6'] +move-to-workspace-7=['7'] +move-to-workspace-8=['8'] +move-to-workspace-9=['9'] +move-to-workspace-10=['0'] + +move-to-workspace-last=@as [] + +move-to-workspace-up=@as [] +move-to-workspace-down=@as [] +move-to-workspace-left=['comma'] +move-to-workspace-right=['period'] + +move-to-monitor-up=@as [] +move-to-monitor-down=@as [] +move-to-monitor-left=@as [] +move-to-monitor-right=@as [] + + +[org/gnome/mutter/keybindings] + +cancel-input-capture=@as [] + +# We must set the XF86 key here explicitly +# because by default 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=['slash'] + +calculator=@as [] +control-center=@as [] +email=@as [] +help=@as [] +home=@as [] +media=@as [] +www=@as [] + + +# Session & Power related + +screensaver=['l'] +logout=['BackSpace', 'Delete'] +suspend=['Escape'] +hibernate=@as [] +reboot=['Home'] +power=@as [] +shutdown=['End'] + + +# Devices + +battery-status=['e'] + +touchpad-toggle=['i'] +touchpad-on=@as [] +touchpad-off=@as [] + +# "Airplane mode" +rfkill=['w'] +rfkill-bluetooth=['b'] + + +# Audio related + +play=['space'] +pause=@as [] +stop=@as [] + +eject=@as [] + +next=['Right'] +previous=['Left'] + +playback-forward=['period'] +playback-rewind=['comma'] + +playback-random=@as [] +playback-repeat=@as [] + +volume-up=['Up'] +volume-up-precise=@as [] +volume-up-quiet=@as [] +volume-down=['Down'] +volume-down-precise=@as [] +volume-down-quiet=@as [] +volume-mute=['m'] +volume-mute-quiet=@as [] + +mic-mute=['m'] + + +# Screen and light related + +# "Auto rotate" +rotate-video-lock=@as [] + +toggle-contrast=@as [] + +screen-brightness-up=['Up'] +screen-brightness-down=['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=['bracketright'] +keyboard-brightness-down=['bracketleft'] +keyboard-brightness-toggle=['backslash'] + + +# Non-default GNOME bindings + +custom-keybindings=['/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/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/dark_theme_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_warmer/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/night_light_make_cooler/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/randomize_background/'] + + +[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/list_windows] +binding='Tab' +command='rofi -show window' +name='Windows' + + +[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/show_launcher_1] +binding='space' +command='rofi -show drun' +name='Launcher [1/2]' + +[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/show_launcher_2] +# i3wm's default +binding='d' +command='rofi -show drun' +name='Launcher [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='Return' +command='/usr/bin/alacritty' +name='Alacritty [1/2]' + +[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_primary_terminal_2] +binding='Return' +command='/usr/bin/alacritty' +name='Alacritty [2/2]' + + +[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_secondary_terminal_1] +# Our secondary terminal with `bash` +binding='t' +command='/usr/bin/gnome-terminal' +name='GNOME Terminal [1/2]' + +[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/launch_secondary_terminal_2] +# GNOME's actual default, used for our secondary terminal with `bash` +binding='t' +command='/usr/bin/gnome-terminal' +name='GNOME Terminal [2/2]' + + +[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/dark_theme_toggle] +binding='d' +command='/home/user/.local/bin/dark-theme-toggle' +name='Color Scheme: Toggle dark vs. light' + + +[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/night_light_force] +binding='n' +command='/home/user/.local/bin/night-light-toggle-schedule' +name='Night Light: Force the feature on right now, or back to automatic schedule' + +[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/night_light_toggle] +binding='n' +command='/home/user/.local/bin/night-light-toggle-enabled' +name='Night Light: Enable the feature, or disable it' + +[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/night_light_make_warmer] +binding='Right' +command='/home/user/.local/bin/night-light-make-warmer' +name='Night Light: Make screen warmer' + +[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/night_light_make_cooler] +binding='Left' +command='/home/user/.local/bin/night-light-make-cooler' +name='Night Light: Make screen cooler' + + +[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/randomize_background] +binding='b' +command='/home/user/.local/bin/randomize-background' +name='Background: Pick a random wallpaper from the cloud' + + + +[org/gnome/shell/keybindings] + +toggle-application-view=['a'] +toggle-message-tray=['slash'] +toggle-overview=@as [] +toggle-quick-settings=['backslash'] + +# To take fast screenshots without manual selection first +# as opposed to the simple 'Print' below +screenshot=['Print'] +screenshot-window=['Print'] + +# Manually select what to screenshot ... +show-screenshot-ui=['Print', 'p', 's'] +# ... or what to record +show-screen-recording-ui=['r'] + +focus-active-notification=@as [] + +# The defaults would collide with forge's "window-resize-*" on + Up/Down +shift-overview-up=@as [] +shift-overview-down=@as [] + +# Disable GNOME's default behavior of opening "favorite" apps +# with 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/forge/keybindings] + +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 [] + +window-gap-size-decrease=@as [] +window-gap-size-increase=@as [] + +workspace-active-tile-toggle=['y'] + +window-toggle-float=['space'] +window-toggle-always-float=@as [] + +window-focus-up=['k', 'Up'] +window-focus-down=['j', 'Down'] +window-focus-left=['h', 'Left'] +window-focus-right=['l', 'Right'] + +window-move-up=['k', 'Up'] +window-move-down=['j', 'Down'] +window-move-left=['h', 'Left'] +window-move-right=['l', 'Right'] + +window-swap-up=['k', 'Up'] +window-swap-down=['j', 'Down'] +window-swap-left=['h', 'Left'] +window-swap-right=['l', 'Right'] + +window-swap-last-active=['Return'] + +# + hjkl pushes an edge outward (i.e., "grow") +# while + hjkl pulls the opposite edge inward (i.e., "shrink") +window-resize-top-increase=['k', 'Up'] +window-resize-top-decrease=['j', 'Down'] +window-resize-bottom-increase=['j', 'Down'] +window-resize-bottom-decrease=['k', 'Up'] +window-resize-left-increase=['h', 'Left'] +window-resize-left-decrease=['l', 'Right'] +window-resize-right-increase=['l', 'Right'] +window-resize-right-decrease=['h', 'Left'] + +window-snap-center=@as [] +window-snap-one-third-left=@as [] +window-snap-one-third-right=@as [] +window-snap-two-third-left=@as [] +window-snap-two-third-right=@as [] + +# 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=['b'] +con-split-vertical=['v'] + +con-split-layout-toggle=['e'] + +con-stacked-layout-toggle=['s'] + +con-tabbed-layout-toggle=['w'] +con-tabbed-showtab-decoration-toggle=@as [] + + + +[org/gnome/shell/extensions/nightthemeswitcher/time] +# This extension is not in use any more and its config kept as archive + +# nightthemeswitcher-ondemand-keybinding=['d'] + + + +[org/gnome/shell/extensions/project-hamster] +# This extension is not in use any more and its config kept as archive + +# show-hamster-dropdown=['h'] + + + +[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=['grave'] + +# Jump to the next empty workspace +activate-empty-key=['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] + +close-tab='w' +close-window='q' + +find='f' +find-clear='f' +find-next='g' +find-previous='g' + +new-tab='t' +new-window='n' + +# "equal" because it is below "plus" on a US keyboard +zoom-in='equal' +zoom-out='minus' + + + +# To avoid conflict with "switch-to-workspace-right" in [org/gnome/desktop/wm/keybindings] +[org/freedesktop/ibus/panel/emoji] +hotkey=@as [] diff --git a/.config/gnome-settings/local/README.md b/.config/gnome-settings/local/README.md new file mode 100644 index 0000000..d4e0b8b --- /dev/null +++ b/.config/gnome-settings/local/README.md @@ -0,0 +1,2 @@ +This folder is reserved for local (i.e., machine specific) `dconf` settings + that are loaded after the default settings were loaded. diff --git a/.config/gnome-settings/misc.ini b/.config/gnome-settings/misc.ini new file mode 100644 index 0000000..97106b8 --- /dev/null +++ b/.config/gnome-settings/misc.ini @@ -0,0 +1,486 @@ +# 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] + +folder-children=@as [] + + + +[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='#054A55' +secondary-color='#054A55' + + + +[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')] + +# "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 Right Alt, which we otherwise would not have +xkb-options=['caps:ctrl_modifier', 'compose:ralt', 'lv3:menu_switch'] + + + +[org/gnome/desktop/interface] + +accent-color='teal' + +clock-format='24h' +clock-show-date=true +clock-show-seconds=true +clock-show-weekday=true + +color-scheme='prefer-dark' + +document-font-name='Cantarell 11' + +enable-animations=true +enable-hot-corners=false + +font-antialiasing='grayscale' +font-hinting='slight' +font-name='Cantarell 11' + +# gtk-im-module='gtk-im-context-simple' +# gtk-theme='Pop-dark' +# icon-theme='Pop' + +monospace-font-name='FiraCode Nerd Font 11' + +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 + + + +[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='#000000000000' +secondary-color='#000000000000' + +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-font='Cantarell 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 + +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_US.UTF-8' + + + +[system/proxy] + +mode='none' diff --git a/.config/gnome-settings/notifications.ini b/.config/gnome-settings/notifications.ini new file mode 100644 index 0000000..bda4d18 --- /dev/null +++ b/.config/gnome-settings/notifications.ini @@ -0,0 +1,907 @@ +# Disable most desktop notifications + + + +[org/gnome/desktop/notifications] + +# "application-children" is auto-populated upon a login + +show-banners=true + +# We turn `details-in-lock-screen` off for almost all registered apps +# => If `show-in-lock-screen` is ever turned on, +# individual apps must be turned on as well, +# except for a few ones already turned on below +show-in-lock-screen=false + + + +[org/gnome/desktop/notifications/application/alacritty] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/ca-desrt-dconf-editor] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/chromium] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/com-nextcloud-desktopclient-nextcloud] + +enable=true +enable-sound-alerts=false + +show-banners=true +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/com-obsproject-studio] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/com-spotify-client] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/com-system76-keyboardconfigurator] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/discord] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/firefox-esr] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/firewall-config] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/gnome-analytics-panel] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/gnome-color-panel] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/gnome-control-center] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/gnome-datetime-panel] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/gnome-firmware-panel] + +enable=true +enable-sound-alerts=false + +show-banners=true +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/gnome-language-selector] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/gnome-network-panel] + +enable=true +enable-sound-alerts=false + +show-banners=true +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/gnome-power-panel] + +enable=true +enable-sound-alerts=true + +show-banners=true +force-expanded=false + +details-in-lock-screen=true + + +[org/gnome/desktop/notifications/application/gnome-printers-panel] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/gnome-session-properties] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/gnome-support-panel] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/gnome-system-monitor] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/gnome-upgrade-panel] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/gnome-wellbeing-panel] + +enable=true +enable-sound-alerts=true + +show-banners=true +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/google-chrome] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/gparted] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/libreoffice-base] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/libreoffice-calc] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/libreoffice-draw] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/libreoffice-impress] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/libreoffice-math] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/libreoffice-startcenter] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/libreoffice-writer] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/menulibre] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/nm-connection-editor] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/nvidia-settings] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-bleachbit-bleachbit] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-cryptomator-cryptomator] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-baobab] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-calculator] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-calendar] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-characters] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-clocks] + +enable=true +enable-sound-alerts=true + +show-banners=true +force-expanded=false + +details-in-lock-screen=true + + +[org/gnome/desktop/notifications/application/org-gnome-contacts] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-diskutility] + +enable=true +enable-sound-alerts=false + +show-banners=true +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-eog] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-evince] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-evolution-alarm-notify] + +enable=true +enable-sound-alerts=false + +show-banners=true +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-evolution] + +enable=true +enable-sound-alerts=false + +show-banners=true +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-extensions-desktop] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-extensions] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-fileroller] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-gedit] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-nautilus] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-octave] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-photos] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-powerstats] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-screenshot] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-seahorse-application] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-settings] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-shell-extensions] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-software] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-terminal] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-texteditor] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-tweaks] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-gnome-zenity] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-mozilla-firefox] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-mozilla-thunderbird] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-pulseaudio-pavucontrol] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/org-remmina-remmina] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/rstudio] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/rustdesk] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/screenkey] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/simple-scan] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/sqlitebrowser] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/system76-driver] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/telegramdesktop] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/texmaker] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/vlc] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/yelp] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false + + +[org/gnome/desktop/notifications/application/zoom] + +enable=false +enable-sound-alerts=false + +show-banners=false +force-expanded=false + +details-in-lock-screen=false diff --git a/.config/gnome-settings/shell-base.ini b/.config/gnome-settings/shell-base.ini new file mode 100644 index 0000000..3d131fd --- /dev/null +++ b/.config/gnome-settings/shell-base.ini @@ -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)])>)>] diff --git a/.config/gnome-settings/shell-extensions.ini b/.config/gnome-settings/shell-extensions.ini new file mode 100644 index 0000000..b99d296 --- /dev/null +++ b/.config/gnome-settings/shell-extensions.ini @@ -0,0 +1,590 @@ +# 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', 'auto-move-windows@gnome-shell-extensions.gcampax.github.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', 'no-screenshot-box@screenshot', 'openbar@neuromorph', '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.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', '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] + +# Open these apps on fixed workspaces +# where the format is ".desktop:" +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=false +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/nightthemeswitcher] +# This extension is not in use any more and its config kept as archive + + +# [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 + + +# [org/gnome/shell/extensions/nightthemeswitcher/time] + +# manual-schedule=true + +# sunrise=6.0 +# sunset=18.0 + + +# See ~/.config/gnome-settings/key-bindings.ini for the key bindings +# nightthemeswitcher-ondemand-keybinding=['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] + +# 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.682', '0.839', '0.871'] +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.682', '0.839', '0.871'] +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.682', '0.839', '0.871'] +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=['h'] + + + +[org/gnome/shell/extensions/rounded-window-corners-reborn] + +# Rounds all window corners uniformly (e.g., needed for `alacritty`) +# so that they match the "border-radius" of 12px in +# ~/.config/forge/stylesheet/forge/stylesheet.css + +# "padding" matches the border "inset" of 3 +# in ~/.local/bin/patch-forge +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': , 'smoothing': <0.0>, 'borderColor': <(0.682, 0.839, 0.871, 1.0)>, 'enabled': } + +focused-shadow={'horizontalOffset': 0, 'verticalOffset': 4, 'blurOffset': 28, 'spreadRadius': 4, '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/appearance] + +custom-styles-enabled=false + +workspace-margin=0 +workspaces-bar-padding=0 + +active-workspace-font-size=10 +active-workspace-font-weight='700' +active-workspace-text-color='rgb(222,237,241)' +active-workspace-background-color='rgb(33,144,164)' +active-workspace-border-color='rgb(74,164,182)' +active-workspace-border-radius=8 +active-workspace-border-width=2 +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(174,214,222)' +inactive-workspace-background-color='rgb(46,46,50)' +inactive-workspace-border-color='rgb(46,46,50)' +inactive-workspace-border-radius=8 +inactive-workspace-border-width=2 +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(6,122,141)' +empty-workspace-background-color='rgb(46,46,50)' +empty-workspace-border-color='rgb(46,46,50)' +empty-workspace-border-radius=8 +empty-workspace-border-width=2 +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 diff --git a/.config/systemd/user/restore-gnome.service b/.config/systemd/user/restore-gnome.service new file mode 100644 index 0000000..08c5589 --- /dev/null +++ b/.config/systemd/user/restore-gnome.service @@ -0,0 +1,11 @@ +[Unit] +Description=Restore the GNOME settings from ~/.config/gnome-settings/*.ini +Before=gnome-session-pre.target +ConditionPathIsDirectory=%h/.config/gnome-settings + +[Service] +Type=oneshot +ExecStart=%h/.local/bin/restore-gnome + +[Install] +WantedBy=gnome-session-pre.target diff --git a/.local/bin/dark-theme-toggle b/.local/bin/dark-theme-toggle new file mode 100755 index 0000000..602822e --- /dev/null +++ b/.local/bin/dark-theme-toggle @@ -0,0 +1,31 @@ +#!/bin/sh + +# Triggered by d +# as defined in [org/gnome/settings-daemon/plugins/media-keys] +# in ~/.config/gnome-settings/key-bindings.ini + +set -eu + + +Interface=org.gnome.desktop.interface +Background=org.gnome.desktop.background + + +# Keep in sync with "primary-color" in [org/gnome/desktop/background] +DARK_COLOR='#054A55' +LIGHT_COLOR='#DEEDF1' + + +if [ "$(gsettings get $Interface color-scheme)" = "'prefer-dark'" ]; then + + gsettings set $Interface color-scheme 'prefer-light' + gsettings set $Background primary-color "$LIGHT_COLOR" + gsettings set $Background secondary-color "$LIGHT_COLOR" + +else + + gsettings set $Interface color-scheme 'prefer-dark' + gsettings set $Background primary-color "$DARK_COLOR" + gsettings set $Background secondary-color "$DARK_COLOR" + +fi diff --git a/.local/bin/import-gnome-extension-schemas b/.local/bin/import-gnome-extension-schemas new file mode 100755 index 0000000..ddbeae2 --- /dev/null +++ b/.local/bin/import-gnome-extension-schemas @@ -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" diff --git a/.local/bin/install-dotfiles b/.local/bin/install-dotfiles index 26f76f9..4443aa9 100755 --- a/.local/bin/install-dotfiles +++ b/.local/bin/install-dotfiles @@ -120,6 +120,13 @@ if [ -x "$XDG_BIN_HOME/generate-shell-completions" ]; then fi +if [ -f "$HOME/.config/systemd/user/restore-gnome.service" ]; then + systemctl --user daemon-reload + systemctl --user enable restore-gnome.service + systemctl --user status --no-pager restore-gnome.service || true +fi + + echo "" echo "The dotfiles were installed successfully (branch: $DOTFILES_BRANCH)" echo "" diff --git a/.local/bin/night-light-make-cooler b/.local/bin/night-light-make-cooler new file mode 100755 index 0000000..ccae215 --- /dev/null +++ b/.local/bin/night-light-make-cooler @@ -0,0 +1,85 @@ +#!/bin/sh + +# Triggered by Left +# 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 +# if it was not yet on by schedule +# and makes the screen a bit cooler than it currently is +# +# The default warmth is restored at login by ~/.local/bin/restore-gnome + + +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) + +current=$(gsettings get $Schema night-light-temperature | awk '{print $2}') + + +# 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" + + +# Force "Night Light" on, saving a n call, +# with the same settings as in ~/.local/bin/night-light-toggle-schedule +if [ "$active" = "(,)" ]; 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 + + +if [ "$current" -ge $_MAX_TEMPERATURE ]; then + + if [ "$active" = "(,)" ]; then + notify "is now forced on and already as cool as it gets (${_MAX_TEMPERATURE}K)" + else + notify "is already as cool as it gets (${_MAX_TEMPERATURE}K)" + fi + +else + + if [ "$active" = "(,)" ]; then + notify "is now forced on at ${new}K" + fi + +fi diff --git a/.local/bin/night-light-make-warmer b/.local/bin/night-light-make-warmer new file mode 100755 index 0000000..43e9a68 --- /dev/null +++ b/.local/bin/night-light-make-warmer @@ -0,0 +1,85 @@ +#!/bin/sh + +# Triggered by Right +# 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 +# if it was not yet on by schedule +# and makes the screen a bit warmer than it currently is +# +# The default warmth is restored at login by ~/.local/bin/restore-gnome + + +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) + +current=$(gsettings get $Schema night-light-temperature | awk '{print $2}') + + +# 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" + + +# Force "Night Light" on, saving a n call, +# with the same settings as in ~/.local/bin/night-light-toggle-schedule +if [ "$active" = "(,)" ]; 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 + + +if [ "$current" -le $_MIN_TEMPERATURE ]; then + + if [ "$active" = "(,)" ]; then + notify "is now forced on and already as warm as it gets (${_MIN_TEMPERATURE}K)" + else + notify "is already as warm as it gets (${_MIN_TEMPERATURE}K)" + fi + +else + + if [ "$active" = "(,)" ]; then + notify "is now forced on at ${new}K" + fi + +fi diff --git a/.local/bin/night-light-toggle-enabled b/.local/bin/night-light-toggle-enabled new file mode 100755 index 0000000..4b895cf --- /dev/null +++ b/.local/bin/night-light-toggle-enabled @@ -0,0 +1,68 @@ +#!/bin/sh + +# Triggered by n +# 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" = "(,)" ]; 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 the default + # warmth is reset anyways after a reboot + # gsettings set $Schema night-light-temperature "uint32 2200" + + # 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" = "(,)" ]; then + notify "is now enabled, but the schedule keeps it off for now" + fi + +fi diff --git a/.local/bin/night-light-toggle-schedule b/.local/bin/night-light-toggle-schedule new file mode 100755 index 0000000..25ae9ca --- /dev/null +++ b/.local/bin/night-light-toggle-schedule @@ -0,0 +1,102 @@ +#!/bin/sh + +# Triggered by n +# as defined in [org/gnome/settings-daemon/plugins/media-keys] +# in ~/.config/gnome-settings/key-bindings.ini +# +# Night Light control: +# +# - n => "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 +# - n => "if" toggle +# Plain on/off switch for the Night Light feature +# +# Neither key binding changes what the other controls, so they don't fight. +# +# Making the screen cooler or warmer with Left/Right +# also forces "Night Light" on because adjusting this implies +# that the user wants to use it. +# +# State machine: +# TARGET STATE +# +--------------------------+--------------------------+ +# CURRENT STATE | nl-toggle-schedule | nl-toggle-enabled | +# +--------------------------+--------------------------+--------------------------+ +# | disabled, automatic | enabled, force | enabled, automatic (*) | +# | disabled, force | enabled, force | enabled, force | +# | enabled, automatic | enabled, force (*) | disabled, automatic (*) | +# | enabled, force | enabled, automatic (*) | disabled, force | +# +--------------------------+--------------------------+--------------------------+ +# (*) There are four cases where a user does not perceive a change on the screen. +# Then, a notification is shown instead. +# +# See ~/.local/bin/night-light-toggle-enabled for the other half of the toggling logic + + +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) + +automatic=$(gsettings get $Schema night-light-schedule-automatic) +enabled=$(gsettings get $Schema night-light-enabled) + + +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" = "(,)" ] && [ "$automatic" = "true" ]; 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" = "(,)" ]; 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" = "(,)" ]; then + notify "is still on because of an automatic schedule" + fi + + fi + +fi diff --git a/.local/bin/patch-forge b/.local/bin/patch-forge new file mode 100755 index 0000000..3ad0ef8 --- /dev/null +++ b/.local/bin/patch-forge @@ -0,0 +1,64 @@ +#!/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 = 3;" + 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" + + +echo "Patched: $WINDOW_JS" diff --git a/.local/bin/randomize-background b/.local/bin/randomize-background new file mode 100755 index 0000000..44880ce --- /dev/null +++ b/.local/bin/randomize-background @@ -0,0 +1,75 @@ +#!/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,shell-extensions}.ini +# +# Candidates: +# - Pairs => Both "-d.jpg" and "-l.jpg" exist +# - Singles => Any other "*.jpg" not following the -d/-l scheme, +# used as dark and light at the same time + +set -eu + + +SOURCE_DIR="$HOME/Cloud/Null-Tech/Backgrounds" +TARGET_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/backgrounds" +STATE_FILE="${XDG_STATE_HOME:-$HOME/.local/state}/current-background.txt" + + +[ -d "$SOURCE_DIR" ] || { echo "No such folder: $SOURCE_DIR" >&2; exit 1; } + + +# One candidate per line, tab-separated: +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 (e.g., for start, wrap-around, or missing state file) +last=$(cat "$STATE_FILE" 2>/dev/null || true) +chosen=$(printf '%s\n' "$candidates" | awk -F '\t' -v last="$last" '$1 > last { print; exit }') +[ -n "$chosen" ] || chosen=$(printf '%s\n' "$candidates" | head -n 1) + + +dark=$(printf '%s' "$chosen" | cut -f 1) +light=$(printf '%s' "$chosen" | cut -f 2) +echo "Chosen: $(basename "$dark")" + + +mkdir -p "$TARGET_DIR" "$(dirname "$STATE_FILE")" +cp -- "$dark" "$TARGET_DIR/dark.jpg" +cp -- "$light" "$TARGET_DIR/light.jpg" +printf '%s\n' "$dark" > "$STATE_FILE" + + +echo "Installed as: $TARGET_DIR/{dark,light}.jpg" diff --git a/.local/bin/restore-gnome b/.local/bin/restore-gnome new file mode 100755 index 0000000..596794d --- /dev/null +++ b/.local/bin/restore-gnome @@ -0,0 +1,147 @@ +#!/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" +SETTINGS_DIR="$XDG_CONFIG_HOME/gnome-settings" + + +# Subtrees either +# - fully described by the *.ini files +# - or reset to their defaults +# +# Note: Keep in sync with the `grep`s in ~/.local/bin/verify-dconf +RESET_PATHS=" +/ca/desrt/dconf-editor/ +/org/freedesktop/ibus/panel/ +/org/freedesktop/tracker/ +/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 "$SETTINGS_DIR" ]; then + echo "No settings found at: $SETTINGS_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 -- + + + +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/import-gnome-extension-schemas" +if [ -x "$SCHEMAS" ]; then + "$SCHEMAS" || echo "WARN: importing GNOME extension schemas failed" >&2 +fi + + + +echo "Loading GNOME settings from: $SETTINGS_DIR" + +for file in "$SETTINGS_DIR"/*.ini; do + [ -e "$file" ] || continue # because the glob does not expand if empty + echo " $(basename "$file")" + sed "s|/home/user|$HOME|g" "$file" | dconf load / +done + +for file in "$SETTINGS_DIR"/local/*.ini; do + [ -e "$file" ] || continue # because the glob does not expand if empty + echo " $(basename "$file")" + sed "s|/home/user|$HOME|g" "$file" | dconf load / +done + + + +echo "Patching forge" + +# Draw a whitish border on unfocused windows as well + +PATCH="$HOME/.local/bin/patch-forge" +if [ -x "$PATCH" ]; then + "$PATCH" || echo "WARN: forge border patch failed" >&2 +fi + + + +echo "Restored GNOME to the defaults defined in ~/.config/gnome-settings" diff --git a/.local/bin/restore-nextcloud b/.local/bin/restore-nextcloud new file mode 100755 index 0000000..c40b369 --- /dev/null +++ b/.local/bin/restore-nextcloud @@ -0,0 +1,139 @@ +#!/usr/bin/env bash + +# This script ensures my `nextcloud` clients operate in a uniform way + +set -eu + + + +CFG="${XDG_CONFIG_HOME:-$HOME/.config}/Nextcloud/nextcloud.cfg" +SERVER_FILE="${XDG_CONFIG_HOME:-$HOME/.config}/Nextcloud/server.txt" +XDG_DATA_HOME=${XDG_DATA_HOME:-$HOME/.local/share} + + + +FORCE=0 +[ "${1:-}" = "--force" ] && FORCE=1 + +if [ -r "$SERVER_FILE" ]; then + SERVER_URL=$(head -n 1 "$SERVER_FILE") +elif [ "$FORCE" -eq 1 ]; then + SERVER_URL="" + echo "WARN: $SERVER_FILE not found, leaving the server URL unmanaged" >&2 +else + echo "Server URL not found at: $SERVER_FILE" >&2 + echo "" + 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 + exit 1 +fi + + + +if ! command -v crudini >/dev/null 2>&1; then + echo "crudini is not installed => Cannot configure nextcloud" >&2 + exit 1 +fi + + + +del_key() { # section key + crudini --del "$CFG" "$1" "$2" +} + + +set_key() { # section key value + crudini --set "$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 "$CFG")" +touch "$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` +nextcloud --background & +disown diff --git a/.local/bin/verify-dconf b/.local/bin/verify-dconf new file mode 100755 index 0000000..5595f1e --- /dev/null +++ b/.local/bin/verify-dconf @@ -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/restore-gnome +FILTER='^(org/gnome/|org/gtk/|org/freedesktop/(ibus|tracker)/|ca/desrt/|system/)' + +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) || exit 1 +managed=$(mktemp) || exit 1 + +trap 'rm -f "$live" "$managed"' EXIT INT TERM + + +dconf dump / | flat | grep -E "$FILTER" | sort -u > "$live" + +find "$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 ""