Sebastian Walz 860d31cee1
Tohu vaBohu
2023-04-21 00:22:52 +02:00

136 lines
5.0 KiB
Nix

{ core, ... }:
let
inherit(core) list string;
formatMeters
= side:
meters:
{
"${side}_meters" = list.map ({ name, ... }: name) meters;
"${side}_meter_modes" = list.map ({ mode, ... }: mode) meters;
};
leftMeters = formatMeters "left";
rightMeters = formatMeters "right";
getNames = column: string.concatWith " " (list.map ({name, ... }: name) column);
getModes = column: string.concatWith " " (list.map ({mode, ... }: string mode) column);
toMeters
= header_layout:
columns:
(
list.fold
(
{ index, result }:
column:
{
index = index + 1;
result
= result
// {
"column_meters_${string index}"
= getNames column;
"column_meter_modes_${string index}"
= getModes column;
};
}
)
{
index = 0;
result = { inherit header_layout; };
}
columns
).result;
fields
= {
PID = 0;
COMM = 1;
STATE = 2;
PPID = 3;
PGRP = 4;
SESSION = 5;
TTY_NR = 6;
TPGID = 7;
MINFLT = 9;
MAJFLT = 11;
PRIORITY = 17;
NICE = 18;
STARTTIME = 20;
PROCESSOR = 37;
M_SIZE = 38;
M_RESIDENT = 39;
ST_UID = 45;
PERCENT_CPU = 46;
PERCENT_MEM = 47;
USER = 48;
TIME = 49;
NLWP = 50;
TGID = 51;
PERCENT_NORM_CPU = 52;
ELAPSED = 53;
CMINFLT = 10;
CMAJFLT = 12;
UTIME = 13;
STIME = 14;
CUTIME = 15;
CSTIME = 16;
M_SHARE = 40;
M_TRS = 41;
M_DRS = 42;
M_LRS = 43;
M_DT = 44;
CTID = 99;
VPID = 100;
VXID = 102;
RCHAR = 102;
WCHAR = 103;
SYSCR = 104;
SYSCW = 105;
RBYTES = 106;
WBYTES = 107;
CNCLWB = 108;
IO_READ_RATE = 109;
IO_WRITE_RATE = 110;
IO_RATE = 111;
CGROUP = 112;
OOM = 113;
IO_PRIORITY = 114;
M_PSS = 118;
M_SWAP = 119;
M_PSSWP = 120;
};
modes
= {
Bar = 1;
Text = 2;
Graph = 3;
LED = 4;
};
# Utilities for constructing meters
meter = mode: name: { inherit mode name; };
bar = meter modes.Bar;
text = meter modes.Text;
graph = meter modes.Graph;
led = meter modes.LED;
blank = text "Blank";
layouts
= list.mapNamesToSet
(
name:
{
__functor = { ... }: toMeters name;
}
)
[
"two_50_50" "two_33_67" "two_67_33"
"three_33_34_33" "three_25_25_50" "three_25_50_25" "three_50_25_25" "three_40_20_40"
"four_25_25_25_25"
];
in
{
inherit fields layouts modes leftMeters rightMeters meter bar text graph led blank;
}