63 lines
2.2 KiB
Nix
63 lines
2.2 KiB
Nix
{ pkgs, ... }:
|
|
|
|
let
|
|
|
|
notif = pkgs.writeShellScriptBin "notif" ''
|
|
# Shell script to send custom notifications
|
|
NOTIF_FOLDER="/tmp/notif"
|
|
sender_id=$1 # To overwrite existing notifications
|
|
message=$2
|
|
extraargs=""
|
|
description=""
|
|
if [[ $3 == "extraargs="* ]]; then
|
|
extraargs=$(echo "$3" | sed 's/extraargs=//g')
|
|
else
|
|
description="$3"
|
|
extraargs="$4"
|
|
fi
|
|
|
|
[[ -d "$NOTIF_FOLDER" ]] || mkdir $NOTIF_FOLDER
|
|
[[ -f "$NOTIF_FOLDER/$sender_id" ]] || echo "0" > "$NOTIF_FOLDER/$sender_id"
|
|
|
|
old_notification_id=$(cat "$NOTIF_FOLDER/$sender_id")
|
|
|
|
${pkgs.libnotify}/bin/notify-send "$message" \
|
|
$extraargs \
|
|
--replace-id="$old_notification_id" --print-id > "$NOTIF_FOLDER/$sender_id"
|
|
'';
|
|
|
|
battery-watch = pkgs.writeShellScriptBin "battery-watch" ''
|
|
while true;do
|
|
battery-plugged &
|
|
battery-level &
|
|
sleep 60
|
|
done
|
|
'';
|
|
|
|
battery-plugged = pkgs.writeShellScriptBin "battery-plugged" ''
|
|
BATTERY_STATUS=$(cat /sys/class/power_supply/BAT*/status | head -n1)
|
|
OLD_BATTERY_STATUS=$(cat /tmp/old_battery_status 2>/dev/null || echo "Unknown")
|
|
if [[ $BATTERY_STATUS != $OLD_BATTERY_STATUS && $OLD_BATTERY_STATUS != "Unknown" ]]; then
|
|
if [[ $BATTERY_STATUS == "Discharging" ]]; then
|
|
notif "battery" " Battery is unplugged"
|
|
else
|
|
notif "battery" " Battery is plugged in"
|
|
fi
|
|
fi
|
|
echo $BATTERY_STATUS > /tmp/old_battery_status
|
|
'';
|
|
|
|
battery-level = pkgs.writeShellScriptBin "battery-level" ''
|
|
BATTERY_LEVEL=$(cat /sys/class/power_supply/BAT*/capacity | head -n1)
|
|
BATTERY_STATUS=$(cat /sys/class/power_supply/BAT*/status | head -n1)
|
|
if [[ $BATTERY_LEVEL -le 20 ]] && [[ $BATTERY_STATUS == "Discharging" ]]; then
|
|
notif "battery" " Low battery" "Battery level is $BATTERY_LEVEL%"
|
|
elif [[ $BATTERY_LEVEL -le 10 ]] && [[ $BATTERY_STATUS == "Discharging" ]]; then
|
|
notif "battery" " Very low battery" "Battery level is $BATTERY_LEVEL%"
|
|
elif [[ $BATTERY_LEVEL -eq 100 ]] && [[ $BATTERY_STATUS -ne "Discharging" ]]; then
|
|
notif "battery" " Fully charged"
|
|
fi
|
|
'';
|
|
|
|
in { home.packages = [ notif battery-watch battery-plugged battery-level ]; }
|