forked from Shinonome/dots-hyprland
right sidebar: cloudflare warp
This commit is contained in:
@@ -20,6 +20,7 @@ Rectangle {
|
|||||||
let total = 0;
|
let total = 0;
|
||||||
for (let i = 0; i < rowLayout.children.length; ++i) {
|
for (let i = 0; i < rowLayout.children.length; ++i) {
|
||||||
const child = rowLayout.children[i];
|
const child = rowLayout.children[i];
|
||||||
|
if (!child.visible) continue;
|
||||||
total += child.baseWidth ?? child.implicitWidth ?? child.width;
|
total += child.baseWidth ?? child.implicitWidth ?? child.width;
|
||||||
}
|
}
|
||||||
return total + rowLayout.spacing * (rowLayout.children.length - 1);
|
return total + rowLayout.spacing * (rowLayout.children.length - 1);
|
||||||
|
|||||||
@@ -179,6 +179,7 @@ Scope {
|
|||||||
NightLight {}
|
NightLight {}
|
||||||
GameMode {}
|
GameMode {}
|
||||||
IdleInhibitor {}
|
IdleInhibitor {}
|
||||||
|
CloudflareWarp {}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Center widget group
|
// Center widget group
|
||||||
|
|||||||
@@ -0,0 +1,89 @@
|
|||||||
|
import "root:/modules/common"
|
||||||
|
import "root:/modules/common/widgets"
|
||||||
|
import "../"
|
||||||
|
import QtQuick
|
||||||
|
import Quickshell.Io
|
||||||
|
import Quickshell
|
||||||
|
import Quickshell.Hyprland
|
||||||
|
|
||||||
|
QuickToggleButton {
|
||||||
|
id: root
|
||||||
|
toggled: false
|
||||||
|
visible: false
|
||||||
|
|
||||||
|
contentItem: CustomIcon {
|
||||||
|
id: distroIcon
|
||||||
|
source: 'cloudflare-dns-symbolic'
|
||||||
|
|
||||||
|
anchors.centerIn: parent
|
||||||
|
width: 12
|
||||||
|
height: 12
|
||||||
|
colorize: true
|
||||||
|
color: root.toggled ? Appearance.m3colors.m3onPrimary : Appearance.colors.colOnLayer1
|
||||||
|
|
||||||
|
Behavior on color {
|
||||||
|
animation: Appearance.animation.elementMoveFast.colorAnimation.createObject(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
if (toggled) {
|
||||||
|
root.toggled = false
|
||||||
|
Quickshell.execDetached(["warp-cli", "disconnect"])
|
||||||
|
} else {
|
||||||
|
root.toggled = true
|
||||||
|
Quickshell.execDetached(["warp-cli", "connect"])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Process {
|
||||||
|
id: connectProc
|
||||||
|
command: ["warp-cli", "connect"]
|
||||||
|
onExited: (exitCode, exitStatus) => {
|
||||||
|
console.log("Warp connection exited with code and status:", exitCode, exitStatus)
|
||||||
|
if (exitCode === 0) {
|
||||||
|
connectProc.running = true
|
||||||
|
} else {
|
||||||
|
console.error("Warp connection failed, please check your connection or try again later.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Process {
|
||||||
|
id: registrationProc
|
||||||
|
command: ["warp-cli", "registration", "new"]
|
||||||
|
onExited: (exitCode, exitStatus) => {
|
||||||
|
console.log("Warp registration exited with code and status:", exitCode, exitStatus)
|
||||||
|
if (exitCode === 0) {
|
||||||
|
connectProc.running = true
|
||||||
|
} else {
|
||||||
|
Quickshell.execDetached(["notify-send", "Cloudflare Warp", "Registration failed. Please inspect manually with the <tt>warp-cli</tt> command", "-a", "Shell"])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Process {
|
||||||
|
id: fetchActiveState
|
||||||
|
running: true
|
||||||
|
command: ["bash", "-c", "warp-cli status"]
|
||||||
|
stdout: StdioCollector {
|
||||||
|
id: warpStatusCollector
|
||||||
|
onStreamFinished: {
|
||||||
|
if (warpStatusCollector.text.length > 0) {
|
||||||
|
console.log("Showing warp")
|
||||||
|
root.visible = true
|
||||||
|
}
|
||||||
|
if (warpStatusCollector.text.includes("Unable")) {
|
||||||
|
registrationProc.running = true
|
||||||
|
} else if (warpStatusCollector.text.includes("Connected")) {
|
||||||
|
root.toggled = true
|
||||||
|
} else if (warpStatusCollector.text.includes("Disconnected")) {
|
||||||
|
root.toggled = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
StyledToolTip {
|
||||||
|
content: qsTr("Cloudflare WARP (1.1.1.1)")
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user