Files
nixos/Droidnix/generated/.config/quickshell/updater/shell.qml
T
2026-04-29 13:01:06 +02:00

242 lines
9.3 KiB
QML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
import Quickshell
import Quickshell.Io
import QtQuick
import QtQuick.Layouts
ShellRoot {
QtObject {
id: colors
readonly property color base: "#1e1e2e"
readonly property color surface0: "#313244"
readonly property color surface1: "#45475a"
readonly property color text: "#cdd6f4"
readonly property color subtext0: "#a6adc8"
readonly property color green: "#a6e3a1"
readonly property color blue: "#89b4fa"
readonly property color red: "#f38ba8"
readonly property color yellow: "#f9e2af"
}
property int currentStep: 0
property bool isRunning: false
property bool isFailed: false
property string currentLog: ""
property bool started: false
readonly property var steps: [
{ label: "Updating flake.lock", cmd: ["nix", "flake", "update"], cwd: "/home/henrov/Repos/nixos/Droidnix" },
{ label: "Updating Flatpaks", cmd: ["flatpak", "update", "-y"], cwd: "/home/henrov" },
{ label: "Staging changes", cmd: ["git", "add", "."], cwd: "/home/henrov/Repos/nixos/Droidnix" },
{ label: "Committing changes", cmd: ["git", "commit", "-m", "Updated system"], cwd: "/home/henrov/Repos/nixos/Droidnix" },
{ label: "Pushing to remote", cmd: ["git", "push"], cwd: "/home/henrov/Repos/nixos/Droidnix" },
{ label: "Rebuilding NixOS", cmd: ["sudo", "nixos-rebuild", "switch", "--flake", ".#traveldroid"], cwd: "/home/henrov/Repos/nixos/Droidnix" },
{ label: "Reloading Hyprland", cmd: ["hyprctl", "reload"], cwd: "/home/henrov" },
]
function runStep(index) {
if (index >= steps.length) {
isRunning = false
currentStep = steps.length
return
}
currentStep = index
currentLog = ""
isRunning = true
stepProc.command = steps[index].cmd
stepProc.workingDirectory = steps[index].cwd
stepProc.running = true
}
Process {
id: stepProc
stdout: SplitParser {
onRead: (line) => {
currentLog = (currentLog + "\n" + line).split("\n").slice(-8).join("\n").trim()
}
}
stderr: SplitParser {
onRead: (line) => {
if (line.trim() !== "")
currentLog = (currentLog + "\n" + line).split("\n").slice(-8).join("\n").trim()
}
}
onExited: (code) => {
if (code !== 0 && currentStep !== 3) {
isFailed = true
isRunning = false
} else {
runStep(currentStep + 1)
}
}
}
FloatingWindow {
title: "quickshell-updater"
visible: true
width: 540
height: contentCol.implicitHeight + 32
color: "transparent"
Shortcut {
sequence: "Escape"
onActivated: Qt.quit()
}
Rectangle {
anchors.fill: parent
anchors.margins: -2
radius: 18
z: -1
gradient: Gradient {
orientation: Gradient.Horizontal
GradientStop { position: 0.0; color: colors.blue }
GradientStop { position: 1.0; color: colors.green }
}
}
Rectangle {
anchors.fill: parent
radius: 16
color: colors.base
ColumnLayout {
id: contentCol
anchors {
top: parent.top
left: parent.left
right: parent.right
margins: 20
}
spacing: 8
Text {
text: " System Update"
color: colors.text
font.pixelSize: 15
font.bold: true
Layout.topMargin: 8
}
// Steps
Repeater {
model: steps.length
delegate: RowLayout {
spacing: 10
Layout.fillWidth: true
readonly property bool done: !isFailed && (index < currentStep || (!isRunning && currentStep === steps.length))
readonly property bool active: isRunning && index === currentStep
readonly property bool failed: isFailed && index === currentStep
readonly property bool pending: !done && !active && !failed
// icon
Text {
font.pixelSize: 14
text: failed ? "✗" : done ? "✓" : active ? "" : "○"
color: failed ? colors.red : done ? colors.green : active ? colors.yellow : colors.surface1
}
// label
Text {
text: steps[index].label
font.pixelSize: 13
color: failed ? colors.red : done ? colors.green : active ? colors.text : colors.surface1
}
}
}
// Log box
Rectangle {
Layout.fillWidth: true
height: 160
radius: 8
color: colors.surface0
visible: currentLog !== "" && started
Text {
anchors {
fill: parent
margins: 10
}
text: currentLog
color: colors.subtext0
font.pixelSize: 11
font.family: "monospace"
wrapMode: Text.WrapAnywhere
verticalAlignment: Text.AlignBottom
}
}
// Bottom bar
RowLayout {
Layout.fillWidth: true
Layout.bottomMargin: 8
Text {
font.pixelSize: 12
text: {
if (!started) return "Press Start to begin"
if (isFailed) return "✗ Failed at: " + steps[currentStep].label
if (currentStep === steps.length) return "✓ All done!"
if (isRunning) return steps[currentStep].label + "…"
return ""
}
color: isFailed ? colors.red : currentStep === steps.length ? colors.green : colors.subtext0
}
Item { Layout.fillWidth: true }
Rectangle {
visible: !started
width: 80; height: 28
radius: 14
gradient: Gradient {
orientation: Gradient.Horizontal
GradientStop { position: 0.0; color: colors.blue }
GradientStop { position: 1.0; color: colors.green }
}
Text {
anchors.centerIn: parent
text: "Start"
color: colors.base
font.pixelSize: 12
font.bold: true
}
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: {
started = true
runStep(0)
}
}
}
Rectangle {
visible: !isRunning && started
width: 80; height: 28
radius: 14
color: colors.surface1
Text {
anchors.centerIn: parent
text: currentStep === steps.length ? "Close" : "Dismiss"
color: colors.text
font.pixelSize: 12
}
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: Qt.quit()
}
}
}
}
}
}
}