mirror of
https://github.com/belsabbagh/dotfiles.git
synced 2026-04-11 09:36:46 +00:00
quickshell and hyprland additions
This commit is contained in:
@@ -0,0 +1,300 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import Quickshell
|
||||
import Quickshell.Io
|
||||
import QtQuick.Controls
|
||||
import Quickshell.Widgets
|
||||
import qs.config
|
||||
import qs.modules.components
|
||||
import qs.services
|
||||
|
||||
ContentMenu {
|
||||
property string barKey: "bar"
|
||||
title: "Bar"
|
||||
description: "Adjust the bar's look."
|
||||
|
||||
ContentCard {
|
||||
id: monitorSelectorCard
|
||||
|
||||
StyledText {
|
||||
text: "Monitor Bar Configuration"
|
||||
font.pixelSize: Metrics.fontSize(20)
|
||||
font.bold: true
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: (Config.runtime.monitors?.[monitorSelector.model[monitorSelector.currentIndex]]?.bar)
|
||||
? "This monitor has its own bar configuration."
|
||||
: "This monitor currently uses the global bar."
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
spacing: Metrics.spacing("normal")
|
||||
|
||||
StyledDropDown {
|
||||
id: monitorSelector
|
||||
Layout.preferredWidth: 220
|
||||
model: Xrandr.monitors.map(m => m.name)
|
||||
currentIndex: 0
|
||||
onCurrentIndexChanged: monitorSelectorCard.updateMonitorProperties()
|
||||
}
|
||||
|
||||
Item { Layout.fillWidth: true }
|
||||
|
||||
StyledButton {
|
||||
id: createButton
|
||||
icon: "add"
|
||||
text: "Override Bar: (" + monitorSelector.model[monitorSelector.currentIndex] + ")"
|
||||
Layout.preferredWidth: 280
|
||||
onClicked: {
|
||||
const monitorName = monitorSelector.model[monitorSelector.currentIndex]
|
||||
if (!monitorName) return
|
||||
if (!Config.runtime.monitors) Config.runtime.monitors = {}
|
||||
if (!Config.runtime.monitors[monitorName])
|
||||
Config.runtime.monitors[monitorName] = {}
|
||||
|
||||
const defaultBar = {
|
||||
density: 50,
|
||||
enabled: true,
|
||||
floating: false,
|
||||
gothCorners: true,
|
||||
margins: 16,
|
||||
merged: false,
|
||||
modules: {
|
||||
height: 34,
|
||||
paddingColor: "#1f1f1f",
|
||||
radius: 17,
|
||||
statusIcons: {
|
||||
bluetoothStatusEnabled: true,
|
||||
enabled: true,
|
||||
networkStatusEnabled: true
|
||||
},
|
||||
systemUsage: {
|
||||
cpuStatsEnabled: true,
|
||||
enabled: true,
|
||||
memoryStatsEnabled: true,
|
||||
tempStatsEnabled: true
|
||||
},
|
||||
workspaces: {
|
||||
enabled: true,
|
||||
showAppIcons: true,
|
||||
showJapaneseNumbers: false,
|
||||
workspaceIndicators: 8
|
||||
}
|
||||
},
|
||||
position: "top",
|
||||
radius: 23
|
||||
}
|
||||
|
||||
Config.updateKey("monitors." + monitorName + ".bar", defaultBar)
|
||||
monitorSelectorCard.updateMonitorProperties()
|
||||
}
|
||||
}
|
||||
|
||||
StyledButton {
|
||||
id: deleteButton
|
||||
icon: "delete"
|
||||
text: "Use Global Bar: (" + monitorSelector.model[monitorSelector.currentIndex] + ")"
|
||||
secondary: true
|
||||
Layout.preferredWidth: 280
|
||||
onClicked: {
|
||||
const monitorName = monitorSelector.model[monitorSelector.currentIndex]
|
||||
if (!monitorName) return
|
||||
Config.updateKey("monitors." + monitorName + ".bar", undefined)
|
||||
monitorSelectorCard.updateMonitorProperties()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function updateMonitorProperties() {
|
||||
const monitorName = monitorSelector.model[monitorSelector.currentIndex]
|
||||
const monitorBar = Config.runtime.monitors?.[monitorName]?.bar
|
||||
barKey = monitorBar ? "monitors." + monitorName + ".bar" : "bar"
|
||||
|
||||
createButton.enabled = !monitorBar
|
||||
deleteButton.enabled = !!monitorBar
|
||||
|
||||
monitorSelector.model = Xrandr.monitors.map(m => m.name)
|
||||
monitorSelector.currentIndex = Xrandr.monitors.findIndex(m => m.name === monitorName)
|
||||
}
|
||||
}
|
||||
|
||||
ContentCard {
|
||||
StyledText {
|
||||
text: "Bar"
|
||||
font.pixelSize: Metrics.fontSize(20)
|
||||
font.bold: true
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
StyledText {
|
||||
text: "Position"
|
||||
font.pixelSize: Metrics.fontSize(16)
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
spacing: Metrics.spacing(8)
|
||||
Repeater {
|
||||
model: ["Top", "Bottom", "Left", "Right"]
|
||||
delegate: StyledButton {
|
||||
property string pos: modelData.toLowerCase()
|
||||
text: modelData
|
||||
Layout.fillWidth: true
|
||||
checked: ConfigResolver.bar(monitorSelector.model[monitorSelector.currentIndex]).position === pos
|
||||
topLeftRadius: Metrics.radius("normal")
|
||||
topRightRadius: Metrics.radius("normal")
|
||||
bottomLeftRadius: Metrics.radius("normal")
|
||||
bottomRightRadius: Metrics.radius("normal")
|
||||
onClicked: Config.updateKey(barKey + ".position", pos)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
StyledSwitchOption {
|
||||
title: "Enabled"
|
||||
description: "Toggle the bar visibility on/off"
|
||||
prefField: barKey + ".enabled"
|
||||
}
|
||||
StyledSwitchOption {
|
||||
title: "Floating Bar"
|
||||
description: "Make the bar float above other windows instead of being part of the desktop"
|
||||
prefField: barKey + ".floating"
|
||||
}
|
||||
StyledSwitchOption {
|
||||
title: "Goth Corners"
|
||||
description: "Apply gothic-style corner cutouts to the bar"
|
||||
prefField: barKey + ".gothCorners"
|
||||
}
|
||||
StyledSwitchOption {
|
||||
title: "Merged Layout"
|
||||
description: "Merge all modules into a single continuous layout"
|
||||
prefField: barKey + ".merged"
|
||||
}
|
||||
}
|
||||
|
||||
ContentCard {
|
||||
StyledText {
|
||||
text: "Bar Rounding & Size"
|
||||
font.pixelSize: Metrics.fontSize(20)
|
||||
font.bold: true
|
||||
}
|
||||
|
||||
NumberStepper {
|
||||
label: "Bar Density"
|
||||
prefField: barKey + ".density"
|
||||
description: "Modify the bar's density"
|
||||
minimum: 40
|
||||
maximum: 128
|
||||
}
|
||||
NumberStepper {
|
||||
label: "Bar Radius"
|
||||
prefField: barKey + ".radius"
|
||||
description: "Modify the bar's radius"
|
||||
minimum: 10
|
||||
maximum: 128
|
||||
}
|
||||
NumberStepper {
|
||||
label: "Module Container Radius"
|
||||
prefField: barKey + ".modules.radius"
|
||||
description: "Modify the bar's module.radius"
|
||||
minimum: 10
|
||||
maximum: 128
|
||||
}
|
||||
NumberStepper {
|
||||
label: "Module Height"
|
||||
prefField: barKey + ".modules.height"
|
||||
description: "Modify the bar's module.height"
|
||||
minimum: 10
|
||||
maximum: 128
|
||||
}
|
||||
NumberStepper {
|
||||
label: "Workspace Indicators"
|
||||
prefField: barKey + ".modules.workspaces.workspaceIndicators"
|
||||
description: "Adjust how many workspace indicators to show."
|
||||
minimum: 1
|
||||
maximum: 10
|
||||
}
|
||||
}
|
||||
|
||||
ContentCard {
|
||||
StyledText {
|
||||
text: "Bar Modules"
|
||||
font.pixelSize: Metrics.fontSize(20)
|
||||
font.bold: true
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: "Workspaces"
|
||||
font.pixelSize: Metrics.fontSize(18)
|
||||
font.bold: true
|
||||
}
|
||||
StyledSwitchOption {
|
||||
title: "Enabled"
|
||||
description: "Show workspace indicator module"
|
||||
prefField: barKey + ".modules.workspaces.enabled"
|
||||
}
|
||||
StyledSwitchOption {
|
||||
title: "Show App Icons"
|
||||
description: "Display application icons in workspace indicators"
|
||||
prefField: barKey + ".modules.workspaces.showAppIcons"
|
||||
enabled: !barKey.modules.workspaces.showJapaneseNumbers && Compositor.require("hyprland")
|
||||
opacity: !barKey.modules.workspaces.showJapaneseNumbers && Compositor.require("hyprland") ? 1 : 0.8
|
||||
}
|
||||
StyledSwitchOption {
|
||||
title: "Show Japanese Numbers"
|
||||
description: "Use Japanese-style numbers instead of standard numerals"
|
||||
prefField: barKey + ".modules.workspaces.showJapaneseNumbers"
|
||||
enabled: !barKey.modules.workspaces.showAppIcons
|
||||
opacity: !barKey.modules.workspaces.showAppIcons ? 1 : 0.8
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: "Status Icons"
|
||||
font.pixelSize: Metrics.fontSize(18)
|
||||
font.bold: true
|
||||
}
|
||||
StyledSwitchOption {
|
||||
title: "Enabled"
|
||||
description: "Show status icons module (wifi, bluetooth)"
|
||||
prefField: barKey + ".modules.statusIcons.enabled"
|
||||
}
|
||||
StyledSwitchOption {
|
||||
title: "Show Wifi Status"
|
||||
description: "Display wifi connection status and signal strength"
|
||||
prefField: barKey + ".modules.statusIcons.networkStatusEnabled"
|
||||
}
|
||||
StyledSwitchOption {
|
||||
title: "Show Bluetooth Status"
|
||||
description: "Display bluetooth connection status"
|
||||
prefField: barKey + ".modules.statusIcons.bluetoothStatusEnabled"
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: "System Stats"
|
||||
font.pixelSize: Metrics.fontSize(18)
|
||||
font.bold: true
|
||||
}
|
||||
StyledSwitchOption {
|
||||
title: "Enabled"
|
||||
description: "Show system resource monitoring module"
|
||||
prefField: barKey + ".modules.systemUsage.enabled"
|
||||
}
|
||||
StyledSwitchOption {
|
||||
title: "Show Cpu Usage Stats"
|
||||
description: "Display CPU usage percentage and load"
|
||||
prefField: barKey + ".modules.systemUsage.cpuStatsEnabled"
|
||||
}
|
||||
StyledSwitchOption {
|
||||
title: "Show Memory Usage Stats"
|
||||
description: "Display RAM usage and available memory"
|
||||
prefField: barKey + ".modules.systemUsage.memoryStatsEnabled"
|
||||
}
|
||||
StyledSwitchOption {
|
||||
title: "Show Cpu Temperature Stats"
|
||||
description: "Display CPU temperature readings"
|
||||
prefField: barKey + ".modules.systemUsage.tempStatsEnabled"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user