nix-configs

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

blog-duolingo.nix (1742B)


      1 { pkgs, vars, ... }:
      2 
      3 let
      4   blog-duolingo = pkgs.writeShellScriptBin "blog-duolingo" ''
      5     # variables
      6     username="$(awk -F'[/()]' '/Duolingo/ {print $5}' "$HOME/vault/src/blog.${vars.user.domain}/content/about.md")"
      7 	post_file="$HOME/vault/src/blog.${vars.user.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.services.blog-duolingo = {
     31     description = "Fetch and log Duolingo ranks to blog";
     32     serviceConfig = {
     33       Type = "oneshot";
     34       User = vars.user.username;
     35       ExecStart = "${blog-duolingo}/bin/blog-duolingo";
     36       Environment = "PATH=/run/current-system/sw/bin:/run/wrappers/bin";
     37     };
     38   };
     39 
     40   systemd.timers.blog-duolingo = {
     41     description = "Run blog-duolingo every Sunday at 23:55";
     42     wantedBy = [ "timers.target" ];
     43     timerConfig = {
     44       OnCalendar = "Sun *-*-* 23:55:00";
     45       Persistent = true;
     46     };
     47   };
     48 }