aboutsummaryrefslogtreecommitdiffstats
path: root/modules/vhack/ru/rust-motd
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-07-30 14:05:39 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-07-30 14:05:39 +0200
commitc153a351659e4596acfc31f00bf594343cbfcd68 (patch)
treea9ed83de07711d6424fbea09aad28891bae5bfe4 /modules/vhack/ru/rust-motd
parenthosts/server3: Setup prometheus server in agent mode (diff)
downloadnixos-server-c153a351659e4596acfc31f00bf594343cbfcd68.zip
modules: Use namespaces
That might make it easier in the future to merge different server configs together (and thusly facilitate code-reuse.).
Diffstat (limited to 'modules/vhack/ru/rust-motd')
-rw-r--r--modules/vhack/ru/rust-motd/module.nix96
1 files changed, 96 insertions, 0 deletions
diff --git a/modules/vhack/ru/rust-motd/module.nix b/modules/vhack/ru/rust-motd/module.nix
new file mode 100644
index 0000000..bf23843
--- /dev/null
+++ b/modules/vhack/ru/rust-motd/module.nix
@@ -0,0 +1,96 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}: let
+ cfg = config.vhack.rust-motd;
+
+ # List all users that can login
+ pred = n: v: (
+ false # <- just here for neat formatting
+ || v.initialHashedPassword != null
+ || v.initialPassword != null
+ || v.hashedPassword != null
+ || v.hashedPasswordFile != null
+ || v.password != null
+ || v.passwordFile != null
+ || v.openssh.authorizedKeys.keys != []
+ || v.openssh.authorizedKeys.keyFiles != []
+ );
+ userList = builtins.mapAttrs (n: v: 2) (lib.filterAttrs pred config.users.users);
+
+ bannerFile =
+ pkgs.runCommandLocal "banner-file" {
+ nativeBuildInputs = [pkgs.figlet];
+ } ''
+ echo "${config.system.name}" | figlet -f slant > "$out"
+ '';
+in {
+ options.vhack.rust-motd = {
+ enable = lib.mkEnableOption "rust-motd";
+ };
+
+ config = lib.mkIf cfg.enable {
+ systemd.services.rust-motd = {
+ path = with pkgs; [
+ bash
+ fail2ban # Needed for rust-motd fail2ban integration
+ ];
+ };
+
+ programs.rust-motd = {
+ enable = true;
+ enableMotdInSSHD = true;
+ refreshInterval = "*:0/5"; # 0/5 means: hour 0 AND all hour wich match (0 + 5 * x) (is the same as: 0, 5, 10, 15, 20)
+
+ # An example is here: https://raw.githubusercontent.com/rust-motd/rust-motd/refs/heads/main/example_config.toml
+ settings = {
+ global = {
+ progress_full_character = "=";
+ progress_empty_character = "-";
+ progress_prefix = "[";
+ progress_suffix = "]";
+ time_format = "%Y-%m-%d %H:%M:%S";
+ };
+
+ banner = {
+ color = "red";
+ # Avoid some runtime dependencies.
+ command = "cat ${bannerFile}";
+ };
+
+ cg_stats = {
+ state_file = "/var/lib/rust-motd/cg_stats_state";
+ threshold = 0.02; # When to start generating output for a cgroup
+ };
+ load_avg = {
+ format = "Load (1, 5, 15 min.): {one:.02}, {five:.02}, {fifteen:.02}";
+ };
+
+ uptime = {
+ prefix = "Uptime:";
+ };
+
+ filesystems = {
+ root = "/";
+ persistent = "/srv";
+ store = "/nix";
+ boot = "/boot";
+ };
+
+ memory = {
+ swap_pos = "beside"; # or "below" or "none"
+ };
+
+ fail_2_ban = {
+ jails = ["sshd"]; #, "anotherjail"]
+ };
+
+ last_login = userList;
+
+ last_run = {};
+ };
+ };
+ };
+}