From 369fadd74b59b1b6b2d9d8b6dbd7c995648632be Mon Sep 17 00:00:00 2001 From: Pico Date: Fri, 20 Mar 2026 09:00:33 +0300 Subject: [PATCH 01/18] add click-to-mute on app icons in the volume mixer --- .../volumeMixer/VolumeMixerEntry.qml | 53 +++++++++++++++---- 1 file changed, 43 insertions(+), 10 deletions(-) diff --git a/dots/.config/quickshell/ii/modules/ii/sidebarRight/volumeMixer/VolumeMixerEntry.qml b/dots/.config/quickshell/ii/modules/ii/sidebarRight/volumeMixer/VolumeMixerEntry.qml index a871c05c6..f616273ed 100644 --- a/dots/.config/quickshell/ii/modules/ii/sidebarRight/volumeMixer/VolumeMixerEntry.qml +++ b/dots/.config/quickshell/ii/modules/ii/sidebarRight/volumeMixer/VolumeMixerEntry.qml @@ -5,6 +5,7 @@ import QtQuick import QtQuick.Layouts import Quickshell import Quickshell.Services.Pipewire +import Qt5Compat.GraphicalEffects Item { id: root @@ -20,19 +21,51 @@ Item { anchors.fill: parent spacing: 6 - Image { + Item { property real size: 36 Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - visible: source != "" - sourceSize.width: size - sourceSize.height: size - source: { - let icon; - icon = AppSearch.guessIcon(root.node?.properties["application.icon-name"] ?? ""); - if (AppSearch.iconExists(icon)) + Layout.preferredWidth: size + Layout.preferredHeight: size + + Image { + id: iconImg + anchors.fill: parent + visible: false + sourceSize.width: parent.size + sourceSize.height: parent.size + source: { + let icon; + icon = AppSearch.guessIcon(root.node?.properties["application.icon-name"] ?? ""); + if (AppSearch.iconExists(icon)) + return Quickshell.iconPath(icon, "image-missing"); + icon = AppSearch.guessIcon(root.node?.properties["node.name"] ?? ""); return Quickshell.iconPath(icon, "image-missing"); - icon = AppSearch.guessIcon(root.node?.properties["node.name"] ?? ""); - return Quickshell.iconPath(icon, "image-missing"); + } + } + + Desaturate { + anchors.fill: iconImg + source: iconImg + desaturation: root.node?.audio.muted ? 1.0 : 0.0 + visible: iconImg.source != "" + opacity: root.node?.audio.muted ? 0.4 : 1.0 + + Behavior on opacity { NumberAnimation { duration: 150 } } + Behavior on desaturation { NumberAnimation { duration: 150 } } + } + + MaterialSymbol { + anchors.centerIn: parent + visible: root.node?.audio.muted ?? false + text: root.node?.isSink ? "volume_off" : "mic_off" + font.pixelSize: 22 + color: Appearance.colors.colError + } + + MouseArea { + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + onClicked: root.node.audio.muted = !root.node.audio.muted } } From b306d308b7ff0b3fedfbb2d6ffd224352699f09e Mon Sep 17 00:00:00 2001 From: xleb-normal Date: Fri, 20 Mar 2026 14:18:36 +0500 Subject: [PATCH 02/18] Update Russian localization and add missing strings #2 --- .../quickshell/ii/translations/ru_RU.json | 72 ++++++++++--------- 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/dots/.config/quickshell/ii/translations/ru_RU.json b/dots/.config/quickshell/ii/translations/ru_RU.json index 3b9e61be3..703e29351 100644 --- a/dots/.config/quickshell/ii/translations/ru_RU.json +++ b/dots/.config/quickshell/ii/translations/ru_RU.json @@ -41,13 +41,13 @@ "Region height": "Высота области", "Load chat": "Загрузить чат", "Gives the model search capabilities (immediately)": "Вкл. поиск для модели (сразу)", - "Depends on workspace": "Зависит от стола", + "Depends on workspace": "Зависит от пространства", "Enter password": "Введите пароль", "Local only": "Только локальные", "at": "в", "Math": "Математика", "Consider plugging in your device": "Подключите зарядку", - "Workspaces shown": "Видимые столы", + "Workspaces shown": "Видимые пространство", "Place the corners to trigger at the bottom": "Триггер-углы снизу", "No API key\nSet it with /key YOUR_API_KEY": "Нет API-ключа\nУстановите: /key ВАШ_КЛЮЧ", "Auto (System)": "Авто (система)", @@ -57,7 +57,7 @@ "%1 notifications": "%1 уведомлений", "Region width": "Ширина области", "Max allowed increase": "Макс. Разница", - "Enable translator": "Вкл. переводчик", + "Enable translator": "Переводчик в левой панели", "Constantly rotate": "Постоянное вращение", "Automatically suspends the system when battery is low": "Авто-сон при низком зар.", "Cannot find a GPS service. Using the fallback method instead.": "GPS не найден. Резервный метод.", @@ -85,7 +85,7 @@ "Reset": "Ресет", "Back": "Назад", "Dark/Light toggle": "Тоггл темы", - "12h am/pm": "12ч AM/PM", + "12h am/pm": "12ч am/pm", "Download complete": "Загрузка завершена", "Enable blur": "Вкл. размытие", "Second hand": "Стиль секундной стрелки", @@ -122,7 +122,7 @@ "Configuration": "Конфиг", "Keep system awake": "Оставлять систему включённой", "Unknown command:": "Неизв. команда:", - "Anime boorus": "Аниме-бору", + "Anime boorus": "Аниме-боору", "To Do:": "Задачи:", "Uses Gemini to categorize the wallpaper then picks a preset based on it.\nYou'll need to set Gemini API key on the left sidebar first.\nImages are downscaled for performance, but just to be safe,\ndo not select wallpapers with sensitive information.": "Gemini определяет тип обоев и подбирает пресет.\nСначала укажите API-ключ Gemini в левой панели.\nИзображения уменьшаются для производительности -\nне выбирайте обои с конфиденциальными данными.", "Bottom": "Снизу", @@ -132,7 +132,7 @@ "Format": "Формат", "Make sure your player has MPRIS support\nor try turning off duplicate player filtering": "Убедитесь, что плеер поддерживает MPRIS\nили отключите в конфиге «filterDuplicatePlayers»", "Pause": "Пауза", - "Desktop": "Стол", + "Desktop": "Рабочий стол", "Conflicts with the shell's system tray implementation": "Конфликт с треем оболочки", "Your package manager is running": "Запущен пакетный менеджер", "Conflicts with the shell's notification implementation": "Конфликт с уведомлениями оболочки", @@ -186,10 +186,10 @@ "Nothing here!": "Тут пусто!", "Overview": "Обзор", "Random: osu! seasonal": "Случайные: сезонные osu!", - "If you want to somehow use fingerprint unlock...": "Если хотите разблокировку по отпечатку...", + "If you want to somehow use fingerprint unlock...": "Если хотите разблокировку по отпечатку пальца...", "Minute hand": "Стиль минутной стрелки", "Notifications": "Уведомления", - "Enable if you want clocks to show seconds accurately": "Вкл. для точных секунд", + "Enable if you want clocks to show seconds accurately": "Включите для отображения секунд на часах", "Timer": "Таймер", "System prompt": "Системный промпт", "Classic": "Классический", @@ -202,7 +202,7 @@ "Date style": "Стиль даты", "System": "Система", "Usage: %1tool TOOL_NAME": "Исп: %1tool ИМЯ_ИНСТРУМЕНТА", - "Workspaces": "Столы на панели", + "Workspaces": "Пространства на панели", "Calendar": "Дата", "**Instructions**: Log into Mistral account, go to Keys on the sidebar, click Create new key": "**Инструкция**: войдите в Mistral, откройте «Ключи» на боковой панели, нажмите «Создать ключ»", "Volume limit": "Порог звука", @@ -296,7 +296,7 @@ "Loaded the following system prompt\n\n---\n\n%1": "Загружен системный промпт\n\n---\n\n%1", "Show next time": "Показать в след. раз", "Current tool: %1\nSet it with %2tool TOOL": "Текущий инструмент: %1\nУстановить: %2tool ИНСТРУМЕНТ", - "Unread indicator: show count": "Счётчик непрочит.", + "Unread indicator: show count": "Счётчик непрочитанных", "That didn't work. Tips:\n- Check your tags and NSFW settings\n- If you don't have a tag in mind, type a page number": "Не удалось. Советы:\n- Проверьте теги и настройки NSFW\n- Если тег неизвестен, введите номер страницы", "Dots": "С точками", "Cloudflare WARP (1.1.1.1)": "Cloudflare WARP (1.1.1.1)", @@ -354,7 +354,7 @@ "Page %1": "Страница %1", "Feels like %1": "Ощущается как %1", "Distro": "Дистрибутив", - "Transparency": "Вкл. прозрачность", + "Transparency": "Включить прозрачность", "%1 • %2 tasks": "%1 • %2 задач", "Markdown test": "Тест Markdown", "Invalid tool. Supported tools:\n- %1": "Неверный инструмент. Поддерживаемые:\n- %1", @@ -374,18 +374,18 @@ "Reject": "Отклонить", "Set API key": "Установить API-ключ", ". Notes for Zerochan:\n- You must enter a color\n- Set your zerochan username in `sidebar.booru.zerochan.username` config option. You [might be banned for not doing so](https://www.zerochan.net/api#:~:text=The%20request%20may%20still%20be%20completed%20successfully%20without%20this%20custom%20header%2C%20but%20your%20project%20may%20be%20banned%20for%20being%20anonymous.)!": ". Заметки для Zerochan:\n- Необходимо указать цвет\n- Укажите имя пользователя в `sidebar.booru.zerochan.username`. [Без этого вас могут заблокировать](https://www.zerochan.net/api#:~:text=The%20request%20may%20still%20be%20completed%20successfully%20without%20this%20custom%20header%2C%20but%20your%20project%20may%20be%20banned%20for%20being%20anonymous)!", - "Content": "Контента", - "Pomodoro": "Таймер", + "Content": "В контенте", + "Pomodoro": "Помодоро", "Vertical": "Вертикальный", "Pick a wallpaper": "Выбрать обои", "Load chat from %1": "Загрузить чат из %1", - "Launch on startup": "Запускать при старте", + "Launch on startup": "Запускать при старте системы", "Add": "Добавить", "Style: general": "Основное", "Use Levenshtein distance-based algorithm instead of fuzzy": "Алг. Левенштейна вместо нечёткого", "Shell & utilities theming must also be enabled": "Также нужна тема оболочки", - "Workspace": "Стол", - "Translator": "Переводчик", + "Workspace": "Пространство", + "Translator": "Перевод", "Free:": "Есть:", "🌿 Long break: %1 minutes": "🌿 Длинный перерыв: %1 мин", "Value scroll": "Скролл значений", @@ -468,7 +468,7 @@ "Generate translation with Gemini": "Сгенерировать перевод с Gemini", "Generating...\nDon't close this window!": "Генерация...\nНе закрывайте окно!", "Generate\nTypically takes 2 minutes": "Сгенерировать\nОбычно ~2 мин", - "Use system file picker": "Сист. выборщик", + "Use system file picker": "Системный выборщик", "Wallpaper selector": "Выбор обоев", "When the previous option is off and this is on,\nyou can still hover the corner's end to open sidebar,\nand the remaining area can be used for volume/brightness scroll": "Если предыдущий параметр выключен, а этот включён,\nможно навести на край угла для открытия панели,\nоставшаяся область работает для прокрутки громкости/яркости", "Copy path": "Копировать путь", @@ -482,23 +482,23 @@ "Show aim lines": "Показать линии прицела", "Why this is cool:\nFor non-0 values, it won't trigger when you reach the\nscreen corner along the horizontal edge, but it will when\nyou do along the vertical edge": "Зачем это нужно:\nПри ненулевых значениях не срабатывает при достижении угла\nпо горизонтальному краю, но срабатывает по вертикальному", "Please charge!\nAutomatic suspend triggers at %1%": "Зарядите устройство!\nАвто-сон при %1%", - "Example use case: eroge on one workspace, dark Discord window on another": "Пример: эроге на одном рабочем столе, тёмный Discord на другом", + "Example use case: eroge on one workspace, dark Discord window on another": "Пример: eroge на одном пространстве, тёмный Discord на другом", "Couldn't recognize music": "Музыка не распознана", "Automatic": "Автоматически", - "Hint target regions": "Обводка областей у...", + "Hint target regions": "Обводка областей", "Eye protection": "Защита глаз", "Layers": "Слоёв", "Listening...": "Слушаю...", "LMB to enable/disable\nRMB to toggle size\nScroll to swap position": "ЛКМ - вкл/выкл\nПКМ - изменить размер\nПрокрутка - поменять позицию", "Identify Music": "Определить музыку", - "Quick toggles": "Быстрые тогглы", + "Quick toggles": "Быстрые тогглы (стиль)", "Hide sussy/anime wallpapers": "Скрывать подозр./аниме обои", "Android": "Android", "Show": "Показать", "Muted": "Мут", "Audio input | Right-click for volume mixer & device selector": "Аудиовход | ПКМ - микшер и выбор устройства", "Region selector (screen snipping/Google Lens)": "Выбор области (Скрин / Google Lens)", - "Total duration timeout (s)": "Макс. длит. (с)", + "Total duration timeout (s)": "Макс. длительность (сек)", "Music Recognition": "Поиск музыки", "Night Light | Right-click to configure": "Ночной свет | ПКМ для настройки", "Anti-flashbang (experimental)": "Анти-вспышка (эксперим)", @@ -512,7 +512,7 @@ "Content region": "Обл. контента", "Internet": "Интернет", "Record": "Запись", - "Circle selection": "Круговое выдел.", + "Circle selection": "Круговое обведение", "Edit quick toggles": "Изменить быстрые тогглы", "Virtual Keyboard": "Вирт. клавиатура", "Music Recognized": "Музыка распознана", @@ -545,7 +545,7 @@ "Click to cycle through power profiles": "Клик - смена профиля питания", "Recognize music | Right-click to toggle source": "Найти музыку | ПКМ - сменить источник", "Use old sine wave cookie implementation": "Старая реализация Cookie (синусоида)", - "Rectangular selection": "Обыч. выделение", + "Rectangular selection": "Обычное выделение", "Audio output": "Аудиовыход", "Circle to Search": "Обведите для поиска", "Audio output | Right-click for volume mixer & device selector": "Аудиовыход | ПКМ - микшер и выбор устройства", @@ -562,7 +562,7 @@ "Stroke width": "Толщина обводки", "Use varying shapes for password characters": "Разные фигуры для симв. пароля", "Battery full": "Батарея заряжена", - "Image source": "Источник изобр.", + "Image source": "Источник изображения (ссылка)", "Restart": "Перезапустить", "Close (Esc)": "Закрыть (Esc)", "Actions": "Действия", @@ -586,7 +586,7 @@ "Notes": "Заметки", "File Explorer": "Проводник", "Stopping...": "Остановка...", - "Used for code and terminal": "Для кода и терм.", + "Used for code and terminal": "Для кода и терминала", "Video Recording Path": "Путь для видеозаписей", "Enjoy your empty sidebar...": "Наслаждайтесь пустой панелью...", "Cookie": "Cookie MD3", @@ -606,14 +606,14 @@ "Parallax": "Параллакс", "Move left": "Переместить влево", "Anti-flashbang": "Анти-вспышка", - "Desktop %1": "Стол %1", + "Desktop %1": "Рабочий Стол %1", "%1\nInternet access": "%1\nДоступ в интернет", "(Plugged in)": "(Подключено)", "Off": "Выкл", - "Overlay: General": "Оверлей: общий", + "Overlay: General": "Игровой оверлей", "Enable opening zoom animation": "Анимация зума при открытии", "More Internet settings": "Доп. сетевые настройки", - "Nerd font icons": "Иконки Nerd Font", + "Nerd font icons": "Иконки Nerd Font (эмодзи)", "Display modifiers and keys in multiple keycap (e.g., \"Ctrl + A\" instead of \"Ctrl A\" or \"󰘴 + A\" instead of \"󰘴 A\")": "Показывать модификаторы с разделителем (напр, «Ctrl + A» вместо «Ctrl A»)", "Change password": "Изменить пароль", "Check interval (mins)": "Интервал пров. (мин)", @@ -633,7 +633,7 @@ "Numbers font": "Шрифт чисел", "Move right": "Переместить вправо", "Unknown Application": "Неизв. приложение", - "Used for decorative/expressive text": "Для декор./выразит. текста", + "Used for decorative/expressive text": "Для декоротивного / выразительного текста", "Used for reading large blocks of text": "Для чтения больших блоков", "Type /key to get started with online models\nCtrl+O to expand sidebar\nCtrl+P to pin sidebar\nCtrl+D to detach sidebar": "Введите /key для онлайн-моделей\nCtrl+O - расширить панель\nCtrl+P - закрепить панель\nCtrl+D - открепить панель", "Health:": "Здоровье:", @@ -649,13 +649,13 @@ "Unpin from Start": "Открепить из пуска", "Adjust the color temperature": "Цветовая температура", "Han chars": "Кандзи", - "Show only when locked": "Только при блокировке", + "Show only when locked": "Только на заблокированном блокировки", "Widget: Weather": "Виджет погоды", "Right to left": "Справа налево", - "New desktop": "Новый стол", + "New desktop": "Новый рабочий стол", "Local account": "Локальная уч. запись", "Super key symbol": "Символ клавиши Super", - "Used for displaying numbers": "Для отображ. чисел", + "Used for displaying numbers": "Для отображения чисел", "Fonts": "Шрифты", "Left to right": "Слева направо", "Set FPS limit": "Лимит FPS", @@ -669,7 +669,7 @@ "Sign out": "Выйти", "Overlay: Crosshair": "Оверлей: прицел", "Shut down": "Выключить", - "Show this window on all desktops": "На всех столах", + "Show this window on all desktops": "На всех рабочих столах", "Quick markup (Ctrl+E)": "Быстрая разметка (Ctrl+E)", "Sound input": "Звуковой вход", "Manage accounts": "Упр. учётными записями", @@ -678,7 +678,7 @@ "RAM": "ОЗУ", "Commands": "Команды", "Title font": "Шрифт заголовка", - "Most busy": "Самый загруж.", + "Most busy": "Более загруж.", "Press Super+G to open the overlay and pin the crosshair": "Super+G - открыть оверлей и закрепите прицел", "Search for apps": "Поиск приложений", "See fewer": "Показать меньше", @@ -750,5 +750,7 @@ "Tu": "Вт/*keep*/", "Sa": "Сб/*keep*/", "Fr": "Пт/*keep*/", - "Font family name": "Назв. семейства" + "Font family name": "Назв. семейства", + "Pin": "Закреп", + "Unpin": "Откреп" } From fc17e29ebf8ae1481900e773836d654c44047695 Mon Sep 17 00:00:00 2001 From: xleb-normal Date: Sat, 21 Mar 2026 01:44:11 +0500 Subject: [PATCH 03/18] Russian localization update, minor improvements --- dots/.config/quickshell/ii/translations/ru_RU.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dots/.config/quickshell/ii/translations/ru_RU.json b/dots/.config/quickshell/ii/translations/ru_RU.json index 703e29351..0c4b337c7 100644 --- a/dots/.config/quickshell/ii/translations/ru_RU.json +++ b/dots/.config/quickshell/ii/translations/ru_RU.json @@ -468,7 +468,7 @@ "Generate translation with Gemini": "Сгенерировать перевод с Gemini", "Generating...\nDon't close this window!": "Генерация...\nНе закрывайте окно!", "Generate\nTypically takes 2 minutes": "Сгенерировать\nОбычно ~2 мин", - "Use system file picker": "Системный выборщик", + "Use system file picker": "Системный файл. менеджер", "Wallpaper selector": "Выбор обоев", "When the previous option is off and this is on,\nyou can still hover the corner's end to open sidebar,\nand the remaining area can be used for volume/brightness scroll": "Если предыдущий параметр выключен, а этот включён,\nможно навести на край угла для открытия панели,\nоставшаяся область работает для прокрутки громкости/яркости", "Copy path": "Копировать путь", @@ -491,7 +491,7 @@ "Listening...": "Слушаю...", "LMB to enable/disable\nRMB to toggle size\nScroll to swap position": "ЛКМ - вкл/выкл\nПКМ - изменить размер\nПрокрутка - поменять позицию", "Identify Music": "Определить музыку", - "Quick toggles": "Быстрые тогглы (стиль)", + "Quick toggles": "Быстрые тогглы", "Hide sussy/anime wallpapers": "Скрывать подозр./аниме обои", "Android": "Android", "Show": "Показать", @@ -512,7 +512,7 @@ "Content region": "Обл. контента", "Internet": "Интернет", "Record": "Запись", - "Circle selection": "Круговое обведение", + "Circle selection": "Круговое выдел.", "Edit quick toggles": "Изменить быстрые тогглы", "Virtual Keyboard": "Вирт. клавиатура", "Music Recognized": "Музыка распознана", @@ -649,7 +649,7 @@ "Unpin from Start": "Открепить из пуска", "Adjust the color temperature": "Цветовая температура", "Han chars": "Кандзи", - "Show only when locked": "Только на заблокированном блокировки", + "Show only when locked": "Отображать только при блокировке", "Widget: Weather": "Виджет погоды", "Right to left": "Справа налево", "New desktop": "Новый рабочий стол", From 42f14b92d0d25a25d3b80f524c8852d86631bd02 Mon Sep 17 00:00:00 2001 From: jwihardi Date: Sat, 21 Mar 2026 21:29:48 -0400 Subject: [PATCH 04/18] gentoo updated quickshell ebuild --- ...9-r5.ebuild => illogical-impulse-quickshell-git-r6.ebuild} | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) rename sdata/dist-gentoo/illogical-impulse-quickshell-git/{illogical-impulse-quickshell-git-9999-r5.ebuild => illogical-impulse-quickshell-git-r6.ebuild} (97%) diff --git a/sdata/dist-gentoo/illogical-impulse-quickshell-git/illogical-impulse-quickshell-git-9999-r5.ebuild b/sdata/dist-gentoo/illogical-impulse-quickshell-git/illogical-impulse-quickshell-git-r6.ebuild similarity index 97% rename from sdata/dist-gentoo/illogical-impulse-quickshell-git/illogical-impulse-quickshell-git-9999-r5.ebuild rename to sdata/dist-gentoo/illogical-impulse-quickshell-git/illogical-impulse-quickshell-git-r6.ebuild index f7bc4a155..aa9bdbc69 100644 --- a/sdata/dist-gentoo/illogical-impulse-quickshell-git/illogical-impulse-quickshell-git-9999-r5.ebuild +++ b/sdata/dist-gentoo/illogical-impulse-quickshell-git/illogical-impulse-quickshell-git-r6.ebuild @@ -9,7 +9,7 @@ DESCRIPTION="Toolkit for building desktop widgets using QtQuick" HOMEPAGE="https://quickshell.org/" EGIT_REPO_URI="https://github.com/quickshell-mirror/quickshell.git" -EGIT_COMMIT="6e17efab83d3a5ad5d6e59bc08d26095c6660502" +EGIT_COMMIT="7511545ee20664e3b8b8d3322c0ffe7567c56f7a" KEYWORDS="~amd64 ~arm64 ~x86" LICENSE="LGPL-3" @@ -22,6 +22,8 @@ RDEPEND=" dev-qt/qtsvg:6 dev-qt/qt5compat:6 + dev-cpp/cpptrace + dev-qt/qtimageformats:6 dev-qt/qtmultimedia:6 dev-qt/qtpositioning:6 From b61ae3abe7aee68ab41a8e7684c80df8b13b2a10 Mon Sep 17 00:00:00 2001 From: jwihardi Date: Sat, 21 Mar 2026 21:30:10 -0400 Subject: [PATCH 05/18] gentoo updated keyword --- sdata/dist-gentoo/keywords | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sdata/dist-gentoo/keywords b/sdata/dist-gentoo/keywords index 238200763..0d4eaaf5e 100644 --- a/sdata/dist-gentoo/keywords +++ b/sdata/dist-gentoo/keywords @@ -54,3 +54,5 @@ media-fonts/readex-pro media-fonts/rubik-vf app-misc/songrec dev-cpp/glaze +dev-cpp/cpptrace +dev-libs/libdwarf From 9dcf63b54a5489f118a270322af524ff35377480 Mon Sep 17 00:00:00 2001 From: jwihardi Date: Sat, 21 Mar 2026 21:37:30 -0400 Subject: [PATCH 06/18] disabled breakpad, i3, and i3-ipc by default --- .../illogical-impulse-quickshell-git-r6.ebuild | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdata/dist-gentoo/illogical-impulse-quickshell-git/illogical-impulse-quickshell-git-r6.ebuild b/sdata/dist-gentoo/illogical-impulse-quickshell-git/illogical-impulse-quickshell-git-r6.ebuild index aa9bdbc69..372a9ad21 100644 --- a/sdata/dist-gentoo/illogical-impulse-quickshell-git/illogical-impulse-quickshell-git-r6.ebuild +++ b/sdata/dist-gentoo/illogical-impulse-quickshell-git/illogical-impulse-quickshell-git-r6.ebuild @@ -15,7 +15,7 @@ KEYWORDS="~amd64 ~arm64 ~x86" LICENSE="LGPL-3" SLOT="0" # Upstream recommends leaving all build options enabled by default -IUSE="+breakpad +jemalloc +sockets +wayland +layer-shell +session-lock +toplevel-management +screencopy +X +pipewire +tray +mpris +pam +hyprland +hyprland-global-shortcuts +hyprland-focus-grab +i3 +i3-ipc +bluetooth" +IUSE="-breakpad +jemalloc +sockets +wayland +layer-shell +session-lock +toplevel-management +screencopy +X +pipewire +tray +mpris +pam +hyprland +hyprland-global-shortcuts +hyprland-focus-grab -i3 -i3-ipc +bluetooth" RDEPEND=" dev-qt/qtbase:6 From 15a56bdce3070cc8b1a0d7e3bc51e4fe5436b899 Mon Sep 17 00:00:00 2001 From: Pico Date: Sun, 22 Mar 2026 10:40:07 +0300 Subject: [PATCH 07/18] use text color for mute icon and promote root to MouseArea --- .../volumeMixer/VolumeMixerEntry.qml | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/dots/.config/quickshell/ii/modules/ii/sidebarRight/volumeMixer/VolumeMixerEntry.qml b/dots/.config/quickshell/ii/modules/ii/sidebarRight/volumeMixer/VolumeMixerEntry.qml index f616273ed..5e4fec97b 100644 --- a/dots/.config/quickshell/ii/modules/ii/sidebarRight/volumeMixer/VolumeMixerEntry.qml +++ b/dots/.config/quickshell/ii/modules/ii/sidebarRight/volumeMixer/VolumeMixerEntry.qml @@ -7,8 +7,10 @@ import Quickshell import Quickshell.Services.Pipewire import Qt5Compat.GraphicalEffects -Item { +MouseArea { id: root + cursorShape: Qt.PointingHandCursor + onClicked: root.node.audio.muted = !root.node.audio.muted required property PwNode node PwObjectTracker { objects: [root.node] @@ -47,25 +49,27 @@ Item { anchors.fill: iconImg source: iconImg desaturation: root.node?.audio.muted ? 1.0 : 0.0 - visible: iconImg.source != "" + visible: iconImg.source !== "" opacity: root.node?.audio.muted ? 0.4 : 1.0 - - Behavior on opacity { NumberAnimation { duration: 150 } } - Behavior on desaturation { NumberAnimation { duration: 150 } } + + Behavior on opacity { + NumberAnimation { + duration: 150 + } + } + Behavior on desaturation { + NumberAnimation { + duration: 150 + } + } } MaterialSymbol { anchors.centerIn: parent visible: root.node?.audio.muted ?? false text: root.node?.isSink ? "volume_off" : "mic_off" - font.pixelSize: 22 - color: Appearance.colors.colError - } - - MouseArea { - anchors.fill: parent - cursorShape: Qt.PointingHandCursor - onClicked: root.node.audio.muted = !root.node.audio.muted + iconSize: 22 + color: Appearance.colors.colOnLayer1 } } From 6e769779764d476abea3c6c8a195b73b0988679a Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sun, 22 Mar 2026 10:10:01 +0100 Subject: [PATCH 08/18] region selector: breathing border --- .../RectCornersSelectionDetails.qml | 40 +- .../ii/regionSelector/RegionSelection.qml | 483 ++++++++++-------- .../ii/regionSelector/RegionSelector.qml | 4 + 3 files changed, 282 insertions(+), 245 deletions(-) diff --git a/dots/.config/quickshell/ii/modules/ii/regionSelector/RectCornersSelectionDetails.qml b/dots/.config/quickshell/ii/modules/ii/regionSelector/RectCornersSelectionDetails.qml index 3682e7d51..7bc7669d1 100644 --- a/dots/.config/quickshell/ii/modules/ii/regionSelector/RectCornersSelectionDetails.qml +++ b/dots/.config/quickshell/ii/modules/ii/regionSelector/RectCornersSelectionDetails.qml @@ -14,11 +14,14 @@ Item { required property color overlayColor property bool showAimLines: Config.options.regionSelector.rect.showAimLines + property bool breathingBorderOnly: false + // Overlay to darken screen // Base dark overlay around region Rectangle { id: darkenOverlay z: 1 + visible: !root.breathingBorderOnly anchors { left: parent.left top: parent.top @@ -32,25 +35,6 @@ Item { border.width: Math.max(root.width, root.height) } - // Selection border - // Rectangle { - // id: selectionBorder - // z: 1 - // anchors { - // left: parent.left - // top: parent.top - // leftMargin: root.regionX - // topMargin: root.regionY - // } - // width: root.regionWidth - // height: root.regionHeight - // color: "transparent" - // border.color: root.color - // border.width: 2 - // // radius: root.standardRounding - // radius: 0 // TODO: figure out how to make the overlay thing work with rounding - // } - DashedBorder { id: selectionBorder z: 9 @@ -64,13 +48,23 @@ Item { height: Math.round(root.regionHeight) + borderWidth * 2 color: root.color - dashLength: 6 - gapLength: 3 + dashLength: 8 + gapLength: 4 borderWidth: 1 + + // Breathing + opacity: 0.9 + SequentialAnimation on opacity { + running: root.breathingBorderOnly + loops: Animation.Infinite + NumberAnimation { from: 0.9; to: 0.3; duration: 1200; easing.type: Easing.InOutQuad } + NumberAnimation { from: 0.3; to: 0.9; duration: 1200; easing.type: Easing.InOutQuad } + } } StyledText { z: 2 + visible: !root.breathingBorderOnly anchors { top: selectionBorder.bottom right: selectionBorder.right @@ -82,7 +76,7 @@ Item { // Coord lines Rectangle { // Vertical - visible: root.showAimLines + visible: root.showAimLines && !root.breathingBorderOnly opacity: 0.2 z: 2 x: root.mouseX @@ -94,7 +88,7 @@ Item { color: root.color } Rectangle { // Horizontal - visible: root.showAimLines + visible: root.showAimLines && !root.breathingBorderOnly opacity: 0.2 z: 2 y: root.mouseY diff --git a/dots/.config/quickshell/ii/modules/ii/regionSelector/RegionSelection.qml b/dots/.config/quickshell/ii/modules/ii/regionSelector/RegionSelection.qml index 5f5ed79ab..4f96f2506 100644 --- a/dots/.config/quickshell/ii/modules/ii/regionSelector/RegionSelection.qml +++ b/dots/.config/quickshell/ii/modules/ii/regionSelector/RegionSelection.qml @@ -27,13 +27,17 @@ PanelWindow { bottom: true } + // Modes // TODO: Ask: sidebar AI enum SnipAction { Copy, Edit, Search, CharRecognition, Record, RecordWithSound } enum SelectionMode { RectCorners, Circle } + enum Phase { Select, Post } property var action: RegionSelection.SnipAction.Copy property var selectionMode: RegionSelection.SelectionMode.RectCorners + property var phase: RegionSelection.Phase.Select signal dismiss() + // Styles property string screenshotDir: Directories.screenshotTemp property color overlayColor: ColorUtils.transparentize("#000000", 0.4) property color brightText: Appearance.m3colors.darkmode ? Appearance.colors.colOnLayer0 : Appearance.colors.colLayer0 @@ -46,6 +50,10 @@ PanelWindow { property color imageBorderColor: brightTertiary property color imageFillColor: ColorUtils.transparentize(imageBorderColor, 0.85) property color onBorderColor: "#ff000000" + property real targetRegionOpacity: Config.options.regionSelector.targetRegions.opacity + property bool contentRegionOpacity: Config.options.regionSelector.targetRegions.contentRegionOpacity + + // Vars for indicators readonly property var windows: [...HyprlandData.windowList].sort((a, b) => { // Sort floating=true windows before others if (a.floating === b.floating) return 0; @@ -54,6 +62,7 @@ PanelWindow { readonly property var layers: HyprlandData.layers readonly property real falsePositivePreventionRatio: 0.5 + // Screen & interaction vars readonly property HyprlandMonitor hyprlandMonitor: Hyprland.monitorFor(screen) readonly property real monitorScale: hyprlandMonitor.scale readonly property real monitorOffsetX: hyprlandMonitor.x @@ -105,13 +114,13 @@ PanelWindow { return offsetAdjustedLayers; } + // Config property bool isCircleSelection: (root.selectionMode === RegionSelection.SelectionMode.Circle) property bool enableWindowRegions: Config.options.regionSelector.targetRegions.windows && !isCircleSelection property bool enableLayerRegions: Config.options.regionSelector.targetRegions.layers && !isCircleSelection property bool enableContentRegions: Config.options.regionSelector.targetRegions.content - property real targetRegionOpacity: Config.options.regionSelector.targetRegions.opacity - property bool contentRegionOpacity: Config.options.regionSelector.targetRegions.contentRegionOpacity + // Target property real targetedRegionX: -1 property real targetedRegionY: -1 property real targetedRegionWidth: 0 @@ -175,6 +184,7 @@ PanelWindow { property real regionX: Math.min(dragStartX, draggingX) property real regionY: Math.min(dragStartY, draggingY) + // Screenshot stuff TempScreenshotProcess { id: screenshotProc running: true @@ -247,6 +257,7 @@ PanelWindow { } } + // Execution after selection function snip() { // Validity check if (root.regionWidth <= 0 || root.regionHeight <= 0) { @@ -277,21 +288,27 @@ PanelWindow { screenshotAction, // screenshotDir ) - snipProc.command = command; - - // Image post-processing - snipProc.startDetached(); - root.dismiss(); + Quickshell.execDetached(command); + if (root.action == RegionSelection.SnipAction.Record || root.action == RegionSelection.SnipAction.RecordWithSound) { + root.phase = RegionSelection.Phase.Post + } else { + root.dismiss(); + } } - Process { - id: snipProc + // Only clickable in Selection phase + mask: Region { + item: switch(root.phase) { + case RegionSelection.Phase.Select: return mouseArea; + case RegionSelection.Phase.Post: return null; + } } - ScreencopyView { + ScreencopyView { // For freezing anchors.fill: parent live: false captureSource: root.screen + visible: root.phase === RegionSelection.Phase.Select focus: root.visible Keys.onPressed: (event) => { // Esc to close @@ -299,220 +316,242 @@ PanelWindow { root.dismiss(); } } + } - MouseArea { - id: mouseArea - anchors.fill: parent - cursorShape: Qt.CrossCursor - acceptedButtons: Qt.LeftButton | Qt.RightButton - hoverEnabled: true + MouseArea { + id: mouseArea + anchors.fill: parent + cursorShape: Qt.CrossCursor + acceptedButtons: Qt.LeftButton | Qt.RightButton + hoverEnabled: true - // Controls - onPressed: (mouse) => { - root.dragStartX = mouse.x; - root.dragStartY = mouse.y; - root.draggingX = mouse.x; - root.draggingY = mouse.y; - root.dragging = true; - root.mouseButton = mouse.button; - } - onReleased: (mouse) => { - // Detect if it was a click -> Try to select targeted region - if (root.draggingX === root.dragStartX && root.draggingY === root.dragStartY) { - if (root.targetedRegionValid()) { - root.setRegionToTargeted(); - } - } - // Circle dragging? - else if (root.selectionMode === RegionSelection.SelectionMode.Circle) { - const padding = Config.options.regionSelector.circle.padding + Config.options.regionSelector.circle.strokeWidth / 2; - const dragPoints = (root.points.length > 0) ? root.points : [{ x: mouseArea.mouseX, y: mouseArea.mouseY }]; - const maxX = Math.max(...dragPoints.map(p => p.x)); - const minX = Math.min(...dragPoints.map(p => p.x)); - const maxY = Math.max(...dragPoints.map(p => p.y)); - const minY = Math.min(...dragPoints.map(p => p.y)); - root.regionX = minX - padding; - root.regionY = minY - padding; - root.regionWidth = maxX - minX + padding * 2; - root.regionHeight = maxY - minY + padding * 2; - } - root.snip(); - } - onPositionChanged: (mouse) => { - root.updateTargetedRegion(mouse.x, mouse.y); - if (!root.dragging) return; - root.draggingX = mouse.x; - root.draggingY = mouse.y; - root.dragDiffX = mouse.x - root.dragStartX; - root.dragDiffY = mouse.y - root.dragStartY; - root.points.push({ x: mouse.x, y: mouse.y }); - } - - Loader { - z: 2 - anchors.fill: parent - active: root.selectionMode === RegionSelection.SelectionMode.RectCorners - sourceComponent: RectCornersSelectionDetails { - regionX: root.regionX - regionY: root.regionY - regionWidth: root.regionWidth - regionHeight: root.regionHeight - mouseX: mouseArea.mouseX - mouseY: mouseArea.mouseY - color: root.selectionBorderColor - overlayColor: root.overlayColor - } - } - - Loader { - z: 2 - anchors.fill: parent - active: root.selectionMode === RegionSelection.SelectionMode.Circle - sourceComponent: CircleSelectionDetails { - color: root.selectionBorderColor - overlayColor: root.overlayColor - points: root.points - } - } - - CursorGuide { - z: 9999 - x: root.dragging ? root.regionX + root.regionWidth : mouseArea.mouseX - y: root.dragging ? root.regionY + root.regionHeight : mouseArea.mouseY - action: root.action - selectionMode: root.selectionMode - } - - // Window regions - Repeater { - model: ScriptModel { - values: root.enableWindowRegions ? root.windowRegions : [] - } - delegate: TargetRegion { - z: 2 - required property var modelData - clientDimensions: modelData - showIcon: true - targeted: !root.draggedAway && - (root.targetedRegionX === modelData.at[0] - && root.targetedRegionY === modelData.at[1] - && root.targetedRegionWidth === modelData.size[0] - && root.targetedRegionHeight === modelData.size[1]) - - opacity: root.draggedAway ? 0 : root.targetRegionOpacity - borderColor: root.windowBorderColor - fillColor: targeted ? root.windowFillColor : "transparent" - text: `${modelData.class}` - radius: Appearance.rounding.windowRounding - } - } - - // Layer regions - Repeater { - model: ScriptModel { - values: root.enableLayerRegions ? root.layerRegions : [] - } - delegate: TargetRegion { - z: 3 - required property var modelData - clientDimensions: modelData - targeted: !root.draggedAway && - (root.targetedRegionX === modelData.at[0] - && root.targetedRegionY === modelData.at[1] - && root.targetedRegionWidth === modelData.size[0] - && root.targetedRegionHeight === modelData.size[1]) - - opacity: root.draggedAway ? 0 : root.targetRegionOpacity - borderColor: root.windowBorderColor - fillColor: targeted ? root.windowFillColor : "transparent" - text: `${modelData.namespace}` - radius: Appearance.rounding.windowRounding - } - } - - // Content regions - Repeater { - model: ScriptModel { - values: root.enableContentRegions ? root.imageRegions : [] - } - delegate: TargetRegion { - z: 4 - required property var modelData - clientDimensions: modelData - targeted: !root.draggedAway && - (root.targetedRegionX === modelData.at[0] - && root.targetedRegionY === modelData.at[1] - && root.targetedRegionWidth === modelData.size[0] - && root.targetedRegionHeight === modelData.size[1]) - - opacity: root.draggedAway ? 0 : root.contentRegionOpacity - borderColor: root.imageBorderColor - fillColor: targeted ? root.imageFillColor : "transparent" - text: Translation.tr("Content region") - } - } - - // Controls - Row { - id: regionSelectionControls - z: 10 - anchors { - horizontalCenter: parent.horizontalCenter - bottom: parent.bottom - bottomMargin: -height - } - opacity: 0 - Connections { - target: root - function onVisibleChanged() { - if (!visible) return; - regionSelectionControls.anchors.bottomMargin = 8; - regionSelectionControls.opacity = 1; - } - } - Behavior on opacity { - animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) - } - Behavior on anchors.bottomMargin { - animation: Appearance.animation.elementMove.numberAnimation.createObject(this) - } - spacing: 6 - - OptionsToolbar { - Synchronizer on action { - property alias source: root.action - } - Synchronizer on selectionMode { - property alias source: root.selectionMode - } - onDismiss: root.dismiss(); - } - Item { - anchors { - verticalCenter: parent.verticalCenter - } - implicitWidth: closeFab.implicitWidth - implicitHeight: closeFab.implicitHeight - StyledRectangularShadow { - target: closeFab - radius: closeFab.buttonRadius - } - FloatingActionButton { - id: closeFab - baseSize: 48 - iconText: "close" - onClicked: root.dismiss(); - StyledToolTip { - text: Translation.tr("Close") - } - colBackground: Appearance.colors.colTertiaryContainer - colBackgroundHover: Appearance.colors.colTertiaryContainerHover - colRipple: Appearance.colors.colTertiaryContainerActive - colOnBackground: Appearance.colors.colOnTertiaryContainer - } - } - } - + // Controls + onPressed: (mouse) => { + root.dragStartX = mouse.x; + root.dragStartY = mouse.y; + root.draggingX = mouse.x; + root.draggingY = mouse.y; + root.dragging = true; + root.mouseButton = mouse.button; } + onReleased: (mouse) => { + // Detect if it was a click -> Try to select targeted region + if (root.draggingX === root.dragStartX && root.draggingY === root.dragStartY) { + if (root.targetedRegionValid()) { + root.setRegionToTargeted(); + } + } + // Circle dragging? + else if (root.selectionMode === RegionSelection.SelectionMode.Circle) { + const padding = Config.options.regionSelector.circle.padding + Config.options.regionSelector.circle.strokeWidth / 2; + const dragPoints = (root.points.length > 0) ? root.points : [{ x: mouseArea.mouseX, y: mouseArea.mouseY }]; + const maxX = Math.max(...dragPoints.map(p => p.x)); + const minX = Math.min(...dragPoints.map(p => p.x)); + const maxY = Math.max(...dragPoints.map(p => p.y)); + const minY = Math.min(...dragPoints.map(p => p.y)); + root.regionX = minX - padding; + root.regionY = minY - padding; + root.regionWidth = maxX - minX + padding * 2; + root.regionHeight = maxY - minY + padding * 2; + } + root.snip(); + } + onPositionChanged: (mouse) => { + root.updateTargetedRegion(mouse.x, mouse.y); + if (!root.dragging) return; + root.draggingX = mouse.x; + root.draggingY = mouse.y; + root.dragDiffX = mouse.x - root.dragStartX; + root.dragDiffY = mouse.y - root.dragStartY; + root.points.push({ x: mouse.x, y: mouse.y }); + } + + Loader { + z: 2 + anchors.fill: parent + active: root.selectionMode === RegionSelection.SelectionMode.RectCorners + sourceComponent: RectCornersSelectionDetails { + regionX: root.regionX + regionY: root.regionY + regionWidth: root.regionWidth + regionHeight: root.regionHeight + mouseX: mouseArea.mouseX + mouseY: mouseArea.mouseY + color: root.selectionBorderColor + overlayColor: root.overlayColor + breathingBorderOnly: root.phase === RegionSelection.Phase.Post + } + } + + Loader { + z: 2 + anchors.fill: parent + active: root.selectionMode === RegionSelection.SelectionMode.Circle + sourceComponent: CircleSelectionDetails { + color: root.selectionBorderColor + overlayColor: root.overlayColor + points: root.points + } + } + + // The thing to the bottom-right with an icon + CursorGuide { + z: 9999 + visible: root.phase === RegionSelection.Phase.Select + x: root.dragging ? root.regionX + root.regionWidth : mouseArea.mouseX + y: root.dragging ? root.regionY + root.regionHeight : mouseArea.mouseY + action: root.action + selectionMode: root.selectionMode + } + + // Window regions + Repeater { + model: ScriptModel { + values: { + if (root.phase === RegionSelection.Phase.Select && root.enableWindowRegions) { + return root.windowRegions + } else { + return [] + } + } + } + delegate: TargetRegion { + z: 2 + required property var modelData + clientDimensions: modelData + showIcon: true + targeted: !root.draggedAway && // + (root.targetedRegionX === modelData.at[0] // + && root.targetedRegionY === modelData.at[1] // + && root.targetedRegionWidth === modelData.size[0] // + && root.targetedRegionHeight === modelData.size[1]) + + opacity: root.draggedAway ? 0 : root.targetRegionOpacity + borderColor: root.windowBorderColor + fillColor: targeted ? root.windowFillColor : "transparent" + text: `${modelData.class}` + radius: Appearance.rounding.windowRounding + } + } + + // Layer regions + Repeater { + model: ScriptModel { + values: { + if (root.phase === RegionSelection.Phase.Select && root.enableLayerRegions) { + return root.layerRegions + } else { + return [] + } + } + } + delegate: TargetRegion { + z: 3 + required property var modelData + clientDimensions: modelData + targeted: !root.draggedAway && + (root.targetedRegionX === modelData.at[0] + && root.targetedRegionY === modelData.at[1] + && root.targetedRegionWidth === modelData.size[0] + && root.targetedRegionHeight === modelData.size[1]) + + opacity: root.draggedAway ? 0 : root.targetRegionOpacity + borderColor: root.windowBorderColor + fillColor: targeted ? root.windowFillColor : "transparent" + text: `${modelData.namespace}` + radius: Appearance.rounding.windowRounding + } + } + + // Content regions + Repeater { + model: ScriptModel { + values: { + if (root.phase === RegionSelection.Phase.Select && root.enableContentRegions) { + return root.imageRegions + } else { + return [] + } + } + } + delegate: TargetRegion { + z: 4 + required property var modelData + clientDimensions: modelData + targeted: !root.draggedAway && + (root.targetedRegionX === modelData.at[0] + && root.targetedRegionY === modelData.at[1] + && root.targetedRegionWidth === modelData.size[0] + && root.targetedRegionHeight === modelData.size[1]) + + opacity: root.draggedAway ? 0 : root.contentRegionOpacity + borderColor: root.imageBorderColor + fillColor: targeted ? root.imageFillColor : "transparent" + text: Translation.tr("Content region") + } + } + + // Controls + Row { + id: regionSelectionControls + z: 10 + visible: root.phase === RegionSelection.Phase.Select + anchors { + horizontalCenter: parent.horizontalCenter + bottom: parent.bottom + bottomMargin: -height + } + opacity: 0 + Connections { + target: root + function onVisibleChanged() { + if (!visible) return; + regionSelectionControls.anchors.bottomMargin = 8; + regionSelectionControls.opacity = 1; + } + } + Behavior on opacity { + animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) + } + Behavior on anchors.bottomMargin { + animation: Appearance.animation.elementMove.numberAnimation.createObject(this) + } + spacing: 6 + + OptionsToolbar { + Synchronizer on action { + property alias source: root.action + } + Synchronizer on selectionMode { + property alias source: root.selectionMode + } + onDismiss: root.dismiss(); + } + Item { + anchors { + verticalCenter: parent.verticalCenter + } + implicitWidth: closeFab.implicitWidth + implicitHeight: closeFab.implicitHeight + StyledRectangularShadow { + target: closeFab + radius: closeFab.buttonRadius + } + FloatingActionButton { + id: closeFab + baseSize: 48 + iconText: "close" + onClicked: root.dismiss(); + StyledToolTip { + text: Translation.tr("Close") + } + colBackground: Appearance.colors.colTertiaryContainer + colBackgroundHover: Appearance.colors.colTertiaryContainerHover + colRipple: Appearance.colors.colTertiaryContainerActive + colOnBackground: Appearance.colors.colOnTertiaryContainer + } + } + } + } } diff --git a/dots/.config/quickshell/ii/modules/ii/regionSelector/RegionSelector.qml b/dots/.config/quickshell/ii/modules/ii/regionSelector/RegionSelector.qml index 40440366a..61525e527 100644 --- a/dots/.config/quickshell/ii/modules/ii/regionSelector/RegionSelector.qml +++ b/dots/.config/quickshell/ii/modules/ii/regionSelector/RegionSelector.qml @@ -65,12 +65,16 @@ Scope { function record() { root.action = RegionSelection.SnipAction.Record root.selectionMode = RegionSelection.SelectionMode.RectCorners + // If already open then re-trigger to stop recording + if (GlobalStates.regionSelectorOpen) GlobalStates.regionSelectorOpen = false GlobalStates.regionSelectorOpen = true } function recordWithSound() { root.action = RegionSelection.SnipAction.RecordWithSound root.selectionMode = RegionSelection.SelectionMode.RectCorners + // If already open then re-trigger to stop recording + if (GlobalStates.regionSelectorOpen) GlobalStates.regionSelectorOpen = false GlobalStates.regionSelectorOpen = true } From 58a122a3b49a27cba2f40504b1d883039699d000 Mon Sep 17 00:00:00 2001 From: Anh <124384272+vananh2801@users.noreply.github.com> Date: Sun, 22 Mar 2026 20:13:01 +0700 Subject: [PATCH 09/18] Add XWayland configuration to fix blurry fonts while using fractional scale It will disable windows scaling on xwayland software to prevent blurry fonts. Source: https://wiki.hypr.land/Configuring/XWayland/ --- dots/.config/hypr/hyprland/general.conf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dots/.config/hypr/hyprland/general.conf b/dots/.config/hypr/hyprland/general.conf index 563b59f2a..9a0649c8c 100644 --- a/dots/.config/hypr/hyprland/general.conf +++ b/dots/.config/hypr/hyprland/general.conf @@ -166,3 +166,6 @@ cursor { hotspot_padding = 1 } +xwayland { + force_zero_scaling = true +} From a7353e5033467d1b7634cfd872b5379128fab4af Mon Sep 17 00:00:00 2001 From: xleb-normal Date: Mon, 23 Mar 2026 03:37:43 +0500 Subject: [PATCH 10/18] Update Russian localization Final tweak: Change Night Light to Night Mode --- dots/.config/quickshell/ii/translations/ru_RU.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dots/.config/quickshell/ii/translations/ru_RU.json b/dots/.config/quickshell/ii/translations/ru_RU.json index 0c4b337c7..d8d6498a3 100644 --- a/dots/.config/quickshell/ii/translations/ru_RU.json +++ b/dots/.config/quickshell/ii/translations/ru_RU.json @@ -364,7 +364,7 @@ "Work safety": "Безопасность", "Temperature\nChange with /temp VALUE": "Температура\nИзменить: /temp ЗНАЧЕНИЕ", "Terminal: Foreground boost (%)": "Терминал: усил. перед. плана (%)", - "Night Light | Right-click to toggle Auto mode": "Ночной свет | ПКМ для авторежима", + "Night Light | Right-click to toggle Auto mode": "Ночной режим | ПКМ для авторежима", "Closet": "Скрыто", "Yes": "Да", "Columns": "Столбцы", From aff4705d6a62c044d6ad3f5d9adbf827e56d286b Mon Sep 17 00:00:00 2001 From: jwihardi Date: Sun, 22 Mar 2026 20:20:08 -0400 Subject: [PATCH 11/18] added version number, updated deps, added := slots --- ...al-impulse-quickshell-git-0.1.0-r6.ebuild} | 60 +++++++++---------- 1 file changed, 29 insertions(+), 31 deletions(-) rename sdata/dist-gentoo/illogical-impulse-quickshell-git/{illogical-impulse-quickshell-git-r6.ebuild => illogical-impulse-quickshell-git-0.1.0-r6.ebuild} (75%) diff --git a/sdata/dist-gentoo/illogical-impulse-quickshell-git/illogical-impulse-quickshell-git-r6.ebuild b/sdata/dist-gentoo/illogical-impulse-quickshell-git/illogical-impulse-quickshell-git-0.1.0-r6.ebuild similarity index 75% rename from sdata/dist-gentoo/illogical-impulse-quickshell-git/illogical-impulse-quickshell-git-r6.ebuild rename to sdata/dist-gentoo/illogical-impulse-quickshell-git/illogical-impulse-quickshell-git-0.1.0-r6.ebuild index 372a9ad21..5d8358638 100644 --- a/sdata/dist-gentoo/illogical-impulse-quickshell-git/illogical-impulse-quickshell-git-r6.ebuild +++ b/sdata/dist-gentoo/illogical-impulse-quickshell-git/illogical-impulse-quickshell-git-0.1.0-r6.ebuild @@ -14,59 +14,57 @@ EGIT_COMMIT="7511545ee20664e3b8b8d3322c0ffe7567c56f7a" KEYWORDS="~amd64 ~arm64 ~x86" LICENSE="LGPL-3" SLOT="0" -# Upstream recommends leaving all build options enabled by default + IUSE="-breakpad +jemalloc +sockets +wayland +layer-shell +session-lock +toplevel-management +screencopy +X +pipewire +tray +mpris +pam +hyprland +hyprland-global-shortcuts +hyprland-focus-grab -i3 -i3-ipc +bluetooth" RDEPEND=" - dev-qt/qtbase:6 - dev-qt/qtsvg:6 - dev-qt/qt5compat:6 - - dev-cpp/cpptrace - - dev-qt/qtimageformats:6 - dev-qt/qtmultimedia:6 - dev-qt/qtpositioning:6 - dev-qt/qtquicktimeline:6 - dev-qt/qtsensors:6 - dev-qt/qtsvg:6 - dev-qt/qttools:6 - dev-qt/qttranslations:6 - dev-qt/qtvirtualkeyboard:6 - dev-qt/qtwayland:6 + dev-qt/qtbase:6= + dev-qt/qtdeclarative:6= + dev-qt/qt5compat:6= + kde-frameworks/kimageformats:6=[avif] + dev-cpp/cpptrace[unwind] + dev-qt/qtimageformats:6= + dev-qt/qtmultimedia:6= + dev-qt/qtpositioning:6= + dev-qt/qtquicktimeline:6= + dev-qt/qtsensors:6= + dev-qt/qtsvg:6= + dev-qt/qttools:6= + dev-qt/qttranslations:6= + dev-qt/qtvirtualkeyboard:6= + dev-qt/qtwayland:6= kde-apps/kdialog - kde-frameworks/syntax-highlighting:6 - kde-frameworks/kirigami + kde-frameworks/syntax-highlighting:6= + kde-frameworks/kirigami:6= - jemalloc? ( dev-libs/jemalloc ) + jemalloc? ( dev-libs/jemalloc:= ) wayland? ( dev-libs/wayland - dev-qt/qtwayland:6 + dev-qt/qtwayland:6= ) screencopy? ( x11-libs/libdrm media-libs/mesa ) - X? ( x11-libs/libxcb ) - pipewire? ( media-video/pipewire ) - mpris? ( dev-qt/qtdbus ) + X? ( x11-libs/libxcb:= ) + pipewire? ( media-video/pipewire:= ) + mpris? ( dev-qt/qtdbus:= ) pam? ( sys-libs/pam ) bluetooth? ( net-wireless/bluez ) " DEPEND="${RDEPEND}" BDEPEND=" - || ( >=sys-devel/gcc-14:* >=llvm-core/clang-17:* ) + dev-cpp/cli11 + dev-build/cmake + dev-vcs/git + dev-build/ninja + dev-qt/qtshadertools dev-util/spirv-tools - dev-qt/qtshadertools:6 wayland? ( dev-util/wayland-scanner dev-libs/wayland-protocols ) - dev-cpp/cli11 - dev-build/ninja - dev-build/cmake - dev-vcs/git virtual/pkgconfig breakpad? ( dev-util/breakpad ) dev-util/vulkan-headers @@ -76,7 +74,7 @@ src_configure(){ mycmakeargs=( -DCMAKE_BUILD_TYPE=RelWithDebInfo -DDISTRIBUTOR="Gentoo Illogical-Impulses" - -DINSTALL_QML_PREFIX="lib64/qt6/qml" + -DINSTALL_QML_PREFIX="$(get_libdir)/qt6/qml" -DCRASH_REPORTER=$(usex breakpad ON OFF) -DUSE_JEMALLOC=$(usex jemalloc ON OFF) -DSOCKETS=$(usex sockets ON OFF) From 795f4042b0b63a4a26819b43ee1783e0e3466055 Mon Sep 17 00:00:00 2001 From: jwihardi Date: Sun, 22 Mar 2026 20:33:08 -0400 Subject: [PATCH 12/18] updated use flags --- sdata/dist-gentoo/useflags | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sdata/dist-gentoo/useflags b/sdata/dist-gentoo/useflags index e94832d36..8d44d5f59 100644 --- a/sdata/dist-gentoo/useflags +++ b/sdata/dist-gentoo/useflags @@ -111,7 +111,9 @@ sys-power/upower introspection gui-apps/fuzzel png svg dev-libs/glib dbus elf introspection mime xattr # ngl idk about nm-connection-editor. Works fine without -gui-apps/quickshell -X -i3 -i3-ipc breakpad bluetooth hyprland hyprland-focus-grab hyprland-global-shortcuts jemalloc layer-shell mpris pam pipewire screencopy session-lock sockets toplevel-management tray wayland #app-i18n/translate-shell (nothing needed) #gui-apps/wlogout (no use flags) media-gfx/imagemagick xml + +################### WIDGETS ################### +dev-cpp/cpptrace unwind From 41b6c190d21d3090be200fd7671c1a43f8fe9505 Mon Sep 17 00:00:00 2001 From: jwihardi Date: Sun, 22 Mar 2026 20:50:55 -0400 Subject: [PATCH 13/18] moved depclean to the end --- sdata/dist-gentoo/install-deps.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sdata/dist-gentoo/install-deps.sh b/sdata/dist-gentoo/install-deps.sh index f763fdceb..1cbbdb966 100644 --- a/sdata/dist-gentoo/install-deps.sh +++ b/sdata/dist-gentoo/install-deps.sh @@ -52,7 +52,6 @@ v sudo sh -c 'cat ./sdata/dist-gentoo/additional-useflags >> /etc/portage/packag v sudo emerge --sync v sudo emerge --quiet --newuse --update --deep @world v sudo emerge --quiet @smart-live-rebuild -v sudo emerge --depclean # Remove old ebuilds (if this isn't done the wildcard will fuck upon a version change) x sudo rm -fr ${ebuild_dir}/app-misc/illogical-impulse-* @@ -66,3 +65,5 @@ for i in "${metapkgs[@]}"; do v sudo ebuild ${ebuild_dir}/app-misc/${i}/*.ebuild digest v sudo emerge --update --quiet app-misc/${i} done + +v sudo emerge --depclean From 854016e82a93df4aa7f0db373c3d5544ec297491 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Mon, 23 Mar 2026 08:21:18 +0100 Subject: [PATCH 14/18] change mousearea to correct item and add tooltip --- .../sidebarRight/volumeMixer/VolumeMixerEntry.qml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/dots/.config/quickshell/ii/modules/ii/sidebarRight/volumeMixer/VolumeMixerEntry.qml b/dots/.config/quickshell/ii/modules/ii/sidebarRight/volumeMixer/VolumeMixerEntry.qml index 5e4fec97b..8598cd5cb 100644 --- a/dots/.config/quickshell/ii/modules/ii/sidebarRight/volumeMixer/VolumeMixerEntry.qml +++ b/dots/.config/quickshell/ii/modules/ii/sidebarRight/volumeMixer/VolumeMixerEntry.qml @@ -7,10 +7,8 @@ import Quickshell import Quickshell.Services.Pipewire import Qt5Compat.GraphicalEffects -MouseArea { +Item { id: root - cursorShape: Qt.PointingHandCursor - onClicked: root.node.audio.muted = !root.node.audio.muted required property PwNode node PwObjectTracker { objects: [root.node] @@ -23,12 +21,21 @@ MouseArea { anchors.fill: parent spacing: 6 - Item { + MouseArea { property real size: 36 Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter Layout.preferredWidth: size Layout.preferredHeight: size + cursorShape: Qt.PointingHandCursor + onClicked: root.node.audio.muted = !root.node.audio.muted + + hoverEnabled: true + property bool hovered: containsMouse + StyledToolTip { + text: root.node?.audio.muted ? Translation.tr("Click to unmute") : Translation.tr("Click to mute") + } + Image { id: iconImg anchors.fill: parent From f974dea8e5c79db09de24b19af4690a4a12db57c Mon Sep 17 00:00:00 2001 From: jwihardi Date: Mon, 23 Mar 2026 17:58:56 -0400 Subject: [PATCH 15/18] fixed comment --- sdata/dist-gentoo/useflags | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdata/dist-gentoo/useflags b/sdata/dist-gentoo/useflags index 8d44d5f59..c3d979e6d 100644 --- a/sdata/dist-gentoo/useflags +++ b/sdata/dist-gentoo/useflags @@ -115,5 +115,5 @@ dev-libs/glib dbus elf introspection mime xattr #gui-apps/wlogout (no use flags) media-gfx/imagemagick xml -################### WIDGETS ################### +################### OTHER ################### dev-cpp/cpptrace unwind From abea376e598a76ed1cf04e603e6d05bb1947ab9b Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Tue, 24 Mar 2026 14:47:56 +0100 Subject: [PATCH 16/18] reload kitty after theming --- dots/.config/quickshell/ii/scripts/colors/applycolor.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dots/.config/quickshell/ii/scripts/colors/applycolor.sh b/dots/.config/quickshell/ii/scripts/colors/applycolor.sh index fd8651c73..2aab8dfce 100755 --- a/dots/.config/quickshell/ii/scripts/colors/applycolor.sh +++ b/dots/.config/quickshell/ii/scripts/colors/applycolor.sh @@ -40,6 +40,9 @@ apply_kitty() { for i in "${!colorlist[@]}"; do sed -i "s/${colorlist[$i]} #/${colorvalues[$i]#\#}/g" "$STATE_DIR"/user/generated/terminal/kitty-theme.conf done + + # Reload + kill -SIGUSR1 $(pidof kitty) } apply_anyterm() { From 774ce228a03934f066683c5c1ccb57c5b0f40b56 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Tue, 24 Mar 2026 14:50:53 +0100 Subject: [PATCH 17/18] fish: update prompt; don't be fancy in tty --- dots/.config/fish/config.fish | 29 +++++++------- .../scripts/colors/terminal/kitty-theme.conf | 26 ++++++++++++- dots/.config/starship.toml | 39 ++++++++++--------- 3 files changed, 61 insertions(+), 33 deletions(-) diff --git a/dots/.config/fish/config.fish b/dots/.config/fish/config.fish index 0d26fe1dc..c565cef0a 100755 --- a/dots/.config/fish/config.fish +++ b/dots/.config/fish/config.fish @@ -1,28 +1,31 @@ -function fish_prompt -d "Write out the prompt" - # This shows up as USER@HOST /home/user/ >, with the directory colored - # $USER and $hostname are set by fish, so you can just use them - # instead of using `whoami` and `hostname` - printf '%s@%s %s%s%s > ' $USER $hostname \ - (set_color $fish_color_cwd) (prompt_pwd) (set_color normal) -end - -if status is-interactive # Commands to run in interactive sessions can go here - +# Commands to run in interactive sessions can go here +if status is-interactive # No greeting set fish_greeting # Use starship - starship init fish | source + function starship_transient_prompt_func + starship module character + end + if test "$TERM" != "linux" + starship init fish | source + enable_transience + end + + # Colors if test -f ~/.local/state/quickshell/user/generated/terminal/sequences.txt cat ~/.local/state/quickshell/user/generated/terminal/sequences.txt end # Aliases - alias clear "printf '\033[2J\033[3J\033[1;1H'" # fix: kitty doesn't clear properly + # kitty doesn't clear properly so we need to do this weird printing + alias clear "printf '\033[2J\033[3J\033[1;1H'" alias celar "printf '\033[2J\033[3J\033[1;1H'" alias claer "printf '\033[2J\033[3J\033[1;1H'" - alias ls 'eza --icons' alias pamcan pacman alias q 'qs -c ii' + if test "$TERM" != "linux" + alias ls 'eza --icons' + end end diff --git a/dots/.config/quickshell/ii/scripts/colors/terminal/kitty-theme.conf b/dots/.config/quickshell/ii/scripts/colors/terminal/kitty-theme.conf index 2017b50f6..fdebeab3a 100644 --- a/dots/.config/quickshell/ii/scripts/colors/terminal/kitty-theme.conf +++ b/dots/.config/quickshell/ii/scripts/colors/terminal/kitty-theme.conf @@ -23,5 +23,27 @@ cursor #$term7 # foreground #$term7 # -selection_background #$term7 # -selection_foreground #$term0 # +selection_background #$onSecondaryContainer # +selection_foreground #$secondaryContainer # + +# Override obscure colors for starship prompt (these are greys at the end) +color255 #$primary # +color254 #$primaryContainer # +color253 #$secondary # +color252 #$secondaryContainer # +color251 #$tertiary # +color250 #$tertiaryContainer # +color249 #$error # +color248 #$errorContainer # + +color232 #$onPrimary # +color233 #$onPrimaryContainer # +color234 #$onSecondary # +color235 #$onSecondaryContainer # +color236 #$onTertiary # +color237 #$onTertiaryContainer # +color238 #$onError # +color239 #$onErrorContainer # + +color244 #$outline # +color245 #$outlineVariant # diff --git a/dots/.config/starship.toml b/dots/.config/starship.toml index 2e3f7db96..376b46630 100644 --- a/dots/.config/starship.toml +++ b/dots/.config/starship.toml @@ -7,28 +7,31 @@ add_newline = false # Cool stuff 󰜥    # format = """ -# $cmd_duration$username$hostname $directory $git_branch -# $character -# """ +# $directory $fill $git_branch $cmd_duration +# $character""" format = """ -$cmd_duration 󰜥 $directory $git_branch -$character""" +$cmd_duration $directory$git_branch + $character""" + +[fill] +symbol = '-' +style = 'fg:245' # Replace the "❯" symbol in the prompt with "➜" [character] # The name of the module we are configuring is "character" -success_symbol = "[  ](bold fg:blue)" -error_symbol = "[  ](bold fg:red)" +success_symbol = "[ ](bold fg:255)" +error_symbol = "[ ](bold fg:249)" # Disable the package module, hiding it from the prompt completely [package] disabled = true [git_branch] -style = "bg: cyan" +style = "bg: 252" symbol = "󰘬" truncation_length = 12 truncation_symbol = "" -format = "󰜥 [](bold fg:cyan)[$symbol $branch(:$remote_branch)](fg:black bg:cyan)[ ](bold fg:cyan)" +format = " 󰜥 [](bold fg:252)[$symbol $branch(:$remote_branch)](fg:235 bg:252)[ ](bold fg:252)" [git_commit] commit_hash_length = 4 @@ -52,7 +55,7 @@ deleted = " 🗑 " [hostname] ssh_only = false -format = "[•$hostname](bg:cyan bold fg:black)[](bold fg:cyan)" +format = "[•$hostname](bg:252 bold fg:235)[](bold fg:252)" trim_at = ".companyname.com" disabled = false @@ -71,19 +74,19 @@ format = '🕙[\[ $time \]]($style) ' time_format = "%T" [username] -style_user = "bold bg:cyan fg:black" +style_user = "bold bg:252 fg:235" style_root = "red bold" -format = "[](bold fg:cyan)[$user]($style)" +format = "[](bold fg:252)[$user]($style)" disabled = false show_always = true [directory] -home_symbol = "  " +home_symbol = " " read_only = "  " -style = "bg:green fg:black" -truncation_length = 6 -truncation_symbol = " ••/" -format = '[](bold fg:green)[󰉋 $path]($style)[](bold fg:green)' +style = "bg:255 fg:black" +truncation_length = 2 +truncation_symbol = ".../" +format = '[](bold fg:255)[󰉋 → $path]($style)[](bold fg:255)' [directory.substitutions] @@ -97,4 +100,4 @@ format = '[](bold fg:green)[󰉋 $path]($style)[](bold fg:green)' [cmd_duration] min_time = 0 -format = '[](bold fg:yellow)[󰪢 $duration](bold bg:yellow fg:black)[](bold fg:yellow)' +format = '[](bold fg:252)[󰪢 $duration](bold bg:252 fg:235)[](bold fg:252)' From a9721c7cfe176d13a0e7984471f921f2eeb03479 Mon Sep 17 00:00:00 2001 From: Xleb <113757538+xleb-normal@users.noreply.github.com> Date: Tue, 24 Mar 2026 19:43:32 +0500 Subject: [PATCH 18/18] Update Russian localization: Quality improvements (#3134) --- .../quickshell/ii/translations/ru_RU.json | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/dots/.config/quickshell/ii/translations/ru_RU.json b/dots/.config/quickshell/ii/translations/ru_RU.json index d8d6498a3..db3a6d901 100644 --- a/dots/.config/quickshell/ii/translations/ru_RU.json +++ b/dots/.config/quickshell/ii/translations/ru_RU.json @@ -35,7 +35,7 @@ "Help & Support": "Помощь", "Bubble": "Пузырчатый", "Large images | God tier quality, no NSFW.": "Большие изобр. | Отличное качество, без NSFW.", - "Dark": "Тьма", + "Dark": "Тёмный", "Center clock": "Часы по центру экрана", "Search, calculate or run": "Поиск, расчёт, запуск", "Region height": "Высота области", @@ -47,7 +47,7 @@ "at": "в", "Math": "Математика", "Consider plugging in your device": "Подключите зарядку", - "Workspaces shown": "Видимые пространство", + "Workspaces shown": "Видимые пространства", "Place the corners to trigger at the bottom": "Триггер-углы снизу", "No API key\nSet it with /key YOUR_API_KEY": "Нет API-ключа\nУстановите: /key ВАШ_КЛЮЧ", "Auto (System)": "Авто (система)", @@ -223,7 +223,7 @@ "Networking": "Сеть", "Tint icons": "Тонировать иконки", "Low battery": "Низкий заряд", - "Make icons pinned by default": "Показывать все иконки", + "Make icons pinned by default": "Закреплять все иконки", "Get the next page of results": "Следующая стр. результатов", "Invalid API provider. Supported: \n-": "Неверный провайдер. Поддерж:\n-", "Show \"Locked\" text": "Показ. текст «Заблокировано»", @@ -276,7 +276,7 @@ "Prefixes": "Префиксы", "Terminal": "Терминала", "Incorrect password": "Неверный пароль", - "Line-separated": "Без разделения", + "Line-separated": "Разделение по строкам", "Always": "Всегда", "☕ Break: %1 minutes": "☕ Перерыв: %1 мин", "Depends on sidebars": "Зависит от панелей", @@ -288,7 +288,7 @@ "Base URL": "Базовый URL", "Float": "Флоат", "Invalid arguments. Must provide `command`.": "Неверные аргументы. Укажите `command`.", - "Fully charged": "Полностью заряжен", + "Fully charged": "Полностью заряжена", "Earbang protection": "Защита ушей", "Low warning": "Увед. о низком %", "Advanced": "Прочее", @@ -434,7 +434,7 @@ "Game mode": "Игровой режим", "Usage: %1save CHAT_NAME": "Исп: %1save ИМЯ_ЧАТА", "Thin": "Тонкий", - "Light": "Свет", + "Light": "Светлый", "When not fullscreen": "Не в фулл-скрине", "Commands, edit configs, search.\nTakes an extra turn to switch to search mode if that's needed": "Команды, редактирование конфигов, поиск.\nПри необходимости переключается в режим поиска", "Privacy Policy": "Политика конфиденциальности", @@ -506,7 +506,7 @@ "Could be images or parts of the screen that have some containment.\nMight not always be accurate.\nThis is done with an image processing algorithm run locally and no AI is used.": "Могут быть изображения или части экрана с содержимым.\nМожет быть неточно.\nИспользуется локальный алгоритм обработки изображений, без ИИ.", "Polling interval (m)": "Интервал опроса (мин)", "Inactive": "Неактивно", - "Authentication": "Аутентиф.", + "Authentication": "Аутентификация", "Full warning": "Уведомление о полном заряде при проценте", "Power Profile": "Профиль питания", "Content region": "Обл. контента", @@ -596,7 +596,7 @@ "Battery: %1%2": "Батарея: %1%2", "Command": "Команда", "Tooltips": "Подсказки", - "Show hidden icons": "Системный трей", + "Show hidden icons": "Показать скрытые значки", "Used for headings and titles": "Для заголовков", "Top-down": "Сверху вниз", "of %1": "из %1", @@ -613,7 +613,7 @@ "Overlay: General": "Игровой оверлей", "Enable opening zoom animation": "Анимация зума при открытии", "More Internet settings": "Доп. сетевые настройки", - "Nerd font icons": "Иконки Nerd Font (эмодзи)", + "Nerd font icons": "Иконки Nerd Font", "Display modifiers and keys in multiple keycap (e.g., \"Ctrl + A\" instead of \"Ctrl A\" or \"󰘴 + A\" instead of \"󰘴 A\")": "Показывать модификаторы с разделителем (напр, «Ctrl + A» вместо «Ctrl A»)", "Change password": "Изменить пароль", "Check interval (mins)": "Интервал пров. (мин)", @@ -633,7 +633,7 @@ "Numbers font": "Шрифт чисел", "Move right": "Переместить вправо", "Unknown Application": "Неизв. приложение", - "Used for decorative/expressive text": "Для декоротивного / выразительного текста", + "Used for decorative/expressive text": "Для декоративного / выразительного текста", "Used for reading large blocks of text": "Для чтения больших блоков", "Type /key to get started with online models\nCtrl+O to expand sidebar\nCtrl+P to pin sidebar\nCtrl+D to detach sidebar": "Введите /key для онлайн-моделей\nCtrl+O - расширить панель\nCtrl+P - закрепить панель\nCtrl+D - открепить панель", "Health:": "Здоровье:", @@ -648,7 +648,7 @@ "Pinned": "Закреплено", "Unpin from Start": "Открепить из пуска", "Adjust the color temperature": "Цветовая температура", - "Han chars": "Кандзи", + "Han chars": "Иероглифы", "Show only when locked": "Отображать только при блокировке", "Widget: Weather": "Виджет погоды", "Right to left": "Справа налево", @@ -659,13 +659,13 @@ "Fonts": "Шрифты", "Left to right": "Слева направо", "Set FPS limit": "Лимит FPS", - "Draggable": "Drag & drop", + "Draggable": "Перетаскиваемый", "Turn on from sunset to sunrise": "От заката до рассвета", "Do you want to allow this app to make changes to your device?": "Разрешить приложению изменять устройство?", "Balance brightness based on content": "Баланс яркости по содержимому", "Font width and roundness settings are only available for some fonts like Google Sans Flex": "Ширина и скруглённость - только для нек. шрифтов (напр, Google Sans Flex)", "Record region": "Запись обл.", - "You can also manually edit cheatsheet.superKey": "Можно вручную отредактировать клавишу в шпаргалке клавиш и в других частях системы", + "You can also manually edit cheatsheet.superKey": "Также вы можете вручную отредактировать cheatsheet.superKey", "Sign out": "Выйти", "Overlay: Crosshair": "Оверлей: прицел", "Shut down": "Выключить",