1
0
mirror of https://github.com/kmein/niveum synced 2026-03-16 18:21:07 +01:00
Files
niveum/lib/i3status-rust.nix

221 lines
6.6 KiB
Nix
Raw Normal View History

2022-03-10 21:52:12 +01:00
{
pkgs,
wirelessInterface,
colours,
batteryName,
accounts,
2022-03-10 21:52:12 +01:00
}: let
inherit (pkgs) lib;
2020-06-10 17:37:25 +02:00
setsid = script:
pkgs.writers.writeDash "setsid-command" ''
2022-10-06 10:05:11 +02:00
${pkgs.util-linux}/bin/setsid ${script}
2020-06-10 17:37:25 +02:00
'';
in {
2019-11-05 21:59:51 +01:00
theme = {
2023-06-06 19:59:27 +02:00
theme = "plain";
2019-11-05 21:59:51 +01:00
overrides = {
critical_fg = colours.red.bright;
good_fg = colours.green.bright;
idle_fg = colours.foreground;
info_fg = colours.cyan.bright;
2019-11-05 21:59:51 +01:00
warning_fg = colours.yellow.bright;
2020-05-31 18:25:39 +02:00
warning_bg = colours.background;
2019-11-05 21:59:51 +01:00
critical_bg = colours.background;
good_bg = colours.background;
idle_bg = colours.background;
info_bg = colours.background;
2022-08-18 18:47:12 +02:00
separator = "";
2020-05-31 18:25:39 +02:00
separator_bg = "auto";
2020-09-03 19:16:49 +02:00
separator_fg = colours.black.bright;
2019-11-05 21:59:51 +01:00
};
};
2023-06-06 19:59:27 +02:00
icons.icons = "awesome6";
icons.overrides.vpn = "";
icons.overrides.irc = "";
2019-11-05 21:59:51 +01:00
block = [
{
block = "weather";
autolocate = true;
2023-06-06 19:59:27 +02:00
format = "$icon $location: $temp";
service = {
name = "openweathermap";
city_id = "2950159";
units = "metric";
};
}
2021-10-19 17:59:14 +02:00
{
block = "custom";
2021-11-24 18:19:46 +01:00
interval = 60 * 5;
2022-03-10 21:52:12 +01:00
command = let
spacetime = import ../configs/spacetime.nix;
2022-03-10 21:52:12 +01:00
in
pkgs.writers.writePython3 "sun.py" {
libraries = [pkgs.python3Packages.astral];
flakeIgnore = ["E121" "E501"];
2021-11-13 23:39:01 +01:00
}
2022-03-10 21:52:12 +01:00
''
import astral
import astral.moon
import astral.sun
2021-11-13 23:39:01 +01:00
2022-03-10 21:52:12 +01:00
current_phase = astral.moon.phase()
2022-03-10 21:52:12 +01:00
city = astral.LocationInfo("Berlin", "Germany", "${spacetime.time.timeZone}", ${toString spacetime.location.latitude}, ${toString spacetime.location.longitude})
sun = astral.sun.sun(city.observer, date=astral.today(), tzinfo=city.timezone)
2022-08-21 01:01:08 +02:00
print("{} {} {}{}".format(sun["sunrise"].strftime("%R"), sun["sunset"].strftime("%R"), "" if current_phase < 14 else "", round(current_phase, 1)))
2022-03-10 21:52:12 +01:00
'';
2021-10-19 17:59:14 +02:00
}
2022-08-22 10:28:48 +02:00
{
block = "github";
info = ["total"];
warning = ["mention" "review_requested" "team_mention" "manual" "invitation" "assign" "subscribed"];
2022-08-22 10:28:48 +02:00
}
2022-08-19 11:48:58 +02:00
{
block = "custom";
interval = 10;
command = pkgs.writers.writeDash "todo" ''
${pkgs.todoman}/bin/todo --porcelain | ${pkgs.jq}/bin/jq -r '
map(select(.due != null))
| (map(select(.due < now)) | length) as $overdue
| (map(select(.due >= now and .due < now + (60 * 60 * 24))) | length) as $dueToday
| {
icon: "tasks",
text: (($overdue + $dueToday) as $sum | if $sum > 0 then $sum | tostring else "" end),
2022-08-19 11:48:58 +02:00
state: (
if $overdue > 0 then
"Critical"
elif $dueToday > 0 then
"Warning"
2022-08-19 11:48:58 +02:00
else
"Idle"
2022-08-19 11:48:58 +02:00
end
)
}
'
'';
json = true;
hide_when_empty = true;
2022-08-19 11:48:58 +02:00
}
2022-08-21 02:13:54 +02:00
{
block = "custom";
interval = 60 * 5;
command = let
2022-08-30 19:33:07 +02:00
query-account = name: account: "${pkgs.writers.writeDash "query-imap-${name}" ''
password=$(${toString account.passwordCommand})
${pkgs.coreutils}/bin/timeout 1 ${pkgs.curl}/bin/curl -sSL -u ${lib.escapeShellArg account.userName}:"$password" imaps://${account.imap.host} -X 'STATUS INBOX (UNSEEN)' \
2022-08-30 19:33:07 +02:00
| ${pkgs.gnugrep}/bin/grep -Eo '[0-9]+' \
| sed 's/^/{"${name}":/;s/$/}/'
''} &";
2022-08-21 02:13:54 +02:00
in
pkgs.writers.writeDash "unread-mail" ''
{
${lib.concatStringsSep "\n" (lib.mapAttrsToList query-account accounts)}
2022-08-30 19:33:07 +02:00
wait
} | jq -s 'if length == 0 then {text: "", icon: "mail", state: "Idle"} else
add
| (values | add) as $sum
| {
text: (if $sum > 0 then $sum | tostring else "" end),
icon: "mail",
state: (
if .["hu-student"] > 0 or .["hu-employee"] > 0 or .posteo > 0 then
2022-08-21 02:13:54 +02:00
"Warning"
elif $sum > 0 then
"Info"
else
"Idle"
end
)
2022-08-30 19:33:07 +02:00
} end'
2022-08-21 02:13:54 +02:00
'';
json = true;
hide_when_empty = true;
}
{
block = "custom";
interval = 60;
command = pkgs.writers.writeDash "weechat" ''
2022-08-30 19:33:07 +02:00
ssh -o ConnectTimeout=1 makanek cat /var/lib/weechat/hotlist.txt | sed 's/,/\n/g' | wc -l | jq '{
text: (if . > 0 then . | tostring else "" end),
state: (if . > 0 then "Info" else "Idle" end),
icon: "irc"
}'
'';
json = true;
hide_when_empty = true;
2022-08-21 02:13:54 +02:00
}
2023-06-06 19:59:27 +02:00
{
block = "service_status";
service = "hu-vpn";
active_format = "^icon_vpn";
inactive_format = "";
}
2022-01-27 16:25:10 +01:00
{
block = "custom";
interval = 5;
2022-01-27 16:25:10 +01:00
command = pkgs.writers.writeDash "hu-berlin-vpn" ''
2022-03-10 21:52:12 +01:00
PATH=${lib.makeBinPath [pkgs.systemd]}
(systemctl is-active --quiet openvpn-hu-berlin.service && echo '{"state": "Good", "text": "OpenVPN", "icon": "vpn"}') \
|| (systemctl is-active --quiet hu-vpn.service && echo '{"state": "Good", "text": "PPP+SSL", "icon": "vpn"}') \
|| echo '{"state": "Idle", "icon": "vpn", "text": ""}'
'';
json = true;
hide_when_empty = true;
2022-01-27 16:25:10 +01:00
}
2019-11-05 21:59:51 +01:00
{
block = "net";
device = wirelessInterface;
2023-06-06 19:59:27 +02:00
format = "$icon $ssid $signal_strength";
2019-11-05 21:59:51 +01:00
}
{
block = "battery";
device = batteryName;
2019-11-05 21:59:51 +01:00
}
{
block = "sound";
2020-01-24 10:09:04 +01:00
}
{
block = "disk_space";
2023-06-06 19:59:27 +02:00
format = "$icon $available";
2019-11-05 21:59:51 +01:00
}
{
block = "memory";
2023-06-06 19:59:27 +02:00
format = "$icon $mem_used.eng(prefix:G)";
2019-11-05 21:59:51 +01:00
}
2022-03-10 21:52:12 +01:00
{block = "load";}
2019-11-05 21:59:51 +01:00
{
block = "custom";
interval = 10;
json = true;
command = pkgs.writers.writeDash "time" ''
${pkgs.jq}/bin/jq -n \
--arg now "$(${pkgs.coreutils}/bin/date +'%Y-%m-%d (%W %a) %H:%M')" \
--argjson nextEvent "$(
${pkgs.khal}/bin/khal list --format "{start}" --day-format "" $(${pkgs.coreutils}/bin/date +'%Y-%m-%d %H:%M') 2>/dev/null \
| ${pkgs.gnugrep}/bin/grep -E '[0-9]{2}:[0-9]{2}' \
| ${pkgs.coreutils}/bin/head -1 \
| ${pkgs.coreutils}/bin/date --date="$(cat)" +%s
)" \
2022-08-19 11:29:42 +02:00
'{
text: $now,
icon: "time",
state: (
2022-08-19 11:29:42 +02:00
($nextEvent - now) as $deltaT
| if $deltaT < (5 * 60) then
"Critical"
elif $deltaT < (15 * 60) then
"Warning"
elif $deltaT < (60 * 60) then
"Info"
else
"Idle"
end
)
}'
'';
2019-11-05 21:59:51 +01:00
}
];
}