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 }