Add bluetooth icon
This commit is contained in:
@@ -2,3 +2,4 @@
|
|||||||
|
|
||||||
env = XCURSOR_SIZE,24
|
env = XCURSOR_SIZE,24
|
||||||
env = HYPRCURSOR_SIZE,24
|
env = HYPRCURSOR_SIZE,24
|
||||||
|
env = QT_QPA_PLATFORMTHEME,qt6ct
|
||||||
@@ -26,6 +26,7 @@ bind = $mainMod SHIFT, o, movefocus, d
|
|||||||
bind = $mainMod SHIFT, J, swapnext
|
bind = $mainMod SHIFT, J, swapnext
|
||||||
|
|
||||||
bind = $mainMod SHIFT, K, swapnext, prev
|
bind = $mainMod SHIFT, K, swapnext, prev
|
||||||
|
bind = $mainMod, F, fullscreen, toggle
|
||||||
|
|
||||||
# Switch workspaces with mainMod + [0-9]
|
# Switch workspaces with mainMod + [0-9]
|
||||||
bind = $mainMod, 1, workspace, 1
|
bind = $mainMod, 1, workspace, 1
|
||||||
|
|||||||
@@ -1,3 +1,32 @@
|
|||||||
[Appearance]
|
[Appearance]
|
||||||
color_scheme_path=/home/sem/linux-dotfiles/qt6ct/colors/matugen.conf
|
color_scheme_path=/home/sem/.config/qt6ct/colors/matugen.conf
|
||||||
custom_palette=true
|
custom_palette=true
|
||||||
|
icon_theme=breeze-dark
|
||||||
|
standard_dialogs=default
|
||||||
|
style=Breeze
|
||||||
|
|
||||||
|
[Fonts]
|
||||||
|
fixed="Sans Serif,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,,0,0"
|
||||||
|
general="Sans Serif,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,,0,0"
|
||||||
|
|
||||||
|
[Interface]
|
||||||
|
activate_item_on_single_click=1
|
||||||
|
buttonbox_layout=0
|
||||||
|
cursor_flash_time=1000
|
||||||
|
dialog_buttons_have_icons=1
|
||||||
|
double_click_interval=400
|
||||||
|
gui_effects=@Invalid()
|
||||||
|
keyboard_scheme=2
|
||||||
|
menus_have_icons=true
|
||||||
|
show_shortcuts_in_context_menus=true
|
||||||
|
stylesheets=@Invalid()
|
||||||
|
toolbutton_style=4
|
||||||
|
underline_shortcut=1
|
||||||
|
wheel_scroll_lines=3
|
||||||
|
|
||||||
|
[SettingsWindow]
|
||||||
|
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x4\xe2\0\0\x2\xa6\0\0\0\0\0\0\0\0\0\0\x4\xe2\0\0\x2\xa6\0\0\0\x1\x2\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\x4\xe2\0\0\x2\xa6)
|
||||||
|
|
||||||
|
[Troubleshooting]
|
||||||
|
force_raster_widgets=1
|
||||||
|
ignored_applications=@Invalid()
|
||||||
|
|||||||
56
quickshell/services/BluetoothService.qml
Normal file
56
quickshell/services/BluetoothService.qml
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
import QtQuick
|
||||||
|
import Quickshell.Io
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: root
|
||||||
|
signal devicesFound(var devices)
|
||||||
|
property var connectedDevices: []
|
||||||
|
|
||||||
|
function deviceListChanged(newList) {
|
||||||
|
if (newList.length !== root.connectedDevices.length) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
for (let i = 0; i < newList.length; i++) {
|
||||||
|
if (newList[i].mac !== root.connectedDevices[i].mac ||
|
||||||
|
newList[i].name !== root.connectedDevices[i].name) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Process {
|
||||||
|
id: bluetoothConnectedDevicesProcess
|
||||||
|
command: ["bluetoothctl", "devices", "Connected"]
|
||||||
|
stdout: StdioCollector {
|
||||||
|
onStreamFinished: {
|
||||||
|
if (!this.text) {
|
||||||
|
root.connectedDevices = [];
|
||||||
|
root.devicesFound([]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var devices = this.text.trim().split("\n").map(line => {
|
||||||
|
var parts = line.split(" ");
|
||||||
|
return {
|
||||||
|
mac: parts[1],
|
||||||
|
name: parts.slice(2).join(" ")
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
if (root.deviceListChanged(devices)) {
|
||||||
|
root.connectedDevices = devices;
|
||||||
|
root.devicesFound(devices);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Timer {
|
||||||
|
interval: 2000
|
||||||
|
running: true
|
||||||
|
repeat: true
|
||||||
|
onTriggered: bluetoothConnectedDevicesProcess.running = true
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: bluetoothConnectedDevicesProcess.running = true
|
||||||
|
}
|
||||||
@@ -68,7 +68,6 @@ Item {
|
|||||||
|
|
||||||
stdout: StdioCollector {
|
stdout: StdioCollector {
|
||||||
onStreamFinished: {
|
onStreamFinished: {
|
||||||
console.log("GPU usage data:", this.text);
|
|
||||||
if (!this.text) {
|
if (!this.text) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ ShellRoot {
|
|||||||
gpuUsage: stats.gpuUsage
|
gpuUsage: stats.gpuUsage
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Variants {
|
Variants {
|
||||||
@@ -66,4 +65,3 @@ ShellRoot {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
49
quickshell/ui/BluetoothIcon.qml
Normal file
49
quickshell/ui/BluetoothIcon.qml
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
import Quickshell.Io
|
||||||
|
import QtQuick
|
||||||
|
|
||||||
|
import "../constants"
|
||||||
|
import "../services"
|
||||||
|
|
||||||
|
Text {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
// Nerd Font Bluetooth icon (nf-fa-bluetooth)
|
||||||
|
property string iconGlyph: "\udb80\udcaf"
|
||||||
|
property string connectedIconGlyph: "\udb80\udcb1"
|
||||||
|
property string disconnectedIconGlyph: "\udb80\udcaf"
|
||||||
|
|
||||||
|
property BluetoothService bluetoothService: BluetoothService {
|
||||||
|
onDevicesFound: function(devices) {
|
||||||
|
if (devices.length > 0) {
|
||||||
|
root.iconGlyph = root.connectedIconGlyph;
|
||||||
|
root.color = Colors.md3.on_primary_fixed;
|
||||||
|
} else {
|
||||||
|
root.iconGlyph = root.disconnectedIconGlyph;
|
||||||
|
root.color = Colors.md3.primary;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
text: iconGlyph
|
||||||
|
color: Colors.md3.on_primary_fixed
|
||||||
|
|
||||||
|
font {
|
||||||
|
family: Constants.fontFamily
|
||||||
|
pixelSize: Constants.fontSize
|
||||||
|
bold: true
|
||||||
|
}
|
||||||
|
|
||||||
|
Process {
|
||||||
|
id: bluemanManagerProcess
|
||||||
|
command: ["blueman-manager"]
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
hoverEnabled: true
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
bluemanManagerProcess.running = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
51
quickshell/ui/MixerEntry.qml
Normal file
51
quickshell/ui/MixerEntry.qml
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import QtQuick.Controls
|
||||||
|
import Quickshell.Services.Pipewire
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
required property PwNode node;
|
||||||
|
|
||||||
|
// bind the node so we can read its properties
|
||||||
|
PwObjectTracker { objects: [ node ] }
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
Image {
|
||||||
|
visible: source != ""
|
||||||
|
source: {
|
||||||
|
const icon = node.properties["application.icon-name"] ?? "audio-volume-high-symbolic";
|
||||||
|
return `image://icon/${icon}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSize.width: 20
|
||||||
|
sourceSize.height: 20
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
text: {
|
||||||
|
// application.name -> description -> name
|
||||||
|
const app = node.properties["application.name"] ?? (node.description != "" ? node.description : node.name);
|
||||||
|
const media = node.properties["media.name"];
|
||||||
|
return media != undefined ? `${app} - ${media}` : app;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Button {
|
||||||
|
text: node.audio.muted ? "unmute" : "mute"
|
||||||
|
onClicked: node.audio.muted = !node.audio.muted
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
Label {
|
||||||
|
Layout.preferredWidth: 50
|
||||||
|
text: `${Math.floor(node.audio.volume * 100)}%`
|
||||||
|
}
|
||||||
|
|
||||||
|
Slider {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
value: node.audio.volume
|
||||||
|
onValueChanged: node.audio.volume = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -66,6 +66,7 @@ Item {
|
|||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// =====================
|
// =====================
|
||||||
// RIGHT: System info
|
// RIGHT: System info
|
||||||
// =====================
|
// =====================
|
||||||
@@ -74,6 +75,10 @@ Item {
|
|||||||
|
|
||||||
LineSeparator {}
|
LineSeparator {}
|
||||||
|
|
||||||
|
BluetoothIcon {}
|
||||||
|
|
||||||
|
LineSeparator {}
|
||||||
|
|
||||||
BarText {
|
BarText {
|
||||||
prefix: "C"
|
prefix: "C"
|
||||||
value: cpuUsage
|
value: cpuUsage
|
||||||
@@ -93,6 +98,9 @@ Item {
|
|||||||
value: gpuUsage
|
value: gpuUsage
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LineSeparator {}
|
||||||
|
|
||||||
|
|
||||||
LineSeparator {}
|
LineSeparator {}
|
||||||
|
|
||||||
Clock {}
|
Clock {}
|
||||||
|
|||||||
Reference in New Issue
Block a user