aboutsummaryrefslogtreecommitdiff
path: root/modules/programs/fzf.nix
diff options
context:
space:
mode:
authorRobert Helgesson <robert@rycee.net>2018-02-18 09:45:10 +0100
committerRobert Helgesson <robert@rycee.net>2018-03-07 22:44:29 +0100
commitfa7d63d9d1fbee1423272bb281f41e8dd5da74bd (patch)
tree77b93660206c231fd8af99815437604d2df9925c /modules/programs/fzf.nix
parent46a94cce566a5293ae3fb8876ec3fd916eda9fa8 (diff)
fzf: add module
Diffstat (limited to 'modules/programs/fzf.nix')
-rw-r--r--modules/programs/fzf.nix78
1 files changed, 78 insertions, 0 deletions
diff --git a/modules/programs/fzf.nix b/modules/programs/fzf.nix
new file mode 100644
index 00000000000..7949f7f8f16
--- /dev/null
+++ b/modules/programs/fzf.nix
@@ -0,0 +1,78 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ cfg = config.programs.fzf;
+
+in
+
+{
+ options.programs.fzf = {
+ enable = mkEnableOption "fzf - a command-line fuzzy finder";
+
+ defaultOptions = mkOption {
+ type = types.listOf types.str;
+ default = [];
+ example = [ "--height 40%" "--border" ];
+ description = ''
+ Extra command line options given to fzf by default.
+ '';
+ };
+
+ fileWidgetOptions = mkOption {
+ type = types.listOf types.str;
+ default = [];
+ example = [ "--preview 'head {}'" ];
+ description = ''
+ Command line options for the CTRL-T keybinding.
+ '';
+ };
+
+ changeDirWidgetOptions = mkOption {
+ type = types.listOf types.str;
+ default = [];
+ example = [ "--preview 'tree -C {} | head -200'" ];
+ description = ''
+ Command line options for the ALT-C keybinding.
+ '';
+ };
+
+ historyWidgetOptions = mkOption {
+ type = types.listOf types.str;
+ default = [];
+ example = [ "--sort" "--exact" ];
+ description = ''
+ Command line options for the CTRL-R keybinding.
+ '';
+ };
+
+ enableBashIntegration = mkOption {
+ default = true;
+ type = types.bool;
+ description = ''
+ Whether to enable Bash integration.
+ '';
+ };
+ };
+
+ config = mkIf cfg.enable {
+ home.packages = [ pkgs.fzf ];
+
+ home.sessionVariables =
+ mapAttrs (n: v: toString v) (
+ filterAttrs (n: v: v != []) {
+ FZF_ALT_C_OPTS = cfg.changeDirWidgetOptions;
+ FZF_CTRL_R_OPTS = cfg.historyWidgetOptions;
+ FZF_CTRL_T_OPTS = cfg.fileWidgetOptions;
+ FZF_DEFAULT_OPTS = cfg.defaultOptions;
+ }
+ );
+
+ programs.bash.initExtra = mkIf cfg.enableBashIntegration ''
+ . ${pkgs.fzf}/share/fzf/completion.bash
+ . ${pkgs.fzf}/share/fzf/key-bindings.bash
+ '';
+ };
+}