/ github-profile / filter.jq
filter.jq
  1  [
  2    "Defelo/nixpkgs-review-gha",
  3    "nixos",
  4    "deploy-sh",
  5    "Defelo/sandkasten",
  6    "AdventOfCode"
  7  ] as $pins |
  8  
  9  [
 10    "Defelo/renovate",
 11    "Defelo/Defelo",
 12    "Defelo/github-profile",
 13    "archive"
 14  ] as $hidden |
 15  
 16  {
 17    "Defelo/nixpkgs-review-gha": "GitHub Actions",
 18    "nginx-oidc": "Rust",
 19    "radicle-nix-adapter": "Bash",
 20    "kvm.nix": "Nix",
 21    "nfnix": "Nix",
 22    "aocbot": "Rust",
 23    "AdventOfCode": "Rust, Uiua",
 24    "deploy-sh": "Bash",
 25    "nixos": "Nix",
 26  } as $language_overrides |
 27  
 28  {
 29    radicle: "https://radicle.xyz/assets/images/radicle.svg",
 30    forgejo: "https://code.forgejo.org/avatars/f820feb83e74d55da9a0edc013de4f990a643aa8909f9c7f01b557582ce39763",
 31    github: "https://avatars.githubusercontent.com/u/9919?v=4",
 32  } as $forge_icon_urls |
 33  
 34  def inline_img:
 35    if . != null then "<img src=\"\(.)\" height=12>" else "" end;
 36  
 37  def in($list):
 38    . as $x | $list | any(. == $x);
 39  
 40  def normalize($forge):
 41    {
 42      $forge,
 43      name,
 44      full_name,
 45      description,
 46      updated_at: (if .archived and $forge == "forgejo" then .archived_at else .updated_at end) | fromdate,
 47      html_url,
 48      language: $language_overrides[.full_name] // .language,
 49      fork,
 50      archived,
 51      mirror: { forgejo: .mirror, github: false }[$forge],
 52      avatar_url: [ .avatar_url, .owner.avatar_url ] | map(select(. and .!="")) | first,
 53      public: { forgejo: .private | not, github: .visibility == "public" }[$forge],
 54    }
 55  ;
 56  
 57  def normalize_radicle:
 58    .payloads["xyz.radicle.project"].data as $data |
 59    {
 60      forge: "radicle",
 61      name: $data.name,
 62      full_name: $data.name,
 63      description: $data.description,
 64      updated_at: infinite,
 65      html_url: "https://radicle.defelo.de/nodes/radicle.defelo.de/\(.rid)",
 66      language: $language_overrides[$data.name],
 67      fork: false,
 68      archived: false,
 69      mirror: false,
 70      avatar_url: null,
 71      public: .visibility.type == "public",
 72    }
 73  ;
 74  
 75  def make_repo_table:
 76    sort_by(
 77      . as { $full_name, $description } |
 78      [ ($pins | index($full_name) // infinite), ($description // "" | startswith("[DEPRECATED]")), -.updated_at ]
 79    )
 80    | map("| \($forge_icon_urls[.forge] | inline_img) [\(.full_name)](\(.html_url)) | \(.description // "") | \(.language // "") |")
 81    | join("\n")
 82    | "| Name | Description | Language |
 83  |-|-|-|
 84  \(.)"
 85  ;
 86  
 87  (.[0] | map(normalize_radicle)) + (.[1] | map(normalize("forgejo"))) + (.[2] | map(normalize("github")))
 88  | map(select(
 89    .public
 90    and (.fork or .mirror | not)
 91    and (.description // "" | startswith("moved to https://git.defelo.de/") | not)
 92    and (.full_name | in($hidden) | not)
 93  ))
 94  | map(select(.archived)) as $archived
 95  | "### Public Repositories
 96  
 97  Most of my public repositories are hosted on \($forge_icon_urls.radicle | inline_img) [Radicle](https://radicle.defelo.de/nodes/radicle.defelo.de/users/did:key:z6Mkondm5dgAxsQnV3iuvZBCGMAQgfAg4zSdJWoNVJr7i7wp).
 98  
 99  \(map(select(.archived | not)) | make_repo_table)
100  
101  \(if ($archived | length) != 0 then "<details><summary>+\($archived | length) archived repositories</summary>
102  
103  \($archived | make_repo_table)
104  
105  </details>" else "" end)
106  "