nix-configs

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

blog-status.nix (2169B)


      1 { pkgs, vars, ... }:
      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.${vars.user.domain}/content/status.md"
     24   '';
     25 in {
     26   environment.systemPackages = [ blog-status ];
     27 
     28   systemd.services.blog-status = {
     29     description = "Generate blog status page";
     30     serviceConfig = {
     31       Type = "oneshot";
     32       User = vars.user.username;
     33       ExecStart = "${blog-status}/bin/blog-status";
     34       Environment = "PATH=/run/current-system/sw/bin:/run/wrappers/bin";
     35     };
     36   };
     37 
     38   systemd.timers.blog-status = {
     39     description = "Run blog-status every 10 minutes";
     40     wantedBy = [ "timers.target" ];
     41     timerConfig = {
     42       OnCalendar = "*:0/10";
     43       Persistent = true;
     44     };
     45   };
     46 }