{ lib, pkgs }:
source:
let
  #import metis stuff
  metisCalendarData = builtins.fromJSON (builtins.readFile (source + /data/calendars.json));
  calendars = metisCalendarData.sources;
  inherit (import source { inherit pkgs; }) providers;

  # helper function to map 2-level deep attribute-sets
  mapDeepAttrs = mapFct:
    lib.concatMapAttrs (name: value:
      lib.mapAttrs' (name': value':
        mapFct name name' value'
      ) value
    );


  toLinkal = upstream: identifier:
    lib.nameValuePair
    "${providers.${upstream}}${identifier}"
    ;

in
  mapDeepAttrs toLinkal calendars