blog-duolingo.nix (1540B)
1 { pkgs, username, domain, ... }: 2 3 let 4 blog-duolingo = pkgs.writeShellScriptBin "blog-duolingo" '' 5 # variables 6 username="$(awk -F'[/()]' '/Duolingo/ {print $5}' "$HOME/vault/src/blog.${domain}/content/about.md")" 7 post_file="$HOME/vault/src/blog.${domain}/content/posts/logging-duolingo-ranks-over-time.md" 8 # functions 9 function lastmod { 10 echo -n "Amending lastmod value... " 11 mod_timestamp="$(date +%FT%H:%M:00)" 12 sed -i "s/lastmod: .*/lastmod: $mod_timestamp/g" "$1" 13 echo -e "$i \e[32mdone\e[39m" 14 } 15 # process 16 page_source="$(curl -s https://duome.eu/"$username")" 17 rank_lingot="$(printf %s "$page_source" | awk -F"[#><]" '/icon lingot/ {print $15}')" 18 rank_streak="$(printf %s "$page_source" | awk -F"[#><]" '/icon streak/{getline;print $15}')" 19 # write 20 echo -e "$i \e[32mdone\e[39m" 21 echo -n "Appending ranks to page... " 22 sed -i '/<\/tbody><\/table>/d' "$post_file" 23 printf " <tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n</tbody></table>" "$(date +%F)" "$(date +%H:%M)" "$rank_streak" "$rank_lingot" >>"$post_file" 24 echo -e "$i \e[32mdone\e[39m" 25 lastmod "$post_file" 26 ''; 27 in { 28 environment.systemPackages = [blog-duolingo]; 29 30 systemd.timers.blog-duolingo = { 31 wantedBy = [ "timers.target" ]; 32 timerConfig = { 33 OnCalendar = "Sun 23:59"; 34 Persistent = true; 35 }; 36 }; 37 systemd.services.blog-duolingo = { 38 script = "blog-duolingo"; 39 path = [ "/run/current-system/sw" ]; 40 serviceConfig = { 41 Type = "oneshot"; 42 User = "${username}"; 43 }; 44 }; 45 }