diff --git a/doc/packages/shell-helpers.section.md b/doc/packages/shell-helpers.section.md index e7c2b0abebfc..1c73303f8284 100644 --- a/doc/packages/shell-helpers.section.md +++ b/doc/packages/shell-helpers.section.md @@ -2,11 +2,11 @@ Some packages provide the shell integration to be more useful. But unlike other systems, nix doesn't have a standard `share` directory location. This is why a bunch `PACKAGE-share` scripts are shipped that print the location of the corresponding shared folder. Current list of such packages is as following: -- `fzf` : `fzf-share` +- `sk` : `sk-share` -E.g. `fzf` can then be used in the `.bashrc` like this: +E.g. `sk` can then be used in the `.bashrc` like this: ```bash -source "$(fzf-share)/completion.bash" -source "$(fzf-share)/key-bindings.bash" +source "$(sk-share)/completion.bash" +source "$(sk-share)/key-bindings.bash" ``` diff --git a/nixos/doc/manual/release-notes/rl-2305.section.md b/nixos/doc/manual/release-notes/rl-2305.section.md index ce874a6e0b2d..031442940b9e 100644 --- a/nixos/doc/manual/release-notes/rl-2305.section.md +++ b/nixos/doc/manual/release-notes/rl-2305.section.md @@ -79,7 +79,7 @@ In addition to numerous new and updated packages, this release has the following - [frigate](https://frigate.video), an open source NVR built around real-time AI object detection. Available as [services.frigate](#opt-services.frigate.enable). -- [fzf](https://github.com/junegunn/fzf), a command line fuzzyfinder. Available as [programs.fzf](#opt-programs.fzf.fuzzyCompletion). +- [fzf](https://github.com/junegunn/fzf), a command line fuzzyfinder. Available as [programs.fzf](#opt-programs.fzf.enable). - [gemstash](https://github.com/rubygems/gemstash), a RubyGems.org cache and private gem server. Available as [services.gemstash](#opt-services.gemstash.enable). diff --git a/nixos/doc/manual/release-notes/rl-2405.section.md b/nixos/doc/manual/release-notes/rl-2405.section.md index 06c360c33bbd..914129609e4f 100644 --- a/nixos/doc/manual/release-notes/rl-2405.section.md +++ b/nixos/doc/manual/release-notes/rl-2405.section.md @@ -304,6 +304,8 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m - `xxd` has been moved from `vim` default output to its own output to reduce closure size. The canonical way to reference it across all platforms is `unixtools.xxd`. +- `programs.fzf.keybindings` and `programs.fzf.fuzzyCompletion` got replaced by `programs.fzf.enabled` as shell-completion is included in the fzf-binary now there is no easy option to load completion and keybindings separately. Please consult fzf-documentation on how to configure/disable certain keybindings. + - The `stalwart-mail` package has been updated to v0.5.3, which includes [breaking changes](https://github.com/stalwartlabs/mail-server/blob/v0.5.3/UPGRADING.md). - `services.zope2` has been removed as `zope2` is unmaintained and was relying on Python2. diff --git a/nixos/modules/programs/fzf.nix b/nixos/modules/programs/fzf.nix index 7c4f338e29b3..24fca7b33291 100644 --- a/nixos/modules/programs/fzf.nix +++ b/nixos/modules/programs/fzf.nix @@ -1,32 +1,46 @@ { pkgs, config, lib, ... }: + with lib; + let cfg = config.programs.fzf; + in { - options = { - programs.fzf = { - fuzzyCompletion = mkEnableOption (mdDoc "fuzzy completion with fzf"); - keybindings = mkEnableOption (mdDoc "fzf keybindings"); - }; - }; - config = { - environment.systemPackages = optional (cfg.keybindings || cfg.fuzzyCompletion) pkgs.fzf; + imports = [ + (lib.mkRemovedOptionModule [ "programs" "fzf" "keybindings" ] '' + Use "programs.fzf.enabled" instead, due to fzf upstream-change it's not possible to load shell-completion and keybindings separately. + If you want to change/disable certain keybindings please check the fzf-documentation. + '') + (lib.mkRemovedOptionModule [ "programs" "fzf" "fuzzyCompletion" ] '' + Use "programs.fzf.enabled" instead, due to fzf upstream-change it's not possible to load shell-completion and keybindings separately. + If you want to change/disable certain keybindings please check the fzf-documentation. + '') + ]; - programs.bash.interactiveShellInit = optionalString cfg.fuzzyCompletion '' - source ${pkgs.fzf}/share/fzf/completion.bash - '' + optionalString cfg.keybindings '' - source ${pkgs.fzf}/share/fzf/key-bindings.bash + options = { + programs.fzf.enable = mkEnableOption (mdDoc "fuzzy completion with fzf and keybindings"); + }; + + config = mkIf cfg.enable { + environment.systemPackages = [ pkgs.fzf ]; + + programs.bash.interactiveShellInit = '' + eval "$(${getExe pkgs.fzf} --bash)" ''; - programs.zsh.interactiveShellInit = optionalString (!config.programs.zsh.ohMyZsh.enable) - (optionalString cfg.fuzzyCompletion '' - source ${pkgs.fzf}/share/fzf/completion.zsh - '' + optionalString cfg.keybindings '' - source ${pkgs.fzf}/share/fzf/key-bindings.zsh - ''); + programs.fish.interactiveShellInit = '' + ${getExe pkgs.fzf} --fish | source + ''; - programs.zsh.ohMyZsh.plugins = lib.mkIf (cfg.keybindings || cfg.fuzzyCompletion) [ "fzf" ]; + programs.zsh = { + interactiveShellInit = optionalString (!config.programs.zsh.ohMyZsh.enable) '' + eval "$(${getExe pkgs.fzf} --zsh)" + ''; + + ohMyZsh.plugins = mkIf (config.programs.zsh.ohMyZsh.enable) [ "fzf" ]; + }; }; + meta.maintainers = with maintainers; [ laalsaas ]; } diff --git a/pkgs/tools/misc/fzf/default.nix b/pkgs/tools/misc/fzf/default.nix index 4fbeded64348..94ec13ead9e4 100644 --- a/pkgs/tools/misc/fzf/default.nix +++ b/pkgs/tools/misc/fzf/default.nix @@ -1,27 +1,13 @@ -{ stdenv -, lib +{ lib , buildGoModule , fetchFromGitHub -, writeShellScriptBin -, runtimeShell , installShellFiles , bc , ncurses -, perl , testers , fzf }: -let - # on Linux, wrap perl in the bash completion scripts with the glibc locales, - # so that using the shell completion (ctrl+r, etc) doesn't result in ugly - # warnings on non-nixos machines - ourPerl = if !stdenv.isLinux then perl else ( - writeShellScriptBin "perl" '' - export PERL_BADLANG=0 - exec ${perl}/bin/perl "$@" - ''); -in buildGoModule rec { pname = "fzf"; version = "0.49.0"; @@ -56,14 +42,9 @@ buildGoModule rec { exit 1 fi - # Has a sneaky dependency on perl - # Include first args to make sure we're patching the right thing - substituteInPlace shell/key-bindings.bash \ - --replace "command -v perl" "command -v ${ourPerl}/bin/perl" \ - --replace " perl -n " " ${ourPerl}/bin/perl -n " # fzf-tmux depends on bc - substituteInPlace bin/fzf-tmux \ - --replace "bc" "${bc}/bin/bc" + substituteInPlace bin/fzf-tmux \ + --replace "bc" "${bc}/bin/bc" ''; postInstall = '' @@ -74,23 +55,6 @@ buildGoModule rec { 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 <