{ lib
, stdenvNoCC
, python3
, makeWrapper
, awww
, libnotify
, git
  # Shipped theme presets, baked into the package as a fallback so
  # `list`/`apply` work even when $NOMARCHY_PATH has no themes/ dir.
, themesDir ? null
}:

stdenvNoCC.mkDerivation {
  pname = "nomarchy-theme-sync";
  version = "0.4.0";

  src = ./.;

  nativeBuildInputs = [ makeWrapper ];
  buildInputs = [ python3 ];

  installPhase = ''
    runHook preInstall

    install -Dm755 nomarchy-theme-sync.py $out/bin/nomarchy-theme-sync
    patchShebangs $out/bin/nomarchy-theme-sync

    ${lib.optionalString (themesDir != null) ''
      mkdir -p $out/share/nomarchy
      cp -r ${themesDir} $out/share/nomarchy/themes
    ''}

    # Stdlib-only Python. home-manager is deliberately NOT wrapped in —
    # the rebuild must use the user's own home-manager from their PATH.
    wrapProgram $out/bin/nomarchy-theme-sync \
      --prefix PATH : ${lib.makeBinPath [ awww libnotify git ]} \
      ${lib.optionalString (themesDir != null)
        "--set NOMARCHY_DEFAULT_THEMES $out/share/nomarchy/themes"}

    runHook postInstall
  '';

  meta = {
    description = "Nomarchy theming: JSON state writer + Home Manager rebuild dispatcher";
    license = lib.licenses.mit;
    mainProgram = "nomarchy-theme-sync";
    platforms = lib.platforms.linux;
  };
}
