diff --git a/README.md b/README.md index 451701e..0c77eb7 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ ![License](https://img.shields.io/badge/license-MIT-purple) ![Status](https://img.shields.io/badge/status-work_in_progress-yellow) -[KDE & apps](#configs) · [Shortcuts](docs/shortcuts.md) · [Packages](#package-sections) · [Setup](docs/setup.md) +[KDE styling](docs/kde-style.md) · [Shortcuts](docs/shortcuts.md) · [Packages](#package-sections) · [Setup](docs/setup.md) @@ -92,8 +92,9 @@ the default. Kernel choice is independent of bootloader choice. ## Configs Every config is independently selectable, even when its package section is -unchecked—for example, to configure apps already installed. KDE appearance covers colours, -fonts, cursor, window decorations and Dolphin styling. Panels, widgets and +unchecked—for example, to configure apps already installed. KDE appearance covers +colours, fonts, cursor and window decorations, with matching GTK preferences. +Dolphin styling has its own checkbox. Panels, widgets and wallpapers are excluded. All portable current shortcut assignments, including disabled defaults, are captured with their launchers and helpers; unused machine-specific activity IDs are omitted. diff --git a/configs/catalog.json b/configs/catalog.json index be17b19..30a31c6 100644 --- a/configs/catalog.json +++ b/configs/catalog.json @@ -1,6 +1,6 @@ { "kde-style": { - "label": "KDE colours, fonts, cursor and decorations", + "label": "KDE + GTK colours, fonts, cursor and decorations", "group": "kde", "kde": true }, diff --git a/configs/kde-shortcuts/kconfig/.config/kwinrc b/configs/kde-shortcuts/kconfig/.config/kwinrc new file mode 100644 index 0000000..21dd273 --- /dev/null +++ b/configs/kde-shortcuts/kconfig/.config/kwinrc @@ -0,0 +1,3 @@ +[Desktops] +Number=1 +Rows=1 diff --git a/configs/kde-style/files/.config/gtk-3.0/colors.css b/configs/kde-style/files/.config/gtk-3.0/colors.css new file mode 100644 index 0000000..fe924b4 --- /dev/null +++ b/configs/kde-style/files/.config/gtk-3.0/colors.css @@ -0,0 +1,84 @@ +@define-color borders_breeze #464251; +@define-color content_view_bg_breeze #16131f; +@define-color error_color_backdrop_breeze #da4453; +@define-color error_color_breeze #da4453; +@define-color error_color_insensitive_backdrop_breeze #56222f; +@define-color error_color_insensitive_breeze #56222f; +@define-color insensitive_base_color_breeze #15121e; +@define-color insensitive_base_fg_color_breeze #5b5864; +@define-color insensitive_bg_color_breeze #1c1827; +@define-color insensitive_borders_breeze #292535; +@define-color insensitive_fg_color_breeze #5f5c6a; +@define-color insensitive_selected_bg_color_breeze #1c1827; +@define-color insensitive_selected_fg_color_breeze #5f5c6a; +@define-color insensitive_unfocused_bg_color_breeze #1c1827; +@define-color insensitive_unfocused_fg_color_breeze #5f5c6a; +@define-color insensitive_unfocused_selected_bg_color_breeze #1c1827; +@define-color insensitive_unfocused_selected_fg_color_breeze #5f5c6a; +@define-color link_color_breeze #c7c2db; +@define-color link_visited_color_breeze #9d8fd9; +@define-color success_color_backdrop_breeze #27ae60; +@define-color success_color_breeze #27ae60; +@define-color success_color_insensitive_backdrop_breeze #1b4633; +@define-color success_color_insensitive_breeze #1b4633; +@define-color theme_base_color_breeze #16131f; +@define-color theme_bg_color_breeze #1d1929; +@define-color theme_button_background_backdrop_breeze #262036; +@define-color theme_button_background_backdrop_insensitive_breeze #241f33; +@define-color theme_button_background_insensitive_breeze #241f33; +@define-color theme_button_background_normal_breeze #262036; +@define-color theme_button_decoration_focus_backdrop_breeze #6e56af; +@define-color theme_button_decoration_focus_backdrop_insensitive_breeze #3c315c; +@define-color theme_button_decoration_focus_breeze #6e56af; +@define-color theme_button_decoration_focus_insensitive_breeze #3c315c; +@define-color theme_button_decoration_hover_backdrop_breeze #6e56af; +@define-color theme_button_decoration_hover_backdrop_insensitive_breeze #3c315c; +@define-color theme_button_decoration_hover_breeze #6e56af; +@define-color theme_button_decoration_hover_insensitive_breeze #3c315c; +@define-color theme_button_foreground_active_backdrop_breeze #e8e4f3; +@define-color theme_button_foreground_active_backdrop_insensitive_breeze #5f5c6a; +@define-color theme_button_foreground_active_breeze #ffffff; +@define-color theme_button_foreground_active_insensitive_breeze #5f5c6a; +@define-color theme_button_foreground_backdrop_breeze #e8e4f3; +@define-color theme_button_foreground_backdrop_insensitive_breeze #656074; +@define-color theme_button_foreground_insensitive_breeze #656074; +@define-color theme_button_foreground_normal_breeze #e8e4f3; +@define-color theme_fg_color_breeze #e8e4f3; +@define-color theme_header_background_backdrop_breeze #1d1929; +@define-color theme_header_background_breeze #1a1625; +@define-color theme_header_background_light_breeze #1d1929; +@define-color theme_header_foreground_backdrop_breeze #e8e4f3; +@define-color theme_header_foreground_breeze #e8e4f3; +@define-color theme_header_foreground_insensitive_backdrop_breeze #e8e4f3; +@define-color theme_header_foreground_insensitive_breeze #e8e4f3; +@define-color theme_hovering_selected_bg_color_breeze #6e56af; +@define-color theme_selected_bg_color_breeze #534183; +@define-color theme_selected_fg_color_breeze #ffffff; +@define-color theme_text_color_breeze #e8e4f3; +@define-color theme_titlebar_background_backdrop_breeze #1d1929; +@define-color theme_titlebar_background_breeze #1a1625; +@define-color theme_titlebar_background_light_breeze #1d1929; +@define-color theme_titlebar_foreground_backdrop_breeze #e8e4f3; +@define-color theme_titlebar_foreground_breeze #e8e4f3; +@define-color theme_titlebar_foreground_insensitive_backdrop_breeze #e8e4f3; +@define-color theme_titlebar_foreground_insensitive_breeze #e8e4f3; +@define-color theme_unfocused_base_color_breeze #16131f; +@define-color theme_unfocused_bg_color_breeze #1d1929; +@define-color theme_unfocused_fg_color_breeze #e8e4f3; +@define-color theme_unfocused_selected_bg_color_alt_breeze #2d2447; +@define-color theme_unfocused_selected_bg_color_breeze #2d2447; +@define-color theme_unfocused_selected_fg_color_breeze #e8e4f3; +@define-color theme_unfocused_text_color_breeze #e8e4f3; +@define-color theme_unfocused_view_bg_color_breeze #15121e; +@define-color theme_unfocused_view_text_color_breeze #5b5864; +@define-color theme_view_active_decoration_color_breeze #6e56af; +@define-color theme_view_hover_decoration_color_breeze #6e56af; +@define-color tooltip_background_breeze #1d1929; +@define-color tooltip_border_breeze #464251; +@define-color tooltip_text_breeze #e8e4f3; +@define-color unfocused_borders_breeze #464251; +@define-color unfocused_insensitive_borders_breeze #292535; +@define-color warning_color_backdrop_breeze #f67400; +@define-color warning_color_breeze #f67400; +@define-color warning_color_insensitive_backdrop_breeze #603213; +@define-color warning_color_insensitive_breeze #603213; diff --git a/configs/kde-style/files/.config/gtk-3.0/gtk.css b/configs/kde-style/files/.config/gtk-3.0/gtk.css new file mode 100644 index 0000000..c9763f7 --- /dev/null +++ b/configs/kde-style/files/.config/gtk-3.0/gtk.css @@ -0,0 +1 @@ +@import 'colors.css'; \ No newline at end of file diff --git a/configs/kde-style/files/.config/gtk-4.0/colors.css b/configs/kde-style/files/.config/gtk-4.0/colors.css new file mode 100644 index 0000000..fe924b4 --- /dev/null +++ b/configs/kde-style/files/.config/gtk-4.0/colors.css @@ -0,0 +1,84 @@ +@define-color borders_breeze #464251; +@define-color content_view_bg_breeze #16131f; +@define-color error_color_backdrop_breeze #da4453; +@define-color error_color_breeze #da4453; +@define-color error_color_insensitive_backdrop_breeze #56222f; +@define-color error_color_insensitive_breeze #56222f; +@define-color insensitive_base_color_breeze #15121e; +@define-color insensitive_base_fg_color_breeze #5b5864; +@define-color insensitive_bg_color_breeze #1c1827; +@define-color insensitive_borders_breeze #292535; +@define-color insensitive_fg_color_breeze #5f5c6a; +@define-color insensitive_selected_bg_color_breeze #1c1827; +@define-color insensitive_selected_fg_color_breeze #5f5c6a; +@define-color insensitive_unfocused_bg_color_breeze #1c1827; +@define-color insensitive_unfocused_fg_color_breeze #5f5c6a; +@define-color insensitive_unfocused_selected_bg_color_breeze #1c1827; +@define-color insensitive_unfocused_selected_fg_color_breeze #5f5c6a; +@define-color link_color_breeze #c7c2db; +@define-color link_visited_color_breeze #9d8fd9; +@define-color success_color_backdrop_breeze #27ae60; +@define-color success_color_breeze #27ae60; +@define-color success_color_insensitive_backdrop_breeze #1b4633; +@define-color success_color_insensitive_breeze #1b4633; +@define-color theme_base_color_breeze #16131f; +@define-color theme_bg_color_breeze #1d1929; +@define-color theme_button_background_backdrop_breeze #262036; +@define-color theme_button_background_backdrop_insensitive_breeze #241f33; +@define-color theme_button_background_insensitive_breeze #241f33; +@define-color theme_button_background_normal_breeze #262036; +@define-color theme_button_decoration_focus_backdrop_breeze #6e56af; +@define-color theme_button_decoration_focus_backdrop_insensitive_breeze #3c315c; +@define-color theme_button_decoration_focus_breeze #6e56af; +@define-color theme_button_decoration_focus_insensitive_breeze #3c315c; +@define-color theme_button_decoration_hover_backdrop_breeze #6e56af; +@define-color theme_button_decoration_hover_backdrop_insensitive_breeze #3c315c; +@define-color theme_button_decoration_hover_breeze #6e56af; +@define-color theme_button_decoration_hover_insensitive_breeze #3c315c; +@define-color theme_button_foreground_active_backdrop_breeze #e8e4f3; +@define-color theme_button_foreground_active_backdrop_insensitive_breeze #5f5c6a; +@define-color theme_button_foreground_active_breeze #ffffff; +@define-color theme_button_foreground_active_insensitive_breeze #5f5c6a; +@define-color theme_button_foreground_backdrop_breeze #e8e4f3; +@define-color theme_button_foreground_backdrop_insensitive_breeze #656074; +@define-color theme_button_foreground_insensitive_breeze #656074; +@define-color theme_button_foreground_normal_breeze #e8e4f3; +@define-color theme_fg_color_breeze #e8e4f3; +@define-color theme_header_background_backdrop_breeze #1d1929; +@define-color theme_header_background_breeze #1a1625; +@define-color theme_header_background_light_breeze #1d1929; +@define-color theme_header_foreground_backdrop_breeze #e8e4f3; +@define-color theme_header_foreground_breeze #e8e4f3; +@define-color theme_header_foreground_insensitive_backdrop_breeze #e8e4f3; +@define-color theme_header_foreground_insensitive_breeze #e8e4f3; +@define-color theme_hovering_selected_bg_color_breeze #6e56af; +@define-color theme_selected_bg_color_breeze #534183; +@define-color theme_selected_fg_color_breeze #ffffff; +@define-color theme_text_color_breeze #e8e4f3; +@define-color theme_titlebar_background_backdrop_breeze #1d1929; +@define-color theme_titlebar_background_breeze #1a1625; +@define-color theme_titlebar_background_light_breeze #1d1929; +@define-color theme_titlebar_foreground_backdrop_breeze #e8e4f3; +@define-color theme_titlebar_foreground_breeze #e8e4f3; +@define-color theme_titlebar_foreground_insensitive_backdrop_breeze #e8e4f3; +@define-color theme_titlebar_foreground_insensitive_breeze #e8e4f3; +@define-color theme_unfocused_base_color_breeze #16131f; +@define-color theme_unfocused_bg_color_breeze #1d1929; +@define-color theme_unfocused_fg_color_breeze #e8e4f3; +@define-color theme_unfocused_selected_bg_color_alt_breeze #2d2447; +@define-color theme_unfocused_selected_bg_color_breeze #2d2447; +@define-color theme_unfocused_selected_fg_color_breeze #e8e4f3; +@define-color theme_unfocused_text_color_breeze #e8e4f3; +@define-color theme_unfocused_view_bg_color_breeze #15121e; +@define-color theme_unfocused_view_text_color_breeze #5b5864; +@define-color theme_view_active_decoration_color_breeze #6e56af; +@define-color theme_view_hover_decoration_color_breeze #6e56af; +@define-color tooltip_background_breeze #1d1929; +@define-color tooltip_border_breeze #464251; +@define-color tooltip_text_breeze #e8e4f3; +@define-color unfocused_borders_breeze #464251; +@define-color unfocused_insensitive_borders_breeze #292535; +@define-color warning_color_backdrop_breeze #f67400; +@define-color warning_color_breeze #f67400; +@define-color warning_color_insensitive_backdrop_breeze #603213; +@define-color warning_color_insensitive_breeze #603213; diff --git a/configs/kde-style/files/.config/gtk-4.0/gtk.css b/configs/kde-style/files/.config/gtk-4.0/gtk.css new file mode 100644 index 0000000..c9763f7 --- /dev/null +++ b/configs/kde-style/files/.config/gtk-4.0/gtk.css @@ -0,0 +1 @@ +@import 'colors.css'; \ No newline at end of file diff --git a/configs/kde-style/kconfig/.config/gtk-3.0/settings.ini b/configs/kde-style/kconfig/.config/gtk-3.0/settings.ini new file mode 100644 index 0000000..a7a30b7 --- /dev/null +++ b/configs/kde-style/kconfig/.config/gtk-3.0/settings.ini @@ -0,0 +1,7 @@ +[Settings] +gtk-application-prefer-dark-theme=true +gtk-cursor-theme-name=Fiw-Qogir +gtk-cursor-theme-size=24 +gtk-font-name=JetBrainsMono Nerd Font Mono, 10 +gtk-icon-theme-name=breeze-dark +gtk-theme-name=Breeze diff --git a/configs/kde-style/kconfig/.config/gtk-4.0/settings.ini b/configs/kde-style/kconfig/.config/gtk-4.0/settings.ini new file mode 100644 index 0000000..8f7f17a --- /dev/null +++ b/configs/kde-style/kconfig/.config/gtk-4.0/settings.ini @@ -0,0 +1,6 @@ +[Settings] +gtk-application-prefer-dark-theme=true +gtk-cursor-theme-name=Fiw-Qogir +gtk-cursor-theme-size=24 +gtk-font-name=JetBrainsMono Nerd Font Mono, 10 +gtk-icon-theme-name=breeze-dark diff --git a/configs/kde-style/kconfig/.config/kdeglobals b/configs/kde-style/kconfig/.config/kdeglobals index 085367e..a95c009 100644 --- a/configs/kde-style/kconfig/.config/kdeglobals +++ b/configs/kde-style/kconfig/.config/kdeglobals @@ -135,8 +135,6 @@ ForegroundVisited=157,143,217 [General] AccentColor=110,86,175 ColorScheme=GentooPurple -TerminalApplication=kitty -TerminalService=kitty.desktop XftAntialias=true XftHintStyle=hintslight XftSubPixel=rgb diff --git a/configs/kitty/files/.config/kitty/kitty-common.conf b/configs/kitty/files/.config/kitty/kitty-common.conf index 58b8611..69f5d0a 100644 --- a/configs/kitty/files/.config/kitty/kitty-common.conf +++ b/configs/kitty/files/.config/kitty/kitty-common.conf @@ -5,7 +5,7 @@ italic_font auto bold_italic_font auto font_size 11.0 -linux_display_server wayland +linux_display_server auto background_blur 32 dynamic_background_opacity yes diff --git a/docs/kde-style.md b/docs/kde-style.md new file mode 100644 index 0000000..7ffd4af --- /dev/null +++ b/docs/kde-style.md @@ -0,0 +1,96 @@ +# KDE styling preset + +Fiw’s current appearance, restored through the optional `kde-style` config. +Dolphin, Spectacle, fonts and portable terminal configs have their own +checkboxes. The settings below describe the capture; no desktop settings +are applied by reading this reference. + +## Appearance + +| Setting | Captured value | +|---|---| +| Colour scheme | GentooPurple, derived from Breeze Dark | +| Accent / focus | `#6E56AF` | +| Window background | `#1D1929` | +| View background | `#16131F` | +| Normal text | `#E8E4F3` | +| Selection background | `#534183` | +| Icons | Breeze Dark | +| KDE look and feel | Breeze Dark | +| Cursor | Qogir, bundled under the name Fiw-Qogir | +| Window decorations | Utterly-Round-Dark, bundled Aurorae theme | +| Border size | No side borders | +| Decoration tooltips | Disabled | +| Animation duration factor | `0.25` | + +The complete colour groups live in +[kdeglobals](../configs/kde-style/kconfig/.config/kdeglobals). Theme and cursor +assets are included in the same config, with their original licence notices. +Breeze and Aurorae come through the normal Plasma package dependencies. +No terminal association is set by the appearance preset. + +## Fonts + +| Use | Family | Size | +|---|---|---| +| General UI, menus, toolbar and window title | JetBrainsMono Nerd Font Mono | 10 pt | +| Fixed-width text | JetBrainsMono Nerd Font Mono | 10 pt | +| Small readable text | JetBrainsMono Nerd Font Mono | 8 pt | +| Kitty | JetBrainsMono Nerd Font Mono | 11 pt | + +KDE uses antialiasing, slight hinting and RGB subpixel rendering as captured. +The separate `fonts` checkbox installs Regular, Bold, Italic and Bold Italic +under the user’s font directory; keep it selected to reproduce this typography +unless the same family is already installed. Fonts work independently of KDE. + +## GTK styling + +The KDE style checkbox also restores the captured GTK 3 and GTK 4 preferences: + +- Dark preference, Breeze Dark icons and the same 10 pt font. +- Fiw-Qogir cursor at size 24. +- GTK 3’s Breeze theme preference. +- The current `gtk.css` imports and generated purple `colors.css` palette. + +Other settings in each `settings.ini` are preserved. Existing CSS files follow +the same conflict, backup and update rules as other configs. Applications use +these colours and preferences according to their toolkit’s theme support. + +## Dolphin and Spectacle + +These are individually optional configs. + +| Config | Captured preferences | +|---|---| +| Dolphin | Menu bar hidden; toolbar with back, forward, up, home, location, search and menu; fixed 22 px Places icons; sidebar/dock state; case-insensitive filename filtering | +| Dolphin window rule | 96% active opacity, 92% inactive opacity; applies to Dolphin windows | +| Spectacle | Annotation tool selection; release-to-capture disabled | + +The toolbar XML includes the captured app action properties. The sidebar/dock +state is Qt’s saved layout; it does not copy tabs, bookmarks or file history. +KWin rules merge with other target rules instead of replacing their list. + +## Portable terminal styling + +Fish, Kitty, Neovim and Fastfetch stay separate from KDE settings: + +- **Fish:** aliases, Fastfetch greeting and command completion notifications. +- **Kitty:** lavender palette, padding, 50% opacity in the main profile and + 62% in the brighter profile. Display selection is automatic for Wayland/X11; + blur is used where the compositor supports it. +- **Neovim:** transparent backgrounds and purple highlights; uses an existing + Catppuccin Mocha plugin when available, otherwise the built-in dark theme. +- **Fastfetch:** the current tree layout and colours, with its built-in Gentoo logo. + +## Applying the capture + +Select the configs in `./install` and review the preview. They can be restored +without selecting package installation groups, for applications already present. +For KDE configs, log out of Plasma and apply from a TTY so the session cannot +rewrite the files. The installer checks this before making changes. + +Configuration conflicts prompt apply or keep. Replacements receive backups; +updates preserve local edits and leave proposed changes in `.new` files. +Panels, widgets, wallpaper and output-specific tiling layouts stay local. +The [shortcut preset](shortcuts.md) separately restores the captured desktop +count and rows, without copying desktop or monitor IDs. diff --git a/docs/shortcuts.md b/docs/shortcuts.md index 4515bfe..11a02d5 100644 --- a/docs/shortcuts.md +++ b/docs/shortcuts.md @@ -42,8 +42,9 @@ The native Spectacle bindings are unassigned to avoid competing actions. The desktop-move bindings are stored as literal symbols (`!`, `@`, `#`). On a US layout these usually mean Shift+1/2/3; other layouts can differ. The keyboard-layout preset contains US English, Russian and Spanish; -`Meta+Alt+Space` cycles through them. Shortcut restoration does not -create three virtual desktops or activities on a new installation. +`Meta+Alt+Space` cycles through them. The shortcut preset also restores +the captured virtual-desktop count and rows. Device IDs are not copied; +KWin creates IDs when needed and retains existing target IDs. ## Captured choices @@ -56,6 +57,9 @@ in the default column), Minimize (`Meta+PgDown`), Restore recorded global actions are unassigned. `Meta+1/2/3` are used for desktops, with the corresponding task-manager shortcuts disabled. +Captured desktop layout: **1 desktop(s), 1 row(s)**. +Bindings for desktops 1–3 are retained exactly as configured. + ## All assigned actions ### Keyboard Layout Switcher diff --git a/tools/capture.py b/tools/capture.py index 92002a3..56537a9 100644 --- a/tools/capture.py +++ b/tools/capture.py @@ -85,7 +85,20 @@ def capture(): + ['[General]', '[Icons]', '[KDE]', '[WM]']) p = REPO / 'configs/kde-style/kconfig/.config/kdeglobals' p.write_text('\n'.join(line for line in p.read_text().splitlines() - if not line.startswith(('ColorSchemeHash=', 'LastUsedCustomAccentColor='))) + '\n') + if not line.startswith(('ColorSchemeHash=', 'LastUsedCustomAccentColor=', + 'TerminalApplication=', 'TerminalService='))) + '\n') + gtk_keys = ['gtk-theme-name', 'gtk-icon-theme-name', 'gtk-font-name', + 'gtk-cursor-theme-name', 'gtk-cursor-theme-size', + 'gtk-application-prefer-dark-theme'] + for version in ['3.0', '4.0']: + for name in ['gtk.css', 'colors.css']: + copy('kde-style', f'.config/gtk-{version}/{name}') + relative = f'.config/gtk-{version}/settings.ini' + kconfig('kde-style', relative, keys={'[Settings]': gtk_keys}) + dest = REPO / 'configs/kde-style/kconfig' / relative + if dest.is_file(): + dest.write_text(dest.read_text().replace('gtk-cursor-theme-name=Qogir', + 'gtk-cursor-theme-name=Fiw-Qogir')) kconfig('kde-style', '.config/kcminputrc', keys={'[Mouse]': ['cursorTheme']}) kconfig('kde-style', '.config/kwinrc', groups=['[org.kde.kdecoration2]']) kconfig('dolphin', '.config/dolphinrc', groups=['[KFileDialog Settings]', '[MainWindow]']) @@ -98,6 +111,7 @@ def capture(): copy('kde-style', '.local/share/color-schemes/GentooPurple.colors') kconfig('kde-shortcuts', '.config/kglobalshortcutsrc') kconfig('kde-shortcuts', '.config/kxkbrc', groups=['[Layout]']) + kconfig('kde-shortcuts', '.config/kwinrc', keys={'[Desktops]': ['Number', 'Rows']}) for name in ['net.local.kitty.desktop', 'net.local.fiw-shot-region.desktop', 'net.local.fiw-shot-screen.desktop']: copy('kde-shortcuts', '.local/share/applications/' + name, lambda t: t.replace('Exec=' + str(HOME) + '/.local/bin/fiw-shot', 'Exec="{{HOME}}/.local/bin/fiw-shot"')) @@ -108,7 +122,9 @@ def capture(): "if type -q fiw-update\n alias update='sudo fiw-update'\nend")) copy('fish', '.config/fish/conf.d/done.fish') for name in ['kitty.conf', 'kitty-main.conf', 'kitty-bright.conf', 'kitty-common.conf']: - copy('kitty', '.config/kitty/' + name) + copy('kitty', '.config/kitty/' + name, + lambda t: re.sub(r'(?m)^linux_display_server\s+wayland\s*$', + 'linux_display_server auto', t)) copy('neovim', '.config/nvim/init.lua') # Keep the layout; the built-in Gentoo logo also works outside Kitty. data = json.loads((HOME / '.config/fastfetch/config.jsonc').read_text()) diff --git a/tools/shortcuts.py b/tools/shortcuts.py index ee481e9..d8bd58b 100644 --- a/tools/shortcuts.py +++ b/tools/shortcuts.py @@ -64,8 +64,9 @@ def generate(): 'The desktop-move bindings are stored as literal symbols (`!`, `@`, `#`).', 'On a US layout these usually mean Shift+1/2/3; other layouts can differ.', 'The keyboard-layout preset contains US English, Russian and Spanish;', - '`Meta+Alt+Space` cycles through them. Shortcut restoration does not', - 'create three virtual desktops or activities on a new installation.', '', + '`Meta+Alt+Space` cycles through them. The shortcut preset also restores', + 'the captured virtual-desktop count and rows. Device IDs are not copied;', + 'KWin creates IDs when needed and retains existing target IDs.', '', '## Captured choices', ''] lookup = {(r[0], r[1]): r for r in entries} highlights = [ @@ -107,6 +108,10 @@ def generate(): for key, owners in duplicates.items(): lines.append('- ' + keys([key]) + ': ' + cell('; '.join(owners))) lines.append('') + desktop = sections((SOURCE.parent / 'kwinrc').read_text()).get('[Desktops]', {}) + lines += ['Captured desktop layout: **' + desktop.get('Number', 'unspecified') + + ' desktop(s), ' + desktop.get('Rows', 'unspecified') + ' row(s)**.', + 'Bindings for desktops 1–3 are retained exactly as configured.', ''] lines += ['## All assigned actions', ''] grouped = defaultdict(list) for record in entries: