desktop: refine theming, workspaces, and utilities

- switch GTK font to GeistMono Nerd Font Propo 9 and drop GTK4 CSS overrides
- add named Hyprland workspaces/keybinds and Ghostty quick terminal; adjust screenshot binding
- update Waybar workspace icons/sorting; tweak Neovim transparency, Owlry/Qt6CT, and ROCm env
- add curated wallpaper sets for DP-1/DP-2 and new Hyprland toggle/screenshot helper scripts
This commit is contained in:
s0wlz (Matthias Puchstein)
2026-01-04 04:55:15 +01:00
parent bd51746242
commit d46534f50e
43 changed files with 174 additions and 161 deletions

View File

@@ -1,7 +1,7 @@
[Settings]
gtk-theme-name=Adwaita
gtk-icon-theme-name=Adwaita
gtk-font-name=GeistMono Nerd Font 11
gtk-font-name=GeistMono Nerd Font Propo 9
gtk-cursor-theme-name=volantes
gtk-cursor-theme-size=24
gtk-toolbar-style=GTK_TOOLBAR_ICONS

View File

@@ -1,129 +0,0 @@
/* Apex Theme System — GTK4 / Libadwaita */
/* Auto-generated from Apex DNA */
/* Scheme: Apex Neon (dark) */
@media (prefers-color-scheme: dark) {
:root {
/* Core Surfaces */
@define-color window_bg_color #050505;
@define-color window_fg_color #ededed;
@define-color view_bg_color #050505;
@define-color view_fg_color #ededed;
@define-color headerbar_bg_color #141414;
@define-color headerbar_fg_color #ededed;
@define-color headerbar_border_color #262626;
@define-color headerbar_backdrop_color @window_bg_color;
@define-color headerbar_shade_color rgba(0, 0, 0, 0.07);
@define-color popover_bg_color #141414;
@define-color popover_fg_color #ededed;
@define-color card_bg_color #141414;
@define-color card_fg_color #ededed;
@define-color card_shade_color rgba(0, 0, 0, 0.07);
@define-color dialog_bg_color #141414;
@define-color dialog_fg_color #ededed;
/* Accents */
@define-color accent_color #00eaff;
@define-color accent_bg_color #00eaff;
@define-color accent_fg_color #050505;
@define-color destructive_color #ff0044;
@define-color destructive_bg_color #ff0044;
@define-color destructive_fg_color #050505;
@define-color success_color #00ff99;
@define-color success_bg_color #00ff99;
@define-color success_fg_color #050505;
@define-color warning_color #ffb700;
@define-color warning_bg_color #ffb700;
@define-color warning_fg_color #050505;
@define-color error_color #ff8899;
@define-color error_bg_color #ff8899;
@define-color error_fg_color #050505;
/* UI Elements */
@define-color borders #262626;
@define-color sidebar_bg_color #141414;
@define-color sidebar_fg_color #ededed;
@define-color sidebar_backdrop_color @window_bg_color;
@define-color sidebar_shade_color rgba(0, 0, 0, 0.07);
/* Custom Apex Palette */
@define-color apex_razor #ff0044;
@define-color apex_void #050505;
@define-color apex_stealth #404040;
}
}
/* Scheme: Apex Aeon (light) */
@media (prefers-color-scheme: light) {
:root {
/* Core Surfaces */
@define-color window_bg_color #f5f5f5;
@define-color window_fg_color #0a0a0a;
@define-color view_bg_color #f5f5f5;
@define-color view_fg_color #0a0a0a;
@define-color headerbar_bg_color #e8e8e8;
@define-color headerbar_fg_color #0a0a0a;
@define-color headerbar_border_color #737373;
@define-color headerbar_backdrop_color @window_bg_color;
@define-color headerbar_shade_color rgba(0, 0, 0, 0.07);
@define-color popover_bg_color #e8e8e8;
@define-color popover_fg_color #0a0a0a;
@define-color card_bg_color #e8e8e8;
@define-color card_fg_color #0a0a0a;
@define-color card_shade_color rgba(0, 0, 0, 0.07);
@define-color dialog_bg_color #e8e8e8;
@define-color dialog_fg_color #0a0a0a;
/* Accents */
@define-color accent_color #007a88;
@define-color accent_bg_color #007a88;
@define-color accent_fg_color #f5f5f5;
@define-color destructive_color #ff0044;
@define-color destructive_bg_color #ff0044;
@define-color destructive_fg_color #f5f5f5;
@define-color success_color #00b377;
@define-color success_bg_color #00b377;
@define-color success_fg_color #f5f5f5;
@define-color warning_color #d18f00;
@define-color warning_bg_color #d18f00;
@define-color warning_fg_color #f5f5f5;
@define-color error_color #ff4d6d;
@define-color error_bg_color #ff4d6d;
@define-color error_fg_color #f5f5f5;
/* UI Elements */
@define-color borders #737373;
@define-color sidebar_bg_color #e8e8e8;
@define-color sidebar_fg_color #0a0a0a;
@define-color sidebar_backdrop_color @window_bg_color;
@define-color sidebar_shade_color rgba(0, 0, 0, 0.07);
/* Custom Apex Palette */
@define-color apex_razor #ff0044;
@define-color apex_void #f5f5f5;
@define-color apex_stealth #a0a0a0;
}
}

View File

@@ -1,7 +1,7 @@
[Settings]
gtk-theme-name=Adwaita
gtk-icon-theme-name=Adwaita
gtk-font-name=GeistMono Nerd Font 11
gtk-font-name=GeistMono Nerd Font Propo 9
gtk-cursor-theme-name=volantes
gtk-cursor-theme-size=24
gtk-application-prefer-dark-theme=1

View File

@@ -8,7 +8,7 @@ master {
new_on_top = true
new_on_active = after
allow_small_split = false
allow_small_split = true
special_scale_factor = 0.8
drop_at_cursor = true
}

View File

@@ -81,10 +81,13 @@ workspace = special:keepass, on-created-empty:keepassxc
#windowrule = center, class:org.keepassxc.KeePassXC
## ========== Communication ==========
# Mumble & Discord & TeamSpeak
windowrule = match:class ^(info\.mumble\.Mumble|discord|TeamSpeak|vesktop)$, workspace 2
# Signal & Element
windowrule = match:class ^(signal|Element)$, workspace 1
# Comms
windowrule = match:class ^(info\.mumble\.Mumble|discord|TeamSpeak|teamspeak3|vesktop)$, workspace name:comms
# Element
windowrule = match:class ^(Element)$, workspace name:element
## ========== Mail ==========
windowrule = match:class ^(org\.mozilla\.Thunderbird)$, workspace name:mail
## ========== Multimedia ==========
windowrule = match:class Spotify, workspace 10
@@ -94,8 +97,8 @@ windowrule = match:class Spotify, workspace 10
#windowrulev2 = size 1080 720, class:jetbrains-webstorm, title:Welcome to WebStorm
## ========== Gaming ==========
# Steam & Battle.net & Lutris
windowrule = match:class ^(steam|battle\.net\.exe|net\.lutris\.Lutris)$, workspace 3
# Steam
windowrule = match:class ^(steam)$, workspace name:steam
## ========== System ==========
windowrule = match:class com.saivert.pwvucontrol, float on

View File

@@ -35,6 +35,9 @@ $lockcmd = loginctl lock-session
$mainMod = SUPER
# Ghostty quick terminal via GlobalShortcuts portal.
bind = $mainMod, Backspace, global, com.mitchellh.ghostty:toggle_quick_terminal
# Launchers
bind = $mainMod, Return, exec, $terminal
bind = $mainMod SHIFT, Return, exec, $term_tmux
@@ -52,12 +55,19 @@ bind = $mainMod, C, exec, $clipman
bind = $mainMod, R, exec, $pwdmgr
bind = $mainMod, F4, exec, $soundctl
# Communication
bind = $mainMod, A, exec, hypr-element-toggle
bind = $mainMod, D, exec, hypr-comms-toggle
# Mail
bind = $mainMod SHIFT, A, exec, hypr-mail-toggle
# Gaming
bind = $mainMod, S, exec, hypr-steam-toggle
# Notifications
bind = $mainMod, Grave, exec, $notcenter
bind = $mainMod SHIFT, Grave, exec, $notdnd
bind = $mainMod, A, exec, $nothide
bind = $mainMod SHIFT, A, exec, $notclose
bind = $mainMod CTRL, A, exec, $notcloseall
# Session
bind = $mainMod, Pause, exec, $lockcmd
@@ -71,8 +81,8 @@ bind = $mainMod SHIFT, F, fullscreen
bind = $mainMod, I, pin
# Special workspaces
bind = $mainMod, S, togglespecialworkspace # show/hide special workspace
bind = $mainMod SHIFT, S, movetoworkspace, special # move to the special workspace
bind = $mainMod SHIFT, Space, togglespecialworkspace # show/hide special workspace
bind = $mainMod CTRL, Space, movetoworkspace, special # move to the special workspace
bind = $mainMod, N, togglespecialworkspace, keepass
# Master layout
@@ -175,10 +185,6 @@ bindl = , XF86AudioPlay, exec, playerctl play-pause
bindl = , XF86AudioPrev, exec, playerctl previous
# Screenshot and recording controls
bind = , Print, exec, grimblast --notify copy output
bind = CTRL, Print, exec, grimblast --notify edit output
bind = $mainMod, Print, exec, grimblast --notify edit area
bind = ALT_L, Print, exec, grimblast --notify copy screen
bind = ALT_L SHIFT, Print, exec, grimblast --notify edit screen
bind = , Print, exec, grimblast --notify copy screen
bind = $mainMod, Print, exec, owlry-screenshot-menu
bind = SHIFT, Print, exec, uwsm app -- ghostty --class=scrrec -e wf-recorder -f ~/Videos/scrrec.mkv -y -g "$(slurp)"

View File

@@ -32,6 +32,10 @@ function M.load()
vim.o.background = "light"
vim.g.colors_name = "apex-aeon"
-- Transparency: 80% opaque for floating UI
vim.o.winblend = 20
vim.o.pumblend = 20
local p = M.palette
local groups = {
-- CANVAS & UI -----------------------------------------------------------

View File

@@ -32,6 +32,10 @@ function M.load()
vim.o.background = "dark"
vim.g.colors_name = "apex-neon"
-- Transparency: 80% opaque for floating UI
vim.o.winblend = 20
vim.o.pumblend = 20
local p = M.palette
local groups = {
-- CANVAS & UI -----------------------------------------------------------

View File

@@ -34,6 +34,8 @@ max_results = 100
# Examples: "uwsm app --", "hyprctl dispatch exec --", ""
# launch_wrapper = "uwsm app --"
use_uwsm = true
# Header tabs - providers shown as toggle buttons (Ctrl+1, Ctrl+2, etc.)
# Values: app, cmd, uuctl, bookmark, calc, clip, dmenu, emoji, file, script, ssh, sys, web
tabs = ["app", "cmd", "uuctl"]
@@ -74,7 +76,7 @@ theme = "{{ .chezmoi.config.data.theme }}"
[plugins]
# Plugins to disable (by ID)
disabled = []
disabled = [ "filesearch" ]
# Examples:
# disabled = ["emoji", "pomodoro"] # Disable specific plugins

View File

@@ -2,7 +2,7 @@
color_scheme_path=/home/mpuchstein/.config/qt6ct/style-colors.conf
custom_palette=true
icon_theme=apex-neon-icons
standard_dialogs=gtk3
standard_dialogs=xdgdesktopportal
style=kvantum
[Fonts]
@@ -25,7 +25,7 @@ underline_shortcut=1
wheel_scroll_lines=3
[SettingsWindow]
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\a\x80\0\0\0\0\0\0\nq\0\0\x1Y\0\0\a\x80\0\0\0\0\0\0\nq\0\0\x1Y\0\0\0\x1\x2\0\0\0\a\x80\0\0\a\x80\0\0\0\0\0\0\nq\0\0\x1Y)
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x2\xda\0\0\x4)\0\0\0\0\0\0\0\0\0\0\x2\xda\0\0\x4)\0\0\0\0\x2\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\x2\xda\0\0\x4))
[Troubleshooting]
force_raster_widgets=1

View File

@@ -1,4 +1,4 @@
[ColorScheme]
active_colors=#ffededed, #ff262626, #ff404040, #ff404040, #ff050505, #ff050505, #ffededed, #ffffffff, #ffededed, #ff050505, #ff141414, #ff000000, #ffff80bf, #ff050505, #ff00eaff, #ff9d00ff, #ff050505, #ff000000, #ff000000, #ffededed, #80ededed, #ff0088cc
disabled_colors=#ff404040, #ff262626, #ff404040, #ff404040, #ff050505, #ff050505, #ff404040, #ffffffff, #ff404040, #ff050505, #ff141414, #ff000000, #ffff80bf, #66050505, #ff00eaff, #ff9d00ff, #ff050505, #ff000000, #ff000000, #ffededed, #80ededed, #ff404040
inactive_colors=#ffededed, #ff262626, #ff404040, #ff404040, #ff050505, #ff050505, #ffededed, #ffffffff, #ffededed, #ff050505, #ff141414, #ff000000, #ffff80bf, #ff050505, #ff00eaff, #ff9d00ff, #ff050505, #ff000000, #ff000000, #ffededed, #80ededed, #ff0088cc
active_colors=#ffe0def4, #ff26233a, #ff6e6a86, #ff6e6a86, #ff191724, #ff191724, #ffe0def4, #ffffffff, #ffe0def4, #ff191724, #ff1f1d2e, #ff000000, #ffebbcba, #ff191724, #ff9ccfd8, #ffc4a7e7, #ff191724, #ff000000, #ff000000, #ffe0def4, #80e0def4, #ff0088cc
disabled_colors=#ff908caa, #ff26233a, #ff6e6a86, #ff6e6a86, #ff191724, #ff191724, #ff908caa, #ffffffff, #ff908caa, #ff191724, #ff1f1d2e, #ff000000, #ffebbcba, #66191724, #ff9ccfd8, #ffc4a7e7, #ff191724, #ff000000, #ff000000, #ffe0def4, #80e0def4, #ff404040
inactive_colors=#ffe0def4, #ff26233a, #ff6e6a86, #ff6e6a86, #ff191724, #ff191724, #ffe0def4, #ffffffff, #ffe0def4, #ff191724, #ff1f1d2e, #ff000000, #ffebbcba, #ff191724, #ff9ccfd8, #ffc4a7e7, #ff191724, #ff000000, #ff000000, #ffe0def4, #80e0def4, #ff0088cc

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 982 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 744 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1008 KiB

View File

@@ -45,14 +45,25 @@
],
"hyprland/workspaces": {
"format": "{icon} {id}",
"format": "{icon}",
"all-outputs": true,
"sort-by": "id",
"format-icons": {
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7",
"8": "8",
"9": "9",
"10": "10",
"comms": "",
"element": "",
"mail": "",
"steam": "",
"default": "",
"active": "",
"empty": "",
"visible": "",
"persistent": "",
"special": ""
},
"on-scroll-up": "hyprctl dispatch workspace e+1",

View File

@@ -0,0 +1,25 @@
#!/usr/bin/env bash
set -euo pipefail
comms_ws="name:comms"
comms_name="comms"
active_name=""
if json="$(hyprctl -j activeworkspace 2>/dev/null)"; then
if command -v jq >/dev/null 2>&1; then
active_name="$(printf '%s' "$json" | jq -r '.name // empty')"
else
active_name="$(printf '%s' "$json" | sed -n 's/.*"name":"\\([^"]*\\)".*/\\1/p')"
fi
fi
if [[ -z "$active_name" ]]; then
active_name="$(hyprctl activeworkspace 2>/dev/null | sed -n 's/.*(\\(.*\\)).*/\\1/p' | head -n1)"
fi
if [[ "$active_name" == "$comms_name" || "$active_name" == "$comms_ws" ]]; then
hyprctl dispatch workspace previous
else
hyprctl dispatch moveworkspacetomonitor "$comms_ws" current
hyprctl dispatch workspace "$comms_ws"
fi

View File

@@ -0,0 +1,25 @@
#!/usr/bin/env bash
set -euo pipefail
element_ws="name:element"
element_name="element"
active_name=""
if json="$(hyprctl -j activeworkspace 2>/dev/null)"; then
if command -v jq >/dev/null 2>&1; then
active_name="$(printf '%s' "$json" | jq -r '.name // empty')"
else
active_name="$(printf '%s' "$json" | sed -n 's/.*"name":"\\([^"]*\\)".*/\\1/p')"
fi
fi
if [[ -z "$active_name" ]]; then
active_name="$(hyprctl activeworkspace 2>/dev/null | sed -n 's/.*(\\(.*\\)).*/\\1/p' | head -n1)"
fi
if [[ "$active_name" == "$element_name" || "$active_name" == "$element_ws" ]]; then
hyprctl dispatch workspace previous
else
hyprctl dispatch moveworkspacetomonitor "$element_ws" current
hyprctl dispatch workspace "$element_ws"
fi

View File

@@ -0,0 +1,25 @@
#!/usr/bin/env bash
set -euo pipefail
mail_ws="name:mail"
mail_name="mail"
active_name=""
if json="$(hyprctl -j activeworkspace 2>/dev/null)"; then
if command -v jq >/dev/null 2>&1; then
active_name="$(printf '%s' "$json" | jq -r '.name // empty')"
else
active_name="$(printf '%s' "$json" | sed -n 's/.*"name":"\\([^"]*\\)".*/\\1/p')"
fi
fi
if [[ -z "$active_name" ]]; then
active_name="$(hyprctl activeworkspace 2>/dev/null | sed -n 's/.*(\\(.*\\)).*/\\1/p' | head -n1)"
fi
if [[ "$active_name" == "$mail_name" || "$active_name" == "$mail_ws" ]]; then
hyprctl dispatch workspace previous
else
hyprctl dispatch moveworkspacetomonitor "$mail_ws" current
hyprctl dispatch workspace "$mail_ws"
fi

View File

@@ -0,0 +1,25 @@
#!/usr/bin/env bash
set -euo pipefail
steam_ws="name:steam"
steam_name="steam"
active_name=""
if json="$(hyprctl -j activeworkspace 2>/dev/null)"; then
if command -v jq >/dev/null 2>&1; then
active_name="$(printf '%s' "$json" | jq -r '.name // empty')"
else
active_name="$(printf '%s' "$json" | sed -n 's/.*"name":"\\([^"]*\\)".*/\\1/p')"
fi
fi
if [[ -z "$active_name" ]]; then
active_name="$(hyprctl activeworkspace 2>/dev/null | sed -n 's/.*(\\(.*\\)).*/\\1/p' | head -n1)"
fi
if [[ "$active_name" == "$steam_name" || "$active_name" == "$steam_ws" ]]; then
hyprctl dispatch workspace previous
else
hyprctl dispatch moveworkspacetomonitor "$steam_ws" current
hyprctl dispatch workspace "$steam_ws"
fi

View File

@@ -0,0 +1,12 @@
#!/usr/bin/env bash
set -euo pipefail
printf '%s\n' \
"grimblast --notify copy screen" \
"grimblast --notify copy output" \
"grimblast --notify copy area" \
"grimblast --notify edit screen" \
"grimblast --notify edit output" \
"grimblast --notify edit area" \
| owlry -m dmenu -p "Screenshot" \
| sh

View File

@@ -39,7 +39,7 @@ export FZF_DEFAULT_OPTS="$FZF_DEFAULT_OPTS \
{{- if (index $tags "desktop") }}
export ROCM_PATH=/opt/rocm
export HSA_OVERRIDE_GFX_VERSION=10.3.0
export HIP_VISIBLE_DEVICES=1
# export HIP_VISIBLE_DEVICES=1
export LD_LIBRARY_PATH=/opt/rocm/lib:$LD_LIBRARY_PATH
{{- end }}