From ac9d61188407fb6d133a0f0a8912a04f4d860677 Mon Sep 17 00:00:00 2001 From: tv Date: Tue, 16 Jun 2020 20:27:59 +0200 Subject: fzfmenu: make -name and -title configurable --- krebs/5pkgs/simple/fzfmenu/default.nix | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) (limited to 'krebs/5pkgs/simple/fzfmenu/default.nix') diff --git a/krebs/5pkgs/simple/fzfmenu/default.nix b/krebs/5pkgs/simple/fzfmenu/default.nix index 64e95d23..1ee55a5a 100644 --- a/krebs/5pkgs/simple/fzfmenu/default.nix +++ b/krebs/5pkgs/simple/fzfmenu/default.nix @@ -1,4 +1,31 @@ -{ pkgs, ... }: +with import ; +{ pkgs, ... }@args: + +let + # config cannot be declared in the input attribute set because that would + # cause callPackage to inject the wrong config. Instead, get it from ... + # via args. + config = args.config or {}; + + cfg = eval.config; + + eval = evalModules { + modules = singleton { + _file = toString ./profile.nix; + imports = singleton config; + options = { + appName = mkOption { + default = "fzfmenu"; + type = types.label; + }; + windowTitle = mkOption { + default = "fzfmenu"; + type = types.str; + }; + }; + }; + }; +in pkgs.writeDashBin "fzfmenu" '' set -efu @@ -34,7 +61,8 @@ pkgs.writeDashBin "fzfmenu" '' OUTPUT="$(${pkgs.coreutils}/bin/mktemp)" if [ -z ''${TERM+x} ]; then #check if we can print fzf in the shell ${pkgs.rxvt_unicode}/bin/urxvt \ - -name fzfmenu -title fzfmenu \ + -name ${cfg.appName} \ + -title ${shell.escape cfg.windowTitle} \ -e ${pkgs.dash}/bin/dash -c \ "echo \"$INPUT\" | ${pkgs.fzf}/bin/fzf \ --history=/dev/null \ -- cgit v1.2.3 From 59aa9811f3d4b9e4762ec20c5424b42b170bd782 Mon Sep 17 00:00:00 2001 From: tv Date: Tue, 16 Jun 2020 21:13:00 +0200 Subject: fzfmenu: DRY and don't create temporary file --- krebs/5pkgs/simple/fzfmenu/default.nix | 80 +++++++++++++++++----------------- 1 file changed, 39 insertions(+), 41 deletions(-) (limited to 'krebs/5pkgs/simple/fzfmenu/default.nix') diff --git a/krebs/5pkgs/simple/fzfmenu/default.nix b/krebs/5pkgs/simple/fzfmenu/default.nix index 1ee55a5a..6d5e3798 100644 --- a/krebs/5pkgs/simple/fzfmenu/default.nix +++ b/krebs/5pkgs/simple/fzfmenu/default.nix @@ -29,55 +29,53 @@ in pkgs.writeDashBin "fzfmenu" '' set -efu + + # Spawn terminal if called without one, like e.g. from a window manager. + if [ -z ''${TERM+x} ]; then + exec 3<&0 + exec 4>&1 + export FZFMENU_INPUT_FD=3 + export FZFMENU_OUTPUT_FD=4 + exec ${pkgs.rxvt_unicode}/bin/urxvt \ + -name ${cfg.appName} \ + -title ${shell.escape cfg.windowTitle} \ + -e "$0" "$@" + else + exec 0<&''${FZFMENU_INPUT_FD-0} + exec 1>&''${FZFMENU_OUTPUT_FD-1} + fi + PROMPT=">" - for i in "$@" - do - case $i in + for i in "$@"; do + case $i in -p) - PROMPT="$2" - shift - shift - break - ;; + PROMPT=$2 + shift 2 + break + ;; -l) - # no reason to filter number of lines - LINES="$2" - shift - shift - break - ;; + # no reason to filter number of lines + LINES=$2 + shift 2 + break + ;; -i) - # we do this anyway - shift - break - ;; + # we do this anyway + shift + break + ;; *) - echo "Unknown option $1" >&2 - shift - ;; - esac + echo "Unknown option $1" >&2 + shift + ;; + esac done - INPUT=$(${pkgs.coreutils}/bin/cat) - OUTPUT="$(${pkgs.coreutils}/bin/mktemp)" - if [ -z ''${TERM+x} ]; then #check if we can print fzf in the shell - ${pkgs.rxvt_unicode}/bin/urxvt \ - -name ${cfg.appName} \ - -title ${shell.escape cfg.windowTitle} \ - -e ${pkgs.dash}/bin/dash -c \ - "echo \"$INPUT\" | ${pkgs.fzf}/bin/fzf \ - --history=/dev/null \ - --print-query \ - --prompt=\"$PROMPT\" \ - --reverse \ - > \"$OUTPUT\"" 2>/dev/null - else - echo "$INPUT" | ${pkgs.fzf}/bin/fzf \ + + ${pkgs.fzf}/bin/fzf \ --history=/dev/null \ --print-query \ --prompt="$PROMPT" \ --reverse \ - > "$OUTPUT" - fi - ${pkgs.coreutils}/bin/tail -1 "$OUTPUT" - ${pkgs.coreutils}/bin/rm "$OUTPUT" + | + ${pkgs.coreutils}/bin/tail -1 '' -- cgit v1.2.3 From 773095812fa57d2f78bc7a2f491ef5dc9188b2bf Mon Sep 17 00:00:00 2001 From: tv Date: Tue, 16 Jun 2020 21:16:25 +0200 Subject: fzfmenu: make default prompt configurable --- krebs/5pkgs/simple/fzfmenu/default.nix | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'krebs/5pkgs/simple/fzfmenu/default.nix') diff --git a/krebs/5pkgs/simple/fzfmenu/default.nix b/krebs/5pkgs/simple/fzfmenu/default.nix index 6d5e3798..446419a0 100644 --- a/krebs/5pkgs/simple/fzfmenu/default.nix +++ b/krebs/5pkgs/simple/fzfmenu/default.nix @@ -14,6 +14,10 @@ let _file = toString ./profile.nix; imports = singleton config; options = { + defaultPrompt = mkOption { + default = ">"; + type = types.str; + }; appName = mkOption { default = "fzfmenu"; type = types.label; @@ -45,7 +49,7 @@ pkgs.writeDashBin "fzfmenu" '' exec 1>&''${FZFMENU_OUTPUT_FD-1} fi - PROMPT=">" + PROMPT=${shell.escape cfg.defaultPrompt} for i in "$@"; do case $i in -p) -- cgit v1.2.3 From 3197b9a93007cda073df939c40131fda15415a64 Mon Sep 17 00:00:00 2001 From: tv Date: Tue, 16 Jun 2020 21:19:23 +0200 Subject: fzfmenu: support $FZFMENU_FZF_DEFAULT_OPTS --- krebs/5pkgs/simple/fzfmenu/default.nix | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'krebs/5pkgs/simple/fzfmenu/default.nix') diff --git a/krebs/5pkgs/simple/fzfmenu/default.nix b/krebs/5pkgs/simple/fzfmenu/default.nix index 446419a0..04e53899 100644 --- a/krebs/5pkgs/simple/fzfmenu/default.nix +++ b/krebs/5pkgs/simple/fzfmenu/default.nix @@ -75,6 +75,11 @@ pkgs.writeDashBin "fzfmenu" '' esac done + FZF_DEFAULT_OPTS=''${FZFMENU_FZF_DEFAULT_OPTS-} + if test -n "$FZF_DEFAULT_OPTS"; then + export FZF_DEFAULT_OPTS + fi + ${pkgs.fzf}/bin/fzf \ --history=/dev/null \ --print-query \ -- cgit v1.2.3 From aa019f372e603fa74469c9483481ea15623d7a7e Mon Sep 17 00:00:00 2001 From: tv Date: Tue, 16 Jun 2020 21:38:24 +0200 Subject: fzfmenu: make --print-query configurable --- krebs/5pkgs/simple/fzfmenu/default.nix | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'krebs/5pkgs/simple/fzfmenu/default.nix') diff --git a/krebs/5pkgs/simple/fzfmenu/default.nix b/krebs/5pkgs/simple/fzfmenu/default.nix index 04e53899..4c7784b4 100644 --- a/krebs/5pkgs/simple/fzfmenu/default.nix +++ b/krebs/5pkgs/simple/fzfmenu/default.nix @@ -14,13 +14,17 @@ let _file = toString ./profile.nix; imports = singleton config; options = { + appName = mkOption { + default = "fzfmenu"; + type = types.label; + }; defaultPrompt = mkOption { default = ">"; type = types.str; }; - appName = mkOption { - default = "fzfmenu"; - type = types.label; + printQuery = mkOption { + default = true; + type = types.bool; }; windowTitle = mkOption { default = "fzfmenu"; @@ -82,9 +86,8 @@ pkgs.writeDashBin "fzfmenu" '' ${pkgs.fzf}/bin/fzf \ --history=/dev/null \ - --print-query \ --prompt="$PROMPT" \ --reverse \ - | - ${pkgs.coreutils}/bin/tail -1 + ${optionalString cfg.printQuery "--print-query"} \ + ${optionalString cfg.printQuery "| ${pkgs.coreutils}/bin/tail -1"} '' -- cgit v1.2.3 From f027eaacf27da0661cc9e0d062d64884b22ce290 Mon Sep 17 00:00:00 2001 From: tv Date: Tue, 16 Jun 2020 21:38:32 +0200 Subject: fzfmenu: make --reverse configurable --- krebs/5pkgs/simple/fzfmenu/default.nix | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'krebs/5pkgs/simple/fzfmenu/default.nix') diff --git a/krebs/5pkgs/simple/fzfmenu/default.nix b/krebs/5pkgs/simple/fzfmenu/default.nix index 4c7784b4..76235ddb 100644 --- a/krebs/5pkgs/simple/fzfmenu/default.nix +++ b/krebs/5pkgs/simple/fzfmenu/default.nix @@ -26,6 +26,10 @@ let default = true; type = types.bool; }; + reverse = mkOption { + default = true; + type = types.bool; + }; windowTitle = mkOption { default = "fzfmenu"; type = types.str; @@ -87,7 +91,7 @@ pkgs.writeDashBin "fzfmenu" '' ${pkgs.fzf}/bin/fzf \ --history=/dev/null \ --prompt="$PROMPT" \ - --reverse \ + ${optionalString cfg.reverse "--reverse"} \ ${optionalString cfg.printQuery "--print-query"} \ ${optionalString cfg.printQuery "| ${pkgs.coreutils}/bin/tail -1"} '' -- cgit v1.2.3 From 4a31be59b8731c13405f38a76904662a2c344203 Mon Sep 17 00:00:00 2001 From: tv Date: Tue, 16 Jun 2020 21:42:35 +0200 Subject: fzfmenu: selectively override FZF_DEFAULT_OPTS --- krebs/5pkgs/simple/fzfmenu/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'krebs/5pkgs/simple/fzfmenu/default.nix') diff --git a/krebs/5pkgs/simple/fzfmenu/default.nix b/krebs/5pkgs/simple/fzfmenu/default.nix index 76235ddb..537b90f4 100644 --- a/krebs/5pkgs/simple/fzfmenu/default.nix +++ b/krebs/5pkgs/simple/fzfmenu/default.nix @@ -83,8 +83,8 @@ pkgs.writeDashBin "fzfmenu" '' esac done - FZF_DEFAULT_OPTS=''${FZFMENU_FZF_DEFAULT_OPTS-} - if test -n "$FZF_DEFAULT_OPTS"; then + if test -n "''${FZFMENU_FZF_DEFAULT_OPTS-}"; then + FZF_DEFAULT_OPTS=''${FZFMENU_FZF_DEFAULT_OPTS-} export FZF_DEFAULT_OPTS fi -- cgit v1.2.3