summaryrefslogtreecommitdiff
path: root/accounts/gkleen@sif
diff options
context:
space:
mode:
authorGregor Kleen <gkleen@yggdrasil.li>2026-07-08 22:51:44 +0200
committerGregor Kleen <gkleen@yggdrasil.li>2026-07-08 22:51:44 +0200
commitf4d01d2d9f7a921f40a3b192637959ddf9129669 (patch)
treef5f85751d7042088fd152722576f72943a26b472 /accounts/gkleen@sif
parent4751f7390f1e2d4fd5a6a7e22ca111444e915583 (diff)
downloadnixos-f4d01d2d9f7a921f40a3b192637959ddf9129669.tar
nixos-f4d01d2d9f7a921f40a3b192637959ddf9129669.tar.gz
nixos-f4d01d2d9f7a921f40a3b192637959ddf9129669.tar.bz2
nixos-f4d01d2d9f7a921f40a3b192637959ddf9129669.tar.xz
nixos-f4d01d2d9f7a921f40a3b192637959ddf9129669.zip
Diffstat (limited to 'accounts/gkleen@sif')
-rw-r--r--accounts/gkleen@sif/shell/quickshell-plugins/CMakeLists.txt22
-rw-r--r--accounts/gkleen@sif/shell/quickshell-plugins/ListUnitsEntry.cpp41
-rw-r--r--accounts/gkleen@sif/shell/quickshell-plugins/ListUnitsEntry.hpp26
-rw-r--r--accounts/gkleen@sif/shell/quickshell-plugins/Systemd.cpp92
-rw-r--r--accounts/gkleen@sif/shell/quickshell-plugins/Systemd.hpp46
-rw-r--r--accounts/gkleen@sif/shell/quickshell-plugins/default.nix2
-rw-r--r--accounts/gkleen@sif/shell/quickshell-plugins/org.freedesktop.systemd1.Manager.xml36
-rw-r--r--accounts/gkleen@sif/shell/quickshell-plugins/org.freedesktop.systemd1.Service.xml1100
-rw-r--r--accounts/gkleen@sif/shell/quickshell-plugins/org.freedesktop.systemd1.Unit.xml359
-rw-r--r--accounts/gkleen@sif/shell/quickshell/Bar.qml14
-rw-r--r--accounts/gkleen@sif/shell/quickshell/Services/NiriService.qml1
-rw-r--r--accounts/gkleen@sif/shell/quickshell/YtDlpWidget.qml190
-rw-r--r--accounts/gkleen@sif/systemd.nix43
13 files changed, 1950 insertions, 22 deletions
diff --git a/accounts/gkleen@sif/shell/quickshell-plugins/CMakeLists.txt b/accounts/gkleen@sif/shell/quickshell-plugins/CMakeLists.txt
index 020c0515..6b4f0d48 100644
--- a/accounts/gkleen@sif/shell/quickshell-plugins/CMakeLists.txt
+++ b/accounts/gkleen@sif/shell/quickshell-plugins/CMakeLists.txt
@@ -114,6 +114,7 @@ qt_add_dbus_interface(DBUS_INTERFACES
114set_source_files_properties(org.freedesktop.systemd1.Manager.xml PROPERTIES 114set_source_files_properties(org.freedesktop.systemd1.Manager.xml PROPERTIES
115 CLASSNAME DBusSystemdManager 115 CLASSNAME DBusSystemdManager
116 NO_NAMESPACE TRUE 116 NO_NAMESPACE TRUE
117 INCLUDE ListUnitsEntry.hpp
117) 118)
118qt_add_dbus_interface(DBUS_INTERFACES 119qt_add_dbus_interface(DBUS_INTERFACES
119 org.freedesktop.systemd1.Manager.xml 120 org.freedesktop.systemd1.Manager.xml
@@ -138,6 +139,24 @@ qt_add_dbus_interface(DBUS_INTERFACES
138 dbus_logind_session 139 dbus_logind_session
139) 140)
140 141
142set_source_files_properties(org.freedesktop.systemd1.Unit.xml PROPERTIES
143 CLASSNAME DBusSystemdUnit
144 NO_NAMESPACE TRUE
145)
146qt_add_dbus_interface(DBUS_INTERFACES
147 org.freedesktop.systemd1.Unit.xml
148 dbus_systemd_unit
149)
150
151set_source_files_properties(org.freedesktop.systemd1.Service.xml PROPERTIES
152 CLASSNAME DBusSystemdService
153 NO_NAMESPACE TRUE
154)
155qt_add_dbus_interface(DBUS_INTERFACES
156 org.freedesktop.systemd1.Service.xml
157 dbus_systemd_service
158)
159
141set_source_files_properties(org.freedesktop.DBus.Properties.xml PROPERTIES 160set_source_files_properties(org.freedesktop.DBus.Properties.xml PROPERTIES
142 CLASSNAME DBusProperties 161 CLASSNAME DBusProperties
143 NO_NAMESPACE TRUE 162 NO_NAMESPACE TRUE
@@ -148,6 +167,7 @@ qt_add_dbus_interface(DBUS_INTERFACES
148) 167)
149 168
150include_directories(${CMAKE_SOURCE_DIR}/build) 169include_directories(${CMAKE_SOURCE_DIR}/build)
170include_directories(${QUICKSHELL_SRC}/src)
151 171
152target_compile_features(customplugin PUBLIC cxx_std_26) 172target_compile_features(customplugin PUBLIC cxx_std_26)
153 173
@@ -162,7 +182,9 @@ target_sources(customplugin PRIVATE
162 FileSelector.cpp FileSelector.hpp 182 FileSelector.cpp FileSelector.hpp
163 KeePassXC.cpp KeePassXC.hpp 183 KeePassXC.cpp KeePassXC.hpp
164 Systemd.cpp Systemd.hpp 184 Systemd.cpp Systemd.hpp
185 ListUnitsEntry.cpp ListUnitsEntry.hpp
165 ${DBUS_INTERFACES} 186 ${DBUS_INTERFACES}
187 ${QUICKSHELL_SRC}/src/core/model.cpp ${QUICKSHELL_SRC}/src/core/model.hpp
166) 188)
167 189
168install_qml_module(customplugin) 190install_qml_module(customplugin)
diff --git a/accounts/gkleen@sif/shell/quickshell-plugins/ListUnitsEntry.cpp b/accounts/gkleen@sif/shell/quickshell-plugins/ListUnitsEntry.cpp
new file mode 100644
index 00000000..c1f9537c
--- /dev/null
+++ b/accounts/gkleen@sif/shell/quickshell-plugins/ListUnitsEntry.cpp
@@ -0,0 +1,41 @@
1#include "ListUnitsEntry.hpp"
2
3void ListUnitsEntry::registerMetaType() {
4 qRegisterMetaType<ListUnitsEntry>("ListUnitsEntry");
5 qDBusRegisterMetaType<ListUnitsEntry>();
6}
7
8QDBusArgument& operator<<(QDBusArgument& argument, const ListUnitsEntry& entry) {
9 argument.beginStructure();
10 argument
11 << entry.primaryName
12 << entry.description
13 << entry.loadState
14 << entry.activeState
15 << entry.subState
16 << entry.followingUnit
17 << entry.unitPath
18 << entry.jobId
19 << entry.jobType
20 << entry.jobPath;
21 argument.endStructure();
22
23 return argument;
24}
25const QDBusArgument& operator>>(const QDBusArgument& argument, ListUnitsEntry& entry) {
26 argument.beginStructure();
27 argument
28 >> entry.primaryName
29 >> entry.description
30 >> entry.loadState
31 >> entry.activeState
32 >> entry.subState
33 >> entry.followingUnit
34 >> entry.unitPath
35 >> entry.jobId
36 >> entry.jobType
37 >> entry.jobPath;
38 argument.endStructure();
39
40 return argument;
41}
diff --git a/accounts/gkleen@sif/shell/quickshell-plugins/ListUnitsEntry.hpp b/accounts/gkleen@sif/shell/quickshell-plugins/ListUnitsEntry.hpp
new file mode 100644
index 00000000..15d789b9
--- /dev/null
+++ b/accounts/gkleen@sif/shell/quickshell-plugins/ListUnitsEntry.hpp
@@ -0,0 +1,26 @@
1#pragma once
2
3#include <QtDBus>
4#include <QtTypes>
5
6struct ListUnitsEntry {
7 QString primaryName;
8 QString description;
9 QString loadState;
10 QString activeState;
11 QString subState;
12 QString followingUnit;
13 QDBusObjectPath unitPath;
14 uint jobId;
15 QString jobType;
16 QDBusObjectPath jobPath;
17
18 friend QDBusArgument& operator<<(QDBusArgument& argument, const ListUnitsEntry& entry);
19 friend const QDBusArgument& operator>>(const QDBusArgument& argument, ListUnitsEntry& entry);
20 static void registerMetaType();
21};
22
23Q_DECLARE_METATYPE(ListUnitsEntry)
24
25using ListUnitsResult = QList<ListUnitsEntry>;
26Q_DECLARE_METATYPE(ListUnitsResult)
diff --git a/accounts/gkleen@sif/shell/quickshell-plugins/Systemd.cpp b/accounts/gkleen@sif/shell/quickshell-plugins/Systemd.cpp
index 308659e9..6376b527 100644
--- a/accounts/gkleen@sif/shell/quickshell-plugins/Systemd.cpp
+++ b/accounts/gkleen@sif/shell/quickshell-plugins/Systemd.cpp
@@ -8,7 +8,12 @@
8#include <QDBusUnixFileDescriptor> 8#include <QDBusUnixFileDescriptor>
9#include <QDBusObjectPath> 9#include <QDBusObjectPath>
10 10
11#include <set>
12
11Systemd::Systemd(QObject* parent) : QObject(parent) { 13Systemd::Systemd(QObject* parent) : QObject(parent) {
14 ListUnitsEntry::registerMetaType();
15 qDBusRegisterMetaType<ListUnitsResult>();
16
12 this->systemdManager = new DBusSystemdManager( 17 this->systemdManager = new DBusSystemdManager(
13 "org.freedesktop.systemd1", 18 "org.freedesktop.systemd1",
14 "/org/freedesktop/systemd1", 19 "/org/freedesktop/systemd1",
@@ -22,8 +27,9 @@ Systemd::Systemd(QObject* parent) : QObject(parent) {
22 this 27 this
23 ); 28 );
24 29
30
25 QDBusReply<QDBusObjectPath> sessionPath = this->logindManager->GetSession("auto"); 31 QDBusReply<QDBusObjectPath> sessionPath = this->logindManager->GetSession("auto");
26 qDebug() << sessionPath; 32 // qDebug() << sessionPath;
27 this->logindSession = new DBusLogindSession( 33 this->logindSession = new DBusLogindSession(
28 "org.freedesktop.login1", 34 "org.freedesktop.login1",
29 sessionPath.value().path(), 35 sessionPath.value().path(),
@@ -42,6 +48,12 @@ Systemd::Systemd(QObject* parent) : QObject(parent) {
42 QObject::connect(this->logindSession, &DBusLogindSession::Lock, this, &Systemd::lock); 48 QObject::connect(this->logindSession, &DBusLogindSession::Lock, this, &Systemd::lock);
43 QObject::connect(this->logindSession, &DBusLogindSession::Unlock, this, &Systemd::unlock); 49 QObject::connect(this->logindSession, &DBusLogindSession::Unlock, this, &Systemd::unlock);
44 QObject::connect(this->logindSessionProperties, &DBusProperties::PropertiesChanged, this, &Systemd::onLogindSessionPropertiesChanged); 50 QObject::connect(this->logindSessionProperties, &DBusProperties::PropertiesChanged, this, &Systemd::onLogindSessionPropertiesChanged);
51 this->systemdManager->Subscribe();
52 QObject::connect(this->systemdManager, &DBusSystemdManager::UnitNew, this, &Systemd::onUserUnitNew);
53 QObject::connect(this->systemdManager, &DBusSystemdManager::UnitRemoved, this, &Systemd::onUserUnitRemoved);
54
55 for (const auto& unit: this->systemdManager->ListUnits().value())
56 this->onUserUnitNew(unit.primaryName, unit.unitPath);
45} 57}
46 58
47void Systemd::onLogindSessionPropertiesChanged(const QString& interface_name, const QVariantMap& changed_properties, const QStringList& invalidated_properties) { 59void Systemd::onLogindSessionPropertiesChanged(const QString& interface_name, const QVariantMap& changed_properties, const QStringList& invalidated_properties) {
@@ -50,6 +62,82 @@ void Systemd::onLogindSessionPropertiesChanged(const QString& interface_name, co
50 if (changed_properties.contains("LockedHint") || invalidated_properties.contains("LockedHint")) 62 if (changed_properties.contains("LockedHint") || invalidated_properties.contains("LockedHint"))
51 emit this->lockedHintChanged(); 63 emit this->lockedHintChanged();
52} 64}
65void Systemd::onUserUnitNew(const QString& id, const QDBusObjectPath& object_path) {
66 for (auto unit: this->mUserUnits.valueList())
67 if (unit->path() == object_path)
68 return;
69
70 for (const auto& unit: this->systemdManager->ListUnits().value())
71 if (unit.unitPath == object_path) {
72 this->mUserUnits.insertObject(new SystemdUnit(this, object_path, id));
73 return;
74 }
75}
76void Systemd::onUserUnitRemoved(const QString& id, const QDBusObjectPath& object_path) {
77 std::set<SystemdUnit*> toRemove;
78 for (auto unit: this->mUserUnits.valueList())
79 if (unit->path() == object_path)
80 toRemove.insert(unit);
81
82 for (auto unit: toRemove) {
83 this->mUserUnits.removeObject(unit);
84 delete unit;
85 }
86}
87
88SystemdUnit::SystemdUnit(QObject* parent, const QDBusObjectPath& path, const QString& id): QObject(parent), mPath(path), mId(id) {
89 this->mUnitProperties = new DBusProperties(
90 "org.freedesktop.systemd1",
91 this->path().path(),
92 QDBusConnection::sessionBus(),
93 this
94 );
95}
96std::unique_ptr<DBusSystemdUnit> SystemdUnit::systemdUnit() {
97 return std::make_unique<DBusSystemdUnit>(
98 "org.freedesktop.systemd1",
99 this->path().path(),
100 QDBusConnection::sessionBus(),
101 nullptr
102 );
103}
104std::unique_ptr<DBusSystemdService> SystemdUnit::systemdService() {
105 if (!this->id().endsWith(".service"))
106 return std::unique_ptr<DBusSystemdService>();
107
108 return std::make_unique<DBusSystemdService>(
109 "org.freedesktop.systemd1",
110 this->path().path(),
111 QDBusConnection::sessionBus(),
112 nullptr
113 );
114}
115QList<QString> SystemdUnit::runtimeDirectory() {
116 if (std::unique_ptr<DBusSystemdService> systemdService = this->systemdService()) {
117 if (!this->mRuntimeDirectory)
118 this->mRuntimeDirectory = systemdService->runtimeDirectory();
119 return *this->mRuntimeDirectory;
120 }
121
122 return QList<QString>{};
123}
124QString SystemdUnit::activeState() {
125 if (!this->mActiveState) {
126 QObject::connect(this->mUnitProperties, &DBusProperties::PropertiesChanged, this, &SystemdUnit::onUnitPropertiesChanged);
127 this->mActiveState = this->systemdUnit()->activeState();
128 }
129
130 return *this->mActiveState;
131}
132
133const QDBusObjectPath& SystemdUnit::path() const { return this->mPath; }
134const QString& SystemdUnit::id() const { return this->mId; }
135void SystemdUnit::onUnitPropertiesChanged(const QString& interface_name, const QVariantMap& changed_properties, const QStringList& invalidated_properties) {
136 if (changed_properties.contains("ActiveState") || invalidated_properties.contains("ActiveState")) {
137 this->mActiveState = this->systemdUnit()->activeState();
138 emit this->activeStateChanged();
139 }
140}
53 141
54void Systemd::stopUserUnit(const QString& unit, const QString& mode) { this->systemdManager->StopUnit(unit, mode); } 142void Systemd::stopUserUnit(const QString& unit, const QString& mode) { this->systemdManager->StopUnit(unit, mode); }
55 143
@@ -63,6 +151,8 @@ void Systemd::lockSession() { this->logindSession->call("Lock"); }
63void Systemd::suspend() { this->logindManager->Suspend(true); } 151void Systemd::suspend() { this->logindManager->Suspend(true); }
64void Systemd::hibernate() { this->logindManager->Hibernate(true); } 152void Systemd::hibernate() { this->logindManager->Hibernate(true); }
65 153
154ObjectModel<SystemdUnit>* Systemd::userUnits() { return &this->mUserUnits; }
155
66std::string SystemdInhibitorParams::toString(SystemdInhibitorParams::WhatItem what) { 156std::string SystemdInhibitorParams::toString(SystemdInhibitorParams::WhatItem what) {
67 if (what == SystemdInhibitorParams::Shutdown) 157 if (what == SystemdInhibitorParams::Shutdown)
68 return "shutdown"; 158 return "shutdown";
diff --git a/accounts/gkleen@sif/shell/quickshell-plugins/Systemd.hpp b/accounts/gkleen@sif/shell/quickshell-plugins/Systemd.hpp
index 615024d2..98f73d8f 100644
--- a/accounts/gkleen@sif/shell/quickshell-plugins/Systemd.hpp
+++ b/accounts/gkleen@sif/shell/quickshell-plugins/Systemd.hpp
@@ -3,6 +3,7 @@
3#include <cstdint> 3#include <cstdint>
4#include <memory> 4#include <memory>
5#include <string> 5#include <string>
6#include <optional>
6 7
7#include <QObject> 8#include <QObject>
8#include <QDBusInterface> 9#include <QDBusInterface>
@@ -11,8 +12,47 @@
11#include "dbus_systemd_manager.h" 12#include "dbus_systemd_manager.h"
12#include "dbus_logind_manager.h" 13#include "dbus_logind_manager.h"
13#include "dbus_logind_session.h" 14#include "dbus_logind_session.h"
15#include "dbus_systemd_unit.h"
16#include "dbus_systemd_service.h"
14#include "dbus_properties.h" 17#include "dbus_properties.h"
15 18
19#include "core/model.hpp"
20
21class SystemdUnit : public QObject {
22 Q_OBJECT;
23 QML_ELEMENT;
24 QML_UNCREATABLE("SystemdUnits cannot be created directly");
25
26public:
27 explicit SystemdUnit(QObject* parent, const QDBusObjectPath& path, const QString& id);
28
29 Q_PROPERTY(QDBusObjectPath path READ path CONSTANT);
30 Q_PROPERTY(QString id READ id CONSTANT);
31 Q_PROPERTY(QList<QString> runtimeDirectory READ runtimeDirectory CONSTANT);
32 Q_PROPERTY(QString activeState READ activeState NOTIFY activeStateChanged);
33
34 const QDBusObjectPath& path() const;
35 const QString& id() const;
36 QList<QString> runtimeDirectory();
37 QString activeState();
38
39signals:
40 void activeStateChanged();
41
42private slots:
43 void onUnitPropertiesChanged(const QString& interface_name, const QVariantMap& changed_properties, const QStringList& invalidated_properties);
44
45private:
46 std::unique_ptr<DBusSystemdUnit> systemdUnit();
47 std::unique_ptr<DBusSystemdService> systemdService();
48
49 DBusProperties* mUnitProperties;
50 QDBusObjectPath mPath;
51 QString mId;
52 std::optional<QString> mActiveState;
53 std::optional<QList<QString>> mRuntimeDirectory;
54};
55
16class Systemd : public QObject { 56class Systemd : public QObject {
17 Q_OBJECT; 57 Q_OBJECT;
18 QML_SINGLETON; 58 QML_SINGLETON;
@@ -23,6 +63,7 @@ public:
23 63
24 Q_PROPERTY(bool idleHint READ idleHint WRITE setIdleHint NOTIFY idleHintChanged) 64 Q_PROPERTY(bool idleHint READ idleHint WRITE setIdleHint NOTIFY idleHintChanged)
25 Q_PROPERTY(bool lockedHint READ lockedHint WRITE setLockedHint NOTIFY lockedHintChanged) 65 Q_PROPERTY(bool lockedHint READ lockedHint WRITE setLockedHint NOTIFY lockedHintChanged)
66 Q_PROPERTY(UntypedObjectModel* userUnits READ userUnits CONSTANT)
26 67
27 Q_INVOKABLE void stopUserUnit(const QString& unit, const QString& mode); 68 Q_INVOKABLE void stopUserUnit(const QString& unit, const QString& mode);
28 Q_INVOKABLE void setBrightness(const QString& subsystem, const QString& name, quint32 brightness); 69 Q_INVOKABLE void setBrightness(const QString& subsystem, const QString& name, quint32 brightness);
@@ -34,6 +75,7 @@ public:
34 75
35 bool idleHint(); 76 bool idleHint();
36 bool lockedHint(); 77 bool lockedHint();
78 ObjectModel<SystemdUnit>* userUnits();
37 79
38signals: 80signals:
39 void shutdown(bool before); 81 void shutdown(bool before);
@@ -45,12 +87,16 @@ signals:
45 87
46private slots: 88private slots:
47 void onLogindSessionPropertiesChanged(const QString& interface_name, const QVariantMap& changed_properties, const QStringList& invalidated_properties); 89 void onLogindSessionPropertiesChanged(const QString& interface_name, const QVariantMap& changed_properties, const QStringList& invalidated_properties);
90 void onUserUnitNew(const QString& id, const QDBusObjectPath& objectPath);
91 void onUserUnitRemoved(const QString& id, const QDBusObjectPath& objectPath);
48 92
49private: 93private:
50 DBusSystemdManager* systemdManager; 94 DBusSystemdManager* systemdManager;
51 DBusLogindManager* logindManager; 95 DBusLogindManager* logindManager;
52 DBusLogindSession* logindSession; 96 DBusLogindSession* logindSession;
53 DBusProperties* logindSessionProperties; 97 DBusProperties* logindSessionProperties;
98
99 ObjectModel<SystemdUnit> mUserUnits{this};
54}; 100};
55 101
56class SystemdInhibitorParams : public QObject { 102class SystemdInhibitorParams : public QObject {
diff --git a/accounts/gkleen@sif/shell/quickshell-plugins/default.nix b/accounts/gkleen@sif/shell/quickshell-plugins/default.nix
index 20a195eb..dfe93bca 100644
--- a/accounts/gkleen@sif/shell/quickshell-plugins/default.nix
+++ b/accounts/gkleen@sif/shell/quickshell-plugins/default.nix
@@ -5,6 +5,7 @@
5, fmt 5, fmt
6, keepassxc 6, keepassxc
7, systemd 7, systemd
8, quickshell
8}: 9}:
9 10
10stdenv.mkDerivation rec { 11stdenv.mkDerivation rec {
@@ -24,6 +25,7 @@ stdenv.mkDerivation rec {
24 25
25 cmakeFlags = [ 26 cmakeFlags = [
26 (lib.cmakeFeature "INSTALL_QML_PREFIX" qt6.qtbase.qtQmlPrefix) 27 (lib.cmakeFeature "INSTALL_QML_PREFIX" qt6.qtbase.qtQmlPrefix)
28 (lib.cmakeOptionType "string" "QUICKSHELL_SRC" (toString quickshell.src))
27 ]; 29 ];
28 30
29 LC_ALL = "C.UTF-8"; 31 LC_ALL = "C.UTF-8";
diff --git a/accounts/gkleen@sif/shell/quickshell-plugins/org.freedesktop.systemd1.Manager.xml b/accounts/gkleen@sif/shell/quickshell-plugins/org.freedesktop.systemd1.Manager.xml
index b4f84a13..1dadbc55 100644
--- a/accounts/gkleen@sif/shell/quickshell-plugins/org.freedesktop.systemd1.Manager.xml
+++ b/accounts/gkleen@sif/shell/quickshell-plugins/org.freedesktop.systemd1.Manager.xml
@@ -562,22 +562,26 @@
562 <method name="SetShowStatus"> 562 <method name="SetShowStatus">
563 <arg type="s" name="mode" direction="in"/> 563 <arg type="s" name="mode" direction="in"/>
564 </method> 564 </method>
565 <!-- <method name="ListUnits"> --> 565 <method name="ListUnits">
566 <!-- <arg type="a(ssssssouso)" name="units" direction="out"/> --> 566 <arg type="a(ssssssouso)" name="units" direction="out"/>
567 <!-- </method> --> 567 <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="ListUnitsResult"/>
568 <!-- <method name="ListUnitsFiltered"> --> 568 </method>
569 <!-- <arg type="as" name="states" direction="in"/> --> 569 <method name="ListUnitsFiltered">
570 <!-- <arg type="a(ssssssouso)" name="units" direction="out"/> --> 570 <arg type="as" name="states" direction="in"/>
571 <!-- </method> --> 571 <arg type="a(ssssssouso)" name="units" direction="out"/>
572 <!-- <method name="ListUnitsByPatterns"> --> 572 <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="ListUnitsResult"/>
573 <!-- <arg type="as" name="states" direction="in"/> --> 573 </method>
574 <!-- <arg type="as" name="patterns" direction="in"/> --> 574 <method name="ListUnitsByPatterns">
575 <!-- <arg type="a(ssssssouso)" name="units" direction="out"/> --> 575 <arg type="as" name="states" direction="in"/>
576 <!-- </method> --> 576 <arg type="as" name="patterns" direction="in"/>
577 <!-- <method name="ListUnitsByNames"> --> 577 <arg type="a(ssssssouso)" name="units" direction="out"/>
578 <!-- <arg type="as" name="names" direction="in"/> --> 578 <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="ListUnitsResult"/>
579 <!-- <arg type="a(ssssssouso)" name="units" direction="out"/> --> 579 </method>
580 <!-- </method> --> 580 <method name="ListUnitsByNames">
581 <arg type="as" name="names" direction="in"/>
582 <arg type="a(ssssssouso)" name="units" direction="out"/>
583 <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="ListUnitsResult"/>
584 </method>
581 <!-- <method name="ListJobs"> --> 585 <!-- <method name="ListJobs"> -->
582 <!-- <arg type="a(usssoo)" name="jobs" direction="out"/> --> 586 <!-- <arg type="a(usssoo)" name="jobs" direction="out"/> -->
583 <!-- </method> --> 587 <!-- </method> -->
diff --git a/accounts/gkleen@sif/shell/quickshell-plugins/org.freedesktop.systemd1.Service.xml b/accounts/gkleen@sif/shell/quickshell-plugins/org.freedesktop.systemd1.Service.xml
new file mode 100644
index 00000000..316dd080
--- /dev/null
+++ b/accounts/gkleen@sif/shell/quickshell-plugins/org.freedesktop.systemd1.Service.xml
@@ -0,0 +1,1100 @@
1<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
2"https://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
3<node>
4 <interface name="org.freedesktop.systemd1.Service">
5 <property name="Type" type="s" access="read">
6 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
7 </property>
8 <property name="ExitType" type="s" access="read">
9 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
10 </property>
11 <property name="Restart" type="s" access="read">
12 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
13 </property>
14 <property name="RestartMode" type="s" access="read">
15 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
16 </property>
17 <property name="PIDFile" type="s" access="read">
18 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
19 </property>
20 <property name="NotifyAccess" type="s" access="read">
21 </property>
22 <property name="RestartUSec" type="t" access="read">
23 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
24 </property>
25 <property name="RestartSteps" type="u" access="read">
26 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
27 </property>
28 <property name="RestartMaxDelayUSec" type="t" access="read">
29 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
30 </property>
31 <property name="RestartUSecNext" type="t" access="read">
32 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
33 </property>
34 <property name="TimeoutStartUSec" type="t" access="read">
35 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
36 </property>
37 <property name="TimeoutStopUSec" type="t" access="read">
38 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
39 </property>
40 <property name="TimeoutAbortUSec" type="t" access="read">
41 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
42 </property>
43 <property name="TimeoutStartFailureMode" type="s" access="read">
44 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
45 </property>
46 <property name="TimeoutStopFailureMode" type="s" access="read">
47 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
48 </property>
49 <property name="RuntimeMaxUSec" type="t" access="read">
50 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
51 </property>
52 <property name="RuntimeRandomizedExtraUSec" type="t" access="read">
53 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
54 </property>
55 <property name="WatchdogUSec" type="t" access="read">
56 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
57 </property>
58 <property name="WatchdogTimestamp" type="t" access="read">
59 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
60 </property>
61 <property name="WatchdogTimestampMonotonic" type="t" access="read">
62 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
63 </property>
64 <property name="RootDirectoryStartOnly" type="b" access="read">
65 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
66 </property>
67 <property name="RemainAfterExit" type="b" access="read">
68 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
69 </property>
70 <property name="GuessMainPID" type="b" access="read">
71 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
72 </property>
73 <!-- <property name="RestartPreventExitStatus" type="(aiai)" access="read"> -->
74 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
75 <!-- </property> -->
76 <!-- <property name="RestartForceExitStatus" type="(aiai)" access="read"> -->
77 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
78 <!-- </property> -->
79 <!-- <property name="SuccessExitStatus" type="(aiai)" access="read"> -->
80 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
81 <!-- </property> -->
82 <property name="MainPID" type="u" access="read">
83 </property>
84 <property name="ControlPID" type="u" access="read">
85 </property>
86 <property name="BusName" type="s" access="read">
87 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
88 </property>
89 <property name="FileDescriptorStoreMax" type="u" access="read">
90 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
91 </property>
92 <property name="NFileDescriptorStore" type="u" access="read">
93 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
94 </property>
95 <property name="FileDescriptorStorePreserve" type="s" access="read">
96 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
97 </property>
98 <property name="StatusText" type="s" access="read">
99 </property>
100 <property name="StatusErrno" type="i" access="read">
101 </property>
102 <property name="StatusBusError" type="s" access="read">
103 </property>
104 <property name="StatusVarlinkError" type="s" access="read">
105 </property>
106 <property name="Result" type="s" access="read">
107 </property>
108 <property name="ReloadResult" type="s" access="read">
109 </property>
110 <property name="CleanResult" type="s" access="read">
111 </property>
112 <property name="LiveMountResult" type="s" access="read">
113 </property>
114 <property name="USBFunctionDescriptors" type="s" access="read">
115 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
116 </property>
117 <property name="USBFunctionStrings" type="s" access="read">
118 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
119 </property>
120 <property name="UID" type="u" access="read">
121 </property>
122 <property name="GID" type="u" access="read">
123 </property>
124 <property name="NRestarts" type="u" access="read">
125 </property>
126 <property name="OOMPolicy" type="s" access="read">
127 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
128 </property>
129 <!-- <property name="OpenFile" type="a(sst)" access="read"> -->
130 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
131 <!-- </property> -->
132 <property name="ExtraFileDescriptorNames" type="as" access="read">
133 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
134 </property>
135 <property name="ReloadSignal" type="i" access="read">
136 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
137 </property>
138 <property name="RefreshOnReload" type="as" access="read">
139 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
140 </property>
141 <property name="ExecMainStartTimestamp" type="t" access="read">
142 </property>
143 <property name="ExecMainStartTimestampMonotonic" type="t" access="read">
144 </property>
145 <property name="ExecMainExitTimestamp" type="t" access="read">
146 </property>
147 <property name="ExecMainExitTimestampMonotonic" type="t" access="read">
148 </property>
149 <property name="ExecMainHandoffTimestamp" type="t" access="read">
150 </property>
151 <property name="ExecMainHandoffTimestampMonotonic" type="t" access="read">
152 </property>
153 <property name="ExecMainPID" type="u" access="read">
154 </property>
155 <property name="ExecMainCode" type="i" access="read">
156 </property>
157 <property name="ExecMainStatus" type="i" access="read">
158 </property>
159 <!-- <property name="ExecCondition" type="a(sasbttttuii)" access="read"> -->
160 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates"/> -->
161 <!-- </property> -->
162 <!-- <property name="ExecConditionEx" type="a(sasasttttuii)" access="read"> -->
163 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates"/> -->
164 <!-- </property> -->
165 <!-- <property name="ExecStartPre" type="a(sasbttttuii)" access="read"> -->
166 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates"/> -->
167 <!-- </property> -->
168 <!-- <property name="ExecStartPreEx" type="a(sasasttttuii)" access="read"> -->
169 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates"/> -->
170 <!-- </property> -->
171 <!-- <property name="ExecStart" type="a(sasbttttuii)" access="read"> -->
172 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates"/> -->
173 <!-- </property> -->
174 <!-- <property name="ExecStartEx" type="a(sasasttttuii)" access="read"> -->
175 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates"/> -->
176 <!-- </property> -->
177 <!-- <property name="ExecStartPost" type="a(sasbttttuii)" access="read"> -->
178 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates"/> -->
179 <!-- </property> -->
180 <!-- <property name="ExecStartPostEx" type="a(sasasttttuii)" access="read"> -->
181 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates"/> -->
182 <!-- </property> -->
183 <!-- <property name="ExecReload" type="a(sasbttttuii)" access="read"> -->
184 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates"/> -->
185 <!-- </property> -->
186 <!-- <property name="ExecReloadEx" type="a(sasasttttuii)" access="read"> -->
187 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates"/> -->
188 <!-- </property> -->
189 <!-- <property name="ExecReloadPost" type="a(sasbttttuii)" access="read"> -->
190 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates"/> -->
191 <!-- </property> -->
192 <!-- <property name="ExecReloadPostEx" type="a(sasasttttuii)" access="read"> -->
193 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates"/> -->
194 <!-- </property> -->
195 <!-- <property name="ExecStop" type="a(sasbttttuii)" access="read"> -->
196 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates"/> -->
197 <!-- </property> -->
198 <!-- <property name="ExecStopEx" type="a(sasasttttuii)" access="read"> -->
199 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates"/> -->
200 <!-- </property> -->
201 <!-- <property name="ExecStopPost" type="a(sasbttttuii)" access="read"> -->
202 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates"/> -->
203 <!-- </property> -->
204 <!-- <property name="ExecStopPostEx" type="a(sasasttttuii)" access="read"> -->
205 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates"/> -->
206 <!-- </property> -->
207 <method name="BindMount">
208 <arg type="s" name="source" direction="in"/>
209 <arg type="s" name="destination" direction="in"/>
210 <arg type="b" name="read_only" direction="in"/>
211 <arg type="b" name="mkdir" direction="in"/>
212 </method>
213 <!-- <method name="MountImage"> -->
214 <!-- <arg type="s" name="source" direction="in"/> -->
215 <!-- <arg type="s" name="destination" direction="in"/> -->
216 <!-- <arg type="b" name="read_only" direction="in"/> -->
217 <!-- <arg type="b" name="mkdir" direction="in"/> -->
218 <!-- <arg type="a(ss)" name="options" direction="in"/> -->
219 <!-- </method> -->
220 <!-- <method name="DumpFileDescriptorStore"> -->
221 <!-- <arg type="a(suuutuusu)" name="entries" direction="out"/> -->
222 <!-- </method> -->
223 <property name="Slice" type="s" access="read">
224 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
225 </property>
226 <property name="ControlGroup" type="s" access="read">
227 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
228 </property>
229 <property name="ControlGroupId" type="t" access="read">
230 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
231 </property>
232 <property name="MemoryCurrent" type="t" access="read">
233 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
234 </property>
235 <property name="MemoryPeak" type="t" access="read">
236 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
237 </property>
238 <property name="MemorySwapCurrent" type="t" access="read">
239 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
240 </property>
241 <property name="MemorySwapPeak" type="t" access="read">
242 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
243 </property>
244 <property name="MemoryZSwapCurrent" type="t" access="read">
245 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
246 </property>
247 <property name="MemoryAvailable" type="t" access="read">
248 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
249 </property>
250 <property name="EffectiveMemoryMax" type="t" access="read">
251 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
252 </property>
253 <property name="EffectiveMemoryHigh" type="t" access="read">
254 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
255 </property>
256 <property name="CPUUsageNSec" type="t" access="read">
257 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
258 </property>
259 <property name="EffectiveCPUs" type="ay" access="read">
260 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
261 </property>
262 <property name="EffectiveMemoryNodes" type="ay" access="read">
263 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
264 </property>
265 <property name="TasksCurrent" type="t" access="read">
266 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
267 </property>
268 <property name="EffectiveTasksMax" type="t" access="read">
269 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
270 </property>
271 <property name="IPIngressBytes" type="t" access="read">
272 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
273 </property>
274 <property name="IPIngressPackets" type="t" access="read">
275 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
276 </property>
277 <property name="IPEgressBytes" type="t" access="read">
278 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
279 </property>
280 <property name="IPEgressPackets" type="t" access="read">
281 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
282 </property>
283 <property name="IOReadBytes" type="t" access="read">
284 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
285 </property>
286 <property name="IOReadOperations" type="t" access="read">
287 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
288 </property>
289 <property name="IOWriteBytes" type="t" access="read">
290 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
291 </property>
292 <property name="IOWriteOperations" type="t" access="read">
293 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
294 </property>
295 <property name="OOMKills" type="t" access="read">
296 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
297 </property>
298 <property name="ManagedOOMKills" type="t" access="read">
299 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
300 </property>
301 <!-- <method name="GetProcesses"> -->
302 <!-- <arg type="a(sus)" name="processes" direction="out"/> -->
303 <!-- </method> -->
304 <!-- <method name="AttachProcesses"> -->
305 <!-- <arg type="s" name="subcgroup" direction="in"/> -->
306 <!-- <arg type="au" name="pids" direction="in"/> -->
307 <!-- </method> -->
308 <method name="RemoveSubgroup">
309 <arg type="s" name="subcgroup" direction="in"/>
310 <arg type="t" name="flags" direction="in"/>
311 </method>
312 <property name="Delegate" type="b" access="read">
313 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
314 </property>
315 <property name="DelegateControllers" type="as" access="read">
316 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
317 </property>
318 <property name="DelegateSubgroup" type="s" access="read">
319 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
320 </property>
321 <property name="CPUWeight" type="t" access="read">
322 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
323 </property>
324 <property name="StartupCPUWeight" type="t" access="read">
325 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
326 </property>
327 <property name="CPUQuotaPerSecUSec" type="t" access="read">
328 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
329 </property>
330 <property name="CPUQuotaPeriodUSec" type="t" access="read">
331 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
332 </property>
333 <property name="AllowedCPUs" type="ay" access="read">
334 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
335 </property>
336 <property name="StartupAllowedCPUs" type="ay" access="read">
337 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
338 </property>
339 <property name="AllowedMemoryNodes" type="ay" access="read">
340 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
341 </property>
342 <property name="StartupAllowedMemoryNodes" type="ay" access="read">
343 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
344 </property>
345 <property name="IOAccounting" type="b" access="read">
346 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
347 </property>
348 <property name="IOWeight" type="t" access="read">
349 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
350 </property>
351 <property name="StartupIOWeight" type="t" access="read">
352 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
353 </property>
354 <!-- <property name="IODeviceWeight" type="a(st)" access="read"> -->
355 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/> -->
356 <!-- </property> -->
357 <!-- <property name="IOReadBandwidthMax" type="a(st)" access="read"> -->
358 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/> -->
359 <!-- </property> -->
360 <!-- <property name="IOWriteBandwidthMax" type="a(st)" access="read"> -->
361 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/> -->
362 <!-- </property> -->
363 <!-- <property name="IOReadIOPSMax" type="a(st)" access="read"> -->
364 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/> -->
365 <!-- </property> -->
366 <!-- <property name="IOWriteIOPSMax" type="a(st)" access="read"> -->
367 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/> -->
368 <!-- </property> -->
369 <!-- <property name="IODeviceLatencyTargetUSec" type="a(st)" access="read"> -->
370 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/> -->
371 <!-- </property> -->
372 <property name="MemoryAccounting" type="b" access="read">
373 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
374 </property>
375 <property name="MemoryMin" type="t" access="read">
376 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
377 </property>
378 <property name="MemoryLow" type="t" access="read">
379 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
380 </property>
381 <property name="StartupMemoryLow" type="t" access="read">
382 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
383 </property>
384 <property name="MemoryHigh" type="t" access="read">
385 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
386 </property>
387 <property name="StartupMemoryHigh" type="t" access="read">
388 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
389 </property>
390 <property name="MemoryMax" type="t" access="read">
391 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
392 </property>
393 <property name="StartupMemoryMax" type="t" access="read">
394 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
395 </property>
396 <property name="MemorySwapMax" type="t" access="read">
397 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
398 </property>
399 <property name="StartupMemorySwapMax" type="t" access="read">
400 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
401 </property>
402 <property name="MemoryZSwapMax" type="t" access="read">
403 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
404 </property>
405 <property name="StartupMemoryZSwapMax" type="t" access="read">
406 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
407 </property>
408 <property name="MemoryZSwapWriteback" type="b" access="read">
409 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
410 </property>
411 <property name="DevicePolicy" type="s" access="read">
412 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
413 </property>
414 <!-- <property name="DeviceAllow" type="a(ss)" access="read"> -->
415 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/> -->
416 <!-- </property> -->
417 <property name="TasksAccounting" type="b" access="read">
418 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
419 </property>
420 <property name="TasksMax" type="t" access="read">
421 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
422 </property>
423 <property name="IPAccounting" type="b" access="read">
424 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
425 </property>
426 <!-- <property name="IPAddressAllow" type="a(iayu)" access="read"> -->
427 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/> -->
428 <!-- </property> -->
429 <!-- <property name="IPAddressDeny" type="a(iayu)" access="read"> -->
430 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/> -->
431 <!-- </property> -->
432 <property name="IPIngressFilterPath" type="as" access="read">
433 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
434 </property>
435 <property name="IPEgressFilterPath" type="as" access="read">
436 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
437 </property>
438 <property name="DisableControllers" type="as" access="read">
439 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
440 </property>
441 <property name="ManagedOOMSwap" type="s" access="read">
442 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
443 </property>
444 <property name="ManagedOOMMemoryPressure" type="s" access="read">
445 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
446 </property>
447 <property name="ManagedOOMMemoryPressureLimit" type="u" access="read">
448 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
449 </property>
450 <property name="ManagedOOMMemoryPressureDurationUSec" type="t" access="read">
451 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
452 </property>
453 <property name="ManagedOOMPreference" type="s" access="read">
454 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
455 </property>
456 <!-- <property name="BPFProgram" type="a(ss)" access="read"> -->
457 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/> -->
458 <!-- </property> -->
459 <!-- <property name="SocketBindAllow" type="a(iiqq)" access="read"> -->
460 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/> -->
461 <!-- </property> -->
462 <!-- <property name="SocketBindDeny" type="a(iiqq)" access="read"> -->
463 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/> -->
464 <!-- </property> -->
465 <!-- <property name="RestrictNetworkInterfaces" type="(bas)" access="read"> -->
466 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/> -->
467 <!-- </property> -->
468 <property name="BindNetworkInterface" type="s" access="read">
469 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
470 </property>
471 <property name="MemoryPressureWatch" type="s" access="read">
472 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
473 </property>
474 <property name="MemoryPressureThresholdUSec" type="t" access="read">
475 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
476 </property>
477 <!-- <property name="NFTSet" type="a(iiss)" access="read"> -->
478 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/> -->
479 <!-- </property> -->
480 <property name="CoredumpReceive" type="b" access="read">
481 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
482 </property>
483 <property name="Environment" type="as" access="read">
484 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
485 </property>
486 <!-- <property name="EnvironmentFiles" type="a(sb)" access="read"> -->
487 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
488 <!-- </property> -->
489 <property name="PassEnvironment" type="as" access="read">
490 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
491 </property>
492 <property name="UnsetEnvironment" type="as" access="read">
493 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
494 </property>
495 <property name="UMask" type="u" access="read">
496 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
497 </property>
498 <property name="LimitCPU" type="t" access="read">
499 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
500 </property>
501 <property name="LimitCPUSoft" type="t" access="read">
502 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
503 </property>
504 <property name="LimitFSIZE" type="t" access="read">
505 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
506 </property>
507 <property name="LimitFSIZESoft" type="t" access="read">
508 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
509 </property>
510 <property name="LimitDATA" type="t" access="read">
511 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
512 </property>
513 <property name="LimitDATASoft" type="t" access="read">
514 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
515 </property>
516 <property name="LimitSTACK" type="t" access="read">
517 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
518 </property>
519 <property name="LimitSTACKSoft" type="t" access="read">
520 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
521 </property>
522 <property name="LimitCORE" type="t" access="read">
523 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
524 </property>
525 <property name="LimitCORESoft" type="t" access="read">
526 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
527 </property>
528 <property name="LimitRSS" type="t" access="read">
529 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
530 </property>
531 <property name="LimitRSSSoft" type="t" access="read">
532 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
533 </property>
534 <property name="LimitNOFILE" type="t" access="read">
535 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
536 </property>
537 <property name="LimitNOFILESoft" type="t" access="read">
538 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
539 </property>
540 <property name="LimitAS" type="t" access="read">
541 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
542 </property>
543 <property name="LimitASSoft" type="t" access="read">
544 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
545 </property>
546 <property name="LimitNPROC" type="t" access="read">
547 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
548 </property>
549 <property name="LimitNPROCSoft" type="t" access="read">
550 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
551 </property>
552 <property name="LimitMEMLOCK" type="t" access="read">
553 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
554 </property>
555 <property name="LimitMEMLOCKSoft" type="t" access="read">
556 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
557 </property>
558 <property name="LimitLOCKS" type="t" access="read">
559 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
560 </property>
561 <property name="LimitLOCKSSoft" type="t" access="read">
562 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
563 </property>
564 <property name="LimitSIGPENDING" type="t" access="read">
565 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
566 </property>
567 <property name="LimitSIGPENDINGSoft" type="t" access="read">
568 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
569 </property>
570 <property name="LimitMSGQUEUE" type="t" access="read">
571 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
572 </property>
573 <property name="LimitMSGQUEUESoft" type="t" access="read">
574 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
575 </property>
576 <property name="LimitNICE" type="t" access="read">
577 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
578 </property>
579 <property name="LimitNICESoft" type="t" access="read">
580 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
581 </property>
582 <property name="LimitRTPRIO" type="t" access="read">
583 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
584 </property>
585 <property name="LimitRTPRIOSoft" type="t" access="read">
586 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
587 </property>
588 <property name="LimitRTTIME" type="t" access="read">
589 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
590 </property>
591 <property name="LimitRTTIMESoft" type="t" access="read">
592 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
593 </property>
594 <property name="WorkingDirectory" type="s" access="read">
595 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
596 </property>
597 <property name="RootDirectory" type="s" access="read">
598 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
599 </property>
600 <property name="RootImage" type="s" access="read">
601 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
602 </property>
603 <!-- <property name="RootImageOptions" type="a(ss)" access="read"> -->
604 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
605 <!-- </property> -->
606 <property name="RootHash" type="ay" access="read">
607 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
608 </property>
609 <property name="RootHashPath" type="s" access="read">
610 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
611 </property>
612 <property name="RootHashSignature" type="ay" access="read">
613 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
614 </property>
615 <property name="RootHashSignaturePath" type="s" access="read">
616 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
617 </property>
618 <property name="RootVerity" type="s" access="read">
619 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
620 </property>
621 <property name="RootEphemeral" type="b" access="read">
622 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
623 </property>
624 <property name="RootMStack" type="s" access="read">
625 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
626 </property>
627 <property name="ExtensionDirectories" type="as" access="read">
628 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
629 </property>
630 <!-- <property name="ExtensionImages" type="a(sba(ss))" access="read"> -->
631 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
632 <!-- </property> -->
633 <!-- <property name="MountImages" type="a(ssba(ss))" access="read"> -->
634 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
635 <!-- </property> -->
636 <property name="OOMScoreAdjust" type="i" access="read">
637 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
638 </property>
639 <property name="CoredumpFilter" type="t" access="read">
640 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
641 </property>
642 <property name="Nice" type="i" access="read">
643 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
644 </property>
645 <property name="IOSchedulingClass" type="i" access="read">
646 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
647 </property>
648 <property name="IOSchedulingPriority" type="i" access="read">
649 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
650 </property>
651 <property name="CPUSchedulingPolicy" type="i" access="read">
652 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
653 </property>
654 <property name="CPUSchedulingPriority" type="i" access="read">
655 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
656 </property>
657 <property name="CPUAffinity" type="ay" access="read">
658 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
659 </property>
660 <property name="CPUAffinityFromNUMA" type="b" access="read">
661 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
662 </property>
663 <property name="NUMAPolicy" type="i" access="read">
664 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
665 </property>
666 <property name="NUMAMask" type="ay" access="read">
667 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
668 </property>
669 <property name="TimerSlackNSec" type="t" access="read">
670 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
671 </property>
672 <property name="CPUSchedulingResetOnFork" type="b" access="read">
673 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
674 </property>
675 <property name="NonBlocking" type="b" access="read">
676 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
677 </property>
678 <property name="StandardInput" type="s" access="read">
679 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
680 </property>
681 <property name="StandardInputFileDescriptorName" type="s" access="read">
682 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
683 </property>
684 <property name="StandardInputData" type="ay" access="read">
685 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
686 </property>
687 <property name="StandardOutput" type="s" access="read">
688 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
689 </property>
690 <property name="StandardOutputFileDescriptorName" type="s" access="read">
691 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
692 </property>
693 <property name="StandardError" type="s" access="read">
694 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
695 </property>
696 <property name="StandardErrorFileDescriptorName" type="s" access="read">
697 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
698 </property>
699 <property name="TTYPath" type="s" access="read">
700 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
701 </property>
702 <property name="TTYReset" type="b" access="read">
703 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
704 </property>
705 <property name="TTYVHangup" type="b" access="read">
706 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
707 </property>
708 <property name="TTYVTDisallocate" type="b" access="read">
709 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
710 </property>
711 <property name="TTYRows" type="q" access="read">
712 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
713 </property>
714 <property name="TTYColumns" type="q" access="read">
715 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
716 </property>
717 <property name="SyslogPriority" type="i" access="read">
718 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
719 </property>
720 <property name="SyslogIdentifier" type="s" access="read">
721 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
722 </property>
723 <property name="SyslogLevelPrefix" type="b" access="read">
724 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
725 </property>
726 <property name="SyslogLevel" type="i" access="read">
727 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
728 </property>
729 <property name="SyslogFacility" type="i" access="read">
730 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
731 </property>
732 <property name="LogLevelMax" type="i" access="read">
733 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
734 </property>
735 <property name="LogRateLimitIntervalUSec" type="t" access="read">
736 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
737 </property>
738 <property name="LogRateLimitBurst" type="u" access="read">
739 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
740 </property>
741 <!-- <property name="LogExtraFields" type="aay" access="read"> -->
742 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
743 <!-- </property> -->
744 <!-- <property name="LogFilterPatterns" type="a(bs)" access="read"> -->
745 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
746 <!-- </property> -->
747 <property name="LogNamespace" type="s" access="read">
748 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
749 </property>
750 <property name="SecureBits" type="i" access="read">
751 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
752 </property>
753 <property name="CapabilityBoundingSet" type="t" access="read">
754 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
755 </property>
756 <property name="AmbientCapabilities" type="t" access="read">
757 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
758 </property>
759 <property name="User" type="s" access="read">
760 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
761 </property>
762 <property name="Group" type="s" access="read">
763 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
764 </property>
765 <property name="DynamicUser" type="b" access="read">
766 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
767 </property>
768 <property name="SetLoginEnvironment" type="b" access="read">
769 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
770 </property>
771 <property name="RemoveIPC" type="b" access="read">
772 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
773 </property>
774 <!-- <property name="SetCredential" type="a(say)" access="read"> -->
775 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
776 <!-- </property> -->
777 <!-- <property name="SetCredentialEncrypted" type="a(say)" access="read"> -->
778 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
779 <!-- </property> -->
780 <!-- <property name="LoadCredential" type="a(ss)" access="read"> -->
781 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
782 <!-- </property> -->
783 <!-- <property name="LoadCredentialEncrypted" type="a(ss)" access="read"> -->
784 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
785 <!-- </property> -->
786 <property name="ImportCredential" type="as" access="read">
787 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
788 </property>
789 <!-- <property name="ImportCredentialEx" type="a(ss)" access="read"> -->
790 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
791 <!-- </property> -->
792 <property name="SupplementaryGroups" type="as" access="read">
793 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
794 </property>
795 <property name="PAMName" type="s" access="read">
796 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
797 </property>
798 <property name="ReadWritePaths" type="as" access="read">
799 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
800 </property>
801 <property name="ReadOnlyPaths" type="as" access="read">
802 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
803 </property>
804 <property name="InaccessiblePaths" type="as" access="read">
805 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
806 </property>
807 <property name="ExecPaths" type="as" access="read">
808 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
809 </property>
810 <property name="NoExecPaths" type="as" access="read">
811 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
812 </property>
813 <property name="ExecSearchPath" type="as" access="read">
814 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
815 </property>
816 <property name="MountFlags" type="t" access="read">
817 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
818 </property>
819 <property name="PrivateTmp" type="b" access="read">
820 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
821 </property>
822 <property name="PrivateTmpEx" type="s" access="read">
823 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
824 </property>
825 <property name="PrivateDevices" type="b" access="read">
826 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
827 </property>
828 <property name="ProtectClock" type="b" access="read">
829 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
830 </property>
831 <property name="ProtectKernelTunables" type="b" access="read">
832 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
833 </property>
834 <property name="ProtectKernelModules" type="b" access="read">
835 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
836 </property>
837 <property name="ProtectKernelLogs" type="b" access="read">
838 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
839 </property>
840 <property name="ProtectControlGroups" type="b" access="read">
841 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
842 </property>
843 <property name="ProtectControlGroupsEx" type="s" access="read">
844 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
845 </property>
846 <property name="PrivateNetwork" type="b" access="read">
847 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
848 </property>
849 <property name="PrivateUsers" type="b" access="read">
850 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
851 </property>
852 <property name="PrivateUsersEx" type="s" access="read">
853 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
854 </property>
855 <property name="PrivateMounts" type="b" access="read">
856 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
857 </property>
858 <property name="PrivateIPC" type="b" access="read">
859 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
860 </property>
861 <property name="PrivatePIDs" type="s" access="read">
862 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
863 </property>
864 <property name="ProtectHome" type="s" access="read">
865 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
866 </property>
867 <property name="ProtectSystem" type="s" access="read">
868 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
869 </property>
870 <property name="SameProcessGroup" type="b" access="read">
871 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
872 </property>
873 <property name="UtmpIdentifier" type="s" access="read">
874 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
875 </property>
876 <property name="UtmpMode" type="s" access="read">
877 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
878 </property>
879 <!-- <property name="SELinuxContext" type="(bs)" access="read"> -->
880 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
881 <!-- </property> -->
882 <!-- <property name="AppArmorProfile" type="(bs)" access="read"> -->
883 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
884 <!-- </property> -->
885 <!-- <property name="SmackProcessLabel" type="(bs)" access="read"> -->
886 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
887 <!-- </property> -->
888 <property name="IgnoreSIGPIPE" type="b" access="read">
889 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
890 </property>
891 <property name="NoNewPrivileges" type="b" access="read">
892 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
893 </property>
894 <!-- <property name="SystemCallFilter" type="(bas)" access="read"> -->
895 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
896 <!-- </property> -->
897 <property name="SystemCallArchitectures" type="as" access="read">
898 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
899 </property>
900 <property name="SystemCallErrorNumber" type="i" access="read">
901 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
902 </property>
903 <!-- <property name="SystemCallLog" type="(bas)" access="read"> -->
904 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
905 <!-- </property> -->
906 <property name="Personality" type="s" access="read">
907 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
908 </property>
909 <property name="LockPersonality" type="b" access="read">
910 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
911 </property>
912 <!-- <property name="RestrictAddressFamilies" type="(bas)" access="read"> -->
913 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
914 <!-- </property> -->
915 <!-- <property name="RuntimeDirectorySymlink" type="a(sst)" access="read"> -->
916 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
917 <!-- </property> -->
918 <property name="RuntimeDirectoryPreserve" type="s" access="read">
919 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
920 </property>
921 <property name="RuntimeDirectoryMode" type="u" access="read">
922 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
923 </property>
924 <property name="RuntimeDirectory" type="as" access="read">
925 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
926 </property>
927 <!-- <property name="StateDirectorySymlink" type="a(sst)" access="read"> -->
928 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
929 <!-- </property> -->
930 <property name="StateDirectoryMode" type="u" access="read">
931 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
932 </property>
933 <property name="StateDirectoryAccounting" type="b" access="read">
934 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
935 </property>
936 <!-- <property name="StateDirectoryQuota" type="(tus)" access="read"> -->
937 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
938 <!-- </property> -->
939 <property name="StateDirectory" type="as" access="read">
940 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
941 </property>
942 <!-- <property name="CacheDirectorySymlink" type="a(sst)" access="read"> -->
943 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
944 <!-- </property> -->
945 <property name="CacheDirectoryMode" type="u" access="read">
946 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
947 </property>
948 <property name="CacheDirectoryAccounting" type="b" access="read">
949 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
950 </property>
951 <!-- <property name="CacheDirectoryQuota" type="(tus)" access="read"> -->
952 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
953 <!-- </property> -->
954 <property name="CacheDirectory" type="as" access="read">
955 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
956 </property>
957 <!-- <property name="LogsDirectorySymlink" type="a(sst)" access="read"> -->
958 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
959 <!-- </property> -->
960 <property name="LogsDirectoryMode" type="u" access="read">
961 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
962 </property>
963 <property name="LogsDirectoryAccounting" type="b" access="read">
964 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
965 </property>
966 <!-- <property name="LogsDirectoryQuota" type="(tus)" access="read"> -->
967 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
968 <!-- </property> -->
969 <property name="LogsDirectory" type="as" access="read">
970 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
971 </property>
972 <property name="ConfigurationDirectoryMode" type="u" access="read">
973 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
974 </property>
975 <property name="ConfigurationDirectory" type="as" access="read">
976 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
977 </property>
978 <property name="TimeoutCleanUSec" type="t" access="read">
979 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
980 </property>
981 <property name="MemoryDenyWriteExecute" type="b" access="read">
982 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
983 </property>
984 <property name="RestrictRealtime" type="b" access="read">
985 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
986 </property>
987 <property name="RestrictSUIDSGID" type="b" access="read">
988 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
989 </property>
990 <property name="RestrictNamespaces" type="t" access="read">
991 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
992 </property>
993 <property name="DelegateNamespaces" type="t" access="read">
994 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
995 </property>
996 <!-- <property name="RestrictFileSystems" type="(bas)" access="read"> -->
997 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
998 <!-- </property> -->
999 <!-- <property name="BindPaths" type="a(ssbt)" access="read"> -->
1000 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
1001 <!-- </property> -->
1002 <!-- <property name="BindReadOnlyPaths" type="a(ssbt)" access="read"> -->
1003 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
1004 <!-- </property> -->
1005 <!-- <property name="TemporaryFileSystem" type="a(ss)" access="read"> -->
1006 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
1007 <!-- </property> -->
1008 <property name="MountAPIVFS" type="b" access="read">
1009 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1010 </property>
1011 <property name="BindLogSockets" type="b" access="read">
1012 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1013 </property>
1014 <property name="KeyringMode" type="s" access="read">
1015 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1016 </property>
1017 <property name="ProtectProc" type="s" access="read">
1018 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1019 </property>
1020 <property name="ProcSubset" type="s" access="read">
1021 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1022 </property>
1023 <property name="ProtectHostname" type="b" access="read">
1024 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1025 </property>
1026 <!-- <property name="ProtectHostnameEx" type="(ss)" access="read"> -->
1027 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
1028 <!-- </property> -->
1029 <property name="PrivateBPF" type="s" access="read">
1030 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1031 </property>
1032 <property name="BPFDelegateCommands" type="s" access="read">
1033 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1034 </property>
1035 <property name="BPFDelegateMaps" type="s" access="read">
1036 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1037 </property>
1038 <property name="BPFDelegatePrograms" type="s" access="read">
1039 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1040 </property>
1041 <property name="BPFDelegateAttachments" type="s" access="read">
1042 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1043 </property>
1044 <property name="MemoryKSM" type="b" access="read">
1045 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1046 </property>
1047 <property name="MemoryTHP" type="s" access="read">
1048 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1049 </property>
1050 <property name="UserNamespacePath" type="s" access="read">
1051 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1052 </property>
1053 <property name="NetworkNamespacePath" type="s" access="read">
1054 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1055 </property>
1056 <property name="IPCNamespacePath" type="s" access="read">
1057 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1058 </property>
1059 <property name="RootImagePolicy" type="s" access="read">
1060 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1061 </property>
1062 <property name="MountImagePolicy" type="s" access="read">
1063 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1064 </property>
1065 <property name="ExtensionImagePolicy" type="s" access="read">
1066 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1067 </property>
1068 <!-- <property name="StateDirectoryQuotaUsage" type="(tt)" access="read"> -->
1069 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/> -->
1070 <!-- </property> -->
1071 <!-- <property name="CacheDirectoryQuotaUsage" type="(tt)" access="read"> -->
1072 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/> -->
1073 <!-- </property> -->
1074 <!-- <property name="LogsDirectoryQuotaUsage" type="(tt)" access="read"> -->
1075 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/> -->
1076 <!-- </property> -->
1077 <property name="KillMode" type="s" access="read">
1078 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1079 </property>
1080 <property name="KillSignal" type="i" access="read">
1081 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1082 </property>
1083 <property name="RestartKillSignal" type="i" access="read">
1084 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1085 </property>
1086 <property name="FinalKillSignal" type="i" access="read">
1087 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1088 </property>
1089 <property name="SendSIGKILL" type="b" access="read">
1090 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1091 </property>
1092 <property name="SendSIGHUP" type="b" access="read">
1093 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1094 </property>
1095 <property name="WatchdogSignal" type="i" access="read">
1096 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
1097 </property>
1098 </interface>
1099</node>
1100
diff --git a/accounts/gkleen@sif/shell/quickshell-plugins/org.freedesktop.systemd1.Unit.xml b/accounts/gkleen@sif/shell/quickshell-plugins/org.freedesktop.systemd1.Unit.xml
new file mode 100644
index 00000000..a554f513
--- /dev/null
+++ b/accounts/gkleen@sif/shell/quickshell-plugins/org.freedesktop.systemd1.Unit.xml
@@ -0,0 +1,359 @@
1<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
2"https://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
3<node>
4 <interface name="org.freedesktop.systemd1.Unit">
5 <property name="Id" type="s" access="read">
6 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
7 </property>
8 <property name="Names" type="as" access="read">
9 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
10 </property>
11 <property name="Following" type="s" access="read">
12 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
13 </property>
14 <!-- <property name="Requires" type="as" access="read"> -->
15 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
16 <!-- </property> -->
17 <property name="Requisite" type="as" access="read">
18 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
19 </property>
20 <property name="Wants" type="as" access="read">
21 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
22 </property>
23 <property name="BindsTo" type="as" access="read">
24 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
25 </property>
26 <property name="PartOf" type="as" access="read">
27 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
28 </property>
29 <property name="Upholds" type="as" access="read">
30 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
31 </property>
32 <property name="RequiredBy" type="as" access="read">
33 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
34 </property>
35 <property name="RequisiteOf" type="as" access="read">
36 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
37 </property>
38 <property name="WantedBy" type="as" access="read">
39 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
40 </property>
41 <property name="BoundBy" type="as" access="read">
42 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
43 </property>
44 <property name="UpheldBy" type="as" access="read">
45 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
46 </property>
47 <property name="ConsistsOf" type="as" access="read">
48 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
49 </property>
50 <property name="Conflicts" type="as" access="read">
51 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
52 </property>
53 <property name="ConflictedBy" type="as" access="read">
54 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
55 </property>
56 <property name="Before" type="as" access="read">
57 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
58 </property>
59 <property name="After" type="as" access="read">
60 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
61 </property>
62 <property name="OnSuccess" type="as" access="read">
63 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
64 </property>
65 <property name="OnSuccessOf" type="as" access="read">
66 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
67 </property>
68 <property name="OnFailure" type="as" access="read">
69 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
70 </property>
71 <property name="OnFailureOf" type="as" access="read">
72 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
73 </property>
74 <property name="Triggers" type="as" access="read">
75 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
76 </property>
77 <property name="TriggeredBy" type="as" access="read">
78 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
79 </property>
80 <property name="PropagatesReloadTo" type="as" access="read">
81 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
82 </property>
83 <property name="ReloadPropagatedFrom" type="as" access="read">
84 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
85 </property>
86 <property name="PropagatesStopTo" type="as" access="read">
87 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
88 </property>
89 <property name="StopPropagatedFrom" type="as" access="read">
90 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
91 </property>
92 <property name="JoinsNamespaceOf" type="as" access="read">
93 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
94 </property>
95 <property name="SliceOf" type="as" access="read">
96 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
97 </property>
98 <property name="RequiresMountsFor" type="as" access="read">
99 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
100 </property>
101 <property name="WantsMountsFor" type="as" access="read">
102 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
103 </property>
104 <property name="Documentation" type="as" access="read">
105 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
106 </property>
107 <property name="Description" type="s" access="read">
108 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
109 </property>
110 <property name="AccessSELinuxContext" type="s" access="read">
111 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
112 </property>
113 <property name="LoadState" type="s" access="read">
114 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
115 </property>
116 <property name="ActiveState" type="s" access="read">
117 </property>
118 <property name="FreezerState" type="s" access="read">
119 </property>
120 <property name="SubState" type="s" access="read">
121 </property>
122 <property name="FragmentPath" type="s" access="read">
123 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
124 </property>
125 <property name="SourcePath" type="s" access="read">
126 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
127 </property>
128 <property name="DropInPaths" type="as" access="read">
129 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
130 </property>
131 <property name="UnitFileState" type="s" access="read">
132 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
133 </property>
134 <property name="UnitFilePreset" type="s" access="read">
135 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
136 </property>
137 <property name="StateChangeTimestamp" type="t" access="read">
138 </property>
139 <property name="StateChangeTimestampMonotonic" type="t" access="read">
140 </property>
141 <property name="InactiveExitTimestamp" type="t" access="read">
142 </property>
143 <property name="InactiveExitTimestampMonotonic" type="t" access="read">
144 </property>
145 <property name="ActiveEnterTimestamp" type="t" access="read">
146 </property>
147 <property name="ActiveEnterTimestampMonotonic" type="t" access="read">
148 </property>
149 <property name="ActiveExitTimestamp" type="t" access="read">
150 </property>
151 <property name="ActiveExitTimestampMonotonic" type="t" access="read">
152 </property>
153 <property name="InactiveEnterTimestamp" type="t" access="read">
154 </property>
155 <property name="InactiveEnterTimestampMonotonic" type="t" access="read">
156 </property>
157 <property name="CanStart" type="b" access="read">
158 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
159 </property>
160 <property name="CanStop" type="b" access="read">
161 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
162 </property>
163 <property name="CanReload" type="b" access="read">
164 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
165 </property>
166 <property name="CanIsolate" type="b" access="read">
167 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
168 </property>
169 <property name="CanClean" type="as" access="read">
170 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
171 </property>
172 <property name="CanFreeze" type="b" access="read">
173 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
174 </property>
175 <property name="CanLiveMount" type="b" access="read">
176 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
177 </property>
178 <!-- <property name="Job" type="(uo)" access="read"> -->
179 <!-- </property> -->
180 <property name="StopWhenUnneeded" type="b" access="read">
181 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
182 </property>
183 <property name="RefuseManualStart" type="b" access="read">
184 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
185 </property>
186 <property name="RefuseManualStop" type="b" access="read">
187 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
188 </property>
189 <property name="AllowIsolate" type="b" access="read">
190 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
191 </property>
192 <property name="DefaultDependencies" type="b" access="read">
193 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
194 </property>
195 <property name="SurviveFinalKillSignal" type="b" access="read">
196 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
197 </property>
198 <property name="OnSuccessJobMode" type="s" access="read">
199 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
200 </property>
201 <property name="OnFailureJobMode" type="s" access="read">
202 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
203 </property>
204 <property name="IgnoreOnIsolate" type="b" access="read">
205 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
206 </property>
207 <property name="NeedDaemonReload" type="b" access="read">
208 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
209 </property>
210 <property name="Markers" type="as" access="read">
211 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
212 </property>
213 <property name="JobTimeoutUSec" type="t" access="read">
214 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
215 </property>
216 <property name="JobRunningTimeoutUSec" type="t" access="read">
217 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
218 </property>
219 <property name="JobTimeoutAction" type="s" access="read">
220 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
221 </property>
222 <property name="JobTimeoutRebootArgument" type="s" access="read">
223 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
224 </property>
225 <property name="ConditionResult" type="b" access="read">
226 </property>
227 <property name="AssertResult" type="b" access="read">
228 </property>
229 <property name="ConditionTimestamp" type="t" access="read">
230 </property>
231 <property name="ConditionTimestampMonotonic" type="t" access="read">
232 </property>
233 <property name="AssertTimestamp" type="t" access="read">
234 </property>
235 <property name="AssertTimestampMonotonic" type="t" access="read">
236 </property>
237 <!-- <property name="Conditions" type="a(sbbsi)" access="read"> -->
238 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates"/> -->
239 <!-- </property> -->
240 <!-- <property name="Asserts" type="a(sbbsi)" access="read"> -->
241 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates"/> -->
242 <!-- </property> -->
243 <!-- <property name="LoadError" type="(ss)" access="read"> -->
244 <!-- <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> -->
245 <!-- </property> -->
246 <property name="Transient" type="b" access="read">
247 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
248 </property>
249 <property name="Perpetual" type="b" access="read">
250 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
251 </property>
252 <property name="StartLimitIntervalUSec" type="t" access="read">
253 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
254 </property>
255 <property name="StartLimitBurst" type="u" access="read">
256 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
257 </property>
258 <property name="StartLimitAction" type="s" access="read">
259 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
260 </property>
261 <property name="FailureAction" type="s" access="read">
262 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
263 </property>
264 <property name="FailureActionExitStatus" type="i" access="read">
265 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
266 </property>
267 <property name="SuccessAction" type="s" access="read">
268 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
269 </property>
270 <property name="SuccessActionExitStatus" type="i" access="read">
271 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
272 </property>
273 <property name="RebootArgument" type="s" access="read">
274 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
275 </property>
276 <property name="InvocationID" type="ay" access="read">
277 </property>
278 <property name="CollectMode" type="s" access="read">
279 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
280 </property>
281 <property name="Refs" type="as" access="read">
282 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
283 </property>
284 <!-- <property name="ActivationDetails" type="a(ss)" access="read"> -->
285 <!-- </property> -->
286 <property name="DebugInvocation" type="b" access="read">
287 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
288 </property>
289 <method name="Start">
290 <arg type="s" name="mode" direction="in"/>
291 <arg type="o" name="job" direction="out"/>
292 </method>
293 <method name="Stop">
294 <arg type="s" name="mode" direction="in"/>
295 <arg type="o" name="job" direction="out"/>
296 </method>
297 <method name="Reload">
298 <arg type="s" name="mode" direction="in"/>
299 <arg type="o" name="job" direction="out"/>
300 </method>
301 <method name="Restart">
302 <arg type="s" name="mode" direction="in"/>
303 <arg type="o" name="job" direction="out"/>
304 </method>
305 <method name="TryRestart">
306 <arg type="s" name="mode" direction="in"/>
307 <arg type="o" name="job" direction="out"/>
308 </method>
309 <method name="ReloadOrRestart">
310 <arg type="s" name="mode" direction="in"/>
311 <arg type="o" name="job" direction="out"/>
312 </method>
313 <method name="ReloadOrTryRestart">
314 <arg type="s" name="mode" direction="in"/>
315 <arg type="o" name="job" direction="out"/>
316 </method>
317 <!-- <method name="EnqueueJob"> -->
318 <!-- <arg type="s" name="job_type" direction="in"/> -->
319 <!-- <arg type="s" name="job_mode" direction="in"/> -->
320 <!-- <arg type="u" name="job_id" direction="out"/> -->
321 <!-- <arg type="o" name="job_path" direction="out"/> -->
322 <!-- <arg type="s" name="unit_id" direction="out"/> -->
323 <!-- <arg type="o" name="unit_path" direction="out"/> -->
324 <!-- <arg type="s" name="job_type" direction="out"/> -->
325 <!-- <arg type="a(uosos)" name="affected_jobs" direction="out"/> -->
326 <!-- </method> -->
327 <method name="Kill">
328 <arg type="s" name="whom" direction="in"/>
329 <arg type="i" name="signal" direction="in"/>
330 </method>
331 <method name="KillSubgroup">
332 <arg type="s" name="subgroup" direction="in"/>
333 <arg type="i" name="signal" direction="in"/>
334 </method>
335 <method name="QueueSignal">
336 <arg type="s" name="whom" direction="in"/>
337 <arg type="i" name="signal" direction="in"/>
338 <arg type="i" name="value" direction="in"/>
339 </method>
340 <method name="ResetFailed">
341 </method>
342 <!-- <method name="SetProperties"> -->
343 <!-- <arg type="b" name="runtime" direction="in"/> -->
344 <!-- <arg type="a(sv)" name="properties" direction="in"/> -->
345 <!-- </method> -->
346 <method name="Ref">
347 </method>
348 <method name="Unref">
349 </method>
350 <method name="Clean">
351 <arg type="as" name="mask" direction="in"/>
352 </method>
353 <method name="Freeze">
354 </method>
355 <method name="Thaw">
356 </method>
357 </interface>
358</node>
359
diff --git a/accounts/gkleen@sif/shell/quickshell/Bar.qml b/accounts/gkleen@sif/shell/quickshell/Bar.qml
index bce72077..33909884 100644
--- a/accounts/gkleen@sif/shell/quickshell/Bar.qml
+++ b/accounts/gkleen@sif/shell/quickshell/Bar.qml
@@ -89,7 +89,7 @@ PanelWindow {
89 KeyboardLayout {} 89 KeyboardLayout {}
90 90
91 Item { 91 Item {
92 visible: privacy.visible 92 visible: privacy.visible || ytDlp.visible
93 height: parent.height 93 height: parent.height
94 width: 8 - 4 94 width: 8 - 4
95 } 95 }
@@ -99,7 +99,17 @@ PanelWindow {
99 } 99 }
100 100
101 Item { 101 Item {
102 visible: privacy.visible 102 visible: privacy.visible && ytDlp.visible
103 height: parent.height
104 width: 8 - 4
105 }
106
107 YtDlpWidget {
108 id: ytDlp
109 }
110
111 Item {
112 visible: privacy.visible || ytDlp.visible
103 height: parent.height 113 height: parent.height
104 width: 8 - 4 114 width: 8 - 4
105 } 115 }
diff --git a/accounts/gkleen@sif/shell/quickshell/Services/NiriService.qml b/accounts/gkleen@sif/shell/quickshell/Services/NiriService.qml
index cd4ed125..e9e86f95 100644
--- a/accounts/gkleen@sif/shell/quickshell/Services/NiriService.qml
+++ b/accounts/gkleen@sif/shell/quickshell/Services/NiriService.qml
@@ -80,6 +80,7 @@ Singleton {
80 eventCastStopped(event.CastStopped); 80 eventCastStopped(event.CastStopped);
81 else if (event.Ok && !eventStreamSocket.acked) { eventStreamSocket.acked = true; } 81 else if (event.Ok && !eventStreamSocket.acked) { eventStreamSocket.acked = true; }
82 else if (event.OverviewOpenedOrClosed) {} 82 else if (event.OverviewOpenedOrClosed) {}
83 else if (event.ScreenshotCaptured) {}
83 else if (event.ConfigLoaded) {} 84 else if (event.ConfigLoaded) {}
84 else 85 else
85 console.log(JSON.stringify(event)); 86 console.log(JSON.stringify(event));
diff --git a/accounts/gkleen@sif/shell/quickshell/YtDlpWidget.qml b/accounts/gkleen@sif/shell/quickshell/YtDlpWidget.qml
new file mode 100644
index 00000000..ff338d49
--- /dev/null
+++ b/accounts/gkleen@sif/shell/quickshell/YtDlpWidget.qml
@@ -0,0 +1,190 @@
1import QtQml.Models
2import QtQuick
3import QtQuick.Layouts
4import QtQuick.Controls.Material
5import Quickshell
6import Quickshell.Io
7import Quickshell.Widgets
8import Custom as Custom
9
10Item {
11 id: root
12
13 height: parent.height
14 width: icon.width
15 anchors.verticalCenter: parent.verticalCenter
16
17 visible: Boolean(unitsModel.values.length)
18
19 WrapperMouseArea {
20 id: widgetMouseArea
21
22 anchors.fill: parent
23 hoverEnabled: true
24
25 Item {
26 anchors.fill: parent
27
28 MaterialDesignIcon {
29 id: icon
30
31 implicitSize: 14
32 anchors.centerIn: parent
33
34 icon: "tray-arrow-down"
35 color: "white"
36 }
37 }
38 }
39
40 PopupWindow {
41 id: tooltip
42
43 property bool openPopup: false
44 property bool nextVisible: widgetMouseArea.containsMouse || tooltipMouseArea.containsMouse || openPopup
45
46 anchor {
47 item: widgetMouseArea
48 edges: Edges.Bottom | Edges.Left
49 }
50 visible: false
51
52 onNextVisibleChanged: hangTimer.restart()
53
54 Timer {
55 id: hangTimer
56 interval: 100
57 onTriggered: tooltip.visible = tooltip.nextVisible
58 }
59
60 implicitWidth: tooltipContent.width
61 implicitHeight: tooltipContent.height
62 color: "transparent"
63
64 Rectangle {
65 width: tooltip.width
66 height: tooltipLayout.childrenRect.height + 16
67 color: "black"
68 }
69
70 WrapperItem {
71 id: tooltipContent
72
73 WrapperMouseArea {
74 id: tooltipMouseArea
75
76 hoverEnabled: true
77 enabled: true
78
79 WrapperItem {
80 margin: 8
81
82 child: GridLayout {
83 id: tooltipLayout
84
85 columns: 2
86 }
87
88 Repeater {
89 model: ScriptModel {
90 id: unitsModel
91
92 values: [...Custom.Systemd.userUnits.values].filter(unit => unit.id.match(/^yt-dlp@.+\.service$/) && unit.activeState === "active" && unit.runtimeDirectory)
93 }
94
95 Item {
96 id: unitDelegate
97
98 Component.onCompleted: {
99 while (children.length) { children[0].parent = tooltipLayout; }
100 }
101
102 required property var modelData
103 required property int index
104
105 property var state: null
106
107 Socket {
108 id: socket
109
110 path: Quickshell.env("XDG_RUNTIME_DIR") + "/" + unitDelegate.modelData.runtimeDirectory[0] + "/status.sock"
111 connected: true
112 onError: e => {
113 console.warn("YtDlpWidget: Error in Socket:", socket.path, e);
114 }
115 parser: SplitParser {
116 onRead: line => {
117 try {
118 unitDelegate.state = JSON.parse(line)
119 } catch (e) {
120 console.warn("YtDlpWidget: Failed to parse state:", line, e)
121 }
122 }
123 }
124 }
125
126 WrapperItem {
127 Layout.column: 0
128 Layout.row: unitDelegate.index
129
130 implicitWidth: descText.contentWidth
131 implicitHeight: descText.contentHeight
132
133 Text {
134 id: descText
135
136 color: "white"
137 font.pointSize: 10
138 font.family: "Fira Sans"
139
140 text: unitDelegate.state?.title || unitDelegate.modelData.id
141 }
142 }
143
144 /*
145 WrapperItem {
146 Layout.column: 1
147 Layout.row: unitDelegate.index
148
149 implicitWidth: fragText.contentWidth
150 implicitHeight: fragText.contentHeight
151
152 visible: Boolean(unitDelegate.state)
153
154 Text {
155 id: fragText
156
157 color: "white"
158 font.pointSize: 10
159 font.family: "Fira Sans"
160
161 text: `${unitDelegate.state?.fragment_index}/${unitDelegate.state?.fragment_count}`
162 }
163 }
164 */
165
166 WrapperItem {
167 Layout.column: 1
168 Layout.row: unitDelegate.index
169
170 visible: Boolean(unitDelegate.state)
171
172 ProgressBar {
173 id: progress
174
175 Material.background: "black"
176 Material.accent: "white"
177
178 from: 0
179 to: unitDelegate.state?.total_bytes || unitDelegate.state?.total_bytes_estimate || 0
180 value: unitDelegate.state?.downloaded_bytes || 0
181 indeterminate: !Boolean(unitDelegate.state?.total_bytes || unitDelegate.state?.total_bytes_estimate) || unitDelegate.state?.status !== "downloading"
182 }
183 }
184 }
185 }
186 }
187 }
188 }
189 }
190}
diff --git a/accounts/gkleen@sif/systemd.nix b/accounts/gkleen@sif/systemd.nix
index 2ccbaea0..955fe9f5 100644
--- a/accounts/gkleen@sif/systemd.nix
+++ b/accounts/gkleen@sif/systemd.nix
@@ -306,6 +306,7 @@ in {
306 Service = { 306 Service = {
307 Type = "notify"; 307 Type = "notify";
308 CacheDirectory = "yt-dlp/%N"; 308 CacheDirectory = "yt-dlp/%N";
309 RuntimeDirectory = "yt-dlp/%N";
309 StandardInput = "socket"; 310 StandardInput = "socket";
310 StandardOutput = "journal"; 311 StandardOutput = "journal";
311 WatchdogSec = "30min"; 312 WatchdogSec = "30min";
@@ -315,6 +316,7 @@ in {
315 ]; 316 ];
316 ExecStart = ''${lib.getExe pkgs.dscp} ${pkgs.writers.writePython3 "yt-dlp" { 317 ExecStart = ''${lib.getExe pkgs.dscp} ${pkgs.writers.writePython3 "yt-dlp" {
317 libraries = with pkgs.python3Packages; [ yt-dlp sdnotify ]; 318 libraries = with pkgs.python3Packages; [ yt-dlp sdnotify ];
319 flakeIgnore = [ "E501" ];
318 } '' 320 } ''
319 import json 321 import json
320 from yt_dlp import YoutubeDL, parse_options 322 from yt_dlp import YoutubeDL, parse_options
@@ -322,14 +324,46 @@ in {
322 from sdnotify import SystemdNotifier 324 from sdnotify import SystemdNotifier
323 from os import environ 325 from os import environ
324 from pathlib import Path 326 from pathlib import Path
327 import threading
328 import socketserver
325 329
326 330
327 n = SystemdNotifier() 331 status = None
332 status_notifier = threading.Condition()
333
334
335 class StatusRequestHandler(socketserver.BaseRequestHandler):
336 def handle(self):
337 with self.request.makefile('w', encoding='utf-8') as fh:
338 while True:
339 with status_notifier:
340 json.dump(status, fh)
341 fh.write('\n')
342 fh.flush()
343 status_notifier.wait()
344
345
346 class ThreadedUnixStreamServer(socketserver.ThreadingMixIn, socketserver.UnixStreamServer):
347 pass
348
349
350 def progress_hook(d):
351 global status
352 n.notify('WATCHDOG=1\nSTATUS=' + d['status'])
353 with status_notifier:
354 status = {
355 **{k: v for k, v in d.items() if k in {'status', 'downloaded_bytes', 'total_bytes', 'total_bytes_estimate', 'fragment_count', 'fragment_index'}},
356 **{k: v for k, v in (d['info_dict'] if 'info_dict' in d else {}).items() if k in {'title', 'filename'}},
357 }
358 status_notifier.notify_all()
359
360
361 n = SystemdNotifier(debug=True)
328 args = json.load(stdin) 362 args = json.load(stdin)
329 ydl_opts = { 363 ydl_opts = {
330 **parse_options().ydl_opts, 364 **parse_options().ydl_opts,
331 'progress_hooks': [lambda _d: n.notify('WATCHDOG=1')], 365 'progress_hooks': [progress_hook],
332 'postprocessor_hooks': [lambda _d: n.notify('WATCHDOG=1')], 366 'postprocessor_hooks': [progress_hook],
333 'progress_with_newline': True, 367 'progress_with_newline': True,
334 'progress_delta': 5, 368 'progress_delta': 5,
335 'paths': { 369 'paths': {
@@ -339,6 +373,9 @@ in {
339 'noplaylist': True, 373 'noplaylist': True,
340 **(args['params'] if 'params' in args else {}), 374 **(args['params'] if 'params' in args else {}),
341 } 375 }
376 status_server = ThreadedUnixStreamServer(str(Path(environ['RUNTIME_DIRECTORY']) / 'status.sock'), StatusRequestHandler)
377 status_server.daemon_threads = True
378 threading.Thread(target=status_server.serve_forever, daemon=True).start()
342 with YoutubeDL(ydl_opts) as ytdl: 379 with YoutubeDL(ydl_opts) as ytdl:
343 n.notify('READY=1') 380 n.notify('READY=1')
344 ytdl.download(args['urls']) 381 ytdl.download(args['urls'])