nixfiles/profiles/serverExtras.nix

80 lines
2.7 KiB
Nix

{
pkgs,
lib,
config,
...
}: let
inherit (lib.strings) concatStringsSep;
inherit (lib.lists) forEach;
inherit (builtins) attrNames;
inherit (pkgs) writeShellScriptBin;
containerNames = attrNames config.containers;
vaccumSize = "50M";
in {
environment.systemPackages =
[
(writeShellScriptBin "server-extras-info" ''
${pkgs.bat}/bin/bat -l markdown ${builtins.toFile "server-extras-info.md" ''
# Available Commands:
- journalctl-vaccum-all
Vaccums host and all container systemd journals
- journalctl-vaccum-host
Vaccums systemd journal on host
- journalctl-vaccum-`$name`
Vaccums systemd journal on a specific container
- journalctl-container-`$name`
journalctl but for a specific container
- systemctl-container-`$name`
systemctl but for a specific container
- systemctl-list-failed-all
Lists all failed units in host and containers
- restart-service-all
Restarts a service on host and all containers
- shell-enter-`$name`
Opens an interactive shell with container
''}
'')
(writeShellScriptBin "journalctl-vaccum-all" ''
journalctl --vacuum-size=${vaccumSize}
${concatStringsSep "\n" (forEach containerNames (name: ''
journalctl --vacuum-size=${vaccumSize} --root /var/lib/nixos-containers/${name}
''))}
'')
(writeShellScriptBin "journalctl-vaccum-host" ''
journalctl --vacuum-size=${vaccumSize}
'')
(writeShellScriptBin "systemctl-list-failed-all" ''
echo "Host: "
systemctl --failed
${concatStringsSep "\n" (forEach containerNames (name: ''
echo "Container: ${name}"
systemctl -M ${name} --failed
''))}
'')
(writeShellScriptBin "restart-service-all" ''
echo "Host: "
systemctl restart $@
${concatStringsSep "\n" (forEach containerNames (name: ''
echo "Container: ${name}"
systemctl -M ${name} restart $@
''))}
'')
]
++ forEach containerNames (name: (writeShellScriptBin "journalctl-vaccum-${name}" ''
journalctl --vacuum-size=${vaccumSize} --root /var/lib/nixos-containers/${name}
''))
++ forEach containerNames (name: (writeShellScriptBin "systemctl-container-${name}" ''
systemctl -M ${name} "$@"
''))
++ forEach containerNames (name: (writeShellScriptBin "journalctl-container-${name}" ''
journalctl -M ${name} "$@"
''))
++ forEach containerNames (name: (writeShellScriptBin "shell-enter-${name}" ''
machinectl shell ${name}
''));
}