aboutsummaryrefslogtreecommitdiff
path: root/.local/bin/,
blob: 58ed5efbd28b5cea731ba2584d4f6c513e49c8d3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/bin/sh -eu
# Idea condensed from https://github.com/Shopify/comma

program=$(basename "$0")
requires="$(command -V nix-index nix-locate nix-shell fzf | awk '{ print $1, $3 }' | column -t)"

help() {
printf \
"
Usage: %s [FLAGS]... [ARGUMENT]...

The wrapper $program shall search all nix
packages for a file and set up a nix shell for the
program that contains that file. The shell prints
all binaries in the package upon invocation.

Create and update the file database by running
the nix-index command. Warning: This command uses
up a large amount of memory.

nix-index --nixpkgs https://github.com/NixOS/nixpkgs/archive/master.tar.gz

  Command List:

   $program [ARGUMENT]...        Search for packages using file name argument.
   $program --help               Show this help menu.
   $program --check              Check dependencies.
" "$program"
}

[ "${1:-}" = "--check" ] && printf '%s\n' "$requires" && exit

{ [ "${1:-}" = "-h" ] || [ "${1:-}" = "--help" ] || [ "$#" = 0 ]; } && help && exit

databasePath=${XDG_DATA_HOME:-~/.cache}/nix-index
nixLocate='nix-locate --db '"$databasePath"' -- '"${1:-}"
attributes=$($nixLocate | awk '{ print $1, $4 }' | sed 's|/nix/store/.[^-]*-||g')
attribute=$(printf '%s' "$attributes" | column --table | fzf | awk '{ print $1 }')

[ -z "$attribute" ] && exit

printf '\nsetting up shell with %s path...\n' "$attribute"

nix-shell --packages "$attribute" fish bat toybox --command \
'
  home=$TMPDIR/nix-shell-tmp-home.r2np9PHrby
  program=$(printf "%s" "$buildInputs" | cut --delimiter=" " --fields=1)
  path=$(IFS=" " && for buildInput in $buildInputs; do printf "%s/bin " "$buildInput"; done | sed "s/ /:/g")
  printf "\n";
  { [ -d "$program/bin" ] && ls "$program/bin"; } || printf "%s\n" "$program";
  printf "\n";
  tree -L 1 "$program";
  printf "\n";

  /usr/bin/env --ignore-environment /bin/sh -c \
  "
    export PATH=$path
    export DISPLAY=$DISPLAY
    export XAUTHORITY=$XAUTHORITY
    export TERM=$TERM
    export TERMINFO=$TERMINFO
    export TERMINFO_DIRS=$TERMINFO_DIRS
    export HOME=$home
    export OUT=$program
    export fish_greeting=
    mkdir --parents $home
    cd || exit 1
    fish --init-command=\"
      function fish_prompt; printf '"'nix-shell@$attribute $ '"'; end
      set -U fish_color_normal B3B1AD
      set -U fish_color_command 39BAE6
      set -U fish_color_quote C2D94C
      set -U fish_color_redirection FFEE99
      set -U fish_color_end F29668
      set -U fish_color_error FF3333
      set -U fish_color_param 39BAE6
      set -U fish_color_comment 626A73
      set -U fish_color_match F07178
      set -U fish_color_selection E6B450
      set -U fish_color_search_match E6B450
      set -U fish_color_history_current --bold
      set -U fish_color_operator E6B450
      set -U fish_color_escape 95E6CB
      set -U fish_color_cwd 59C2FF
      set -U fish_color_cwd_root red
      set -U fish_color_valid_path --underline
      set -U fish_color_autosuggestion aaaaaa
      set -U fish_color_user brgreen
      set -U fish_color_host normal
      set -U fish_color_cancel -r
      set -U fish_pager_color_completion normal
      set -U fish_pager_color_description B3A06D yellow
      set -U fish_pager_color_prefix white --bold --underline
      set -U fish_pager_color_progress brwhite --background=cyan
    \"
  "
';