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

unified SessionService to support elogind equivalents of systemd

commands
This commit is contained in:
bbedward
2025-08-22 11:40:20 -04:00
parent de17d53f1e
commit dd99cb7ef8
38 changed files with 84 additions and 91 deletions

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtCore
import QtQuick

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtCore
import QtQuick

View File

@@ -1,11 +1,11 @@
pragma Singleton
pragma ComponentBehavior: Bound
import QtCore
import QtQuick
import Quickshell
import Quickshell.Io
import qs.Services
pragma Singleton
pragma ComponentBehavior
Singleton {
id: root

View File

@@ -1,5 +1,3 @@
pragma ComponentBehavior
import QtQuick
import QtQuick.Controls
import QtCore

View File

@@ -26,13 +26,13 @@ DankModal {
CompositorService.logout()
break
case "suspend":
Quickshell.execDetached(["systemctl", "suspend"])
SessionService.suspend()
break
case "reboot":
Quickshell.execDetached(["systemctl", "reboot"])
SessionService.reboot()
break
case "poweroff":
Quickshell.execDetached(["systemctl", "poweroff"])
SessionService.poweroff()
break
}
}

View File

@@ -7,7 +7,6 @@ import qs.Common
import qs.Modules.Settings
import qs.Services
import qs.Widgets
pragma ComponentBehavior
DankModal {
id: settingsModal

View File

@@ -1,5 +1,3 @@
pragma ComponentBehavior
import QtQuick
import Quickshell
import Quickshell.Io

View File

@@ -9,7 +9,6 @@ import qs.Common
import qs.Modals
import qs.Services
import qs.Widgets
pragma ComponentBehavior
Item {
id: root
@@ -966,8 +965,7 @@ Item {
cursorShape: Qt.PointingHandCursor
onClicked: {
powerDialog.close()
Quickshell.execDetached(
["systemctl", "poweroff"])
SessionService.poweroff()
}
}
}
@@ -1077,7 +1075,7 @@ Item {
cursorShape: Qt.PointingHandCursor
onClicked: {
rebootDialog.close()
Quickshell.execDetached(["systemctl", "reboot"])
SessionService.reboot()
}
}
}

View File

@@ -1,5 +1,3 @@
pragma ComponentBehavior
import QtQuick
import Quickshell
import Quickshell.Wayland

View File

@@ -1,5 +1,3 @@
pragma ComponentBehavior
import QtQuick
import Quickshell
import Quickshell.Wayland

View File

@@ -12,7 +12,7 @@ DankOSD {
enableMouseInteraction: false
Connections {
target: IdleInhibitorService
target: SessionService
function onInhibitorChanged() {
root.show()
}
@@ -20,8 +20,8 @@ DankOSD {
content: DankIcon {
anchors.centerIn: parent
name: IdleInhibitorService.idleInhibited ? "motion_sensor_active" : "motion_sensor_idle"
name: SessionService.idleInhibited ? "motion_sensor_active" : "motion_sensor_idle"
size: Theme.iconSize
color: IdleInhibitorService.idleInhibited ? Theme.primary : Theme.outline
color: SessionService.idleInhibited ? Theme.primary : Theme.outline
}
}

View File

@@ -1,5 +1,3 @@
pragma ComponentBehavior
import QtQuick
import qs.Common
import qs.Widgets

View File

@@ -16,14 +16,14 @@ Rectangle {
height: 30
radius: Theme.cornerRadius
color: {
const baseColor = mouseArea.containsMouse ? Theme.primaryPressed : (IdleInhibitorService.idleInhibited ? Theme.primaryHover : Theme.secondaryHover)
const baseColor = mouseArea.containsMouse ? Theme.primaryPressed : (SessionService.idleInhibited ? Theme.primaryHover : Theme.secondaryHover)
return Qt.rgba(baseColor.r, baseColor.g, baseColor.b,
baseColor.a * Theme.widgetTransparency)
}
DankIcon {
anchors.centerIn: parent
name: IdleInhibitorService.idleInhibited ? "motion_sensor_active" : "motion_sensor_idle"
name: SessionService.idleInhibited ? "motion_sensor_active" : "motion_sensor_idle"
size: Theme.iconSize - 6
color: Theme.surfaceText
}
@@ -36,7 +36,7 @@ Rectangle {
cursorShape: Qt.PointingHandCursor
onClicked: {
IdleInhibitorService.toggleIdleInhibit()
SessionService.toggleIdleInhibit()
}
}

View File

@@ -1,4 +1,4 @@
# DankMaterialShell
# DankMaterialShell (dms)
<div align=center>
@@ -136,11 +136,12 @@ For detailed Hyprland installation instructions, see the [Hyprland wiki](https:/
### Quick Start
We don't have a nice install setup yet to just isntall everything with some nice default dotfiles, but it's coming soon™ (it's pretty easy though, especially with niri)
\*If you do not already have niri or Hyprland, see the Compositor Setup section below
**Dependencies:**
# Arch Linux
```bash
paru -S quickshell-git ttf-material-symbols-variable-git inter-font ttf-fira-code
@@ -163,7 +164,6 @@ fc-cache -f
**Get the shell:**
# Arch linux available via AUR
```bash
paru -S dankmaterialshell-git

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell

View File

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

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell

View File

@@ -1,10 +1,10 @@
pragma Singleton
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell
import Quickshell.Io
import qs.Common
pragma Singleton
pragma ComponentBehavior
Singleton {
id: root
@@ -501,8 +501,8 @@ Singleton {
function getProcessIcon(command) {
const cmd = command.toLowerCase()
if (cmd.includes("firefox") || cmd.includes("chrome") || cmd.includes(
"browser"))
if (cmd.includes("firefox") || cmd.includes("chrome") ||
cmd.includes("browser") || cmd.includes("chromium"))
return "web"
if (cmd.includes("code") || cmd.includes("editor")
|| cmd.includes("vim"))
@@ -515,8 +515,9 @@ Singleton {
return "music_note"
if (cmd.includes("video") || cmd.includes("vlc") || cmd.includes("mpv"))
return "play_circle"
if (cmd.includes("systemd") || cmd.includes("kernel") || cmd.includes(
"kthread"))
if (cmd.includes("systemd") || cmd.includes("elogind") ||
cmd.includes("kernel") || cmd.includes("kthread") ||
cmd.includes("kworker"))
return "settings"
return "memory"
}

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell

View File

@@ -1,18 +1,47 @@
pragma Singleton
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell
import Quickshell.Io
import qs.Common
pragma Singleton
pragma ComponentBehavior
Singleton {
id: root
property bool isElogind: false
property bool inhibitorAvailable: true
property bool idleInhibited: false
property string inhibitReason: "Keep system awake"
Component.onCompleted: {
detectElogindProcess.running = true
}
Process {
id: detectElogindProcess
running: false
command: ["sh", "-c", "ps -eo comm= | grep -Fx elogind"]
onExited: function (exitCode) {
console.log("SessionService: Elogind detection exited with code", exitCode)
isElogind = (exitCode === 0)
}
}
function suspend() {
Quickshell.execDetached([isElogind ? "loginctl" : "systemctl", "suspend"])
}
function reboot() {
Quickshell.execDetached([isElogind ? "loginctl" : "systemctl", "reboot"])
}
function poweroff() {
Quickshell.execDetached([isElogind ? "loginctl" : "systemctl", "poweroff"])
}
// * Idle Inhibitor
signal inhibitorChanged
function enableIdleInhibit() {
@@ -59,7 +88,7 @@ Singleton {
return ["true"]
}
return ["systemd-inhibit", "--what=idle", "--who=quickshell", "--why="
return [isElogind ? "elogind-inhibit" : "systemd-inhibit", "--what=idle", "--who=quickshell", "--why="
+ inhibitReason, "--mode=block", "sleep", "infinity"]
}
@@ -67,7 +96,7 @@ Singleton {
onExited: function (exitCode) {
if (idleInhibited && exitCode !== 0) {
console.warn("IdleInhibitorService: Inhibitor process crashed with exit code:",
console.warn("SessionService: Inhibitor process crashed with exit code:",
exitCode)
idleInhibited = false
ToastService.showWarning("Idle inhibitor failed")

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell

View File

@@ -1,6 +1,5 @@
pragma Singleton
pragma ComponentBehavior
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell

View File

@@ -1,5 +1,3 @@
pragma ComponentBehavior
import QtQuick
import Quickshell
import Quickshell.Io