about summary refs log tree commit diff
path: root/pkgs/by-name/fz/fzf/package.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/by-name/fz/fzf/package.nix')
-rw-r--r--pkgs/by-name/fz/fzf/package.nix91
1 files changed, 91 insertions, 0 deletions
diff --git a/pkgs/by-name/fz/fzf/package.nix b/pkgs/by-name/fz/fzf/package.nix
new file mode 100644
index 0000000000000..e243d515fa144
--- /dev/null
+++ b/pkgs/by-name/fz/fzf/package.nix
@@ -0,0 +1,91 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, runtimeShell
+, installShellFiles
+, bc
+, ncurses
+, testers
+, fzf
+}:
+
+buildGoModule rec {
+  pname = "fzf";
+  version = "0.51.0";
+
+  src = fetchFromGitHub {
+    owner = "junegunn";
+    repo = "fzf";
+    rev = version;
+    hash = "sha256-ybg2Zq2J/3lyIFnQpnPbRe6D8iD+hgiiA02EatOQVkI=";
+  };
+
+  vendorHash = "sha256-Ho2jVD/U/2BFt3BF5w+KHp5nSVmukx0o2l3ISDGDSt0=";
+
+  CGO_ENABLED = 0;
+
+  outputs = [ "out" "man" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = [ ncurses ];
+
+  ldflags = [
+    "-s" "-w" "-X main.version=${version} -X main.revision=${src.rev}"
+  ];
+
+  # The vim plugin expects a relative path to the binary; patch it to abspath.
+  postPatch = ''
+    sed -i -e "s|expand('<sfile>:h:h')|'$out'|" plugin/fzf.vim
+
+    if ! grep -q $out plugin/fzf.vim; then
+        echo "Failed to replace vim base_dir path with $out"
+        exit 1
+    fi
+
+    # fzf-tmux depends on bc
+    substituteInPlace bin/fzf-tmux \
+      --replace "bc" "${bc}/bin/bc"
+  '';
+
+  postInstall = ''
+    install bin/fzf-tmux $out/bin
+
+    installManPage man/man1/fzf.1 man/man1/fzf-tmux.1
+
+    install -D plugin/* -t $out/share/vim-plugins/${pname}/plugin
+    mkdir -p $out/share/nvim
+    ln -s $out/share/vim-plugins/${pname} $out/share/nvim/site
+
+    # Install shell integrations
+    install -D shell/* -t $out/share/fzf/
+    install -D shell/key-bindings.fish $out/share/fish/vendor_functions.d/fzf_key_bindings.fish
+    mkdir -p $out/share/fish/vendor_conf.d
+    cat << EOF > $out/share/fish/vendor_conf.d/load-fzf-key-bindings.fish
+      status is-interactive; or exit 0
+      fzf_key_bindings
+    EOF
+
+    cat <<SCRIPT > $out/bin/fzf-share
+    #!${runtimeShell}
+    # Run this script to find the fzf shared folder where all the shell
+    # integration scripts are living.
+    echo $out/share/fzf
+    SCRIPT
+    chmod +x $out/bin/fzf-share
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = fzf;
+  };
+
+  meta = {
+    changelog = "https://github.com/junegunn/fzf/blob/${version}/CHANGELOG.md";
+    description = "Command-line fuzzy finder written in Go";
+    homepage = "https://github.com/junegunn/fzf";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ Br1ght0ne ma27 zowoq ];
+    mainProgram = "fzf";
+    platforms = lib.platforms.unix;
+  };
+}