Compare commits

...

8 commits
v0.1.0 ... main

Author SHA1 Message Date
willifan
b500fa26a1 bump version to 0.1.2 2025-01-15 18:08:15 +01:00
willifan
e9f8b03cd7 made ewwbar actually independand of host filesystem 2025-01-15 18:07:16 +01:00
willifan
bdd0854f2b remove old files 2025-01-14 17:23:02 +01:00
willifan
3017d91b97 gitignore .direnv 2025-01-14 17:22:06 +01:00
willifan
aae66c3b70 added necessary buildInputs 2025-01-14 17:20:55 +01:00
willifan
54b0942de6 make directories implicit 2025-01-13 23:38:11 +01:00
willifan
7b8e7c3b27 remove result directory 2025-01-13 12:02:41 +01:00
willifan
d2195ba06f removed unnecessary files 2025-01-13 01:18:24 +01:00
63 changed files with 307 additions and 2430 deletions

View file

@ -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

View file

@ -1 +0,0 @@
/nix/store/pqsj954jryyfldxmv0fgag0ahmyrklbq-nix-shell-env

File diff suppressed because it is too large Load diff

5
.gitignore vendored
View file

@ -1,5 +1,6 @@
result /result
.vscode/ /.vscode
/.direnv
# Added by cargo # Added by cargo

View file

@ -1,6 +1,6 @@
[package] [package]
name = "ewwbar" name = "ewwbar"
version = "0.1.0" version = "0.1.2"
edition = "2021" edition = "2021"
[dependencies] [dependencies]

View file

@ -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";
}; };
} }

View file

@ -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
:orientation "h"
:space-evenly false
:height 30
:valign "center"
:halign "end"
(space) (space)
;; (systray ;; (systray
;; :spacing 2 ;; :spacing 2
;; :orientation "h" ;; :orientation "h"
;; :space-evenly true ;; :space-evenly true
;; :icon-size 16) ;; :icon-size 16)
;; ;;
;; (seperator) ;; (seperator)
(processing) (processing)
(seperator) (seperator)
(controlls) (controlls)
(seperator) (seperator)
(wireless) (wireless)
(seperator) (seperator)
(energy) (energy)
(space)))) (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}))

View file

Before

Width:  |  Height:  |  Size: 734 KiB

After

Width:  |  Height:  |  Size: 734 KiB

View file

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View file

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View file

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View file

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View file

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View file

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View file

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View file

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View file

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View file

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View file

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View file

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View file

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

View file

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View file

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View file

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

View file

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

View file

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View file

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

View file

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

View file

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View file

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View file

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View file

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View file

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View file

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View file

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View file

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View file

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View file

Before

Width:  |  Height:  |  Size: 9.7 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

View file

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View file

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View file

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

View file

@ -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`)

View file

@ -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

View file

@ -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
View file

@ -1 +0,0 @@
/nix/store/mp0zkc5iaf73f3yiq606qvfpqvs48q5i-desktop-utils-1.0.0

View file

@ -1,7 +0,0 @@
#!/usr/bin/env bash
if [[ $(acpi -a | awk '{print $3}') == "on-line" ]]; then
swaylock
else
systemctl suspend-then-hibernate
fi

View file

@ -1,7 +0,0 @@
#!/usr/bin/env bash
swaylock &
sleep 0.1
hyprctl dispatch dpms off

View file

@ -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

View file

View file

@ -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

View file

@ -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");