let
processManagementBase =
{
pkgs,
lib,
config,
...
}:
let
inherit (lib) readFile;
inherit (lib.lists) singleton;
processKiller = pkgs.writeScriptBin "process-killer" (readFile ./nushell.process-killer.nu);
processMonitorConfig = pkgs.writeText "btop-popup.conf" /* conf */ ''
tty_mode = True
force_tty = True
shown_boxes = "proc"
proc_left = False
proc_tree = False
proc_gradient = False
proc_colors = False
proc_per_core = False
proc_mem_bytes = False
proc_cpu_graphs = False
proc_mem_graphs = False
mem_graphs = False
show_detailed = False
show_cpu_freq = False
show_uptime = False
show_disks = False
show_io_stat = False
show_swap = False
'';
processMonitor =
pkgs.writeScriptBin "process-monitor" # nu
''
#!${pkgs.nushell}/bin/nu
const CLASS_NAME = "btop-popup"
let existing = try {
niri msg --json windows
| from json
| where app_id? == $CLASS_NAME
} catch { return }
if ($existing | is-not-empty) {
niri msg action close-window --id $existing
} else {
(kitty
--detach
--class $CLASS_NAME
--title "Process Monitor"
--override remember_window_size=no
--override initial_window_width=44c
--override initial_window_height=16c
--override window_padding_width=${toString config.theme.padding.small}
btop
--config ${processMonitorConfig})
}
'';
in
{
hjem.extraModules = singleton {
packages = [
processKiller
processMonitor
];
};
};
in
{
flake.modules.nixos.process-management = processManagementBase;
}