{ lib , stdenv , fetchFromGitHub , ocamlPackages , copyDesktopItems , makeDesktopItem , wrapGAppsHook , gsettings-desktop-schemas , enableX11 ? !stdenv.isDarwin }: stdenv.mkDerivation (finalAttrs: { pname = "unison"; version = "2.53.4"; src = fetchFromGitHub { owner = "bcpierce00"; repo = "unison"; rev = "v${finalAttrs.version}"; hash = "sha256-nFT6FjlQjh6qx0fepmT4aiQj2SxA7U/as+IU9xXNok0="; }; strictDeps = true; # uimac requires xcode postPatch = '' sed -i -e 's/ macuimaybe//' src/Makefile ''; nativeBuildInputs = [ ocamlPackages.ocaml ocamlPackages.findlib ] ++ lib.optionals enableX11 [ copyDesktopItems wrapGAppsHook ]; buildInputs = lib.optionals enableX11 [ gsettings-desktop-schemas ocamlPackages.lablgtk3 ]; makeFlags = [ "PREFIX=$(out)" ] ++ lib.optionals (!ocamlPackages.ocaml.nativeCompilers) [ "NATIVE=false" ]; postInstall = lib.optionalString enableX11 '' install -D $src/icons/U.svg $out/share/icons/hicolor/scalable/apps/unison.svg ''; dontStrip = !ocamlPackages.ocaml.nativeCompilers; desktopItems = lib.optional enableX11 (makeDesktopItem { name = finalAttrs.pname; desktopName = "Unison"; comment = "Bidirectional file synchronizer"; genericName = "File synchronization tool"; exec = "unison-gui"; icon = "unison"; categories = [ "Utility" "FileTools" "GTK" ]; startupNotify = true; startupWMClass = "Unison"; }); meta = with lib; { homepage = "https://www.cis.upenn.edu/~bcpierce/unison/"; description = "Bidirectional file synchronizer"; license = licenses.gpl3Plus; maintainers = with maintainers; [ viric nevivurn ]; platforms = platforms.unix; broken = stdenv.isDarwin && enableX11; # unison-gui and uimac are broken on darwin mainProgram = if enableX11 then "unison-gui" else "unison"; }; })