{ lib, config, pkgs, ... }: let # find symbols with # https://www.alphavantage.co/query?function=SYMBOL_SEARCH&apikey=&keywords= # as described here : https://www.alphavantage.co/documentation/#symbolsearch # # example: # -------- # stocks = [ # { # friendly_name = "google"; # symbol = "GOOGL.DEX"; # name = "google"; # currency = "$"; # } # ]; # results in # P 2020-01-30 GOOGL $123 stocks = import ../../private_assets/finance/stocks; stocksFile = toString /home/syncthing/finance/hledger/stocks.journal; in { systemd.services.pull_stocks = { enable = true; description = "pull stocks for hledger"; serviceConfig = { User = "syncthing"; Type = "oneshot"; }; script = let command = { symbol, name, currency, ... }: '' APIKEY=${lib.fileContents ../../private_assets/finance/alphavantage/apiKey} SYMBOL="${symbol}" ${pkgs.curl}/bin/curl --location --silent \ "https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=$SYMBOL&apikey=$APIKEY" \ | ${pkgs.jq}/bin/jq --raw-output '.["Global Quote"] | "P \(.["07. latest trading day"]) ${name} ${currency}\(.["05. price"] | tonumber)"' \ >> ${stocksFile} sleep 1 ''; in lib.concatStringsSep "\n" (map command stocks); }; systemd.timers.pull_stocks = { enable = true; wantedBy = [ "multi-user.target" ]; timerConfig = { OnCalendar = "weekly"; Persistent = "true"; }; }; }