diff --git a/Droidnix/README.html b/Droidnix/README.html index f9304a348..f378b39c6 100644 --- a/Droidnix/README.html +++ b/Droidnix/README.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- +generated/flake.nixgenerated/modules/traveldroid/system/Colors.nixgenerated/hosts/traveldroid/boot.nixgenerated/hosts/traveldroid/hardware-configuration.nixgenerated/hosts/traveldroid/host.nixgenerated/flake.nixgenerated/modules/traveldroid/system/Colors.nixgenerated/hosts/traveldroid/boot.nixgenerated/hosts/traveldroid/hardware-configuration.nixgenerated/hosts/traveldroid/host.nixgenerated/modules/traveldroid/apps/2_b_installed.nixgenerated/modules/traveldroid/apps/emacs/emacs.nixgenerated/modules/traveldroid/apps/flameshot.nixgenerated/modules/traveldroid/apps/kitty.nixgenerated/modules/traveldroid/apps/starship.nixgenerated/modules/traveldroid/apps/thunar.nixgenerated/modules/traveldroid/apps/wofi.nixgenerated/modules/traveldroid/apps/zenbrowser.nixgenerated/modules/traveldroid/apps/zsh.nixgenerated/modules/traveldroid/apps/2_b_installed.nixgenerated/modules/traveldroid/apps/emacs/emacs.nixgenerated/modules/traveldroid/apps/flameshot.nixgenerated/modules/traveldroid/apps/kitty.nixgenerated/modules/traveldroid/apps/starship.nixgenerated/modules/traveldroid/apps/thunar.nixgenerated/modules/traveldroid/apps/wofi.nixgenerated/modules/traveldroid/apps/zenbrowser.nixgenerated/modules/traveldroid/apps/zsh.nixgenerated/modules/traveldroid/desktop/fonts.nixgenerated/modules/traveldroid/desktop/gtk.nixgenerated/modules/traveldroid/desktop/hyprland.nixgenerated/modules/traveldroid/desktop/stylix.nixgenerated/modules/traveldroid/desktop/wallpaper.nixgenerated/modules/traveldroid/desktop/waybar.nixgenerated/modules/traveldroid/desktop/wayland.nixgenerated/modules/traveldroid/desktop/xdg.nixgenerated/modules/traveldroid/desktop/fonts.nixgenerated/modules/traveldroid/desktop/gtk.nixgenerated/modules/traveldroid/desktop/hyprland.nixgenerated/modules/traveldroid/desktop/stylix.nixgenerated/modules/traveldroid/desktop/wallpaper.nixgenerated/modules/traveldroid/desktop/waybar.nixgenerated/modules/traveldroid/desktop/wayland.nixgenerated/modules/traveldroid/desktop/xdg.nixgenerated/modules/traveldroid/system/audio.nixgenerated/modules/traveldroid/system/bluetooth.nixgenerated/modules/traveldroid/system/copy_scripts.nixgenerated/modules/traveldroid/system/dbus.nixgenerated/modules/traveldroid/system/gnome-keyring.nixgenerated/modules/traveldroid/system/login-tuigreet.nixgenerated/modules/traveldroid/system/networking.nixgenerated/modules/traveldroid/system/nix.nixgenerated/modules/traveldroid/system/printing.nixgenerated/modules/traveldroid/system/quickshell.nixgenerated/modules/traveldroid/system/audio.nixgenerated/modules/traveldroid/system/bluetooth.nixgenerated/modules/traveldroid/system/copy_scripts.nixgenerated/modules/traveldroid/system/dbus.nixgenerated/modules/traveldroid/system/gnome-keyring.nixgenerated/modules/traveldroid/system/login-tuigreet.nixgenerated/modules/traveldroid/system/networking.nixgenerated/modules/traveldroid/system/nix.nixgenerated/modules/traveldroid/system/printing.nixgenerated/modules/traveldroid/system/quickshell.nixgenerated/.config/emacs/early-init.elgenerated/.config/emacs/init.elgenerated/.config/hypr/animations.confgenerated/.config/hypr/behaviour.confgenerated/.config/hypr/bindings.confgenerated/.config/hypr/exec-once.confgenerated/.config/hypr/hypridle.confgenerated/.config/hypr/hyprland.confgenerated/.config/hypr/hyprlock.confgenerated/.config/hypr/layer-rules.confgenerated/.config/hypr/layout.confgenerated/.config/hypr/monitor-rules.confgenerated/.config/hypr/theming.confgenerated/.config/hypr/window-rules.confgenerated/.config/hypr/workspace-rules.confgenerated/.config/quickshell/powermenu/shell.qmlgenerated/.config/scripts/layout-selector.shgenerated/.config/scripts/hypr-autocolwidth.shgenerated/.config/scripts/power.shgenerated/.config/scripts/update.shgenerated/.config/shared/Colors.cssgenerated/.config/starship.tomlgenerated/.config/stylix/stylix.confgenerated/.config/stylix/palette.jsongenerated/.config/stylix/palette.htmlgenerated/.config/waybar/configgenerated/.config/waybar/style-dark.cssgenerated/.config/scripts/bluetooth-status.shgenerated/.config/scripts/hypr-workspaces.shgenerated/.config/scripts/hypr-workspacesmenu.shgenerated/.config/waypaper/config.inigenerated/.config/waypaper/config.inigenerated/.config/wofi/configgenerated/.config/wofi/style.cssgenerated/.config/zed/settings.jsongenerated/.config/zsh/.zshrcgenerated/.config/emacs/early-init.elgenerated/.config/emacs/init.elgenerated/.config/hypr/animations.confgenerated/.config/hypr/behaviour.confgenerated/.config/hypr/bindings.confgenerated/.config/hypr/exec-once.confgenerated/.config/hypr/hypridle.confgenerated/.config/hypr/hyprland.confgenerated/.config/hypr/hyprlock.confgenerated/.config/hypr/layer-rules.confgenerated/.config/hypr/layout.confgenerated/.config/hypr/monitor-rules.confgenerated/.config/hypr/theming.confgenerated/.config/hypr/window-rules.confgenerated/.config/hypr/workspace-rules.confgenerated/.config/quickshell/media/shell.qmlgenerated/.config/quickshell/powermenu/shell.qmlgenerated/.config/scripts/media.shgenerated/.config/scripts/layout-selector.shgenerated/.config/scripts/hypr-autocolwidth.shgenerated/.config/scripts/power.shgenerated/.config/scripts/update.shgenerated/.config/shared/Colors.cssgenerated/.config/starship.tomlgenerated/.config/stylix/stylix.confgenerated/.config/stylix/palette.jsongenerated/.config/stylix/palette.htmlgenerated/.config/waybar/configgenerated/.config/waybar/style-dark.cssgenerated/.config/scripts/bluetooth-status.shgenerated/.config/scripts/hypr-workspaces.shgenerated/.config/scripts/hypr-workspacesmenu.shgenerated/.config/waypaper/config.inigenerated/.config/waypaper/config.inigenerated/.config/wofi/configgenerated/.config/wofi/style.cssgenerated/.config/zed/settings.jsongenerated/.config/zsh/.zshrcIntroduction The Assets Folder @@ -340,25 +342,25 @@
Droidnix is a modular, declarative NixOS + Home Manager configuration system. with configurations managed via Emacs Org and Nix Flakes. The project is designed for reproducibility, maintainability, and cross-machine compatibility.
This project uses a modular NixOS configuration with Hyprland support, designed for literate programming and cross-device reusability. The Droidnix repository is organized into two main parts: @@ -371,9 +373,9 @@ The Droidnix repository is organized into two main parts:
flake.nix is the entry point and imports:
The generated/ directory contains all generated configurations, divided into three main groups: system, hyprland, and mangowc.
./setup_droid.generated/ directory contains all generated configurations, div
The .assets/ folder contains all static files, such as configs, scripts, and themes. These files are not generated and can be edited directly.
generated/assets/2_b_installed.confgenerated/assets/2_b_installed.confThis is a list of additional apps to install
@@ -494,9 +496,9 @@ com.todoist.Todoist This section contains the Org blocks for tangling Nix code into the generated folders.generated/flake.nixgenerated/flake.nixThe Nix flake definition for Droidnix.
@@ -570,9 +572,9 @@ The Nix flake definition for Droidnix.generated/modules/traveldroid/system/Colors.nixgenerated/modules/traveldroid/system/Colors.nixSetting the colors for Droidnix.
@@ -656,9 +658,9 @@ ingenerated/hosts/traveldroid/boot.nixgenerated/hosts/traveldroid/boot.nix{ config, pkgs, lib, flakeRoot, ... }:
@@ -704,9 +706,9 @@ in
generated/hosts/traveldroid/hardware-configuration.nixgenerated/hosts/traveldroid/hardware-configuration.nixgenerated/hosts/traveldroid/host.nixgenerated/hosts/traveldroid/host.nix{ lib, config, pkgs, flakeRoot, import-tree, home-manager, ... }:
@@ -825,13 +827,13 @@ in
generated/modules/traveldroid/apps/2_b_installed.nixgenerated/modules/traveldroid/apps/2_b_installed.nixThis installs a list of apps
@@ -939,9 +941,9 @@ in {generated/modules/traveldroid/apps/emacs/emacs.nixgenerated/modules/traveldroid/apps/emacs/emacs.nixThis installs emacs
@@ -1037,9 +1039,9 @@ ingenerated/modules/traveldroid/apps/flameshot.nixgenerated/modules/traveldroid/apps/flameshot.nixThis is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
@@ -1078,9 +1080,9 @@ ingenerated/modules/traveldroid/apps/kitty.nixgenerated/modules/traveldroid/apps/kitty.nixThis file sets up Kitty terminal
@@ -1138,9 +1140,9 @@ ingenerated/modules/traveldroid/apps/starship.nixgenerated/modules/traveldroid/apps/starship.nixThis file sets up starship prompt
@@ -1179,9 +1181,9 @@ ingenerated/modules/traveldroid/apps/thunar.nixgenerated/modules/traveldroid/apps/thunar.nixThis is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
@@ -1222,9 +1224,9 @@ ingenerated/modules/traveldroid/apps/wofi.nixgenerated/modules/traveldroid/apps/wofi.nixThis is the install for Wofi, the launcher
@@ -1257,9 +1259,9 @@ ingenerated/modules/traveldroid/apps/zenbrowser.nixgenerated/modules/traveldroid/apps/zenbrowser.nixThis installs zen browser
@@ -1279,9 +1281,9 @@ ingenerated/modules/traveldroid/apps/zsh.nixgenerated/modules/traveldroid/apps/zsh.nixThis sets up the zsh in the terminal
@@ -1344,13 +1346,13 @@ ingenerated/modules/traveldroid/desktop/fonts.nixgenerated/modules/traveldroid/desktop/fonts.nixThis file installs and configures fonts
@@ -1368,9 +1370,9 @@ This file installs and configures fontsgenerated/modules/traveldroid/desktop/gtk.nixgenerated/modules/traveldroid/desktop/gtk.nixSetting up GTK
@@ -1396,9 +1398,9 @@ ingenerated/modules/traveldroid/desktop/hyprland.nixgenerated/modules/traveldroid/desktop/hyprland.nixSetting up Hyprland
@@ -1444,9 +1446,9 @@ ingenerated/modules/traveldroid/desktop/stylix.nixgenerated/modules/traveldroid/desktop/stylix.nix{ lib, config, pkgs, flakeRoot, stylix, ... }:
@@ -1533,9 +1535,9 @@ in
generated/modules/traveldroid/desktop/wallpaper.nixgenerated/modules/traveldroid/desktop/wallpaper.nixSetting up wallpaper engine + wallpaper gui
@@ -1634,9 +1636,9 @@ ingenerated/modules/traveldroid/desktop/waybar.nixgenerated/modules/traveldroid/desktop/waybar.nixThis file installs and configures waybar
@@ -1703,9 +1705,9 @@ ingenerated/modules/traveldroid/desktop/wayland.nixgenerated/modules/traveldroid/desktop/wayland.nix{ lib, config, pkgs, ... }:
@@ -1735,9 +1737,9 @@ in
generated/modules/traveldroid/desktop/xdg.nixgenerated/modules/traveldroid/desktop/xdg.nixThis sets the XDG implementation
@@ -1791,13 +1793,13 @@ ingenerated/modules/traveldroid/system/audio.nixgenerated/modules/traveldroid/system/audio.nix{ lib, config, pkgs, ... }:
@@ -1815,9 +1817,9 @@ in
generated/modules/traveldroid/system/bluetooth.nixgenerated/modules/traveldroid/system/bluetooth.nix{ lib, config, pkgs, home-manager, ... }:
@@ -1838,9 +1840,9 @@ in
generated/modules/traveldroid/system/copy_scripts.nixgenerated/modules/traveldroid/system/copy_scripts.nix{ lib, config, pkgs, flakeRoot, ... }:
let
@@ -1878,9 +1880,9 @@ in
generated/modules/traveldroid/system/dbus.nixgenerated/modules/traveldroid/system/dbus.nixThis sets the dbus implementation
@@ -1907,9 +1909,9 @@ This sets the dbus implementationgenerated/modules/traveldroid/system/gnome-keyring.nixgenerated/modules/traveldroid/system/gnome-keyring.nixThis sets the dbus implementation
@@ -1957,9 +1959,9 @@ This sets the dbus implementationgenerated/modules/traveldroid/system/login-tuigreet.nixgenerated/modules/traveldroid/system/login-tuigreet.nixThis sets up tuigreeter which is not fancy but imo fits the aesthetic I am aiming for
@@ -2013,9 +2015,9 @@ ingenerated/modules/traveldroid/system/networking.nixgenerated/modules/traveldroid/system/networking.nixThis sets the networking.
@@ -2080,9 +2082,9 @@ This sets the networking.generated/modules/traveldroid/system/nix.nixgenerated/modules/traveldroid/system/nix.nix{ lib, config, ... }:
@@ -2098,9 +2100,9 @@ This sets the networking.
generated/modules/traveldroid/system/printing.nixgenerated/modules/traveldroid/system/printing.nixThis sets the dbus implementation
@@ -2124,9 +2126,9 @@ This sets the dbus implementationgenerated/modules/traveldroid/system/quickshell.nixgenerated/modules/traveldroid/system/quickshell.nixThis sets the dbus implementation
@@ -2179,13 +2181,13 @@ ingenerated/users/generated/users/This is the default user, just search and replace henrov another name if you want to change
@@ -2247,9 +2249,9 @@ ingenerated/.config/emacs/early-init.elgenerated/.config/emacs/early-init.elThis contaions emacs
@@ -2350,9 +2352,9 @@ package-archive-priorities '(("gnu" . 99)generated/.config/emacs/init.elgenerated/.config/emacs/init.elThis contaions emacs
@@ -2762,9 +2764,9 @@ the top of the file."generated/.config/hypr/animations.confgenerated/.config/hypr/animations.confThese are config files for .config/hypr
@@ -2785,9 +2787,9 @@ animations {generated/.config/hypr/behaviour.confgenerated/.config/hypr/behaviour.confThese are config files for .config/hypr
@@ -2801,9 +2803,9 @@ These are config files for .config/hyprgenerated/.config/hypr/bindings.confgenerated/.config/hypr/bindings.confThese are config files for .config/hypr
@@ -2967,9 +2969,9 @@ bind = $mainMod, U, exec, kitty -e bash -lc "$HOME/.config/scripts/update.sh"generated/.config/hypr/exec-once.confgenerated/.config/hypr/exec-once.confThese are config files for .config/hypr
@@ -2989,9 +2991,9 @@ exec-once = ~/.config/scripts/hypr-autocolwidth.shgenerated/.config/hypr/hypridle.confgenerated/.config/hypr/hypridle.confThese are config files for .config/hypr
@@ -3016,9 +3018,9 @@ listener {generated/.config/hypr/hyprland.confgenerated/.config/hypr/hyprland.confThese are config files for .config/hypr
@@ -3064,9 +3066,9 @@ misc {generated/.config/hypr/hyprlock.confgenerated/.config/hypr/hyprlock.confThese are config files for .config/hypr
@@ -3107,9 +3109,9 @@ label {generated/.config/hypr/layer-rules.confgenerated/.config/hypr/layer-rules.confThese are config files for .config/hypr
@@ -3124,9 +3126,9 @@ layerrule = blur on, ignore_alpha 1, match:namespace swaync-notification-windowgenerated/.config/hypr/layout.confgenerated/.config/hypr/layout.confThese are config files for .config/hypr
@@ -3141,9 +3143,9 @@ scrolling {generated/.config/hypr/monitor-rules.confgenerated/.config/hypr/monitor-rules.confThese are config files for .config/hypr
@@ -3154,9 +3156,9 @@ monitor=DP-1,3840x1080@144,1920x0,1generated/.config/hypr/theming.confgenerated/.config/hypr/theming.confThese are config files for .config/hypr
@@ -3206,9 +3208,9 @@ decoration {generated/.config/hypr/window-rules.confgenerated/.config/hypr/window-rules.confThese are config files for .config/hypr
@@ -3242,6 +3244,7 @@ windowrule { size = 900 700 } +#Quickshell powermenu windowrule { name = quickshell-powermenu match:title = quickshell-powermenu @@ -3251,13 +3254,22 @@ windowrule { pin = on } +#Quickshell media menu +windowrule { + name = quickshell-media + match:title = quickshell-media + float = on + move = cursor -50% 0 + pin = on +} +generated/.config/hypr/workspace-rules.confgenerated/.config/hypr/workspace-rules.confThese are config files for .config/hypr
@@ -3282,11 +3294,322 @@ workspace = 10generated/.config/quickshell/powermenu/shell.qmlgenerated/.config/quickshell/media/shell.qml-This sets up the zsh in the terminal +offers a adio widget +
+// --- 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 baseAlpha: Qt.rgba(30/255, 30/255, 46/255, 0.95)
+ readonly property color base: "#1e1e2e"
+ readonly property color surface0: "#313244"
+ readonly property color surface1: "#45475a"
+ readonly property color surface2: "#585b70"
+ readonly property color text: "#cdd6f4"
+ readonly property color subtext0: "#a6adc8"
+ readonly property color subtext1: "#bac2de"
+ readonly property color blue: "#89b4fa"
+ readonly property color green: "#a6e3a1"
+ readonly property color teal: "#94e2d5"
+ readonly property color red: "#f38ba8"
+ readonly property color mauve: "#cba6f7"
+ readonly property color peach: "#fab387"
+ readonly property color lavender: "#b4befe"
+ }
+
+ // State
+ QtObject {
+ id: media
+ property string artist: ""
+ property string title: ""
+ property string album: ""
+ property string artUrl: ""
+ property string status: ""
+ property string device: ""
+ property real progress: 0.0
+ property real duration: 0.0
+ property real position: 0.0
+ }
+
+ // Poll playerctl every second
+ Timer {
+ interval: 1000
+ running: true
+ repeat: true
+ onTriggered: {
+ artistProc.running = true
+ titleProc.running = true
+ albumProc.running = true
+ artProc.running = true
+ statusProc.running = true
+ positionProc.running = true
+ lengthProc.running = true
+ }
+ }
+
+ Process {
+ id: artistProc
+ command: ["playerctl", "metadata", "artist"]
+ stdout: StdioCollector { onStreamFinished: media.artist = text.trim() }
+ }
+ Process {
+ id: titleProc
+ command: ["playerctl", "metadata", "title"]
+ stdout: StdioCollector { onStreamFinished: media.title = text.trim() }
+ }
+ Process {
+ id: albumProc
+ command: ["playerctl", "metadata", "album"]
+ stdout: StdioCollector { onStreamFinished: media.album = text.trim() }
+ }
+ Process {
+ id: artProc
+ command: ["playerctl", "metadata", "mpris:artUrl"]
+ stdout: StdioCollector { onStreamFinished: media.artUrl = text.trim() }
+ }
+ Process {
+ id: statusProc
+ command: ["playerctl", "status"]
+ stdout: StdioCollector { onStreamFinished: media.status = text.trim() }
+ }
+ Process {
+ id: positionProc
+ command: ["playerctl", "position"]
+ stdout: StdioCollector {
+ onStreamFinished: {
+ media.position = parseFloat(text.trim()) || 0
+ if (media.duration > 0)
+ media.progress = media.position / media.duration
+ }
+ }
+ }
+ Process {
+ id: lengthProc
+ command: ["playerctl", "metadata", "mpris:length"]
+ stdout: StdioCollector {
+ onStreamFinished: {
+ media.duration = (parseFloat(text.trim()) || 0) / 1000000
+ }
+ }
+ }
+
+ // Playback controls
+ Process { id: prevProc; command: ["playerctl", "previous"] }
+ Process { id: playProc; command: ["playerctl", "play-pause"] }
+ Process { id: nextProc; command: ["playerctl", "next"] }
+
+ FloatingWindow {
+ id: root
+ title: "quickshell-media"
+ visible: true
+ width: 300
+ height: 420
+ color: "transparent"
+
+ Shortcut {
+ sequence: "Escape"
+ onActivated: Qt.quit()
+ }
+
+ // Gradient border
+ 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 {
+ anchors {
+ fill: parent
+ margins: 16
+ }
+ spacing: 12
+
+ // Album art
+ Rectangle {
+ Layout.fillWidth: true
+ Layout.preferredHeight: 200
+ radius: 12
+ color: colors.surface0
+ clip: true
+
+ Image {
+ anchors.fill: parent
+ source: media.artUrl
+ fillMode: Image.PreserveAspectCrop
+ visible: media.artUrl !== ""
+ }
+
+ // Placeholder when no art
+ Text {
+ anchors.centerIn: parent
+ text: ""
+ font.pixelSize: 48
+ color: colors.surface2
+ visible: media.artUrl === ""
+ }
+ }
+
+ // Artist
+ Text {
+ Layout.fillWidth: true
+ text: media.artist || "Unknown artist"
+ color: colors.subtext1
+ font.pixelSize: 12
+ elide: Text.ElideRight
+ }
+
+ // Title
+ Text {
+ Layout.fillWidth: true
+ text: media.title || "Nothing playing"
+ color: colors.text
+ font.pixelSize: 14
+ font.bold: true
+ elide: Text.ElideRight
+ }
+
+ // Album
+ Text {
+ Layout.fillWidth: true
+ text: media.album
+ color: colors.subtext0
+ font.pixelSize: 11
+ elide: Text.ElideRight
+ visible: media.album !== ""
+ }
+
+ // Device (Spotify)
+ Text {
+ Layout.fillWidth: true
+ text: " " + media.device
+ color: colors.green
+ font.pixelSize: 11
+ visible: media.device !== ""
+ }
+
+ // Progress bar
+ Rectangle {
+ Layout.fillWidth: true
+ height: 4
+ radius: 2
+ color: colors.surface1
+
+ Rectangle {
+ width: parent.width * media.progress
+ height: parent.height
+ radius: parent.radius
+ gradient: Gradient {
+ orientation: Gradient.Horizontal
+ GradientStop { position: 0.0; color: colors.blue }
+ GradientStop { position: 1.0; color: colors.green }
+ }
+ }
+ }
+
+ // Time
+ RowLayout {
+ Layout.fillWidth: true
+
+ Text {
+ text: {
+ var m = Math.floor(media.position / 60)
+ var s = Math.floor(media.position % 60)
+ return m + ":" + (s < 10 ? "0" + s : s)
+ }
+ color: colors.subtext0
+ font.pixelSize: 11
+ }
+
+ Item { Layout.fillWidth: true }
+
+ Text {
+ text: {
+ var m = Math.floor(media.duration / 60)
+ var s = Math.floor(media.duration % 60)
+ return m + ":" + (s < 10 ? "0" + s : s)
+ }
+ color: colors.subtext0
+ font.pixelSize: 11
+ }
+ }
+
+ // Playback controls
+ RowLayout {
+ Layout.fillWidth: true
+ Layout.alignment: Qt.AlignHCenter
+ spacing: 24
+
+ Text {
+ text: ""
+ font.pixelSize: 22
+ color: prevHover.containsMouse ? colors.blue : colors.text
+ MouseArea {
+ id: prevHover
+ anchors.fill: parent
+ hoverEnabled: true
+ onClicked: prevProc.running = true
+ }
+ }
+
+ Text {
+ text: media.status === "Playing" ? "" : ""
+ font.pixelSize: 28
+ color: playHover.containsMouse ? colors.green : colors.text
+ MouseArea {
+ id: playHover
+ anchors.fill: parent
+ hoverEnabled: true
+ onClicked: playProc.running = true
+ }
+ }
+
+ Text {
+ text: ""
+ font.pixelSize: 22
+ color: nextHover.containsMouse ? colors.blue : colors.text
+ MouseArea {
+ id: nextHover
+ anchors.fill: parent
+ hoverEnabled: true
+ onClicked: nextProc.running = true
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+generated/.config/quickshell/powermenu/shell.qml+Provides a powermenu
import Quickshell
@@ -3365,12 +3688,12 @@ ShellRoot {
Repeater {
model: [
- { label: " Lock", cmd: ["loginctl", "lock-session"] },
- { label: " Shutdown", cmd: ["systemctl", "poweroff"] },
- { label: " Reboot", cmd: ["systemctl", "reboot"] },
- { label: " Logout", cmd: ["bash", "-c", "loginctl terminate-session $XDG_SESSION_ID"] },
- { label: " Hibernate", cmd: ["systemctl", "hibernate"] },
- { label: " Suspend", cmd: ["systemctl", "suspend"] },
+ { label: " Lock", cmd: ["loginctl", "lock-session"] },
+ { label: " Shutdown", cmd: ["systemctl", "poweroff"] },
+ { label: " Reboot", cmd: ["systemctl", "reboot"] },
+ { label: " Logout", cmd: ["bash", "-c", "loginctl terminate-session $XDG_SESSION_ID"] },
+ { label: " Hibernate", cmd: ["systemctl", "hibernate"] },
+ { label: " Suspend", cmd: ["systemctl", "suspend"] },
]
delegate: Rectangle {
@@ -3428,9 +3751,81 @@ ShellRoot {
generated/.config/scripts/layout-selector.shgenerated/.config/scripts/media.sh+Providing an media +
+#!/usr/bin/env bash
+player=$(playerctl -l 2>/dev/null | head -n1)
+
+if [ -z "$player" ]; then
+ jq -c -n '{text: "", tooltip: "", class: "inactive"}'
+ exit 0
+fi
+
+status=$(playerctl --player="$player" status 2>/dev/null)
+
+if [ "$status" != "Playing" ] && [ "$status" != "Paused" ]; then
+ jq -c -n '{text: "", tooltip: "", class: "inactive"}'
+ exit 0
+fi
+
+artist=$(playerctl --player="$player" metadata artist 2>/dev/null)
+title=$(playerctl --player="$player" metadata title 2>/dev/null)
+album=$(playerctl --player="$player" metadata album 2>/dev/null)
+art=$(playerctl --player="$player" metadata mpris:artUrl 2>/dev/null)
+length=$(playerctl --player="$player" metadata mpris:length 2>/dev/null)
+position=$(playerctl --player="$player" position 2>/dev/null)
+
+# Progress percentage
+if [ -n "$length" ] && [ "$length" -gt 0 ] 2>/dev/null; then
+ progress=$(echo "scale=0; $position * 1000000 / $length * 100 / 100" | bc)
+else
+ progress=0
+fi
+
+# Spotify device
+device=""
+if [[ "$player" == *"spotify"* ]]; then
+ device=$(playerctl --player="$player" metadata xesam:url 2>/dev/null | grep -o 'device=[^&]*' | cut -d= -f2)
+fi
+
+# Ticker text — truncate if long
+text="${artist} — ${title}"
+if [ ${#text} -gt 40 ]; then
+ text="${text:0:37}..."
+fi
+
+# Icon
+if [ "$status" = "Paused" ]; then
+ icon="⏸ "
+else
+ icon="▶ "
+fi
+
+# Build tooltip
+tooltip="${artist}\n${title}\n${album}"
+if [ -n "$device" ]; then
+ tooltip="${tooltip}\n ${device}"
+fi
+tooltip="${tooltip}\n$(printf '%.0f' "$progress")%"
+
+jq -c -n \
+ --arg text "${icon}${text}" \
+ --arg tooltip "$tooltip" \
+ --arg class "$player" \
+ --arg art "$art" \
+ '{text: $text, tooltip: $tooltip, class: $class, alt: $art}'
+
+generated/.config/scripts/layout-selector.shChoose your layout
@@ -3472,9 +3867,9 @@ hyprctl dispatch oSD "Layout: $LAYOUT_NAME" 2000generated/.config/scripts/hypr-autocolwidth.shgenerated/.config/scripts/hypr-autocolwidth.shThese are config files for .config/scripts
@@ -3528,9 +3923,9 @@ donegenerated/.config/scripts/power.shgenerated/.config/scripts/power.shA file containing color variables
@@ -3546,12 +3941,12 @@ A file containing color variables main() { local list=( - "Lock" - "Shutdown" - "Reboot" - "Logout" - "Hibernate" - "Suspend" + " Lock" + " Shutdown" + " Reboot" + " Logout" + " Hibernate" + " Suspend" ) local options=( @@ -3586,9 +3981,9 @@ maingenerated/.config/scripts/update.shgenerated/.config/scripts/update.shA file containing color variables
@@ -3607,9 +4002,9 @@ flatpak update -ygenerated/.config/shared/Colors.cssgenerated/.config/shared/Colors.cssA file containing color variables
@@ -3649,9 +4044,9 @@ A file containing color variablesgenerated/.config/starship.tomlgenerated/.config/starship.tomlThese are config files for Starship
@@ -3939,9 +4334,9 @@ crust = "#181926"generated/.config/stylix/stylix.confgenerated/.config/stylix/stylix.confThese are config files for .config/stylix
@@ -3978,9 +4373,9 @@ icons = {generated/.config/stylix/palette.jsongenerated/.config/stylix/palette.jsonThese are config files for .config/stylix
@@ -4010,9 +4405,9 @@ These are config files for .config/stylixgenerated/.config/stylix/palette.htmlgenerated/.config/stylix/palette.htmlThese are config files for .config/stylix
@@ -4090,9 +4485,9 @@ These are config files for .config/stylixgenerated/.config/waybar/configgenerated/.config/waybar/configThese are config files for waybar
@@ -4183,6 +4578,7 @@ These are config files for waybar "group/audio": { "orientation": "horizontal", "modules": [ + "custom/media", "pulseaudio", "pulseaudio/slider", ] @@ -4207,6 +4603,16 @@ These are config files for waybar "tooltip": true }, +"custom/media": { + "exec": "~/.config/scripts/media.sh", + "interval": 2, + "return-type": "json", + "on-click": "qs -c media", + "max-length": 40, + "scroll-step": 1, + "tooltip": true +} + "custom/bluetooth": { "exec": "~/.config/scripts/bluetooth-status.sh", "interval": 5, @@ -4345,9 +4751,9 @@ These are config files for waybargenerated/.config/waybar/style-dark.cssgenerated/.config/waybar/style-dark.cssThis file contains all css for waybar
@@ -4560,9 +4966,9 @@ label#custom-windows:not(.active) {generated/.config/scripts/bluetooth-status.shgenerated/.config/scripts/bluetooth-status.shThese are config files for waybar
@@ -4587,9 +4993,9 @@ printf '{"text": "%s", "tooltip": "%s"}\n' "$icon" "$tooltip"generated/.config/scripts/hypr-workspaces.shgenerated/.config/scripts/hypr-workspaces.shThese are config files for waybar
@@ -4631,9 +5037,9 @@ jq -c -n \generated/.config/scripts/hypr-workspacesmenu.shgenerated/.config/scripts/hypr-workspacesmenu.shThese are config files for waybar
@@ -4649,9 +5055,9 @@ hyprctl dispatch focuswindow address:$addrgenerated/.config/waypaper/config.inigenerated/.config/waypaper/config.iniThese are config files for waypaper
@@ -4688,9 +5094,9 @@ keybindings = ~/.config/waypaper/keybindings.inigenerated/.config/waypaper/config.inigenerated/.config/waypaper/config.iniThese are config files for .config/waypaper
@@ -4726,9 +5132,9 @@ keybindings = ~/.config/waypaper/keybindings.inigenerated/.config/wofi/configgenerated/.config/wofi/configThese are config files for .config/wofi
@@ -4777,9 +5183,9 @@ prompt = > ...generated/.config/wofi/style.cssgenerated/.config/wofi/style.cssThese are config files for .config/wofi
@@ -4874,9 +5280,9 @@ These are config files for .config/wofigenerated/.config/zed/settings.jsongenerated/.config/zed/settings.jsonThese are config files for Zed editor
@@ -4912,9 +5318,9 @@ These are config files for Zed editorgenerated/.config/zsh/.zshrcgenerated/.config/zsh/.zshrcThis sets up the zsh in the terminal
@@ -4939,7 +5345,7 @@ fi