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
|
||||
.vscode/
|
||||
/result
|
||||
/.vscode
|
||||
/.direnv
|
||||
|
||||
# Added by cargo
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "ewwbar"
|
||||
version = "0.1.0"
|
||||
version = "0.1.2"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
|
|
18
default.nix
|
@ -1,10 +1,10 @@
|
|||
{ pkgs ? import <nixpkgs> { } }:
|
||||
|
||||
pkgs.rustPlatform.buildRustPackage {
|
||||
pname = "desktop-utils";
|
||||
version = "1.0.0";
|
||||
pname = "ewwbar";
|
||||
version = "0.1.2";
|
||||
|
||||
src = builtins.path { path = ./.; name = "desktop-utils"; };
|
||||
src = builtins.path { path = ./.; name = "ewwbar"; };
|
||||
|
||||
cargoLock = {
|
||||
lockFile = ./Cargo.lock;
|
||||
|
@ -16,18 +16,20 @@ pkgs.rustPlatform.buildRustPackage {
|
|||
|
||||
buildInputs = [
|
||||
pkgs.libxkbcommon
|
||||
pkgs.eww
|
||||
];
|
||||
|
||||
# installPhase = ''
|
||||
# mkdir -p $out/bin
|
||||
# cp clients $out/bin/clients
|
||||
#'';
|
||||
postInstall = ''
|
||||
mkdir -p $out/bin
|
||||
cp -r $src/eww $out/bin/eww
|
||||
'';
|
||||
|
||||
meta = with pkgs.lib; {
|
||||
description = "utils for my desktop";
|
||||
description = "Top bar using ElKowars Wacky Widgets";
|
||||
homepage = " git.huwe.mooo.com/willifan/desktop-utils";
|
||||
license = licenses.gpl3;
|
||||
platforms = platforms.unix;
|
||||
mainProgram = "ewwbar";
|
||||
};
|
||||
|
||||
}
|
||||
|
|
34
eww/eww.yuck
|
@ -35,56 +35,56 @@
|
|||
:widgetclass "cpu"
|
||||
:hover "${round(EWW_CPU.avg, 1)}%"
|
||||
:percentage {round(EWW_CPU.avg, 1)}
|
||||
:image "../images/cpu.png"))
|
||||
:image "./images/cpu.png"))
|
||||
|
||||
(defwidget ram []
|
||||
(icon
|
||||
:widgetclass "ram"
|
||||
: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)}
|
||||
:image "../images/ram.png"))
|
||||
:image "./images/ram.png"))
|
||||
|
||||
(defwidget audio []
|
||||
(icon
|
||||
:widgetclass {volume.muted == 1 ? "muted" : "volume"}
|
||||
:hover "${volume.volume}%"
|
||||
: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 []
|
||||
(icon
|
||||
:widgetclass "brightness"
|
||||
:hover "${brightnessValue / 960}%"
|
||||
:percentage {brightnessValue / 960}
|
||||
:image "../images/brightness.png"))
|
||||
:image "./images/brightness.png"))
|
||||
|
||||
(defwidget network []
|
||||
(icon
|
||||
:widgetclass "network"
|
||||
:hover {network.name}
|
||||
:percentage "100"
|
||||
:image "../images/${network.image}.png"))
|
||||
:image "./images/${network.image}.png"))
|
||||
|
||||
(defwidget bluetooth []
|
||||
(icon
|
||||
:widgetclass "bluetooth"
|
||||
:hover {bluetooth.name}
|
||||
:percentage {bluetooth.battery}
|
||||
:image "../images/bluetooth.png"))
|
||||
:image "./images/bluetooth.png"))
|
||||
|
||||
(defwidget battery []
|
||||
(icon
|
||||
:widgetclass {EWW_BATTERY.BAT1.status == "Charging" ? "battery" : EWW_BATTERY.total_avg > 25 ? "battery" : "batteryLow"}
|
||||
:hover "${round(EWW_BATTERY.total_avg, 1)}%"
|
||||
: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 []
|
||||
(icon
|
||||
:widgetclass "power"
|
||||
:hover "placeholder"
|
||||
:percentage "0"
|
||||
:image "../images/power.png"))
|
||||
:image "./images/power.png"))
|
||||
|
||||
|
||||
|
||||
|
@ -271,11 +271,11 @@
|
|||
(space)
|
||||
(testtime
|
||||
:timezone "US/Eastern"
|
||||
:image "../images/USTime.png")
|
||||
:image "./images/USTime.png")
|
||||
(seperator)
|
||||
(testtime
|
||||
:timezone "Asia/Seoul"
|
||||
:image "../images/SamGuk-by_Sang_Min.png")
|
||||
:image "./images/SamGuk-by_Sang_Min.png")
|
||||
(space))
|
||||
(box
|
||||
:class "barbox"
|
||||
|
@ -287,13 +287,13 @@
|
|||
:halign "end"
|
||||
|
||||
(space)
|
||||
;; (systray
|
||||
;; :spacing 2
|
||||
;; :orientation "h"
|
||||
;; :space-evenly true
|
||||
;; :icon-size 16)
|
||||
;;
|
||||
;; (seperator)
|
||||
;; (systray
|
||||
;; :spacing 2
|
||||
;; :orientation "h"
|
||||
;; :space-evenly true
|
||||
;; :icon-size 16)
|
||||
;;
|
||||
;; (seperator)
|
||||
|
||||
(processing)
|
||||
|
||||
|
|
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
|
||||
:initial "0"
|
||||
`../ewwScripts/brightness.sh`)
|
||||
`./scripts/brightness.sh`)
|
||||
|
||||
(deflisten network
|
||||
:initial '{"name":"No Connection","image":"n.A."}'
|
||||
`../ewwScripts/network.sh`)
|
||||
`./scripts/network.sh`)
|
||||
|
||||
(deflisten workspaces
|
||||
:initial ''
|
||||
`../ewwScripts/client`)
|
||||
`./scripts/client`)
|
||||
|
||||
(defpoll bluetooth
|
||||
:initial '{"name":"","battery":"0"}'
|
||||
:interval "2s"
|
||||
`../ewwScripts/bluetooth.sh`)
|
||||
`./scripts/bluetooth.sh`)
|
||||
|
||||
(deflisten volume
|
||||
:initial '{"volume":"0","muted":"0"}'
|
||||
`../ewwScripts/volume.sh`)
|
||||
`./scripts/volume.sh`)
|
||||
|
||||
(defpoll media
|
||||
:initial '{"status":"","name":""}'
|
||||
: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.pkg-config
|
||||
pkgs.libxkbcommon
|
||||
pkgs.eww
|
||||
|
||||
pkgs.rust-analyzer
|
||||
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};
|
||||
|
||||
const CONFIG_DIR: &str = "/home/willifan/.config/desktop-utils/eww";
|
||||
const CONFIG_DIR: &str = "./eww";
|
||||
|
||||
fn main() -> Result<(), Box<dyn Error>> {
|
||||
// We initialize the logger for the purpose of debugging.
|
||||
// Set `RUST_LOG=debug` to see extra debug information.
|
||||
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.
|
||||
let conn = Connection::connect_to_env()?;
|
||||
|
||||
|
@ -72,7 +81,7 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|||
"--arg",
|
||||
"height=30",
|
||||
"--config",
|
||||
CONFIG_DIR, //TODO make this path implicit
|
||||
&config_path,
|
||||
])
|
||||
.spawn()
|
||||
.expect("failed to execute process");
|
||||
|
|