summary refs log tree commit diff
path: root/pkgs/applications/networking/sync/unison/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/networking/sync/unison/default.nix')
-rw-r--r--pkgs/applications/networking/sync/unison/default.nix75
1 files changed, 52 insertions, 23 deletions
diff --git a/pkgs/applications/networking/sync/unison/default.nix b/pkgs/applications/networking/sync/unison/default.nix
index 9ab8d441508..b106deb074e 100644
--- a/pkgs/applications/networking/sync/unison/default.nix
+++ b/pkgs/applications/networking/sync/unison/default.nix
@@ -1,12 +1,22 @@
-{lib, stdenv, fetchFromGitHub, ocamlPackages, fontschumachermisc, xset, makeWrapper, ncurses, gnugrep, fetchpatch
-, enableX11 ? true}:
-
-let inherit (ocamlPackages) ocaml lablgtk; in
-
-stdenv.mkDerivation (rec {
+{ lib
+, stdenv
+, fetchFromGitHub
+, ocamlPackages
+, fontschumachermisc
+, xset
+, makeWrapper
+, ncurses
+, gnugrep
+, fetchpatch
+, copyDesktopItems
+, makeDesktopItem
+, enableX11 ? true
+}:
 
+stdenv.mkDerivation rec {
   pname = "unison";
   version = "2.51.3";
+
   src = fetchFromGitHub {
     owner = "bcpierce00";
     repo = "unison";
@@ -14,8 +24,9 @@ stdenv.mkDerivation (rec {
     sha256 = "sha256-42hmdMwOYSWGiDCmhuqtpCWtvtyD2l+kA/bhHD/Qh5Y=";
   };
 
-  nativeBuildInputs = [ makeWrapper ];
-  buildInputs = [ ocaml ncurses ];
+  nativeBuildInputs = [ makeWrapper ]
+    ++ lib.optional enableX11 copyDesktopItems;
+  buildInputs = [ ocamlPackages.ocaml ncurses ];
 
   patches = [
     # Patch to fix build with ocaml 4.12. Remove in 2.51.4
@@ -27,34 +38,52 @@ stdenv.mkDerivation (rec {
     })
   ];
 
-  preBuild = (if enableX11 then ''
-    sed -i "s|\(OCAMLOPT=.*\)$|\1 -I $(echo "${lablgtk}"/lib/ocaml/*/site-lib/lablgtk2)|" src/Makefile.OCaml
-  '' else "") + ''
-  echo -e '\ninstall:\n\tcp $(FSMONITOR)$(EXEC_EXT) $(INSTALLDIR)' >> src/fsmonitor/linux/Makefile
+  preBuild = lib.optionalString enableX11 ''
+    sed -i "s|\(OCAMLOPT=.*\)$|\1 -I $(echo "${ocamlPackages.lablgtk}"/lib/ocaml/*/site-lib/lablgtk2)|" src/Makefile.OCaml
+  '' + ''
+    echo -e '\ninstall:\n\tcp $(FSMONITOR)$(EXEC_EXT) $(INSTALLDIR)' >> src/fsmonitor/linux/Makefile
   '';
 
   makeFlags = [
     "INSTALLDIR=$(out)/bin/"
     "UISTYLE=${if enableX11 then "gtk2" else "text"}"
-  ] ++ lib.optional (!ocaml.nativeCompilers) "NATIVE=false";
+  ] ++ lib.optional (!ocamlPackages.ocaml.nativeCompilers) "NATIVE=false";
 
-  preInstall = "mkdir -p $out/bin";
+  preInstall = ''
+    mkdir -p $out/bin
+  '';
 
-  postInstall = if enableX11 then ''
+  postInstall = lib.optionalString enableX11 ''
     for i in $(cd $out/bin && ls); do
       wrapProgram $out/bin/$i \
         --run "[ -n \"\$DISPLAY\" ] && (${xset}/bin/xset q | ${gnugrep}/bin/grep -q \"${fontschumachermisc}\" || ${xset}/bin/xset +fp \"${fontschumachermisc}/lib/X11/fonts/misc\")"
     done
-  '' else "";
 
-  dontStrip = !ocaml.nativeCompilers;
+    install -D $src/icons/U.svg $out/share/icons/hicolor/scalable/apps/unison.svg
+  '';
+
+  dontStrip = !ocamlPackages.ocaml.nativeCompilers;
 
-  meta = {
+  desktopItems = lib.optional enableX11 (makeDesktopItem {
+    name = pname;
+    desktopName = "Unison";
+    comment = "Bidirectional file synchronizer";
+    genericName = "File synchronization tool";
+    exec = "unison";
+    icon = "unison";
+    categories = "Utility;FileTools;GTK;";
+    extraDesktopEntries = {
+      StartupWMClass = "Unison";
+      StartupNotify = "true";
+      X-MultipleArgs = "false";
+    };
+  });
+
+  meta = with lib; {
     homepage = "https://www.cis.upenn.edu/~bcpierce/unison/";
     description = "Bidirectional file synchronizer";
-    license = lib.licenses.gpl3Plus;
-    maintainers = with lib.maintainers; [viric];
-    platforms = with lib.platforms; unix;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ viric ];
+    platforms = platforms.unix;
   };
-
-})
+}