1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2025-12-05 21:15:38 -05:00

migrate to qs imports and .qmlls.ini pattern

This commit is contained in:
bbedward
2025-07-16 18:47:51 -04:00
parent a49911863d
commit 457bbcd131
70 changed files with 129 additions and 212 deletions

1
.gitignore vendored
View File

@@ -53,3 +53,4 @@ compile_commands.json
*_qmlcache.qrc
UNUSED
.qmlls.ini

View File

@@ -72,7 +72,6 @@ shell.qml # Main entry point (minimal orchestration)
- **Full-screen components**: AppLauncher, ClipboardHistory, ControlCenterPopup
- **Panel components**: TopBar, SystemTrayWidget, NotificationPopup
- **Reusable controls**: CustomSlider, WorkspaceSwitcher
- Each widget directory contains `qmldir` for module registration
### Key Architectural Patterns
@@ -93,21 +92,15 @@ shell.qml # Main entry point (minimal orchestration)
}
```
2. **Module Registration**: Each directory contains `qmldir` file:
```
singleton ServiceName 1.0 ServiceName.qml
ComponentName 1.0 ComponentName.qml
```
3. **Smart Feature Detection**: Services detect system capabilities:
2. **Smart Feature Detection**: Services detect system capabilities:
```qml
property bool featureAvailable: false
// Auto-hide UI elements when features unavailable
visible: ServiceName.featureAvailable
```
4. **Property Bindings**: Reactive UI updates through property binding
5. **Material Design Theming**: Consistent use of Theme singleton throughout
3. **Property Bindings**: Reactive UI updates through property binding
4. **Material Design Theming**: Consistent use of Theme singleton throughout
### Important Components
@@ -251,19 +244,13 @@ When modifying the shell:
touch Widgets/NewWidget.qml
```
2. **Register in qmldir**:
```
# Add to Widgets/qmldir
NewWidget 1.0 NewWidget.qml
```
3. **Follow widget patterns**:
2. **Follow widget patterns**:
- Use `Theme.propertyName` for styling
- Import `"../Common"` and `"../Services"` as needed
- Bind to service properties for reactive updates
- Consider per-screen vs global behavior
4. **Integration in shell.qml**:
3. **Integration in shell.qml**:
```qml
NewWidget {
id: newWidget
@@ -294,13 +281,7 @@ When modifying the shell:
}
```
2. **Register in qmldir**:
```
# Add to Services/qmldir
singleton NewService 1.0 NewService.qml
```
3. **Use in widgets**:
2. **Use in widgets**:
```qml
// In widget files
property alias serviceValue: NewService.currentValue
@@ -314,7 +295,7 @@ When modifying the shell:
### Debugging Common Issues
1. **Import errors**: Check `qmldir` registration and import paths
1. **Import errors**: Check import paths
2. **Singleton conflicts**: Ensure services use `Singleton` type with `id: root`
3. **Property binding issues**: Use property aliases for reactive updates
4. **Process failures**: Check system tool availability and command syntax
@@ -327,4 +308,4 @@ When modifying the shell:
- **Responsiveness**: Use property bindings for reactive UI
- **Robustness**: Implement feature detection and graceful degradation
- **Consistency**: Follow Material Design 3 principles via Theme singleton
- **Performance**: Minimize expensive operations and use appropriate data structures
- **Performance**: Minimize expensive operations and use appropriate data structures

View File

@@ -1,8 +1,8 @@
pragma Singleton
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell
import Quickshell.Io
pragma Singleton
pragma ComponentBehavior: Bound
QtObject {
id: root

View File

@@ -1,6 +0,0 @@
module Common
singleton Theme 1.0 Theme.qml
singleton Colors 1.0 Colors.qml
singleton Prefs 1.0 Prefs.qml
Utilities 1.0 Utilities.js

View File

@@ -1,10 +1,10 @@
pragma Singleton
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell
import Quickshell.Io
import Quickshell.Widgets
import "../Common/fuzzysort.js" as Fuzzy
pragma Singleton
pragma ComponentBehavior: Bound
Singleton {
id: root

View File

@@ -1,8 +1,8 @@
pragma Singleton
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell
import Quickshell.Services.Pipewire
pragma Singleton
pragma ComponentBehavior: Bound
Singleton {
id: root

View File

@@ -1,9 +1,9 @@
pragma Singleton
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell
import Quickshell.Services.UPower
import Quickshell.Io
pragma Singleton
pragma ComponentBehavior: Bound
Singleton {
id: root

View File

@@ -1,8 +1,8 @@
pragma Singleton
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell
import Quickshell.Bluetooth
pragma Singleton
pragma ComponentBehavior: Bound
Singleton {
id: root

View File

@@ -1,8 +1,8 @@
pragma Singleton
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell
import Quickshell.Io
pragma Singleton
pragma ComponentBehavior: Bound
Singleton {
id: root

View File

@@ -1,8 +1,8 @@
pragma Singleton
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell
import Quickshell.Io
pragma Singleton
pragma ComponentBehavior: Bound
Singleton {
id: root

View File

@@ -1,8 +1,8 @@
pragma Singleton
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell
import Quickshell.Io
pragma Singleton
pragma ComponentBehavior: Bound
Singleton {
id: root

View File

@@ -1,7 +1,7 @@
import QtQuick
import Quickshell
pragma Singleton
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell
Singleton {
id: root

View File

@@ -1,7 +1,7 @@
import QtQuick
import Quickshell
import Quickshell.Io
import "../Common"
import qs.Common
pragma Singleton
pragma ComponentBehavior: Bound

View File

@@ -1,8 +1,8 @@
pragma Singleton
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell
import Quickshell.Io
pragma Singleton
pragma ComponentBehavior: Bound
Singleton {
id: root

View File

@@ -1,8 +1,9 @@
pragma Singleton
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell
import Quickshell.Io
pragma Singleton
pragma ComponentBehavior: Bound
Singleton {
id: root

View File

@@ -1,8 +1,9 @@
import QtQuick
import Quickshell
import Quickshell.Io
pragma Singleton
pragma ComponentBehavior: Bound
import
QtQuick
import Quickshell
import Quickshell.Io
Singleton {
id: root

View File

@@ -1,8 +1,9 @@
pragma Singleton
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell
import Quickshell.Io
pragma Singleton
pragma ComponentBehavior: Bound
Singleton {
id: root

View File

@@ -1,7 +1,7 @@
import QtQuick
import Quickshell
import Quickshell.Io
import "../Common"
import qs.Common
pragma Singleton
pragma ComponentBehavior: Bound

View File

@@ -1,9 +1,9 @@
pragma Singleton
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell
import Quickshell.Io
import "."
pragma Singleton
pragma ComponentBehavior: Bound
Singleton {
id: root

View File

@@ -1,18 +0,0 @@
singleton MprisController 1.0 MprisController.qml
singleton OSDetectorService 1.0 OSDetectorService.qml
singleton WeatherService 1.0 WeatherService.qml
singleton NetworkService 1.0 NetworkService.qml
singleton WifiService 1.0 WifiService.qml
singleton AudioService 1.0 AudioService.qml
singleton BluetoothService 1.0 BluetoothService.qml
singleton BrightnessService 1.0 BrightnessService.qml
singleton BatteryService 1.0 BatteryService.qml
singleton SystemMonitorService 1.0 SystemMonitorService.qml
singleton ProcessMonitorService 1.0 ProcessMonitorService.qml
singleton AppSearchService 1.0 AppSearchService.qml
singleton LauncherService 1.0 LauncherService.qml
singleton NiriWorkspaceService 1.0 NiriWorkspaceService.qml
singleton CalendarService 1.0 CalendarService.qml
singleton UserInfoService 1.0 UserInfoService.qml
singleton FocusedWindowService 1.0 FocusedWindowService.qml
singleton NotificationService 1.0 NotificationService.qml

View File

@@ -1,9 +1,9 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import "../Common"
import "../Services"
import "../Widgets"
import qs.Common
import qs.Services
import qs.Widgets
ApplicationWindow {
id: demoWindow

View File

@@ -5,8 +5,8 @@ import Quickshell
import Quickshell.Widgets
import Quickshell.Wayland
import Quickshell.Io
import "../Common"
import "../Services"
import qs.Common
import qs.Services
PanelWindow {
id: launcher

View File

@@ -3,8 +3,8 @@ import QtQuick.Controls
import Quickshell
import Quickshell.Widgets
import Quickshell.Wayland
import "../Common"
import "../Services"
import qs.Common
import qs.Services
PanelWindow {
id: batteryControlPopup

View File

@@ -1,6 +1,6 @@
import QtQuick
import "../Common"
import "../Services"
import qs.Common
import qs.Services
Rectangle {
id: batteryWidget

View File

@@ -1,8 +1,8 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Effects
import "../../Common"
import "../../Services"
import qs.Common
import qs.Services
Column {
id: calendarWidget

View File

@@ -5,8 +5,8 @@ import Quickshell
import Quickshell.Widgets
import Quickshell.Wayland
import Quickshell.Services.Mpris
import "../../Common"
import "../../Services"
import qs.Common
import qs.Services
PanelWindow {
id: centerCommandCenter

View File

@@ -1,8 +1,8 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Effects
import "../../Common"
import "../../Services"
import qs.Common
import qs.Services
// Events widget for selected date - Material Design 3 style
Rectangle {

View File

@@ -3,8 +3,8 @@ import QtQuick.Controls
import QtQuick.Effects
import Quickshell
import Quickshell.Services.Mpris
import "../../Common"
import "../../Services"
import qs.Common
import qs.Services
Rectangle {
id: mediaPlayerWidget

View File

@@ -1,8 +1,8 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Effects
import "../../Common"
import "../../Services"
import qs.Common
import qs.Services
Rectangle {
id: weatherWidget

View File

@@ -1,5 +0,0 @@
CenterCommandCenter 1.0 CenterCommandCenter.qml
MediaPlayerWidget 1.0 MediaPlayerWidget.qml
WeatherWidget 1.0 WeatherWidget.qml
CalendarWidget 1.0 CalendarWidget.qml
EventsWidget 1.0 EventsWidget.qml

View File

@@ -4,7 +4,7 @@ import Quickshell
import Quickshell.Widgets
import Quickshell.Wayland
import Quickshell.Io
import "../Common"
import qs.Common
PanelWindow {
id: clipboardHistory

View File

@@ -3,8 +3,8 @@ import QtQuick.Controls
import Quickshell
import Quickshell.Widgets
import Quickshell.Io
import "../../Common"
import "../../Services"
import qs.Common
import qs.Services
Item {
id: audioTab

View File

@@ -3,8 +3,8 @@ import QtQuick.Controls
import Quickshell
import Quickshell.Widgets
import Quickshell.Io
import "../../Common"
import "../../Services"
import qs.Common
import qs.Services
Item {
id: bluetoothTab

View File

@@ -5,8 +5,8 @@ import Quickshell
import Quickshell.Widgets
import Quickshell.Wayland
import Quickshell.Io
import "../../Common"
import "../../Services"
import qs.Common
import qs.Services
PanelWindow {
id: controlCenterPopup

View File

@@ -3,9 +3,9 @@ import QtQuick.Controls
import Quickshell
import Quickshell.Widgets
import Quickshell.Io
import "../../Common"
import "../../Services"
import "../"
import qs.Common
import qs.Services
import qs.Widgets
ScrollView {
id: displayTab

View File

@@ -3,8 +3,8 @@ import QtQuick.Controls
import Quickshell
import Quickshell.Widgets
import Quickshell.Io
import "../../Common"
import "../../Services"
import qs.Common
import qs.Services
Item {
id: networkTab

View File

@@ -1,5 +0,0 @@
ControlCenterPopup 1.0 ControlCenterPopup.qml
NetworkTab 1.0 NetworkTab.qml
AudioTab 1.0 AudioTab.qml
BluetoothTab 1.0 BluetoothTab.qml
DisplayTab 1.0 DisplayTab.qml

View File

@@ -1,7 +1,7 @@
import QtQuick
import QtQuick.Controls
import "../Common"
import "../Services"
import qs.Common
import qs.Services
import "."
Rectangle {

View File

@@ -1,5 +1,5 @@
import QtQuick
import "../Common"
import qs.Common
Item {
id: slider

View File

@@ -4,8 +4,8 @@ import QtQuick.Effects
import Quickshell
import Quickshell.Widgets
import Quickshell.Services.Notifications
import "../Common"
import "../Services"
import qs.Common
import qs.Services
Rectangle {
id: root

View File

@@ -3,7 +3,7 @@ import QtQuick.Controls
import Quickshell
import Quickshell.Widgets
import Quickshell.Wayland
import "../Common"
import qs.Common
PanelWindow {
id: inputDialog

View File

@@ -4,8 +4,8 @@ import QtQuick.Controls
import Quickshell
import Quickshell.Widgets
import Quickshell.Wayland
import "../Common"
import "../Services"
import qs.Common
import qs.Services
PanelWindow {
id: notificationHistoryPopup

View File

@@ -3,8 +3,8 @@ import QtQuick.Controls
import Quickshell
import Quickshell.Widgets
import Quickshell.Wayland
import "../Common"
import "../Services"
import qs.Common
import qs.Services
PanelWindow {
id: notificationPopup

View File

@@ -4,8 +4,8 @@ import QtQuick.Effects
import Quickshell
import Quickshell.Widgets
import Quickshell.Services.Notifications
import "../Common"
import "../Services"
import qs.Common
import qs.Services
Rectangle {
id: root

View File

@@ -4,7 +4,7 @@ import Quickshell
import Quickshell.Widgets
import Quickshell.Wayland
import Quickshell.Io
import "../Common"
import qs.Common
PanelWindow {
id: powerConfirmDialog

View File

@@ -4,7 +4,7 @@ import Quickshell
import Quickshell.Widgets
import Quickshell.Wayland
import Quickshell.Io
import "../Common"
import qs.Common
PanelWindow {
id: powerMenuPopup

View File

@@ -6,8 +6,8 @@ import Quickshell
import Quickshell.Widgets
import Quickshell.Wayland
import Quickshell.Io
import "../Common"
import "../Services"
import qs.Common
import qs.Services
PanelWindow {
id: processDropdown

View File

@@ -6,8 +6,8 @@ import Quickshell
import Quickshell.Widgets
import Quickshell.Wayland
import Quickshell.Io
import "../Common"
import "../Services"
import qs.Common
import qs.Services
PanelWindow {
id: processListWidget

View File

@@ -1,7 +1,7 @@
import QtQuick
import QtQuick.Controls
import "../Common"
import "../Services"
import qs.Common
import qs.Services
import "."
Rectangle {

View File

@@ -5,7 +5,7 @@ import Quickshell
import Quickshell.Widgets
import Quickshell.Wayland
import Quickshell.Io
import "../Common"
import qs.Common
PanelWindow {
id: settingsPopup

View File

@@ -1,5 +1,5 @@
import QtQuick
import "../Common"
import qs.Common
Column {
id: root

View File

@@ -1,5 +1,5 @@
import QtQuick
import "../Common"
import qs.Common
Rectangle {
id: root

View File

@@ -5,8 +5,8 @@ import Quickshell
import Quickshell.Widgets
import Quickshell.Wayland
import Quickshell.Io
import "../Common"
import "../Services"
import qs.Common
import qs.Services
PanelWindow {
id: spotlightLauncher

View File

@@ -1,5 +1,5 @@
import QtQuick
import "../Common"
import qs.Common
Column {
id: themePicker

View File

@@ -2,7 +2,7 @@ import QtQuick
import Quickshell
import Quickshell.Io
import Quickshell.Services.Mpris
import "../../Common"
import qs.Common
Item {
id: root

View File

@@ -1,6 +1,6 @@
import QtQuick
import Quickshell
import "../../Common"
import qs.Common
Rectangle {
id: root

View File

@@ -1,6 +1,6 @@
import QtQuick
import "../../Common"
import "../../Services"
import qs.Common
import qs.Services
Rectangle {
id: root

View File

@@ -1,6 +1,6 @@
import QtQuick
import "../../Common"
import "../../Services"
import qs.Common
import qs.Services
Rectangle {
id: root

View File

@@ -1,6 +1,6 @@
import QtQuick
import "../../Common"
import "../../Services"
import qs.Common
import qs.Services
Rectangle {
id: root

View File

@@ -1,6 +1,6 @@
import QtQuick
import Quickshell.Services.Mpris
import "../../Common"
import qs.Common
Rectangle {
id: root

View File

@@ -1,5 +1,5 @@
import QtQuick
import "../../Common"
import qs.Common
Rectangle {
id: root

View File

@@ -1,6 +1,6 @@
import QtQuick
import Quickshell.Services.SystemTray
import "../../Common"
import qs.Common
Rectangle {
id: root

View File

@@ -8,10 +8,10 @@ import Quickshell.Io
import Quickshell.Services.SystemTray
import Quickshell.Services.Notifications
import Quickshell.Services.Mpris
import "../../Common"
import qs.Common
import qs.Services
import qs.Widgets
import "../../Common/Utilities.js" as Utils
import "../../Services"
import ".."
PanelWindow {
id: topBar

View File

@@ -1,6 +1,6 @@
import QtQuick
import "../../Common"
import "../../Services"
import qs.Common
import qs.Services
Rectangle {
id: root

View File

@@ -1,7 +1,7 @@
import QtQuick
import Quickshell
import "../../Common"
import "../../Services"
import qs.Common
import qs.Services
Rectangle {
id: root

View File

@@ -1,11 +0,0 @@
TopBar 1.0 TopBar.qml
LauncherButton 1.0 LauncherButton.qml
WorkspaceSwitcher 1.0 WorkspaceSwitcher.qml
FocusedAppWidget 1.0 FocusedAppWidget.qml
ClockWidget 1.0 ClockWidget.qml
MediaWidget 1.0 MediaWidget.qml
WeatherWidget 1.0 WeatherWidget.qml
SystemTrayWidget 1.0 SystemTrayWidget.qml
NotificationCenterButton 1.0 NotificationCenterButton.qml
ControlCenterButton 1.0 ControlCenterButton.qml
AudioVisualization 1.0 AudioVisualization.qml

View File

@@ -3,7 +3,7 @@ import QtQuick.Controls
import Quickshell
import Quickshell.Widgets
import Quickshell.Wayland
import "../Common"
import qs.Common
PanelWindow {
id: trayMenuPopup

View File

@@ -3,8 +3,8 @@ import QtQuick.Controls
import Quickshell
import Quickshell.Widgets
import Quickshell.Wayland
import "../Common"
import "../Services"
import qs.Common
import qs.Services
PanelWindow {
id: wifiPasswordDialog

View File

@@ -1,24 +0,0 @@
TopBar 1.0 TopBar/TopBar.qml
TrayMenuPopup 1.0 TrayMenuPopup.qml
NotificationItem 1.0 NotificationItem.qml
NotificationInit 1.0 NotificationInit.qml
NotificationCenter 1.0 NotificationCenter.qml
GroupedNotificationCard 1.0 GroupedNotificationCard.qml
WifiPasswordDialog 1.0 WifiPasswordDialog.qml
AppLauncher 1.0 AppLauncher.qml
ClipboardHistory 1.0 ClipboardHistory.qml
CustomSlider 1.0 CustomSlider.qml
InputDialog 1.0 InputDialog.qml
BatteryWidget 1.0 BatteryWidget.qml
BatteryControlPopup 1.0 BatteryControlPopup.qml
PowerMenuPopup 1.0 PowerMenuPopup.qml
PowerConfirmDialog 1.0 PowerConfirmDialog.qml
ThemePicker 1.0 ThemePicker.qml
CpuMonitorWidget 1.0 CpuMonitorWidget.qml
RamMonitorWidget 1.0 RamMonitorWidget.qml
ProcessListDropdown 1.0 ProcessListDropdown.qml
ProcessListWidget 1.0 ProcessListWidget.qml
SpotlightLauncher 1.0 SpotlightLauncher.qml
SettingsPopup 1.0 SettingsPopup.qml
SettingsSection 1.0 SettingsSection.qml
SettingsToggle 1.0 SettingsToggle.qml

View File

@@ -10,12 +10,13 @@ import Quickshell.Io
import Quickshell.Services.SystemTray
import Quickshell.Services.Notifications
import Quickshell.Services.Mpris
import "Services"
import "Widgets"
import "Widgets/CenterCommandCenter"
import "Widgets/ControlCenter"
import "Common"
import "Common/Utilities.js" as Utils
import qs.Services
import qs.Widgets
import qs.Widgets.CenterCommandCenter
import qs.Widgets.ControlCenter
import qs.Widgets.TopBar
import qs.Common
import "./Common/Utilities.js" as Utils
ShellRoot {
id: root