The installer asks for the language before the keyboard, and Setup > Language (omarchy language en|zh) switches it later. Under zh_CN the menu reads its labels from omarchy-menu.zh-cn.jsonc, the shell from I18nZh.js through I18n.tr, and notifications are worded by their sender through omarchy-text, which reads the same table. User text is never translated.
70 lines
2.0 KiB
QML
70 lines
2.0 KiB
QML
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Io
|
|
import qs.Commons
|
|
import qs.Commons as Commons
|
|
import qs.Ui
|
|
|
|
BarIndicator {
|
|
id: root
|
|
|
|
property bool granted: false
|
|
property bool refreshPending: false
|
|
|
|
active: granted
|
|
activeText: ""
|
|
inactiveText: ""
|
|
activeTooltipText: I18n.tr("Disable Passwordless Sudo")
|
|
inactiveTooltipText: I18n.tr("Passwordless Sudo")
|
|
useActiveColor: true
|
|
activeColor: Commons.Color.urgent
|
|
|
|
function refresh() {
|
|
if (!root.bar) return
|
|
if (statusProc.running) {
|
|
root.refreshPending = true
|
|
return
|
|
}
|
|
root.refreshPending = false
|
|
statusProc.running = true
|
|
}
|
|
|
|
onBarChanged: refresh()
|
|
Component.onCompleted: refresh()
|
|
|
|
// No polling: each probe is a hardened script plus sudo calls that can log.
|
|
// omarchy-sudo-passwordless refreshes omarchy.indicators on enable, disable
|
|
// and expiry instead.
|
|
Connections {
|
|
target: root.indicatorHost
|
|
ignoreUnknownSignals: true
|
|
function onRefreshRequested() { root.refresh() }
|
|
}
|
|
|
|
Process {
|
|
id: statusProc
|
|
command: ["omarchy-sudo-passwordless", "--active"]
|
|
onExited: function(exitCode, exitStatus) {
|
|
root.granted = exitCode === 0 && exitStatus === 0
|
|
if (root.refreshPending) Qt.callLater(root.refresh)
|
|
}
|
|
}
|
|
|
|
Process {
|
|
id: disableProc
|
|
command: ["omarchy-sudo-passwordless", "--disable"]
|
|
onExited: function(exitCode, exitStatus) {
|
|
if ((exitCode !== 0 || exitStatus !== 0) && root.bar)
|
|
Quickshell.execDetached([Quickshell.env("OMARCHY_PATH") + "/bin/omarchy-notification-send", I18n.tr("Could not disable passwordless sudo"), I18n.tr("Check the sudo configuration and try again.")])
|
|
if (root.indicatorHost) root.indicatorHost.refresh()
|
|
else root.refresh()
|
|
}
|
|
}
|
|
|
|
onPressed: function() {
|
|
if (!root.bar || disableProc.running) return
|
|
if (root.granted) disableProc.running = true
|
|
else root.bar.run("omarchy-launch-floating-terminal-with-presentation omarchy-sudo-passwordless")
|
|
}
|
|
}
|