Современная, настраиваемая оболочка рабочего стола для Wayland-композиторов, построенная на Quickshell
sm1teePanel — это полнофункциональная оболочка рабочего стола для Wayland, вдохновленная Material Design 3. Проект построен на базе Quickshell и предоставляет богатый набор виджетов, модулей и настроек для создания современного и продуктивного рабочего окружения.
- ✅ Hyprland — полная поддержка
- ✅ Niri — полная поддержка
⚠️ Другие Wayland-композиторы — базовая поддержка
- 🎨 Динамическая тематизация — автоматическая генерация цветовых схем из обоев с помощью
matugen - 🌓 Светлая/Темная темы — переключение режимов с плавными переходами
- 📦 Система плагинов — расширяемая архитектура для пользовательских виджетов
- 🔧 Гибкая настройка — детальная конфигурация всех компонентов
- 🎭 Множество тем — встроенные темы + поддержка Catppuccin
- 🖥️ Мультимониторность — полная поддержка нескольких экранов
- ⚡ Производительность — оптимизированная отрисовка и ленивая загрузка
- Настраиваемые виджеты (левая/центральная/правая секции)
- Автоскрытие и позиционирование (верх/низ/лево/право)
- Переключатель рабочих столов
- Индикаторы системных ресурсов (CPU, RAM, GPU, температура)
- Медиаплеер с обложками альбомов
- Погода с автоопределением местоположения
- Системный трей
- Часы с настраиваемым форматом
- Закрепленные и запущенные приложения
- Группировка по приложениям
- Автоскрытие
- Настраиваемое позиционирование
- Spotlight — быстрый поиск и запуск приложений
- Control Center — управление системой (звук, яркость, сеть, Bluetooth)
- Notification Center — центр уведомлений с группировкой
- Power Menu — меню выключения/перезагрузки
- Process List — диспетчер задач с мониторингом системы
- App Drawer — полный список приложений
- Clipboard History — история буфера обмена
- Settings — панель настроек
- Lock Screen — экран блокировки с виртуальной клавиатурой
- Notepad — встроенный блокнот с поддержкой Markdown
- OSD — экранные индикаторы (громкость, яркость, микрофон)
- Toast — всплывающие уведомления
- Dash — информационная панель (обзор, медиа, погода)
sm1teePanel/
├── Common/ # Общие утилиты и синглтоны
│ ├── Theme.qml # Система тем и цветов
│ ├── SettingsData.qml # Управление настройками
│ ├── SessionData.qml # Данные сессии
│ └── ...
├── Modules/ # Основные модули UI
│ ├── Bar/ # Верхняя панель
│ ├── Dock/ # Панель приложений
│ ├── Lock/ # Экран блокировки
│ ├── Notepad/ # Блокнот
│ ├── Notifications/ # Уведомления
│ ├── OSD/ # Экранные индикаторы
│ └── ...
├── Modals/ # Модальные окна
│ ├── Spotlight/ # Поиск приложений
│ ├── Settings/ # Настройки
│ ├── Clipboard/ # История буфера
│ └── ...
├── Services/ # Бэкенд-сервисы
│ ├── AudioService.qml
│ ├── NetworkService.qml
│ ├── NotificationService.qml
│ ├── PluginService.qml
│ └── ...
├── Widgets/ # Переиспользуемые компоненты
│ ├── Button.qml
│ ├── Slider.qml
│ ├── Popout.qml
│ └── ...
├── Shaders/ # GLSL шейдеры для эффектов
├── matugen/ # Шаблоны для matugen
└── scripts/ # Вспомогательные скрипты
| Сервис | Описание |
|---|---|
CompositorService |
Определение и взаимодействие с композитором |
NotificationService |
Управление уведомлениями с группировкой |
AudioService |
Управление звуком (PipeWire/PulseAudio) |
NetworkService |
Управление сетевыми подключениями |
BluetoothService |
Управление Bluetooth-устройствами |
BatteryService |
Мониторинг батареи и питания |
WeatherService |
Получение данных о погоде |
PluginService |
Загрузка и управление плагинами |
SessionService |
Управление сессией (logout, suspend, etc.) |
IdleService |
Отслеживание активности и блокировка |
- Quickshell (последняя версия)
- Qt 6 (QtQuick, QtCore)
- Wayland
- Композитор: Hyprland или Niri
matugen— для динамической тематизацииNetworkManager— для управления сетьюBlueZ— для BluetoothPipeWire/PulseAudio— для звукаUPower— для информации о батарее
# Клонирование репозитория
git clone https://github.com/yourusername/sm1teePanel.git
cd sm1teePanel
# Создание директории конфигурации
mkdir -p ~/.config/quickshell
# Копирование файлов
cp -r . ~/.config/quickshell/sm1teePanel
# Запуск
quickshell -c ~/.config/quickshell/sm1teePanel/shell.qmlДобавьте в ~/.config/hypr/hyprland.conf:
exec-once = quickshell -c ~/.config/quickshell/sm1teePanel/shell.qml
Добавьте в ~/.config/niri/config.kdl:
spawn-at-startup "quickshell" "-c" "~/.config/quickshell/sm1teePanel/shell.qml"Настройки хранятся в:
~/.config/sm1teePanel/
├── settings.json # Основные настройки
├── session.json # Данные сессии
├── plugin_settings.json # Настройки плагинов
└── plugins/ # Пользовательские плагины
{
"currentThemeName": "blue",
"barPosition": 0,
"barAutoHide": false,
"showDock": true,
"dockPosition": 1,
"use24HourClock": true,
"weatherEnabled": true,
"animationSpeed": 2,
"cornerRadius": 12,
"fontScale": 1.0
}Виджеты можно настроить через UI или напрямую в settings.json:
{
"barLeftWidgets": [
"launcherButton",
"workspaceSwitcher",
"focusedWindow"
],
"barCenterWidgets": [
"clock",
"music",
"weather"
],
"barRightWidgets": [
"systemTray",
"cpuUsage",
"memUsage",
"battery",
"controlCenterButton"
]
}Настраиваемая панель с поддержкой виджетов.
Доступные виджеты:
launcherButton— кнопка запуска приложенийworkspaceSwitcher— переключатель рабочих столовfocusedWindow— название активного окнаclock— часы и датаmusic— медиаплеерweather— погодаsystemTray— системный трейclipboard— история буфера обменаcpuUsage— использование CPUmemUsage— использование RAMcpuTemp— температура CPUgpuUsage— использование GPUnotificationButton— центр уведомленийbattery— индикатор батареиcontrolCenterButton— центр управления
Панель запущенных и закрепленных приложений.
Возможности:
- Группировка окон по приложениям
- Drag & Drop для изменения порядка
- Контекстное меню для управления
- Индикаторы активности
Экран блокировки с виртуальной клавиатурой.
Возможности:
- Ввод пароля
- Отображение времени и даты
- Меню питания
- Автоблокировка при бездействии
Встроенный блокнот с поддержкой вкладок.
Возможности:
- Множественные вкладки
- Поддержка Markdown
- Автосохранение
- Настраиваемый шрифт и размер
- Нумерация строк
Структура плагина:
~/.config/sm1teePanel/plugins/my-plugin/
├── plugin.json # Манифест
├── MyPlugin.qml # Основной компонент
└── Settings.qml # Настройки (опционально)
{
"id": "my-plugin",
"name": "My Plugin",
"version": "1.0.0",
"author": "Your Name",
"description": "Plugin description",
"component": "./MyPlugin.qml",
"settings": "./Settings.qml",
"type": "widget",
"icon": "extension",
"permissions": ["network", "filesystem"]
}import QtQuick
import qs.Modules.Plugins
PluginComponent {
id: root
// Доступ к сервисам
property var pluginService
property string pluginId
// UI компонент
BasePill {
text: "My Plugin"
icon: "extension"
onClicked: {
// Действие при клике
}
}
// Сохранение данных
Component.onCompleted: {
const data = pluginService.loadPluginData(pluginId, "myKey", "default")
}
}- widget — виджет для Bar
- daemon — фоновый сервис без UI
// Сохранение данных
pluginService.savePluginData(pluginId, "key", value)
// Загрузка данных
pluginService.loadPluginData(pluginId, "key", defaultValue)
// Создание варианта
pluginService.createPluginVariant(pluginId, "Variant Name", config)Generic:
- Blue, Deep Blue, Purple, Green, Orange, Red, Cyan, Pink, Amber, Coral
Catppuccin:
- Rosewater, Flamingo, Pink, Mauve, Red, Maroon, Peach, Yellow
- Green, Teal, Sky, Sapphire, Blue, Lavender
Автоматическая генерация цветовой схемы из обоев:
// Переключение на динамическую тему
Theme.switchTheme("dynamic")
// Выбор схемы matugen
SettingsData.matugenScheme = "scheme-tonal-spot"
// Варианты: scheme-tonal-spot, scheme-content, scheme-expressive,
// scheme-monochrome, scheme-neutralСоздайте JSON-файл с цветами:
{
"name": "My Theme",
"dark": {
"primary": "#42a5f5",
"primaryText": "#ffffff",
"surface": "#1a1c1e",
"surfaceText": "#e3e8ef",
"background": "#121212"
},
"light": {
"primary": "#1976d2",
"primaryText": "#ffffff",
"surface": "#ffffff",
"surfaceText": "#1a1c1e",
"background": "#f5f5f5"
}
}Загрузите через настройки или:
Theme.loadCustomThemeFromFile("/path/to/theme.json")
Theme.switchTheme("custom")sm1teePanel может автоматически применять темы к:
- KDE приложениям (через KColorScheme)
- Терминалам (Ghostty)
- Композитору (Niri)
sm1teePanel предоставляет IPC API для управления через командную строку.
# Общий формат
quickshell -c ~/.config/quickshell/sm1teePanel/shell.qml --ipc <target> <command> [args]quickshell --ipc powermenu open
quickshell --ipc powermenu close
quickshell --ipc powermenu togglequickshell --ipc control-center open
quickshell --ipc control-center close
quickshell --ipc control-center togglequickshell --ipc dash open [tab]
quickshell --ipc dash close
quickshell --ipc dash toggle [tab]
# tab: media, weather, или пусто для обзораquickshell --ipc notepad open
quickshell --ipc notepad close
quickshell --ipc notepad togglequickshell --ipc spotlight open
quickshell --ipc spotlight close
quickshell --ipc spotlight togglequickshell --ipc appdrawer open
quickshell --ipc appdrawer close
quickshell --ipc appdrawer togglequickshell --ipc processlist open
quickshell --ipc processlist close
quickshell --ipc processlist togglequickshell --ipc inhibit toggle
quickshell --ipc inhibit enable
quickshell --ipc inhibit disable
quickshell --ipc inhibit status
quickshell --ipc inhibit reason "Watching video"bind = SUPER, SPACE, exec, quickshell --ipc spotlight toggle
bind = SUPER, N, exec, quickshell --ipc notepad toggle
bind = SUPER, A, exec, quickshell --ipc appdrawer toggle
bind = SUPER SHIFT, P, exec, quickshell --ipc powermenu toggle
binds {
Mod+Space { spawn "quickshell" "--ipc" "spotlight" "toggle"; }
Mod+N { spawn "quickshell" "--ipc" "notepad" "toggle"; }
Mod+A { spawn "quickshell" "--ipc" "appdrawer" "toggle"; }
}- Qt Creator (рекомендуется)
- QML Language Server
- Знание QML/JavaScript
- Понимание Wayland протоколов
- QML — UI и логика
- JavaScript — утилиты и обработка данных
- GLSL — шейдеры для визуальных эффектов
- Используйте
pragma ComponentBehavior: Bound - Именуйте компоненты в PascalCase
- Свойства в camelCase
- Константы в UPPER_SNAKE_CASE
- Комментарии на русском или английском
# Запуск с отладочным выводом
QT_LOGGING_RULES="quickshell.*=true" quickshell -c shell.qml
# Проверка IPC
quickshell --ipc <target> <command>
# Мониторинг производительности
QSG_RENDER_TIMING=1 quickshell -c shell.qml# Сканирование плагинов
PluginService.scanPlugins()
# Загрузка плагина
PluginService.loadPlugin("plugin-id")
# Выгрузка плагина
PluginService.unloadPlugin("plugin-id")Проверьте исходный код для информации о лицензии.
Вклад приветствуется! Пожалуйста:
- Форкните репозиторий
- Создайте ветку для фичи (
git checkout -b feature/amazing-feature) - Закоммитьте изменения (
git commit -m 'Add amazing feature') - Запушьте в ветку (
git push origin feature/amazing-feature) - Откройте Pull Request
- Issues: GitHub Issues
- Документация: Wiki
- Quickshell: quickshell.outfoxxed.me
- Quickshell — за отличный фреймворк
- Material Design 3 — за дизайн-систему
- Catppuccin — за прекрасные цветовые палитры
- matugen — за динамическую тематизацию
- Сообществу Wayland и разработчикам композиторов
Сделано с ❤️ для Wayland