Lua
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
import os.path
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
os.chdir(os.path.expanduser("~/.config/hypr"))
|
||||
bars = "_▂▃▄▅▆▇█"
|
||||
batteries = ""
|
||||
batteries_charging = ""
|
||||
|
||||
|
||||
def to_bar(x):
|
||||
return bars[round((len(bars) - 1) * x / 100)]
|
||||
|
||||
|
||||
def monitor_stats():
|
||||
"""
|
||||
Monitors CPU and MEM usage and prints info in file.
|
||||
"""
|
||||
|
||||
try:
|
||||
import psutil
|
||||
except ModuleNotFoundError:
|
||||
print("Stats requires psutil (run `pip install psutil`)", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
cpu_values = [0] * 10
|
||||
mem_values = [0] * 10
|
||||
temp_values = [0] * 10
|
||||
|
||||
min_temp = 45
|
||||
max_temp = 95
|
||||
|
||||
while True:
|
||||
cpu_percent = psutil.cpu_percent(interval=2)
|
||||
mem_percent = psutil.virtual_memory().percent
|
||||
battery = psutil.sensors_battery()
|
||||
all_temps = psutil.sensors_temperatures(fahrenheit=False)
|
||||
|
||||
temps = all_temps.get("k10temp", None)
|
||||
if temps is None:
|
||||
temps = all_temps.get("coretemp")
|
||||
|
||||
temp = max([x.current for x in temps if x.label != "Tctl"])
|
||||
|
||||
temp_percent = 100 * min(max([temp - min_temp, 0]) / (max_temp - min_temp), 1)
|
||||
|
||||
for i in range(len(cpu_values) - 1):
|
||||
cpu_values[i] = cpu_values[i + 1]
|
||||
mem_values[i] = mem_values[i + 1]
|
||||
temp_values[i] = temp_values[i + 1]
|
||||
|
||||
cpu_values[-1] = cpu_percent
|
||||
mem_values[-1] = mem_percent
|
||||
temp_values[-1] = temp_percent
|
||||
|
||||
# Notify when memory greater than 75%
|
||||
if mem_percent >= 75 and not any(map(lambda x: x > 75, mem_values[:-1])):
|
||||
subprocess.run(
|
||||
[
|
||||
"notify-send",
|
||||
"-u",
|
||||
"critical",
|
||||
"High memory usage",
|
||||
"% 5.1f" % mem_percent + "% of RAM used",
|
||||
]
|
||||
)
|
||||
|
||||
if battery is None:
|
||||
battery_json = '{"text": "", "class": "hidden"}'
|
||||
else:
|
||||
battery_index = round(battery.percent / 10)
|
||||
battery_icon = (
|
||||
batteries_charging[battery_index]
|
||||
if battery.power_plugged
|
||||
else batteries[battery_index]
|
||||
)
|
||||
|
||||
if battery.power_plugged:
|
||||
battery_class = "charging"
|
||||
elif battery.percent < 30.0:
|
||||
battery_class = "low"
|
||||
elif battery.percent < 15.0:
|
||||
battery_class = "critical"
|
||||
else:
|
||||
battery_class = None
|
||||
|
||||
battery_text = (
|
||||
"% 4.0f" % battery.percent if battery.percent <= 99.95 else " 100"
|
||||
)
|
||||
battery_json = f', "class": "{battery_class}"' if battery_class else ""
|
||||
battery_json = (
|
||||
'{"text": "'
|
||||
+ battery_icon
|
||||
+ " "
|
||||
+ battery_text
|
||||
+ '%"'
|
||||
+ battery_json
|
||||
+ "}"
|
||||
)
|
||||
|
||||
cpu_percent_text = "% 5.1f" % cpu_percent if cpu_percent <= 99.95 else " 100"
|
||||
mem_percent_text = "% 5.1f" % mem_percent if mem_percent <= 99.95 else " 100"
|
||||
|
||||
with open(".stat.txt", "w") as f:
|
||||
f.write(
|
||||
" "
|
||||
+ "".join([to_bar(x) for x in cpu_values])
|
||||
+ " "
|
||||
+ cpu_percent_text
|
||||
+ "%\n"
|
||||
+ " "
|
||||
+ "".join([to_bar(x) for x in mem_values])
|
||||
+ " "
|
||||
+ mem_percent_text
|
||||
+ "%\n"
|
||||
+ " "
|
||||
+ "".join([to_bar(x) for x in temp_values])
|
||||
+ " "
|
||||
+ "% 5.1f" % temp
|
||||
+ "°\n"
|
||||
+ battery_json
|
||||
)
|
||||
|
||||
|
||||
def start_hyprlock():
|
||||
proc = subprocess.run(["pidof", "hyprlock"])
|
||||
if proc.returncode != 0:
|
||||
# We need to start this in the background so that the screen turns off afterwards
|
||||
subprocess.Popen(["hyprlock"], start_new_session=True)
|
||||
|
||||
|
||||
def lock_session():
|
||||
if os.environ.get("HYPR_DISABLE_LOCK", None) is None:
|
||||
subprocess.run(["loginctl", "lock-session"])
|
||||
|
||||
|
||||
def main():
|
||||
monitor_stats()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user