Compare commits
8 commits
Author | SHA1 | Date | |
---|---|---|---|
|
b500fa26a1 | ||
|
e9f8b03cd7 | ||
|
bdd0854f2b | ||
|
3017d91b97 | ||
|
aae66c3b70 | ||
|
54b0942de6 | ||
|
7b8e7c3b27 | ||
|
d2195ba06f |
|
@ -1,19 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -e
|
|
||||||
if [[ ! -d "/home/willifan/Desktop/desktop-utils" ]]; then
|
|
||||||
echo "Cannot find source directory; Did you move it?"
|
|
||||||
echo "(Looking for "/home/willifan/Desktop/desktop-utils")"
|
|
||||||
echo 'Cannot force reload with this script - use "direnv reload" manually and then try again'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# rebuild the cache forcefully
|
|
||||||
_nix_direnv_force_reload=1 direnv exec "/home/willifan/Desktop/desktop-utils" true
|
|
||||||
|
|
||||||
# Update the mtime for .envrc.
|
|
||||||
# This will cause direnv to reload again - but without re-building.
|
|
||||||
touch "/home/willifan/Desktop/desktop-utils/.envrc"
|
|
||||||
|
|
||||||
# Also update the timestamp of whatever profile_rc we have.
|
|
||||||
# This makes sure that we know we are up to date.
|
|
||||||
touch -r "/home/willifan/Desktop/desktop-utils/.envrc" "/home/willifan/Desktop/desktop-utils/.direnv"/*.rc
|
|
|
@ -1 +0,0 @@
|
||||||
/nix/store/pqsj954jryyfldxmv0fgag0ahmyrklbq-nix-shell-env
|
|
5
.gitignore
vendored
|
@ -1,5 +1,6 @@
|
||||||
result
|
/result
|
||||||
.vscode/
|
/.vscode
|
||||||
|
/.direnv
|
||||||
|
|
||||||
# Added by cargo
|
# Added by cargo
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "ewwbar"
|
name = "ewwbar"
|
||||||
version = "0.1.0"
|
version = "0.1.2"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|
20
default.nix
|
@ -1,10 +1,10 @@
|
||||||
{ pkgs ? import <nixpkgs> { } }:
|
{ pkgs ? import <nixpkgs> { } }:
|
||||||
|
|
||||||
pkgs.rustPlatform.buildRustPackage {
|
pkgs.rustPlatform.buildRustPackage {
|
||||||
pname = "desktop-utils";
|
pname = "ewwbar";
|
||||||
version = "1.0.0";
|
version = "0.1.2";
|
||||||
|
|
||||||
src = builtins.path { path = ./.; name = "desktop-utils"; };
|
src = builtins.path { path = ./.; name = "ewwbar"; };
|
||||||
|
|
||||||
cargoLock = {
|
cargoLock = {
|
||||||
lockFile = ./Cargo.lock;
|
lockFile = ./Cargo.lock;
|
||||||
|
@ -16,18 +16,20 @@ pkgs.rustPlatform.buildRustPackage {
|
||||||
|
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
pkgs.libxkbcommon
|
pkgs.libxkbcommon
|
||||||
|
pkgs.eww
|
||||||
];
|
];
|
||||||
|
|
||||||
# installPhase = ''
|
postInstall = ''
|
||||||
# mkdir -p $out/bin
|
mkdir -p $out/bin
|
||||||
# cp clients $out/bin/clients
|
cp -r $src/eww $out/bin/eww
|
||||||
#'';
|
'';
|
||||||
|
|
||||||
meta = with pkgs.lib; {
|
meta = with pkgs.lib; {
|
||||||
description = "utils for my desktop";
|
description = "Top bar using ElKowars Wacky Widgets";
|
||||||
homepage = " git.huwe.mooo.com/willifan/desktop-utils";
|
homepage = " git.huwe.mooo.com/willifan/desktop-utils";
|
||||||
license = licenses.gpl3;
|
license = licenses.gpl3;
|
||||||
platforms = platforms.unix;
|
platforms = platforms.unix;
|
||||||
};
|
mainProgram = "ewwbar";
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
532
eww/eww.yuck
|
@ -12,79 +12,79 @@
|
||||||
|
|
||||||
|
|
||||||
(defwidget normalWorkspaces [monitor]
|
(defwidget normalWorkspaces [monitor]
|
||||||
(box
|
(box
|
||||||
:space-evenly false
|
:space-evenly false
|
||||||
:spacing 3
|
:spacing 3
|
||||||
:valign "center"
|
:valign "center"
|
||||||
:height 20
|
:height 20
|
||||||
(for workspace in workspaces
|
(for workspace in workspaces
|
||||||
(workspace
|
(workspace
|
||||||
:activeOn {workspace.normal.activeOn}
|
:activeOn {workspace.normal.activeOn}
|
||||||
:occupied {workspace.normal.occupied}
|
:occupied {workspace.normal.occupied}
|
||||||
:id {workspace.normal.id}
|
:id {workspace.normal.id}
|
||||||
:cmd {workspace.normal.id}
|
:cmd {workspace.normal.id}
|
||||||
:icon {workspace.normal.icon}
|
:icon {workspace.normal.icon}
|
||||||
:monitor {monitor}))))
|
:monitor {monitor}))))
|
||||||
|
|
||||||
|
|
||||||
;; right
|
;; right
|
||||||
|
|
||||||
|
|
||||||
(defwidget cpu []
|
(defwidget cpu []
|
||||||
(icon
|
(icon
|
||||||
:widgetclass "cpu"
|
:widgetclass "cpu"
|
||||||
:hover "${round(EWW_CPU.avg, 1)}%"
|
:hover "${round(EWW_CPU.avg, 1)}%"
|
||||||
:percentage {round(EWW_CPU.avg, 1)}
|
:percentage {round(EWW_CPU.avg, 1)}
|
||||||
:image "../images/cpu.png"))
|
:image "./images/cpu.png"))
|
||||||
|
|
||||||
(defwidget ram []
|
(defwidget ram []
|
||||||
(icon
|
(icon
|
||||||
:widgetclass "ram"
|
:widgetclass "ram"
|
||||||
:hover "${round(EWW_RAM.used_mem /(1024*1024*1024), 1)} GiB | ${round(EWW_RAM.used_mem_perc, 1)}%"
|
:hover "${round(EWW_RAM.used_mem /(1024*1024*1024), 1)} GiB | ${round(EWW_RAM.used_mem_perc, 1)}%"
|
||||||
:percentage {round(EWW_RAM.used_mem_perc, 1)}
|
:percentage {round(EWW_RAM.used_mem_perc, 1)}
|
||||||
:image "../images/ram.png"))
|
:image "./images/ram.png"))
|
||||||
|
|
||||||
(defwidget audio []
|
(defwidget audio []
|
||||||
(icon
|
(icon
|
||||||
:widgetclass {volume.muted == 1 ? "muted" : "volume"}
|
:widgetclass {volume.muted == 1 ? "muted" : "volume"}
|
||||||
:hover "${volume.volume}%"
|
:hover "${volume.volume}%"
|
||||||
:percentage {volume.volume >= 0 && volume.volume <= 100 ? volume.volume : 0}
|
:percentage {volume.volume >= 0 && volume.volume <= 100 ? volume.volume : 0}
|
||||||
:image {volume.muted == 1 ? "../images/volumeMuted.png" : "../images/volume.png"}))
|
:image {volume.muted == 1 ? "./images/volumeMuted.png" : "./images/volume.png"}))
|
||||||
|
|
||||||
(defwidget brightness []
|
(defwidget brightness []
|
||||||
(icon
|
(icon
|
||||||
:widgetclass "brightness"
|
:widgetclass "brightness"
|
||||||
:hover "${brightnessValue / 960}%"
|
:hover "${brightnessValue / 960}%"
|
||||||
:percentage {brightnessValue / 960}
|
:percentage {brightnessValue / 960}
|
||||||
:image "../images/brightness.png"))
|
:image "./images/brightness.png"))
|
||||||
|
|
||||||
(defwidget network []
|
(defwidget network []
|
||||||
(icon
|
(icon
|
||||||
:widgetclass "network"
|
:widgetclass "network"
|
||||||
:hover {network.name}
|
:hover {network.name}
|
||||||
:percentage "100"
|
:percentage "100"
|
||||||
:image "../images/${network.image}.png"))
|
:image "./images/${network.image}.png"))
|
||||||
|
|
||||||
(defwidget bluetooth []
|
(defwidget bluetooth []
|
||||||
(icon
|
(icon
|
||||||
:widgetclass "bluetooth"
|
:widgetclass "bluetooth"
|
||||||
:hover {bluetooth.name}
|
:hover {bluetooth.name}
|
||||||
:percentage {bluetooth.battery}
|
:percentage {bluetooth.battery}
|
||||||
:image "../images/bluetooth.png"))
|
:image "./images/bluetooth.png"))
|
||||||
|
|
||||||
(defwidget battery []
|
(defwidget battery []
|
||||||
(icon
|
(icon
|
||||||
:widgetclass {EWW_BATTERY.BAT1.status == "Charging" ? "battery" : EWW_BATTERY.total_avg > 25 ? "battery" : "batteryLow"}
|
:widgetclass {EWW_BATTERY.BAT1.status == "Charging" ? "battery" : EWW_BATTERY.total_avg > 25 ? "battery" : "batteryLow"}
|
||||||
:hover "${round(EWW_BATTERY.total_avg, 1)}%"
|
:hover "${round(EWW_BATTERY.total_avg, 1)}%"
|
||||||
:percentage {EWW_BATTERY.total_avg <= 90 ? round(EWW_BATTERY.total_avg, 1)/0.9 : 100}
|
:percentage {EWW_BATTERY.total_avg <= 90 ? round(EWW_BATTERY.total_avg, 1)/0.9 : 100}
|
||||||
:image {EWW_BATTERY.BAT1.status == "Charging" ? "../images/charging.png" : EWW_BATTERY.total_avg > 25 ? "../images/battery.png" : "../images/batteryLow.png"}))
|
:image {EWW_BATTERY.BAT1.status == "Charging" ? "./images/charging.png" : EWW_BATTERY.total_avg > 25 ? "./images/battery.png" : "./images/batteryLow.png"}))
|
||||||
|
|
||||||
(defwidget power []
|
(defwidget power []
|
||||||
(icon
|
(icon
|
||||||
:widgetclass "power"
|
:widgetclass "power"
|
||||||
:hover "placeholder"
|
:hover "placeholder"
|
||||||
:percentage "0"
|
:percentage "0"
|
||||||
:image "../images/power.png"))
|
:image "./images/power.png"))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -92,243 +92,243 @@
|
||||||
;; Widget blocks
|
;; Widget blocks
|
||||||
|
|
||||||
(defwidget media []
|
(defwidget media []
|
||||||
(box
|
(box
|
||||||
:class "smallBox"
|
:class "smallBox"
|
||||||
:height 20
|
:height 20
|
||||||
:valign "center"
|
:valign "center"
|
||||||
:spacing 1
|
:spacing 1
|
||||||
:space-evenly false
|
:space-evenly false
|
||||||
(space)
|
(space)
|
||||||
(label
|
(label
|
||||||
:text "${media.title} - ${media.artist}"
|
:text "${media.title} - ${media.artist}"
|
||||||
:tooltip "${media.title} - ${media.artist} | ${media.album}"
|
:tooltip "${media.title} - ${media.artist} | ${media.album}"
|
||||||
:truncate true)
|
:truncate true)
|
||||||
(space)))
|
(space)))
|
||||||
|
|
||||||
(defwidget processing []
|
(defwidget processing []
|
||||||
(eventbox
|
(eventbox
|
||||||
:onclick 'hyprctl dispatch exec "[float; pin; size 40% 40%; move 100%-41% 40] kitty bpytop -b proc"'
|
:onclick 'hyprctl dispatch exec "[float; pin; size 40% 40%; move 100%-41% 40] kitty bpytop -b proc"'
|
||||||
:class "smallBox"
|
:class "smallBox"
|
||||||
:halign "end"
|
:halign "end"
|
||||||
:valign "center"
|
:valign "center"
|
||||||
:height 20
|
:height 20
|
||||||
(box
|
(box
|
||||||
:space-evenly false
|
:space-evenly false
|
||||||
:halign "end"
|
:halign "end"
|
||||||
:valign "center"
|
:valign "center"
|
||||||
:height 20
|
:height 20
|
||||||
(smallSpacer)
|
(smallSpacer)
|
||||||
(cpu)
|
(cpu)
|
||||||
(space)
|
(space)
|
||||||
(ram)
|
(ram)
|
||||||
(smallSpacer))))
|
(smallSpacer))))
|
||||||
|
|
||||||
(defwidget controlls []
|
(defwidget controlls []
|
||||||
(eventbox
|
(eventbox
|
||||||
:onclick 'hyprctl dispatch exec "[float; pin; size 40% 40%; move 100%-41% 40] kitty pulsemixer"'
|
:onclick 'hyprctl dispatch exec "[float; pin; size 40% 40%; move 100%-41% 40] kitty pulsemixer"'
|
||||||
:class "smallBox"
|
:class "smallBox"
|
||||||
:halign "end"
|
:halign "end"
|
||||||
:valign "center"
|
:valign "center"
|
||||||
:height 20
|
:height 20
|
||||||
(box
|
(box
|
||||||
:space-evenly false
|
:space-evenly false
|
||||||
:halign "end"
|
:halign "end"
|
||||||
:valign "center"
|
:valign "center"
|
||||||
:height 20
|
:height 20
|
||||||
(smallSpacer)
|
(smallSpacer)
|
||||||
(audio)
|
(audio)
|
||||||
(space)
|
(space)
|
||||||
(brightness)
|
(brightness)
|
||||||
(smallSpacer))))
|
(smallSpacer))))
|
||||||
|
|
||||||
(defwidget wireless []
|
(defwidget wireless []
|
||||||
(eventbox
|
(eventbox
|
||||||
:onclick "`networkmanager_dmenu`"
|
:onclick "`networkmanager_dmenu`"
|
||||||
:class "smallBox"
|
:class "smallBox"
|
||||||
:halign "end"
|
:halign "end"
|
||||||
:valign "center"
|
:valign "center"
|
||||||
:height 20
|
:height 20
|
||||||
(box
|
(box
|
||||||
:space-evenly false
|
:space-evenly false
|
||||||
:halign "end"
|
:halign "end"
|
||||||
:valign "center"
|
:valign "center"
|
||||||
:height 24
|
:height 24
|
||||||
(smallSpacer)
|
(smallSpacer)
|
||||||
(network)
|
(network)
|
||||||
(space)
|
(space)
|
||||||
(bluetooth)
|
(bluetooth)
|
||||||
(smallSpacer))))
|
(smallSpacer))))
|
||||||
|
|
||||||
(defwidget energy []
|
(defwidget energy []
|
||||||
(eventbox
|
(eventbox
|
||||||
:onclick `wlogout -r 25 -c 25 -m 300 &`
|
:onclick `wlogout -r 25 -c 25 -m 300 &`
|
||||||
:class "smallBox"
|
:class "smallBox"
|
||||||
:valign "center"
|
:valign "center"
|
||||||
:height 20
|
:height 20
|
||||||
(box
|
(box
|
||||||
:space-evenly false
|
:space-evenly false
|
||||||
:halign "end"
|
:halign "end"
|
||||||
:valign "center"
|
:valign "center"
|
||||||
:height 20
|
:height 20
|
||||||
(smallSpacer)
|
(smallSpacer)
|
||||||
(battery)
|
(battery)
|
||||||
(space)
|
(space)
|
||||||
(power)
|
(power)
|
||||||
(smallSpacer))))
|
(smallSpacer))))
|
||||||
|
|
||||||
;; Boxes
|
;; Boxes
|
||||||
|
|
||||||
(defwidget timeBox []
|
(defwidget timeBox []
|
||||||
(box
|
(box
|
||||||
:class "barbox"
|
:class "barbox"
|
||||||
:spacing 3
|
:spacing 3
|
||||||
:space-evenly false
|
:space-evenly false
|
||||||
:halign "end"
|
:halign "end"
|
||||||
:valign "center"
|
:valign "center"
|
||||||
:height 30
|
:height 30
|
||||||
(space)
|
(space)
|
||||||
(testtime)
|
(testtime)
|
||||||
(space)))
|
(space)))
|
||||||
|
|
||||||
(defwidget mediaBox []
|
(defwidget mediaBox []
|
||||||
(box
|
(box
|
||||||
:class "barbox"
|
:class "barbox"
|
||||||
:visible {media.status == "Playing" ? true : false}
|
:visible {media.status == "Playing" ? true : false}
|
||||||
:spacing 3
|
:spacing 3
|
||||||
:space-evenly false
|
:space-evenly false
|
||||||
:halign "end"
|
:halign "end"
|
||||||
:valign "center"
|
:valign "center"
|
||||||
:height 30
|
:height 30
|
||||||
(space)
|
(space)
|
||||||
(media)
|
(media)
|
||||||
(space)))
|
(space)))
|
||||||
|
|
||||||
|
|
||||||
(defwidget start []
|
(defwidget start []
|
||||||
(box
|
(box
|
||||||
:orientation "h"
|
:orientation "h"
|
||||||
:space-evenly false
|
:space-evenly false
|
||||||
:height 30
|
:height 30
|
||||||
:halign "start"
|
:halign "start"
|
||||||
:valign "center"
|
:valign "center"
|
||||||
:spacing 3
|
:spacing 3
|
||||||
(timeBox)
|
(timeBox)
|
||||||
(mediaBox)
|
(mediaBox)
|
||||||
(box)))
|
(box)))
|
||||||
|
|
||||||
(defwidget center [monitor]
|
(defwidget center [monitor]
|
||||||
(box
|
(box
|
||||||
:class "barbox"
|
:class "barbox"
|
||||||
:orientation "h"
|
:orientation "h"
|
||||||
:space-evenly false
|
:space-evenly false
|
||||||
:spacing 3
|
:spacing 3
|
||||||
:height 30
|
:height 30
|
||||||
:halign "center"
|
:halign "center"
|
||||||
:valign "center"
|
:valign "center"
|
||||||
(space)
|
(space)
|
||||||
(workspace
|
(workspace
|
||||||
:activeOn {workspaces[0].special.activeOn}
|
:activeOn {workspaces[0].special.activeOn}
|
||||||
:occupied {workspaces[0].special.occupied}
|
:occupied {workspaces[0].special.occupied}
|
||||||
:id {workspaces[0].special.id}
|
:id {workspaces[0].special.id}
|
||||||
:icon {workspaces[0].special.icon}
|
:icon {workspaces[0].special.icon}
|
||||||
:monitor {monitor})
|
:monitor {monitor})
|
||||||
(workspace
|
(workspace
|
||||||
:activeOn {workspaces[1].special.activeOn}
|
:activeOn {workspaces[1].special.activeOn}
|
||||||
:occupied {workspaces[1].special.occupied}
|
:occupied {workspaces[1].special.occupied}
|
||||||
:id {workspaces[1].special.id}
|
:id {workspaces[1].special.id}
|
||||||
:icon {workspaces[1].special.icon}
|
:icon {workspaces[1].special.icon}
|
||||||
:monitor {monitor})
|
:monitor {monitor})
|
||||||
(seperator)
|
(seperator)
|
||||||
(normalWorkspaces
|
(normalWorkspaces
|
||||||
:monitor {monitor})
|
:monitor {monitor})
|
||||||
(seperator)
|
(seperator)
|
||||||
(workspace
|
(workspace
|
||||||
:activeOn {workspaces[2].special.activeOn}
|
:activeOn {workspaces[2].special.activeOn}
|
||||||
:occupied {workspaces[2].special.occupied}
|
:occupied {workspaces[2].special.occupied}
|
||||||
:id {workspaces[2].special.id}
|
:id {workspaces[2].special.id}
|
||||||
:icon {workspaces[2].special.icon}
|
:icon {workspaces[2].special.icon}
|
||||||
:monitor {monitor})
|
:monitor {monitor})
|
||||||
(workspace
|
(workspace
|
||||||
:activeOn {workspaces[3].special.activeOn}
|
:activeOn {workspaces[3].special.activeOn}
|
||||||
:occupied {workspaces[3].special.occupied}
|
:occupied {workspaces[3].special.occupied}
|
||||||
:id {workspaces[3].special.id}
|
:id {workspaces[3].special.id}
|
||||||
:icon {workspaces[3].special.icon}
|
:icon {workspaces[3].special.icon}
|
||||||
:monitor {monitor})
|
:monitor {monitor})
|
||||||
(space)))
|
(space)))
|
||||||
|
|
||||||
(defwidget end []
|
(defwidget end []
|
||||||
|
(box
|
||||||
|
:orientation "h"
|
||||||
|
:space-evenly false
|
||||||
|
:spacing 3
|
||||||
|
:height 30
|
||||||
|
:valign "center"
|
||||||
|
:halign "end"
|
||||||
(box
|
(box
|
||||||
:orientation "h"
|
:class "barbox"
|
||||||
:space-evenly false
|
:space-evenly false
|
||||||
:spacing 3
|
:spacing 2
|
||||||
:height 30
|
(space)
|
||||||
:valign "center"
|
(testtime
|
||||||
:halign "end"
|
:timezone "US/Eastern"
|
||||||
(box
|
:image "./images/USTime.png")
|
||||||
:class "barbox"
|
(seperator)
|
||||||
:space-evenly false
|
(testtime
|
||||||
:spacing 2
|
:timezone "Asia/Seoul"
|
||||||
(space)
|
:image "./images/SamGuk-by_Sang_Min.png")
|
||||||
(testtime
|
(space))
|
||||||
:timezone "US/Eastern"
|
(box
|
||||||
:image "../images/USTime.png")
|
:class "barbox"
|
||||||
(seperator)
|
:spacing 2
|
||||||
(testtime
|
:orientation "h"
|
||||||
:timezone "Asia/Seoul"
|
:space-evenly false
|
||||||
:image "../images/SamGuk-by_Sang_Min.png")
|
:height 30
|
||||||
(space))
|
:valign "center"
|
||||||
(box
|
:halign "end"
|
||||||
:class "barbox"
|
|
||||||
:spacing 2
|
(space)
|
||||||
:orientation "h"
|
;; (systray
|
||||||
:space-evenly false
|
;; :spacing 2
|
||||||
:height 30
|
;; :orientation "h"
|
||||||
:valign "center"
|
;; :space-evenly true
|
||||||
:halign "end"
|
;; :icon-size 16)
|
||||||
|
;;
|
||||||
(space)
|
;; (seperator)
|
||||||
;; (systray
|
|
||||||
;; :spacing 2
|
(processing)
|
||||||
;; :orientation "h"
|
|
||||||
;; :space-evenly true
|
(seperator)
|
||||||
;; :icon-size 16)
|
|
||||||
;;
|
(controlls)
|
||||||
;; (seperator)
|
|
||||||
|
(seperator)
|
||||||
(processing)
|
|
||||||
|
(wireless)
|
||||||
(seperator)
|
|
||||||
|
(seperator)
|
||||||
(controlls)
|
|
||||||
|
(energy)
|
||||||
(seperator)
|
|
||||||
|
(space))))
|
||||||
(wireless)
|
|
||||||
|
|
||||||
(seperator)
|
|
||||||
|
|
||||||
(energy)
|
|
||||||
|
|
||||||
(space))))
|
|
||||||
|
|
||||||
(defwidget bar [monitor]
|
(defwidget bar [monitor]
|
||||||
(centerbox
|
(centerbox
|
||||||
:orientation "h"
|
:orientation "h"
|
||||||
(start)
|
(start)
|
||||||
(center
|
(center
|
||||||
:monitor {monitor})
|
:monitor {monitor})
|
||||||
(end)))
|
(end)))
|
||||||
|
|
||||||
|
|
||||||
(defwindow bar [monitor width height]
|
(defwindow bar [monitor width height]
|
||||||
:monitor {monitor}
|
:monitor {monitor}
|
||||||
:geometry (geometry
|
:geometry (geometry
|
||||||
:x "0%"
|
:x "0%"
|
||||||
:y "5px"
|
:y "5px"
|
||||||
:width "${width}px"
|
:width "${width}px"
|
||||||
:height "${height}px"
|
:height "${height}px"
|
||||||
:anchor "top center")
|
:anchor "top center")
|
||||||
:stacking "fg"
|
:stacking "fg"
|
||||||
:exclusive true
|
:exclusive true
|
||||||
(bar
|
(bar
|
||||||
:monitor {monitor}))
|
:monitor {monitor}))
|
||||||
|
|
Before Width: | Height: | Size: 734 KiB After Width: | Height: | Size: 734 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.9 KiB |
|
@ -1,25 +1,25 @@
|
||||||
(deflisten brightnessValue
|
(deflisten brightnessValue
|
||||||
:initial "0"
|
:initial "0"
|
||||||
`../ewwScripts/brightness.sh`)
|
`./scripts/brightness.sh`)
|
||||||
|
|
||||||
(deflisten network
|
(deflisten network
|
||||||
:initial '{"name":"No Connection","image":"n.A."}'
|
:initial '{"name":"No Connection","image":"n.A."}'
|
||||||
`../ewwScripts/network.sh`)
|
`./scripts/network.sh`)
|
||||||
|
|
||||||
(deflisten workspaces
|
(deflisten workspaces
|
||||||
:initial ''
|
:initial ''
|
||||||
`../ewwScripts/client`)
|
`./scripts/client`)
|
||||||
|
|
||||||
(defpoll bluetooth
|
(defpoll bluetooth
|
||||||
:initial '{"name":"","battery":"0"}'
|
:initial '{"name":"","battery":"0"}'
|
||||||
:interval "2s"
|
:interval "2s"
|
||||||
`../ewwScripts/bluetooth.sh`)
|
`./scripts/bluetooth.sh`)
|
||||||
|
|
||||||
(deflisten volume
|
(deflisten volume
|
||||||
:initial '{"volume":"0","muted":"0"}'
|
:initial '{"volume":"0","muted":"0"}'
|
||||||
`../ewwScripts/volume.sh`)
|
`./scripts/volume.sh`)
|
||||||
|
|
||||||
(defpoll media
|
(defpoll media
|
||||||
:initial '{"status":"","name":""}'
|
:initial '{"status":"","name":""}'
|
||||||
:interval "2s"
|
:interval "2s"
|
||||||
`../ewwScripts/media.sh`)
|
`./scripts/media.sh`)
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
unset id name horizontal vertical scale activeWorkspace
|
|
||||||
|
|
||||||
i=0
|
|
||||||
|
|
||||||
while read -r k n h v s t; do
|
|
||||||
id[i]="$k"
|
|
||||||
name[i]="$n"
|
|
||||||
horizontal[i]="$h"
|
|
||||||
vertical[i]="$v"
|
|
||||||
scale[i]="$s"
|
|
||||||
if [[ $((t%2)) == 1 ]]; then
|
|
||||||
temp=${vertical[$i]}
|
|
||||||
vertical[i]=${horizontal[$i]}
|
|
||||||
horizontal[i]=$temp
|
|
||||||
fi
|
|
||||||
((i=i+1))
|
|
||||||
done < <(hyprctl monitors -j | jq -r '.[]|"\(.id) \(.name) \(.width) \(.height) \(.scale) \(.transform)"')
|
|
||||||
|
|
||||||
eww close-all --config ../eww
|
|
||||||
|
|
||||||
sleep 2
|
|
||||||
|
|
||||||
for ((i = 0; i < ${#id[@]}; i++)); do
|
|
||||||
scale_value=$(echo "${scale[$i]}" | bc -l)
|
|
||||||
|
|
||||||
new_width_float=$(echo "(${horizontal[$i]} / ${scale_value}) -10" | bc)
|
|
||||||
|
|
||||||
new_width=$(echo "$new_width_float / 1" | bc)
|
|
||||||
|
|
||||||
monitorID=$(xrandr --listactivemonitors | grep +"${name[$i]}" | awk '{sub(/.$/,"",$1); print $1}')
|
|
||||||
|
|
||||||
eww open bar --id bar"${monitorID}" --arg monitor="${monitorID}" --arg width="${new_width}" --arg height=30 --config ../eww
|
|
||||||
sleep 2
|
|
||||||
done
|
|
|
@ -1,33 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
getIcon() {
|
|
||||||
local desktop=""
|
|
||||||
|
|
||||||
# Search for desktop files by WM class
|
|
||||||
if [ -n "$1" ]; then
|
|
||||||
desktop=$(grep -l "StartupWMClass.*$1$" /run/current-system/sw/share/applications/*.desktop)
|
|
||||||
[ -z "$desktop" ] && desktop=$(grep -Pl "Name\s*=\s*$1$" /run/current-system/sw/share/applications/*.desktop)
|
|
||||||
[ -z "$desktop" ] && desktop=$(ls /run/current-system/sw/share/applications/"${1}".desktop 2>/dev/null)
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If not found by WM class, search by process name
|
|
||||||
if [ -z "$desktop" ] && [ -n "$2" ]; then
|
|
||||||
process=$(ps -p "${2}" -o comm=)
|
|
||||||
desktop=$(grep -Pl "$process" /run/current-system/sw/share/applications/*.desktop)
|
|
||||||
[ -n "$desktop" ]
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If not found by WM class or process name, search by name or description
|
|
||||||
if [ -z "$desktop" ] && [ -n "$1" ]; then
|
|
||||||
desktop=$(grep -Pl "$1" /run/current-system/sw/share/applications/*.desktop)
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "$desktop"
|
|
||||||
}
|
|
||||||
|
|
||||||
desktop=$(getIcon "$1" "$2")
|
|
||||||
if [ -n "$desktop" ]; then
|
|
||||||
desktop=$(echo "$desktop" | awk 'NR==1')
|
|
||||||
icon=$(awk -F'[[:space:]]*=[[:space:]]*' '/Icon[[:space:]]*=/ && !seen[$2]++ {print $2; exit}' "$desktop")
|
|
||||||
echo -n "${icon}.svg"
|
|
||||||
fi
|
|
1
result
|
@ -1 +0,0 @@
|
||||||
/nix/store/mp0zkc5iaf73f3yiq606qvfpqvs48q5i-desktop-utils-1.0.0
|
|
|
@ -1,7 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
if [[ $(acpi -a | awk '{print $3}') == "on-line" ]]; then
|
|
||||||
swaylock
|
|
||||||
else
|
|
||||||
systemctl suspend-then-hibernate
|
|
||||||
fi
|
|
|
@ -1,7 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
swaylock &
|
|
||||||
|
|
||||||
sleep 0.1
|
|
||||||
|
|
||||||
hyprctl dispatch dpms off
|
|
|
@ -1,10 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
while read -r f s; do
|
|
||||||
if [[ $f == true && $(awk -v s="$s" 'BEGIN{ if (s > 1.5) print 1; else print 0; }') == 1 ]]; then
|
|
||||||
export GDK_SCALE=2
|
|
||||||
export QT_SCALE_FACTOR=2
|
|
||||||
fi
|
|
||||||
done < <(hyprctl monitors -j | jq -r '.[]|"\(.focused) \(.scale)"')
|
|
||||||
|
|
||||||
wofi --show drun
|
|
|
@ -7,6 +7,7 @@ pkgs.mkShell {
|
||||||
pkgs.cargo
|
pkgs.cargo
|
||||||
pkgs.pkg-config
|
pkgs.pkg-config
|
||||||
pkgs.libxkbcommon
|
pkgs.libxkbcommon
|
||||||
|
pkgs.eww
|
||||||
|
|
||||||
pkgs.rust-analyzer
|
pkgs.rust-analyzer
|
||||||
pkgs.clippy
|
pkgs.clippy
|
||||||
|
|
13
src/main.rs
|
@ -12,13 +12,22 @@ use smithay_client_toolkit::{
|
||||||
|
|
||||||
use wayland_client::{globals::registry_queue_init, protocol::wl_output, Connection, QueueHandle};
|
use wayland_client::{globals::registry_queue_init, protocol::wl_output, Connection, QueueHandle};
|
||||||
|
|
||||||
const CONFIG_DIR: &str = "/home/willifan/.config/desktop-utils/eww";
|
const CONFIG_DIR: &str = "./eww";
|
||||||
|
|
||||||
fn main() -> Result<(), Box<dyn Error>> {
|
fn main() -> Result<(), Box<dyn Error>> {
|
||||||
// We initialize the logger for the purpose of debugging.
|
// We initialize the logger for the purpose of debugging.
|
||||||
// Set `RUST_LOG=debug` to see extra debug information.
|
// Set `RUST_LOG=debug` to see extra debug information.
|
||||||
env_logger::init();
|
env_logger::init();
|
||||||
|
|
||||||
|
let exe_path = std::env::current_exe()?
|
||||||
|
.parent()
|
||||||
|
.unwrap()
|
||||||
|
.to_str()
|
||||||
|
.unwrap()
|
||||||
|
.to_owned();
|
||||||
|
let config_path = exe_path + "/eww";
|
||||||
|
println!("Path: {}", config_path);
|
||||||
|
|
||||||
// Try to connect to the Wayland server.
|
// Try to connect to the Wayland server.
|
||||||
let conn = Connection::connect_to_env()?;
|
let conn = Connection::connect_to_env()?;
|
||||||
|
|
||||||
|
@ -72,7 +81,7 @@ fn main() -> Result<(), Box<dyn Error>> {
|
||||||
"--arg",
|
"--arg",
|
||||||
"height=30",
|
"height=30",
|
||||||
"--config",
|
"--config",
|
||||||
CONFIG_DIR, //TODO make this path implicit
|
&config_path,
|
||||||
])
|
])
|
||||||
.spawn()
|
.spawn()
|
||||||
.expect("failed to execute process");
|
.expect("failed to execute process");
|
||||||
|
|