diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index f7321904170a..9faa58409b19 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -216,6 +216,7 @@ ./programs/screen.nix ./programs/sedutil.nix ./programs/seahorse.nix + ./programs/skim.nix ./programs/slock.nix ./programs/shadow.nix ./programs/spacefm.nix diff --git a/nixos/modules/programs/skim.nix b/nixos/modules/programs/skim.nix new file mode 100644 index 000000000000..1333cdd30ab2 --- /dev/null +++ b/nixos/modules/programs/skim.nix @@ -0,0 +1,30 @@ +{ pkgs, config, lib, ... }: +let + inherit (lib) mdDoc mkEnableOption mkPackageOption optional optionalString; + cfg = config.programs.skim; +in +{ + options = { + programs.skim = { + fuzzyCompletion = mkEnableOption (mdDoc "fuzzy Completion with skim"); + keybindings = mkEnableOption (mdDoc "skim keybindings"); + package = mkPackageOption pkgs "skim" {}; + }; + }; + + config = { + environment.systemPackages = optional (cfg.keybindings || cfg.fuzzyCompletion) cfg.package; + + programs.bash.interactiveShellInit = optionalString cfg.fuzzyCompletion '' + source ${cfg.package}/share/skim/completion.bash + '' + optionalString cfg.keybindings '' + source ${cfg.package}/share/skim/key-bindings.bash + ''; + + programs.zsh.interactiveShellInit = optionalString cfg.fuzzyCompletion '' + source ${cfg.package}/share/skim/completion.zsh + '' + optionalString cfg.keybindings '' + source ${cfg.package}/share/skim/key-bindings.zsh + ''; + }; +} diff --git a/pkgs/tools/misc/skim/default.nix b/pkgs/tools/misc/skim/default.nix index 919099e8e41f..3a999bb0e201 100644 --- a/pkgs/tools/misc/skim/default.nix +++ b/pkgs/tools/misc/skim/default.nix @@ -1,4 +1,9 @@ -{ lib, stdenv, fetchCrate, rustPlatform }: +{ lib +, stdenv +, fetchCrate +, rustPlatform +, installShellFiles +}: rustPlatform.buildRustPackage rec { pname = "skim"; @@ -9,6 +14,8 @@ rustPlatform.buildRustPackage rec { sha256 = "sha256-LkPkwYsaSLfaZktHF23Fgaks+fDlbB1S6SRgXtJRBqQ="; }; + nativeBuildInputs = [ installShellFiles ]; + outputs = [ "out" "vim" ]; cargoSha256 = "sha256-lG26dgvjqCZ/4KgzurMrlhl+JKec+xLt/5uA6XcsSPk="; @@ -19,10 +26,15 @@ rustPlatform.buildRustPackage rec { postInstall = '' install -D -m 555 bin/sk-tmux -t $out/bin - install -D -m 644 man/man1/* -t $out/man/man1 - install -D -m 444 shell/* -t $out/share/skim + install -D -m 444 plugin/skim.vim -t $vim/plugin + install -D -m 444 shell/* -t $out/share/skim + install -D shell/key-bindings.fish $out/share/fish/vendor_functions.d/sk_key_bindings.fish + mkdir -p $out/share/fish/vendor_conf.d + echo sk_key_bindings > $out/share/fish/vendor_conf.d/load-sk-key-bindings.fish + installManPage man/man1/* + cat <