nixos/quickshell/KeyboardLayout.qml
2026-04-23 10:42:20 -03:00

63 lines
2 KiB
QML

import Quickshell
import Quickshell.Io
import QtQuick
BarPill {
id: root
layer.enabled: true
property int currentIdx: 0
property var names: []
readonly property string shortName: {
if (names.length === 0) return "??"
const n = names[currentIdx] ?? ""
if (n.includes("Portuguese")) return "PT"
if (n.includes("English")) return "EN"
// fallback: first two chars of first word
return n.split(" ")[0].substring(0, 2).toUpperCase()
}
Process {
command: ["niri", "msg", "--json", "event-stream"]
running: true
stdout: SplitParser {
splitMarker: "\n"
onRead: data => {
try {
const ev = JSON.parse(data)
if (ev.KeyboardLayoutsChanged) {
const kl = ev.KeyboardLayoutsChanged.keyboard_layouts
root.currentIdx = kl.current_idx
root.names = kl.names
} else if (ev.KeyboardLayoutSwitched) {
root.currentIdx = ev.KeyboardLayoutSwitched.idx
}
} catch (e) {}
}
}
}
Text {
text: "󰌌"
color: Theme.purple
font.pixelSize: Theme.fontSize
font.family: Theme.font
}
Text {
id: shortNameText
text: root.shortName
color: Theme.text
font.pixelSize: Theme.fontSize
font.family: Theme.font
Behavior on text {
// Flash the label on layout change
SequentialAnimation {
PropertyAnimation { target: shortNameText; property: "opacity"; to: 0; duration: 80 }
PropertyAction { target: shortNameText; property: "text" }
PropertyAnimation { target: shortNameText; property: "opacity"; to: 1; duration: 80 }
}
}
}
}