about summary refs log tree commit diff
path: root/nixpkgs/pkgs/tools/misc/fend
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/tools/misc/fend')
-rw-r--r--nixpkgs/pkgs/tools/misc/fend/default.nix89
1 files changed, 89 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/tools/misc/fend/default.nix b/nixpkgs/pkgs/tools/misc/fend/default.nix
new file mode 100644
index 000000000000..82c99628e1b0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fend/default.nix
@@ -0,0 +1,89 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, darwin
+, pandoc
+, installShellFiles
+, copyDesktopItems
+, makeDesktopItem
+, nix-update-script
+, testers
+, writeText
+, runCommand
+, fend
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fend";
+  version = "1.3.3";
+
+  src = fetchFromGitHub {
+    owner = "printfn";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-4N2MSs4Uhd0NcS57b6qIJd8ovnUVjLiLniMsHTdZHCo=";
+  };
+
+  cargoHash = "sha256-Y8LfkFPM4MKxwW6xk93+vCASkVfsMp3GugjH/kIAvQ8=";
+
+  nativeBuildInputs = [ pandoc installShellFiles copyDesktopItems ];
+  buildInputs = lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
+
+  postBuild = ''
+    patchShebangs --build ./documentation/build.sh
+    ./documentation/build.sh
+  '';
+
+  preFixup = ''
+    installManPage documentation/fend.1
+  '';
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    [[ "$($out/bin/fend "1 km to m")" = "1000 m" ]]
+  '';
+
+  postInstall = ''
+    install -D -m 444 $src/icon/fend-icon-256.png $out/share/icons/hicolor/256x256/apps/fend.png
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "fend";
+      desktopName = "fend";
+      genericName = "Calculator";
+      comment = "Arbitrary-precision unit-aware calculator";
+      icon = "fend";
+      exec = "fend";
+      terminal = true;
+      categories = [ "Utility" "Calculator" "ConsoleOnly" ];
+    })
+  ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests = {
+      version = testers.testVersion { package = fend; };
+      units = testers.testEqualContents {
+        assertion = "fend does simple math and unit conversions";
+        expected = writeText "expected" ''
+          36 kph
+        '';
+        actual = runCommand "actual" { } ''
+          ${lib.getExe fend} '(100 meters) / (10 seconds) to kph' > $out
+        '';
+      };
+    };
+  };
+
+  meta = with lib; {
+    description = "Arbitrary-precision unit-aware calculator";
+    homepage = "https://github.com/printfn/fend";
+    changelog = "https://github.com/printfn/fend/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ djanatyn liff ];
+    mainProgram = "fend";
+  };
+}