# Taken from this comment: https://github.com/NixOS/nixpkgs/issues/152343#issuecomment-1367069827
{ lib, fetchzip, writeTextFile, runCommandLocal, symlinkJoin }:

let
  homer = fetchzip rec {
    pname = "homer";
    version = "24.02.1";
    url =
      "https://github.com/bastienwirtz/${pname}/releases/download/v${version}/${pname}.zip";
    hash = "sha256-McMJuZ84B3BlGHLQf+/ttRe5xAzQuR6qHrH8IjGys2Q=";
    stripRoot = false;

    passthru = {
      withAssets = { name ? null, config, extraAssets ? [ ] }:
        let nameSuffix = lib.optionalString (name != null) "-${name}";
        in
        symlinkJoin {
          name = "homer-root${nameSuffix}";
          paths = [
            homer
            (writeTextFile {
              name = "homer-configuration${nameSuffix}";
              text = builtins.toJSON config;
              destination = "/assets/config.yml";
            })
          ] ++
          lib.optional (extraAssets != [ ])
            (runCommandLocal "homer-assets${nameSuffix}" { }
              (builtins.concatStringsSep "\n" (map
                (asset: ''
                  mkdir -p $out/assets/${dirOf asset}
                  ln -s ${asset} $out/assets/${asset}
                '')
                extraAssets)));
        };
    };
  };
in
homer