1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-01-24 21:42:51 -05:00

Add support for custom launch prefix, launch apps with niri msg action

spawn on niri
This commit is contained in:
bbedward
2025-09-20 11:54:46 -04:00
parent 0ba4ee74b5
commit 306a0c0e2d
7 changed files with 92 additions and 7 deletions

View File

@@ -44,6 +44,7 @@ Singleton {
property int wallpaperCyclingInterval: 300 // seconds (5 minutes)
property string wallpaperCyclingTime: "06:00" // HH:mm format
property string lastBrightnessDevice: ""
property string launchPrefix: ""
// Power management settings - AC Power
property int acMonitorTimeout: 0 // Never
@@ -110,6 +111,7 @@ Singleton {
wallpaperCyclingInterval = settings.wallpaperCyclingInterval !== undefined ? settings.wallpaperCyclingInterval : 300
wallpaperCyclingTime = settings.wallpaperCyclingTime !== undefined ? settings.wallpaperCyclingTime : "06:00"
lastBrightnessDevice = settings.lastBrightnessDevice !== undefined ? settings.lastBrightnessDevice : ""
launchPrefix = settings.launchPrefix !== undefined ? settings.launchPrefix : ""
acMonitorTimeout = settings.acMonitorTimeout !== undefined ? settings.acMonitorTimeout : 0
acLockTimeout = settings.acLockTimeout !== undefined ? settings.acLockTimeout : 0
@@ -160,6 +162,7 @@ Singleton {
"wallpaperCyclingInterval": wallpaperCyclingInterval,
"wallpaperCyclingTime": wallpaperCyclingTime,
"lastBrightnessDevice": lastBrightnessDevice,
"launchPrefix": launchPrefix,
"acMonitorTimeout": acMonitorTimeout,
"acLockTimeout": acLockTimeout,
"acSuspendTimeout": acSuspendTimeout,
@@ -409,6 +412,11 @@ Singleton {
saveSettings()
}
function setLaunchPrefix(prefix) {
launchPrefix = prefix
saveSettings()
}
function setAcMonitorTimeout(timeout) {
acMonitorTimeout = timeout
saveSettings()

View File

@@ -115,14 +115,14 @@ Item {
}
Loader {
id: recentAppsLoader
id: launcherLoader
anchors.fill: parent
active: root.currentIndex === 7
visible: active
asynchronous: true
sourceComponent: RecentAppsTab {
sourceComponent: LauncherTab {
}
}

View File

@@ -30,8 +30,8 @@ Rectangle {
"text": "Displays",
"icon": "monitor"
}, {
"text": "Recent Apps",
"icon": "history"
"text": "Launcher",
"icon": "apps"
}, {
"text": "Theme & Colors",
"icon": "palette"

View File

@@ -131,7 +131,7 @@ Item {
return
}
suppressUpdatesWhileLaunching = true
appData.desktopEntry.execute()
SessionService.launchDesktopEntry(appData.desktopEntry)
appLaunched(appData)
AppUsageHistoryData.addAppUsage(appData.desktopEntry)
}

View File

@@ -225,7 +225,7 @@ Item {
"comment": desktopEntry.comment || ""
})
}
desktopEntry.execute()
SessionService.launchDesktopEntry(desktopEntry)
}
} else if (appData.type === "window") {
const toplevel = getToplevelObject()
@@ -245,7 +245,7 @@ Item {
"comment": desktopEntry.comment || ""
})
}
desktopEntry.execute()
SessionService.launchDesktopEntry(desktopEntry)
}
} else if (mouse.button === Qt.RightButton) {
if (contextMenu) {

View File

@@ -19,6 +19,62 @@ Item {
width: parent.width
spacing: Theme.spacingXL
StyledRect {
width: parent.width
height: launchPrefixSection.implicitHeight + Theme.spacingL * 2
radius: Theme.cornerRadius
color: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g,
Theme.surfaceVariant.b, 0.3)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g,
Theme.outline.b, 0.2)
border.width: 1
Column {
id: launchPrefixSection
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingM
Row {
width: parent.width
spacing: Theme.spacingM
DankIcon {
name: "terminal"
size: Theme.iconSize
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: "Launch Prefix"
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Medium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
}
StyledText {
width: parent.width
text: "Add a custom prefix to all application launches. This can be used for things like 'uwsm-app', 'systemd-run', or other command wrappers."
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
wrapMode: Text.WordWrap
}
DankTextField {
width: parent.width
text: SessionData.launchPrefix
placeholderText: "Enter launch prefix (e.g., 'uwsm-app')"
onTextEdited: {
SessionData.setLaunchPrefix(text)
}
}
}
}
StyledRect {
width: parent.width
height: recentlyUsedSection.implicitHeight + Theme.spacingL * 2

View File

@@ -21,6 +21,7 @@ Singleton {
detectElogindProcess.running = true
}
Process {
id: detectUwsmProcess
running: false
@@ -64,6 +65,26 @@ Singleton {
}
}
// * Apps
function launchDesktopEntry(desktopEntry) {
let cmd = desktopEntry.command
if (SessionData.launchPrefix && SessionData.launchPrefix.length > 0) {
const launchPrefix = SessionData.launchPrefix.trim().split(" ")
cmd = launchPrefix.concat(cmd)
}
// For niri spawn with niri msg action spawn --
if (CompositorService.isNiri) {
cmd = ["niri", "msg", "action", "spawn", "--"].concat(cmd)
}
Quickshell.execDetached({
command: cmd,
workingDirectory: desktopEntry.workingDirectory,
});
}
// * Session management
function logout() {
if (hasUwsm) {
uwsmLogout.running = true