nix-configs

Personal NixOS and home-manager configuration files
Log | Files | Refs

blog-status.nix (2031B)


      1 { pkgs, username, domain, ... }:
      2 
      3 let
      4   blog-status = pkgs.writeShellScriptBin "blog-status" ''
      5     # variables
      6   status_uptime=$(($(cut -f1 -d. </proc/uptime) / 86400))
      7   # process
      8   {
      9     printf -- "---\\ntitle: Status\\nlayout: single\\n---\\n\\n"
     10     printf "*Generated on %(%Y-%m-%d at %H:%M)T*\\n\\n" -1
     11     printf "* Uptime: %s Day%s\\n" "$status_uptime" "$(if (("$status_uptime" > 1)); then echo s; fi)"
     12     printf "* CPU Load: %s\\n" "$(cut -d" " -f1-3 </proc/loadavg)"
     13     printf "* Users: %s\\n" "$(who | wc -l)"
     14     printf "* RAM Usage: %s%%\\n" "$(printf "%.2f" "$(free | awk '/Mem/ {print $3/$2 * 100.0}')")"
     15     printf "* Root Storage: %s\\n" "$(df / | awk 'END{print $5}')"
     16     printf "* Tank Storage: %s\\n" "$(df | awk -v tank="/tank" '$0 ~ tank {print $5}')"
     17     printf "* Torrent Ratio: %s\\n" "$(echo "scale=3; $(awk '/upload/ {print $2}' "$HOME/docker/transmission/stats.json") / $(awk '/download/ {print $2}' "$HOME/docker/transmission/stats.json" | sed 's/,//g')" | ${pkgs.bc}/bin/bc)"
     18     printf "* NAS Storage: %s\\n" "$(git --git-dir="$HOME/vault/src/logger/.git" show | awk 'END{print $3" "$4}')"
     19     printf "* [Containers](https://github.com/breadcat/nix-configs/blob/main/common/docker.nix): %s\\n" "$(docker ps -q | wc -l)/$(docker ps -aq | wc -l)"
     20     printf "* Packages: %s\\n" "$(${pkgs.fastfetch}/bin/fastfetch | awk -F": " '/Packages/ {print $2}')"
     21     printf "* Monthly Data: %s\\n" "$(vnstat -m --oneline | cut -f11 -d\;)"
     22     printf "\\nHardware specifications themselves are covered on the [hardware page](/hardware/#server).\\n"
     23   } >"$HOME/vault/src/blog.${domain}/content/status.md"
     24   '';
     25 in {
     26   environment.systemPackages = [blog-status];
     27 
     28   systemd.timers.blog-status = {
     29     wantedBy = [ "timers.target" ];
     30     timerConfig = {
     31       OnCalendar = "*:0/10";
     32       Persistent = true;
     33     };
     34   };
     35   systemd.services.blog-status = {
     36     script = "blog-status";
     37     path = [ "/run/current-system/sw" ];
     38     serviceConfig = {
     39       Type = "oneshot";
     40       User = "${username}";
     41     };
     42   };
     43 }