From efb336a23b65a9a2d56889396b13c1757bdaf354 Mon Sep 17 00:00:00 2001
From: Roger Gonzalez
Date: Sun, 29 Dec 2019 14:58:33 -0300
Subject: Initial commit
---
.config/conky/litecrc | 116 +
.config/conky/start.sh | 6 +
.config/conky/weather.py | 51 +
.config/fish/.gitignore | 2 +
.config/fish/README.md | 13 +
.config/fish/abbreviations.fish | 85 +
.config/fish/completions/fisher.fish | 1 +
.config/fish/conf.d/omf.fish | 7 +
.config/fish/config.fish | 11 +
.config/fish/fish_variables | 104 +
.config/fish/fishd.roger-pc | 33 +
.config/fish/functions/fish_greeting.fish | 2 +
.config/fish/functions/fish_prompt.fish | 1 +
.config/fish/functions/fisher.fish | 430 ++
.config/fish/preview.png | Bin 0 -> 84422 bytes
.../matchai/spacefish/.all-contributorsrc | 233 +
.../github.com/matchai/spacefish/.editorconfig | 12 +
.../matchai/spacefish/.github/ISSUE_TEMPLATE.md | 6 +
.../spacefish/.github/ISSUE_TEMPLATE/Bug_report.md | 32 +
.../.github/ISSUE_TEMPLATE/Feature_request.md | 20 +
.../.github/ISSUE_TEMPLATE/Support_question.md | 13 +
.../spacefish/.github/PULL_REQUEST_TEMPLATE.md | 33 +
.../matchai/spacefish/.github/release-drafter.yml | 4 +
.../fisher/github.com/matchai/spacefish/.gitignore | 2 +
.../github.com/matchai/spacefish/.travis.yml | 41 +
.../github.com/matchai/spacefish/CHANGELOG.md | 108 +
.../github.com/matchai/spacefish/CONTRIBUTING.md | 63 +
.../fisher/github.com/matchai/spacefish/LICENSE | 21 +
.../fisher/github.com/matchai/spacefish/README.md | 157 +
.../fisher/github.com/matchai/spacefish/SUMMARY.md | 1 +
.../fisher/github.com/matchai/spacefish/book.json | 26 +
.../github.com/matchai/spacefish/docs/API.md | 162 +
.../github.com/matchai/spacefish/docs/Options.md | 438 ++
.../github.com/matchai/spacefish/docs/README.md | 45 +
.../matchai/spacefish/docs/Troubleshooting.md | 82 +
.../matchai/spacefish/fish_mode_prompt.fish | 4 +
.../github.com/matchai/spacefish/fish_prompt.fish | 33 +
.../matchai/spacefish/fish_right_prompt.fish | 19 +
.../spacefish/functions/__sf_lib_section.fish | 28 +
.../spacefish/functions/__sf_section_aws.fish | 39 +
.../spacefish/functions/__sf_section_battery.fish | 114 +
.../spacefish/functions/__sf_section_char.fish | 35 +
.../spacefish/functions/__sf_section_conda.fish | 36 +
.../spacefish/functions/__sf_section_dir.fish | 54 +
.../spacefish/functions/__sf_section_docker.fish | 52 +
.../spacefish/functions/__sf_section_dotnet.fish | 50 +
.../spacefish/functions/__sf_section_elixir.fish | 57 +
.../functions/__sf_section_exec_time.fish | 33 +
.../functions/__sf_section_exit_code.fish | 26 +
.../spacefish/functions/__sf_section_git.fish | 35 +
.../functions/__sf_section_git_branch.fish | 28 +
.../functions/__sf_section_git_status.fish | 100 +
.../spacefish/functions/__sf_section_golang.fish | 55 +
.../spacefish/functions/__sf_section_haskell.fish | 38 +
.../spacefish/functions/__sf_section_host.fish | 41 +
.../spacefish/functions/__sf_section_jobs.fish | 43 +
.../spacefish/functions/__sf_section_julia.fish | 36 +
.../functions/__sf_section_kubecontext.fish | 45 +
.../spacefish/functions/__sf_section_line_sep.fish | 19 +
.../spacefish/functions/__sf_section_node.fish | 58 +
.../spacefish/functions/__sf_section_package.fish | 72 +
.../spacefish/functions/__sf_section_php.fish | 40 +
.../spacefish/functions/__sf_section_pyenv.fish | 41 +
.../spacefish/functions/__sf_section_ruby.fish | 58 +
.../spacefish/functions/__sf_section_rust.fish | 45 +
.../spacefish/functions/__sf_section_time.fish | 43 +
.../spacefish/functions/__sf_section_user.fish | 49 +
.../spacefish/functions/__sf_section_venv.fish | 36 +
.../spacefish/functions/__sf_section_vi_mode.fish | 51 +
.../spacefish/functions/__sf_util_git_branch.fish | 7 +
.../spacefish/functions/__sf_util_human_time.fish | 23 +
.../spacefish/functions/__sf_util_set_default.fish | 10 +
.../functions/__sf_util_truncate_dir.fish | 17 +
.../github.com/matchai/spacefish/images/banner.svg | 1 +
.../matchai/spacefish/images/icon-overlap.png | Bin 0 -> 190761 bytes
.../matchai/spacefish/images/preview.gif | Bin 0 -> 5480551 bytes
.../matchai/spacefish/images/starship-notice.svg | 1 +
.../github.com/matchai/spacefish/package-lock.json | 8027 ++++++++++++++++++++
.../github.com/matchai/spacefish/package.json | 53 +
.../matchai/spacefish/scripts/version.sh | 8 +
.../spacefish/tests/__sf_lib_section.test.fish | 117 +
.../spacefish/tests/__sf_section_aws.test.fish | 89 +
.../spacefish/tests/__sf_section_char.test.fish | 88 +
.../spacefish/tests/__sf_section_conda.test.fish | 79 +
.../spacefish/tests/__sf_section_dir.test.fish | 383 +
.../spacefish/tests/__sf_section_docker.test.fish | 218 +
.../spacefish/tests/__sf_section_dotnet.test.fish | 195 +
.../spacefish/tests/__sf_section_elixir.test.fish | 110 +
.../tests/__sf_section_exit_code.test.fish | 51 +
.../tests/__sf_section_git_status.test.fish | 129 +
.../spacefish/tests/__sf_section_golang.test.fish | 173 +
.../spacefish/tests/__sf_section_host.test.fish | 124 +
.../spacefish/tests/__sf_section_jobs.test.fish | 120 +
.../spacefish/tests/__sf_section_julia.test.fish | 93 +
.../tests/__sf_section_kubecontext.test.fish | 119 +
.../tests/__sf_section_line_sep.test.fish | 17 +
.../spacefish/tests/__sf_section_node.test.fish | 192 +
.../spacefish/tests/__sf_section_package.test.fish | 72 +
.../spacefish/tests/__sf_section_php.test.fish | 110 +
.../spacefish/tests/__sf_section_pyenv.test.fish | 159 +
.../spacefish/tests/__sf_section_rust.test.fish | 125 +
.../spacefish/tests/__sf_section_time.test.fish | 109 +
.../spacefish/tests/__sf_section_user.test.fish | 95 +
.../spacefish/tests/__sf_section_venv.test.fish | 50 +
.../spacefish/tests/__sf_section_vi_mode.test.fish | 144 +
.../spacefish/tests/__sf_util_git_branch.test.fish | 45 +
.../spacefish/tests/__sf_util_human_time.test.fish | 89 +
.../tests/__sf_util_set_default.test.fish | 14 +
.../tests/__sf_util_truncate_dir.test.fish | 28 +
.../github.com/matchai/spacefish/tests/run.fish | 22 +
.../spacefish/tests/spacefish_test_setup.fish | 14 +
.config/i3/config | 264 +
.config/i3/i3lock_script.sh | 6 +
.config/i3/i3status_script.sh | 14 +
.config/i3status/config | 77 +
.config/nitrogen/bg-saved.cfg | 4 +
.config/nitrogen/nitrogen.cfg | 12 +
.config/omf/bundle | 2 +
.config/omf/channel | 1 +
.config/omf/theme | 1 +
.config/polybar/config | 216 +
.config/polybar/launch.sh | 13 +
.config/rofi/config | 6 +
.config/terminator/config | 33 +
.config/termite/config | 2 +
.config/vifm/colors/Default.vifm | 81 +
.config/vifm/scripts/vifmimg | 154 +
.config/vifm/scripts/vifmrun | 15 +
.config/vifm/vifm-help.txt | 6103 +++++++++++++++
.config/vifm/vifmimgpdffile | 1 +
.config/vifm/vifmimgpdfpage | 1 +
.config/vifm/vifmrc | 499 ++
132 files changed, 22899 insertions(+)
create mode 100644 .config/conky/litecrc
create mode 100755 .config/conky/start.sh
create mode 100755 .config/conky/weather.py
create mode 100644 .config/fish/.gitignore
create mode 100644 .config/fish/README.md
create mode 100644 .config/fish/abbreviations.fish
create mode 100644 .config/fish/completions/fisher.fish
create mode 100644 .config/fish/conf.d/omf.fish
create mode 100644 .config/fish/config.fish
create mode 100644 .config/fish/fish_variables
create mode 100644 .config/fish/fishd.roger-pc
create mode 100644 .config/fish/functions/fish_greeting.fish
create mode 120000 .config/fish/functions/fish_prompt.fish
create mode 100644 .config/fish/functions/fisher.fish
create mode 100644 .config/fish/preview.png
create mode 100644 .config/fisher/github.com/matchai/spacefish/.all-contributorsrc
create mode 100644 .config/fisher/github.com/matchai/spacefish/.editorconfig
create mode 100644 .config/fisher/github.com/matchai/spacefish/.github/ISSUE_TEMPLATE.md
create mode 100644 .config/fisher/github.com/matchai/spacefish/.github/ISSUE_TEMPLATE/Bug_report.md
create mode 100644 .config/fisher/github.com/matchai/spacefish/.github/ISSUE_TEMPLATE/Feature_request.md
create mode 100644 .config/fisher/github.com/matchai/spacefish/.github/ISSUE_TEMPLATE/Support_question.md
create mode 100644 .config/fisher/github.com/matchai/spacefish/.github/PULL_REQUEST_TEMPLATE.md
create mode 100644 .config/fisher/github.com/matchai/spacefish/.github/release-drafter.yml
create mode 100644 .config/fisher/github.com/matchai/spacefish/.gitignore
create mode 100644 .config/fisher/github.com/matchai/spacefish/.travis.yml
create mode 100644 .config/fisher/github.com/matchai/spacefish/CHANGELOG.md
create mode 100644 .config/fisher/github.com/matchai/spacefish/CONTRIBUTING.md
create mode 100644 .config/fisher/github.com/matchai/spacefish/LICENSE
create mode 100644 .config/fisher/github.com/matchai/spacefish/README.md
create mode 120000 .config/fisher/github.com/matchai/spacefish/SUMMARY.md
create mode 100644 .config/fisher/github.com/matchai/spacefish/book.json
create mode 100644 .config/fisher/github.com/matchai/spacefish/docs/API.md
create mode 100644 .config/fisher/github.com/matchai/spacefish/docs/Options.md
create mode 100644 .config/fisher/github.com/matchai/spacefish/docs/README.md
create mode 100644 .config/fisher/github.com/matchai/spacefish/docs/Troubleshooting.md
create mode 100644 .config/fisher/github.com/matchai/spacefish/fish_mode_prompt.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/fish_prompt.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/fish_right_prompt.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_lib_section.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_aws.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_battery.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_char.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_conda.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_dir.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_docker.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_dotnet.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_elixir.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_exec_time.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_exit_code.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_git.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_git_branch.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_git_status.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_golang.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_haskell.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_host.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_jobs.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_julia.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_kubecontext.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_line_sep.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_node.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_package.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_php.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_pyenv.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_ruby.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_rust.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_time.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_user.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_venv.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_section_vi_mode.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_util_git_branch.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_util_human_time.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_util_set_default.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/functions/__sf_util_truncate_dir.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/images/banner.svg
create mode 100644 .config/fisher/github.com/matchai/spacefish/images/icon-overlap.png
create mode 100644 .config/fisher/github.com/matchai/spacefish/images/preview.gif
create mode 100644 .config/fisher/github.com/matchai/spacefish/images/starship-notice.svg
create mode 100644 .config/fisher/github.com/matchai/spacefish/package-lock.json
create mode 100644 .config/fisher/github.com/matchai/spacefish/package.json
create mode 100755 .config/fisher/github.com/matchai/spacefish/scripts/version.sh
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_lib_section.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_aws.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_char.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_conda.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_dir.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_docker.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_dotnet.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_elixir.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_exit_code.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_git_status.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_golang.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_host.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_jobs.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_julia.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_kubecontext.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_line_sep.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_node.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_package.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_php.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_pyenv.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_rust.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_time.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_user.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_venv.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_section_vi_mode.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_util_git_branch.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_util_human_time.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_util_set_default.test.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/__sf_util_truncate_dir.test.fish
create mode 100755 .config/fisher/github.com/matchai/spacefish/tests/run.fish
create mode 100644 .config/fisher/github.com/matchai/spacefish/tests/spacefish_test_setup.fish
create mode 100644 .config/i3/config
create mode 100755 .config/i3/i3lock_script.sh
create mode 100755 .config/i3/i3status_script.sh
create mode 100644 .config/i3status/config
create mode 100644 .config/nitrogen/bg-saved.cfg
create mode 100644 .config/nitrogen/nitrogen.cfg
create mode 100644 .config/omf/bundle
create mode 100644 .config/omf/channel
create mode 100644 .config/omf/theme
create mode 100644 .config/polybar/config
create mode 100755 .config/polybar/launch.sh
create mode 100644 .config/rofi/config
create mode 100644 .config/terminator/config
create mode 100644 .config/termite/config
create mode 100644 .config/vifm/colors/Default.vifm
create mode 100755 .config/vifm/scripts/vifmimg
create mode 100755 .config/vifm/scripts/vifmrun
create mode 100644 .config/vifm/vifm-help.txt
create mode 100644 .config/vifm/vifmimgpdffile
create mode 100644 .config/vifm/vifmimgpdfpage
create mode 100644 .config/vifm/vifmrc
(limited to '.config')
diff --git a/.config/conky/litecrc b/.config/conky/litecrc
new file mode 100644
index 00000000..c3bff184
--- /dev/null
+++ b/.config/conky/litecrc
@@ -0,0 +1,116 @@
+#Text Color
+color1 D9D9D9
+#Icons Color
+color2 75D85A
+#Graph Color
+color3 75D85A
+
+own_window_argb_visual yes
+update_interval 1
+double_buffer yes
+imlib_cache_size 10
+own_window true
+own_window_type override
+own_window_class Conky
+own_window_hints undecorated,sticky,skip_taskbar,skip_pager,below
+own_window_transparent no
+own_window_argb_value 192
+own_window_transparent yes
+double_buffer yes
+minimum_size 330 1000
+border_inner_margin 0
+border_outer_margin 0
+alignment top_right
+gap_x 0
+gap_y 0
+background yes
+use_xft yes
+font Noto Sans:size=9
+text_buffer_size 256
+draw_shades bo
+override_utf8_locale yes
+draw_graph_borders no
+default_color FFFFFF
+
+TEXT
+
+
+
+${alignc}${color3}${font Monospace:style=Bold:pixelsize=90}${time %H:%M:%S}${font}${color}
+
+${alignc}${font Monospace:style=Bold:pixelsize=32}${time %A},${time %e} de ${time %B}, ${time %G}${font}
+${voffset 10}$color1
+${goto 20}$color2${font LineAwesomeMod :size=12}M $font$color1 ${sysname} ${kernel} - ${machine}
+${goto 20}$color2${font LineAwesomeMod :size=12}G $font$color1 Uptime: ${uptime}
+${goto 20}$color2${font LineAwesomeMod :size=12}Q $font$color1 Running Processes: ${running_processes} / ${processes}
+${goto 20}$color2${font LineAwesomeMod :size=12}D $font$color1 Desktop: ${if_match "$desktop"!="Not running in X"}(${desktop}/${desktop_number})${endif}: ${desktop_name}
+${goto 20}$color2${font LineAwesomeMod :size=12}7 $font$color1 Threads: ${running_threads}
+${goto 20}$color2${font LineAwesomeMod :size=12}y $font$color1 Battery: ${battery BAT0} ${alignr 30}Charge: ${battery_percent BAT0}%
+${hr 2}
+\
+
+# Usage
+Usage
+${voffset 20}
+${goto 40}${cpugraph 26,190 FFFFFF FFFFFF -l}
+${goto 40}CPU:${alignr 39}${cpu}%
+
+${goto 40}${memgraph 26,190 FFFFFF FFFFFF -l}
+${goto 40}Mem:${alignr 39}${memperc}%
+${alignr 39}${mem}
+
+${goto 40}${diskiograph 26,190 FFFFFF FFFFFF -l}
+${goto 40}Disk I/O:${alignr 39}${diskio}
+
+${hr 2}
+\
+
+# Network
+\
+Network
+
+${goto 40}${upspeedgraph wlp2s0 26,80 FFFFFF FFFFFF}${goto 275}${downspeedgraph wlp2s0 26,80 FFFFFF FFFFFF}
+${goto 40}${color5}Up: ${color2}${upspeed wlp2s0}${color5}${goto 275}Down: ${color2}${downspeed wlp2s0}
+${goto 40}${color5}Sent: ${color2}${totalup wlp2s0}${color5}${goto 275}Received: ${color2}${totaldown wlp2s0}
+
+${goto 40}$color2${font LineAwesomeMod :size=12}= $font$color1 Local IP ${alignr 30}${addr wlp2s0}
+${goto 40}$color2${font LineAwesomeMod :size=12}= $font$color1 Public IP ${alignr 30}${execi 60 curl ipinfo.io/ip}
+${goto 40}$color2${font LineAwesomeMod :size=12}T $font$color1 Upload Speed${alignr 30}${upspeed wlp2s0}
+${goto 40}$color2${font LineAwesomeMod :size=12}8 $font$color1 Download Speed${alignr 30}${downspeed wlp2s0}
+${goto 40}$color2${font LineAwesomeMod :size=12}f $font$color1 Ping: ${color1}${execi 1 sh -c 'ping 1.1.1.1 -c 1 | grep -Po "(?<=time=)(.*?)s"'}\
+
+
+${hr 2}
+\
+
+# Proceses
+\
+Proceses
+
+${goto 40}${color1}Process${color}${alignr 39}${color1}${color1}Mem${color}
+${goto 40}${color2}${top_mem name 1}${color}${alignr 39}${top_mem mem_res 1}
+${goto 40}${color2}${top_mem name 2}${color}${alignr 39}${top_mem mem_res 2}
+${goto 40}${color2}${top_mem name 3}${color}${alignr 39}${top_mem mem_res 3}
+${goto 40}${color2}${top_mem name 4}${color}${alignr 39}${top_mem mem_res 4}
+${goto 40}${color2}${top_mem name 5}${color}${alignr 39}${top_mem mem_res 5}
+
+${goto 40}${color1}Process${color}${alignr 39}${color1}Cpu %${color}
+${goto 40}${color2}${top_mem name 1}${color}${alignr 39}${top cpu 1} %
+${goto 40}${color2}${top_mem name 2}${color}${alignr 39}${top cpu 2} %
+${goto 40}${color2}${top_mem name 3}${color}${alignr 39}${top cpu 3} %
+${goto 40}${color2}${top_mem name 4}${color}${alignr 39}${top cpu 4} %
+${goto 40}${color2}${top_mem name 5}${color}${alignr 39}${top cpu 5} %
+${hr 2}
+
+\
+Weather
+
+$color1${execi 3600 ~/.conky/weather.py}
+${goto 20}${color2}${font LineAwesomeMod :size=12}V $color1$font ${execi 60 cat ~/.cache/weather.txt | grep city | cut -d">" -f2} - ${execi 60 cat ~/.cache/weather.txt | grep country | cut -d">" -f2}
+${goto 20}${color2}${font LineAwesomeMod :size=12}O $color1$font ${execi 60 cat ~/.cache/weather.txt | grep description | cut -d">" -f2} ${alignr 30}${execi 60 cat ~/.cache/weather.txt | grep temp | cut -d">" -f2}ºC
+
+
+
+
+
+o
diff --git a/.config/conky/start.sh b/.config/conky/start.sh
new file mode 100755
index 00000000..34933996
--- /dev/null
+++ b/.config/conky/start.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+~/.config/conky/weather.py &
+conky -q -c ~/.config/conky/litecrc
+
+exit
+
diff --git a/.config/conky/weather.py b/.config/conky/weather.py
new file mode 100755
index 00000000..b6999846
--- /dev/null
+++ b/.config/conky/weather.py
@@ -0,0 +1,51 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import urllib.request
+import json
+import datetime
+from pathlib import Path
+
+########################################################
+# CONFIGURATION
+########################################################
+# UNITY = f for fahrenheit, c for celsius or k for kelvin
+# API_KEY = free register in https://openweathermap.org
+# and get your token
+# CITY = your city name
+# COUNTRY = your country abbreviation: us, ru, br, etc..
+########################################################
+
+UNITY = "c"
+API_KEY = "b91400ad90f74c8cc0bccf5e2978aaca"
+CITY = "Montevideo"
+COUNTRY = "uy"
+
+########################################################
+main_url = "http://api.openweathermap.org/data/2.5/weather?"
+url = main_url+"APPID={}&q={},{}".format(API_KEY,CITY,COUNTRY)
+print(url)
+metrics = {"k":"&units=default","c":"&units=metric","f":"&units=imperial"}
+for key,value in metrics.items():
+ if UNITY == key:
+ url += value
+request = urllib.request.urlopen(url)
+if request.status != 200:
+ exit(0)
+response = request.read()
+
+j = json.loads(response.decode("utf-8"))
+home = str(Path.home())
+weather = open(home+"/.cache/weather.txt",'w+')
+weather.write("city>"+j["name"]+"\n")
+weather.write("country>"+j["sys"]["country"]+"\n")
+weather.write("temp>"+str(j["main"]["temp"])+"\n")
+weather.write("description>"+j["weather"][0]["description"].capitalize()+"\n")
+weather.write("min>"+str(j["main"]["temp_min"])+"\n")
+weather.write("max>"+str(j["main"]["temp_max"])+"\n")
+weather.write("humidity>"+str(j["main"]["humidity"])+"\n")
+weather.write("pressure>"+str(j["main"]["pressure"])+"\n")
+weather.write("wind>"+str(j["wind"]["speed"])+"\n")
+weather.write("update>"+datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')+"\n")
+
+weather.close()
diff --git a/.config/fish/.gitignore b/.config/fish/.gitignore
new file mode 100644
index 00000000..5b89844a
--- /dev/null
+++ b/.config/fish/.gitignore
@@ -0,0 +1,2 @@
+fish_history
+personal_abbr.fish
\ No newline at end of file
diff --git a/.config/fish/README.md b/.config/fish/README.md
new file mode 100644
index 00000000..fb8ba4e3
--- /dev/null
+++ b/.config/fish/README.md
@@ -0,0 +1,13 @@
+# fish_dotfiles
+
+This are my fish dotfiles.
+
+## How it looks
+![rogs-fish-preview](https://raw.githubusercontent.com/Rogergonzalez21/fish_dotfiles/master/preview.png)
+
+
+## Uses
+- [Fisher](https://github.com/jorgebucaran/fisher)
+- [Oh my fish!](https://github.com/oh-my-fish/oh-my-fish)
+- [Bobthefish](https://github.com/oh-my-fish/theme-bobthefish)
+- My own abbreviations
diff --git a/.config/fish/abbreviations.fish b/.config/fish/abbreviations.fish
new file mode 100644
index 00000000..fef05dda
--- /dev/null
+++ b/.config/fish/abbreviations.fish
@@ -0,0 +1,85 @@
+# Update Arch
+abbr i 'sudo pacman -S'
+abbr r 'sudo pacman -R'
+abbr u 'sudo pacman -Syu'
+
+# Git
+abbr g 'git'
+abbr ga. 'git add .'
+abbr ga 'git add'
+abbr gb 'git branch'
+abbr gbd 'git branch -D'
+abbr gcm 'git commit -m'
+abbr gco 'git checkout'
+abbr gcob 'git checkout -b'
+abbr gcod 'git checkout development'
+abbr gi 'gitignore'
+abbr gm 'git merge'
+abbr gpl 'git pull'
+abbr gps 'git push'
+abbr gpsu 'git push -u origin master'
+abbr gs 'git status'
+abbr gc 'git clone'
+abbr gd 'git diff'
+abbr gcd 'git checkout develop'
+abbr gpd 'git pull origin develop'
+abbr gst 'git stash'
+abbr gsta 'git stash apply'
+
+# Git Flow AVH
+abbr gf 'git flow'
+abbr gfi 'git flow init -d'
+
+abbr gff 'git flow feature'
+abbr gffs 'git flow feature start'
+abbr gfff 'git flow feature finish'
+abbr gffp 'git flow feature publish'
+abbr gfft 'git flow feature track'
+abbr gffco 'git flow feature checkout'
+
+abbr gfr 'git flow release'
+abbr gfrs 'git flow release start'
+abbr gfrf 'git flow release finish'
+abbr gfrp 'git flow release publish'
+abbr gfrt 'git flow release track'
+abbr gfrco 'git flow release checkout'
+
+abbr gfb 'git flow bugfix'
+abbr gfbs 'git flow bugfix start'
+abbr gfbf 'git flow bugfix finish'
+abbr gfbp 'git flow bugfix publish'
+abbr gfbt 'git flow bugfix track'
+abbr gfbco 'git flow bugfix checkout'
+
+abbr gfh 'git flow hotfix'
+abbr gfhs 'git flow hotfix start'
+abbr gfhf 'git flow hotfix finish'
+abbr gfhp 'git flow hotfix publish'
+abbr gfht 'git flow hotfix track'
+abbr gfhco 'git flow hotfix checkout'
+
+# LS
+abbr l 'ls'
+
+# NPM
+abbr ni 'npm install'
+abbr nis 'npm install --save'
+abbr nisd 'npm install --save-dev'
+abbr nig 'npm install -g'
+abbr np 'npm prune'
+abbr nl 'npm list'
+abbr nr 'npm remove'
+abbr nu 'npm update'
+abbr ns 'npm start'
+abbr nt 'npm test'
+
+# RM
+abbr rmr 'rm -r'
+abbr rmrf 'rm -rf'
+
+# Tar
+abbr tc 'tar czvf'
+abbr tx 'tar xzvf'
+
+# Other
+abbr pr 'ping rogs.me'
\ No newline at end of file
diff --git a/.config/fish/completions/fisher.fish b/.config/fish/completions/fisher.fish
new file mode 100644
index 00000000..271e314e
--- /dev/null
+++ b/.config/fish/completions/fisher.fish
@@ -0,0 +1 @@
+fisher complete
diff --git a/.config/fish/conf.d/omf.fish b/.config/fish/conf.d/omf.fish
new file mode 100644
index 00000000..3e0f6d63
--- /dev/null
+++ b/.config/fish/conf.d/omf.fish
@@ -0,0 +1,7 @@
+# Path to Oh My Fish install.
+set -q XDG_DATA_HOME
+ and set -gx OMF_PATH "$XDG_DATA_HOME/omf"
+ or set -gx OMF_PATH "$HOME/.local/share/omf"
+
+# Load Oh My Fish configuration.
+source $OMF_PATH/init.fish
diff --git a/.config/fish/config.fish b/.config/fish/config.fish
new file mode 100644
index 00000000..ea07aa4b
--- /dev/null
+++ b/.config/fish/config.fish
@@ -0,0 +1,11 @@
+set fish_greeting ""
+set -gx PATH /home/roger/.gem/ruby/2.5.0/bin $PATH
+set -g theme_powerline_fonts yes
+set -x VIRTUAL_ENV_DISABLE_PROMPT 1
+set -g theme_color_scheme dark
+set -g theme_display_date no
+alias config='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'
+alias rm='rm -i'
+
+source "$HOME/.config/fish/abbreviations.fish"
+source "$HOME/.config/fish/personal_abbr.fish"
diff --git a/.config/fish/fish_variables b/.config/fish/fish_variables
new file mode 100644
index 00000000..43a57415
--- /dev/null
+++ b/.config/fish/fish_variables
@@ -0,0 +1,104 @@
+# This file contains fish universal variable definitions.
+# VERSION: 3.0
+SETUVAR __fish_classic_git_prompt_initialized:\x1d
+SETUVAR __fish_init_1_50_0:\x1d
+SETUVAR __fish_init_2_39_8:\x1d
+SETUVAR __fish_init_2_3_0:\x1d
+SETUVAR __fish_init_3_x:\x1d
+SETUVAR _fish_abbr_cdccb:cd\x20\x7e/code/massive/cocacola/new\x2dbackend
+SETUVAR _fish_abbr_cdccf:cd\x20\x7e/code/massive/cocacola/frontend
+SETUVAR _fish_abbr_cdimb:cd\x20\x7e/code/personal/identidadMisional/backend
+SETUVAR _fish_abbr_g:git
+SETUVAR _fish_abbr_ga:git\x20add
+SETUVAR _fish_abbr_ga_2E_:git\x20add\x20\x2e
+SETUVAR _fish_abbr_gb:git\x20branch
+SETUVAR _fish_abbr_gbd:git\x20branch\x20\x2dD
+SETUVAR _fish_abbr_gc:git\x20clone
+SETUVAR _fish_abbr_gcd:git\x20checkout\x20develop
+SETUVAR _fish_abbr_gcm:git\x20commit\x20\x2dm
+SETUVAR _fish_abbr_gco:git\x20checkout
+SETUVAR _fish_abbr_gcob:git\x20checkout\x20\x2db
+SETUVAR _fish_abbr_gcod:git\x20checkout\x20development
+SETUVAR _fish_abbr_gd:git\x20diff
+SETUVAR _fish_abbr_gf:git\x20flow
+SETUVAR _fish_abbr_gfb:git\x20flow\x20bugfix
+SETUVAR _fish_abbr_gfbco:git\x20flow\x20bugfix\x20checkout
+SETUVAR _fish_abbr_gfbf:git\x20flow\x20bugfix\x20finish
+SETUVAR _fish_abbr_gfbp:git\x20flow\x20bugfix\x20publish
+SETUVAR _fish_abbr_gfbs:git\x20flow\x20bugfix\x20start
+SETUVAR _fish_abbr_gfbt:git\x20flow\x20bugfix\x20track
+SETUVAR _fish_abbr_gff:git\x20flow\x20feature
+SETUVAR _fish_abbr_gffco:git\x20flow\x20feature\x20checkout
+SETUVAR _fish_abbr_gfff:git\x20flow\x20feature\x20finish
+SETUVAR _fish_abbr_gffp:git\x20flow\x20feature\x20publish
+SETUVAR _fish_abbr_gffs:git\x20flow\x20feature\x20start
+SETUVAR _fish_abbr_gfft:git\x20flow\x20feature\x20track
+SETUVAR _fish_abbr_gfh:git\x20flow\x20hotfix
+SETUVAR _fish_abbr_gfhco:git\x20flow\x20hotfix\x20checkout
+SETUVAR _fish_abbr_gfhf:git\x20flow\x20hotfix\x20finish
+SETUVAR _fish_abbr_gfhp:git\x20flow\x20hotfix\x20publish
+SETUVAR _fish_abbr_gfhs:git\x20flow\x20hotfix\x20start
+SETUVAR _fish_abbr_gfht:git\x20flow\x20hotfix\x20track
+SETUVAR _fish_abbr_gfi:git\x20flow\x20init\x20\x2dd
+SETUVAR _fish_abbr_gfr:git\x20flow\x20release
+SETUVAR _fish_abbr_gfrco:git\x20flow\x20release\x20checkout
+SETUVAR _fish_abbr_gfrf:git\x20flow\x20release\x20finish
+SETUVAR _fish_abbr_gfrp:git\x20flow\x20release\x20publish
+SETUVAR _fish_abbr_gfrs:git\x20flow\x20release\x20start
+SETUVAR _fish_abbr_gfrt:git\x20flow\x20release\x20track
+SETUVAR _fish_abbr_gi:gitignore
+SETUVAR _fish_abbr_gm:git\x20merge
+SETUVAR _fish_abbr_gpd:git\x20pull\x20origin\x20develop
+SETUVAR _fish_abbr_gpl:git\x20pull
+SETUVAR _fish_abbr_gps:git\x20push
+SETUVAR _fish_abbr_gpsu:git\x20push\x20\x2du\x20origin\x20master
+SETUVAR _fish_abbr_gs:git\x20status
+SETUVAR _fish_abbr_gst:git\x20stash
+SETUVAR _fish_abbr_gsta:git\x20stash\x20apply
+SETUVAR _fish_abbr_i:sudo\x20pacman\x20\x2dS
+SETUVAR _fish_abbr_l:ls
+SETUVAR _fish_abbr_ni:npm\x20install
+SETUVAR _fish_abbr_nig:npm\x20install\x20\x2dg
+SETUVAR _fish_abbr_nis:npm\x20install\x20\x2d\x2dsave
+SETUVAR _fish_abbr_nisd:npm\x20install\x20\x2d\x2dsave\x2ddev
+SETUVAR _fish_abbr_nl:npm\x20list
+SETUVAR _fish_abbr_np:npm\x20prune
+SETUVAR _fish_abbr_nr:npm\x20remove
+SETUVAR _fish_abbr_ns:npm\x20start
+SETUVAR _fish_abbr_nt:npm\x20test
+SETUVAR _fish_abbr_nu:npm\x20update
+SETUVAR _fish_abbr_pr:ping\x20rogs\x2eme
+SETUVAR _fish_abbr_r:sudo\x20pacman\x20\x2dR
+SETUVAR _fish_abbr_rmr:rm\x20\x2dr
+SETUVAR _fish_abbr_rmrf:rm\x20\x2drf
+SETUVAR _fish_abbr_tc:tar\x20czvf
+SETUVAR _fish_abbr_tx:tar\x20xzvf
+SETUVAR _fish_abbr_u:sudo\x20pacman\x20\x2dSyu
+SETUVAR fish_color_autosuggestion:555\x1ebrblack
+SETUVAR fish_color_cancel:\x2dr
+SETUVAR fish_color_command:005fd7
+SETUVAR fish_color_comment:990000
+SETUVAR fish_color_cwd:green
+SETUVAR fish_color_cwd_root:red
+SETUVAR fish_color_end:009900
+SETUVAR fish_color_error:ff0000
+SETUVAR fish_color_escape:00a6b2
+SETUVAR fish_color_history_current:\x2d\x2dbold
+SETUVAR fish_color_host:normal
+SETUVAR fish_color_match:\x2d\x2dbackground\x3dbrblue
+SETUVAR fish_color_normal:normal
+SETUVAR fish_color_operator:00a6b2
+SETUVAR fish_color_param:00afff
+SETUVAR fish_color_quote:999900
+SETUVAR fish_color_redirection:00afff
+SETUVAR fish_color_search_match:bryellow\x1e\x2d\x2dbackground\x3dbrblack
+SETUVAR fish_color_selection:white\x1e\x2d\x2dbold\x1e\x2d\x2dbackground\x3dbrblack
+SETUVAR fish_color_status:red
+SETUVAR fish_color_user:brgreen
+SETUVAR fish_color_valid_path:\x2d\x2dunderline
+SETUVAR fish_greeting:
+SETUVAR fish_key_bindings:fish_default_key_bindings
+SETUVAR fish_pager_color_completion:normal
+SETUVAR fish_pager_color_description:B3A06D\x1eyellow
+SETUVAR fish_pager_color_prefix:white\x1e\x2d\x2dbold\x1e\x2d\x2dunderline
+SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan
diff --git a/.config/fish/fishd.roger-pc b/.config/fish/fishd.roger-pc
new file mode 100644
index 00000000..d74e5a07
--- /dev/null
+++ b/.config/fish/fishd.roger-pc
@@ -0,0 +1,33 @@
+# This file is automatically generated by the fish.
+# Do NOT edit it directly, your changes will be overwritten.
+SET __fish_classic_git_prompt_initialized:\x1d
+SET __fish_init_1_50_0:\x1d
+SET __fish_init_2_39_8:\x1d
+SET __fish_init_2_3_0:\x1d
+SET fish_color_autosuggestion:555\x1eyellow
+SET fish_color_command:005fd7\x1epurple
+SET fish_color_comment:red
+SET fish_color_cwd:green
+SET fish_color_cwd_root:red
+SET fish_color_end:brmagenta
+SET fish_color_error:red\x1e\x2d\x2dbold
+SET fish_color_escape:cyan
+SET fish_color_history_current:cyan
+SET fish_color_host:\x2do\x1ecyan
+SET fish_color_match:cyan
+SET fish_color_normal:normal
+SET fish_color_operator:cyan
+SET fish_color_param:00afff\x1ecyan
+SET fish_color_quote:brown
+SET fish_color_redirection:normal
+SET fish_color_search_match:\x2d\x2dbackground\x3dpurple
+SET fish_color_selection:\x2d\x2dbackground\x3dpurple
+SET fish_color_status:red
+SET fish_color_user:\x2do\x1egreen
+SET fish_color_valid_path:\x2d\x2dunderline
+SET fish_greeting:
+SET fish_key_bindings:fish_default_key_bindings
+SET fish_pager_color_completion:normal
+SET fish_pager_color_description:555\x1eyellow
+SET fish_pager_color_prefix:cyan
+SET fish_pager_color_progress:cyan
diff --git a/.config/fish/functions/fish_greeting.fish b/.config/fish/functions/fish_greeting.fish
new file mode 100644
index 00000000..14ca4a87
--- /dev/null
+++ b/.config/fish/functions/fish_greeting.fish
@@ -0,0 +1,2 @@
+# Only to hide the greeting
+function fish_greeting; end
\ No newline at end of file
diff --git a/.config/fish/functions/fish_prompt.fish b/.config/fish/functions/fish_prompt.fish
new file mode 120000
index 00000000..b08c3e74
--- /dev/null
+++ b/.config/fish/functions/fish_prompt.fish
@@ -0,0 +1 @@
+/home/roger/.local/share/omf/themes/bobthefish/fish_prompt.fish
\ No newline at end of file
diff --git a/.config/fish/functions/fisher.fish b/.config/fish/functions/fisher.fish
new file mode 100644
index 00000000..47598571
--- /dev/null
+++ b/.config/fish/functions/fisher.fish
@@ -0,0 +1,430 @@
+set -g fisher_version 3.2.9
+
+function fisher -a cmd -d "fish package manager"
+ set -q XDG_CACHE_HOME; or set XDG_CACHE_HOME ~/.cache
+ set -q XDG_CONFIG_HOME; or set XDG_CONFIG_HOME ~/.config
+
+ set -g fish_config $XDG_CONFIG_HOME/fish
+ set -g fisher_cache $XDG_CACHE_HOME/fisher
+ set -g fisher_config $XDG_CONFIG_HOME/fisher
+
+ set -q fisher_path; or set -g fisher_path $fish_config
+
+ for path in {$fish_config,$fisher_path}/{functions,completions,conf.d} $fisher_cache
+ if test ! -d $path
+ command mkdir -p $path
+ end
+ end
+
+ if test ! -e $fisher_path/completions/fisher.fish
+ echo "fisher complete" >$fisher_path/completions/fisher.fish
+ _fisher_complete
+ end
+
+ if test -e $fisher_path/conf.d/fisher.fish
+ switch "$version"
+ case \*-\*
+ command rm -f $fisher_path/conf.d/fisher.fish
+ case 2\*
+ case \*
+ command rm -f $fisher_path/conf.d/fisher.fish
+ end
+ else
+ switch "$version"
+ case \*-\*
+ case 2\*
+ echo "fisher copy-user-key-bindings" >$fisher_path/conf.d/fisher.fish
+ end
+ end
+
+ switch "$cmd"
+ case {,self-}complete
+ _fisher_complete
+ case copy-user-key-bindings
+ _fisher_copy_user_key_bindings
+ case ls
+ set -e argv[1]
+ if test -s "$fisher_path/fishfile"
+ set -l file (_fisher_fmt <$fisher_path/fishfile | _fisher_parse -R | command sed "s|@.*||")
+ _fisher_ls | _fisher_fmt | command awk -v FILE="$file" "
+ BEGIN { for (n = split(FILE, f); ++i <= n;) file[f[i]] } \$0 in file && /$argv[1]/
+ " | command sed "s|^$HOME|~|"
+ end
+ case self-update
+ _fisher_self_update (status -f)
+ case self-uninstall
+ _fisher_self_uninstall
+ case {,-}-v{ersion,}
+ echo "fisher version $fisher_version" (status -f | command sed "s|^$HOME|~|")
+ case {,-}-h{elp,}
+ _fisher_help
+ case ""
+ _fisher_commit --
+ case add rm
+ if not isatty
+ while read -l arg
+ set argv $argv $arg
+ end
+ end
+
+ if test (count $argv) = 1
+ echo "fisher: invalid number of arguments" >&2
+ _fisher_help >&2
+ return 1
+ end
+
+ _fisher_commit $argv
+ case \*
+ echo "fisher: unknown flag or command \"$cmd\"" >&2
+ _fisher_help >&2
+ return 1
+ end
+end
+
+function _fisher_complete
+ complete -ec fisher
+ complete -xc fisher -n __fish_use_subcommand -a add -d "Add packages"
+ complete -xc fisher -n __fish_use_subcommand -a rm -d "Remove packages"
+ complete -xc fisher -n __fish_use_subcommand -a ls -d "List installed packages matching REGEX"
+ complete -xc fisher -n __fish_use_subcommand -a --help -d "Show usage help"
+ complete -xc fisher -n __fish_use_subcommand -a --version -d "$fisher_version"
+ complete -xc fisher -n __fish_use_subcommand -a self-update -d "Update to the latest version"
+ for pkg in (fisher ls)
+ complete -xc fisher -n "__fish_seen_subcommand_from rm" -a $pkg
+ end
+end
+
+function _fisher_copy_user_key_bindings
+ if functions -q fish_user_key_bindings
+ functions -c fish_user_key_bindings fish_user_key_bindings_copy
+ end
+ function fish_user_key_bindings
+ for file in $fisher_path/conf.d/*_key_bindings.fish
+ source $file >/dev/null 2>/dev/null
+ end
+ if functions -q fish_user_key_bindings_copy
+ fish_user_key_bindings_copy
+ end
+ end
+end
+
+function _fisher_ls
+ for pkg in $fisher_config/*/*/*
+ command readlink $pkg; or echo $pkg
+ end
+end
+
+function _fisher_fmt
+ command sed "s|^[[:space:]]*||;s|^$fisher_config/||;s|^~|$HOME|;s|^\.\/*|$PWD/|;s|^https*:/*||;s|^github\.com/||;s|/*\$||"
+end
+
+function _fisher_help
+ echo "usage: fisher add Add packages"
+ echo " fisher rm Remove packages"
+ echo " fisher Update all packages"
+ echo " fisher ls [] List installed packages matching "
+ echo " fisher --help Show this help"
+ echo " fisher --version Show the current version"
+ echo " fisher self-update Update to the latest version"
+ echo " fisher self-uninstall Uninstall from your system"
+ echo "examples:"
+ echo " fisher add jethrokuan/z rafaelrinaldi/pure"
+ echo " fisher add gitlab.com/foo/bar@v2"
+ echo " fisher add ~/path/to/local/pkg"
+ echo " fisher add &2
+ command curl -s "$url?nocache" >$file.
+
+ set -l next_version (command awk '{ print $4 } { exit }' <$file.)
+ switch "$next_version"
+ case "" $fisher_version
+ command rm -f $file.
+ if test -z "$next_version"
+ echo "fisher: cannot update fisher -- are you offline?" >&2
+ return 1
+ end
+ echo "fisher is already up-to-date" >&2
+ case \*
+ echo "linking $file" | command sed "s|$HOME|~|" >&2
+ command mv -f $file. $file
+ source $file
+ echo "updated to fisher $fisher_version -- hooray!" >&2
+ _fisher_complete
+ end
+end
+
+function _fisher_self_uninstall
+ for pkg in (_fisher_ls)
+ _fisher_rm $pkg
+ end
+
+ for file in $fisher_cache $fisher_config $fisher_path/{functions,completions,conf.d}/fisher.fish $fisher_path/fishfile
+ echo "removing $file"
+ command rm -Rf $file 2>/dev/null
+ end | command sed "s|$HOME|~|" >&2
+
+ for name in (set -n | command awk '/^fisher_/')
+ set -e "$name"
+ end
+
+ functions -e (functions -a | command awk '/^_fisher/') fisher
+ complete -c fisher --erase
+end
+
+function _fisher_commit -a cmd
+ set -e argv[1]
+ set -l elapsed (_fisher_now)
+ set -l fishfile $fisher_path/fishfile
+
+ if test ! -e "$fishfile"
+ command touch $fishfile
+ echo "created new fishfile in $fishfile" | command sed "s|$HOME|~|" >&2
+ end
+
+ set -l old_pkgs (_fisher_ls | _fisher_fmt)
+ for pkg in (_fisher_ls)
+ _fisher_rm $pkg
+ end
+ command rm -Rf $fisher_config
+ command mkdir -p $fisher_config
+
+ set -l next_pkgs (_fisher_fmt <$fishfile | _fisher_parse -R $cmd (printf "%s\n" $argv | _fisher_fmt))
+ set -l actual_pkgs (_fisher_fetch $next_pkgs)
+ set -l updated_pkgs
+ for pkg in $old_pkgs
+ if contains -- $pkg $actual_pkgs
+ set updated_pkgs $updated_pkgs $pkg
+ end
+ end
+
+ if test -z "$actual_pkgs$updated_pkgs$old_pkgs$next_pkgs"
+ echo "fisher: nothing to commit -- try adding some packages" >&2
+ return 1
+ end
+
+ set -l out_pkgs
+ if test "$cmd" = "rm"
+ set out_pkgs $next_pkgs
+ else
+ for pkg in $next_pkgs
+ if contains -- (echo $pkg | command sed "s|@.*||") $actual_pkgs
+ set out_pkgs $out_pkgs $pkg
+ end
+ end
+ end
+
+ printf "%s\n" (_fisher_fmt <$fishfile | _fisher_parse -W $cmd $out_pkgs | command sed "s|^$HOME|~|") >$fishfile
+
+ _fisher_complete
+
+ command awk -v A=(count $actual_pkgs) -v U=(count $updated_pkgs) -v O=(count $old_pkgs) -v E=(_fisher_now $elapsed) '
+ BEGIN {
+ res = fmt("removed", O - U, fmt("updated", U, fmt("added", A - U)))
+ printf((res ? res : "done") " in %.2fs\n", E / 1000)
+ }
+ function fmt(action, n, s) {
+ return n ? (s ? s ", " : s) action " " n " package" (n > 1 ? "s" : "") : s
+ }
+ ' >&2
+end
+
+function _fisher_parse -a mode cmd
+ set -e argv[1..2]
+ command awk -v FS="[[:space:]]*#+" -v MODE="$mode" -v CMD="$cmd" -v ARGSTR="$argv" '
+ BEGIN {
+ for (n = split(ARGSTR, a, " "); i++ < n;) pkgs[getkey(a[i])] = a[i]
+ }
+ !NF { next } { k = getkey($1) }
+ MODE == "-R" && !(k in pkgs) && $0 = $1
+ MODE == "-W" && (/^#/ || k in pkgs || CMD != "rm") { print pkgs[k] (sub($1, "") ? $0 : "") }
+ MODE == "-W" || CMD == "rm" { delete pkgs[k] }
+ END {
+ for (k in pkgs) {
+ if (CMD != "rm" || MODE == "-W") print pkgs[k]
+ else print "fisher: cannot remove \""k"\" -- package is not in fishfile" > "/dev/stderr"
+ }
+ }
+ function getkey(s, a) {
+ return (split(s, a, /@+|:/) > 2) ? a[2]"/"a[1]"/"a[3] : a[1]
+ }
+ '
+end
+
+function _fisher_fetch
+ set -l pkg_jobs
+ set -l out_pkgs
+ set -l next_pkgs
+ set -l local_pkgs
+ set -q fisher_user_api_token; and set -l curl_opts -u $fisher_user_api_token
+
+ for pkg in $argv
+ switch $pkg
+ case \~\* /\*
+ set -l path (echo "$pkg" | command sed "s|^~|$HOME|")
+ if test -e "$path"
+ set local_pkgs $local_pkgs $path
+ else
+ echo "fisher: cannot add \"$pkg\" -- is this a valid file?" >&2
+ end
+ continue
+ end
+
+ command awk -v PKG="$pkg" -v FS=/ '
+ BEGIN {
+ if (split(PKG, tmp, /@+|:/) > 2) {
+ if (tmp[4]) sub("@"tmp[4], "", PKG)
+ print PKG "\t" tmp[2]"/"tmp[1]"/"tmp[3] "\t" (tmp[4] ? tmp[4] : "master")
+ } else {
+ pkg = split(PKG, _, "/") <= 2 ? "github.com/"tmp[1] : tmp[1]
+ tag = tmp[2] ? tmp[2] : "master"
+ print (\
+ pkg ~ /^github/ ? "https://codeload."pkg"/tar.gz/"tag : \
+ pkg ~ /^gitlab/ ? "https://"pkg"/-/archive/"tag"/"tmp[split(pkg, tmp, "/")]"-"tag".tar.gz" : \
+ pkg ~ /^bitbucket/ ? "https://"pkg"/get/"tag".tar.gz" : pkg \
+ ) "\t" pkg
+ }
+ }
+ ' | read -l url pkg branch
+
+ if test ! -d "$fisher_config/$pkg"
+ fish -c "
+ echo fetching $url >&2
+ command mkdir -p $fisher_config/$pkg $fisher_cache/(command dirname $pkg)
+ if test ! -z \"$branch\"
+ command git clone $url $fisher_config/$pkg --branch $branch --depth 1 2>/dev/null
+ or echo fisher: cannot clone \"$url\" -- is this a valid url\? >&2
+ else if command curl $curl_opts -Ss -w \"\" $url 2>&1 | command tar -xzf- -C $fisher_config/$pkg 2>/dev/null
+ command rm -Rf $fisher_cache/$pkg
+ command mv -f $fisher_config/$pkg/* $fisher_cache/$pkg
+ command rm -Rf $fisher_config/$pkg
+ command cp -Rf {$fisher_cache,$fisher_config}/$pkg
+ else if test -d \"$fisher_cache/$pkg\"
+ echo fisher: cannot connect to server -- looking in \"$fisher_cache/$pkg\" | command sed 's|$HOME|~|' >&2
+ command cp -Rf $fisher_cache/$pkg $fisher_config/$pkg/..
+ else
+ command rm -Rf $fisher_config/$pkg
+ echo fisher: cannot add \"$pkg\" -- is this a valid package\? >&2
+ end
+ " >/dev/null &
+ set pkg_jobs $pkg_jobs (_fisher_jobs --last)
+ set next_pkgs $next_pkgs "$fisher_config/$pkg"
+ end
+ end
+
+ if set -q pkg_jobs[1]
+ while for job in $pkg_jobs
+ contains -- $job (_fisher_jobs); and break
+ end
+ end
+ for pkg in $next_pkgs
+ if test -d "$pkg"
+ set out_pkgs $out_pkgs $pkg
+ _fisher_add $pkg
+ end
+ end
+ end
+
+ set -l local_prefix $fisher_config/local/$USER
+ if test ! -d "$local_prefix"
+ command mkdir -p $local_prefix
+ end
+ for pkg in $local_pkgs
+ set -l target $local_prefix/(command basename $pkg)
+ if test ! -L "$target"
+ command ln -sf $pkg $target
+ set out_pkgs $out_pkgs $pkg
+ _fisher_add $pkg --link
+ end
+ end
+
+ if set -q out_pkgs[1]
+ _fisher_fetch (
+ for pkg in $out_pkgs
+ if test -s "$pkg/fishfile"
+ _fisher_fmt <$pkg/fishfile | _fisher_parse -R
+ end
+ end)
+ printf "%s\n" $out_pkgs | _fisher_fmt
+ end
+end
+
+function _fisher_add -a pkg opts
+ for src in $pkg/{functions,completions,conf.d}/**.* $pkg/*.fish
+ set -l target (command basename $src)
+ switch $src
+ case $pkg/conf.d\*
+ set target $fisher_path/conf.d/$target
+ case $pkg/completions\*
+ set target $fisher_path/completions/$target
+ case $pkg/{functions,}\*
+ switch $target
+ case uninstall.fish
+ continue
+ case {init,key_bindings}.fish
+ set target $fisher_path/conf.d/(command basename $pkg)\_$target
+ case \*
+ set target $fisher_path/functions/$target
+ end
+ end
+ echo "linking $target" | command sed "s|$HOME|~|" >&2
+ if set -q opts[1]
+ command ln -sf $src $target
+ else
+ command cp -f $src $target
+ end
+ switch $target
+ case \*.fish
+ source $target >/dev/null 2>/dev/null
+ end
+ end
+end
+
+function _fisher_rm -a pkg
+ for src in $pkg/{conf.d,completions,functions}/**.* $pkg/*.fish
+ set -l target (command basename $src)
+ set -l filename (command basename $target .fish)
+ switch $src
+ case $pkg/conf.d\*
+ test "$filename.fish" = "$target"; and emit "$filename"_uninstall
+ set target conf.d/$target
+ case $pkg/completions\*
+ test "$filename.fish" = "$target"; and complete -ec $filename
+ set target completions/$target
+ case $pkg/{,functions}\*
+ test "$filename.fish" = "$target"; and functions -e $filename
+ switch $target
+ case uninstall.fish
+ source $src
+ continue
+ case {init,key_bindings}.fish
+ set target conf.d/(command basename $pkg)\_$target
+ case \*
+ set target functions/$target
+ end
+ end
+ command rm -f $fisher_path/$target
+ end
+ if not functions -q fish_prompt
+ source "$__fish_datadir$__fish_data_dir/functions/fish_prompt.fish"
+ end
+end
+
+function _fisher_jobs
+ jobs $argv | command awk '/^[0-9]+\t/ { print $1 }'
+end
+
+function _fisher_now -a elapsed
+ switch (command uname)
+ case Darwin \*BSD
+ command perl -MTime::HiRes -e 'printf("%.0f\n", (Time::HiRes::time() * 1000) - $ARGV[0])' $elapsed
+ case \*
+ math (command date "+%s%3N") - "0$elapsed"
+ end
+end
diff --git a/.config/fish/preview.png b/.config/fish/preview.png
new file mode 100644
index 00000000..6cb4131d
Binary files /dev/null and b/.config/fish/preview.png differ
diff --git a/.config/fisher/github.com/matchai/spacefish/.all-contributorsrc b/.config/fisher/github.com/matchai/spacefish/.all-contributorsrc
new file mode 100644
index 00000000..198b9fc0
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/.all-contributorsrc
@@ -0,0 +1,233 @@
+{
+ "projectName": "spacefish",
+ "projectOwner": "matchai",
+ "repoType": "github",
+ "repoHost": "https://github.com",
+ "files": [
+ "README.md"
+ ],
+ "imageSize": 100,
+ "commit": true,
+ "contributors": [
+ {
+ "login": "matchai",
+ "name": "Matan Kushner",
+ "avatar_url": "https://avatars0.githubusercontent.com/u/4658208?v=4",
+ "profile": "https://twitter.com/matchai",
+ "contributions": [
+ "bug",
+ "code",
+ "doc",
+ "review",
+ "test",
+ "tool",
+ "design"
+ ]
+ },
+ {
+ "login": "sirMerr",
+ "name": "Tiffany Le-Nguyen",
+ "avatar_url": "https://avatars2.githubusercontent.com/u/11183523?v=4",
+ "profile": "https://github.com/sirMerr",
+ "contributions": [
+ "bug",
+ "code",
+ "doc",
+ "review",
+ "test"
+ ]
+ },
+ {
+ "login": "Snuggle",
+ "name": "Snuggle",
+ "avatar_url": "https://avatars0.githubusercontent.com/u/26250962?v=4",
+ "profile": "https://github.com/Snuggle",
+ "contributions": [
+ "bug",
+ "code",
+ "doc",
+ "review",
+ "test"
+ ]
+ },
+ {
+ "login": "jskrnbindra",
+ "name": "Jaskaran Bindra",
+ "avatar_url": "https://avatars2.githubusercontent.com/u/11844760?v=4",
+ "profile": "https://github.com/jskrnbindra",
+ "contributions": [
+ "code",
+ "doc",
+ "test"
+ ]
+ },
+ {
+ "login": "kulabun",
+ "name": "Konstantin Labun",
+ "avatar_url": "https://avatars3.githubusercontent.com/u/6306918?v=4",
+ "profile": "https://labun.me",
+ "contributions": [
+ "code",
+ "doc",
+ "test"
+ ]
+ },
+ {
+ "login": "kyleholzinger",
+ "name": "Kyle Holzinger",
+ "avatar_url": "https://avatars0.githubusercontent.com/u/2652762?v=4",
+ "profile": "https://medium.com/@kyleholzinger",
+ "contributions": [
+ "code",
+ "doc"
+ ]
+ },
+ {
+ "login": "salmanulfarzy",
+ "name": "Salmanul Farzy",
+ "avatar_url": "https://avatars0.githubusercontent.com/u/10276208?v=4",
+ "profile": "https://github.com/salmanulfarzy",
+ "contributions": [
+ "code",
+ "review"
+ ]
+ },
+ {
+ "login": "owais",
+ "name": "owais",
+ "avatar_url": "https://avatars0.githubusercontent.com/u/46186?v=4",
+ "profile": "https://owais.lone.pw",
+ "contributions": [
+ "code",
+ "doc",
+ "test"
+ ]
+ },
+ {
+ "login": "ladysamantha",
+ "name": "Samantha Enders",
+ "avatar_url": "https://avatars3.githubusercontent.com/u/35412203?v=4",
+ "profile": "https://github.com/ladysamantha",
+ "contributions": [
+ "code",
+ "doc",
+ "test"
+ ]
+ },
+ {
+ "login": "evanrelf",
+ "name": "Evan Relf",
+ "avatar_url": "https://avatars2.githubusercontent.com/u/887196?v=4",
+ "profile": "https://evanrelf.com",
+ "contributions": [
+ "code",
+ "doc"
+ ]
+ },
+ {
+ "login": "JasonEtco",
+ "name": "Jason Etcovitch",
+ "avatar_url": "https://avatars1.githubusercontent.com/u/10660468?v=4",
+ "profile": "https://jasonet.co",
+ "contributions": [
+ "code",
+ "doc"
+ ]
+ },
+ {
+ "login": "hrvoj3e",
+ "name": "hrvoj3e",
+ "avatar_url": "https://avatars0.githubusercontent.com/u/4988133?v=4",
+ "profile": "https://github.com/hrvoj3e",
+ "contributions": [
+ "bug",
+ "code"
+ ]
+ },
+ {
+ "login": "newmaniese",
+ "name": "Michael Newman",
+ "avatar_url": "https://avatars1.githubusercontent.com/u/64894?v=4",
+ "profile": "http://newmaniese.com",
+ "contributions": [
+ "bug",
+ "code",
+ "doc",
+ "test"
+ ]
+ },
+ {
+ "login": "k-lyda",
+ "name": "Konrad",
+ "avatar_url": "https://avatars0.githubusercontent.com/u/6491400?v=4",
+ "profile": "https://github.com/k-lyda",
+ "contributions": [
+ "bug"
+ ]
+ },
+ {
+ "login": "dubnev",
+ "name": "Will Neville",
+ "avatar_url": "https://avatars1.githubusercontent.com/u/3227558?v=4",
+ "profile": "https://github.com/dubnev",
+ "contributions": [
+ "bug"
+ ]
+ },
+ {
+ "login": "danieltrautmann",
+ "name": "Daniel Trautmann",
+ "avatar_url": "https://avatars1.githubusercontent.com/u/4022138?v=4",
+ "profile": "https://github.com/danieltrautmann",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "Menturan",
+ "name": "Jonas Öhlander",
+ "avatar_url": "https://avatars0.githubusercontent.com/u/16061385?v=4",
+ "profile": "https://github.com/Menturan",
+ "contributions": [
+ "bug"
+ ]
+ },
+ {
+ "login": "lynzt",
+ "name": "lindsay",
+ "avatar_url": "https://avatars1.githubusercontent.com/u/3099491?v=4",
+ "profile": "https://twitter.com/lynzt",
+ "contributions": [
+ "doc"
+ ]
+ },
+ {
+ "login": "bradcypert",
+ "name": "Brad",
+ "avatar_url": "https://avatars0.githubusercontent.com/u/1455979?v=4",
+ "profile": "http://www.bradcypert.com",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "nammn",
+ "name": "Nam Nguyen",
+ "avatar_url": "https://avatars3.githubusercontent.com/u/23652004?v=4",
+ "profile": "https://github.com/nammn",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "halostatue",
+ "name": "Austin Ziegler",
+ "avatar_url": "https://avatars3.githubusercontent.com/u/11361?v=4",
+ "profile": "http://www.halostatue.ca/",
+ "contributions": [
+ "review"
+ ]
+ }
+ ],
+ "contributorsPerLine": 7
+}
diff --git a/.config/fisher/github.com/matchai/spacefish/.editorconfig b/.config/fisher/github.com/matchai/spacefish/.editorconfig
new file mode 100644
index 00000000..3032a2fe
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/.editorconfig
@@ -0,0 +1,12 @@
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+end_of_line = lf
+charset = utf-8
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.fish]
+indent_style = tab
diff --git a/.config/fisher/github.com/matchai/spacefish/.github/ISSUE_TEMPLATE.md b/.config/fisher/github.com/matchai/spacefish/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000..9422984d
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,6 @@
+
diff --git a/.config/fisher/github.com/matchai/spacefish/.github/ISSUE_TEMPLATE/Bug_report.md b/.config/fisher/github.com/matchai/spacefish/.github/ISSUE_TEMPLATE/Bug_report.md
new file mode 100644
index 00000000..dc67fb97
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/.github/ISSUE_TEMPLATE/Bug_report.md
@@ -0,0 +1,32 @@
+---
+name: 🐛 Bug Report
+about: If something isn't working as expected 🤔.
+
+---
+
+## Bug Report
+
+**Current Behavior**
+A clear and concise description of the behavior.
+
+**Expected Behavior**
+A clear and concise description of what you expected to happen.
+
+**Relevant `Fish` Configuration**
+
+```fish
+# Your configuration here
+```
+
+**Environment**
+- Spacefish version: [the output of `echo $SPACEFISH_VERSION`]
+- Fish version: [the output of `fish --version`]
+- Fish plugin manager: [e.g. oh-my-fish, fisher, fin]
+- Terminal emulator: [e.g. iTerm, Hyper, Terminator]
+- Operating system: [e.g. OSX 10.13.4, Windows 10]
+
+**Possible Solution**
+
+
+**Additional context/Screenshots**
+Add any other context about the problem here. If applicable, add screenshots to help explain.
diff --git a/.config/fisher/github.com/matchai/spacefish/.github/ISSUE_TEMPLATE/Feature_request.md b/.config/fisher/github.com/matchai/spacefish/.github/ISSUE_TEMPLATE/Feature_request.md
new file mode 100644
index 00000000..a73f47f4
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/.github/ISSUE_TEMPLATE/Feature_request.md
@@ -0,0 +1,20 @@
+---
+name: 🚀 Feature Request
+about: I have a suggestion (and may want to implement it 🙂)!
+
+---
+
+## Feature Request
+
+
+**Is your feature request related to a problem? Please describe.**
+A clear and concise description of what the problem is. Ex. I have an issue when [...]
+
+**Describe the solution you'd like**
+A clear and concise description of what you want to happen. Add any considered drawbacks.
+
+**Describe alternatives you've considered**
+A clear and concise description of any alternative solutions or features you've considered.
diff --git a/.config/fisher/github.com/matchai/spacefish/.github/ISSUE_TEMPLATE/Support_question.md b/.config/fisher/github.com/matchai/spacefish/.github/ISSUE_TEMPLATE/Support_question.md
new file mode 100644
index 00000000..65bce552
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/.github/ISSUE_TEMPLATE/Support_question.md
@@ -0,0 +1,13 @@
+---
+name: 🤗 Support Question
+about: If you have a question about configuring Spacefish 💬
+
+---
+
+
diff --git a/.config/fisher/github.com/matchai/spacefish/.github/PULL_REQUEST_TEMPLATE.md b/.config/fisher/github.com/matchai/spacefish/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 00000000..fb08438f
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,33 @@
+
+
+## Description
+
+
+## Motivation and Context
+
+
+Closes #
+
+## Types of changes
+
+- [ ] Bug fix (non-breaking change which fixes an issue)
+- [ ] New feature (non-breaking change which adds functionality)
+- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
+
+## Screenshots (if appropriate):
+
+## How Has This Been Tested?
+
+
+
+- [ ] I have tested using **MacOS**
+- [ ] I have tested using **Linux**
+
+## Checklist:
+
+
+- [ ] I have checked that no other PR duplicates mine
+- [ ] My code follows the code style of this project.
+- [ ] My change requires a change to the documentation.
+- [ ] I have updated the documentation accordingly.
+- [ ] I have updated the tests accordingly.
diff --git a/.config/fisher/github.com/matchai/spacefish/.github/release-drafter.yml b/.config/fisher/github.com/matchai/spacefish/.github/release-drafter.yml
new file mode 100644
index 00000000..a4dce4c2
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/.github/release-drafter.yml
@@ -0,0 +1,4 @@
+template: |
+ ## What's Changed
+
+ $CHANGES
diff --git a/.config/fisher/github.com/matchai/spacefish/.gitignore b/.config/fisher/github.com/matchai/spacefish/.gitignore
new file mode 100644
index 00000000..eff7848f
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/.gitignore
@@ -0,0 +1,2 @@
+node_modules/
+_book/
diff --git a/.config/fisher/github.com/matchai/spacefish/.travis.yml b/.config/fisher/github.com/matchai/spacefish/.travis.yml
new file mode 100644
index 00000000..ea753cde
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/.travis.yml
@@ -0,0 +1,41 @@
+language: node_js
+node_js: stable
+env:
+ global:
+ - HOMEBREW_NO_AUTO_UPDATE=1
+ - BREW_FISH2="https://raw.githubusercontent.com/Homebrew/homebrew-core/2827b020c3366ea93566a344167ba62388c16c7d/Formula/fish.rb"
+
+jobs:
+ include:
+ - stage: test
+ name: "Fish 2.X Linux"
+ os: linux
+ sudo: required
+ install:
+ - sudo apt-add-repository -y ppa:fish-shell/release-2
+ - sudo apt-get update
+ - sudo apt-get install -y fish
+
+ - stage: test
+ name: "Fish 2.X macOS"
+ os: osx
+ install: brew install $BREW_FISH2
+
+ - stage: test
+ name: "Fish 3.X Linux"
+ os: linux
+ sudo: required
+ install:
+ - sudo apt-add-repository -y ppa:fish-shell/release-3
+ - sudo apt-get update
+ - sudo apt-get install -y fish
+
+ - stage: test
+ name: "Fish 3.X macOS"
+ os: osx
+ install: brew install fish
+
+ - stage: release
+ provider: script
+ skip_cleanup: true
+ script: npx semantic-release
diff --git a/.config/fisher/github.com/matchai/spacefish/CHANGELOG.md b/.config/fisher/github.com/matchai/spacefish/CHANGELOG.md
new file mode 100644
index 00000000..8bf7c632
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/CHANGELOG.md
@@ -0,0 +1,108 @@
+## [2.6.1](https://github.com/matchai/spacefish/compare/v2.6.0...v2.6.1) (2019-07-01)
+
+
+### Bug Fixes
+
+* correct incorrectly named config options ([#198](https://github.com/matchai/spacefish/issues/198)) ([85f9ef5](https://github.com/matchai/spacefish/commit/85f9ef5))
+
+# [2.6.0](https://github.com/matchai/spacefish/compare/v2.5.0...v2.6.0) (2019-06-19)
+
+
+### Features
+
+* Add elixir section ([#190](https://github.com/matchai/spacefish/issues/190)) ([9cb48ea](https://github.com/matchai/spacefish/commit/9cb48ea))
+
+# [2.5.0](https://github.com/matchai/spacefish/compare/v2.4.0...v2.5.0) (2019-05-23)
+
+
+### Features
+
+* bump version ([13865c6](https://github.com/matchai/spacefish/commit/13865c6))
+
+# [2.4.0](https://github.com/matchai/spacefish/compare/v2.3.1...v2.4.0) (2019-03-08)
+
+
+### Features
+
+* add cargo package manager and refactor existing package section ([#171](https://github.com/matchai/spacefish/issues/171)) ([0064d2d](https://github.com/matchai/spacefish/commit/0064d2d))
+
+## [2.3.1](https://github.com/matchai/spacefish/compare/v2.3.0...v2.3.1) (2019-03-02)
+
+
+### Bug Fixes
+
+* correct typo in venv configuration variables ([#167](https://github.com/matchai/spacefish/issues/167)) ([8a3585c](https://github.com/matchai/spacefish/commit/8a3585c))
+
+# [2.3.0](https://github.com/matchai/spacefish/compare/v2.2.4...v2.3.0) (2019-02-24)
+
+
+### Features
+
+* add Python venv section ([#164](https://github.com/matchai/spacefish/issues/164)) ([3d777fc](https://github.com/matchai/spacefish/commit/3d777fc)), closes [#146](https://github.com/matchai/spacefish/issues/146)
+
+## [2.2.4](https://github.com/matchai/spacefish/compare/v2.2.3...v2.2.4) (2019-02-17)
+
+
+### Bug Fixes
+
+* don't throw errors when there are multiple GOPATHs ([#158](https://github.com/matchai/spacefish/issues/158)) ([653f1c8](https://github.com/matchai/spacefish/commit/653f1c8))
+
+## [2.2.3](https://github.com/matchai/spacefish/compare/v2.2.2...v2.2.3) (2019-02-17)
+
+
+### Bug Fixes
+
+* git status section shows the correct symbol for unmerged ([#159](https://github.com/matchai/spacefish/issues/159)) ([7c2a1d5](https://github.com/matchai/spacefish/commit/7c2a1d5))
+
+## [2.2.2](https://github.com/matchai/spacefish/compare/v2.2.1...v2.2.2) (2019-02-14)
+
+
+### Bug Fixes
+
+* show git status based on SPACEFISH_GIT_STATUS_SHOW ([#155](https://github.com/matchai/spacefish/issues/155)) ([1d34eb9](https://github.com/matchai/spacefish/commit/1d34eb9))
+
+## [2.2.1](https://github.com/matchai/spacefish/compare/v2.2.0...v2.2.1) (2019-02-14)
+
+
+### Bug Fixes
+
+* use SPACEFISH_TIME_FORMAT when formatting time section ([#156](https://github.com/matchai/spacefish/issues/156)) ([6ab4ecc](https://github.com/matchai/spacefish/commit/6ab4ecc))
+
+# [2.2.0](https://github.com/matchai/spacefish/compare/v2.1.0...v2.2.0) (2019-02-02)
+
+
+### Features
+
+* add support for F# project detection in the dotnet section ([c104b04](https://github.com/matchai/spacefish/commit/c104b04))
+
+# [2.1.0](https://github.com/matchai/spacefish/compare/v2.0.1...v2.1.0) (2019-01-23)
+
+
+### Bug Fixes
+
+* correct go development version format ([e678ac2](https://github.com/matchai/spacefish/commit/e678ac2)), closes [#137](https://github.com/matchai/spacefish/issues/137)
+
+
+### Features
+
+* improve pyenv version detection ([22b9e20](https://github.com/matchai/spacefish/commit/22b9e20)), closes [#140](https://github.com/matchai/spacefish/issues/140)
+* provide docker version if in a docker container ([62891b4](https://github.com/matchai/spacefish/commit/62891b4)), closes [#138](https://github.com/matchai/spacefish/issues/138)
+
+## [2.0.1](https://github.com/matchai/spacefish/compare/v2.0.0...v2.0.1) (2019-01-09)
+
+
+### Bug Fixes
+
+* have ACPI use only the first battery value ([#126](https://github.com/matchai/spacefish/issues/126)) ([8fa713b](https://github.com/matchai/spacefish/commit/8fa713b))
+
+# [2.0.0](https://github.com/matchai/spacefish/compare/v1.12.4...v2.0.0) (2019-01-09)
+
+
+### Bug Fixes
+
+* remove color from prefix/suffix ([#133](https://github.com/matchai/spacefish/issues/133)) ([319f0b0](https://github.com/matchai/spacefish/commit/319f0b0))
+
+
+### BREAKING CHANGES
+
+* Because prefix and suffix colors are no longer set to #fff, the color of prefix and suffix will be set to the default foreground color of your shell.
diff --git a/.config/fisher/github.com/matchai/spacefish/CONTRIBUTING.md b/.config/fisher/github.com/matchai/spacefish/CONTRIBUTING.md
new file mode 100644
index 00000000..1a107715
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/CONTRIBUTING.md
@@ -0,0 +1,63 @@
+# Contributing
+
+First of all, thank you for contributing. Any contribution is highly appreciated and welcome.
+
+## Philosophy
+
+There's a simple philosophy behind Spacefish:
+
+* **Absolute parity with spaceship-prompt.** The prompt should be identical to spaceship-prompt when it comes to visuals, functionality, and configuration.
+
+## Setup
+
+1. **Fork** this repo (click the _fork_ button)
+2. **Clone** your fork to your computer (via `git clone`)
+3. **Make your changes**. Check our [API](./docs/API.md) for more information (we suggest you to check out a new branch for changes).
+4. **Test** your code (via `npm test`)
+5. **Add and commit** your contributions
+6. **Push** your changes to your remote fork
+7. **Open a pull-request** on the spacefish repo
+
+## Testing
+
+Unit tests are stored in the `./tests` directory, with the `(filename).test.fish` naming scheme.
+To run the unit tests, simply run:
+
+```sh
+./tests/run.fish
+```
+
+The unit tests will create their own temporary fish environment, so your local fish and spacefish configuration will not affect the unit test run.
+
+## Sections
+
+Spacefish supports most of the popular programming languages, runtimes, version managers, etc. If it doesn't support something that you need, feel free to open a pull request over at Spaceship, and it will be a candidate to be added to Spacefish.
+
+### Will it slow down the prompt?
+
+Every additional section will slow down the prompt a little bit. If your section performs any expensive checks, find a way to make it faster.
+
+* **Good:** check if a command exists, check the value of an environment variable
+* **Bad:** network requests, reading large files, etc
+
+## Documentation
+
+When updating documentation for your section, make sure the markdown document is being properly rendered by Github. Specifically, the following common pitfalls have already been discovered:
+
+* Empty inline code blocks ` ` will only be rendered if you put at least one non-breaking whitespace " " inside, like so: `` ` ` `` → ` `
+* Leading and trailing whitespaces in inline code blocks will be stripped, to indicate that a whitespace is present, use the middot symbol `·`, like so: `` `🐟·` `` → `🐟·`
+
+## Add yourself as a contributor
+
+This project follows the [all contributors](https://github.com/kentcdodds/all-contributors) specification. To add yourself to the table of
+contributors on the README.md, please use the automated script as part of your PR:
+
+```console
+npm install
+npm run contributors:add --
+```
+
+Follow the prompt. If you've already added yourself to the list and are making a new type of contribution, you can run
+it again and select the added contribution type.
+
+**Thank you for reading the contribution guide! Happy hacking!**
diff --git a/.config/fisher/github.com/matchai/spacefish/LICENSE b/.config/fisher/github.com/matchai/spacefish/LICENSE
new file mode 100644
index 00000000..7191c095
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Matan Kushner
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/.config/fisher/github.com/matchai/spacefish/README.md b/.config/fisher/github.com/matchai/spacefish/README.md
new file mode 100644
index 00000000..3dd24047
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/README.md
@@ -0,0 +1,157 @@
+
+
+
+
+
+
+
+
+ Spacefish 🚀🐟
+
+
+
+ Fish Shell
prompt for Astronauts.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Spacefish is a minimalistic, powerful and extremely customizable Fish Shell prompt. It combines everything you may need for convenient work, without unnecessary complications, like a real spacefish.
+
+
+
+
+
+Vist Troubleshooting for instructions to recreate this terminal setup.
+
+## Features
+
+* Clever hostname and username displaying.
+* Indicator if user is root.
+* Prompt character turns red if the last command exits with non-zero code.
+* Current Git branch and rich repo status:
+ * `?` — untracked changes;
+ * `+` — uncommitted changes in the index;
+ * `!` — unstaged changes;
+ * `»` — renamed files;
+ * `✘` — deleted files;
+ * `$` — stashed changes;
+ * `=` — unmerged changes;
+ * `⇡` — ahead of remote branch;
+ * `⇣` — behind of remote branch;
+ * `⇕` — diverged changes.
+* Indicator for jobs in the background (`✦`).
+* Current Node.js version, through nvm/nodenv/n (`⬢`).
+* Current Docker version and connected machine (`🐳`).
+* Current Ruby version, through rvm/rbenv/chruby/asdf (`💎`).
+* Current Go version (`🐹`).
+* Current PHP version (`🐘`).
+* Current Rust version (`𝗥`).
+* Current version of Haskell GHC Compiler, defined in stack.yaml file (`λ`).
+* Current Julia version (`ஃ`).
+* Current Amazon Web Services (AWS) profile (`☁️`) ([Using named profiles](http://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html)).
+* Current Python virtualenv.
+* Current Conda version (`🅒`).
+* Current Elixir Version (`💧`).
+* Current Python pyenv (`🐍`).
+* Current .NET SDK version, through dotnet-cli (`.NET`).
+* Current Kubectl context (`☸️`).
+* Package version, if there is a package in current directory (`📦`).
+* Current battery level and status:
+ * `⇡` - charging;
+ * `⇣` - discharging;
+ * `•` - fully charged.
+* Current Vi-mode mode.
+* Optional exit-code of last command.
+* Optional time stamps 12/24hr in format.
+* Execution time of the last command if it exceeds 5 seconds.
+
+Want more features? Please [open an issue](https://github.com/matchai/spacefish/issues/new?template=Feature_request.md) or send pull request!
+
+## Requirements
+
+To get spacefish working correctly, you will need:
+
+* [`fish`][fish] (v2.7.0 or newer)
+* [Powerline Font](https://github.com/powerline/fonts) must be installed and enabled in your terminal.
+
+## Installation
+
+### [Fisher](https://github.com/jorgebucaran/fisher)
+
+```fish
+$ fisher add matchai/spacefish
+```
+
+### [Oh My Fish!](https://github.com/oh-my-fish/oh-my-fish)
+
+```fish
+$ omf install spacefish
+```
+
+## Customization
+
+Spacefish works really well out of the box, but you can customize your fish to your heart's content!
+
+* [**Options**](./docs/Options.md) — Tweak section's behavior with tons of options.
+
+You have the ability to customize or disable specific elements of Spacefish. All options must be overridden in your `config.fish`.
+
+## Troubleshooting
+
+Having issues? Take a look at our [Troubleshooting](./docs/Troubleshooting.md) page.
+
+Still struggling? Please [file an issue](https://github.com/matchai/spacefish/issues/new?template=Support_question.md), describe your problem, and we will gladly help you.
+
+## Contributors
+
+Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)):
+
+
+
+
+
+
+
+This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome!
+
+## License
+
+MIT © [Matan Kushner](http://matchai.me)
+
+
+
+[spaceship]: https://github.com/denysdovhan/spaceship-prompt
+[fish]: https://fishshell.com
+[zsh]: http://zsh.org
diff --git a/.config/fisher/github.com/matchai/spacefish/SUMMARY.md b/.config/fisher/github.com/matchai/spacefish/SUMMARY.md
new file mode 120000
index 00000000..0b731dfc
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/SUMMARY.md
@@ -0,0 +1 @@
+./docs/README.md
\ No newline at end of file
diff --git a/.config/fisher/github.com/matchai/spacefish/book.json b/.config/fisher/github.com/matchai/spacefish/book.json
new file mode 100644
index 00000000..bf57b999
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/book.json
@@ -0,0 +1,26 @@
+{
+ "gitbook": "3.x.x",
+ "title": "Spacefish",
+ "plugins": ["edit-link", "github", "github-buttons", "anchorjs", "ga"],
+ "pluginsConfig": {
+ "ga": {
+ "token": "UA-71160903-2"
+ },
+ "edit-link": {
+ "base": "https://github.com/matchai/spacefish/tree/master",
+ "label": "Edit This Page"
+ },
+ "github": {
+ "url": "https://github.com/matchai/spacefish/"
+ },
+ "github-buttons": {
+ "buttons": [{
+ "user": "matchai",
+ "repo": "spacefish",
+ "type": "star",
+ "size": "small",
+ "count": true
+ }]
+ }
+ }
+}
diff --git a/.config/fisher/github.com/matchai/spacefish/docs/API.md b/.config/fisher/github.com/matchai/spacefish/docs/API.md
new file mode 100644
index 00000000..a0db51a9
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/docs/API.md
@@ -0,0 +1,162 @@
+# API
+
+This page describes the Spacefish API for creating plugins and tweaking Spacefish's behavior.
+
+Spacefish uses the `SPACEFISH_` prefix for variables and the `__sf_` prefix for functions to avoid namespace collisions. All sections, including custom ones, are required to use the `__sf_` prefix before their name to load correctly.
+
+## Example section
+
+Below is an example of a typical section for Spacefish. Pay attention to a few critical aspects:
+
+* Variables used for configuration should start with `SPACEFISH_`.
+* The section's name should start with `__sf_`.
+* Only show the section as is needed (only in directories containing specific files, when a specific command is available, etc).
+
+Take a look at [Contribution guidelines](../CONTRIBUTING.md) for further details.
+
+```sh
+#
+# Foobar
+#
+# Foobar is a supa-dupa cool tool for making you development easier.
+# Link: https://www.foobar.xyz
+
+# __sf_ prefix before section's name is required!
+# Otherwise this section won't be loaded.
+function __sf_section_foobar -d "Show foobar status"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_FOOBAR_SHOW true
+ __sf_util_set_default SPACEFISH_FOOBAR_PREFIX $SPACEFISH_PROMPT_DEFAULT_PREFIX
+ __sf_util_set_default SPACEFISH_FOOBAR_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_FOOBAR_SYMBOL "🍷 "
+ __sf_util_set_default SPACEFISH_FOOBAR_COLOR white
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ # If SPACEFISH_FOOBAR_SHOW is false, don't show the foobar section
+ [ $SPACEFISH_FOOBAR_SHOW = false ]; and return
+
+ # If the foobar command doesn't exist, don't show the foobar section
+ type -q foobar; or return
+
+ # Here some of the various expressions that can be tested
+ # The full list can be found here:
+ # https://fishshell.com/docs/current/commands.html#test
+ type -q command # test that a command exists
+ test -e /path/to/file # test that a file exists
+ test -d /path/to/dir # test that a directory exists
+ test operand1 = operand2 # that for two equal strings
+ test -n "$variable" # test that a variable exists
+
+ # Use `set -l` to define local variables to avoid populating
+ # the global namespace
+ set -l foobar_status
+
+ if test "$SOME_CONDITION" = "true"
+ set foobar_status (foobar baz)
+ else
+ set foobar_status (foobar foo)
+ end
+
+ # Display the foobar section
+ __sf_lib_section \
+ $SPACEFISH_FOOBAR_COLOR \
+ $SPACEFISH_FOOBAR_PREFIX \
+ $SPACEFISH_FOOBAR_SYMBOL \
+ $SPACEFISH_FOOBAR_SUFFIX
+end
+```
+
+## `SPACEFISH_VERSION`
+
+An environment variable that defines the version of currently running Spacefish prompt. Can be used for issue reporting or debugging purposes.
+
+Accessible to any program or script running in a current shell session.
+
+### Example
+
+```sh
+echo $SPACEFISH_VERSION
+#> 0.1.0
+```
+
+## `__sf_lib_section [prefix] [suffix]`
+
+This function prints out the prompt section prefixed with `prefix`, suffixed with `suffix` and `content` formatted to display in `color`. The **Bold** style is applied by default.
+
+`prefix`, `suffix` and `content` can contain `set_color` to set an additional foreground color, background color or other formatting styles. Read more about `set_color` in the [set_color - set the terminal color](https://fishshell.com/docs/current/commands.html#set_color) section of the Fish Shell documentation.
+
+If `SPACEFISH_PROMPT_PREFIXES_SHOW` is `false` or if the section is the first to appear in the prompt, then `prefix` will be omitted.
+
+If `SPACEFISH_PROMPT_SUFFIXES_SHOW` is `false`, then `suffix` will be omitted.
+
+Both `prefix` and `suffix` are optional. They are equal to empty strings by default.
+
+### Arguments
+
+1. `color` _Required_ — The color used when displaying the `content`. Can be any of the valid [basic colors](https://fishshell.com/docs/current/commands.html#set_color) or can be any valid RGB hex code.
+2. `prefix` _Optional_ — The prefix shown before `content`. Usually, it's the value of `SPACEFISH_*_PREFIX`.
+3. `content` _Required_ — The content of the section. Can be any valid value or the result of command execution.
+4. `suffix` _Optional_ — The suffix shown after `content`. Usually, it's the value of `SPACEFISH_*_SUFFIX`.
+
+### Example
+
+```sh
+# Display the prompt section with a prefix and suffix
+# Backslash is used to escape the line endings
+__sf_lib_section \
+$SPACEFISH_SECTION_COLOR \
+$SPACEFISH_SECTION_PREFIX \
+$SPACEFISH_SECTION_SYMBOL$section_content \
+$SPACEFISH_SECTION_SUFFIX
+
+# Display prompt section without prefix and suffix
+__sf_lib_section $color $SPACEFISH_CHAR_SYMBOL
+```
+
+## `__sf_util_set_default `
+
+This utility function is used to define a default value for a variable while allowing it to be overwritten by a user's personal configuration files (e.g. setting it in their `config.fish`)
+
+### Arguments
+
+1. `variable_name` _Required_ — the name of the configuration variable.
+2. `value` _Required_ — the value to be assigned by default.
+
+### Example
+
+```sh
+# Preassign a value to `SPACEFISH_CHAR_SYMBOL`
+set -g SPACEFISH_CHAR_SYMBOL ❯
+
+# Assign a value if one doesn't already exist
+__sf_util_set_default SPACEFISH_CHAR_SYMBOL ■
+__sf_util_set_default SPACEFISH_RUBY_SYMBOL 💎
+
+# The original value assigned is used
+echo $SPACEFISH_CHAR_SYMBOL
+#> ❯
+
+echo $SPACEFISH_RUBY_SYMBOL
+#> 💎
+```
+
+## `__sf_util_git_branch`
+
+This utility returns the current branch name if the current working directory is a Git repository, and will return nothing if it's not.
+
+### Example
+
+```sh
+# Return if the current working directory is not a Git repository
+[ -z (__sf_util_git_branch) ]; and return
+
+# Print the Git branch name of the current working directory
+echo (__sf_util_git_branch)
+#> master
+```
diff --git a/.config/fisher/github.com/matchai/spacefish/docs/Options.md b/.config/fisher/github.com/matchai/spacefish/docs/Options.md
new file mode 100644
index 00000000..6a85fc77
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/docs/Options.md
@@ -0,0 +1,438 @@
+## Options
+
+You have ability to customize or disable specific elements of Spacefish. All options must be overridden in your `config.fish`.
+
+Colors for sections can be [basic colors](https://fishshell.com/docs/current/commands.html#set_color) or [color codes](https://upload.wikimedia.org/wikipedia/commons/1/15/Xterm_256color_chart.svg).
+
+**Note:** the symbol `·` in this document represents a regular space character ` `, it is used to clearly indicate when an option default value starts or ends with a space.
+
+### Order
+
+You can specify the order of prompt section using `SPACEFISH_PROMPT_ORDER` option. Use Zsh array syntax to define your own prompt order.
+
+The order also defines which sections that Spacefish loads. If you're struggling with slow prompt, you can just omit the sections that you don't use, and they won't be loaded.
+
+The default order is:
+
+```fish
+ set SPACEFISH_PROMPT_ORDER time user dir host git package node docker ruby golang php rust haskell julia aws conda pyenv kubecontext exec_time line_sep battery jobs exit_code char
+```
+You can also add items to the right prompt by specifying them in the `SPACEFISH_RPROMPT_ORDER` option. By default `SPACEFISH_RPROMPT_ORDER` is empty.
+
+### Prompt
+
+This group of options defines a behavior of prompt and standard parameters for sections displaying.
+
+| Variable | Default | Meaning |
+| :--- | :---: | --- |
+| `SPACEFISH_PROMPT_ADD_NEWLINE` | `true` | Adds a newline character before each prompt line |
+| `SPACEFISH_PROMPT_SEPARATE_LINE` | `true` | Make the prompt span across two lines |
+| `SPACEFISH_PROMPT_FIRST_PREFIX_SHOW` | `false` | Shows a prefix of the first section in prompt |
+| `SPACEFISH_PROMPT_PREFIXES_SHOW` | `true` | Show prefixes before prompt sections |
+| `SPACEFISH_PROMPT_SUFFIXES_SHOW` | `true` | Show suffixes before prompt sections |
+| `SPACEFISH_PROMPT_DEFAULT_PREFIX` | `via` | Default prefix for prompt sections |
+| `SPACEFISH_PROMPT_DEFAULT_SUFFIX` | ` ` | Default suffix for prompt section |
+
+### Time \(`time`\)
+
+| Variable | Default | Meaning |
+| :------- | :-----: | ------- |
+| `SPACEFISH_TIME_SHOW` | `false` | Show current time |
+| `SPACEFISH_DATE_SHOW` | `false·` | Show today's date |
+| `SPACEFISH_TIME_PREFIX` | `at·` | Prefix before time section |
+| `SPACEFISH_TIME_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after time section |
+| `SPACEFISH_TIME_FORMAT` | `false` | Custom time/date formatting, set as a string to enable (`man date` for help) |
+| `SPACEFISH_TIME_12HR` | `false` | Use 12 hour clock AM/PM |
+| `SPACEFISH_TIME_COLOR` | `yellow` | Color of time section |
+
+### Username \(`user`\)
+
+By default, a username is shown only when it's not the same as `$LOGNAME`, when you're connected via SSH or when you're root. Root user is highlighted in `SPACEFISH_USER_COLOR_ROOT` color (red as default).
+
+| Variable | Default | Meaning |
+| :------- | :-----: | ------- |
+| `SPACEFISH_USER_SHOW` | `true` | Show user section (`true`, `false`, `always` or `needed`) |
+| `SPACEFISH_USER_PREFIX` | `with·` | Prefix before user section |
+| `SPACEFISH_USER_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after user section |
+| `SPACEFISH_USER_COLOR` | `yellow` | Color of user section |
+| `SPACEFISH_USER_COLOR_ROOT` | `red` | Color of user section when it's root |
+
+`SPACEFISH_USER_SHOW` defines when to show username section. Here are possible values:
+
+| `SPACEFISH_USER_SHOW` | Show on local | Show on remote |
+| :-------------------: | :------------- | :-------------- |
+| `false` | Never | Never |
+| `always` | Always | Always |
+| `true` | If needed | Always |
+| `needed` | If needed | If needed |
+
+
+### Directory \(`dir`\)
+
+Directory is always shown and truncated to the value of `SPACEFISH_DIR_TRUNC`. While you are in a Git repository, this section shows only the project title and relevant status icons. If current directory is write-protected or if current user doesn't have write permissions, a padlock (by default) will be displayed as a suffix.
+
+| Variable | Default | Meaning |
+| :--- | :---: | --- |
+| `SPACEFISH_DIR_SHOW` | `true` | Show directory section |
+| `SPACEFISH_DIR_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after current directory |
+| `SPACEFISH_DIR_TRUNC` | `3` | Number of folders of cwd to show in prompt, 0 to show all |
+| `SPACEFISH_DIR_TRUNC_REPO` | `true` | While in `git` repo, show only root directory and folders inside it |
+| `SPACEFISH_DIR_COLOR` | `cyan` | Color of directory section |
+| `SPACEFISH_DIR_PREFIX` | `in·` | Prefix before current directory |
+| `SPACEFISH_DIR_LOCK_SHOW` | `true` | Show directory write-protected symbol |
+| `SPACEFISH_DIR_LOCK_SYMBOL` | ![·🔒](https://user-images.githubusercontent.com/11844760/47611530-7bf99c00-da8d-11e8-95da-f4ec1f23203a.png) | The symbol displayed if directory is write-protected (requires powerline patched font) |
+| `SPACEFISH_DIR_LOCK_COLOR` | `red` | Color for the lock symbol |
+
+### Hostname \(`host`\)
+
+Hostname should only be shown while you are connected to another machine using SSH, unless you change it using SPACEFISH_HOST_SHOW.
+
+| Variable | Default | Meaning |
+| :--- | :---: | --- |
+| `SPACEFISH_HOST_SHOW` | `true` | Show host section (`true`, `false`, `always`) |
+| `SPACEFISH_HOST_SHOW_FULL` | `false` | Show full hostname section (`true`, `false`) |
+| `SPACEFISH_HOST_PREFIX` | `at·` | Prefix before the hostname |
+| `SPACEFISH_HOST_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after the hostname |
+| `SPACEFISH_HOST_COLOR` | `blue` | Color of the hostname |
+| `SPACEFISH_HOST_COLOR_SSH` | `green` | Color of the hostname during SSH |
+
+### Git \(`git`\)
+
+Git section is consists with `git_branch` and `git_status` subsections. It is shown only in Git repositories.
+
+| Variable | Default | Meaning |
+| :--- | :---: | --- |
+| `SPACEFISH_GIT_SHOW` | `true` | Show Git section |
+| `SPACEFISH_GIT_PREFIX` | `on·` | Prefix before Git section |
+| `SPACEFISH_GIT_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after Git section |
+| `SPACEFISH_GIT_SYMBOL` | ![·](https://user-images.githubusercontent.com/3459374/34947621-4f324a92-fa13-11e7-9b99-cdba2cdda6b9.png) | Character to be shown before Git section \(requires [powerline patched font](https://github.com/powerline/fonts) |
+
+#### Git branch \(`git_branch`\)
+
+| Variable | Default | Meaning |
+| :--- | :---: | --- |
+| `SPACEFISH_GIT_BRANCH_SHOW` | `true` | Show Git branch subsection |
+| `SPACEFISH_GIT_BRANCH_PREFIX` | `$SPACEFISH_GIT_SYMBOL` | Prefix before Git branch subsection |
+| `SPACEFISH_GIT_BRANCH_SUFFIX` | ` ` | Suffix after Git branch subsection |
+| `SPACEFISH_GIT_BRANCH_COLOR` | `(set_color magenta)` | Color of Git branch subsection |
+
+#### Git status \(`git_status`\)
+
+Git status indicators is shown only when you have dirty repository.
+
+| Variable | Default | Meaning |
+| :--- | :---: | --- |
+| `SPACEFISH_GIT_STATUS_SHOW` | `true` | Show Git status subsection |
+| `SPACEFISH_GIT_STATUS_PREFIX` | `·[` | Prefix before Git status subsection |
+| `SPACEFISH_GIT_STATUS_SUFFIX` | `]` | Suffix after Git status subsection |
+| `SPACEFISH_GIT_STATUS_COLOR` | `red` | Color of Git status subsection |
+| `SPACEFISH_GIT_STATUS_UNTRACKED` | `?` | Indicator for untracked changes |
+| `SPACEFISH_GIT_STATUS_ADDED` | `+` | Indicator for added changes |
+| `SPACEFISH_GIT_STATUS_MODIFIED` | `!` | Indicator for unstaged files |
+| `SPACEFISH_GIT_STATUS_RENAMED` | `»` | Indicator for renamed files |
+| `SPACEFISH_GIT_STATUS_DELETED` | `✘` | Indicator for deleted files |
+| `SPACEFISH_GIT_STATUS_STASHED` | `$` | Indicator for stashed changes |
+| `SPACEFISH_GIT_STATUS_UNMERGED` | `=` | Indicator for unmerged changes |
+| `SPACEFISH_GIT_STATUS_AHEAD` | `⇡` | Indicator for unpushed changes \(ahead of remote branch\) |
+| `SPACEFISH_GIT_STATUS_BEHIND` | `⇣` | Indicator for unpulled changes \(behind of remote branch\) |
+| `SPACEFISH_GIT_STATUS_DIVERGED` | `⇕` | Indicator for diverged chages \(diverged with remote branch\) |
+
+### Package version \(`package`\)
+
+> Works only for [npm](https://www.npmjs.com/) and [cargo](https://crates.io/) at the moment. Please, help [spaceship](https://github.com/denysdovhan/spaceship-prompt) improve this section!
+
+Package version is shown when repository is a package (e.g. contains a `package.json` or `Cargo.toml` file). If no version information is found in `package.json` or there is an error parsing `Cargo.toml`, the `⚠` symbol will be shown.
+
+* **npm** — `npm` package contains a `package.json` file. We use `jq`, `python` to parse package version for improving performance and `node` as a fallback. Install [jq](https://stedolan.github.io/jq/) for **improved performance** of this section ([Why?](./Troubleshooting.md#why-is-my-prompt-slow))
+* **cargo** — `cargo` package contains a `Cargo.toml` file. Currently, we use `cargo pkgid`, it depends on `Cargo.lock`. So if package version isn't shown, you may need to run some command like `cargo build` which can generate `Cargo.lock` file.
+
+> **Note:** This is the version of the package you are working on, not the version of package manager itself.
+
+| Variable | Default | Meaning |
+| :------- | :-----: | ------- |
+| `SPACEFISH_PACKAGE_SHOW` | `true` | Show package version |
+| `SPACEFISH_PACKAGE_PREFIX` | `is·` | Prefix before package version section |
+| `SPACEFISH_PACKAGE_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after package version section |
+| `SPACEFISH_PACKAGE_SYMBOL` | `📦·` | Character to be shown before package version |
+| `SPACEFISH_PACKAGE_COLOR` | `red` | Color of package version section |
+
+### Node.js \(`node`\)
+
+Node.js section is shown only in directories that contain `package.json` file, or `node_modules` folder, or any other file with `.js` extension.
+
+If you set `SPACEFISH_NODE_DEFAULT_VERSION` to the default Node.js version and your current version is the same as `SPACEFISH_NODE_DEFAULT_VERSION`, then Node.js section will be hidden.
+
+| Variable | Default | Meaning |
+| :------- | :-----: | ------- |
+| `SPACEFISH_NODE_SHOW` | `true` | Current Node.js section |
+| `SPACEFISH_NODE_PREFIX` | `$SPACEFISH_PROMPT_DEFAULT_PREFIX` | Prefix before Node.js section |
+| `SPACEFISH_NODE_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after Node.js section |
+| `SPACEFISH_NODE_SYMBOL` | `⬢·` | Character to be shown before Node.js version |
+| `SPACEFISH_NODE_DEFAULT_VERSION` | ` ` | Node.js version to be treated as default |
+| `SPACEFISH_NODE_COLOR` | `green` | Color of Node.js section |
+
+### Julia \(`julia`\)
+
+Julia section is shown only in directories that contain any file with `.jl` extension.
+
+| Variable | Default | Meaning |
+| :------- | :-----: | ------- |
+| `SPACEFISH_JULIA_SHOW` | `true` | Show Julia section |
+| `SPACEFISH_JULIA_PREFIX` | `$SPACEFISH_PROMPT_DEFAULT_PREFIX` | Prefix before Julia section |
+| `SPACEFISH_JULIA_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after Julia section |
+| `SPACEFISH_JULIA_SYMBOL` | `ஃ·` | Character to be shown before Julia version |
+| `SPACEFISH_JULIA_COLOR` | `green` | Color of Julia section |
+
+### Docker (`docker`)
+
+Docker section is shown only in directories that contain `Dockerfile` or `docker-compose.yml` and also if the `$COMPOSE_FILE` is set.
+The section will also appear when `.dockerenv` is in the root directory, signifying that you're in a container.
+
+| Variable | Default | Meaning |
+| :------- | :-----: | ------- |
+| `SPACEFISH_DOCKER_SHOW` | `true` | Show current Docker version |
+| `SPACEFISH_DOCKER_PREFIX` | `$SPACEFISH_PROMPT_DEFAULT_PREFIX` | Prefix before the Docker section |
+| `SPACEFISH_DOCKER_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after the Docker section |
+| `SPACEFISH_DOCKER_SYMBOL` | `🐳·` | Character to be shown before Docker version |
+| `SPACEFISH_DOCKER_COLOR` | `cyan` | Color of Docker section |
+| `SPACEFISH_DOCKER_VERBOSE_VERSION` | `false` | Show full version name. (Beta, Nightly) |
+
+### Ruby \(`ruby`\)
+
+Ruby section is shown only in directories that contain `Gemfile`, or `Rakefile`, or any other file with `.rb` extension.
+
+| Variable | Default | Meaning |
+| :------- | :-----: | ------- |
+| `SPACEFISH_RUBY_SHOW` | `true` | Show Ruby section |
+| `SPACEFISH_RUBY_PREFIX` | `$SPACEFISH_PROMPT_DEFAULT_PREFIX` | Prefix before Ruby section |
+| `SPACEFISH_RUBY_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after Ruby section |
+| `SPACEFISH_RUBY_SYMBOL` | `💎·` | Character to be shown before Ruby version |
+| `SPACEFISH_RUBY_COLOR` | `red` | Color of Ruby section |
+
+### Haskell \(`haskell`\)
+
+Haskell section is shown only in directories that contain `stack.yaml`.
+
+| Variable | Default | Meaning |
+| :------- | :-----: | ------- |
+| `SPACEFISH_HASKELL_SHOW` | `true` | Show Haskell section |
+| `SPACEFISH_HASKELL_PREFIX` | `$SPACEFISH_PROMPT_DEFAULT_PREFIX` | Prefix before Haskell section |
+| `SPACEFISH_HASKELL_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after Haskell section |
+| `SPACEFISH_HASKELL_SYMBOL` | `λ·` | Character to be shown before Haskell version |
+| `SPACEFISH_HASKELL_COLOR` | `red` | Color of Haskell section |
+
+### Amazon Web Services (AWS) (`aws`)
+
+Shows selected Amazon Web Services profile configured using [`AWS_PROFILE`](http://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html) variable.
+
+| Variable | Default | Meaning |
+| :------- | :-----: | ------- |
+| `SPACEFISH_AWS_SHOW` | `true` | Show current selected AWS-cli profile or not |
+| `SPACEFISH_AWS_PREFIX` | `using·` | Prefix before the AWS section |
+| `SPACEFISH_AWS_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after the AWS section |
+| `SPACEFISH_AWS_SYMBOL` | `☁️·` | Character to be shown before AWS profile |
+| `SPACEFISH_AWS_COLOR` | `ff8700` | Color of AWS section |
+
+### Virtualenv (`venv`)
+
+Python virtual environment when $VIRTUAL_ENV is set.
+
+| Variable | Default | Meaning |
+| :------- | :-----: | ------- |
+| `SPACEFISH_VENV_SHOW` | `true` | Show current Python virtualenv or not |
+| `SPACEFISH_VENV_PREFIX` | `$SPACEFISH_PROMPT_DEFAULT_PREFIX` | Prefix before the virtualenv section |
+| `SPACEFISH_VENV_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after the virtualenv section |
+| `SPACEFISH_VENV_SYMBOL` | `·` | Character to be shown before virtualenv |
+| `SPACEFISH_VENV_GENERIC_NAMES` | `virtualenv venv .venv` | If the virtualenv folder is in this *array*, than use its parent directory as its name instead |
+| `SPACEFISH_VENV_COLOR` | `blue` | Color of virtualenv environment section |
+
+
+### Conda \(`conda`\)
+
+Conda section is shown when ```conda``` is installed and $CONDA_DEFAULT_ENV is set.
+
+| Variable | Default | Meaning |
+| :------- | :-----: | ------- |
+| `SPACEFISH_CONDA_SHOW` | `true` | Show current Conda version |
+| `SPACEFISH_CONDA_PREFIX` | `$SPACEFISH_PROMPT_DEFAULT_PREFIX` | Prefix before the conda section |
+| `SPACEFISH_CONDA_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after the conda section |
+| `SPACEFISH_CONDA_SYMBOL` | `🅒·` | Character to be shown before Conda version |
+| `SPACEFISH_CONDA_COLOR` | `blue` | Color of Conda section |
+
+
+### Elixir \(`elixir`\)
+
+Elixir section is shown when ```mix.exs``` is found or elixir files are found and either kiex, exenv, elixir is avaiable on your path.
+
+| Variable | Default | Meaning |
+| :------- | :-----: | ------- |
+| `SPACEFISH_ELIXIR_SHOW` | `true` | Show current Elixir version |
+| `SPACEFISH_ELIXIR_PREFIX` | `$SPACEFISH_PROMPT_DEFAULT_PREFIX` | Prefix before the elixir section |
+| `SPACEFISH_ELIXIR_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after the elixir section |
+| `SPACEFISH_ELIXIR_SYMBOL` | `💧·` | Character to be shown before Elixir version |
+| `SPACEFISH_ELIXIR_COLOR` | `magenta` | Color of Elixir section |
+
+### Pyenv \(`pyenv`\)
+
+Pyenv section is shown only in directories that contain `.python-version`, `requirements.txt`, `pyproject.toml`, or any other file with `.py` extension.
+The section will also be shown if the `$PYENV_VERSION` environment variable is set.
+
+| Variable | Default | Meaning |
+| :------- | :-----: | ------- |
+| `SPACEFISH_PYENV_SHOW` | `true` | Show current Pyenv version |
+| `SPACEFISH_PYENV_PREFIX` | `$SPACEFISH_PROMPT_DEFAULT_PREFIX` | Prefix before the pyenv section |
+| `SPACEFISH_PYENV_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after the pyenv section |
+| `SPACEFISH_PYENV_SYMBOL` | `🐍·` | Character to be shown before Pyenv version |
+| `SPACEFISH_PYENV_COLOR` | `yellow` | Color of Pyenv section |
+
+### Go \(`golang`\)
+
+Go section is shown only in directories that contain `Godeps`, `glide.yaml`, `go.mod`, any other file with `.go` extension, or when current directory is in the Go workspace defined in `$GOPATH`.
+
+| Variable | Default | Meaning |
+| :------- | :-----: | ------- |
+| `SPACEFISH_GOLANG_SHOW` | `true` | Show current Go version |
+| `SPACEFISH_GOLANG_PREFIX` | `$SPACEFISH_PROMPT_DEFAULT_PREFIX` | Prefix before the Go section |
+| `SPACEFISH_GOLANG_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after the Go section |
+| `SPACEFISH_GOLANG_SYMBOL` | `🐹·` | Character to be shown before Go version |
+| `SPACEFISH_GOLANG_COLOR` | `cyan` | Color of Go section |
+
+### PHP (`php`)
+
+PHP section is shown only in directories that contain `composer.json` file, or any other file with `.php` extension.
+
+| Variable | Default | Meaning |
+| :------- | :-----: | ------- |
+| `SPACEFISH_PHP_SHOW` | true | Show PHP section |
+| `SPACEFISH_PHP_PREFIX` | `$SPACEFISH_PROMPT_DEFAULT_PREFIX` | Prefix before the PHP section |
+| `SPACEFISH_PHP_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after the PHP section |
+| `SPACEFISH_PHP_SYMBOL` | `🐘·` | Character to be shown before PHP version |
+| `SPACEFISH_PHP_COLOR` | `blue` | Color of PHP section |
+
+### Rust (`rust`)
+
+Rust section is shown only in directories that contain `Cargo.toml` or any other file with `.rs` extension.
+
+| Variable | Default | Meaning |
+| :------- | :-----: | ------- |
+| `SPACEFISH_RUST_SHOW` | `true` | Show current Rust version |
+| `SPACEFISH_RUST_PREFIX` | `$SPACEFISH_PROMPT_DEFAULT_PREFIX` | Prefix before the Rust section |
+| `SPACEFISH_RUST_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after the Rust section |
+| `SPACEFISH_RUST_SYMBOL` | `𝗥·` | Character to be shown before Rust version |
+| `SPACEFISH_RUST_COLOR` | `red` | Color of Rust section |
+| `SPACEFISH_RUST_VERBOSE_VERSION` | `false` | Show what branch is being used, if any. (Beta, Nightly) |
+
+### .NET (`dotnet`)
+
+.NET section is shown only in directories that contains a `project.json`, `global.json` or `paket.dependencies` file, or a file with one of these extensions: `.csproj`, `.xproj`, `.fproj` or `.sln`.
+
+| Variable | Default | Meaning |
+| :------- | :-----: | ------- |
+| `SPACEFISH_DOTNET_SHOW` | `true` | Current .NET section |
+| `SPACEFISH_DOTNET_PREFIX` | `$SPACEFISH_PROMPT_DEFAULT_PREFIX` | Prefix before .NET section |
+| `SPACEFISH_DOTNET_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after .NET section |
+| `SPACEFISH_DOTNET_SYMBOL` | `.NET·` | Character to be shown before .NET version |
+| `SPACEFISH_DOTNET_COLOR` | `128` | Color of .NET section |
+
+### Kubectl context \(`kubecontext`\)
+
+Kubernetes context is shown everywhere if `kubectl` binary is found.
+
+| Variable | Default | Meaning |
+| :------- | :-----: | ------- |
+| `SPACEFISH_KUBECONTEXT_SHOW` | `true` | Show current kubectl context |
+| `SPACEFISH_KUBECONTEXT_NAMESPACE_SHOW` | `true` | Show current kubectl context namespace|
+| `SPACEFISH_KUBECONTEXT_PREFIX` | `at ` | Prefix before the kubectl section |
+| `SPACEFISH_KUBECONTEXT_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after the kubectl section |
+| `SPACEFISH_KUBECONTEXT_SYMBOL` | `☸️ ` | Character to be shown before kubectl context |
+| `SPACEFISH_KUBECONTEXT_COLOR` | `cyan` | Color of kubectl section |
+
+### Exec Time \(`exec_time`\)
+
+Execution time of the last command. Will be displayed if it exceeds the set threshold of time.
+
+| Variable | Default | Meaning |
+| :------- | :-----: | ------- |
+| `SPACEFISH_EXEC_TIME_SHOW` | `true` | Show execution time |
+| `SPACEFISH_EXEC_TIME_PREFIX` | `took·` | Prefix before exec time section |
+| `SPACEFISH_EXEC_TIME_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after exec time section |
+| `SPACEFISH_EXEC_TIME_COLOR` | `yellow` | Color of exec time section |
+| `SPACEFISH_EXEC_TIME_ELAPSED` | `5` | The threshold in seconds for showing exec time section |
+
+### Line Separator \(`line_sep`\)
+
+This is where the prompt will split into two lines, if enabled.
+
+### Battery \(`battery`\)
+
+By default, Battery section is shown only if battery level is below `SPACEFISH_BATTERY_THRESHOLD` \(default: 10%\).
+
+| Variable | Default | Meaning |
+| :--- | :---: | --- |
+| `SPACEFISH_BATTERY_SHOW` | `true` | Show battery section \(`true`, `false`, `always` or `charged`\) |
+| `SPACEFISH_BATTERY_PREFIX` | ` ` | Prefix before battery section |
+| `SPACEFISH_BATTERY_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after battery section |
+| `SPACEFISH_BATTERY_SYMBOL_CHARGING` | `⇡` | Character to be shown if battery is charging |
+| `SPACEFISH_BATTERY_SYMBOL_DISCHARGING` | `⇣` | Character to be shown if battery is discharging |
+| `SPACEFISH_BATTERY_SYMBOL_FULL` | `•` | Character to be shown if battery is full |
+| `SPACEFISH_BATTERY_THRESHOLD` | 10 | Battery level below which battery section will be shown |
+
+`SPACEFISH_BATTERY_SHOW` defines when to show battery section. Here are possible values:
+
+| `SPACEFISH_BATTERY_SHOW` | Below threshold | Above threshold | Fully charged |
+| :---: | :--- | :--- | :--- |
+| `false` | Hidden | Hidden | Hidden |
+| `always` | Shown | Shown | Shown |
+| `true` | Shown | Hidden | Hidden |
+| `charged` | Shown | Hidden | Shown |
+
+### Vi-mode \( vi_mode \)
+
+This section shows mode indicator only when Vi-mode is enabled.
+
+| Variable | Default | Meaning |
+| :--- | :---: | --- |
+| `SPACEFISH_VI_MODE_SHOW` | `true` | Shown current Vi-mode or not |
+| `SPACEFISH_VI_MODE_PREFIX` | ` ` | Prefix before Vi-mode section |
+| `SPACEFISH_VI_MODE_SUFFIX` | `$SPACEFISH_PROMPT_DEFAULT_SUFFIX` | Suffix after Vi-mode section |
+| `SPACEFISH_VI_MODE_INSERT` | `[I]` | Text to be shown when in insert mode |
+| `SPACEFISH_VI_MODE_NORMAL` | `[N]` | Text to be shown when in normal mode |
+| `SPACEFISH_VI_MODE_VISUAL` | `[V]` | Text to be shown when in visual mode |
+| `SPACEFISH_VI_MODE_REPLACE_ONE` | `[R]` | Text to be shown when in replace_one mode |
+| `SPACEFISH_VI_MODE_COLOR` | `white` | Color of Vi-mode section |
+
+### Jobs \(`jobs`\)
+
+This section only shows when there are backgrounded jobs.
+
+| Variable | Default | Meaning |
+| :------- | :-----: | ------- |
+| `SPACEFISH_JOBS_SHOW` | `true` | Show background jobs indicator |
+| `SPACEFISH_JOBS_PREFIX` | ` ` | Prefix before the jobs indicator |
+| `SPACEFISH_JOBS_SUFFIX` | ` ` | Suffix after the jobs indicator |
+| `SPACEFISH_JOBS_SYMBOL` | `✦` | Character to be shown when jobs are hiding |
+| `SPACEFISH_JOBS_COLOR` | `blue` | Color of background jobs section |
+| `SPACEFISH_JOBS_AMOUNT_PREFIX` | ` ` | Prefix before the number of jobs |
+| `SPACEFISH_JOBS_AMOUNT_SUFFIX` | ` ` | Suffix after the number of jobs |
+| `SPACEFISH_JOBS_AMOUNT_THRESHOLD` | `1` | Number of jobs after which job count will be shown |
+
+### Exit Code \(`exit_code`\)
+Disabled by default. Set `SPACEFISH_EXIT_CODE_SHOW` to `true` to enable.
+
+| Variable | Default | Meaning |
+| :--- | :---: | --- |
+| `SPACEFISH_EXIT_CODE_SHOW` | `false` | Show the exit code of the previous command |
+| `SPACEFISH_EXIT_CODE_PREFIX` | ` ` | Prefix of exit code |
+| `SPACEFISH_EXIT_CODE_SUFFIX` | ` ` | Suffix of exit code |
+| `SPACEFISH_EXIT_CODE_SYMBOL` | `✘` | Symbol before the exit code, upon failure |
+| `SPACEFISH_EXIT_CODE_COLOR` | `red` | Color of exit code section |
+
+### Char \(`char`\)
+
+| Variable | Default | Meaning |
+| :--- | :---: | --- |
+| `SPACEFISH_CHAR_PREFIX` | ` ` | Prefix before prompt character |
+| `SPACEFISH_CHAR_SUFFIX` | ` ` | Suffix after prompt character |
+| `SPACEFISH_CHAR_SYMBOL` | `➜` | Prompt character to be shown before any command |
+| `SPACEFISH_CHAR_COLOR_SUCCESS` | `green` | Color of prompt character if last command completes successfully |
+| `SPACEFISH_CHAR_COLOR_FAILURE` | `red` | Color of prompt character if last command returns non-zero exit-code |
diff --git a/.config/fisher/github.com/matchai/spacefish/docs/README.md b/.config/fisher/github.com/matchai/spacefish/docs/README.md
new file mode 100644
index 00000000..ca58102b
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/docs/README.md
@@ -0,0 +1,45 @@
+# Summary
+
+* [Home](README.md)
+* [Options](./docs/Options.md)
+ * [Order](./docs/Options.md#order)
+ * [Prompt](./docs/Options.md#prompt)
+ * [Time](./docs/Options.md#time)
+ * [Username (user)](./docs/Options.md#username-user)
+ * [Directory (dir)](./docs/Options.md#directory-dir)
+ * [Hostname (host)](./docs/Options.md#host-host)
+ * [Git (git)](./docs/Options.md#git-git)
+ * [Git branch (git_branch)](./docs/Options.md#git-branch-gitbranch)
+ * [Git status (git_status)](./docs/Options.md#git-status-gitstatus)
+ * [Package version (package)](./docs/Options.md#package-version-package)
+ * [Node (node)](./docs/Options.md#nodejs-node)
+ * [Julia (julia)](./docs/Options.md#julia-julia)
+ * [Docker (docker)](./docs/Options.md#docker-docker)
+ * [Ruby (ruby)](./docs/Options.md#ruby-ruby)
+ * [Haskell (haskell)](./docs/Options.md#haskell-haskell)
+ * [Conda (conda)](./docs/Options.md#conda-conda)
+ * [Elixir (elixir)](./docs/Options.md#elixir-elixir)
+ * [Amazon Web Services (aws)](./docs/Options.md#amazon-web-services-aws-aws)
+ * [Pyenv (pyenv)](./docs/Options.md#pyenv-pyenv)
+ * [Go (golang)](./docs/Options.md#go-golang)
+ * [PHP (php)](./docs/Options.md#php-php)
+ * [Rust (rust)](./docs/Options.md#rust-rust)
+ * [.NET (dotnet)](/docs/Options.md#net-dotnet)
+ * [Kubectl context (kubecontext)](./docs/Options.md#kubectl-context-kubecontext)
+ * [Execution time (exec_time)](./docs/Options.md#execution-time-exec_time)
+ * [Line Separator (line_sep)](./docs/Options.md#line_sep-node)
+ * [Battery (battery)](./docs/Options.md#battery-battery)
+ * [Jobs (jobs)](./docs/Options.md#jobs-jobs)
+ * [Exit Code (exit_code)](./docs/Options.md#nodejs-node)
+ * [Char (char)](./docs/Options.md#char)
+* [Contributing Guide](/CONTRIBUTING.md)
+ * [Philosophy](/CONTRIBUTING.md#philosophy)
+ * [Setup](/CONTRIBUTING.md#setup)
+ * [Sections](/CONTRIBUTING.md#sections)
+* [API](/docs/API.md)
+ * [Example section](/docs/API.md#typical-section)
+ * [SPACEFISH_VERSION](/docs/API.md#spaceshipversion)
+ * [__sf_lib_section](/docs/API.md#__sf_lib_section-color-prefix-content-suffix)
+ * [__sf_util_set_default](/docs/API.md#__sf_util_set_default-variable_name-value)
+ * [__sf_util_git_branch](/docs/API.md#__sf_util_git_branch)
+* [Troubleshooting](/docs/Troubleshooting.md)
diff --git a/.config/fisher/github.com/matchai/spacefish/docs/Troubleshooting.md b/.config/fisher/github.com/matchai/spacefish/docs/Troubleshooting.md
new file mode 100644
index 00000000..c38bfd02
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/docs/Troubleshooting.md
@@ -0,0 +1,82 @@
+# Troubleshooting
+
+This page aimed to help you fix common problems encountered while using spacefish.
+
+## My prompt is filling with errors
+
+Try all of the following troubleshooting steps:
+
+* Verify that your fish installation is at the [latest version](https://github.com/fish-shell/fish-shell/releases)
+
+ ```sh
+ fish --version
+ ```
+
+* Update spacefish with `fisher` or `omf`
+
+ ```sh
+ fisher add matchai/spacefish
+ # or
+ omf update spacefish
+ ```
+
+* If errors persist, please [open an issue](https://github.com/matchai/spacefish/issues/new)
+
+## What's the weird symbol beside the `git` branch?
+
+You need to have a powerline patched font in order to properly display `git` branch symbol.
+
+* Install any powerline compatible font like [Fira Code](https://github.com/tonsky/FiraCode) or [others](https://github.com/powerline/fonts).
+* Configure your terminal emulator to [use that font](https://powerline.readthedocs.io/en/master/troubleshooting/osx.html).
+
+## What's the weird character in front of a section?
+
+This is not an issue with spacefish. Spacefish uses Unicode symbols to represent `SPACESFISH_*_SYMBOL` in sections. To solve this problem:
+
+* Verify your terminal emulator supports Unicode characters with this command:
+
+ ```sh
+ curl https://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt
+ # or
+ wget -O - https://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt
+ ```
+* Configure your terminal emulator to use UTF-8 character encoding.
+
+
+In the event that Unicode characters aren't supported, you can replace them with characters that are compatible with your terminal with `SPACEFISH_*_SYMBOL` options. Check out the [Options](./docs/Options.md) page for more information.
+
+## Why is my prompt slow?
+
+Spacefish may run more slowlyin big repositories since the status checks add up to be expensive operations.
+
+To speed up your prompt, try to reduce the number of unused spacefish sections that are enabled. Spacefish only loads the sections mentioned in `SPACEFISH_PROMPT_ORDER`. If you think some sections might not be be useful to you, you can disable them by not including their names in the prompt order.
+
+## Why do my section icons overlap each other?
+
+![overlapping icons](../images/icon-overlap.png)
+
+This issue is due to how your terminal emulator renders Unicode 9 characters. To fix this issue:
+
+* Make sure terminal uses _Unicode Version 9 Widths_.
+* Let your terminal render ambiguous-width characters as double-width.
+
+In _iTerm_ follow these instructions:
+
+* Go _iTerm → Preferences… (⌘,) → Profiles → Text_
+* Check _Unicode Version 9 Widths_.
+* Check _Threat ambiguous-width characters as double-width_.
+* Reload your terminal's tab.
+
+## Why doesn't my prompt look like it does in the preview?
+
+![preview](../images/preview.gif)
+
+Preview shows a `spacefish` setup with:
+
+* [Hyper](https://hyper.is) as the terminal emulator.
+* [One Dark](https://www.npmjs.com/package/hyperterm-atom-dark) color theme from [Atom](https://atom.io/) editor.
+* [Fira Code](https://github.com/tonsky/FiraCode) with with ligatures as primary font (16px size).
+
+## My problem wasn't solved
+
+If the above suggestions don't address your problem, feel free to [open an issue](https://github.com/matchai/spacefish/issues/new), describe your problem and we will gladly help you.
diff --git a/.config/fisher/github.com/matchai/spacefish/fish_mode_prompt.fish b/.config/fisher/github.com/matchai/spacefish/fish_mode_prompt.fish
new file mode 100644
index 00000000..8e389a47
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/fish_mode_prompt.fish
@@ -0,0 +1,4 @@
+function fish_mode_prompt
+ # Overriden by Spacefish fishshell theme
+ # To see vi mode in prompt add 'vi_mode' to SPACEFISH_PROMPT_ORDER
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/fish_prompt.fish b/.config/fisher/github.com/matchai/spacefish/fish_prompt.fish
new file mode 100644
index 00000000..dd9a6b0a
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/fish_prompt.fish
@@ -0,0 +1,33 @@
+function fish_prompt
+ # Store the exit code of the last command
+ set -g sf_exit_code $status
+ set -g SPACEFISH_VERSION 2.6.1
+
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_PROMPT_ADD_NEWLINE true
+ __sf_util_set_default SPACEFISH_PROMPT_FIRST_PREFIX_SHOW false
+ __sf_util_set_default SPACEFISH_PROMPT_PREFIXES_SHOW true
+ __sf_util_set_default SPACEFISH_PROMPT_SUFFIXES_SHOW true
+ __sf_util_set_default SPACEFISH_PROMPT_DEFAULT_PREFIX "via "
+ __sf_util_set_default SPACEFISH_PROMPT_DEFAULT_SUFFIX " "
+ __sf_util_set_default SPACEFISH_PROMPT_ORDER time user dir host git package node ruby golang php rust haskell julia elixir docker aws venv conda pyenv dotnet kubecontext exec_time line_sep battery vi_mode jobs exit_code char
+
+ # ------------------------------------------------------------------------------
+ # Sections
+ # ------------------------------------------------------------------------------
+
+ # Keep track of whether the prompt has already been opened
+ set -g sf_prompt_opened $SPACEFISH_PROMPT_FIRST_PREFIX_SHOW
+
+ if test "$SPACEFISH_PROMPT_ADD_NEWLINE" = "true"
+ echo
+ end
+
+ for i in $SPACEFISH_PROMPT_ORDER
+ eval __sf_section_$i
+ end
+ set_color normal
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/fish_right_prompt.fish b/.config/fisher/github.com/matchai/spacefish/fish_right_prompt.fish
new file mode 100644
index 00000000..e9ab4922
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/fish_right_prompt.fish
@@ -0,0 +1,19 @@
+function fish_right_prompt
+
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_RPROMPT_ORDER ""
+
+ # ------------------------------------------------------------------------------
+ # Sections
+ # ------------------------------------------------------------------------------
+
+ [ -n "$SPACEFISH_RPROMPT_ORDER" ]; or return
+
+ for i in $SPACEFISH_RPROMPT_ORDER
+ eval __sf_section_$i
+ end
+ set_color normal
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_lib_section.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_lib_section.fish
new file mode 100644
index 00000000..819b68ff
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_lib_section.fish
@@ -0,0 +1,28 @@
+function __sf_lib_section -a color prefix content suffix
+ # If there are only 2 args, they are $content and $prefix
+ if test (count $argv) -eq 2
+ set content $argv[2]
+ set prefix
+ end
+
+ if test "$sf_prompt_opened" = "true" -a "$SPACEFISH_PROMPT_PREFIXES_SHOW" = "true"
+ # Echo prefixes in bold white
+ set_color --bold
+ echo -e -n -s $prefix
+ set_color normal
+ end
+
+ # Set the prompt as having been opened
+ set -g sf_prompt_opened true
+
+ set_color --bold $color
+ echo -e -n $content
+ set_color normal
+
+ if test "$SPACEFISH_PROMPT_SUFFIXES_SHOW" = "true"
+ # Echo suffixes in bold white
+ set_color --bold
+ echo -e -n -s $suffix
+ set_color normal
+ end
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_aws.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_aws.fish
new file mode 100644
index 00000000..fc33ac6f
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_aws.fish
@@ -0,0 +1,39 @@
+#
+# Amazon Web Services (AWS)
+#
+# The AWS Command Line Interface (CLI) is a unified tool to manage AWS services.
+# Link: https://aws.amazon.com/cli/
+
+function __sf_section_aws -d "Display the selected aws profile"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_AWS_SHOW true
+ __sf_util_set_default SPACEFISH_AWS_PREFIX "using "
+ __sf_util_set_default SPACEFISH_AWS_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_AWS_SYMBOL "☁️ "
+ __sf_util_set_default SPACEFISH_AWS_COLOR ff8700
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ # Show the selected AWS-cli profile
+ [ $SPACEFISH_AWS_SHOW = false ]; and return
+
+ # Ensure the aws command is available
+ type -q aws; or return
+
+ # Early return if there's no AWS_PROFILE, or it's set to default
+ if test -z "$AWS_PROFILE" \
+ -o "$AWS_PROFILE" = "default"
+ return
+ end
+
+ __sf_lib_section \
+ $SPACEFISH_AWS_COLOR \
+ $SPACEFISH_AWS_PREFIX \
+ "$SPACEFISH_AWS_SYMBOL""$AWS_PROFILE" \
+ $SPACEFISH_AWS_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_battery.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_battery.fish
new file mode 100644
index 00000000..eb9b8667
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_battery.fish
@@ -0,0 +1,114 @@
+#
+# Battery
+#
+
+function __sf_section_battery -d "Displays battery symbol and charge"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ # ------------------------------------------------------------------------------
+ # | SPACEFISH_BATTERY_SHOW | below threshold | above threshold | fully charged |
+ # |------------------------+-----------------+-----------------+---------------|
+ # | false | hidden | hidden | hidden |
+ # | always | shown | shown | shown |
+ # | true | shown | hidden | hidden |
+ # | charged | shown | hidden | shown |
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_BATTERY_SHOW true
+ __sf_util_set_default SPACEFISH_BATTERY_PREFIX ""
+ __sf_util_set_default SPACEFISH_BATTERY_SUFFIX " "
+ __sf_util_set_default SPACEFISH_BATTERY_SYMBOL_CHARGING ⇡
+ __sf_util_set_default SPACEFISH_BATTERY_SYMBOL_DISCHARGING ⇣
+ __sf_util_set_default SPACEFISH_BATTERY_SYMBOL_FULL •
+ __sf_util_set_default SPACEFISH_BATTERY_THRESHOLD 10
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ # Show section only if any of the following is true
+ # - SPACEFISH_BATTERY_SHOW = "always"
+ # - SPACEFISH_BATTERY_SHOW = "true" and
+ # - battery percentage is below the given limit (default: 10%)
+ # - SPACEFISH_BATTERY_SHOW = "charged" and
+ # - Battery is fully charged
+
+ # Check that user wants to show battery levels
+ [ $SPACEFISH_BATTERY_SHOW = false ]; and return
+
+ set -l battery_data
+ set -l battery_percent
+ set -l battery_status
+ set -l battery_color
+ set -l battery_symbol
+
+ # Darwin and macOS machines
+ if type -q pmset
+ set battery_data (pmset -g batt | grep "InternalBattery")
+
+ # Return if no internal battery
+ if test -z (echo $battery_data)
+ return
+ end
+
+ set battery_percent (echo $battery_data | grep -oE "[0-9]{1,3}%")
+ # spaceship has echo $battery_data | awk -F '; *' 'NR==2 { print $2 }', but NR==2 did not return anything.
+ set battery_status (echo $battery_data | awk -F '; *' '{ print $2 }')
+
+ # Linux machines
+ else if type -q upower
+ set -l battery (upower -e | grep battery | head -1)
+
+ [ -z $battery ]; and return
+
+ set -l IFS # Clear IFS to allow for multi-line variables
+ set battery_data (upower -i $battery)
+ set battery_percent (echo $battery_data | grep percentage | awk '{print $2}')
+ set battery_status (echo $battery_data | grep state | awk '{print $2}')
+
+ # Windows machines.
+ else if type -q acpi
+ set -l battery_data (acpi -b 2>/dev/null | head -1)
+
+ # Return if no battery
+ [ -z $battery_data ]; and return
+
+ set battery_percent ( echo $battery_data | awk '{print $4}' )
+ set battery_status ( echo $battery_data | awk '{print tolower($3)}' )
+ else
+ return
+ end
+
+ # Remove trailing % and symbols for comparison
+ set battery_percent (echo $battery_percent | string trim --chars=%[,;])
+
+ if test "$battery_percent" -eq 100 -o -n (echo (string match -r "(charged|full)" $battery_status))
+ set battery_color green
+ else if test "$battery_percent" -lt "$SPACEFISH_BATTERY_THRESHOLD"
+ set battery_color red
+ else
+ set battery_color yellow
+ end
+
+ # Battery indicator based on current status of battery
+ if test "$battery_status" = "charging"
+ set battery_symbol $SPACEFISH_BATTERY_SYMBOL_CHARGING
+ else if test -n (echo (string match -r "^[dD]ischarg.*" $battery_status))
+ set battery_symbol $SPACEFISH_BATTERY_SYMBOL_DISCHARGING
+ else
+ set battery_symbol $SPACEFISH_BATTERY_SYMBOL_FULL
+ end
+
+ if test "$SPACEFISH_BATTERY_SHOW" = "always" \
+ -o "$battery_percent" -lt "$SPACEFISH_BATTERY_THRESHOLD" \
+ -o "$SPACEFISH_BATTERY_SHOW" = "charged" \
+ -a -n (echo (string match -r "(charged|full)" $battery_status))
+ __sf_lib_section \
+ $battery_color \
+ $SPACEFISH_BATTERY_PREFIX \
+ "$battery_symbol$battery_percent%" \
+ $SPACEFISH_BATTERY_SUFFIX
+ end
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_char.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_char.fish
new file mode 100644
index 00000000..83abeacb
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_char.fish
@@ -0,0 +1,35 @@
+#
+# Prompt character
+#
+
+function __sf_section_char -d "Display the prompt character"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_CHAR_PREFIX ""
+ __sf_util_set_default SPACEFISH_CHAR_SUFFIX " "
+ __sf_util_set_default SPACEFISH_CHAR_SYMBOL ➜
+ __sf_util_set_default SPACEFISH_CHAR_COLOR_SUCCESS green
+ __sf_util_set_default SPACEFISH_CHAR_COLOR_FAILURE red
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ # Color $SPACEFISH_CHAR_SYMBOL red if previous command failed and
+ # color it in green if the command succeeded.
+ set -l color
+
+ if test $sf_exit_code -eq 0
+ set color $SPACEFISH_CHAR_COLOR_SUCCESS
+ else
+ set color $SPACEFISH_CHAR_COLOR_FAILURE
+ end
+
+ __sf_lib_section \
+ $color \
+ $SPACEFISH_CHAR_PREFIX \
+ $SPACEFISH_CHAR_SYMBOL \
+ $SPACEFISH_CHAR_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_conda.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_conda.fish
new file mode 100644
index 00000000..c93e5896
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_conda.fish
@@ -0,0 +1,36 @@
+#
+# Conda
+#
+# Current Conda version.
+
+function __sf_section_conda -d "Display current Conda version"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_CONDA_SHOW true
+ __sf_util_set_default SPACEFISH_CONDA_PREFIX $SPACEFISH_PROMPT_DEFAULT_PREFIX
+ __sf_util_set_default SPACEFISH_CONDA_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_CONDA_SYMBOL "🅒 "
+ __sf_util_set_default SPACEFISH_CONDA_COLOR blue
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ [ $SPACEFISH_CONDA_SHOW = false ]; and return
+
+ # Show Conda version only if conda is installed and CONDA_DEFAULT_ENV is set
+ if not type -q conda; \
+ or test -z "$CONDA_DEFAULT_ENV";
+ return
+ end
+
+ set -l conda_version (conda -V | string split ' ')[2]
+
+ __sf_lib_section \
+ $SPACEFISH_CONDA_COLOR \
+ $SPACEFISH_CONDA_PREFIX \
+ "$SPACEFISH_CONDA_SYMBOL"v"$conda_version" \
+ $SPACEFISH_CONDA_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_dir.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_dir.fish
new file mode 100644
index 00000000..5b4c77d3
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_dir.fish
@@ -0,0 +1,54 @@
+#
+# Working directory
+#
+
+function __sf_section_dir -d "Display the current truncated directory"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_DIR_SHOW true
+ __sf_util_set_default SPACEFISH_DIR_PREFIX "in "
+ __sf_util_set_default SPACEFISH_DIR_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_DIR_TRUNC 3
+ __sf_util_set_default SPACEFISH_DIR_TRUNC_REPO true
+ __sf_util_set_default SPACEFISH_DIR_COLOR cyan
+
+ # Write Permissions lock symbol
+ __sf_util_set_default SPACEFISH_DIR_LOCK_SHOW true
+ __sf_util_set_default SPACEFISH_DIR_LOCK_SYMBOL ""
+ __sf_util_set_default SPACEFISH_DIR_LOCK_COLOR red
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ [ $SPACEFISH_DIR_SHOW = false ]; and return
+
+ set -l dir
+ set -l tmp
+ set -l git_root (command git rev-parse --show-toplevel 2>/dev/null)
+
+ if test "$SPACEFISH_DIR_TRUNC_REPO" = "true" -a -n "$git_root"
+ # Resolve to physical PWD instead of logical
+ set -l resolvedPWD (pwd -P 2>/dev/null; or pwd)
+ # Treat repo root as top level directory
+ set tmp (string replace $git_root (basename $git_root) $resolvedPWD)
+ else
+ set -l realhome ~
+ set tmp (string replace -r '^'"$realhome"'($|/)' '~$1' $PWD)
+ end
+
+ # Truncate the path to have a limited number of dirs
+ set dir (__sf_util_truncate_dir $tmp $SPACEFISH_DIR_TRUNC)
+
+ if [ $SPACEFISH_DIR_LOCK_SHOW = true -a ! -w . ]
+ set DIR_LOCK_SYMBOL (set_color $SPACEFISH_DIR_LOCK_COLOR)" $SPACEFISH_DIR_LOCK_SYMBOL"(set_color --bold)
+ end
+
+ __sf_lib_section \
+ $SPACEFISH_DIR_COLOR \
+ $SPACEFISH_DIR_PREFIX \
+ $dir \
+ "$DIR_LOCK_SYMBOL""$SPACEFISH_DIR_SUFFIX"
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_docker.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_docker.fish
new file mode 100644
index 00000000..6b32d4cc
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_docker.fish
@@ -0,0 +1,52 @@
+#
+# Docker
+#
+# Current Docker version and Machine name.
+
+function __sf_section_docker -d "Display docker version and machine name"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_DOCKER_SHOW true
+ __sf_util_set_default SPACEFISH_DOCKER_PREFIX "is "
+ __sf_util_set_default SPACEFISH_DOCKER_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_DOCKER_SYMBOL "🐳 "
+ __sf_util_set_default SPACEFISH_DOCKER_COLOR cyan
+ __sf_util_set_default SPACEFISH_DOCKER_VERBOSE_VERSION false
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ [ $SPACEFISH_DOCKER_SHOW = false ]; and return
+
+ # Show Docker version only if docker is installed
+ type -q docker; or return
+
+ # Show docker version only when pwd has Dockerfile, docker-compose.yml, .dockerenv in root or COMPOSE_FILE
+ if not test -f Dockerfile \
+ -o -f docker-compose.yml \
+ -o -f /.dockerenv \
+ -o -f "$COMPOSE_FILE"
+ return
+ end
+
+ set -l docker_version (docker version -f "{{.Server.Version}}" 2>/dev/null)
+ # if docker daemon isn't running you'll get an error like 'Bad response from Docker engine'
+ [ -z $docker_version ]; and return
+
+ if test "$SPACEFISH_DOCKER_VERBOSE_VERSION" = "false"
+ set docker_version (string split - $docker_version)[1]
+ end
+
+ if test -n "$DOCKER_MACHINE_NAME"
+ set docker_version $docker_version via $DOCKER_MACHINE_NAME
+ end
+
+ __sf_lib_section \
+ $SPACEFISH_DOCKER_COLOR \
+ $SPACEFISH_DOCKER_PREFIX \
+ "$SPACEFISH_DOCKER_SYMBOL"v"$docker_version" \
+ $SPACEFISH_DOCKER_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_dotnet.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_dotnet.fish
new file mode 100644
index 00000000..d46a79f1
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_dotnet.fish
@@ -0,0 +1,50 @@
+#
+# .NET
+#
+# .NET Framework is a software framework developed by Microsoft.
+# It includes a large class library and provides language interoperability
+# across several programming languages.
+# Link: https://www.microsoft.com/net
+
+function __sf_section_dotnet -d "Display the .NET SDK version"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_DOTNET_SHOW true
+ __sf_util_set_default SPACEFISH_DOTNET_PREFIX $SPACEFISH_PROMPT_DEFAULT_PREFIX
+ __sf_util_set_default SPACEFISH_DOTNET_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_DOTNET_SYMBOL ".NET "
+ __sf_util_set_default SPACEFISH_DOTNET_COLOR "af00d7" # 128 in the original version, but renders as blue in iTerm2?
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ # Show current version of .NET SDK
+ [ $SPACEFISH_DOTNET_SHOW = false ]; and return
+
+ # Ensure the dotnet command is available
+ type -q dotnet; or return
+
+ if not test -f project.json \
+ -o -f global.json \
+ -o -f paket.dependencies \
+ -o (count *.csproj) -gt 0 \
+ -o (count *.fsproj) -gt 0 \
+ -o (count *.xproj) -gt 0 \
+ -o (count *.sln) -gt 0
+ return
+ end
+
+ # From the
+ # dotnet-cli automatically handles SDK pinning (specified in a global.json file)
+ # therefore, this already returns the expected version for the current directory
+ set -l dotnet_version (dotnet --version 2>/dev/null)
+
+ __sf_lib_section \
+ $SPACEFISH_DOTNET_COLOR \
+ $SPACEFISH_DOTNET_PREFIX \
+ "$SPACEFISH_DOTNET_SYMBOL""$dotnet_version" \
+ $SPACEFISH_DOTNET_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_elixir.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_elixir.fish
new file mode 100644
index 00000000..13468b03
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_elixir.fish
@@ -0,0 +1,57 @@
+#
+# Elixir
+#
+# A dynamic, reflective, object-oriented, general-purpose programming language.
+# Link: https://www.elixir-lang.org/
+
+function __sf_section_elixir -d "Show current version of Elixir"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_ELIXIR_SHOW true
+ __sf_util_set_default SPACEFISH_ELIXIR_PREFIX $SPACEFISH_PROMPT_DEFAULT_PREFIX
+ __sf_util_set_default SPACEFISH_ELIXIR_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_ELIXIR_SYMBOL "💧 "
+ __sf_util_set_default SPACEFISH_ELIXIR_DEFAULT_VERSION $SPACEFISH_ELIXIR_DEFAULT_VERSION
+ __sf_util_set_default SPACEFISH_ELIXIR_COLOR magenta
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ # Check if that user wants to show elixir version
+ [ $SPACEFISH_ELIXIR_SHOW = false ]; and return
+
+ # Show versions only for Elixir-specific folders
+ if not test -f mix.exs \
+ -o (count *.ex) -gt 0 \
+ -o (count *.exs) -gt 0
+ return
+ end
+
+ set -l elixir_version
+
+ if type -q kiex
+ set elixir_version $ELIXIR_VERSION
+ else if type -q exenv
+ set elixir_version (exenv version-name)
+ else if type -q elixir
+ set elixir_version (elixir -v 2>/dev/null | string match -r "Elixir.*" | string split " ")[2]
+ else
+ return
+ end
+
+ [ -z "$elixir_version" -o "$elixir_version" = "system" ]; and return
+
+ # Add 'v' before elixir version that starts with a number
+ if test -n (echo (string match -r "^[0-9].+\$" "$elixir_version"))
+ set elixir_version "v$elixir_version"
+ end
+
+ __sf_lib_section \
+ $SPACEFISH_ELIXIR_COLOR \
+ $SPACEFISH_ELIXIR_PREFIX \
+ "$SPACEFISH_ELIXIR_SYMBOL""$elixir_version" \
+ $SPACEFISH_ELIXIR_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_exec_time.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_exec_time.fish
new file mode 100644
index 00000000..0961907f
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_exec_time.fish
@@ -0,0 +1,33 @@
+#
+# Execution time
+#
+
+function __sf_section_exec_time -d "Display the execution time of the last command"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_EXEC_TIME_SHOW true
+ __sf_util_set_default SPACEFISH_EXEC_TIME_PREFIX "took "
+ __sf_util_set_default SPACEFISH_EXEC_TIME_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_EXEC_TIME_COLOR yellow
+ __sf_util_set_default SPACEFISH_EXEC_TIME_ELAPSED 5
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ [ $SPACEFISH_EXEC_TIME_SHOW = false ]; and return
+
+ # Allow for compatibility between fish 2.7 and 3.0
+ set -l command_duration "$CMD_DURATION$cmd_duration"
+
+ if test -n "$command_duration" -a "$command_duration" -gt (math "$SPACEFISH_EXEC_TIME_ELAPSED * 1000")
+ set -l human_command_duration (echo $command_duration | __sf_util_human_time)
+ __sf_lib_section \
+ $SPACEFISH_EXEC_TIME_COLOR \
+ $SPACEFISH_EXEC_TIME_PREFIX \
+ $human_command_duration \
+ $SPACEFISH_EXEC_TIME_SUFFIX
+ end
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_exit_code.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_exit_code.fish
new file mode 100644
index 00000000..7578d47f
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_exit_code.fish
@@ -0,0 +1,26 @@
+# Exit-code
+#
+
+function __sf_section_exit_code -d "Shows the exit code from the previous command."
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_EXIT_CODE_SHOW false
+ __sf_util_set_default SPACEFISH_EXIT_CODE_PREFIX ""
+ __sf_util_set_default SPACEFISH_EXIT_CODE_SUFFIX " "
+ __sf_util_set_default SPACEFISH_EXIT_CODE_SYMBOL ✘
+ __sf_util_set_default SPACEFISH_EXIT_CODE_COLOR red
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ [ $SPACEFISH_EXIT_CODE_SHOW = false ]; or test $sf_exit_code -eq 0; and return
+
+ __sf_lib_section \
+ $SPACEFISH_EXIT_CODE_COLOR \
+ $SPACEFISH_EXIT_CODE_PREFIX \
+ "$SPACEFISH_EXIT_CODE_SYMBOL$sf_exit_code" \
+ $SPACEFISH_EXIT_CODE_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_git.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_git.fish
new file mode 100644
index 00000000..ea3c390e
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_git.fish
@@ -0,0 +1,35 @@
+#
+# Git
+#
+
+function __sf_section_git -d "Display the git branch and status"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_GIT_SHOW true
+ __sf_util_set_default SPACEFISH_GIT_PREFIX "on "
+ __sf_util_set_default SPACEFISH_GIT_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_GIT_SYMBOL " "
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ # Show both git branch and git status:
+ # spacefish_git_branch
+ # spacefish_git_status
+
+ [ $SPACEFISH_GIT_SHOW = false ]; and return
+
+ set -l git_branch (__sf_section_git_branch)
+ set -l git_status (__sf_section_git_status)
+
+ [ -z $git_branch ]; and return
+
+ __sf_lib_section \
+ fff \
+ $SPACEFISH_GIT_PREFIX \
+ "$git_branch$git_status" \
+ $SPACEFISH_GIT_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_git_branch.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_git_branch.fish
new file mode 100644
index 00000000..7a2c54e4
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_git_branch.fish
@@ -0,0 +1,28 @@
+#
+# Git branch
+#
+
+function __sf_section_git_branch -d "Format the displayed branch name"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_GIT_BRANCH_SHOW true
+ __sf_util_set_default SPACEFISH_GIT_BRANCH_PREFIX $SPACEFISH_GIT_SYMBOL
+ __sf_util_set_default SPACEFISH_GIT_BRANCH_SUFFIX ""
+ __sf_util_set_default SPACEFISH_GIT_BRANCH_COLOR magenta
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ [ $SPACEFISH_GIT_BRANCH_SHOW = false ]; and return
+
+ set -l git_branch (__sf_util_git_branch)
+
+ [ -z $git_branch ]; and return
+
+ __sf_lib_section \
+ $SPACEFISH_GIT_BRANCH_COLOR \
+ $SPACEFISH_GIT_BRANCH_PREFIX$git_branch$SPACEFISH_GIT_BRANCH_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_git_status.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_git_status.fish
new file mode 100644
index 00000000..7316c491
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_git_status.fish
@@ -0,0 +1,100 @@
+#
+# Git status
+#
+
+function __sf_section_git_status -d "Display the current git status"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_GIT_STATUS_SHOW true
+ __sf_util_set_default SPACEFISH_GIT_STATUS_PREFIX " ["
+ __sf_util_set_default SPACEFISH_GIT_STATUS_SUFFIX ]
+ __sf_util_set_default SPACEFISH_GIT_STATUS_COLOR red
+ __sf_util_set_default SPACEFISH_GIT_STATUS_UNTRACKED \?
+ __sf_util_set_default SPACEFISH_GIT_STATUS_ADDED +
+ __sf_util_set_default SPACEFISH_GIT_STATUS_MODIFIED !
+ __sf_util_set_default SPACEFISH_GIT_STATUS_RENAMED »
+ __sf_util_set_default SPACEFISH_GIT_STATUS_DELETED ✘
+ __sf_util_set_default SPACEFISH_GIT_STATUS_STASHED \$
+ __sf_util_set_default SPACEFISH_GIT_STATUS_UNMERGED =
+ __sf_util_set_default SPACEFISH_GIT_STATUS_AHEAD ⇡
+ __sf_util_set_default SPACEFISH_GIT_STATUS_BEHIND ⇣
+ __sf_util_set_default SPACEFISH_GIT_STATUS_DIVERGED ⇕
+ __sf_util_set_default SPACEFISH_GIT_PROMPT_ORDER untracked added modified renamed deleted stashed unmerged diverged ahead behind
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ [ $SPACEFISH_GIT_STATUS_SHOW = false ]; and return
+
+ set -l git_status
+ set -l is_ahead
+ set -l is_behind
+
+ set -l index (command git status --porcelain 2>/dev/null -b)
+ set -l trimmed_index (string split \n $index | string sub --start 1 --length 2)
+
+ for i in $trimmed_index
+ if test (string match '\?\?' $i)
+ set git_status untracked $git_status
+ end
+ if test (string match '*A*' $i)
+ set git_status added $git_status
+ end
+ if test (string match '*M*' $i)
+ set git_status modified $git_status
+ end
+ if test (string match '*R*' $i)
+ set git_status renamed $git_status
+ end
+ if test (string match '*D*' $i)
+ set git_status deleted $git_status
+ end
+ if test (string match '*U*' $i)
+ set git_status unmerged $git_status
+ end
+ end
+
+ # Check for stashes
+ if test -n (echo (command git rev-parse --verify refs/stash 2>/dev/null))
+ set git_status stashed $git_status
+ end
+
+ # Check whether the branch is ahead
+ if test (string match '*ahead*' $index)
+ set is_ahead true
+ end
+
+ # Check whether the branch is behind
+ if test (string match '*behind*' $index)
+ set is_behind true
+ end
+
+ # Check whether the branch has diverged
+ if test "$is_ahead" = "true" -a "$is_behind" = "true"
+ set git_status diverged $git_status
+ else if test "$is_ahead" = "true"
+ set git_status ahead $git_status
+ else if test "$is_behind" = "true"
+ set git_status behind $git_status
+ end
+
+ set -l full_git_status
+ for i in $SPACEFISH_GIT_PROMPT_ORDER
+ set i (string upper $i)
+ set git_status (string upper $git_status)
+ if contains $i in $git_status
+ set -l status_symbol SPACEFISH_GIT_STATUS_$i
+ set full_git_status "$$status_symbol$full_git_status"
+ end
+ end
+
+ # Check if git status
+ if test -n "$full_git_status"
+ __sf_lib_section \
+ $SPACEFISH_GIT_STATUS_COLOR \
+ "$SPACEFISH_GIT_STATUS_PREFIX$full_git_status$SPACEFISH_GIT_STATUS_SUFFIX"
+ end
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_golang.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_golang.fish
new file mode 100644
index 00000000..81211ee4
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_golang.fish
@@ -0,0 +1,55 @@
+#
+# Go
+#
+# Go is an open source programming language that makes it easy
+# to build efficient software.
+# Link: https://golang.org/
+
+function __sf_section_golang -d "Display the current go version if you're inside GOPATH"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_GOLANG_SHOW true
+ __sf_util_set_default SPACEFISH_GOLANG_PREFIX $SPACEFISH_PROMPT_DEFAULT_PREFIX
+ __sf_util_set_default SPACEFISH_GOLANG_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_GOLANG_SYMBOL "🐹 "
+ __sf_util_set_default SPACEFISH_GOLANG_COLOR cyan
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ # Show the current version of Golang
+ [ $SPACEFISH_GOLANG_SHOW = false ]; and return
+
+ # Ensure the go command is available
+ type -q go; or return
+
+ if not test -f go.mod \
+ -o -d Godeps \
+ -o -f glide.yaml \
+ -o (count *.go) -gt 0 \
+ -o -f Gopkg.yml \
+ -o -f Gopkg.lock \
+ -o ([ (count $GOPATH) -gt 0 ]; and string match $GOPATH $PWD)
+ return
+ end
+
+ set -l go_version (go version | string split ' ')
+
+ # Go version is either the commit hash and date (devel +5efe9a8f11 Web Jan 9 07:21:16 2019 +0000)
+ # at the time of the build or a release tag (go1.11.4)
+ # https://github.com/matchai/spacefish/issues/137
+ if test (string match 'devel*' $go_version[3])
+ set go_version $go_version[3]":"(string sub -s 2 $go_version[4])
+ else
+ set go_version "v"(string sub -s 3 $go_version[3])
+ end
+
+ __sf_lib_section \
+ $SPACEFISH_GOLANG_COLOR \
+ $SPACEFISH_GOLANG_PREFIX \
+ "$SPACEFISH_GOLANG_SYMBOL""$go_version" \
+ $SPACEFISH_GOLANG_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_haskell.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_haskell.fish
new file mode 100644
index 00000000..e31dca91
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_haskell.fish
@@ -0,0 +1,38 @@
+#
+# Haskell Stack
+#
+# An advanced, purely functional programming language.
+# Link: https://www.haskell.org/
+
+function __sf_section_haskell -d "Show current version of Haskell Tool Stack"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_HASKELL_SHOW true
+ __sf_util_set_default SPACEFISH_HASKELL_PREFIX $SPACEFISH_PROMPT_DEFAULT_PREFIX
+ __sf_util_set_default SPACEFISH_HASKELL_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_HASKELL_SYMBOL "λ "
+ __sf_util_set_default SPACEFISH_HASKELL_COLOR red
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ # Show current version of Haskell Tool Stack.
+ [ $SPACEFISH_HASKELL_SHOW = false ]; and return
+
+ # Ensure the stack command is available
+ type -q stack; or return
+
+ # If there are stack files in current directory
+ [ -f ./stack.yaml ]; or return
+
+ set -l haskell_version (stack ghc -- --numeric-version --no-install-ghc)
+
+ __sf_lib_section \
+ $SPACEFISH_HASKELL_COLOR \
+ $SPACEFISH_HASKELL_PREFIX \
+ "$SPACEFISH_HASKELL_SYMBOL"v"$haskell_version" \
+ $SPACEFISH_HASKELL_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_host.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_host.fish
new file mode 100644
index 00000000..bd0bdd84
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_host.fish
@@ -0,0 +1,41 @@
+#
+# Hostname
+#
+
+
+# If there is an ssh connections, current machine name.
+function __sf_section_host -d "Display the current hostname if connected over SSH"
+
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_HOST_SHOW true
+ __sf_util_set_default SPACEFISH_HOST_PREFIX "at "
+ __sf_util_set_default SPACEFISH_HOST_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_HOST_COLOR blue
+ __sf_util_set_default SPACEFISH_HOST_COLOR_SSH green
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ [ "$SPACEFISH_HOST_SHOW" = false ]; and return
+
+ if test "$SPACEFISH_HOST_SHOW" = "always"; or set -q SSH_CONNECTION;
+
+ # Determination of what color should be used
+ set -l host_color
+ if set -q SSH_CONNECTION;
+ set host_color $SPACEFISH_HOST_COLOR_SSH
+ else
+ set host_color $SPACEFISH_HOST_COLOR
+ end
+
+ __sf_lib_section \
+ $host_color \
+ $SPACEFISH_HOST_PREFIX \
+ (hostname) \
+ $SPACEFISH_HOST_SUFFIX
+ end
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_jobs.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_jobs.fish
new file mode 100644
index 00000000..cfa91e2a
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_jobs.fish
@@ -0,0 +1,43 @@
+# Jobs
+#
+
+function __sf_section_jobs -d "Show icon, if there's a working jobs in the background."
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_JOBS_SHOW true
+ __sf_util_set_default SPACEFISH_JOBS_PREFIX ""
+ __sf_util_set_default SPACEFISH_JOBS_SUFFIX " "
+ __sf_util_set_default SPACEFISH_JOBS_SYMBOL ✦
+ __sf_util_set_default SPACEFISH_JOBS_COLOR blue
+ __sf_util_set_default SPACEFISH_JOBS_AMOUNT_PREFIX ""
+ __sf_util_set_default SPACEFISH_JOBS_AMOUNT_SUFFIX ""
+ __sf_util_set_default SPACEFISH_JOBS_AMOUNT_THRESHOLD 1
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ [ $SPACEFISH_JOBS_SHOW = false ]; and return
+
+ set jobs_amount (jobs | wc -l | xargs) # Zsh had a much more complicated command.
+
+ if test $jobs_amount -eq 0
+ return
+ end
+
+ if test $jobs_amount -le $SPACEFISH_JOBS_AMOUNT_THRESHOLD
+ set jobs_amount ''
+ set SPACEFISH_JOBS_AMOUNT_PREFIX ''
+ set SPACEFISH_JOBS_AMOUNT_SUFFIX ''
+ end
+
+ set SPACEFISH_JOBS_SECTION "$SPACEFISH_JOBS_SYMBOL$SPACEFISH_JOBS_AMOUNT_PREFIX$jobs_amount$SPACEFISH_JOBS_AMOUNT_SUFFIX"
+
+ __sf_lib_section \
+ $SPACEFISH_JOBS_COLOR \
+ $SPACEFISH_JOBS_PREFIX \
+ $SPACEFISH_JOBS_SECTION \
+ $SPACEFISH_JOBS_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_julia.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_julia.fish
new file mode 100644
index 00000000..ab58ec56
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_julia.fish
@@ -0,0 +1,36 @@
+#
+# Julia
+#
+# Current Julia version.
+
+function __sf_section_julia -d "Display julia version"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_JULIA_SHOW true
+ __sf_util_set_default SPACEFISH_JULIA_PREFIX "is "
+ __sf_util_set_default SPACEFISH_JULIA_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_JULIA_SYMBOL "ஃ "
+ __sf_util_set_default SPACEFISH_JULIA_COLOR green
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ [ $SPACEFISH_JULIA_SHOW = false ]; and return
+
+ # Show Julia version only if julia is installed
+ type -q julia; or return
+
+ # Show julia version only when pwd has *.jl file(s)
+ [ (count *.jl) -gt 0 ]; or return
+
+ set -l julia_version (julia --version | grep --color=never -oE '[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]')
+
+ __sf_lib_section \
+ $SPACEFISH_JULIA_COLOR \
+ $SPACEFISH_JULIA_PREFIX \
+ "$SPACEFISH_JULIA_SYMBOL"v"$julia_version" \
+ $SPACEFISH_JULIA_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_kubecontext.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_kubecontext.fish
new file mode 100644
index 00000000..effb614c
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_kubecontext.fish
@@ -0,0 +1,45 @@
+#
+# Kubernetes (kubectl)
+#
+# Kubernetes is an open-source system for deployment, scaling,
+# and management of containerized applications.
+# Link: https://kubernetes.io/
+
+function __sf_section_kubecontext -d "Display the kubernetes context"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_KUBECONTEXT_SHOW true
+ __sf_util_set_default SPACEFISH_KUBECONTEXT_NAMESPACE_SHOW true
+ __sf_util_set_default SPACEFISH_KUBECONTEXT_PREFIX "at "
+ __sf_util_set_default SPACEFISH_KUBECONTEXT_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ # Additional space is added because ☸️ is wider than other symbols
+ # See: https://github.com/denysdovhan/spaceship-prompt/pull/432
+ __sf_util_set_default SPACEFISH_KUBECONTEXT_SYMBOL "☸️ "
+ __sf_util_set_default SPACEFISH_KUBECONTEXT_COLOR cyan
+
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ # Show current kubecontext
+ [ $SPACEFISH_KUBECONTEXT_SHOW = false ]; and return
+ # Ensure the kubectl command is available
+ type -q kubectl; or return
+
+ set -l kube_context (kubectl config current-context 2>/dev/null)
+ [ -z $kube_context ]; and return
+
+ if test "$SPACEFISH_KUBECONTEXT_NAMESPACE_SHOW" = "true" -a "$kube_context" != "default"
+ set kube_namespace (kubectl config view --minify --output 'jsonpath={..namespace}' 2>/dev/null)
+ set kube_context "$kube_context ($kube_namespace)"
+ end
+
+ __sf_lib_section \
+ $SPACEFISH_KUBECONTEXT_COLOR \
+ $SPACEFISH_KUBECONTEXT_PREFIX \
+ "$SPACEFISH_KUBECONTEXT_SYMBOL""$kube_context" \
+ $SPACEFISH_KUBECONTEXT_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_line_sep.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_line_sep.fish
new file mode 100644
index 00000000..854c340c
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_line_sep.fish
@@ -0,0 +1,19 @@
+#
+# Line separator
+#
+
+function __sf_section_line_sep -d "Separate the prompt into two lines"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_PROMPT_SEPARATE_LINE true
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ if test "$SPACEFISH_PROMPT_SEPARATE_LINE" = "true"
+ echo -e -n \n
+ end
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_node.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_node.fish
new file mode 100644
index 00000000..2e6ebc9e
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_node.fish
@@ -0,0 +1,58 @@
+#
+# Node.js
+#
+# Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine.
+# Link: https://nodejs.org/
+
+function __sf_section_node -d "Display the local node version"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_NODE_SHOW true
+ __sf_util_set_default SPACEFISH_NODE_PREFIX $SPACEFISH_PROMPT_DEFAULT_PREFIX
+ __sf_util_set_default SPACEFISH_NODE_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_NODE_SYMBOL "⬢ "
+ __sf_util_set_default SPACEFISH_NODE_DEFAULT_VERSION ""
+ __sf_util_set_default SPACEFISH_NODE_COLOR green
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ # Show the current version of Node
+ [ $SPACEFISH_NODE_SHOW = false ]; and return
+
+ # Show versions only for Node-specific folders
+ if not test -f ./package.json \
+ -o -d ./node_modules \
+ -o (count *.js) -gt 0
+ return
+ end
+
+ if type -q nvm
+ # Only recheck the node version if the nvm bin has changed
+ if test "$NVM_BIN" != "$sf_last_nvm_bin" -o -z "$sf_node_version"
+ set -g sf_node_version (nvm current 2>/dev/null)
+ set -g sf_last_nvm_bin $NVM_BIN
+ end
+ else if type -q nodenv
+ set -g sf_node_version (nodenv version-name 2>/dev/null)
+ else if type -q node
+ set -g sf_node_version (node -v 2>/dev/null)
+ else
+ return
+ end
+
+ # Don't echo section if the system verison of node is being used
+ [ "$sf_node_version" = "system" -o "$sf_node_version" = "node" ]; and return
+
+ # Don't echo section if the node version matches the default version
+ [ "$sf_node_version" = "$SPACEFISH_NODE_DEFAULT_VERSION" ]; and return
+
+ __sf_lib_section \
+ $SPACEFISH_NODE_COLOR \
+ $SPACEFISH_NODE_PREFIX \
+ "$SPACEFISH_NODE_SYMBOL$sf_node_version" \
+ $SPACEFISH_NODE_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_package.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_package.fish
new file mode 100644
index 00000000..b613b87a
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_package.fish
@@ -0,0 +1,72 @@
+#
+# Package
+#
+# Current package version.
+# These package managers supported:
+# * NPM
+# * Cargo
+
+function __sf_section_package -d "Display the local package version"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_PACKAGE_SHOW true
+ __sf_util_set_default SPACEFISH_PACKAGE_PREFIX "is "
+ __sf_util_set_default SPACEFISH_PACKAGE_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_PACKAGE_SYMBOL "📦 "
+ __sf_util_set_default SPACEFISH_PACKAGE_COLOR red
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ [ $SPACEFISH_PACKAGE_SHOW = false ]; and return
+
+ # Exit if there is no package.json or Cargo.toml
+ if not test -e ./package.json; and not test -e ./Cargo.toml
+ return
+ end
+
+ set -l package_version
+
+ # Check if package.json exists AND npm exists locally while supressing output to just exit code (-q)
+ if type -q npm; and test -f ./package.json
+ # Check if jq (json handler) exists locally. If yes, check in package.json version
+ if type -q jq
+ set package_version (jq -r '.version' package.json 2>/dev/null)
+ # Check if python exists locally, use json to check version in package.json
+ else if type -q python
+ set package_version (python -c "import json; print(json.load(open('package.json'))['version'])" 2>/dev/null)
+ # Check if node exists locally, use it to check version of package.json
+ else if type -q node
+ set package_version (node -p "require('./package.json').version" 2>/dev/null)
+ end
+ end
+
+ # Check if Cargo.toml exists and cargo command exists
+ # and use cargo pkgid to figure out the package
+ if type -q cargo; and test -f ./Cargo.toml
+ # Handle missing field `version` in Cargo.toml.
+ # `cargo pkgid` needs Cargo.lock to exists too. If
+ # it doesn't, do not show package version
+ set -l pkgid (cargo pkgid 2>&1)
+ # Early return on error
+ echo $pkgid | grep -q "error:"; and return
+
+ # Example input: abc#1.0.0. Example output: 1.0.1
+ set package_version (string match -r '#(.*)' $pkgid)[2]
+ end
+
+ if test -z "$package_version"
+ set package_version ⚠
+ else
+ set package_version "v$package_version"
+ end
+
+ __sf_lib_section \
+ $SPACEFISH_PACKAGE_COLOR \
+ $SPACEFISH_PACKAGE_PREFIX \
+ "$SPACEFISH_PACKAGE_SYMBOL$package_version" \
+ $SPACEFISH_PACKAGE_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_php.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_php.fish
new file mode 100644
index 00000000..448d70b0
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_php.fish
@@ -0,0 +1,40 @@
+#
+# PHP
+#
+# PHP is a server-side scripting language designed primarily for web development.
+# Link: http://www.php.net/
+
+function __sf_section_php -d "Display the current php version"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_PHP_SHOW true
+ __sf_util_set_default SPACEFISH_PHP_PREFIX $SPACEFISH_PROMPT_DEFAULT_PREFIX
+ __sf_util_set_default SPACEFISH_PHP_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_PHP_SYMBOL "🐘 "
+ __sf_util_set_default SPACEFISH_PHP_COLOR blue
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ # Show current version of PHP
+ [ $SPACEFISH_PHP_SHOW = false ]; and return
+
+ # Ensure the php command is available
+ type -q php; or return
+
+ if not test -f composer.json \
+ -o (count *.php) -gt 0
+ return
+ end
+
+ set -l php_version (php -v | string match -r 'PHP\s*[0-9.]+' | string split ' ')[2]
+
+ __sf_lib_section \
+ $SPACEFISH_PHP_COLOR \
+ $SPACEFISH_PHP_PREFIX \
+ "$SPACEFISH_PHP_SYMBOL"v"$php_version" \
+ $SPACEFISH_PHP_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_pyenv.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_pyenv.fish
new file mode 100644
index 00000000..aeba4feb
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_pyenv.fish
@@ -0,0 +1,41 @@
+# pyenv
+#
+
+function __sf_section_pyenv -d "Show current version of pyenv Python, including system."
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_PYENV_SHOW true
+ __sf_util_set_default SPACEFISH_PYENV_PREFIX $SPACEFISH_PROMPT_DEFAULT_PREFIX
+ __sf_util_set_default SPACEFISH_PYENV_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_PYENV_SYMBOL "🐍 "
+ __sf_util_set_default SPACEFISH_PYENV_COLOR yellow
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ # Show pyenv python version
+ [ $SPACEFISH_PYENV_SHOW = false ]; and return
+
+ # Ensure the pyenv command is available
+ type -q pyenv; or return
+
+ # Show pyenv python version only for Python-specific folders
+ if not test -n "$PYENV_VERSION" \
+ -o -f .python-version \
+ -o -f requirements.txt \
+ -o -f pyproject.toml \
+ -o (count *.py) -gt 0
+ return
+ end
+
+ set -l pyenv_status (pyenv version-name 2>/dev/null) # This line needs explicit testing in an enviroment that has pyenv.
+
+ __sf_lib_section \
+ $SPACEFISH_PYENV_COLOR \
+ $SPACEFISH_PYENV_PREFIX \
+ "$SPACEFISH_PYENV_SYMBOL""$pyenv_status" \
+ $SPACEFISH_PYENV_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_ruby.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_ruby.fish
new file mode 100644
index 00000000..9dbade61
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_ruby.fish
@@ -0,0 +1,58 @@
+#
+# Ruby
+#
+# A dynamic, reflective, object-oriented, general-purpose programming language.
+# Link: https://www.ruby-lang.org/
+
+function __sf_section_ruby -d "Show current version of Ruby"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_RUBY_SHOW true
+ __sf_util_set_default SPACEFISH_RUBY_PREFIX $SPACEFISH_PROMPT_DEFAULT_PREFIX
+ __sf_util_set_default SPACEFISH_RUBY_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_RUBY_SYMBOL "💎 "
+ __sf_util_set_default SPACEFISH_RUBY_COLOR red
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ # Check if that user wants to show ruby version
+ [ $SPACEFISH_RUBY_SHOW = false ]; and return
+
+ # Show versions only for Ruby-specific folders
+ if not test -f Gemfile \
+ -o -f Rakefile \
+ -o (count *.rb) -gt 0
+ return
+ end
+
+ set -l ruby_version
+
+ if type -q rvm-prompt
+ set ruby_version (rvm-prompt i v g)
+ else if type -q rbenv
+ set ruby_version (rbenv version-name)
+ else if type -q chruby
+ set ruby_version $RUBY_AUTO_VERSION
+ else if type -q asdf
+ set ruby_version (asdf current ruby | awk '{print $1}')
+ else
+ return
+ end
+
+ [ -z "$ruby_version" -o "$ruby_version" = "system" ]; and return
+
+ # Add 'v' before ruby version that starts with a number
+ if test -n (echo (string match -r "^[0-9].+\$" "$ruby_version"))
+ set ruby_version "v$ruby_version"
+ end
+
+ __sf_lib_section \
+ $SPACEFISH_RUBY_COLOR \
+ $SPACEFISH_RUBY_PREFIX \
+ "$SPACEFISH_RUBY_SYMBOL""$ruby_version" \
+ $SPACEFISH_RUBY_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_rust.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_rust.fish
new file mode 100644
index 00000000..f60ff7a4
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_rust.fish
@@ -0,0 +1,45 @@
+#
+# Rust
+#
+# Rust is a systems programming language sponsored by Mozilla Research.
+# Link: https://www.rust-lang.org
+
+function __sf_section_rust -d "Display the current Rust version"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_RUST_SHOW true
+ __sf_util_set_default SPACEFISH_RUST_PREFIX $SPACEFISH_PROMPT_DEFAULT_PREFIX
+ __sf_util_set_default SPACEFISH_RUST_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_RUST_SYMBOL "𝗥 "
+ __sf_util_set_default SPACEFISH_RUST_COLOR red
+ __sf_util_set_default SPACEFISH_RUST_VERBOSE_VERSION false
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ # Show current version of Rust
+ [ $SPACEFISH_RUST_SHOW = false ]; and return
+
+ # Ensure the rustc command is available
+ type -q rustc; or return
+
+ if not test -f Cargo.toml \
+ -o (count *.rs) -gt 0
+ return
+ end
+
+ set -l rust_version (rustc --version | string split ' ')[2]
+
+ if test $SPACEFISH_RUST_VERBOSE_VERSION = false
+ set rust_version (string split '-' $rust_version)[1] # Cut off -suffixes from version. "v1.30.0-beta" vs "v1.30.0"
+ end
+
+ __sf_lib_section \
+ $SPACEFISH_RUST_COLOR \
+ $SPACEFISH_RUST_PREFIX \
+ "$SPACEFISH_RUST_SYMBOL"v"$rust_version" \
+ $SPACEFISH_RUST_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_time.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_time.fish
new file mode 100644
index 00000000..b9779ff0
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_time.fish
@@ -0,0 +1,43 @@
+#
+# Time
+#
+
+function __sf_section_time -d "Display the current time!"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_TIME_SHOW false
+ __sf_util_set_default SPACEFISH_DATE_SHOW false
+ __sf_util_set_default SPACEFISH_TIME_PREFIX "at "
+ __sf_util_set_default SPACEFISH_TIME_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_TIME_FORMAT false
+ __sf_util_set_default SPACEFISH_TIME_12HR false
+ __sf_util_set_default SPACEFISH_TIME_COLOR "yellow"
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ [ $SPACEFISH_TIME_SHOW = false ]; and return
+
+ set -l time_str
+
+ if test $SPACEFISH_DATE_SHOW = true
+ set time_str (date '+%Y-%m-%d')" "
+ end
+
+ if not test $SPACEFISH_TIME_FORMAT = false
+ set time_str "$time_str"(date '+'$SPACEFISH_TIME_FORMAT)
+ else if test $SPACEFISH_TIME_12HR = true
+ set time_str "$time_str"(date '+%I:%M:%S') # Fish doesn't seem to have date/time formatting.
+ else
+ set time_str "$time_str"(date '+%H:%M:%S')
+ end
+
+ __sf_lib_section \
+ $SPACEFISH_TIME_COLOR \
+ $SPACEFISH_TIME_PREFIX \
+ $time_str \
+ $SPACEFISH_TIME_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_user.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_user.fish
new file mode 100644
index 00000000..b481995f
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_user.fish
@@ -0,0 +1,49 @@
+#
+# Username
+#
+
+function __sf_section_user -d "Display the username"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ # --------------------------------------------------------------------------
+ # | SPACEFISH_USER_SHOW | show username on local | show username on remote |
+ # |---------------------+------------------------+-------------------------|
+ # | false | never | never |
+ # | always | always | always |
+ # | true | if needed | always |
+ # | needed | if needed | if needed |
+ # --------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_USER_SHOW true
+ __sf_util_set_default SPACEFISH_USER_PREFIX "with "
+ __sf_util_set_default SPACEFISH_USER_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_USER_COLOR yellow
+ __sf_util_set_default SPACEFISH_USER_COLOR_ROOT red
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ [ $SPACEFISH_USER_SHOW = false ]; and return
+
+ if test "$SPACEFISH_USER_SHOW" = "always" \
+ -o "$LOGNAME" != "$USER" \
+ -o "$UID" = "0" \
+ -o \( "$SPACEFISH_USER_SHOW" = "true" -a -n "$SSH_CONNECTION" \)
+
+ set -l user_color
+ if test "$USER" = "root"
+ set user_color $SPACEFISH_USER_COLOR_ROOT
+ else
+ set user_color $SPACEFISH_USER_COLOR
+ end
+
+ __sf_lib_section \
+ $user_color \
+ $SPACEFISH_USER_PREFIX \
+ $USER \
+ $SPACEFISH_USER_SUFFIX
+ end
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_venv.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_venv.fish
new file mode 100644
index 00000000..204fa898
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_venv.fish
@@ -0,0 +1,36 @@
+# virtualenv
+#
+
+function __sf_section_venv -d "Show current virtual Python environment"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_VENV_SHOW true
+ __sf_util_set_default SPACEFISH_VENV_PREFIX $SPACEFISH_PROMPT_DEFAULT_PREFIX
+ __sf_util_set_default SPACEFISH_VENV_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_VENV_SYMBOL "·"
+ __sf_util_set_default SPACEFISH_VENV_GENERIC_NAMES virtualenv venv .venv
+ __sf_util_set_default SPACEFISH_VENV_COLOR blue
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ # Show venv python version
+ test $SPACEFISH_VENV_SHOW = false; and return
+
+ # Check if the current directory running via Virtualenv
+ test -n "$VIRTUAL_ENV"; or return
+
+ set -l venv (basename $VIRTUAL_ENV)
+ if contains $venv $SPACEFISH_VENV_GENERIC_NAMES
+ set venv (basename (dirname $VIRTUAL_ENV))
+ end
+
+ __sf_lib_section \
+ $SPACEFISH_VENV_COLOR \
+ $SPACEFISH_VENV_PREFIX \
+ "$SPACEFISH_VENV_SYMBOL""$venv" \
+ $SPACEFISH_VENV_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_vi_mode.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_vi_mode.fish
new file mode 100644
index 00000000..a22292ac
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_section_vi_mode.fish
@@ -0,0 +1,51 @@
+#
+# Vi Mode
+#
+
+function __sf_section_vi_mode -d "Display vi mode status"
+ # ------------------------------------------------------------------------------
+ # Configuration
+ # ------------------------------------------------------------------------------
+
+ __sf_util_set_default SPACEFISH_VI_MODE_SHOW true
+ __sf_util_set_default SPACEFISH_VI_MODE_PREFIX " "
+ __sf_util_set_default SPACEFISH_VI_MODE_SUFFIX $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ __sf_util_set_default SPACEFISH_VI_MODE_INSERT [I]
+ __sf_util_set_default SPACEFISH_VI_MODE_NORMAL [N]
+ __sf_util_set_default SPACEFISH_VI_MODE_VISUAL [V]
+ __sf_util_set_default SPACEFISH_VI_MODE_REPLACE_ONE [R]
+ __sf_util_set_default SPACEFISH_VI_MODE_COLOR white
+
+ # ------------------------------------------------------------------------------
+ # Section
+ # ------------------------------------------------------------------------------
+
+ [ $SPACEFISH_VI_MODE_SHOW = false ]; and return
+
+ # Ensure fish_vi_key_bindings or fish_hybrid_key_bindings are used
+ # Here we are trying to be compatible with default fish_mode_prompt implementation,
+ # wich handle both "fish_vi_key_bindings" and "fish_hybrid_key_bindings"
+ [ "$fish_key_bindings" = "fish_vi_key_bindings" ]; or [ "$fish_key_bindings" = "fish_hybrid_key_bindings" ]; or return
+
+ # Use `set -l` to define local variables to avoid populating
+ # the global namespace
+ set -l vi_mode_symbol
+
+ # Check current mode and set vi_mode_symbol based on it
+ switch $fish_bind_mode
+ case default
+ set vi_mode_symbol $SPACEFISH_VI_MODE_NORMAL
+ case insert
+ set vi_mode_symbol $SPACEFISH_VI_MODE_INSERT
+ case replace_one
+ set vi_mode_symbol $SPACEFISH_VI_MODE_REPLACE_ONE
+ case visual
+ set vi_mode_symbol $SPACEFISH_VI_MODE_VISUAL
+ end
+
+ __sf_lib_section \
+ $SPACEFISH_VI_MODE_COLOR \
+ $SPACEFISH_VI_MODE_PREFIX \
+ $vi_mode_symbol \
+ $SPACEFISH_VI_MODE_SUFFIX
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_util_git_branch.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_util_git_branch.fish
new file mode 100644
index 00000000..8be99f61
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_util_git_branch.fish
@@ -0,0 +1,7 @@
+#
+# Git branch
+#
+
+function __sf_util_git_branch -d "Display the current branch name"
+ echo (command git rev-parse --abbrev-ref HEAD 2>/dev/null)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_util_human_time.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_util_human_time.fish
new file mode 100644
index 00000000..ce804749
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_util_human_time.fish
@@ -0,0 +1,23 @@
+#
+# Human time
+#
+
+function __sf_util_human_time -d "Humanize a time interval for display"
+ command awk '
+ function hmTime(time, stamp) {
+ split("h:m:s:ms", units, ":")
+ for (i = 2; i >= -1; i--) {
+ if (t = int( i < 0 ? time % 1000 : time / (60 ^ i * 1000) % 60 )) {
+ stamp = stamp t units[sqrt((i - 2) ^ 2) + 1] " "
+ }
+ }
+ if (stamp ~ /^ *$/) {
+ return "0ms"
+ }
+ return substr(stamp, 1, length(stamp) - 1)
+ }
+ {
+ print hmTime($0)
+ }
+ '
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_util_set_default.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_util_set_default.fish
new file mode 100644
index 00000000..63b0e88b
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_util_set_default.fish
@@ -0,0 +1,10 @@
+#
+# Set default
+#
+
+function __sf_util_set_default -a var -d "Set the default value for a global variable"
+ if not set -q $var
+ # Multiple arguments will become a list
+ set -g $var $argv[2..-1]
+ end
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/functions/__sf_util_truncate_dir.fish b/.config/fisher/github.com/matchai/spacefish/functions/__sf_util_truncate_dir.fish
new file mode 100644
index 00000000..ce88c92d
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/functions/__sf_util_truncate_dir.fish
@@ -0,0 +1,17 @@
+#
+# Truncate directory
+#
+
+function __sf_util_truncate_dir -a path truncate_to -d "Truncate a directory path"
+ if test "$truncate_to" -eq 0
+ echo $path
+ else
+ set -l folders (string split / $path)
+
+ if test (count $folders) -le "$truncate_to"
+ echo $path
+ else
+ echo (string join / $folders[(math 0 - $truncate_to)..-1])
+ end
+ end
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/images/banner.svg b/.config/fisher/github.com/matchai/spacefish/images/banner.svg
new file mode 100644
index 00000000..b1f10e3f
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/images/banner.svg
@@ -0,0 +1 @@
+
diff --git a/.config/fisher/github.com/matchai/spacefish/images/icon-overlap.png b/.config/fisher/github.com/matchai/spacefish/images/icon-overlap.png
new file mode 100644
index 00000000..28638648
Binary files /dev/null and b/.config/fisher/github.com/matchai/spacefish/images/icon-overlap.png differ
diff --git a/.config/fisher/github.com/matchai/spacefish/images/preview.gif b/.config/fisher/github.com/matchai/spacefish/images/preview.gif
new file mode 100644
index 00000000..ef84ed6e
Binary files /dev/null and b/.config/fisher/github.com/matchai/spacefish/images/preview.gif differ
diff --git a/.config/fisher/github.com/matchai/spacefish/images/starship-notice.svg b/.config/fisher/github.com/matchai/spacefish/images/starship-notice.svg
new file mode 100644
index 00000000..88c4515d
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/images/starship-notice.svg
@@ -0,0 +1 @@
+
diff --git a/.config/fisher/github.com/matchai/spacefish/package-lock.json b/.config/fisher/github.com/matchai/spacefish/package-lock.json
new file mode 100644
index 00000000..4489b5e7
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/package-lock.json
@@ -0,0 +1,8027 @@
+{
+ "name": "spacefish",
+ "version": "0.0.0-semantic-release",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "^1.0.1",
+ "glob-to-regexp": "^0.3.0"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
+ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
+ "dev": true
+ },
+ "@semantic-release/changelog": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-3.0.2.tgz",
+ "integrity": "sha512-pDUaBNAuPAqQ+ArHwvR160RG2LbfyIVz9EJXgxH0V547rlx/hCs0Sp7L4Rtzi5Z+d6CHcv9g2ynxplE1xAzp2g==",
+ "dev": true,
+ "requires": {
+ "@semantic-release/error": "^2.1.0",
+ "aggregate-error": "^2.0.0",
+ "fs-extra": "^7.0.0",
+ "lodash": "^4.17.4"
+ },
+ "dependencies": {
+ "aggregate-error": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-2.0.0.tgz",
+ "integrity": "sha512-xA1VQPApQdDehIIpS3gBFkMGDRb9pDYwZPVUOoX8A0lU3GB0mjiACqsa9ByBurU53erhjamf5I4VNRitCfXhjg==",
+ "dev": true,
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^3.0.0"
+ }
+ },
+ "clean-stack": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.0.0.tgz",
+ "integrity": "sha512-VEoL9Qh7I8s8iHnV53DaeWSt8NJ0g3khMfK6NiCPB7H657juhro+cSw2O88uo3bo0c0X5usamtXk0/Of0wXa5A==",
+ "dev": true
+ }
+ }
+ },
+ "@semantic-release/error": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-2.2.0.tgz",
+ "integrity": "sha512-9Tj/qn+y2j+sjCI3Jd+qseGtHjOAeg7dU2/lVcqIQ9TV3QDaDXDYXcoOHU+7o2Hwh8L8ymL4gfuO7KxDs3q2zg==",
+ "dev": true
+ },
+ "@semantic-release/exec": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@semantic-release/exec/-/exec-3.3.1.tgz",
+ "integrity": "sha512-dyktNa5cpV9TqQjxBIfCJKpDlKyYJ5OzL/04uBr9qUDXcDgaczGip3M/In/Ff/KGZSzkvrx+m96LVpng9+g5Tw==",
+ "dev": true,
+ "requires": {
+ "@semantic-release/error": "^2.1.0",
+ "aggregate-error": "^1.0.0",
+ "debug": "^4.0.0",
+ "execa": "^1.0.0",
+ "lodash": "^4.17.4",
+ "parse-json": "^4.0.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "semver": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+ "dev": true
+ }
+ }
+ },
+ "@semantic-release/git": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-7.0.6.tgz",
+ "integrity": "sha512-Uyi/RFBYv8jecMo7vJfjsr9rweJkOPuY6CJOITbOzhHmJjZssVOf7sS+zuqEQQsVzU+PPYIjx86HkIzbve/Evg==",
+ "dev": true,
+ "requires": {
+ "@semantic-release/error": "^2.1.0",
+ "aggregate-error": "^1.0.0",
+ "debug": "^4.0.0",
+ "dir-glob": "^2.0.0",
+ "execa": "^1.0.0",
+ "fs-extra": "^7.0.0",
+ "globby": "^8.0.1",
+ "lodash": "^4.17.4",
+ "micromatch": "^3.1.4",
+ "p-reduce": "^1.0.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "semver": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+ "dev": true
+ }
+ }
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
+ },
+ "aggregate-error": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-1.0.0.tgz",
+ "integrity": "sha1-iINE2tAiCnLjr1CQYRf0h3GSX6w=",
+ "dev": true,
+ "requires": {
+ "clean-stack": "^1.0.0",
+ "indent-string": "^3.0.0"
+ }
+ },
+ "ajv": {
+ "version": "6.5.5",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz",
+ "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "all-contributors-cli": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/all-contributors-cli/-/all-contributors-cli-5.4.1.tgz",
+ "integrity": "sha512-9kgEa/s6dF6K7ky7eZcFTDcbVJWDZP9WK0YCZTmU1IbmwIAGu81/tiDdg/woTnw3VYtpzq4SCXxPlDymLfw+Mg==",
+ "dev": true,
+ "requires": {
+ "async": "^2.0.0-rc.1",
+ "chalk": "^2.3.0",
+ "inquirer": "^4.0.0",
+ "lodash": "^4.11.2",
+ "pify": "^3.0.0",
+ "request": "^2.72.0",
+ "yargs": "^10.0.3"
+ }
+ },
+ "ansi-escapes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
+ "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "ansicolors": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz",
+ "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=",
+ "dev": true
+ },
+ "ansistyles": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ansistyles/-/ansistyles-0.1.3.tgz",
+ "integrity": "sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk=",
+ "dev": true
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "^1.0.1"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
+ "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.10"
+ }
+ },
+ "async-some": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/async-some/-/async-some-1.0.2.tgz",
+ "integrity": "sha1-TYqBYg1ZWHkbW5j4AtMgd3bpVQk=",
+ "dev": true,
+ "requires": {
+ "dezalgo": "^1.0.2"
+ }
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "bash-color": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/bash-color/-/bash-color-0.0.4.tgz",
+ "integrity": "sha1-6b6M4zVAytpIgXaMWb1jhlc26RM=",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "dev": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "block-stream": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.0"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "builtins": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/builtins/-/builtins-0.0.7.tgz",
+ "integrity": "sha1-NVIZzWzxjb58Acx/0tznZc/cVJo=",
+ "dev": true
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chardet": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
+ "dev": true
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "clean-stack": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-1.3.0.tgz",
+ "integrity": "sha1-noIVAa6XmYbEax1m0tQy2y/UrjE=",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
+ "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
+ "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "debuglog": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz",
+ "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=",
+ "dev": true
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "dezalgo": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz",
+ "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=",
+ "dev": true,
+ "requires": {
+ "asap": "^2.0.0",
+ "wrappy": "1"
+ }
+ },
+ "dir-glob": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz",
+ "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "path-type": "^3.0.0"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "dev": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "external-editor": {
+ "version": "2.2.0",
+ "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+ "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.4.0",
+ "iconv-lite": "^0.4.17",
+ "tmp": "^0.0.33"
+ },
+ "dependencies": {
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.4.tgz",
+ "integrity": "sha512-FjK2nCGI/McyzgNtTESqaWP3trPvHyRyoyY70hxjc3oKPNmDe8taohLZpoVKoUjW85tbU5txaYUZCNtVzygl1g==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "^2.2.1",
+ "@nodelib/fs.stat": "^1.1.2",
+ "glob-parent": "^3.1.0",
+ "is-glob": "^4.0.0",
+ "merge2": "^1.2.3",
+ "micromatch": "^3.1.10"
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "dev": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fstream": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
+ "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "inherits": "~2.0.0",
+ "mkdirp": ">=0.5 0",
+ "rimraf": "2"
+ }
+ },
+ "get-caller-file": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "gitbook-cli": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/gitbook-cli/-/gitbook-cli-2.3.2.tgz",
+ "integrity": "sha512-eyGtkY7jKHhmgpfuvgAP5fZcUob/FBz4Ld0aLRdEmiTrS1RklimN9epzPp75dd4MWpGhYvSbiwxnpyLiv1wh6A==",
+ "dev": true,
+ "requires": {
+ "bash-color": "0.0.4",
+ "commander": "2.11.0",
+ "fs-extra": "3.0.1",
+ "lodash": "4.17.4",
+ "npm": "5.1.0",
+ "npmi": "1.0.1",
+ "optimist": "0.6.1",
+ "q": "1.5.0",
+ "semver": "5.3.0",
+ "tmp": "0.0.31",
+ "user-home": "2.0.0"
+ },
+ "dependencies": {
+ "fs-extra": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
+ "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^3.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "jsonfile": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
+ "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "dev": true
+ }
+ }
+ },
+ "github-url-from-username-repo": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/github-url-from-username-repo/-/github-url-from-username-repo-1.0.2.tgz",
+ "integrity": "sha1-fdeTMNKr5pwQws73lxTJchV5Hfo=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globby": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz",
+ "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==",
+ "dev": true,
+ "requires": {
+ "array-union": "^1.0.1",
+ "dir-glob": "^2.0.0",
+ "fast-glob": "^2.0.2",
+ "glob": "^7.1.2",
+ "ignore": "^3.3.5",
+ "pify": "^3.0.0",
+ "slash": "^1.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.5.5",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz",
+ "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==",
+ "dev": true
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore": {
+ "version": "3.3.10",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-4.0.2.tgz",
+ "integrity": "sha512-+f3qDNeZpkhFJ61NBA9jXDrGGhoQuqfEum9A681c9oHoIbGgVqjogKynjB/vNVP+nVu9w3FbFQ35c0ibU0MaIQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.0",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^2.1.0",
+ "figures": "^2.0.0",
+ "lodash": "^4.3.0",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rx-lite": "^4.0.8",
+ "rx-lite-aggregates": "^4.0.8",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^4.0.0",
+ "through": "^2.3.6"
+ }
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "^1.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz",
+ "integrity": "sha512-xyQpxeWWMKyJps9CuGJYeng6ssI5bpqS9ltQpdVQ90t4ql6NdnxFKh95JcRt2cun/DjMVNrdjniLPuMA69xmCw==",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "dev": true,
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.4.tgz",
+ "integrity": "sha512-EPstzZ23znHUVLKj+lcXO1KvZkrlw+ZirdwvOmnAnA/1PB4ggyXJ77LRkCqkff+ShQ+cqoxCxLQOh4cKITO5iA==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "mem": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "merge2": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz",
+ "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "mime-db": {
+ "version": "1.37.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
+ "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.21",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
+ "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
+ "dev": true,
+ "requires": {
+ "mime-db": "~1.37.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
+ "dev": true
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "npm": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/npm/-/npm-5.1.0.tgz",
+ "integrity": "sha512-pt5ClxEmY/dLpb60SmGQQBKi3nB6Ljx1FXmpoCUdAULlGqGVn2uCyXxPCWFbcuHGthT7qGiaGa1wOfs/UjGYMw==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "~1.3.1",
+ "abbrev": "~1.1.0",
+ "ansi-regex": "~3.0.0",
+ "ansicolors": "~0.3.2",
+ "ansistyles": "~0.1.3",
+ "aproba": "~1.1.2",
+ "archy": "~1.0.0",
+ "bluebird": "~3.5.0",
+ "cacache": "~9.2.9",
+ "call-limit": "~1.1.0",
+ "chownr": "~1.0.1",
+ "cmd-shim": "~2.0.2",
+ "columnify": "~1.5.4",
+ "config-chain": "~1.1.11",
+ "debuglog": "*",
+ "detect-indent": "~5.0.0",
+ "dezalgo": "~1.0.3",
+ "editor": "~1.0.0",
+ "fs-vacuum": "~1.2.10",
+ "fs-write-stream-atomic": "~1.0.10",
+ "fstream": "~1.0.11",
+ "fstream-npm": "~1.2.1",
+ "glob": "~7.1.2",
+ "graceful-fs": "~4.1.11",
+ "has-unicode": "~2.0.1",
+ "hosted-git-info": "~2.5.0",
+ "iferr": "~0.1.5",
+ "imurmurhash": "*",
+ "inflight": "~1.0.6",
+ "inherits": "~2.0.3",
+ "ini": "~1.3.4",
+ "init-package-json": "~1.10.1",
+ "lazy-property": "~1.0.0",
+ "lockfile": "~1.0.3",
+ "lodash._baseindexof": "*",
+ "lodash._baseuniq": "~4.6.0",
+ "lodash._bindcallback": "*",
+ "lodash._cacheindexof": "*",
+ "lodash._createcache": "*",
+ "lodash._getnative": "*",
+ "lodash.clonedeep": "~4.5.0",
+ "lodash.restparam": "*",
+ "lodash.union": "~4.6.0",
+ "lodash.uniq": "~4.5.0",
+ "lodash.without": "~4.4.0",
+ "lru-cache": "~4.1.1",
+ "mississippi": "~1.3.0",
+ "mkdirp": "~0.5.1",
+ "move-concurrently": "~1.0.1",
+ "node-gyp": "~3.6.2",
+ "nopt": "~4.0.1",
+ "normalize-package-data": "~2.4.0",
+ "npm-cache-filename": "~1.0.2",
+ "npm-install-checks": "~3.0.0",
+ "npm-package-arg": "~5.1.2",
+ "npm-registry-client": "~8.4.0",
+ "npm-user-validate": "~1.0.0",
+ "npmlog": "~4.1.2",
+ "once": "~1.4.0",
+ "opener": "~1.4.3",
+ "osenv": "~0.1.4",
+ "pacote": "~2.7.38",
+ "path-is-inside": "~1.0.2",
+ "promise-inflight": "~1.0.1",
+ "read": "~1.0.7",
+ "read-cmd-shim": "~1.0.1",
+ "read-installed": "~4.0.3",
+ "read-package-json": "~2.0.9",
+ "read-package-tree": "~5.1.6",
+ "readable-stream": "~2.3.2",
+ "readdir-scoped-modules": "*",
+ "request": "~2.81.0",
+ "retry": "~0.10.1",
+ "rimraf": "~2.6.1",
+ "safe-buffer": "~5.1.1",
+ "semver": "~5.3.0",
+ "sha": "~2.0.1",
+ "slide": "~1.1.6",
+ "sorted-object": "~2.0.1",
+ "sorted-union-stream": "~2.1.3",
+ "ssri": "~4.1.6",
+ "strip-ansi": "~4.0.0",
+ "tar": "~2.2.1",
+ "text-table": "~0.2.0",
+ "uid-number": "0.0.6",
+ "umask": "~1.1.0",
+ "unique-filename": "~1.1.0",
+ "unpipe": "~1.0.0",
+ "update-notifier": "~2.2.0",
+ "uuid": "~3.1.0",
+ "validate-npm-package-license": "*",
+ "validate-npm-package-name": "~3.0.0",
+ "which": "~1.2.14",
+ "worker-farm": "~1.3.1",
+ "wrappy": "~1.0.2",
+ "write-file-atomic": "~2.1.0"
+ },
+ "dependencies": {
+ "JSONStream": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz",
+ "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ },
+ "dependencies": {
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ }
+ }
+ },
+ "abbrev": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz",
+ "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansicolors": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz",
+ "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=",
+ "dev": true
+ },
+ "ansistyles": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ansistyles/-/ansistyles-0.1.3.tgz",
+ "integrity": "sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk=",
+ "dev": true
+ },
+ "aproba": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz",
+ "integrity": "sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw==",
+ "dev": true
+ },
+ "archy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+ "dev": true
+ },
+ "bluebird": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz",
+ "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=",
+ "dev": true
+ },
+ "cacache": {
+ "version": "9.2.9",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-9.2.9.tgz",
+ "integrity": "sha512-ghg1j5OyTJ6qsrqU++dN23QiTDxb5AZCFGsF3oB+v9v/gY+F4X8L/0gdQMEjd+8Ot3D29M2etX5PKozHRn2JQw==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.0",
+ "chownr": "^1.0.1",
+ "glob": "^7.1.2",
+ "graceful-fs": "^4.1.11",
+ "lru-cache": "^4.1.1",
+ "mississippi": "^1.3.0",
+ "mkdirp": "^0.5.1",
+ "move-concurrently": "^1.0.1",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^2.6.1",
+ "ssri": "^4.1.6",
+ "unique-filename": "^1.1.0",
+ "y18n": "^3.2.1"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
+ "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ },
+ "dependencies": {
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ }
+ }
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ }
+ }
+ },
+ "call-limit": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/call-limit/-/call-limit-1.1.0.tgz",
+ "integrity": "sha1-b9YbA/PaQqLNDsK2DwK9DnGZH+o=",
+ "dev": true
+ },
+ "chownr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
+ "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=",
+ "dev": true
+ },
+ "cmd-shim": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.0.2.tgz",
+ "integrity": "sha1-b8vamUg6j9FdfTChlspp1oii79s=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "mkdirp": "~0.5.0"
+ }
+ },
+ "columnify": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz",
+ "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=",
+ "dev": true,
+ "requires": {
+ "strip-ansi": "^3.0.0",
+ "wcwidth": "^1.0.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ }
+ }
+ },
+ "wcwidth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+ "dev": true,
+ "requires": {
+ "defaults": "^1.0.3"
+ },
+ "dependencies": {
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.2"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz",
+ "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=",
+ "dev": true
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "config-chain": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz",
+ "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ },
+ "dependencies": {
+ "proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
+ "dev": true
+ }
+ }
+ },
+ "debuglog": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz",
+ "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz",
+ "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=",
+ "dev": true
+ },
+ "dezalgo": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz",
+ "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=",
+ "dev": true,
+ "requires": {
+ "asap": "^2.0.0",
+ "wrappy": "1"
+ },
+ "dependencies": {
+ "asap": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.5.tgz",
+ "integrity": "sha1-UidltQw1EEkOUtfc/ghe+bqWlY8=",
+ "dev": true
+ }
+ }
+ },
+ "editor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/editor/-/editor-1.0.0.tgz",
+ "integrity": "sha1-YMf4e9YrzGqJT6jM1q+3gjok90I=",
+ "dev": true
+ },
+ "fs-vacuum": {
+ "version": "1.2.10",
+ "resolved": "https://registry.npmjs.org/fs-vacuum/-/fs-vacuum-1.2.10.tgz",
+ "integrity": "sha1-t2Kb7AekAxolSP35n17PHMizHjY=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "path-is-inside": "^1.0.1",
+ "rimraf": "^2.5.2"
+ }
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "iferr": "^0.1.5",
+ "imurmurhash": "^0.1.4",
+ "readable-stream": "1 || 2"
+ }
+ },
+ "fstream": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
+ "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "inherits": "~2.0.0",
+ "mkdirp": ">=0.5 0",
+ "rimraf": "2"
+ }
+ },
+ "fstream-npm": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/fstream-npm/-/fstream-npm-1.2.1.tgz",
+ "integrity": "sha512-iBHpm/LmD1qw0TlHMAqVd9rwdU6M+EHRUnPkXpRi5G/Hf0FIFH+oZFryodAU2MFNfGRh/CzhUFlMKV3pdeOTDw==",
+ "dev": true,
+ "requires": {
+ "fstream-ignore": "^1.0.0",
+ "inherits": "2"
+ },
+ "dependencies": {
+ "fstream-ignore": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz",
+ "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=",
+ "dev": true,
+ "requires": {
+ "fstream": "^1.0.0",
+ "inherits": "2",
+ "minimatch": "^3.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz",
+ "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==",
+ "dev": true
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz",
+ "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=",
+ "dev": true
+ },
+ "init-package-json": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.10.1.tgz",
+ "integrity": "sha1-zYc6FneWvvuZYSsodioLY5P9j2o=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.1",
+ "npm-package-arg": "^4.0.0 || ^5.0.0",
+ "promzard": "^0.3.0",
+ "read": "~1.0.1",
+ "read-package-json": "1 || 2",
+ "semver": "2.x || 3.x || 4 || 5",
+ "validate-npm-package-license": "^3.0.1",
+ "validate-npm-package-name": "^3.0.0"
+ },
+ "dependencies": {
+ "promzard": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz",
+ "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=",
+ "dev": true,
+ "requires": {
+ "read": "1"
+ }
+ }
+ }
+ },
+ "lazy-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lazy-property/-/lazy-property-1.0.0.tgz",
+ "integrity": "sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc=",
+ "dev": true
+ },
+ "lockfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.3.tgz",
+ "integrity": "sha1-Jjj8OaAzHpysGgS3F5mTHJxQ33k=",
+ "dev": true
+ },
+ "lodash._baseindexof": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz",
+ "integrity": "sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw=",
+ "dev": true
+ },
+ "lodash._baseuniq": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz",
+ "integrity": "sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg=",
+ "dev": true,
+ "requires": {
+ "lodash._createset": "~4.0.0",
+ "lodash._root": "~3.0.0"
+ },
+ "dependencies": {
+ "lodash._createset": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/lodash._createset/-/lodash._createset-4.0.3.tgz",
+ "integrity": "sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY=",
+ "dev": true
+ },
+ "lodash._root": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
+ "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=",
+ "dev": true
+ }
+ }
+ },
+ "lodash._bindcallback": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz",
+ "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=",
+ "dev": true
+ },
+ "lodash._cacheindexof": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz",
+ "integrity": "sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI=",
+ "dev": true
+ },
+ "lodash._createcache": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lodash._createcache/-/lodash._createcache-3.1.2.tgz",
+ "integrity": "sha1-VtagZAF2JeeevKa4AY4XRAvc8JM=",
+ "dev": true,
+ "requires": {
+ "lodash._getnative": "^3.0.0"
+ }
+ },
+ "lodash._getnative": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+ "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
+ "dev": true
+ },
+ "lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+ "dev": true
+ },
+ "lodash.restparam": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
+ "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
+ "dev": true
+ },
+ "lodash.union": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
+ "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=",
+ "dev": true
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+ "dev": true
+ },
+ "lodash.without": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.without/-/lodash.without-4.4.0.tgz",
+ "integrity": "sha1-PNRXSgC2e643OpS3SHcmQFB7eqw=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
+ "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ },
+ "dependencies": {
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ }
+ }
+ },
+ "mississippi": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-1.3.0.tgz",
+ "integrity": "sha1-0gFYPrEjJ+PFwWQqQEqcrPlONPU=",
+ "dev": true,
+ "requires": {
+ "concat-stream": "^1.5.0",
+ "duplexify": "^3.4.2",
+ "end-of-stream": "^1.1.0",
+ "flush-write-stream": "^1.0.0",
+ "from2": "^2.1.0",
+ "parallel-transform": "^1.1.0",
+ "pump": "^1.0.0",
+ "pumpify": "^1.3.3",
+ "stream-each": "^1.1.0",
+ "through2": "^2.0.0"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ },
+ "dependencies": {
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ }
+ }
+ },
+ "duplexify": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz",
+ "integrity": "sha1-GqdzAC4VeEV+nZ1KULDMquvL1gQ=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ },
+ "dependencies": {
+ "end-of-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz",
+ "integrity": "sha1-1FlucCc0qT5A6a+GQxnqvZn/Lw4=",
+ "dev": true,
+ "requires": {
+ "once": "~1.3.0"
+ },
+ "dependencies": {
+ "once": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+ "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ }
+ }
+ },
+ "stream-shift": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+ "dev": true
+ }
+ }
+ },
+ "end-of-stream": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz",
+ "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "flush-write-stream": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz",
+ "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.4"
+ }
+ },
+ "from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ }
+ },
+ "parallel-transform": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
+ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
+ "dev": true,
+ "requires": {
+ "cyclist": "~0.2.2",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.1.5"
+ },
+ "dependencies": {
+ "cyclist": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
+ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=",
+ "dev": true
+ }
+ }
+ },
+ "pump": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.2.tgz",
+ "integrity": "sha1-Oz7mUS+U8OV1U4wXmV+fFpkKXVE=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "pumpify": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.3.5.tgz",
+ "integrity": "sha1-G2ccYZlAq8rqwK0OOjwWS+dgmTs=",
+ "dev": true,
+ "requires": {
+ "duplexify": "^3.1.2",
+ "inherits": "^2.0.1",
+ "pump": "^1.0.0"
+ }
+ },
+ "stream-each": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.0.tgz",
+ "integrity": "sha1-HpXUdXP1gNgU3A/4zQ9m8c5TyZE=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "stream-shift": "^1.0.0"
+ },
+ "dependencies": {
+ "stream-shift": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+ "dev": true
+ }
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ },
+ "dependencies": {
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "move-concurrently": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.1.1",
+ "copy-concurrently": "^1.0.0",
+ "fs-write-stream-atomic": "^1.0.8",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.3"
+ },
+ "dependencies": {
+ "copy-concurrently": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.3.tgz",
+ "integrity": "sha1-Rft4ZiSaHKiJqlcI5svSc+dbslA=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.1.1",
+ "fs-write-stream-atomic": "^1.0.8",
+ "iferr": "^0.1.5",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.0"
+ }
+ },
+ "run-queue": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.1.1"
+ }
+ }
+ }
+ },
+ "node-gyp": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz",
+ "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=",
+ "dev": true,
+ "requires": {
+ "fstream": "^1.0.0",
+ "glob": "^7.0.3",
+ "graceful-fs": "^4.1.2",
+ "minimatch": "^3.0.2",
+ "mkdirp": "^0.5.0",
+ "nopt": "2 || 3",
+ "npmlog": "0 || 1 || 2 || 3 || 4",
+ "osenv": "0",
+ "request": "2",
+ "rimraf": "2",
+ "semver": "~5.3.0",
+ "tar": "^2.0.0",
+ "which": "1"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ }
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
+ "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ },
+ "dependencies": {
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "^1.0.0"
+ },
+ "dependencies": {
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "npm-cache-filename": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz",
+ "integrity": "sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE=",
+ "dev": true
+ },
+ "npm-install-checks": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-3.0.0.tgz",
+ "integrity": "sha1-1K7N/VGlPjcjt7L5Oy7ijjB7wNc=",
+ "dev": true,
+ "requires": {
+ "semver": "^2.3.0 || 3.x || 4 || 5"
+ }
+ },
+ "npm-package-arg": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-5.1.2.tgz",
+ "integrity": "sha512-wJBsrf0qpypPT7A0LART18hCdyhpCMxeTtcb0X4IZO2jsP6Om7EHN1d9KSKiqD+KVH030RVNpWS9thk+pb7wzA==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.4.2",
+ "osenv": "^0.1.4",
+ "semver": "^5.1.0",
+ "validate-npm-package-name": "^3.0.0"
+ }
+ },
+ "npm-registry-client": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-8.4.0.tgz",
+ "integrity": "sha512-PVNfqq0lyRdFnE//nDmn3CC9uqTsr8Bya9KPLIevlXMfkP0m4RpCVyFFk0W1Gfx436kKwyhLA6J+lV+rgR81gQ==",
+ "dev": true,
+ "requires": {
+ "concat-stream": "^1.5.2",
+ "graceful-fs": "^4.1.6",
+ "normalize-package-data": "~1.0.1 || ^2.0.0",
+ "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0",
+ "npmlog": "2 || ^3.1.0 || ^4.0.0",
+ "once": "^1.3.3",
+ "request": "^2.74.0",
+ "retry": "^0.10.0",
+ "semver": "2 >=2.2.1 || 3.x || 4 || 5",
+ "slide": "^1.1.3",
+ "ssri": "^4.1.2"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ },
+ "dependencies": {
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "npm-user-validate": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-1.0.0.tgz",
+ "integrity": "sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE=",
+ "dev": true
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "dev": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ },
+ "dependencies": {
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
+ "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
+ "dev": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ },
+ "dependencies": {
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "dev": true
+ }
+ }
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "dev": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "dependencies": {
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ },
+ "dependencies": {
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ }
+ }
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
+ "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.2"
+ }
+ }
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ }
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "opener": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz",
+ "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=",
+ "dev": true
+ },
+ "osenv": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
+ "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ },
+ "dependencies": {
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ }
+ }
+ },
+ "pacote": {
+ "version": "2.7.38",
+ "resolved": "https://registry.npmjs.org/pacote/-/pacote-2.7.38.tgz",
+ "integrity": "sha512-XxHUyHQB7QCVBxoXeVu0yKxT+2PvJucsc0+1E+6f95lMUxEAYERgSAc71ckYXrYr35Ew3xFU/LrhdIK21GQFFA==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.0",
+ "cacache": "^9.2.9",
+ "glob": "^7.1.2",
+ "lru-cache": "^4.1.1",
+ "make-fetch-happen": "^2.4.13",
+ "minimatch": "^3.0.4",
+ "mississippi": "^1.2.0",
+ "normalize-package-data": "^2.4.0",
+ "npm-package-arg": "^5.1.2",
+ "npm-pick-manifest": "^1.0.4",
+ "osenv": "^0.1.4",
+ "promise-inflight": "^1.0.1",
+ "promise-retry": "^1.1.1",
+ "protoduck": "^4.0.0",
+ "safe-buffer": "^5.1.1",
+ "semver": "^5.3.0",
+ "ssri": "^4.1.6",
+ "tar-fs": "^1.15.3",
+ "tar-stream": "^1.5.4",
+ "unique-filename": "^1.1.0",
+ "which": "^1.2.12"
+ },
+ "dependencies": {
+ "make-fetch-happen": {
+ "version": "2.4.13",
+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-2.4.13.tgz",
+ "integrity": "sha512-73CsTlMRSLdGr7VvOE8iYl/ejOSIxyfRYg7jZhepGGEqIlgdq6FLe2DEAI5bo813Jdg5fS/Ku62SRQ/UpT6NJA==",
+ "dev": true,
+ "requires": {
+ "agentkeepalive": "^3.3.0",
+ "cacache": "^9.2.9",
+ "http-cache-semantics": "^3.7.3",
+ "http-proxy-agent": "^2.0.0",
+ "https-proxy-agent": "^2.0.0",
+ "lru-cache": "^4.1.1",
+ "mississippi": "^1.2.0",
+ "node-fetch-npm": "^2.0.1",
+ "promise-retry": "^1.1.1",
+ "socks-proxy-agent": "^3.0.0",
+ "ssri": "^4.1.6"
+ },
+ "dependencies": {
+ "agentkeepalive": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.3.0.tgz",
+ "integrity": "sha512-9yhcpXti2ZQE7bxuCsjjWNIZoQOd9sZ1ZBovHG0YeCRohFv73SLvcm73PC9T3olM4GyozaQb+4MGdQpcD8m7NQ==",
+ "dev": true,
+ "requires": {
+ "humanize-ms": "^1.2.1"
+ },
+ "dependencies": {
+ "humanize-ms": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
+ "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=",
+ "dev": true,
+ "requires": {
+ "ms": "^2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "http-cache-semantics": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.7.3.tgz",
+ "integrity": "sha1-LzXFMuzSnx5UE7mvgztySjxvf3I=",
+ "dev": true
+ },
+ "http-proxy-agent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.0.0.tgz",
+ "integrity": "sha1-RkgqLwUjpNYIJVFwn0acs+SoX/Q=",
+ "dev": true,
+ "requires": {
+ "agent-base": "4",
+ "debug": "2"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.1.0.tgz",
+ "integrity": "sha1-IOF0Ac1Js8B2v1akvGxbQ2/6jVU=",
+ "dev": true,
+ "requires": {
+ "es6-promisify": "^5.0.0"
+ },
+ "dependencies": {
+ "es6-promisify": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
+ "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
+ "dev": true,
+ "requires": {
+ "es6-promise": "^4.0.3"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz",
+ "integrity": "sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng==",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "debug": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "https-proxy-agent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.0.0.tgz",
+ "integrity": "sha1-/6pLb69YasNAwYoUBDHna31/KUQ=",
+ "dev": true,
+ "requires": {
+ "agent-base": "^4.1.0",
+ "debug": "^2.4.1"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.1.0.tgz",
+ "integrity": "sha1-IOF0Ac1Js8B2v1akvGxbQ2/6jVU=",
+ "dev": true,
+ "requires": {
+ "es6-promisify": "^5.0.0"
+ },
+ "dependencies": {
+ "es6-promisify": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
+ "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
+ "dev": true,
+ "requires": {
+ "es6-promise": "^4.0.3"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz",
+ "integrity": "sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng==",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "debug": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "node-fetch-npm": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.1.tgz",
+ "integrity": "sha512-W3onhopST5tqpX0/MGSL47pDQLLKobNR83AvkiOWQKaw54h+uYUfzeLAxCiyhWlUOiuI+GIb4O9ojLaAFlhCCA==",
+ "dev": true,
+ "requires": {
+ "encoding": "^0.1.11",
+ "json-parse-helpfulerror": "^1.0.3",
+ "safe-buffer": "^5.0.1"
+ },
+ "dependencies": {
+ "encoding": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
+ "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
+ "dev": true,
+ "requires": {
+ "iconv-lite": "~0.4.13"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz",
+ "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA==",
+ "dev": true
+ }
+ }
+ },
+ "json-parse-helpfulerror": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz",
+ "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=",
+ "dev": true,
+ "requires": {
+ "jju": "^1.1.0"
+ },
+ "dependencies": {
+ "jju": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jju/-/jju-1.3.0.tgz",
+ "integrity": "sha1-2t2e8BkkvHKLA/L3l5vb1i96Kqo=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "socks-proxy-agent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-3.0.0.tgz",
+ "integrity": "sha512-YJcT+SNNBgFoK/NpO20PChz0VnBOhkjG3X10BwlrYujd0NZlSsH1jbxSQ1S0njt3sOvzwQ2PvGqqUIvP4rNk/w==",
+ "dev": true,
+ "requires": {
+ "agent-base": "^4.0.1",
+ "socks": "^1.1.10"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.1.0.tgz",
+ "integrity": "sha1-IOF0Ac1Js8B2v1akvGxbQ2/6jVU=",
+ "dev": true,
+ "requires": {
+ "es6-promisify": "^5.0.0"
+ },
+ "dependencies": {
+ "es6-promisify": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
+ "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
+ "dev": true,
+ "requires": {
+ "es6-promise": "^4.0.3"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz",
+ "integrity": "sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng==",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "socks": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.10.tgz",
+ "integrity": "sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o=",
+ "dev": true,
+ "requires": {
+ "ip": "^1.1.4",
+ "smart-buffer": "^1.0.13"
+ },
+ "dependencies": {
+ "ip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+ "dev": true
+ },
+ "smart-buffer": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz",
+ "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=",
+ "dev": true
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "npm-pick-manifest": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-1.0.4.tgz",
+ "integrity": "sha512-MKxNdeyOZysPRTTbHtW0M5Fw38Jo/3ARsoGw5qjCfS+XGjvNB/Gb4qtAZUFmKPM2mVum+eX559eHvKywU856BQ==",
+ "dev": true,
+ "requires": {
+ "npm-package-arg": "^5.1.2",
+ "semver": "^5.3.0"
+ }
+ },
+ "promise-retry": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz",
+ "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=",
+ "dev": true,
+ "requires": {
+ "err-code": "^1.0.0",
+ "retry": "^0.10.0"
+ },
+ "dependencies": {
+ "err-code": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz",
+ "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=",
+ "dev": true
+ }
+ }
+ },
+ "protoduck": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-4.0.0.tgz",
+ "integrity": "sha1-/kh02MeRM2bP2erRJFOiLNNlf44=",
+ "dev": true,
+ "requires": {
+ "genfun": "^4.0.1"
+ },
+ "dependencies": {
+ "genfun": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/genfun/-/genfun-4.0.1.tgz",
+ "integrity": "sha1-7RAEHy5KfxsKOEZtF6XD4n3x38E=",
+ "dev": true
+ }
+ }
+ },
+ "tar-fs": {
+ "version": "1.15.3",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.15.3.tgz",
+ "integrity": "sha1-7M+TXpQUk9gVECjmNuUc5MPKfyA=",
+ "dev": true,
+ "requires": {
+ "chownr": "^1.0.1",
+ "mkdirp": "^0.5.1",
+ "pump": "^1.0.0",
+ "tar-stream": "^1.1.2"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.2.tgz",
+ "integrity": "sha1-Oz7mUS+U8OV1U4wXmV+fFpkKXVE=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ },
+ "dependencies": {
+ "end-of-stream": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz",
+ "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ }
+ }
+ }
+ }
+ },
+ "tar-stream": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz",
+ "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=",
+ "dev": true,
+ "requires": {
+ "bl": "^1.0.0",
+ "end-of-stream": "^1.0.0",
+ "readable-stream": "^2.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "bl": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz",
+ "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.5"
+ }
+ },
+ "end-of-stream": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz",
+ "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
+ "dev": true
+ },
+ "read": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
+ "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=",
+ "dev": true,
+ "requires": {
+ "mute-stream": "~0.0.4"
+ },
+ "dependencies": {
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ }
+ }
+ },
+ "read-cmd-shim": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz",
+ "integrity": "sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2"
+ }
+ },
+ "read-installed": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/read-installed/-/read-installed-4.0.3.tgz",
+ "integrity": "sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc=",
+ "dev": true,
+ "requires": {
+ "debuglog": "^1.0.1",
+ "graceful-fs": "^4.1.2",
+ "read-package-json": "^2.0.0",
+ "readdir-scoped-modules": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "slide": "~1.1.3",
+ "util-extend": "^1.0.1"
+ },
+ "dependencies": {
+ "util-extend": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz",
+ "integrity": "sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=",
+ "dev": true
+ }
+ }
+ },
+ "read-package-json": {
+ "version": "2.0.9",
+ "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.0.9.tgz",
+ "integrity": "sha512-vuV8p921IgyelL4UOKv3FsRuRZSaRn30HanLAOKargsr8TbBEq+I3MgloSRXYuKhNdYP1wlEGilMWAIayA2RFg==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.1",
+ "graceful-fs": "^4.1.2",
+ "json-parse-helpfulerror": "^1.0.2",
+ "normalize-package-data": "^2.0.0"
+ },
+ "dependencies": {
+ "json-parse-helpfulerror": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz",
+ "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=",
+ "dev": true,
+ "requires": {
+ "jju": "^1.1.0"
+ },
+ "dependencies": {
+ "jju": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jju/-/jju-1.3.0.tgz",
+ "integrity": "sha1-2t2e8BkkvHKLA/L3l5vb1i96Kqo=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "read-package-tree": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.1.6.tgz",
+ "integrity": "sha512-FCX1aT3GWyY658wzDICef4p+n0dB+ENRct8E/Qyvppj6xVpOYerBHfUu7OP5Rt1/393Tdglguf5ju5DEX4wZNg==",
+ "dev": true,
+ "requires": {
+ "debuglog": "^1.0.1",
+ "dezalgo": "^1.0.0",
+ "once": "^1.3.0",
+ "read-package-json": "^2.0.0",
+ "readdir-scoped-modules": "^1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.2.tgz",
+ "integrity": "sha1-WgTfBeT1f+Pw3Gj90R3FyXx+b00=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~1.0.6",
+ "safe-buffer": "~5.1.0",
+ "string_decoder": "~1.0.0",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ }
+ }
+ },
+ "readdir-scoped-modules": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz",
+ "integrity": "sha1-n6+jfShr5dksuuve4DDcm19AZ0c=",
+ "dev": true,
+ "requires": {
+ "debuglog": "^1.0.1",
+ "dezalgo": "^1.0.0",
+ "graceful-fs": "^4.1.2",
+ "once": "^1.3.0"
+ }
+ },
+ "request": {
+ "version": "2.81.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
+ "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.6.0",
+ "aws4": "^1.2.1",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.5",
+ "extend": "~3.0.0",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.1.1",
+ "har-validator": "~4.2.1",
+ "hawk": "~3.1.3",
+ "http-signature": "~1.1.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.7",
+ "oauth-sign": "~0.8.1",
+ "performance-now": "^0.2.0",
+ "qs": "~6.4.0",
+ "safe-buffer": "^5.0.1",
+ "stringstream": "~0.0.4",
+ "tough-cookie": "~2.3.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.0.0"
+ },
+ "dependencies": {
+ "aws-sign2": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+ "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
+ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ },
+ "dependencies": {
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+ "dev": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
+ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
+ "dev": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.5",
+ "mime-types": "^2.1.12"
+ },
+ "dependencies": {
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ }
+ }
+ },
+ "har-validator": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
+ "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
+ "dev": true,
+ "requires": {
+ "ajv": "^4.9.1",
+ "har-schema": "^1.0.5"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
+ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
+ "dev": true,
+ "requires": {
+ "co": "^4.6.0",
+ "json-stable-stringify": "^1.0.1"
+ },
+ "dependencies": {
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+ "dev": true,
+ "requires": {
+ "jsonify": "~0.0.0"
+ },
+ "dependencies": {
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "har-schema": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
+ "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=",
+ "dev": true
+ }
+ }
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+ "dev": true,
+ "requires": {
+ "boom": "2.x.x",
+ "cryptiles": "2.x.x",
+ "hoek": "2.x.x",
+ "sntp": "1.x.x"
+ },
+ "dependencies": {
+ "boom": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.x.x"
+ }
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+ "dev": true,
+ "requires": {
+ "boom": "2.x.x"
+ }
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+ "dev": true
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.x.x"
+ }
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^0.2.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
+ "dev": true
+ },
+ "jsprim": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz",
+ "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.0.2",
+ "json-schema": "0.2.3",
+ "verror": "1.3.6"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "extsprintf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz",
+ "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "verror": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz",
+ "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=",
+ "dev": true,
+ "requires": {
+ "extsprintf": "1.0.2"
+ }
+ }
+ }
+ },
+ "sshpk": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
+ "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
+ "dev": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "tweetnacl": "~0.14.0"
+ },
+ "dependencies": {
+ "asn1": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
+ "dev": true
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "~0.1.0"
+ }
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true,
+ "optional": true
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ }
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.15",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz",
+ "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=",
+ "dev": true,
+ "requires": {
+ "mime-db": "~1.27.0"
+ },
+ "dependencies": {
+ "mime-db": {
+ "version": "1.27.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz",
+ "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=",
+ "dev": true
+ }
+ }
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+ "dev": true
+ },
+ "performance-now": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
+ "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
+ "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
+ "dev": true
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
+ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
+ "dev": true
+ },
+ "tough-cookie": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz",
+ "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=",
+ "dev": true,
+ "requires": {
+ "punycode": "^1.4.1"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ }
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ }
+ }
+ },
+ "retry": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz",
+ "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz",
+ "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "dev": true
+ },
+ "semver": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "dev": true
+ },
+ "sha": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/sha/-/sha-2.0.1.tgz",
+ "integrity": "sha1-YDCCL70smCOUn49y7WQR7lzyWq4=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "slide": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz",
+ "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=",
+ "dev": true
+ },
+ "sorted-object": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/sorted-object/-/sorted-object-2.0.1.tgz",
+ "integrity": "sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw=",
+ "dev": true
+ },
+ "sorted-union-stream": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz",
+ "integrity": "sha1-x3lMfgd4gAUv9xqNSi27Sppjisc=",
+ "dev": true,
+ "requires": {
+ "from2": "^1.3.0",
+ "stream-iterate": "^1.1.0"
+ },
+ "dependencies": {
+ "from2": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-1.3.0.tgz",
+ "integrity": "sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "~1.1.10"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "stream-iterate": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/stream-iterate/-/stream-iterate-1.2.0.tgz",
+ "integrity": "sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "stream-shift": "^1.0.0"
+ },
+ "dependencies": {
+ "stream-shift": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "ssri": {
+ "version": "4.1.6",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-4.1.6.tgz",
+ "integrity": "sha512-WUbCdgSAMQjTFZRWvSPpauryvREEA+Krn19rx67UlJEJx/M192ZHxMmJXjZ4tkdFm+Sb0SXGlENeQVlA5wY7kA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ }
+ }
+ },
+ "tar": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
+ "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
+ "dev": true,
+ "requires": {
+ "block-stream": "*",
+ "fstream": "^1.0.2",
+ "inherits": "2"
+ },
+ "dependencies": {
+ "block-stream": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.0"
+ }
+ }
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "uid-number": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz",
+ "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=",
+ "dev": true
+ },
+ "umask": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz",
+ "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=",
+ "dev": true
+ },
+ "unique-filename": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz",
+ "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=",
+ "dev": true,
+ "requires": {
+ "unique-slug": "^2.0.0"
+ },
+ "dependencies": {
+ "unique-slug": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz",
+ "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=",
+ "dev": true,
+ "requires": {
+ "imurmurhash": "^0.1.4"
+ }
+ }
+ }
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "update-notifier": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.2.0.tgz",
+ "integrity": "sha1-G1g3z5DAc22IYncytmHBOPht5y8=",
+ "dev": true,
+ "requires": {
+ "boxen": "^1.0.0",
+ "chalk": "^1.0.0",
+ "configstore": "^3.0.0",
+ "import-lazy": "^2.1.0",
+ "is-npm": "^1.0.0",
+ "latest-version": "^3.0.0",
+ "semver-diff": "^2.0.0",
+ "xdg-basedir": "^3.0.0"
+ },
+ "dependencies": {
+ "boxen": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.1.0.tgz",
+ "integrity": "sha1-sbad1SIwXoB6md7ud329blFnsQI=",
+ "dev": true,
+ "requires": {
+ "ansi-align": "^2.0.0",
+ "camelcase": "^4.0.0",
+ "chalk": "^1.1.1",
+ "cli-boxes": "^1.0.0",
+ "string-width": "^2.0.0",
+ "term-size": "^0.1.0",
+ "widest-line": "^1.0.0"
+ },
+ "dependencies": {
+ "ansi-align": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
+ "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.0.0"
+ }
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "cli-boxes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
+ "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.0.tgz",
+ "integrity": "sha1-AwZkVh/BRslCPsfZeP4kV0N/5tA=",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "term-size": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/term-size/-/term-size-0.1.1.tgz",
+ "integrity": "sha1-hzYLljlsq1dgljcUzaDQy+7K2co=",
+ "dev": true,
+ "requires": {
+ "execa": "^0.4.0"
+ },
+ "dependencies": {
+ "execa": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.4.0.tgz",
+ "integrity": "sha1-TrZGejaglfq7KXD/nV4/t7zm68M=",
+ "dev": true,
+ "requires": {
+ "cross-spawn-async": "^2.1.1",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "path-key": "^1.0.0",
+ "strip-eof": "^1.0.0"
+ },
+ "dependencies": {
+ "cross-spawn-async": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz",
+ "integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.0",
+ "which": "^1.2.8"
+ }
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "npm-run-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz",
+ "integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^1.0.0"
+ }
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz",
+ "integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68=",
+ "dev": true
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "widest-line": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz",
+ "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "dependencies": {
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ },
+ "dependencies": {
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ }
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "configstore": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.0.tgz",
+ "integrity": "sha1-Rd+QcHPibfoc9LLVL1tgVF6qEdE=",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^4.1.0",
+ "graceful-fs": "^4.1.2",
+ "make-dir": "^1.0.0",
+ "unique-string": "^1.0.0",
+ "write-file-atomic": "^2.0.0",
+ "xdg-basedir": "^3.0.0"
+ },
+ "dependencies": {
+ "dot-prop": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.1.1.tgz",
+ "integrity": "sha1-qEk/C3te7sglJbXHWH+n3nyoWcE=",
+ "dev": true,
+ "requires": {
+ "is-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true
+ }
+ }
+ },
+ "make-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz",
+ "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=",
+ "dev": true,
+ "requires": {
+ "pify": "^2.3.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "unique-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
+ "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
+ "dev": true,
+ "requires": {
+ "crypto-random-string": "^1.0.0"
+ },
+ "dependencies": {
+ "crypto-random-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
+ "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "import-lazy": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
+ "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
+ "dev": true
+ },
+ "is-npm": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
+ "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
+ "dev": true
+ },
+ "latest-version": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
+ "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
+ "dev": true,
+ "requires": {
+ "package-json": "^4.0.0"
+ },
+ "dependencies": {
+ "package-json": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
+ "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
+ "dev": true,
+ "requires": {
+ "got": "^6.7.1",
+ "registry-auth-token": "^3.0.1",
+ "registry-url": "^3.0.3",
+ "semver": "^5.1.0"
+ },
+ "dependencies": {
+ "got": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
+ "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
+ "dev": true,
+ "requires": {
+ "create-error-class": "^3.0.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^3.0.0",
+ "is-redirect": "^1.0.0",
+ "is-retry-allowed": "^1.0.0",
+ "is-stream": "^1.0.0",
+ "lowercase-keys": "^1.0.0",
+ "safe-buffer": "^5.0.1",
+ "timed-out": "^4.0.0",
+ "unzip-response": "^2.0.1",
+ "url-parse-lax": "^1.0.0"
+ },
+ "dependencies": {
+ "create-error-class": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
+ "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
+ "dev": true,
+ "requires": {
+ "capture-stack-trace": "^1.0.0"
+ },
+ "dependencies": {
+ "capture-stack-trace": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz",
+ "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=",
+ "dev": true
+ }
+ }
+ },
+ "duplexer3": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "is-redirect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
+ "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
+ "dev": true
+ },
+ "is-retry-allowed": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
+ "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "lowercase-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
+ "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=",
+ "dev": true
+ },
+ "timed-out": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
+ "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+ "dev": true
+ },
+ "unzip-response": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
+ "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
+ "dev": true
+ },
+ "url-parse-lax": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
+ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+ "dev": true,
+ "requires": {
+ "prepend-http": "^1.0.1"
+ },
+ "dependencies": {
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "registry-auth-token": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz",
+ "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=",
+ "dev": true,
+ "requires": {
+ "rc": "^1.1.6",
+ "safe-buffer": "^5.0.1"
+ },
+ "dependencies": {
+ "rc": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz",
+ "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=",
+ "dev": true,
+ "requires": {
+ "deep-extend": "~0.4.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "deep-extend": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
+ "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
+ "dev": true
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "registry-url": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
+ "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
+ "dev": true,
+ "requires": {
+ "rc": "^1.0.1"
+ },
+ "dependencies": {
+ "rc": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz",
+ "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=",
+ "dev": true,
+ "requires": {
+ "deep-extend": "~0.4.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "deep-extend": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
+ "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
+ "dev": true
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "semver-diff": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
+ "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
+ "dev": true,
+ "requires": {
+ "semver": "^5.0.3"
+ }
+ },
+ "xdg-basedir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
+ "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
+ "dev": true
+ }
+ }
+ },
+ "uuid": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
+ "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
+ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "~1.0.0",
+ "spdx-expression-parse": "~1.0.0"
+ },
+ "dependencies": {
+ "spdx-correct": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
+ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "dev": true,
+ "requires": {
+ "spdx-license-ids": "^1.0.2"
+ },
+ "dependencies": {
+ "spdx-license-ids": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
+ "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
+ "dev": true
+ }
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz",
+ "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=",
+ "dev": true
+ }
+ }
+ },
+ "validate-npm-package-name": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz",
+ "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=",
+ "dev": true,
+ "requires": {
+ "builtins": "^1.0.3"
+ },
+ "dependencies": {
+ "builtins": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz",
+ "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=",
+ "dev": true
+ }
+ }
+ },
+ "which": {
+ "version": "1.2.14",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz",
+ "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ },
+ "dependencies": {
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ }
+ }
+ },
+ "worker-farm": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.3.1.tgz",
+ "integrity": "sha1-QzMRK7SbF6oFC4eJXKayys9A5f8=",
+ "dev": true,
+ "requires": {
+ "errno": ">=0.1.1 <0.2.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ },
+ "dependencies": {
+ "errno": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz",
+ "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=",
+ "dev": true,
+ "requires": {
+ "prr": "~0.0.0"
+ },
+ "dependencies": {
+ "prr": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz",
+ "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=",
+ "dev": true
+ }
+ }
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write-file-atomic": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.1.0.tgz",
+ "integrity": "sha512-0TZ20a+xcIl4u0+Mj5xDH2yOWdmQiXlKf9Hm+TgDXjTMsEYb+gDrmb8e8UNAzMCitX8NBqG4Z/FUQIyzv/R1JQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "imurmurhash": "^0.1.4",
+ "slide": "^1.1.5"
+ }
+ }
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "npmi": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/npmi/-/npmi-1.0.1.tgz",
+ "integrity": "sha1-FddpJzVHVF5oCdzwzhiu1IsCkOI=",
+ "dev": true,
+ "requires": {
+ "npm": "^2.1.12",
+ "semver": "^4.1.0"
+ },
+ "dependencies": {
+ "npm": {
+ "version": "2.15.12",
+ "resolved": "https://registry.npmjs.org/npm/-/npm-2.15.12.tgz",
+ "integrity": "sha1-33w+1aJ3w/nUtdgZsFMR0QogCuY=",
+ "dev": true,
+ "requires": {
+ "abbrev": "~1.0.9",
+ "ansi": "~0.3.1",
+ "ansi-regex": "*",
+ "ansicolors": "~0.3.2",
+ "ansistyles": "~0.1.3",
+ "archy": "~1.0.0",
+ "async-some": "~1.0.2",
+ "block-stream": "0.0.9",
+ "char-spinner": "~1.0.1",
+ "chmodr": "~1.0.2",
+ "chownr": "~1.0.1",
+ "cmd-shim": "~2.0.2",
+ "columnify": "~1.5.4",
+ "config-chain": "~1.1.10",
+ "dezalgo": "~1.0.3",
+ "editor": "~1.0.0",
+ "fs-vacuum": "~1.2.9",
+ "fs-write-stream-atomic": "~1.0.8",
+ "fstream": "~1.0.10",
+ "fstream-npm": "~1.1.1",
+ "github-url-from-git": "~1.4.0",
+ "github-url-from-username-repo": "~1.0.2",
+ "glob": "~7.0.6",
+ "graceful-fs": "~4.1.6",
+ "hosted-git-info": "~2.1.5",
+ "imurmurhash": "*",
+ "inflight": "~1.0.4",
+ "inherits": "~2.0.3",
+ "ini": "~1.3.4",
+ "init-package-json": "~1.9.4",
+ "lockfile": "~1.0.1",
+ "lru-cache": "~4.0.1",
+ "minimatch": "~3.0.3",
+ "mkdirp": "~0.5.1",
+ "node-gyp": "~3.6.0",
+ "nopt": "~3.0.6",
+ "normalize-git-url": "~3.0.2",
+ "normalize-package-data": "~2.3.5",
+ "npm-cache-filename": "~1.0.2",
+ "npm-install-checks": "~1.0.7",
+ "npm-package-arg": "~4.1.0",
+ "npm-registry-client": "~7.2.1",
+ "npm-user-validate": "~0.1.5",
+ "npmlog": "~2.0.4",
+ "once": "~1.4.0",
+ "opener": "~1.4.1",
+ "osenv": "~0.1.3",
+ "path-is-inside": "~1.0.0",
+ "read": "~1.0.7",
+ "read-installed": "~4.0.3",
+ "read-package-json": "~2.0.4",
+ "readable-stream": "~2.1.5",
+ "realize-package-specifier": "~3.0.1",
+ "request": "~2.74.0",
+ "retry": "~0.10.0",
+ "rimraf": "~2.5.4",
+ "semver": "~5.1.0",
+ "sha": "~2.0.1",
+ "slide": "~1.1.6",
+ "sorted-object": "~2.0.0",
+ "spdx-license-ids": "~1.2.2",
+ "strip-ansi": "~3.0.1",
+ "tar": "~2.2.1",
+ "text-table": "~0.2.0",
+ "uid-number": "0.0.6",
+ "umask": "~1.1.0",
+ "validate-npm-package-license": "~3.0.1",
+ "validate-npm-package-name": "~2.2.2",
+ "which": "~1.2.11",
+ "wrappy": "~1.0.2",
+ "write-file-atomic": "~1.1.4"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
+ "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=",
+ "dev": true
+ },
+ "ansi": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz",
+ "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz",
+ "integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=",
+ "dev": true
+ },
+ "archy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+ "dev": true
+ },
+ "block-stream": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.0"
+ }
+ },
+ "char-spinner": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/char-spinner/-/char-spinner-1.0.1.tgz",
+ "integrity": "sha1-5upnvSR+EHESmDt6sEee02KAAIE=",
+ "dev": true
+ },
+ "chmodr": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/chmodr/-/chmodr-1.0.2.tgz",
+ "integrity": "sha1-BGYrky0PAuxm3qorDqQoEZaOPrk=",
+ "dev": true
+ },
+ "chownr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
+ "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=",
+ "dev": true
+ },
+ "cmd-shim": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.0.2.tgz",
+ "integrity": "sha1-b8vamUg6j9FdfTChlspp1oii79s=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "mkdirp": "~0.5.0"
+ }
+ },
+ "columnify": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz",
+ "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=",
+ "dev": true,
+ "requires": {
+ "strip-ansi": "^3.0.0",
+ "wcwidth": "^1.0.0"
+ },
+ "dependencies": {
+ "wcwidth": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.0.tgz",
+ "integrity": "sha1-AtBZ/3qPx0Hg9rXaHmmytA2uym8=",
+ "dev": true,
+ "requires": {
+ "defaults": "^1.0.0"
+ },
+ "dependencies": {
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.2"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz",
+ "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=",
+ "dev": true
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "config-chain": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.10.tgz",
+ "integrity": "sha1-f8OD3g/MhNcRy0Zb0XZXnK1hI0Y=",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ },
+ "dependencies": {
+ "proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
+ "dev": true
+ }
+ }
+ },
+ "editor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/editor/-/editor-1.0.0.tgz",
+ "integrity": "sha1-YMf4e9YrzGqJT6jM1q+3gjok90I=",
+ "dev": true
+ },
+ "fs-vacuum": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/fs-vacuum/-/fs-vacuum-1.2.9.tgz",
+ "integrity": "sha1-T5AZOrjqAokJlbzU6ARlml02ay0=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "path-is-inside": "^1.0.1",
+ "rimraf": "^2.5.2"
+ }
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.8.tgz",
+ "integrity": "sha1-5Jqt3yiPh9Rv+eiC8hahOrxAd4s=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "iferr": "^0.1.5",
+ "imurmurhash": "^0.1.4",
+ "readable-stream": "1 || 2"
+ },
+ "dependencies": {
+ "iferr": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+ "dev": true
+ }
+ }
+ },
+ "fstream-npm": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/fstream-npm/-/fstream-npm-1.1.1.tgz",
+ "integrity": "sha1-a5F122I5qD2CCeIyQmxJTbspaQw=",
+ "dev": true,
+ "requires": {
+ "fstream-ignore": "^1.0.0",
+ "inherits": "2"
+ },
+ "dependencies": {
+ "fstream-ignore": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz",
+ "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=",
+ "dev": true,
+ "requires": {
+ "fstream": "^1.0.0",
+ "inherits": "2",
+ "minimatch": "^3.0.0"
+ }
+ }
+ }
+ },
+ "github-url-from-git": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/github-url-from-git/-/github-url-from-git-1.4.0.tgz",
+ "integrity": "sha1-KF5rUggZABveEoZ0cEN55P8D4N4=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
+ "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.2",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz",
+ "integrity": "sha1-Jj2tpmqz8vsQv3+dJN2PPlcO+RI=",
+ "dev": true
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.6",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.6.tgz",
+ "integrity": "sha1-UUw4dysxvuLgi+3CGgrrOr9UwZ4=",
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz",
+ "integrity": "sha1-C6gdkNouJas0ozLm7HeTbhWYEYs=",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.5.tgz",
+ "integrity": "sha1-2zIEzVqd4ubNiQuFxuL2a89PYgo=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz",
+ "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=",
+ "dev": true
+ },
+ "init-package-json": {
+ "version": "1.9.4",
+ "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.9.4.tgz",
+ "integrity": "sha1-tAU9C0Dwz4QqQZZpN8s9wPU06FY=",
+ "dev": true,
+ "requires": {
+ "glob": "^6.0.0",
+ "npm-package-arg": "^4.0.0",
+ "promzard": "^0.3.0",
+ "read": "~1.0.1",
+ "read-package-json": "1 || 2",
+ "semver": "2.x || 3.x || 4 || 5",
+ "validate-npm-package-license": "^3.0.1",
+ "validate-npm-package-name": "^2.0.1"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
+ "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+ "dev": true,
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "path-is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz",
+ "integrity": "sha1-Jj2tpmqz8vsQv3+dJN2PPlcO+RI=",
+ "dev": true
+ }
+ }
+ },
+ "promzard": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz",
+ "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=",
+ "dev": true,
+ "requires": {
+ "read": "1"
+ }
+ }
+ }
+ },
+ "lockfile": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.1.tgz",
+ "integrity": "sha1-nTU+z+P1TRULtX+J1RdGk1o5xPU=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.1.tgz",
+ "integrity": "sha1-E0OVXtry432bnn7nJB4nxLn7cr4=",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.1",
+ "yallist": "^2.0.0"
+ },
+ "dependencies": {
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.0.0.tgz",
+ "integrity": "sha1-MGxUODXwnuGkyyO3vOmrNByRzdQ=",
+ "dev": true
+ }
+ }
+ },
+ "minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.0.0"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz",
+ "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^0.4.1",
+ "concat-map": "0.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "node-gyp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.0.tgz",
+ "integrity": "sha1-dHT2OjoFARYd2gtjQfAi8UxCP6Y=",
+ "dev": true,
+ "requires": {
+ "fstream": "^1.0.0",
+ "glob": "^7.0.3",
+ "graceful-fs": "^4.1.2",
+ "minimatch": "^3.0.2",
+ "mkdirp": "^0.5.0",
+ "nopt": "2 || 3",
+ "npmlog": "0 || 1 || 2 || 3 || 4",
+ "osenv": "0",
+ "request": "2",
+ "rimraf": "2",
+ "semver": "~5.3.0",
+ "tar": "^2.0.0",
+ "which": "1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "dev": true
+ }
+ }
+ },
+ "normalize-git-url": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/normalize-git-url/-/normalize-git-url-3.0.2.tgz",
+ "integrity": "sha1-jl8Uvgva7bc+ByADEKpBbCc1D8Q=",
+ "dev": true
+ },
+ "normalize-package-data": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz",
+ "integrity": "sha1-jZJPFClg4Xd+f/4XBUNjHMfLAt8=",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ },
+ "dependencies": {
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "^1.0.0"
+ },
+ "dependencies": {
+ "builtin-modules": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.0.tgz",
+ "integrity": "sha1-EFOVX9mUpXRuUl5Kxxe4HK8HSRw=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "npm-cache-filename": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz",
+ "integrity": "sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE=",
+ "dev": true
+ },
+ "npm-install-checks": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-1.0.7.tgz",
+ "integrity": "sha1-bZGu2grJaAHx7Xqt7hFqbAoIalc=",
+ "dev": true,
+ "requires": {
+ "npmlog": "0.1 || 1 || 2",
+ "semver": "^2.3.0 || 3.x || 4 || 5"
+ }
+ },
+ "npm-package-arg": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-4.1.0.tgz",
+ "integrity": "sha1-LgFfisAHN8uX+ZfJy/BZ9Cp0Un0=",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "semver": "4 || 5"
+ }
+ },
+ "npm-registry-client": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-7.2.1.tgz",
+ "integrity": "sha1-x5ImawiMwxP4Ul5+NSSGJscj23U=",
+ "dev": true,
+ "requires": {
+ "concat-stream": "^1.5.2",
+ "graceful-fs": "^4.1.6",
+ "normalize-package-data": "~1.0.1 || ^2.0.0",
+ "npm-package-arg": "^3.0.0 || ^4.0.0",
+ "npmlog": "~2.0.0 || ~3.1.0",
+ "once": "^1.3.3",
+ "request": "^2.74.0",
+ "retry": "^0.10.0",
+ "semver": "2 >=2.2.1 || 3.x || 4 || 5",
+ "slide": "^1.1.3"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
+ "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "~2.0.0",
+ "typedarray": "~0.0.5"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~1.0.6",
+ "string_decoder": "~0.10.x",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ }
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ }
+ }
+ },
+ "retry": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.0.tgz",
+ "integrity": "sha1-ZJ4VykCEItmDGBYZNef31lLUNd0=",
+ "dev": true
+ }
+ }
+ },
+ "npm-user-validate": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-0.1.5.tgz",
+ "integrity": "sha1-UkZdUMLSApSlcSW5lrrtv1bFAEs=",
+ "dev": true
+ },
+ "npmlog": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz",
+ "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=",
+ "dev": true,
+ "requires": {
+ "ansi": "~0.3.1",
+ "are-we-there-yet": "~1.1.2",
+ "gauge": "~1.2.5"
+ },
+ "dependencies": {
+ "are-we-there-yet": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz",
+ "integrity": "sha1-gORw6VoIR5T+GJkmLFZnxuiN4bM=",
+ "dev": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.0 || ^1.1.13"
+ },
+ "dependencies": {
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "dev": true
+ }
+ }
+ },
+ "gauge": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz",
+ "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=",
+ "dev": true,
+ "requires": {
+ "ansi": "^0.3.0",
+ "has-unicode": "^2.0.0",
+ "lodash.pad": "^4.1.0",
+ "lodash.padend": "^4.1.0",
+ "lodash.padstart": "^4.1.0"
+ },
+ "dependencies": {
+ "has-unicode": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.0.tgz",
+ "integrity": "sha1-o82Wwwe6QdVZxaLuQIwSoRxMLsM=",
+ "dev": true
+ },
+ "lodash._baseslice": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._baseslice/-/lodash._baseslice-4.0.0.tgz",
+ "integrity": "sha1-9c4d+YKUjsr/Y/IjhTQVt7l2NwQ=",
+ "dev": true
+ },
+ "lodash._basetostring": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-4.12.0.tgz",
+ "integrity": "sha1-kyfJ3FFYhmt/pLnUL0Y45XZt2d8=",
+ "dev": true
+ },
+ "lodash.pad": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.4.0.tgz",
+ "integrity": "sha1-+qON8mwKaexQhqgiRslY4VDcsas=",
+ "dev": true,
+ "requires": {
+ "lodash._baseslice": "~4.0.0",
+ "lodash._basetostring": "~4.12.0",
+ "lodash.tostring": "^4.0.0"
+ }
+ },
+ "lodash.padend": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.5.0.tgz",
+ "integrity": "sha1-oonpN37i5t6Lp/EfOo6zJgcLdhk=",
+ "dev": true,
+ "requires": {
+ "lodash._baseslice": "~4.0.0",
+ "lodash._basetostring": "~4.12.0",
+ "lodash.tostring": "^4.0.0"
+ }
+ },
+ "lodash.padstart": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.5.0.tgz",
+ "integrity": "sha1-PqGQ9nNIQcM2TSedEeBWcmtgp5o=",
+ "dev": true,
+ "requires": {
+ "lodash._baseslice": "~4.0.0",
+ "lodash._basetostring": "~4.12.0",
+ "lodash.tostring": "^4.0.0"
+ }
+ },
+ "lodash.tostring": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/lodash.tostring/-/lodash.tostring-4.1.4.tgz",
+ "integrity": "sha1-Vgwn0fjq3eA8LM4Zj+9cAx2CmPs=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "opener": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.1.tgz",
+ "integrity": "sha1-iXWQrNGu0zEbcDtYvMtNQ/VvKJU=",
+ "dev": true
+ },
+ "osenv": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.3.tgz",
+ "integrity": "sha1-g88FxtZFj8TVrGNi6jJdkvJ1Qhc=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ },
+ "dependencies": {
+ "os-homedir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.0.tgz",
+ "integrity": "sha1-43B4vGG1hpBjBTiXJX457BJhtwI=",
+ "dev": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.1.tgz",
+ "integrity": "sha1-6bQjoe2vR5iCVi6S7XHXdDoHG24=",
+ "dev": true
+ }
+ }
+ },
+ "read": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
+ "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=",
+ "dev": true,
+ "requires": {
+ "mute-stream": "~0.0.4"
+ },
+ "dependencies": {
+ "mute-stream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz",
+ "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=",
+ "dev": true
+ }
+ }
+ },
+ "read-package-json": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.0.4.tgz",
+ "integrity": "sha1-Ye0bIlbqQ42ACIlQkL6EuOeZyFM=",
+ "dev": true,
+ "requires": {
+ "glob": "^6.0.0",
+ "graceful-fs": "^4.1.2",
+ "json-parse-helpfulerror": "^1.0.2",
+ "normalize-package-data": "^2.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
+ "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+ "dev": true,
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "path-is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz",
+ "integrity": "sha1-Jj2tpmqz8vsQv3+dJN2PPlcO+RI=",
+ "dev": true
+ }
+ }
+ },
+ "json-parse-helpfulerror": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz",
+ "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=",
+ "dev": true,
+ "requires": {
+ "jju": "^1.1.0"
+ },
+ "dependencies": {
+ "jju": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jju/-/jju-1.3.0.tgz",
+ "integrity": "sha1-2t2e8BkkvHKLA/L3l5vb1i96Kqo=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz",
+ "integrity": "sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=",
+ "dev": true,
+ "requires": {
+ "buffer-shims": "^1.0.0",
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~1.0.6",
+ "string_decoder": "~0.10.x",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "buffer-shims": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz",
+ "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ }
+ }
+ },
+ "realize-package-specifier": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/realize-package-specifier/-/realize-package-specifier-3.0.1.tgz",
+ "integrity": "sha1-/eMukmRI44+ZM02Vt7CNUeOpjZ8=",
+ "dev": true,
+ "requires": {
+ "dezalgo": "^1.0.1",
+ "npm-package-arg": "^4.0.0"
+ }
+ },
+ "request": {
+ "version": "2.74.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.74.0.tgz",
+ "integrity": "sha1-dpPKdou7DqXIzgjAhKRe+gW4kqs=",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.6.0",
+ "aws4": "^1.2.1",
+ "bl": "~1.1.2",
+ "caseless": "~0.11.0",
+ "combined-stream": "~1.0.5",
+ "extend": "~3.0.0",
+ "forever-agent": "~0.6.1",
+ "form-data": "~1.0.0-rc4",
+ "har-validator": "~2.0.6",
+ "hawk": "~3.1.3",
+ "http-signature": "~1.1.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.7",
+ "node-uuid": "~1.4.7",
+ "oauth-sign": "~0.8.1",
+ "qs": "~6.2.0",
+ "stringstream": "~0.0.4",
+ "tough-cookie": "~2.3.0",
+ "tunnel-agent": "~0.4.1"
+ },
+ "dependencies": {
+ "aws-sign2": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+ "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.4.1.tgz",
+ "integrity": "sha1-/efVKSRm0jDl7g9OA42d+qsI/GE=",
+ "dev": true
+ },
+ "bl": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz",
+ "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.0.5"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~1.0.6",
+ "string_decoder": "~0.10.x",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "caseless": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
+ "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
+ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ },
+ "dependencies": {
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz",
+ "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=",
+ "dev": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "1.0.0-rc4",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc4.tgz",
+ "integrity": "sha1-BaxrwiIntD5EYfSIFhVUaZ1Pi14=",
+ "dev": true,
+ "requires": {
+ "async": "^1.5.2",
+ "combined-stream": "^1.0.5",
+ "mime-types": "^2.1.10"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "har-validator": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
+ "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.1",
+ "commander": "^2.9.0",
+ "is-my-json-valid": "^2.12.4",
+ "pinkie-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "commander": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+ "dev": true,
+ "requires": {
+ "graceful-readlink": ">= 1.0.0"
+ },
+ "dependencies": {
+ "graceful-readlink": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+ "dev": true
+ }
+ }
+ },
+ "is-my-json-valid": {
+ "version": "2.13.1",
+ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.13.1.tgz",
+ "integrity": "sha1-1Vd4qC/rawlj/0vhEdXRaE6JBwc=",
+ "dev": true,
+ "requires": {
+ "generate-function": "^2.0.0",
+ "generate-object-property": "^1.1.0",
+ "jsonpointer": "2.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "generate-function": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
+ "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
+ "dev": true
+ },
+ "generate-object-property": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
+ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
+ "dev": true,
+ "requires": {
+ "is-property": "^1.0.0"
+ },
+ "dependencies": {
+ "is-property": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
+ "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
+ "dev": true
+ }
+ }
+ },
+ "jsonpointer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-2.0.0.tgz",
+ "integrity": "sha1-OvHdIP6FRjkQ1GmjheMwF9KgMNk=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ },
+ "dependencies": {
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+ "dev": true,
+ "requires": {
+ "boom": "2.x.x",
+ "cryptiles": "2.x.x",
+ "hoek": "2.x.x",
+ "sntp": "1.x.x"
+ },
+ "dependencies": {
+ "boom": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.x.x"
+ }
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+ "dev": true,
+ "requires": {
+ "boom": "2.x.x"
+ }
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+ "dev": true
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.x.x"
+ }
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^0.2.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
+ "dev": true
+ },
+ "jsprim": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.0.tgz",
+ "integrity": "sha1-zi4b74NSBLTzCZkoxgL4tq5hVlA=",
+ "dev": true,
+ "requires": {
+ "extsprintf": "1.0.2",
+ "json-schema": "0.2.2",
+ "verror": "1.3.6"
+ },
+ "dependencies": {
+ "extsprintf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz",
+ "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.2.tgz",
+ "integrity": "sha1-UDVPGfYDkXxpX3C4Wvp3w7DyNQY=",
+ "dev": true
+ },
+ "verror": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz",
+ "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=",
+ "dev": true,
+ "requires": {
+ "extsprintf": "1.0.2"
+ }
+ }
+ }
+ },
+ "sshpk": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.9.2.tgz",
+ "integrity": "sha1-O0E1G7rVw03fS9gRmTfv7jGkZ2U=",
+ "dev": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jodid25519": "^1.0.0",
+ "jsbn": "~0.1.0",
+ "tweetnacl": "~0.13.0"
+ },
+ "dependencies": {
+ "asn1": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
+ "dev": true
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "dashdash": {
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.0.tgz",
+ "integrity": "sha1-KeSGxUGL8PNWA0qZPVFoajPoQUE=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "~0.1.0"
+ }
+ },
+ "getpass": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz",
+ "integrity": "sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "jodid25519": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz",
+ "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "~0.1.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz",
+ "integrity": "sha1-ZQmH2g3XT06/WhE3eiqi0nPpff0=",
+ "dev": true,
+ "optional": true
+ },
+ "tweetnacl": {
+ "version": "0.13.3",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.13.3.tgz",
+ "integrity": "sha1-1ii1bzvMPVrnS6nUwacE3vWrS1Y=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ }
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.11",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.11.tgz",
+ "integrity": "sha1-wlnEcb2oCKhdbNGTtDCl+uRHOzw=",
+ "dev": true,
+ "requires": {
+ "mime-db": "~1.23.0"
+ },
+ "dependencies": {
+ "mime-db": {
+ "version": "1.23.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.23.0.tgz",
+ "integrity": "sha1-oxtAcK2uon1zLqMzdApk0OyaZlk=",
+ "dev": true
+ }
+ }
+ },
+ "node-uuid": {
+ "version": "1.4.7",
+ "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz",
+ "integrity": "sha1-baWhdmjEs91ZYjvaEc9/pMH2Cm8=",
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.1.tgz",
+ "integrity": "sha1-zgPF/wk1vB2daanxTL0Y5WjWdiU=",
+ "dev": true
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
+ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
+ "dev": true
+ },
+ "tough-cookie": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.1.tgz",
+ "integrity": "sha1-mcd9+7fYBCSeiimdTLD9gf7wg/0=",
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
+ "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
+ "dev": true
+ }
+ }
+ },
+ "retry": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.0.tgz",
+ "integrity": "sha1-ZJ4VykCEItmDGBYZNef31lLUNd0=",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.5.4",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz",
+ "integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "semver": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.1.0.tgz",
+ "integrity": "sha1-hfLPhVBGXE3wAM99hvawVBBqueU=",
+ "dev": true
+ },
+ "sha": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/sha/-/sha-2.0.1.tgz",
+ "integrity": "sha1-YDCCL70smCOUn49y7WQR7lzyWq4=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.2.tgz",
+ "integrity": "sha1-vsgb6ujPRVFovC5bKzH1vPrtmxs=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "process-nextick-args": "~1.0.0",
+ "string_decoder": "~0.10.x",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz",
+ "integrity": "sha1-awcIWu+aPMrG7lO/nT3wwVIaVTg=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.3.tgz",
+ "integrity": "sha1-4nLu2CXV6fTqdNjXOx/jEcO+tjA=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.1.tgz",
+ "integrity": "sha1-NVaj0TxMaqeYPX4kJUeBlxmbeIE=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "slide": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz",
+ "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=",
+ "dev": true
+ },
+ "sorted-object": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/sorted-object/-/sorted-object-2.0.0.tgz",
+ "integrity": "sha1-HP6pgWCQR9gEOAekkKnZmzF/r38=",
+ "dev": true
+ },
+ "spdx-license-ids": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
+ "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "uid-number": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz",
+ "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=",
+ "dev": true
+ },
+ "umask": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz",
+ "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
+ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "~1.0.0",
+ "spdx-expression-parse": "~1.0.0"
+ },
+ "dependencies": {
+ "spdx-correct": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
+ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "dev": true,
+ "requires": {
+ "spdx-license-ids": "^1.0.2"
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.2.tgz",
+ "integrity": "sha1-1SsUtelnB3FECvIlvLVjEirEUvY=",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^1.0.4",
+ "spdx-license-ids": "^1.0.0"
+ },
+ "dependencies": {
+ "spdx-exceptions": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-1.0.4.tgz",
+ "integrity": "sha1-IguEI5EZrpBFqJLbgag/TOFvgP0=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "which": {
+ "version": "1.2.11",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.2.11.tgz",
+ "integrity": "sha1-yLLu6muMFln6fB3U/aq+lTPcXos=",
+ "dev": true,
+ "requires": {
+ "isexe": "^1.1.1"
+ },
+ "dependencies": {
+ "isexe": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz",
+ "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=",
+ "dev": true
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+ },
+ "semver": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+ "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+ "dev": true
+ }
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "dev": true,
+ "requires": {
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-locale": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "dev": true,
+ "requires": {
+ "execa": "^0.7.0",
+ "lcid": "^1.0.0",
+ "mem": "^1.1.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-reduce": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz",
+ "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=",
+ "dev": true
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "psl": {
+ "version": "1.1.29",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
+ "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==",
+ "dev": true
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ },
+ "q": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz",
+ "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "dev": true
+ },
+ "read-installed": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/read-installed/-/read-installed-4.0.3.tgz",
+ "integrity": "sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc=",
+ "dev": true,
+ "requires": {
+ "debuglog": "^1.0.1",
+ "graceful-fs": "^4.1.2",
+ "read-package-json": "^2.0.0",
+ "readdir-scoped-modules": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "slide": "~1.1.3",
+ "util-extend": "^1.0.1"
+ }
+ },
+ "read-package-json": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.0.12.tgz",
+ "integrity": "sha512-m7/I0+tP6D34EVvSlzCtuVA4D/dHL6OpLcn2e4XVP5X57pCKGUy1JjRSBVKHWpB+vUU91sL85h84qX0MdXzBSw==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.1",
+ "graceful-fs": "^4.1.2",
+ "json-parse-better-errors": "^1.0.0",
+ "normalize-package-data": "^2.0.0",
+ "slash": "^1.0.0"
+ }
+ },
+ "readdir-scoped-modules": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz",
+ "integrity": "sha1-n6+jfShr5dksuuve4DDcm19AZ0c=",
+ "dev": true,
+ "requires": {
+ "debuglog": "^1.0.1",
+ "dezalgo": "^1.0.0",
+ "graceful-fs": "^4.1.2",
+ "once": "^1.3.0"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "request": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "^2.1.0"
+ }
+ },
+ "rx-lite": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+ "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
+ "dev": true
+ },
+ "rx-lite-aggregates": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "dev": true,
+ "requires": {
+ "rx-lite": "*"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "semver": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "dev": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ },
+ "slide": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz",
+ "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
+ "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
+ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sshpk": {
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz",
+ "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==",
+ "dev": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "tar": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
+ "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
+ "dev": true,
+ "requires": {
+ "block-stream": "*",
+ "fstream": "^1.0.2",
+ "inherits": "2"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "tmp": {
+ "version": "0.0.31",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz",
+ "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.1"
+ }
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "tough-cookie": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+ "dev": true,
+ "requires": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ }
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.1",
+ "to-object-path": "^0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
+ },
+ "user-home": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz",
+ "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0"
+ }
+ },
+ "util-extend": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz",
+ "integrity": "sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
+ "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "validate-npm-package-name": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-2.2.2.tgz",
+ "integrity": "sha1-9laVsi9zJEQgGaPH+jmm5/0pkIU=",
+ "dev": true,
+ "requires": {
+ "builtins": "0.0.7"
+ }
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write-file-atomic": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.1.4.tgz",
+ "integrity": "sha1-sfUtwujcDjywTRh6JfdYo4qQyjs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "imurmurhash": "^0.1.4",
+ "slide": "^1.1.5"
+ }
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+ "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+ "dev": true
+ },
+ "yargs": {
+ "version": "10.1.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz",
+ "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==",
+ "dev": true,
+ "requires": {
+ "cliui": "^4.0.0",
+ "decamelize": "^1.1.1",
+ "find-up": "^2.1.0",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^2.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^8.1.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz",
+ "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0"
+ }
+ }
+ }
+}
diff --git a/.config/fisher/github.com/matchai/spacefish/package.json b/.config/fisher/github.com/matchai/spacefish/package.json
new file mode 100644
index 00000000..c65e1cff
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/package.json
@@ -0,0 +1,53 @@
+{
+ "name": "spacefish",
+ "version": "0.0.0-semantic-release",
+ "description": "A Fish Shell prompt for Astronauts",
+ "repository": "git@github.com:matchai/spacefish.git",
+ "author": "Matan Kushner ",
+ "scripts": {
+ "test": "fish tests/run.fish",
+ "docs:prepare": "gitbook install",
+ "docs:build": "npm run docs:prepare && gitbook build",
+ "docs:serve": "npm run docs:prepare && gitbook serve .",
+ "contributors:add": "all-contributors add",
+ "contributors:generate": "all-contributors generate"
+ },
+ "license": "MIT",
+ "devDependencies": {
+ "@semantic-release/changelog": "^3.0.2",
+ "@semantic-release/exec": "^3.3.1",
+ "@semantic-release/git": "^7.0.6",
+ "all-contributors-cli": "^5.4.1",
+ "gitbook-cli": "^2.3.2"
+ },
+ "release": {
+ "plugins": [
+ "@semantic-release/commit-analyzer",
+ "@semantic-release/release-notes-generator",
+ "@semantic-release/changelog",
+ [
+ "@semantic-release/exec",
+ {
+ "prepareCmd": "./scripts/version.sh ${nextRelease.version}"
+ }
+ ],
+ [
+ "@semantic-release/git",
+ {
+ "assets": [
+ "CHANGELOG.md",
+ "fish_prompt.fish"
+ ]
+ }
+ ],
+ [
+ "@semantic-release/github",
+ {
+ "releasedLabels": [
+ "Status: Released"
+ ]
+ }
+ ]
+ ]
+ }
+}
diff --git a/.config/fisher/github.com/matchai/spacefish/scripts/version.sh b/.config/fisher/github.com/matchai/spacefish/scripts/version.sh
new file mode 100755
index 00000000..3fb60717
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/scripts/version.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+new_version=$1
+filename=$(pwd)/fish_prompt.fish
+
+sed -e "s/set -g SPACEFISH_VERSION .*/set -g SPACEFISH_VERSION $new_version/g" $filename > $filename.bak
+mv -- $filename.bak $filename
+
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_lib_section.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_lib_section.test.fish
new file mode 100644
index 00000000..fc5ed29c
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_lib_section.test.fish
@@ -0,0 +1,117 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+end
+
+test "Displays only the colored content when 2 arguments are passed"
+ (
+ set_color --bold
+ echo -n ""
+ set_color normal
+ set_color --bold red
+ echo -n "test content"
+ set_color normal
+ set_color --bold
+ echo -n ""
+ set_color normal
+ ) = (__sf_lib_section red "test content")
+end
+
+test "Displays the prefix, colored content and suffix when 4 arguments are passed"
+ (
+ set_color --bold
+ echo -n "prefix"
+ set_color normal
+ set_color --bold red
+ echo -n "test content"
+ set_color normal
+ set_color --bold
+ echo -n "suffix"
+ set_color normal
+ ) = (__sf_lib_section red prefix "test content" suffix)
+end
+
+test "Displays the prefix if prefixes are enabled"
+ (
+ set SPACEFISH_PROMPT_PREFIXES_SHOW true
+
+ set_color --bold
+ echo -n "prefix"
+ set_color normal
+ set_color --bold red
+ echo -n "test content"
+ set_color normal
+ set_color --bold
+ echo -n "suffix"
+ set_color normal
+ ) = (__sf_lib_section red prefix "test content" suffix)
+end
+
+test "Doesn't display the prefix if prefixes are disabled"
+ (
+ set SPACEFISH_PROMPT_PREFIXES_SHOW false
+
+ set_color --bold red
+ echo -n "test content"
+ set_color normal
+ set_color --bold
+ echo -n "suffix"
+ set_color normal
+ ) = (__sf_lib_section red prefix "test content" suffix)
+end
+
+test "Displays the suffix if suffixes are enabled"
+ (
+ set SPACEFISH_PROMPT_SUFFIXES_SHOW true
+
+ set_color --bold
+ echo -n "prefix"
+ set_color normal
+ set_color --bold red
+ echo -n "test content"
+ set_color normal
+ set_color --bold
+ echo -n "suffix"
+ set_color normal
+ ) = (__sf_lib_section red prefix "test content" suffix)
+end
+
+test "Doesn't display the suffix if suffixes are disabled"
+ (
+ set SPACEFISH_PROMPT_SUFFIXES_SHOW false
+
+ set_color --bold
+ echo -n "prefix"
+ set_color normal
+ set_color --bold red
+ echo -n "test content"
+ set_color normal
+ ) = (__sf_lib_section red prefix "test content" suffix)
+end
+
+test "Only prints the prefix for the second consecutive section"
+ (
+ set sf_prompt_opened false
+
+ set_color --bold red
+ echo -n "test content 1"
+ set_color normal
+ set_color --bold
+ echo -n "suffix 1"
+ set_color normal
+
+ set_color --bold
+ echo -n "prefix 2"
+ set_color normal
+ set_color --bold red
+ echo -n "test content 2"
+ set_color normal
+ set_color --bold
+ echo -n "suffix 2"
+ set_color normal
+ ) = (
+ __sf_lib_section red "prefix 1" "test content 1" "suffix 1"
+ __sf_lib_section red "prefix 2" "test content 2" "suffix 2"
+ )
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_aws.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_aws.test.fish
new file mode 100644
index 00000000..17c5eb6c
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_aws.test.fish
@@ -0,0 +1,89 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+ mock aws \* 0
+ set -g AWS_PROFILE user1
+end
+
+test "Prints section when AWS_PROFILE is set"
+ (
+ set_color --bold
+ echo -n "using "
+ set_color normal
+ set_color --bold ff8700
+ echo -n "☁️ user1"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_aws)
+end
+
+test "Doesn't print the section when AWS_PROFILE isn't set"
+ (
+ set --erase AWS_PROFILE
+ ) = (__sf_section_aws)
+end
+
+test "Doesn't print the section when AWS_PROFILE is set to \"default\""
+ (
+ set AWS_PROFILE default
+ ) = (__sf_section_aws)
+end
+
+test "Changing SPACEFISH_AWS_SYMBOL changes the displayed character"
+ (
+ set SPACEFISH_AWS_SYMBOL "· "
+
+ set_color --bold
+ echo -n "using "
+ set_color normal
+ set_color --bold ff8700
+ echo -n "· user1"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_aws)
+end
+
+test "Changing SPACEFISH_AWS_PREFIX changes the character prefix"
+ (
+ set sf_exit_code 0
+ set SPACEFISH_AWS_PREFIX ·
+
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ set_color --bold ff8700
+ echo -n "☁️ user1"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_aws)
+end
+
+test "Changing SPACEFISH_AWS_SUFFIX changes the character suffix"
+ (
+ set sf_exit_code 0
+ set SPACEFISH_AWS_SUFFIX ·
+
+ set_color --bold
+ echo -n "using "
+ set_color normal
+ set_color --bold ff8700
+ echo -n "☁️ user1"
+ set_color normal
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ ) = (__sf_section_aws)
+end
+
+test "doesn't display the section when SPACEFISH_AWS_SHOW is set to \"false\""
+ (
+ set SPACEFISH_AWS_SHOW false
+ ) = (__sf_section_aws)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_char.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_char.test.fish
new file mode 100644
index 00000000..8ebf76b8
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_char.test.fish
@@ -0,0 +1,88 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+end
+
+test "Displays default char with status code 0"
+ (
+ set sf_exit_code 0
+
+ set_color --bold
+ echo -n ""
+ set_color normal
+ set_color --bold green
+ echo -n "➜"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_char)
+end
+
+test "Displays default char with status code 1"
+ (
+ set sf_exit_code 1
+
+ set_color --bold
+ echo -n ""
+ set_color normal
+ set_color --bold red
+ echo -n "➜"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_char)
+end
+
+test "Changing SPACEFISH_CHAR_SYMBOL changes the displayed character"
+ (
+ set sf_exit_code 0
+ set SPACEFISH_CHAR_SYMBOL ·
+
+ set_color --bold
+ echo -n ""
+ set_color normal
+ set_color --bold green
+ echo -n "·"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_char)
+end
+
+test "Changing SPACEFISH_CHAR_PREFIX changes the character prefix"
+ (
+ set sf_exit_code 0
+ set SPACEFISH_CHAR_PREFIX ·
+
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ set_color --bold green
+ echo -n "➜"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_char)
+end
+
+test "Changing SPACEFISH_CHAR_SYMBOL changes the character suffix"
+ (
+ set sf_exit_code 0
+ set SPACEFISH_CHAR_SUFFIX ·
+
+ set_color --bold
+ echo -n ""
+ set_color normal
+ set_color --bold green
+ echo -n "➜"
+ set_color normal
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ ) = (__sf_section_char)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_conda.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_conda.test.fish
new file mode 100644
index 00000000..b63268ab
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_conda.test.fish
@@ -0,0 +1,79 @@
+source $DIRNAME/spacefish_test_setup.fish
+set -l LOCAL_CONDA_VERSION 4.5.11
+
+function setup
+ spacefish_test_setup
+ mock conda -V 0 "echo \"conda 4.5.11\""
+ mkdir -p /tmp/tmp-spacefish
+ cd /tmp/tmp-spacefish
+end
+
+function teardown
+ rm -rf /tmp/tmp-spacefish
+ if test "$CONDA_DEFAULT_ENV"
+ set -e CONDA_DEFAULT_ENV
+ end
+end
+
+test "Prints section when conda is installed and CONDA_DEFAULT_ENV is set"
+ (
+ set -g CONDA_DEFAULT_ENV some-env
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold blue
+ echo -n "🅒 v$LOCAL_CONDA_VERSION"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_conda)
+end
+
+test "Changing SPACEFISH_CONDA_SYMBOL changes the displayed character"
+ (
+ set SPACEFISH_CONDA_SYMBOL "· "
+ set -g CONDA_DEFAULT_ENV some-env
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold blue
+ echo -n "· v$LOCAL_CONDA_VERSION"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_conda)
+end
+
+test "Changing SPACEFISH_CONDA_PREFIX changes the character prefix"
+ (
+ set SPACEFISH_CONDA_PREFIX ·
+ set -g CONDA_DEFAULT_ENV some-env
+
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ set_color --bold blue
+ echo -n "🅒 v$LOCAL_CONDA_VERSION"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_conda)
+end
+
+
+# Negative
+test "Doesn't display section when SPACEFISH_CONDA_SHOW is set to 'false'"
+ (
+ set -g SPACEFISH_CONDA_SHOW false
+ set -g CONDA_DEFAULT_ENV some-env
+ ) = (__sf_section_conda)
+end
+
+test "Doesn't display section when CONDA_DEFAULT_ENV is not set"
+ () = (__sf_section_conda)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_dir.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_dir.test.fish
new file mode 100644
index 00000000..676cadff
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_dir.test.fish
@@ -0,0 +1,383 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+ mkdir -p ~/.tmp-spacefish/dir1/dir2
+ mkdir -p /tmp/tmp-spacefish/dir1/dir2/dir3
+ mkdir -p /tmp/tmp-spacefish/writeProtected
+ chmod 500 /tmp/tmp-spacefish/writeProtected
+ # disabling SPACEFISH_DIR_LOCK_SYMBOL to avoid breaking old tests
+ set SPACEFISH_DIR_LOCK_SHOW false
+end
+
+function teardown
+ rm -rf ~/.tmp-spacefish
+ rm -rf /tmp/tmp-spacefish
+end
+
+#
+# Home directory
+#
+
+test "Correctly truncates home directory"
+ (
+ cd ~
+
+ set_color --bold
+ echo -n "in "
+ set_color normal
+ set_color --bold cyan
+ echo -n "~"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dir)
+end
+
+test "Correctly truncates a home subdirectory"
+ (
+ cd ~/.tmp-spacefish/dir1/
+
+ set_color --bold
+ echo -n "in "
+ set_color normal
+ set_color --bold cyan
+ echo -n "~/.tmp-spacefish/dir1"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dir)
+end
+
+test "Correctly truncates a deeply nested home subdirectory"
+ (
+ cd ~/.tmp-spacefish/dir1/dir2
+
+ set_color --bold
+ echo -n "in "
+ set_color normal
+ set_color --bold cyan
+ echo -n ".tmp-spacefish/dir1/dir2"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dir)
+end
+
+#
+# Root directory
+#
+
+test "Correctly truncates root directory"
+ (
+ cd /
+
+ set_color --bold
+ echo -n "in "
+ set_color normal
+ set_color --bold cyan
+ echo -n "/"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dir)
+end
+
+test "Correctly truncates a root subdirectory"
+ (
+ cd /usr
+
+ set_color --bold
+ echo -n "in "
+ set_color normal
+ set_color --bold cyan
+ echo -n "/usr"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dir)
+end
+
+test "Correctly truncates a deeply nested root subdirectory"
+ (
+ cd /tmp/tmp-spacefish/dir1/dir2
+
+ set_color --bold
+ echo -n "in "
+ set_color normal
+ set_color --bold cyan
+ echo -n "tmp-spacefish/dir1/dir2"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dir)
+end
+
+#
+# Git directory
+#
+
+test "Correctly truncates the root of a git directory"
+ (
+ cd /tmp/tmp-spacefish
+ command git init >/dev/null
+
+ set_color --bold
+ echo -n "in "
+ set_color normal
+ set_color --bold cyan
+ echo -n "tmp-spacefish"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dir)
+end
+
+test "Correctly truncates a git subdirectory"
+ (
+ cd /tmp/tmp-spacefish
+ command git init >/dev/null
+ cd /tmp/tmp-spacefish/dir1
+
+ set_color --bold
+ echo -n "in "
+ set_color normal
+ set_color --bold cyan
+ echo -n "tmp-spacefish/dir1"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dir)
+end
+
+test "Correctly truncates a deeply nested git subdirectory"
+ (
+ cd /tmp/tmp-spacefish
+ command git init >/dev/null
+ cd /tmp/tmp-spacefish/dir1/dir2/dir3
+
+ set_color --bold
+ echo -n "in "
+ set_color normal
+ set_color --bold cyan
+ echo -n "dir1/dir2/dir3"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dir)
+end
+
+test "Correctly truncates the root of a git directory within another"
+ (
+ cd /tmp/tmp-spacefish
+ command git init >/dev/null
+
+ cd /tmp/tmp-spacefish/dir1
+ command git init >/dev/null
+
+ set_color --bold
+ echo -n "in "
+ set_color normal
+ set_color --bold cyan
+ echo -n "dir1"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dir)
+end
+
+test "Doesn't throw an error when in a .git directory"
+ (
+ cd /tmp/tmp-spacefish
+ command git init >/dev/null
+
+ cd /tmp/tmp-spacefish/.git
+
+ set_color --bold
+ echo -n "in "
+ set_color normal
+ set_color --bold cyan
+ echo -n "tmp/tmp-spacefish/.git"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dir)
+
+#
+# Configuration
+#
+
+test "Doesn't show if SPACEFISH_DIR_SHOW is false"
+ (
+ set SPACEFISH_DIR_SHOW false
+ ) = (__sf_section_dir)
+end
+
+test "Changing SPACEFISH_DIR_PREFIX changes the dir prefix"
+ (
+ set SPACEFISH_DIR_PREFIX ·
+ cd ~
+
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ set_color --bold cyan
+ echo -n "~"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dir)
+end
+
+test "Changing SPACEFISH_DIR_SUFFIX changes the dir prefix"
+ (
+ set SPACEFISH_DIR_SUFFIX ·
+ cd ~
+
+ set_color --bold
+ echo -n "in "
+ set_color normal
+ set_color --bold cyan
+ echo -n "~"
+ set_color normal
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ ) = (__sf_section_dir)
+end
+
+# SPACEFISH_DIR_TRUNC functionality is further tested in:
+# __sf_util_truncate_dir.test.fish
+test "Changing SPACEFISH_DIR_TRUNC changes the dir length"
+ (
+ set SPACEFISH_DIR_TRUNC 1
+ cd /tmp/tmp-spacefish/dir1/dir2/dir3
+
+ set_color --bold
+ echo -n "in "
+ set_color normal
+ set_color --bold cyan
+ echo -n "dir3"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dir)
+end
+
+test "Disabling SPACEFISH_DIR_TRUNC_REPO stops repo dir truncation"
+ (
+ set SPACEFISH_DIR_TRUNC_REPO false
+ cd ~/.tmp-spacefish
+ command git init >/dev/null
+
+ set_color --bold
+ echo -n "in "
+ set_color normal
+ set_color --bold cyan
+ echo -n "~/.tmp-spacefish"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dir)
+end
+
+test "Changing SPACEFISH_DIR_COLOR changes the dir color"
+ (
+ set SPACEFISH_DIR_COLOR red
+ cd ~
+
+ set_color --bold
+ echo -n "in "
+ set_color normal
+ set_color --bold red
+ echo -n "~"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dir)
+end
+
+
+#
+# SPACEFISH_DIR_LOCK_SYMBOL
+#
+
+test "Shows DIR_LOCK_SYMBOL if in a dir with no write permissions and SPACEFISH_DIR_LOCK_SHOW is true"
+ (
+ cd /tmp/tmp-spacefish/writeProtected
+
+ set_color --bold
+ echo -n "in "
+ set_color normal
+ set_color --bold cyan
+ echo -n "tmp/tmp-spacefish/writeProtected"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dir)
+end
+
+test "Doesn't show DIR_LOCK_SYMBOL if SPACEFISH_DIR_LOCK_SHOW is false"
+ (
+ cd /tmp/tmp-spacefish/writeProtected
+
+ set_color --bold
+ echo -n "in "
+ set_color normal
+ set_color --bold cyan
+ echo -n "tmp/tmp-spacefish/writeProtected"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dir)
+end
+
+test "Doesn't show DIR_LOCK_SYMBOL if current directory is not write protected for this user"
+ (
+ cd ~
+
+ set_color --bold
+ echo -n "in "
+ set_color normal
+ set_color --bold cyan
+ echo -n "~"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dir)
+end
+
+test "Changing SPACEFISH_DIR_LOCK_SYMBOL changes the symbol"
+ (
+ set SPACEFISH_DIR_LOCK_SYMBOL "😀"
+ cd /tmp/tmp-spacefish/writeProtected
+
+ set_color --bold
+ echo -n "in "
+ set_color normal
+ set_color --bold cyan
+ echo -n "tmp/tmp-spacefish/writeProtected"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dir)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_docker.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_docker.test.fish
new file mode 100644
index 00000000..4321afc7
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_docker.test.fish
@@ -0,0 +1,218 @@
+source $DIRNAME/spacefish_test_setup.fish
+set -l LOCAL_DOCKER_VERSION 18.06.1
+
+function setup
+ spacefish_test_setup
+ mock docker version 0 "echo \"18.06.1\""
+ mkdir -p /tmp/tmp-spacefish
+ cd /tmp/tmp-spacefish
+end
+
+function teardown
+ rm -rf /tmp/tmp-spacefish
+ if test "$COMPOSE_FILE"
+ set -e COMPOSE_FILE
+ end
+ if test "$DOCKER_MACHINE_NAME"
+ set -e DOCKER_MACHINE_NAME
+ end
+end
+
+test "Prints section when only Dockerfile is present"
+ (
+ touch Dockerfile
+
+ set_color --bold
+ echo -n "is "
+ set_color normal
+ set_color --bold cyan
+ echo -n "🐳 v$LOCAL_DOCKER_VERSION"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_docker)
+end
+
+test "Prints section when only docker-compose.yml is present"
+ (
+ touch docker-compose.yml
+
+ set_color --bold
+ echo -n "is "
+ set_color normal
+ set_color --bold cyan
+ echo -n "🐳 v$LOCAL_DOCKER_VERSION"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_docker)
+end
+
+test "Prints section when both Dockerfile and docker-compose.yml are present"
+ (
+ touch Dockerfile
+ touch docker-compose.yml
+
+ set_color --bold
+ echo -n "is "
+ set_color normal
+ set_color --bold cyan
+ echo -n "🐳 v$LOCAL_DOCKER_VERSION"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_docker)
+end
+
+test "Prints Docker section when COMPOSE_FILE is set and the $COMPOSE_FILE exists"
+ (
+ set -g COMPOSE_FILE /tmp/some-compose-file.yml
+ touch /tmp/some-compose-file.yml
+
+ set_color --bold
+ echo -n "is "
+ set_color normal
+ set_color --bold cyan
+ echo -n "🐳 v$LOCAL_DOCKER_VERSION"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_docker)
+end
+
+test "Prints section when only Dockerfile is present with DOCKER_MACHINE_NAME set"
+ (
+ rm /tmp/some-compose-file.yml
+ touch Dockerfile
+ set -g DOCKER_MACHINE_NAME some-machine-name
+
+ set_color --bold
+ echo -n "is "
+ set_color normal
+ set_color --bold cyan
+ echo -n "🐳 v$LOCAL_DOCKER_VERSION via $DOCKER_MACHINE_NAME"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_docker)
+end
+
+test "Prints section when only docker-compose.yml is present with DOCKER_MACHINE_NAME set"
+ (
+ touch docker-compose.yml
+ set -g DOCKER_MACHINE_NAME some-machine-name
+
+ set_color --bold
+ echo -n "is "
+ set_color normal
+ set_color --bold cyan
+ echo -n "🐳 v$LOCAL_DOCKER_VERSION via $DOCKER_MACHINE_NAME"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_docker)
+end
+
+test "Prints section when both Dockerfile and docker-compose.yml are present with DOCKER_MACHINE_NAME set"
+ (
+ touch Dockerfile
+ touch docker-compose.yml
+ set -g DOCKER_MACHINE_NAME some-machine-name
+
+ set_color --bold
+ echo -n "is "
+ set_color normal
+ set_color --bold cyan
+ echo -n "🐳 v$LOCAL_DOCKER_VERSION via $DOCKER_MACHINE_NAME"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_docker)
+end
+
+test "Prints Docker section when COMPOSE_FILE is set with DOCKER_MACHINE_NAME set"
+ (
+ set -g COMPOSE_FILE /tmp/some-compose-file.yml
+ touch /tmp/some-compose-file.yml
+ set -g DOCKER_MACHINE_NAME some-machine-name
+
+ set_color --bold
+ echo -n "is "
+ set_color normal
+ set_color --bold cyan
+ echo -n "🐳 v$LOCAL_DOCKER_VERSION via $DOCKER_MACHINE_NAME"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_docker)
+end
+
+test "Changing SPACEFISH_DOCKER_SYMBOL changes the displayed character"
+ (
+ rm /tmp/some-compose-file.yml
+ set SPACEFISH_DOCKER_SYMBOL "· "
+ touch Dockerfile
+
+ set_color --bold
+ echo -n "is "
+ set_color normal
+ set_color --bold cyan
+ echo -n "· v$LOCAL_DOCKER_VERSION"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_docker)
+end
+
+test "Changing SPACEFISH_DOCKER_PREFIX changes the character prefix"
+ (
+ set sf_exit_code 0
+ set SPACEFISH_DOCKER_PREFIX ·
+ touch Dockerfile
+
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ set_color --bold cyan
+ echo -n "🐳 v$LOCAL_DOCKER_VERSION"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_docker)
+end
+
+
+# Negative
+test "Doesn't display section when SPACEFISH_DOCKER_SHOW is set to 'false'"
+ (
+ set SPACEFISH_DOCKER_SHOW false
+ touch Dockerfile
+
+ ) = (__sf_section_docker)
+end
+
+test "Doesn't print section if docker is not installed"
+ (
+ touch Dockerfile
+ mock docker version 127
+ ) = (__sf_section_docker)
+end
+
+# This case can be checked only by bringing down the docker deamon
+test "Doesn't print section if docker deamon is not running"
+ () = (__sf_section_docker)
+end
+
+test "Doesn't print section when not in a directory with Dockerfile or docker-compose.yml"
+ () = (__sf_section_docker)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_dotnet.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_dotnet.test.fish
new file mode 100644
index 00000000..f3277445
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_dotnet.test.fish
@@ -0,0 +1,195 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+ mock dotnet --version 0 "echo \"2.1.403\""
+ mkdir -p /tmp/tmp-spacefish
+ cd /tmp/tmp-spacefish
+end
+
+function teardown
+ rm -rf /tmp/tmp-spacefish
+end
+
+test "Prints nothing when required files are missing"
+ (
+ rm -f /tmp/tmp-spacefish/project.json
+ rm -f /tmp/tmp-spacefish/global.json
+ rm -f /tmp/tmp-spacefish/paket.dependencies
+ rm -f '/tmp/tmp-spacefish/*.sln'
+ rm -f '/tmp/tmp-spacefish/*.csproj'
+ rm -f '/tmp/tmp-spacefish/*.fsproj'
+ rm -f '/tmp/tmp-spacefish/*.xproj'
+ ) = (__sf_section_dotnet)
+end
+
+test "Prints section if project.json is present"
+ (
+ touch /tmp/tmp-spacefish/project.json
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold af00d7
+ echo -n ".NET 2.1.403"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dotnet)
+end
+
+test "Prints section if global.json is present"
+ (
+ touch /tmp/tmp-spacefish/global.json
+ set_color --bold
+
+ echo -n "via "
+ set_color normal
+ set_color --bold af00d7
+ echo -n ".NET 2.1.403"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dotnet)
+end
+
+test "Prints section if paket.dependencies is present"
+ (
+ touch /tmp/tmp-spacefish/paket.dependencies
+ set_color --bold
+
+ echo -n "via "
+ set_color normal
+ set_color --bold af00d7
+ echo -n ".NET 2.1.403"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dotnet)
+end
+
+test "Prints section if a .csproj file is present"
+ (
+ touch /tmp/tmp-spacefish/tmp.csproj
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold af00d7
+ echo -n ".NET 2.1.403"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dotnet)
+end
+
+test "Prints section if a .fsproj file is present"
+ (
+ touch /tmp/tmp-spacefish/tmp.fsproj
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold af00d7
+ echo -n ".NET 2.1.403"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dotnet)
+end
+
+test "Prints section if a .xproj file is present"
+ (
+ touch /tmp/tmp-spacefish/tmp.xproj
+ set_color --bold
+
+ echo -n "via "
+ set_color normal
+ set_color --bold af00d7
+ echo -n ".NET 2.1.403"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dotnet)
+end
+
+test "Prints section if a .sln file is present"
+ (
+ touch /tmp/tmp-spacefish/tmp.sln
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold af00d7
+ echo -n ".NET 2.1.403"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dotnet)
+end
+
+test "Changing SPACEFISH_DOTNET_SYMBOL changes the displayed character"
+ (
+ touch /tmp/tmp-spacefish/tmp.sln
+
+ set SPACEFISH_DOTNET_SYMBOL "· "
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold af00d7
+ echo -n "· 2.1.403"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dotnet)
+end
+
+test "Changing SPACEFISH_DOTNET_PREFIX changes the character prefix"
+ (
+ touch /tmp/tmp-spacefish/tmp.sln
+ set sf_exit_code 0
+ set SPACEFISH_DOTNET_PREFIX ·
+
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ set_color --bold af00d7
+ echo -n ".NET 2.1.403"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_dotnet)
+end
+
+test "Changing SPACEFISH_DOTNET_SUFFIX changes the character prefix"
+ (
+ touch /tmp/tmp-spacefish/tmp.sln
+ set sf_exit_code 0
+ set SPACEFISH_DOTNET_SUFFIX ·
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold af00d7
+ echo -n ".NET 2.1.403"
+ set_color normal
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ ) = (__sf_section_dotnet)
+end
+
+test "Doesn't display .NET when SPACEFISH_DOTNET_SHOW is set to 'false'"
+ (
+ set SPACEFISH_DOTNET_SHOW false
+ ) = (__sf_section_dotnet)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_elixir.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_elixir.test.fish
new file mode 100644
index 00000000..5c411f23
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_elixir.test.fish
@@ -0,0 +1,110 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+ mock elixir -v 0 "echo \"Erlang/OTP 21 [erts-10.3.4] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe] [dtrace]
+Elixir 1.8.1 (compiled with Erlang/OTP 21)\""
+ set -x ELIXIR_VERSION 1.8.1
+ mkdir -p /tmp/tmp-spacefish
+ cd /tmp/tmp-spacefish
+end
+
+function teardown
+ rm -rf /tmp/tmp-spacefish
+end
+
+test "Prints section when mix.exs is present"
+ (
+ touch /tmp/tmp-spacefish/mix.exs
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold magenta
+ echo -n "💧 v1.8.1"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_elixir)
+end
+
+test "Prints section when a *.ex file is present"
+ (
+ touch /tmp/tmp-spacefish/testfile.ex
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold magenta
+ echo -n "💧 v1.8.1"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_elixir)
+end
+
+test "Doesn't print the section when mix.exs and *.ex aren't present"
+ () = (__sf_section_elixir)
+end
+
+test "Changing SPACEFISH_ELIXIR_SYMBOL changes the displayed character"
+ (
+ touch /tmp/tmp-spacefish/mix.exs
+ set SPACEFISH_ELIXIR_SYMBOL "· "
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold magenta
+ echo -n "· v1.8.1"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_elixir)
+end
+
+test "Changing SPACEFISH_ELIXIR_PREFIX changes the character prefix"
+ (
+ touch /tmp/tmp-spacefish/mix.exs
+ set sf_exit_code 0
+ set SPACEFISH_ELIXIR_PREFIX ·
+
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ set_color --bold magenta
+ echo -n "💧 v1.8.1"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_elixir)
+end
+
+test "Changing SPACEFISH_ELIXIR_SUFFIX changes the character suffix"
+ (
+ touch /tmp/tmp-spacefish/mix.exs
+ set sf_exit_code 0
+ set SPACEFISH_ELIXIR_SUFFIX ·
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold magenta
+ echo -n "💧 v1.8.1"
+ set_color normal
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ ) = (__sf_section_elixir)
+end
+
+test "doesn't display the section when SPACEFISH_ELIXIR_SHOW is set to \"false\""
+ (
+ touch /tmp/tmp-spacefish/mix.exs
+ set SPACEFISH_ELIXIR_SHOW false
+ ) = (__sf_section_elixir)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_exit_code.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_exit_code.test.fish
new file mode 100644
index 00000000..b8559669
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_exit_code.test.fish
@@ -0,0 +1,51 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+end
+
+test "Exit code not enabled by default"
+ (
+ set sf_exit_code 1
+ ) = (__sf_section_exit_code)
+end
+
+test "Enable exit-code, shows exit code upon fail"
+ (
+ set SPACEFISH_EXIT_CODE_SHOW true
+ set sf_exit_code 1
+
+ set_color --bold
+ set_color normal
+ set_color --bold red
+ echo -n "✘1"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_exit_code)
+end
+
+test "Hides exit code upon success"
+ (
+ set SPACEFISH_EXIT_CODE_SHOW true
+ set sf_exit_code 0
+ ) = (__sf_section_exit_code)
+end
+
+test "Color-changing exit code"
+ (
+ set SPACEFISH_EXIT_CODE_SHOW true
+ set SPACEFISH_EXIT_CODE_COLOR "purple"
+ set sf_exit_code 1
+
+ set_color --bold
+ set_color normal
+ set_color --bold purple
+ echo -n "✘1"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_exit_code)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_git_status.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_git_status.test.fish
new file mode 100644
index 00000000..91c6fd5d
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_git_status.test.fish
@@ -0,0 +1,129 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+ mkdir -p /tmp/tmp-spacefish
+ cd /tmp/tmp-spacefish
+ command git init >/dev/null
+ command git config --local user.email "test@example.com"
+ command git config --local user.name "Test User"
+end
+
+function teardown
+ rm -rf /tmp/tmp-spacefish
+end
+
+test "Displays no status symbols in a clean repo"
+ () = (__sf_section_git_status)
+end
+
+test "Displays the correct symbol for untracked file"
+ (
+ touch testfile
+
+ set_color --bold
+ set_color normal
+ set_color --bold red
+ echo -n " [?]"
+ set_color normal
+ set_color --bold
+ set_color normal
+ ) = (__sf_section_git_status)
+end
+
+test "Displays the correct symbol for added file"
+ (
+ touch testfile
+ command git add testfile
+
+ set_color --bold
+ set_color normal
+ set_color --bold red
+ echo -n " [+]"
+ set_color normal
+ set_color --bold
+ set_color normal
+ ) = (__sf_section_git_status)
+end
+
+test "Displays the correct symbol for modified file"
+ (
+ touch testfile
+ command git add testfile
+ command git commit -m "Initial commit" --quiet
+ echo "modification" > testfile
+
+ set_color --bold
+ set_color normal
+ set_color --bold red
+ echo -n " [!]"
+ set_color normal
+ set_color --bold
+ set_color normal
+ ) = (__sf_section_git_status)
+end
+
+test "Displays the correct symbol for renamed file"
+ (
+ touch testfile
+ command git add testfile
+ command git commit -m "Initial commit" --quiet
+ mv testfile newtestfile
+ command git add testfile newtestfile
+
+ set_color --bold
+ set_color normal
+ set_color --bold red
+ echo -n " [»]"
+ set_color normal
+ set_color --bold
+ set_color normal
+ ) = (__sf_section_git_status)
+end
+
+test "Displays the correct symbol for deleted file"
+ (
+ touch testfile
+ command git add testfile
+ command git commit -m "Initial commit" --quiet
+ rm testfile
+ command git add testfile
+
+ set_color --bold
+ set_color normal
+ set_color --bold red
+ echo -n " [✘]"
+ set_color normal
+ set_color --bold
+ set_color normal
+ ) = (__sf_section_git_status)
+end
+
+test "Displays the correct symbol for stashed file"
+ (
+ touch testfile
+ command git add testfile
+ command git commit -m "Initial commit" --quiet
+ echo "modification" > testfile
+ command git stash --quiet
+
+ set_color --bold
+ set_color normal
+ set_color --bold red
+ echo -n " [\$]"
+ set_color normal
+ set_color --bold
+ set_color normal
+ ) = (__sf_section_git_status)
+end
+
+test "Test config option SPACEFISH_GIT_STATUS_SHOW"
+ (
+ set -g SPACEFISH_GIT_STATUS_SHOW false
+ ) = (__sf_section_git_status)
+end
+
+# TODO: Get test dir into status *U*
+# TODO: Add test for ahead
+# TODO: Add test for behind
+# TODO: Add test for diverged
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_golang.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_golang.test.fish
new file mode 100644
index 00000000..bff4c704
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_golang.test.fish
@@ -0,0 +1,173 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+ mock go version 0 "echo \"go version go1.10.3 darwin/amd64\""
+ mkdir -p /tmp/tmp-spacefish
+ cd /tmp/tmp-spacefish
+end
+
+function teardown
+ rm -rf /tmp/tmp-spacefish
+end
+
+test "Prints section when Godeps is present"
+ (
+ mkdir /tmp/tmp-spacefish/Godeps
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold cyan
+ echo -n "🐹 v1.10.3"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_golang)
+end
+
+test "Prints section when glide.yaml is present"
+ (
+ touch /tmp/tmp-spacefish/glide.yaml
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold cyan
+ echo -n "🐹 v1.10.3"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_golang)
+end
+
+test "Prints section when Gopkg.yml is present"
+ (
+ touch /tmp/tmp-spacefish/Gopkg.yml
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold cyan
+ echo -n "🐹 v1.10.3"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_golang)
+end
+
+test "Prints section when Gopkg.lock is present"
+ (
+ touch /tmp/tmp-spacefish/Gopkg.lock
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold cyan
+ echo -n "🐹 v1.10.3"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_golang)
+end
+
+test "Prints section when go.mod is present"
+ (
+ touch /tmp/tmp-spacefish/go.mod
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold cyan
+ echo -n "🐹 v1.10.3"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_golang)
+end
+
+test "Print section when using development version of golang"
+ (
+ mock go version 0 "echo go version devel +5efe9a8f11 Wed Jan 9 07:21:16 2019 +0000 darwin/amd64"
+ touch /tmp/tmp-spacefish/Gopkg.lock
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold cyan
+ echo -n "🐹 devel:5efe9a8f11"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_golang)
+end
+
+test "Doesn't print the section when golang files aren't present"
+ () = (__sf_section_golang)
+end
+
+test "Changing SPACEFISH_GOLANG_SYMBOL changes the displayed character"
+ (
+ touch /tmp/tmp-spacefish/Gopkg.lock
+ set SPACEFISH_GOLANG_SYMBOL "· "
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold cyan
+ echo -n "· v1.10.3"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_golang)
+end
+
+test "Changing SPACEFISH_GOLANG_PREFIX changes the character prefix"
+ (
+ touch /tmp/tmp-spacefish/Gopkg.lock
+ set sf_exit_code 0
+ set SPACEFISH_GOLANG_PREFIX ·
+
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ set_color --bold cyan
+ echo -n "🐹 v1.10.3"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_golang)
+end
+
+test "Changing SPACEFISH_GOLANG_SUFFIX changes the character suffix"
+ (
+ touch /tmp/tmp-spacefish/Gopkg.lock
+ set sf_exit_code 0
+ set SPACEFISH_GOLANG_SUFFIX ·
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold cyan
+ echo -n "🐹 v1.10.3"
+ set_color normal
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ ) = (__sf_section_golang)
+end
+
+test "doesn't display the section when SPACEFISH_GOLANG_SHOW is set to \"false\""
+ (
+ touch /tmp/tmp-spacefish/Gopkg.lock
+ set SPACEFISH_GOLANG_SHOW false
+ ) = (__sf_section_golang)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_host.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_host.test.fish
new file mode 100644
index 00000000..a040226d
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_host.test.fish
@@ -0,0 +1,124 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+end
+
+function teardown
+ if set -q SSH_CONNECTION;
+ set --erase SSH_CONNECTION
+ end
+end
+
+test "Correctly shows hostname upon SSH connection"
+ (
+ set SSH_CONNECTION "192.168.0.100 12345 192.168.0.101 22"
+
+ set_color --bold
+ echo -n "at "
+ set_color normal
+ set_color --bold green
+ echo -n (hostname)
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_host)
+end
+
+test "Displays user when SPACEFISH_HOST_SHOW is set to \"always\""
+ (
+ set SPACEFISH_HOST_SHOW always
+
+ set_color --bold
+ echo -n "at "
+ set_color normal
+ set_color --bold blue
+ echo -n (hostname)
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_host)
+end
+
+test "Displays user when SPACEFISH_HOST_SHOW is set to \"always\", over SSH"
+ (
+ set SPACEFISH_HOST_SHOW always
+ set SSH_CONNECTION "192.168.0.100 12345 192.168.0.101 22"
+
+ set_color --bold
+ echo -n "at "
+ set_color normal
+ set_color --bold green
+ echo -n (hostname)
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_host)
+end
+
+test "doesn't display the section when SPACEFISH_HOST_SHOW is set to \"false\""
+ (
+ set SPACEFISH_HOST_SHOW false
+ ) = (__sf_section_host)
+end
+
+test "Displays hostname when set different from machine name, over SSH"
+ (
+ mock hostname \* 0 "echo \"spacefish\""
+ set SSH_CONNECTION "192.168.0.100 12345 192.168.0.101 22"
+
+ set_color --bold
+ echo -n "at "
+ set_color normal
+ set_color --bold green
+ echo -n "spacefish"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_host)
+end
+
+test "Doesn't display hostname by default, without SSH"
+ () = (__sf_section_host)
+end
+
+# Color testing; magenta = pass, red = failure.
+test "Test color, no SSH."
+ (
+ set SPACEFISH_HOST_COLOR "magenta" # No SSH connection. This should display.
+ set SPACEFISH_HOST_COLOR_SSH "red" # If red shows, test failed.
+ set SPACEFISH_HOST_SHOW always
+
+ set_color --bold
+ echo -n "at "
+ set_color normal
+ set_color --bold "magenta"
+ echo -n (hostname)
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_host)
+end
+
+test "Test color, with SSH."
+ (
+ set SPACEFISH_HOST_COLOR "red" # If red shows, test failed.
+ set SPACEFISH_HOST_COLOR_SSH "magenta" # SSH connection exists. This should take precedence.
+ set SSH_CONNECTION "192.168.0.100 12345 192.168.0.101 22"
+
+ set_color --bold
+ echo -n "at "
+ set_color normal
+ set_color --bold "magenta"
+ echo -n (hostname)
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_host)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_jobs.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_jobs.test.fish
new file mode 100644
index 00000000..2ce12051
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_jobs.test.fish
@@ -0,0 +1,120 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+end
+
+function teardown
+ killall sleep # Kill any previous background jobs
+end
+
+test "Test a single background job"
+ (
+ sleep 5 & # Background process
+
+ set_color --bold
+ set_color normal
+ set_color --bold blue
+ echo -n "✦"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_jobs)
+end
+
+test "Test with two background jobs"
+ (
+ sleep 5 & # Background process #1
+ sleep 5 & # Background process #2
+
+ set_color --bold
+ set_color normal
+ set_color --bold blue
+ echo -n "✦2"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_jobs)
+end
+
+test "Test with five background jobs"
+ (
+ sleep 5 & # Background process #1
+ sleep 5 & # Background process #2
+ sleep 5 & # Background process #3
+ sleep 5 & # Background process #4
+ sleep 5 & # Background process #5
+
+ set_color --bold
+ set_color normal
+ set_color --bold blue
+ echo -n "✦5"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_jobs)
+end
+
+test "Test with less than threshold of background jobs"
+ (
+ set SPACEFISH_JOBS_AMOUNT_THRESHOLD 4
+
+ sleep 5 & # Background process #1
+ sleep 5 & # Background process #2
+ sleep 5 & # Background process #3
+
+ set_color --bold
+ set_color normal
+ set_color --bold blue
+ echo -n "✦"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_jobs)
+end
+
+test "Test with equal threshold of background jobs"
+ (
+ set SPACEFISH_JOBS_AMOUNT_THRESHOLD 4
+
+ sleep 5 & # Background process #1
+ sleep 5 & # Background process #2
+ sleep 5 & # Background process #3
+ sleep 5 & # Background process #4
+
+ set_color --bold
+ set_color normal
+ set_color --bold blue
+ echo -n "✦"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_jobs)
+end
+
+test "Test with more than threshold of background jobs"
+ (
+ set SPACEFISH_JOBS_AMOUNT_THRESHOLD 4
+
+ sleep 5 & # Background process #1
+ sleep 5 & # Background process #2
+ sleep 5 & # Background process #3
+ sleep 5 & # Background process #4
+ sleep 5 & # Background process #5
+ sleep 5 & # Background process #6
+
+ set_color --bold
+ set_color normal
+ set_color --bold blue
+ echo -n "✦6"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_jobs)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_julia.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_julia.test.fish
new file mode 100644
index 00000000..941212b2
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_julia.test.fish
@@ -0,0 +1,93 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+ mock julia --version 0 "echo \"julia version 1.0.1\""
+ mkdir -p /tmp/tmp-spacefish
+ cd /tmp/tmp-spacefish
+end
+
+function teardown
+ rm -rf /tmp/tmp-spacefish
+end
+
+test "Prints section when julia is installed and pwd has *.jl file(s)"
+ (
+ touch some-julia-file.jl
+
+ set_color --bold
+ echo -n "is "
+ set_color normal
+ set_color --bold green
+ echo -n "ஃ v1.0.1"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_julia)
+end
+
+test "Changing SPACEFISH_JULIA_SYMBOL changes the displayed character"
+ (
+ set SPACEFISH_JULIA_SYMBOL "· "
+ touch some-julia-file.jl
+
+ set_color --bold
+ echo -n "is "
+ set_color normal
+ set_color --bold green
+ echo -n "· v1.0.1"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_julia)
+end
+
+test "Changing SPACEFISH_JULIA_PREFIX changes the character prefix"
+ (
+ set SPACEFISH_JULIA_PREFIX ·
+ touch some-julia-file.jl
+
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ set_color --bold green
+ echo -n "ஃ v1.0.1"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_julia)
+end
+
+test "Changing SPACEFISH_JULIA_SUFFIX changes the character suffix"
+ (
+ set SPACEFISH_JULIA_SUFFIX ·
+ touch some-julia-file.jl
+
+ set_color --bold
+ echo -n "is "
+ set_color normal
+ set_color --bold green
+ echo -n "ஃ v1.0.1"
+ set_color normal
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ ) = (__sf_section_julia)
+end
+
+
+# Negative
+test "Doesn't display section when SPACEFISH_JULIA_SHOW is set to 'false'"
+ (
+ set -g SPACEFISH_JULIA_SHOW false
+ touch some-julia-file.jl
+
+ ) = (__sf_section_julia)
+end
+
+test "Doesn't display section when pwd has no *.jl file"
+ () = (__sf_section_julia)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_kubecontext.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_kubecontext.test.fish
new file mode 100644
index 00000000..3b0f3400
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_kubecontext.test.fish
@@ -0,0 +1,119 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+ mock kubectl config 0 "echo \"testkube\""
+end
+
+test "Prints section"
+ (
+ set_color --bold
+ echo -n "at "
+ set_color normal
+ set_color --bold cyan
+ echo -n "☸️ testkube (testkube)"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_kubecontext)
+end
+
+test "Kubecontext symbol does not appear outside of a Kubernetes project"
+ (
+ mock kubectl config 1
+ ) = (__sf_section_kubecontext)
+end
+
+test "Changing SPACEFISH_KUBECONTEXT_SYMBOL changes the displayed character"
+ (
+ set SPACEFISH_KUBECONTEXT_SYMBOL "· "
+
+ set_color --bold
+ echo -n "at "
+ set_color normal
+ set_color --bold cyan
+ echo -n "· testkube (testkube)"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_kubecontext)
+end
+
+test "Changing SPACEFISH_KUBECONTEXT_PREFIX changes the character prefix"
+ (
+ set sf_exit_code 0
+ set SPACEFISH_KUBECONTEXT_PREFIX ·
+
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ set_color --bold cyan
+ echo -n "☸️ testkube (testkube)"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_kubecontext)
+end
+
+test "Changing SPACEFISH_KUBECONTEXT_SUFFIX changes the character suffix"
+ (
+ set sf_exit_code 0
+ set SPACEFISH_KUBECONTEXT_SUFFIX ·
+
+ set_color --bold
+ echo -n "at "
+ set_color normal
+ set_color --bold cyan
+ echo -n "☸️ testkube (testkube)"
+ set_color normal
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ ) = (__sf_section_kubecontext)
+end
+
+test "Doesn't display the section when SPACEFISH_KUBECONTEXT_SHOW is set to \"false\""
+ (
+ set SPACEFISH_KUBECONTEXT_SHOW false
+ ) = (__sf_section_kubecontext)
+end
+
+test "Doesn't display the namespace section when SPACEFISH_KUBECONTEXT_NAMESPACE_SHOW is set to \"false\""
+ (
+ set SPACEFISH_KUBECONTEXT_NAMESPACE_SHOW false
+ set sf_exit_code 0
+ set SPACEFISH_KUBECONTEXT_SUFFIX ·
+
+ set_color --bold
+ echo -n "at "
+ set_color normal
+ set_color --bold cyan
+ echo -n "☸️ testkube"
+ set_color normal
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ ) = (__sf_section_kubecontext)
+end
+
+test "Doesn't display the namespace section when kube_context is set to \"default\""
+ (
+ mock kubectl config 0 "echo \"default\""
+
+ set sf_exit_code 0
+ set SPACEFISH_KUBECONTEXT_SUFFIX ·
+
+ set_color --bold
+ echo -n "at "
+ set_color normal
+ set_color --bold cyan
+ echo -n "☸️ default"
+ set_color normal
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ ) = (__sf_section_kubecontext)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_line_sep.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_line_sep.test.fish
new file mode 100644
index 00000000..8d2f8208
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_line_sep.test.fish
@@ -0,0 +1,17 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+end
+
+test "Echoes a line break"
+ (
+ echo -n -e \n
+ ) = (__sf_section_line_sep)
+end
+
+test "Disabling SPACEFISH_PROMPT_SEPARATE_LINE doesn't display a line break"
+ (
+ set SPACEFISH_PROMPT_SEPARATE_LINE false
+ ) = (__sf_section_line_sep)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_node.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_node.test.fish
new file mode 100644
index 00000000..12622a42
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_node.test.fish
@@ -0,0 +1,192 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+ mock node -v 0 "echo \"v9.8.0\""
+ mkdir -p /tmp/tmp-spacefish/
+ cd /tmp/tmp-spacefish
+end
+
+function teardown
+ rm -rf /tmp/tmp-spacefish
+end
+
+test "Prints section when node_modules is present"
+ (
+ mkdir /tmp/tmp-spacefish/node_modules
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold green
+ echo -n "⬢ v9.8.0"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_node)
+end
+
+test "Prints section when package.json is present"
+ (
+ touch /tmp/tmp-spacefish/package.json
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold green
+ echo -n "⬢ v9.8.0"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_node)
+end
+
+test "Doesn't print section when not in a directory with node_modules or package.json"
+ () = (__sf_section_node)
+end
+
+test "Prints nvm version when nvm is installed"
+ (
+ mkdir /tmp/tmp-spacefish/node_modules
+ set -e sf_node_version
+ mock nvm current 0 "echo \"v9.8.0\""
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold green
+ echo -n "⬢ v9.8.0"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_node)
+end
+
+test "Prints cached nvm version if previously used"
+ (
+ mkdir /tmp/tmp-spacefish/node_modules
+ set sf_node_version "v1.2.3"
+ set sf_last_nvm_bin "path_to_bin"
+ set NVM_BIN "path_to_bin"
+ mock nvm current 0
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold green
+ echo -n "⬢ v1.2.3"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_node)
+end
+
+test "Prints nodenv version when nodenv is installed"
+ (
+ mkdir /tmp/tmp-spacefish/node_modules
+ mock nodenv version-name 0 "echo \"v9.8.0\""
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold green
+ echo -n "⬢ v9.8.0"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_node)
+
+test "Prints nothing when using the \"system\" version of node with nvm"
+ (
+ mkdir -p /tmp/tmp-spacefish/node_modules
+ mock nvm current 0 "echo \"system\""
+ ) = (__sf_section_node)
+end
+
+test "Prints nothing when using the \"system\" version of node with nodenv"
+ (
+ mkdir /tmp/tmp-spacefish/node_modules
+ mock nodenv version-name 0 "echo \"system\""
+ ) = (__sf_section_node)
+end
+
+test "Prints nodenv version when nodenv is installed"
+ (
+ mkdir /tmp/tmp-spacefish/node_modules
+ mock nodenv version-name 0 "echo \"node\""
+ ) = (__sf_section_node)
+end
+
+test "Changing SPACEFISH_NODE_SYMBOL changes the displayed character"
+ (
+ mkdir /tmp/tmp-spacefish/node_modules
+ mock nvm current 0 "echo \"v9.8.0\""
+ set SPACEFISH_NODE_SYMBOL "· "
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold green
+ echo -n "· v9.8.0"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_node)
+end
+
+test "Changing SPACEFISH_NODE_PREFIX changes the character prefix"
+ (
+ mkdir /tmp/tmp-spacefish/node_modules
+ set sf_exit_code 0
+ set SPACEFISH_NODE_PREFIX ·
+
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ set_color --bold green
+ echo -n "⬢ v9.8.0"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_node)
+end
+
+test "Changing SPACEFISH_NODE_PREFIX changes the character prefix"
+ (
+ mkdir /tmp/tmp-spacefish/node_modules
+ set sf_exit_code 0
+ set SPACEFISH_NODE_SUFFIX ·
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold green
+ echo -n "⬢ v9.8.0"
+ set_color normal
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ ) = (__sf_section_node)
+end
+
+test "Setting SPACEFISH_NODE_DEFAULT_VERSION to the current version disables the section"
+ (
+ mkdir /tmp/tmp-spacefish/node_modules
+ set sf_exit_code 0
+ set SPACEFISH_NODE_DEFAULT_VERSION v9.8.0
+ ) = (__sf_section_node)
+end
+
+test "doesn't display the section when SPACEFISH_NODE_SHOW is set to \"false\""
+ (
+ mkdir /tmp/tmp-spacefish/node_modules
+ set SPACEFISH_NODE_SHOW false
+ ) = (__sf_section_node)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_package.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_package.test.fish
new file mode 100644
index 00000000..06660730
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_package.test.fish
@@ -0,0 +1,72 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+ mock cargo pkgid 0 "echo \"file:///Users/sirMerr/Development/test-rust#0.1.0\""
+ mkdir -p /tmp/tmp-spacefish
+ cd /tmp/tmp-spacefish
+end
+
+function teardown
+ rm -rf /tmp/tmp-spacefish
+end
+
+test "Prints section when Cargo.toml is present"
+ (
+ touch /tmp/tmp-spacefish/Cargo.toml
+
+ set_color --bold
+ echo -n "is "
+ set_color normal
+ set_color --bold red
+ echo -n "📦 v0.1.0"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_package)
+end
+
+test "Prints section when package.json is present"
+ (
+ echo "{\"version\": \"1.0\"}" > /tmp/tmp-spacefish/package.json
+
+ set_color --bold
+ echo -n "is "
+ set_color normal
+ set_color --bold red
+ echo -n "📦 v1.0"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_package)
+end
+
+test "Changing SPACEFISH_PACKAGE_SUFFIX changes the character suffix"
+ (
+ touch /tmp/tmp-spacefish/Cargo.toml
+ set SPACEFISH_PACKAGE_SUFFIX ·
+
+ set_color --bold
+ echo -n "is "
+ set_color normal
+ set_color --bold red
+ echo -n "📦 v0.1.0"
+ set_color normal
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ ) = (__sf_section_package)
+end
+
+test "Does not print section when Cargo.toml or package.json is not present"
+ () = (__sf_section_package)
+end
+
+test "Doesn't display the section when SPACEFISH_PACKAGE_SHOW is set to \"false\""
+ (
+ touch /tmp/tmp-spacefish/Cargo.toml
+ set SPACEFISH_PACKAGE_SHOW false
+ ) = (__sf_section_package)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_php.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_php.test.fish
new file mode 100644
index 00000000..f0333bd7
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_php.test.fish
@@ -0,0 +1,110 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+ mock php -v 0 "echo \"PHP 7.1.16 (cli) (built: Mar 31 2018 02:59:59) ( NTS )
+ Copyright (c) 1997-2018 The PHP Group
+ Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies\""
+ mkdir -p /tmp/tmp-spacefish
+ cd /tmp/tmp-spacefish
+end
+
+function teardown
+ rm -rf /tmp/tmp-spacefish
+end
+
+test "Prints section when composer.json is present"
+ (
+ touch /tmp/tmp-spacefish/composer.json
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold blue
+ echo -n "🐘 v7.1.16"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_php)
+end
+
+test "Prints section when a *.php file is present"
+ (
+ touch /tmp/tmp-spacefish/testfile.php
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold blue
+ echo -n "🐘 v7.1.16"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_php)
+end
+
+test "Doesn't print the section when composer.json and *.php aren't present"
+ () = (__sf_section_php)
+end
+
+test "Changing SPACEFISH_PHP_SYMBOL changes the displayed character"
+ (
+ touch /tmp/tmp-spacefish/composer.json
+ set SPACEFISH_PHP_SYMBOL "· "
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold blue
+ echo -n "· v7.1.16"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_php)
+end
+
+test "Changing SPACEFISH_PHP_PREFIX changes the character prefix"
+ (
+ touch /tmp/tmp-spacefish/composer.json
+ set sf_exit_code 0
+ set SPACEFISH_PHP_PREFIX ·
+
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ set_color --bold blue
+ echo -n "🐘 v7.1.16"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_php)
+end
+
+test "Changing SPACEFISH_PHP_SUFFIX changes the character suffix"
+ (
+ touch /tmp/tmp-spacefish/composer.json
+ set sf_exit_code 0
+ set SPACEFISH_PHP_SUFFIX ·
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold blue
+ echo -n "🐘 v7.1.16"
+ set_color normal
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ ) = (__sf_section_php)
+end
+
+test "doesn't display the section when SPACEFISH_PHP_SHOW is set to \"false\""
+ (
+ touch /tmp/tmp-spacefish/composer.json
+ set SPACEFISH_PHP_SHOW false
+ ) = (__sf_section_php)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_pyenv.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_pyenv.test.fish
new file mode 100644
index 00000000..b9576800
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_pyenv.test.fish
@@ -0,0 +1,159 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+ mock pyenv version-name 0 "echo \"3.7.0\""
+ mkdir -p /tmp/tmp-spacefish
+ cd /tmp/tmp-spacefish
+end
+
+function teardown
+ rm -rf /tmp/tmp-spacefish
+ if test "$PYENV_VERSION"
+ set -e PYENV_VERSION
+ end
+end
+
+test "Prints section when \$PYENV_VERSION is defined"
+ (
+ set PYENV_VERSION 3.7.0
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold yellow
+ echo -n "🐍 3.7.0"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_pyenv)
+end
+
+test "Prints section when .python-version is present"
+ (
+ touch /tmp/tmp-spacefish/.python-version
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold yellow
+ echo -n "🐍 3.7.0"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_pyenv)
+end
+
+test "Prints section when requirements.txt is present"
+ (
+ touch /tmp/tmp-spacefish/requirements.txt
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold yellow
+ echo -n "🐍 3.7.0"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_pyenv)
+end
+
+test "Prints section when pyproject.toml is present"
+ (
+ touch /tmp/tmp-spacefish/pyproject.toml
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold yellow
+ echo -n "🐍 3.7.0"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_pyenv)
+end
+
+test "Prints section when a *.py file is present"
+ (
+ touch /tmp/tmp-spacefish/testfile.py
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold yellow
+ echo -n "🐍 3.7.0"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_pyenv)
+end
+
+test "Doesn't print the section when requirements.txt and *.py aren't present"
+ () = (__sf_section_pyenv)
+end
+
+test "Changing SPACEFISH_PYENV_SYMBOL changes the displayed character"
+ (
+ touch /tmp/tmp-spacefish/requirements.txt
+ set SPACEFISH_PYENV_SYMBOL "· "
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold yellow
+ echo -n "· 3.7.0"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_pyenv)
+end
+
+test "Changing SPACEFISH_PYENV_PREFIX changes the character prefix"
+ (
+ touch /tmp/tmp-spacefish/requirements.txt
+ set sf_exit_code 0
+ set SPACEFISH_PYENV_PREFIX ·
+
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ set_color --bold yellow
+ echo -n "🐍 3.7.0"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_pyenv)
+end
+
+test "Changing SPACEFISH_PYENV_SUFFIX changes the character suffix"
+ (
+ touch /tmp/tmp-spacefish/requirements.txt
+ set sf_exit_code 0
+ set SPACEFISH_PYENV_SUFFIX ·
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold yellow
+ echo -n "🐍 3.7.0"
+ set_color normal
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ ) = (__sf_section_pyenv)
+end
+
+test "doesn't display the section when SPACEFISH_PYENV_SHOW is set to \"false\""
+ (
+ touch /tmp/tmp-spacefish/requirements.txt
+ set SPACEFISH_PYENV_SHOW false
+ ) = (__sf_section_pyenv)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_rust.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_rust.test.fish
new file mode 100644
index 00000000..ea99a4a9
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_rust.test.fish
@@ -0,0 +1,125 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+ mock rustc --version 0 "echo \"rustc 1.28.0-nightly (9634041f0 2018-07-30)\""
+ mkdir -p /tmp/tmp-spacefish
+ cd /tmp/tmp-spacefish
+end
+
+function teardown
+ rm -rf /tmp/tmp-spacefish
+end
+
+test "Prints section when Cargo.toml is present"
+ (
+ touch /tmp/tmp-spacefish/Cargo.toml
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold red
+ echo -n "𝗥 v1.28.0"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_rust)
+end
+
+test "Prints section when a *.rs file is present"
+ (
+ touch /tmp/tmp-spacefish/testfile.rs
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold red
+ echo -n "𝗥 v1.28.0"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_rust)
+end
+
+test "Doesn't print the section when Cargo.toml and *.rs aren't present"
+ () = (__sf_section_rust)
+end
+
+test "Changing SPACEFISH_RUST_SYMBOL changes the displayed character"
+ (
+ touch /tmp/tmp-spacefish/Cargo.toml
+ set SPACEFISH_RUST_SYMBOL "· "
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold red
+ echo -n "· v1.28.0"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_rust)
+end
+
+test "Changing SPACEFISH_RUST_PREFIX changes the character prefix"
+ (
+ touch /tmp/tmp-spacefish/Cargo.toml
+ set sf_exit_code 0
+ set SPACEFISH_RUST_PREFIX ·
+
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ set_color --bold red
+ echo -n "𝗥 v1.28.0"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_rust)
+end
+
+test "Changing SPACEFISH_RUST_SUFFIX changes the character suffix"
+ (
+ touch /tmp/tmp-spacefish/Cargo.toml
+ set sf_exit_code 0
+ set SPACEFISH_RUST_SUFFIX ·
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold red
+ echo -n "𝗥 v1.28.0"
+ set_color normal
+ set_color --bold
+ echo -n "·"
+ set_color normal
+ ) = (__sf_section_rust)
+end
+
+test "Prints verbose version when configured to do so"
+ (
+ touch /tmp/tmp-spacefish/Cargo.toml
+ set SPACEFISH_RUST_VERBOSE_VERSION true
+
+ set_color --bold
+ echo -n "via "
+ set_color normal
+ set_color --bold red
+ echo -n "𝗥 v1.28.0-nightly"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_rust)
+end
+
+test "doesn't display the section when SPACEFISH_RUST_SHOW is set to \"false\""
+ (
+ touch /tmp/tmp-spacefish/Cargo.toml
+ set SPACEFISH_RUST_SHOW false
+ ) = (__sf_section_rust)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_time.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_time.test.fish
new file mode 100644
index 00000000..fe7ce215
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_time.test.fish
@@ -0,0 +1,109 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+
+ function date -a time_format
+ command date --version >/dev/null 2>/dev/null
+ switch $status
+ case 0 # GNU Coreutil
+ command date "-u" "-d @1536116421" "$time_format"
+ case '*' # MacOS + BSD Compatibility (Lacks --version)
+ command date "-u" "-r 1536116421" "$time_format"
+ end
+ end
+end
+
+function teardown
+ functions --erase date
+end
+
+test "Time is disabled by default?"
+ () = (__sf_section_time)
+end
+
+test "Enabling time! 24-hour by default"
+ (
+ set SPACEFISH_TIME_SHOW true
+
+ set_color --bold
+ echo -n "at "
+ set_color normal
+ set_color --bold yellow
+ echo -n "03:00:21"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_time)
+end
+
+test "Enabling time with 12-hour instead"
+ (
+ set SPACEFISH_TIME_SHOW true
+ set SPACEFISH_TIME_12HR true
+
+ set_color --bold
+ echo -n "at "
+ set_color normal
+ set_color --bold yellow
+ echo -n "03:00:21"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_time)
+end
+
+test "Show the date too"
+ (
+ set SPACEFISH_TIME_SHOW true
+ set SPACEFISH_DATE_SHOW true
+
+ set_color --bold
+ echo -n "at "
+ set_color normal
+ set_color --bold yellow
+ echo -n "2018-09-05"
+ echo -n " "
+ echo -n "03:00:21"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_time)
+end
+
+test "Custom date/time format"
+ (
+ set SPACEFISH_TIME_SHOW true
+ set SPACEFISH_TIME_FORMAT (date '+%H') # Unix timestamp
+ set SPACEFISH_TIME_PREFIX "" # Get rid of "at " prefix.
+
+ set_color --bold
+ set_color normal
+ set_color --bold yellow
+ echo -n "03"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_time)
+end
+
+test "What is the time? Purple?!"
+ (
+ set SPACEFISH_TIME_SHOW true
+ set SPACEFISH_TIME_COLOR purple
+
+ set_color --bold
+ echo -n "at "
+ set_color normal
+ set_color --bold purple
+ echo -n "03:00:21"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_time)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_user.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_user.test.fish
new file mode 100644
index 00000000..489983de
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_user.test.fish
@@ -0,0 +1,95 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+end
+
+function teardown
+ set USER $LOGNAME
+end
+
+test "Displays user when different from logname"
+ (
+ set USER spacefishUser
+
+ set_color --bold
+ echo -n "with "
+ set_color normal
+ set_color --bold yellow
+ echo -n "spacefishUser"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_user)
+end
+
+test "Displays user when UID = 0"
+ (
+ set UID 0
+
+ set_color --bold
+ echo -n "with "
+ set_color normal
+ set_color --bold yellow
+ echo -n $USER
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_user)
+end
+
+test "Displays user when there's an SSH connection"
+ (
+ set SSH_CONNECTION "192.168.0.100 12345 192.168.0.101 22"
+
+ set_color --bold
+ echo -n "with "
+ set_color normal
+ set_color --bold yellow
+ echo -n $USER
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_user)
+end
+
+test "Changes user color when logged in as root"
+ (
+ set USER root
+
+ set_color --bold
+ echo -n "with "
+ set_color normal
+ set_color --bold red
+ echo -n root
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_user)
+end
+
+test "Displays user when SPACEFISH_USER_SHOW is set to \"always\""
+ (
+ set SPACEFISH_USER_SHOW always
+
+ set_color --bold
+ echo -n "with "
+ set_color normal
+ set_color --bold yellow
+ echo -n $USER
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_user)
+end
+
+test "Doesn't display user when SPACEFISH_USER_SHOW is set to \"false\""
+ (
+ set SPACEFISH_USER_SHOW false
+ ) = (__sf_section_user)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_venv.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_venv.test.fish
new file mode 100644
index 00000000..f60d23e1
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_venv.test.fish
@@ -0,0 +1,50 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+end
+
+function teardown
+ if test "$VIRTUAL_ENV"
+ set -e VIRTUAL_ENV
+ end
+end
+
+test "Prints section when \$VIRTUAL_ENV is defined"
+ (
+ set VIRTUAL_ENV "/Users/JaneDoe/.venv/coolenviron"
+
+ set_color --bold
+ echo -n $SPACEFISH_PROMPT_DEFAULT_PREFIX
+ set_color normal
+ set_color --bold blue
+ echo -n "·coolenviron"
+ set_color normal
+ set_color --bold
+ echo -n $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ set_color normal
+ ) = (__sf_section_venv)
+end
+
+test "Prints section when \$VIRTUAL_ENV is defined with venv as the directory name"
+ (
+ set VIRTUAL_ENV "/Users/JaneDoe/.venv/coolenviron/virtualenv"
+
+ set_color --bold
+ echo -n $SPACEFISH_PROMPT_DEFAULT_PREFIX
+ set_color normal
+ set_color --bold blue
+ echo -n "·coolenviron"
+ set_color normal
+ set_color --bold
+ echo -n $SPACEFISH_PROMPT_DEFAULT_SUFFIX
+ set_color normal
+ ) = (__sf_section_venv)
+end
+
+test "doesn't display the section when SPACEFISH_VENV_SHOW is set to \"false\""
+ (
+ set VIRTUAL_ENV "/Users/JaneDoe/.venv/coolenviron"
+ set SPACEFISH_VENV_SHOW false
+ ) = (__sf_section_venv)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_vi_mode.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_vi_mode.test.fish
new file mode 100644
index 00000000..4a9bda20
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_section_vi_mode.test.fish
@@ -0,0 +1,144 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+ fish_vi_key_bindings; or true
+ # Unfortunately right after enabling vi-keys it's in 'normal' state on CI and in 'insert' locally
+ set fish_bind_mode insert
+end
+
+test "Prints section when fish_vi_key_bindigs is set"
+ (
+ set_color --bold
+ echo -n " "
+ set_color normal
+ set_color --bold white
+ echo -n "[I]"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_vi_mode)
+end
+
+test "Prints SPACEFISH_VI_MODE_VISUAL when fish_bind_mode is visual"
+ (
+ set fish_bind_mode visual
+ set SPACEFISH_VI_MODE_VISUAL "-V-"
+
+ set_color --bold
+ echo -n " "
+ set_color normal
+ set_color --bold white
+ echo -n $SPACEFISH_VI_MODE_VISUAL
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_vi_mode)
+end
+
+test "Prints SPACEFISH_VI_MODE_REPLACE_ONE when fish_bind_mode is replace_one"
+ (
+ set fish_bind_mode replace_one
+ set SPACEFISH_VI_MODE_REPLACE_ONE "-R-"
+
+ set_color --bold
+ echo -n " "
+ set_color normal
+ set_color --bold white
+ echo -n $SPACEFISH_VI_MODE_REPLACE_ONE
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_vi_mode)
+end
+
+test "Prints SPACEFISH_VI_MODE_NORMAL when fish_bind_mode is normal"
+ (
+ set fish_bind_mode default
+ set SPACEFISH_VI_MODE_NORMAL "-N-"
+
+ set_color --bold
+ echo -n " "
+ set_color normal
+ set_color --bold white
+ echo -n $SPACEFISH_VI_MODE_NORMAL
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_vi_mode)
+end
+
+test "Prints SPACEFISH_VI_MODE_INSERT when fish_bind_mode is insert"
+ (
+ set fish_bind_mode insert
+ set SPACEFISH_VI_MODE_INSERT "-I-"
+
+ set_color --bold
+ echo -n " "
+ set_color normal
+ set_color --bold white
+ echo -n $SPACEFISH_VI_MODE_INSERT
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_vi_mode)
+end
+
+test "Prints prefix when SPACEFISH_VI_MODE_PREFIX is set"
+ (
+ set SPACEFISH_VI_MODE_PREFIX "VIM "
+
+ set_color --bold
+ echo -n "$SPACEFISH_VI_MODE_PREFIX"
+ set_color normal
+ set_color --bold white
+ echo -n "[I]"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_vi_mode)
+end
+
+test "Prints suffix when SPACEFISH_VI_MODE_SUFFIX is set"
+ (
+ set SPACEFISH_VI_MODE_SUFFIX " VIM "
+
+ set_color --bold
+ echo -n " "
+ set_color normal
+ set_color --bold white
+ echo -n "[I]"
+ set_color normal
+ set_color --bold
+ echo -n $SPACEFISH_VI_MODE_SUFFIX
+ set_color normal
+ ) = (__sf_section_vi_mode)
+end
+
+test "Use color from SPACEFISH_VI_MODE_COLOR"
+ (
+ set SPACEFISH_VI_MODE_COLOR red
+
+ set_color --bold
+ echo -n " "
+ set_color normal
+ set_color --bold red
+ echo -n "[I]"
+ set_color normal
+ set_color --bold
+ echo -n " "
+ set_color normal
+ ) = (__sf_section_vi_mode)
+end
+
+test "Don't print anything if SPACEFISH_VI_MODE_SHOW is false"
+ (
+ set SPACEFISH_VI_MODE_SHOW false
+ ) = (__sf_section_vi_mode)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_util_git_branch.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_util_git_branch.test.fish
new file mode 100644
index 00000000..33a65a1a
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_util_git_branch.test.fish
@@ -0,0 +1,45 @@
+source $DIRNAME/spacefish_test_setup.fish
+
+function setup
+ spacefish_test_setup
+ mkdir -p /tmp/tmp-spacefish
+ cd /tmp/tmp-spacefish
+ command git init >/dev/null
+ command git config --local user.email "test@example.com"
+ command git config --local user.name "Test User"
+end
+
+function teardown
+ rm -rf /tmp/tmp-spacefish
+end
+
+test "Identifies HEAD before initial commit"
+ (
+ echo "HEAD"
+ ) = (__sf_util_git_branch)
+end
+
+test "Identifies master branch"
+ (
+ command git commit --allow-empty -m "initial commit" --quiet
+
+ echo "master"
+ ) = (__sf_util_git_branch)
+end
+
+test "Identifies an alternate branch name"
+ (
+ command git checkout -b "testBranch" 2>/dev/null
+ command git commit --allow-empty -m "initial commit" --quiet
+
+ echo "testBranch"
+ ) = (__sf_util_git_branch)
+end
+
+test "No result provided for non-git directory"
+ (
+ cd ~
+
+ echo ""
+ ) = (__sf_util_git_branch)
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_util_human_time.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_util_human_time.test.fish
new file mode 100644
index 00000000..730cc027
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_util_human_time.test.fish
@@ -0,0 +1,89 @@
+test "Shows milliseconds"
+ '1ms' = (
+ echo 1 | __sf_util_human_time my_var
+ )
+end
+
+test "Shows seconds"
+ '1s' = (
+ echo 1000 | __sf_util_human_time my_var
+ )
+end
+
+test "Shows seconds and milliseconds"
+ '1s 1ms' = (
+ echo 1001 | __sf_util_human_time my_var
+ )
+end
+
+test "Shows minutes"
+ '1m' = (
+ echo 60000 | __sf_util_human_time my_var
+ )
+end
+
+test "Shows minutes and milliseconds"
+ '1m 1ms' = (
+ echo 60001 | __sf_util_human_time my_var
+ )
+end
+
+test "Shows minutes and seconds"
+ '1m 1s' = (
+ echo 61000 | __sf_util_human_time my_var
+ )
+end
+
+test "Shows minutes, seconds, and milliseconds"
+ '1m 1s 1ms' = (
+ echo 61001 | __sf_util_human_time my_var
+ )
+end
+
+test "Shows hours"
+ '1h' = (
+ echo 3600000 | __sf_util_human_time my_var
+ )
+end
+
+test "Shows hours and milliseconds"
+ '1h 1ms' = (
+ echo 3600001 | __sf_util_human_time my_var
+ )
+end
+
+test "Shows hours and seconds"
+ '1h 1s' = (
+ echo 3601000 | __sf_util_human_time my_var
+ )
+end
+
+test "Shows hours, seconds, and milliseconds"
+ '1h 1s 1ms' = (
+ echo 3601001 | __sf_util_human_time my_var
+ )
+end
+
+test "Shows hours and minutes"
+ '1h 1m' = (
+ echo 3660000 | __sf_util_human_time my_var
+ )
+end
+
+test "Shows hours, minutes, and milliseconds"
+ '1h 1m 1ms' = (
+ echo 3660001 | __sf_util_human_time my_var
+ )
+end
+
+test "Shows hours, minutes, and seconds"
+ '1h 1m 1s' = (
+ echo 3661000 | __sf_util_human_time my_var
+ )
+end
+
+test "Shows hours, minutes, seconds, and milliseconds"
+ '1h 1m 1s 1ms' = (
+ echo 3661001 | __sf_util_human_time my_var
+ )
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_util_set_default.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_util_set_default.test.fish
new file mode 100644
index 00000000..de2faa57
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_util_set_default.test.fish
@@ -0,0 +1,14 @@
+test "Sets a variable"
+ 'default_value' = (
+ __sf_util_set_default my_var 'default_value'
+ echo $my_var
+ )
+end
+
+test "Skips setting a variable if one is already set"
+ 'default_value' = (
+ __sf_util_set_default my_var 'default_value'
+ __sf_util_set_default my_var 'another_value'
+ echo $my_var
+ )
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/__sf_util_truncate_dir.test.fish b/.config/fisher/github.com/matchai/spacefish/tests/__sf_util_truncate_dir.test.fish
new file mode 100644
index 00000000..3ac1e2cf
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/__sf_util_truncate_dir.test.fish
@@ -0,0 +1,28 @@
+set path /tmp/$DIRNAME/$TESTNAME
+
+function setup
+ mkdir -p $path/temp1/temp2/temp3
+ cd $path/temp1/temp2/temp3
+end
+
+function teardown
+ rm -rf $path
+end
+
+test "Truncate path to 1 directory"
+ 'temp3' = (
+ __sf_util_truncate_dir (pwd) 1
+ )
+end
+
+test "Truncate path to 3 directories"
+ 'temp1/temp2/temp3' = (
+ __sf_util_truncate_dir (pwd) 3
+ )
+end
+
+test "Don't truncate path"
+ (pwd) = (
+ __sf_util_truncate_dir (pwd) 0
+ )
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/run.fish b/.config/fisher/github.com/matchai/spacefish/tests/run.fish
new file mode 100755
index 00000000..132bf15d
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/run.fish
@@ -0,0 +1,22 @@
+#!/usr/bin/env fish
+
+set -l gitRoot (git rev-parse --show-toplevel)
+set -l testDir (dirname (status --current-filename))
+set -l tmpDir /tmp/spacefish
+
+# Install fisher if not installed in temporary fish env
+if test ! -f $tmpDir/.config/fish/functions/fisher.fish
+ curl https://git.io/fisher --create-dirs -sLo $tmpDir/.config/fish/functions/fisher.fish
+end
+
+# Install fishtape and local spacefish into temp env
+env HOME=$tmpDir fish -c "fisher add jorgebucaran/fishtape@7426171 matchai/fish-mock $gitRoot"
+env HOME=$tmpDir fish -c "fish_prompt"
+
+if test (count $argv) -gt 0
+ # Run an individual test file if it is provided as an argument
+ env HOME=$tmpDir fish -c "fishtape $argv[1]"
+else
+ # Otherwise run all test files
+ env HOME=$tmpDir fish -c "fishtape $testDir/*.test.fish"
+end
diff --git a/.config/fisher/github.com/matchai/spacefish/tests/spacefish_test_setup.fish b/.config/fisher/github.com/matchai/spacefish/tests/spacefish_test_setup.fish
new file mode 100644
index 00000000..31001a7f
--- /dev/null
+++ b/.config/fisher/github.com/matchai/spacefish/tests/spacefish_test_setup.fish
@@ -0,0 +1,14 @@
+function spacefish_test_setup
+ # Delete all lingering spacefish variables
+ set --name | grep -E '^(SPACEFISH_|sf_)' | while read -l var
+ set -e $var
+ end
+
+ # Delete lingering mocked functions
+ for mock in $_mocked
+ unmock $mock
+ end
+
+ # Initialize spacefish theme
+ fish_prompt>/dev/null
+end
diff --git a/.config/i3/config b/.config/i3/config
new file mode 100644
index 00000000..43f46f3c
--- /dev/null
+++ b/.config/i3/config
@@ -0,0 +1,264 @@
+# This file has been auto-generated by i3-config-wizard(1).
+# It will not be overwritten, so edit it as you like.
+#
+# Should you change your keyboard layout some time, delete
+# this file and re-run i3-config-wizard(1).
+#
+
+# i3 config file (v4)
+#
+# Please see https://i3wm.org/docs/userguide.html for a complete reference!
+
+set $mod Mod4
+set $aux Mod1
+
+# Font for window titles. Will also be used by the bar unless a different font
+# is used in the bar {} block below.
+
+# This font is widely installed, provides lots of unicode glyphs, right-to-left
+# text rendering and scalability on retina/hidpi displays (thanks to pango).
+font pango:DejaVu Sans Mono 8
+
+# The combination of xss-lock, nm-applet and pactl is a popular choice, so
+# they are included here as an example. Modify as you see fit.
+
+# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
+# screen before suspend. Use loginctl lock-session to lock your screen.
+exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
+
+# NetworkManager is the most popular way to manage wireless networks on Linux,
+# and nm-applet is a desktop environment-independent system tray GUI for it.
+exec --no-startup-id nm-applet
+
+# Use pactl to adjust volume in PulseAudio.
+set $refresh_i3status killall -SIGUSR1 i3status
+bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
+bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
+bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
+bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
+
+bindsym XF86AudioNext exec playerctl next
+bindsym XF86AudioPrev exec playerctl previous
+
+# Sreen brightness controls
+bindsym XF86MonBrightnessUp exec xbacklight -inc 20 # increase screen brightness
+bindsym XF86MonBrightnessDown exec xbacklight -dec 20 # decrease screen brightness
+
+# Disable titlebars
+for_window [class=".*"] border pixel 0
+
+# Use gaps
+smart_gaps on
+gaps inner 5
+gaps outer 5
+
+# Use Mouse+$mod to drag floating windows to their wanted position
+floating_modifier $mod
+
+# start a terminal
+bindsym $mod+Return exec terminator
+
+# kill focused window
+bindsym $mod+Shift+q kill
+
+# start rofi (a program launcher)
+bindsym $mod+d exec --no-startup-id "rofi -combi-modi window,drun,ssh -theme DarkBlue -font \\"pango mono 24\\" -show combi"
+
+# change focus
+bindsym $mod+h focus left
+bindsym $mod+j focus down
+bindsym $mod+k focus up
+bindsym $mod+l focus right
+
+# alternatively, you can use the cursor keys:
+bindsym $mod+Left focus left
+bindsym $mod+Down focus down
+bindsym $mod+Up focus up
+bindsym $mod+Right focus right
+
+# move windows:
+bindsym $mod+Shift+h move left
+bindsym $mod+Shift+j move down
+bindsym $mod+Shift+k move up
+bindsym $mod+Shift+l move right
+
+# alternatively, you can use the cursor keys:
+bindsym $mod+Shift+Left move left
+bindsym $mod+Shift+Down move down
+bindsym $mod+Shift+Up move up
+bindsym $mod+Shift+Right move right
+
+# split in horizontal orientation
+bindsym $mod+o split v
+
+# split in vertical orientation
+bindsym $mod+v split h
+
+# enter fullscreen mode for the focused container
+bindsym $mod+f fullscreen toggle
+
+# change container layout (stacked, tabbed, toggle split)
+bindsym $mod+s layout stacking
+bindsym $mod+w layout tabbed
+bindsym $mod+e layout toggle split
+
+# toggle tiling / floating
+bindsym $mod+Shift+space floating toggle
+
+# change focus between tiling / floating windows
+bindsym $mod+space focus mode_toggle
+
+# focus the parent container
+bindsym $mod+a focus parent
+
+# focus the child container
+#bindsym $mod+d focus child
+
+# Define names for default workspaces for which we configure key bindings later on.
+# We use variables to avoid repeating the names in multiple places.
+set $ws1 "1: "
+set $ws2 "2: "
+set $ws3 "3: "
+set $ws4 "4: "
+set $ws5 "5: "
+set $ws6 "6: "
+set $ws7 "7: all"
+set $ws8 "8"
+set $ws9 "9"
+set $ws10 "10"
+
+# switch to workspace
+bindsym $mod+1 workspace number $ws1
+bindsym $mod+2 workspace number $ws2
+bindsym $mod+3 workspace number $ws3
+bindsym $mod+4 workspace number $ws4
+bindsym $mod+5 workspace number $ws5
+bindsym $mod+6 workspace number $ws6
+bindsym $mod+7 workspace number $ws7
+bindsym $mod+8 workspace number $ws8
+bindsym $mod+9 workspace number $ws9
+bindsym $mod+0 workspace number $ws10
+
+# move focused container to workspace
+bindsym $mod+Shift+1 move container to workspace number $ws1
+bindsym $mod+Shift+2 move container to workspace number $ws2
+bindsym $mod+Shift+3 move container to workspace number $ws3
+bindsym $mod+Shift+4 move container to workspace number $ws4
+bindsym $mod+Shift+5 move container to workspace number $ws5
+bindsym $mod+Shift+6 move container to workspace number $ws6
+bindsym $mod+Shift+7 move container to workspace number $ws7
+bindsym $mod+Shift+8 move container to workspace number $ws8
+bindsym $mod+Shift+9 move container to workspace number $ws9
+bindsym $mod+Shift+0 move container to workspace number $ws10
+
+# reload the configuration file
+bindsym $mod+Shift+c reload
+# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
+bindsym $mod+Shift+r restart
+# lock the screen
+set $Locker exec "~/.config/i3/i3lock_script.sh"
+
+set $mode_system System (l) lock, (e) logout, (s) suspend, (h) hibernate, (r) reboot, (Shift+s) shutdown
+mode "$mode_system" {
+ bindsym l exec --no-startup-id $Locker, mode "default"
+ bindsym e exec --no-startup-id i3-msg exit, mode "default"
+ bindsym s exec --no-startup-id $Locker && systemctl suspend, mode "default"
+ bindsym h exec --no-startup-id $Locker && systemctl hibernate, mode "default"
+ bindsym r exec --no-startup-id systemctl reboot, mode "default"
+ bindsym Shift+s exec --no-startup-id systemctl poweroff -i, mode "default"
+
+ # back to normal: Enter or Escape
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+}
+
+bindsym $mod+Shift+e mode "$mode_system"
+
+
+# resize window (you can also use the mouse for that)
+mode "resize" {
+ # These bindings trigger as soon as you enter the resize mode
+
+ # Pressing left will shrink the window’s width.
+ # Pressing right will grow the window’s width.
+ # Pressing up will shrink the window’s height.
+ # Pressing down will grow the window’s height.
+ bindsym h resize shrink width 10 px or 10 ppt
+ bindsym j resize grow height 10 px or 10 ppt
+ bindsym k resize shrink height 10 px or 10 ppt
+ bindsym l resize grow width 10 px or 10 ppt
+
+ # same bindings, but for the arrow keys
+ bindsym Left resize shrink width 10 px or 10 ppt
+ bindsym Down resize grow height 10 px or 10 ppt
+ bindsym Up resize shrink height 10 px or 10 ppt
+ bindsym Right resize grow width 10 px or 10 ppt
+
+ # back to normal: Enter or Escape or $mod+r
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+ bindsym $mod+r mode "default"
+}
+
+bindsym $mod+r mode "resize"
+
+# Start Polybar
+exec_always --no-startup-id .config/polybar/launch.sh
+
+# Hotkeys for opening programs
+bindsym $aux+f exec termite -e ~/.config/vifm/scripts/vifmrun
+bindsym $aux+t exec ./.telegram/Telegram
+## Languages
+bindsym $aux+Shift+e exec setxkbmap es
+bindsym $aux+Shift+u exec setxkbmap us
+## Screnshots
+bindsym Print escrotum "~/Imágenes/%Y-%m-%d-%H%M%S.png"
+bindsym Ctrl+Print exec escrotum -s "~/Imágenes/%Y-%m-%d-%H%M%S.png"
+bindsym Ctrl+Shift+Print exec escrotum -s -C
+
+
+# Disable focus follows
+focus_follows_mouse no
+
+# Asign workspaces
+assign [class="Brave"] $ws1
+assign [class="Emacs"] $ws2
+assign [class="Postman"] $ws2
+assign [class="Terminator"] $ws3
+for_window [class = "DBeaver"] move to workspace $ws2
+assign [class="Slack"] $ws4
+assign [class="Telegram"] $ws4
+assign [class="Keybase"] $ws4
+assign [class="Franz"] $ws4
+assign [class="Mailspring"] $ws5
+assign [class="MineTime"] $ws5
+for_window [class = "Spotify"] move to workspace $ws6
+
+# Open specific applications in floating mode
+for_window [title="File Transfer*"] floating enable
+for_window [class="Galculator"] floating enable border pixel 1
+for_window [class="GParted"] floating enable border normal
+for_window [class="Nitrogen"] floating enable sticky enable border normal
+
+
+# Autostarts
+exec --no-startup-id i3-msg 'exec /usr/bin/minetime'
+exec --no-startup-id i3-msg 'exec /usr/bin/mailspring'
+exec --no-startup-id i3-msg 'exec /usr/bin/nextcloud'
+exec_always --no-startup-id .config/conky/start.sh
+exec --no-startup-id i3-msg 'exec /usr/bin/emacs'
+exec --no-startup-id i3-msg 'exec /usr/bin/brave'
+exec --no-startup-id i3-msg 'exec /usr/bin/terminator'
+exec --no-startup-id i3-msg '~/.telegram/Telegram'
+exec --no-startup-id i3-msg '/usr/bin/pasystray'
+exec --no-startup-id i3-msg 'exec /opt/Mullvad\ VPN/mullvad-gui --no-sandbox'
+exec --no-startup-id nitrogen --restore
+
+# Window colors
+# class border backgr. text indicator child_border
+client.focused #000000 #75D85A #424242 #2e9ef4 #000000
+client.focused_inactive #000000 #5f676a #ffffff #484e50 #000000
+client.unfocused #000000 #204D14 #424242 #292d2e #000000
+client.urgent #000000 #900000 #ffffff #900000 #000000
+client.placeholder #000000 #0c0c0c #ffffff #000000 #000000
+
diff --git a/.config/i3/i3lock_script.sh b/.config/i3/i3lock_script.sh
new file mode 100755
index 00000000..e8c13e31
--- /dev/null
+++ b/.config/i3/i3lock_script.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+scrot /tmp/screen.png
+xwobf -s 11 /tmp/screen.png
+i3lock -i /tmp/screen.png
+rm /tmp/screen.png
diff --git a/.config/i3/i3status_script.sh b/.config/i3/i3status_script.sh
new file mode 100755
index 00000000..8b39354a
--- /dev/null
+++ b/.config/i3/i3status_script.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+i3status --config ~/.config/i3status/config | while :
+do
+ read line
+ LG=$(setxkbmap -query | awk '/layout/{print $2}')
+ if [ $LG == "es" ]
+ then
+ dat="[{ \"full_text\": \"LANG: $LG\", \"color\":\"#88b090\" },"
+ else
+ dat="[{ \"full_text\": \"LANG: $LG\", \"color\":\"#e89393\" },"
+ fi
+ echo "${line/[/$dat}" || exit 1
+done
diff --git a/.config/i3status/config b/.config/i3status/config
new file mode 100644
index 00000000..193165a9
--- /dev/null
+++ b/.config/i3status/config
@@ -0,0 +1,77 @@
+###############################################################################
+# ceerious i3 status config
+# see "man i3status" for documentation.
+#
+# It is important that this file is edited as UTF-8.
+# The following line should contain a sharp s:
+# ß
+# If the above line is not correctly displayed, fix your editor first!
+###############################################################################
+
+general {
+ interval = 1
+ colors = true
+ color_good = '#88b090'
+ color_degraded = '#ccdc90'
+ color_bad = '#e89393'
+ output_format = i3bar
+}
+
+order += "volume master"
+order += "disk /"
+order += "wireless _first_"
+order += "battery 0"
+order += "cpu_temperature 0"
+order += "cpu_usage 0"
+order += "load"
+order += "tztime local"
+
+wireless _first_ {
+ format_up = "%quality %essid %ip"
+ format_down = ""
+}
+
+battery 0 {
+ format = "%status %percentage %remaining"
+ format_down = ""
+ last_full_capacity = true
+ integer_battery_capacity = true
+ low_threshold = 11
+ threshold_type = percentage
+ hide_seconds = true
+ status_chr = " "
+ status_bat = " "
+ status_unk = " "
+ status_full = " "
+}
+
+tztime local {
+ format = " %A %e.%B %H:%M:%S"
+}
+
+load {
+ format = " %1min"
+}
+
+cpu_usage {
+ format = " %usage"
+}
+
+cpu_temperature 0 {
+ format = " %degrees°C"
+}
+
+disk "/" {
+ format = " %avail"
+ prefix_type = custom
+ low_threshold = 20
+ threshold_type = percentage_avail
+}
+
+volume master {
+ format = "%volume "
+ format_muted = " "
+ device = "default"
+ mixer = "Master"
+ mixer_idx = 0
+}
\ No newline at end of file
diff --git a/.config/nitrogen/bg-saved.cfg b/.config/nitrogen/bg-saved.cfg
new file mode 100644
index 00000000..46a3b3f0
--- /dev/null
+++ b/.config/nitrogen/bg-saved.cfg
@@ -0,0 +1,4 @@
+[xin_-1]
+file=/home/roger/.wallpapers/./c3uhsgo1vx541.jpg
+mode=0
+bgcolor=#000000
diff --git a/.config/nitrogen/nitrogen.cfg b/.config/nitrogen/nitrogen.cfg
new file mode 100644
index 00000000..34768c35
--- /dev/null
+++ b/.config/nitrogen/nitrogen.cfg
@@ -0,0 +1,12 @@
+[geometry]
+posx=1913
+posy=71
+sizex=1895
+sizey=2016
+
+[nitrogen]
+view=icon
+recurse=true
+sort=alpha
+icon_caps=false
+dirs=
diff --git a/.config/omf/bundle b/.config/omf/bundle
new file mode 100644
index 00000000..abef50cd
--- /dev/null
+++ b/.config/omf/bundle
@@ -0,0 +1,2 @@
+theme bobthefish
+theme default
diff --git a/.config/omf/channel b/.config/omf/channel
new file mode 100644
index 00000000..2bf5ad04
--- /dev/null
+++ b/.config/omf/channel
@@ -0,0 +1 @@
+stable
diff --git a/.config/omf/theme b/.config/omf/theme
new file mode 100644
index 00000000..ff8a58d2
--- /dev/null
+++ b/.config/omf/theme
@@ -0,0 +1 @@
+bobthefish
diff --git a/.config/polybar/config b/.config/polybar/config
new file mode 100644
index 00000000..74342e01
--- /dev/null
+++ b/.config/polybar/config
@@ -0,0 +1,216 @@
+[colors]
+accent = #fba922
+
+[bar/top]
+enable-ipc = true
+width = 100%
+height = 40
+
+;background = #222
+background = #1f1f1f
+foreground = #eee
+
+border-bottom = 1
+border-bottom-color = #333
+
+overline-size = 10
+overline-color = ${self.background}
+underline-size = 10
+underline-color = ${self.background}
+
+padding-left = 0
+padding-right = 0
+module-margin-left = 3
+module-margin-right = 3
+
+font-0 = NotoSans-Regular:size=20;0
+font-1 = MaterialIcons:size=20;2
+font-2 = Termsynu:size=20;0
+font-3 = Siji:pixelsize=20;1
+font-4 = FontAwesome:size=20;0
+modules-left = mpd
+modules-center = xwindow
+modules-right = wireless-network battery
+
+
+tray-position = right
+
+[bar/bottom]
+;monitor = eDP-1
+bottom = true
+width = 100%
+height = 40
+
+background = #1c1c1c
+foreground = #eefafafa
+
+overline-size = 3
+overline-color = ${colors.accent}
+underline-size = 3
+underline-color = ${colors.accent}
+
+;border-color = #ff0000
+border-top-size = 3
+border-top-color = #3d3d3d
+;border-bottom = 0
+;border-bottom-color = #333333
+
+spacing = 2
+;padding-right = 4
+padding-left = 0
+padding-right = 0
+module-margin-left = 0
+module-margin-right = 4
+
+font-0 = NotoSans-Regular:size=20;0
+font-1 = Unifont:size=20;0
+font-2 = FontAwesome:size=20;0
+font-3 = NotoSans-Regular:size=20;-1
+font-4 = Unifont:size=20;0
+font-5 = Termsynu:size=20;0
+
+modules-left = i3
+;modules-center =
+modules-right = pulseaudio xkeyboard xbacklight cpu memory clock
+;modules-right = memory
+
+[module/fs-root]
+type = internal/fs
+mount-0 = /
+label-mounted = %{F#e60053}%percentage_used%%%{F-} used of %mountpoint%
+
+
+[module/xbacklight]
+type = internal/xbacklight
+format-prefix = "BL: "
+label = %percentage:2%%
+
+[module/i3]
+type = internal/i3
+format =
+pin-workspaces = true
+
+ws-icon-0 = term;
+ws-icon-1 = web;
+ws-icon-2 = code;
+ws-icon-3 = music;
+ws-icon-4 = irssi;
+
+label-dimmed-underline = ${root.background}
+
+label-focused = %icon% %name%
+label-focused-foreground = #f3f3f3
+label-focused-background = #3f3f3f
+label-focused-underline = #75d85a
+label-focused-font = 4
+label-focused-padding = 4
+
+label-unfocused = %icon% %name%
+label-unfocused-underline = #555555
+label-unfocused-font = 4
+label-unfocused-padding = 4
+
+label-urgent = %icon% %name%
+label-urgent-foreground = #000000
+label-urgent-background = #bd2c40
+label-urgent-underline = #9b0a20
+label-urgent-font = 4
+label-urgent-padding = 4
+
+label-visible = %icon% %name%
+label-visible-foreground = #55ffffff
+label-visible-font = 4
+label-visible-padding = 4
+
+[module/cpu]
+type = internal/cpu
+interval = 2
+format-prefix = " "
+format-underline = #f90000
+label = %percentage:2%%
+
+[module/memory]
+type = internal/memory
+interval = 2
+format-prefix = " "
+format-underline = #4bffdc
+label = %percentage_used%%
+
+[module/wireless-network]
+type = internal/network
+interface = wlp2s0
+interval = 2.0
+ping-interval = 10
+
+label-connected = %essid%
+label-disconnected = not connected
+label-disconnected-foreground = #66
+
+
+[module/mpd]
+type = internal/mpd
+format-online =
+format-online-overline = ${root.background}
+format-online-underline = ${root.background}
+format-offline =
+label-offline = mpd is off
+
+icon-play =
+icon-pause =
+icon-stop =
+icon-prev =
+icon-next =
+icon-random =
+icon-repeat =
+
+toggle-on-foreground =
+toggle-off-foreground = #55
+
+bar-progress-width = 45
+bar-progress-format = %{+o +u}%fill%%{-o -u}%indicator%%{+o +u}%empty%%{-u -o}
+; bar-progress-indicator = |
+bar-progress-indicator = █
+bar-progress-indicator-foreground = #ff
+bar-progress-indicator-font = 3
+; bar-progress-fill = ─
+bar-progress-fill = █
+bar-progress-fill-foreground = #bb
+bar-progress-fill-font = 3
+; bar-progress-empty = ─
+bar-progress-empty = ▒
+bar-progress-empty-font = 3
+bar-progress-empty-foreground = #44
+
+[module/clock]
+type = internal/date
+interval = 5
+format-padding = 5
+format-foreground = #fff
+date = %%{F#bb} %d-%m-%Y%%{F-} %%{F#ee} %H:%M%%{F-}
+
+[module/battery]
+type = internal/battery
+full-at = 100
+format-charging = %{T3} %{T-}
+format-discharging = %{T3} %{T-}
+format-full = %{T3}
+label-charging-font = 3
+label-discharging-font = 3
+label-full = '100%'
+;label-full-font = 3
+
+[module/xwindow]
+type = internal/xwindow
+label-maxlen = 75
+label-foreground = #bbb
+
+[module/xkeyboard]
+type = internal/xkeyboard
+format-prefix = "layout: "
+label-layout = %layout%
+
+[module/pulseaudio]
+type = internal/pulseaudio
+label-volume = %percentage%%
+label-muted =
+label-muted-foreground = #666
diff --git a/.config/polybar/launch.sh b/.config/polybar/launch.sh
new file mode 100755
index 00000000..9df22040
--- /dev/null
+++ b/.config/polybar/launch.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+# Terminate already running bar instances
+killall -q polybar
+
+# Wait until the processes have been shut down
+while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done
+
+# Launch Polybar, using default config location ~/.config/polybar/config
+polybar --config=$HOME/.config/polybar/config top &
+polybar --config=$HOME/.config/polybar/config bottom &
+
+echo "Polybar launched..."
diff --git a/.config/rofi/config b/.config/rofi/config
new file mode 100644
index 00000000..efa0bd68
--- /dev/null
+++ b/.config/rofi/config
@@ -0,0 +1,6 @@
+configuration {
+ modi: "window,drun,ssh,combi";
+ theme: DarkBlue;
+ font: "hack 22";
+ combi-modi: "window,drun,ssh";
+}
diff --git a/.config/terminator/config b/.config/terminator/config
new file mode 100644
index 00000000..be3c3621
--- /dev/null
+++ b/.config/terminator/config
@@ -0,0 +1,33 @@
+[global_config]
+ borderless = True
+ extra_styling = False
+ suppress_multiple_term_dialog = True
+ title_transmit_bg_color = "#75d85a"
+ title_transmit_fg_color = "#000000"
+[keybindings]
+ go_down = Down
+ go_left = Left
+ go_right = Right
+ go_up = Up
+ resize_down = Down
+ resize_left = Left
+ resize_right = Right
+ resize_up = Up
+[layouts]
+ [[default]]
+ [[[child1]]]
+ parent = window0
+ profile = default
+ type = Terminal
+ [[[window0]]]
+ parent = ""
+ type = Window
+[plugins]
+[profiles]
+ [[default]]
+ cursor_color = "#aaaaaa"
+ font = Monospace 12
+ palette = "#000000:#cd0000:#00cd00:#cdcd00:#0000ee:#cd00cd:#00cdcd:#e5e5e5:#7f7f7f:#ff0000:#00ff00:#ffff00:#5c5cff:#ff00ff:#00ffff:#ffffff"
+ scrollbar_position = hidden
+ show_titlebar = False
+ use_system_font = False
diff --git a/.config/termite/config b/.config/termite/config
new file mode 100644
index 00000000..1b470f57
--- /dev/null
+++ b/.config/termite/config
@@ -0,0 +1,2 @@
+[options]
+font = Monospace 12
diff --git a/.config/vifm/colors/Default.vifm b/.config/vifm/colors/Default.vifm
new file mode 100644
index 00000000..c47cbfa5
--- /dev/null
+++ b/.config/vifm/colors/Default.vifm
@@ -0,0 +1,81 @@
+" You can edit this file by hand.
+" The " character at the beginning of a line comments out the line.
+" Blank lines are ignored.
+
+" The Default color scheme is used for any directory that does not have
+" a specified scheme and for parts of user interface like menus. A
+" color scheme set for a base directory will also
+" be used for the sub directories.
+
+" The standard ncurses colors are:
+" Default = -1 = None, can be used for transparency or default color
+" Black = 0
+" Red = 1
+" Green = 2
+" Yellow = 3
+" Blue = 4
+" Magenta = 5
+" Cyan = 6
+" White = 7
+
+" Light versions of colors are also available (set bold attribute):
+" LightBlack
+" LightRed
+" LightGreen
+" LightYellow
+" LightBlue
+" LightMagenta
+" LightCyan
+" LightWhite
+
+" Available attributes (some of them can be combined):
+" bold
+" underline
+" reverse or inverse
+" standout
+" italic (on unsupported systems becomes reverse)
+" none
+
+" Vifm supports 256 colors you can use color numbers 0-255
+" (requires properly set up terminal: set your TERM environment variable
+" (directly or using resources) to some color terminal name (e.g.
+" xterm-256color) from /usr/lib/terminfo/; you can check current number
+" of colors in your terminal with tput colors command)
+
+" highlight group cterm=attrs ctermfg=foreground_color ctermbg=background_color
+
+highlight clear
+
+highlight Win cterm=none ctermfg=white ctermbg=black
+highlight Directory cterm=bold ctermfg=cyan ctermbg=default
+highlight Link cterm=bold ctermfg=yellow ctermbg=default
+highlight BrokenLink cterm=bold ctermfg=red ctermbg=default
+highlight Socket cterm=bold ctermfg=magenta ctermbg=default
+highlight Device cterm=bold ctermfg=red ctermbg=default
+highlight Fifo cterm=bold ctermfg=cyan ctermbg=default
+highlight Executable cterm=bold ctermfg=green ctermbg=default
+highlight Selected cterm=bold ctermfg=magenta ctermbg=default
+highlight CurrLine cterm=bold,reverse ctermfg=default ctermbg=default
+highlight TopLine cterm=none ctermfg=black ctermbg=white
+highlight TopLineSel cterm=bold ctermfg=black ctermbg=default
+highlight StatusLine cterm=bold ctermfg=black ctermbg=white
+highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black
+highlight CmdLine cterm=none ctermfg=white ctermbg=black
+highlight ErrorMsg cterm=none ctermfg=red ctermbg=black
+highlight Border cterm=none ctermfg=black ctermbg=white
+highlight JobLine cterm=bold,reverse ctermfg=black ctermbg=white
+highlight SuggestBox cterm=bold ctermfg=default ctermbg=default
+highlight CmpMismatch cterm=bold ctermfg=white ctermbg=red
+highlight AuxWin cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight TabLine cterm=none ctermfg=white ctermbg=black
+highlight TabLineSel cterm=bold,reverse ctermfg=default ctermbg=default
+highlight User1 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User2 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User3 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User4 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User5 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User6 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User7 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User8 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User9 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight OtherWin cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
diff --git a/.config/vifm/scripts/vifmimg b/.config/vifm/scripts/vifmimg
new file mode 100755
index 00000000..668a340b
--- /dev/null
+++ b/.config/vifm/scripts/vifmimg
@@ -0,0 +1,154 @@
+#!/usr/bin/env bash
+readonly ID_PREVIEW="preview"
+
+#PLAY_GIF="yes"
+# By enabling this option the GIF will be animated, by leaving it commented like it
+# is now will make the gif previews behave the same way as video previews.
+
+#AUTO_REMOVE="yes"
+# By enabling this option the script will remove the preview file after it is drawn
+# and by doing so the preview will always be up-to-date with the file.
+# This however, requires more CPU and therefore affects the overall performance.
+
+# The messy code below is for moving pages in pdf files in the vifm file preview by
+# utilizing the < and > keys which will be bound to `vifmimg inc` or `vifmimg dec`.
+PDF_PAGE_CONFIG="$HOME/.config/vifm/vifmimgpdfpage"
+PDF_FILE_CONFIG="$HOME/.config/vifm/vifmimgpdffile"
+PDF_PAGE=1
+PDF_FILE=""
+# Initialize the variables and required files
+[[ -f "$PDF_PAGE_CONFIG" ]] && PDF_PAGE=$(cat $PDF_PAGE_CONFIG) || touch $PDF_PAGE_CONFIG
+[[ -f "$PDF_FILE_CONFIG" ]] && PDF_FILE=$(cat $PDF_FILE_CONFIG) || touch $PDF_FILE_CONFIG
+
+
+# Create temporary working directory if the directory structure doesn't exist
+if [[ ! -d "/tmp$PWD/" ]]; then
+ mkdir -p "/tmp$PWD/"
+fi
+
+function inc() {
+ VAL="$(cat $PDF_PAGE_CONFIG)"
+ echo "$(expr $VAL + 1)" > $PDF_PAGE_CONFIG
+}
+
+function dec() {
+ VAL="$(cat $PDF_PAGE_CONFIG)"
+ echo "$(expr $VAL - 1)" > $PDF_PAGE_CONFIG
+ if [[ $VAL -le 0 ]]; then
+ echo 0 > $PDF_PAGE_CONFIG
+ fi
+}
+
+function previewclear() {
+ declare -p -A cmd=([action]=remove [identifier]="$ID_PREVIEW") \
+ > "$FIFO_UEBERZUG"
+}
+
+function fileclean() {
+ if [[ -f "/tmp$PWD/$6.png" ]]; then
+ rm -f "/tmp$PWD/$6.png"
+ elif [[ -d "/tmp$PWD/$6/" ]]; then
+ rm -rf "/tmp$PWD/$6/"
+ fi
+}
+
+function preview() {
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="$PWD/$6") \
+ > "$FIFO_UEBERZUG"
+}
+
+function previewvideo() {
+ if [[ ! -f "/tmp$PWD/$6.png" ]]; then
+ ffmpegthumbnailer -i "$PWD/$6" -o "/tmp$PWD/$6.png" -s 0 -q 10
+ fi
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="/tmp$PWD/$6.png") \
+ > "$FIFO_UEBERZUG"
+}
+
+function previewepub() {
+ if [[ ! -f "/tmp$PWD/$6.png" ]]; then
+ epub-thumbnailer "$6" "/tmp$PWD/$6.png" 1024
+ fi
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="/tmp$PWD/$6.png") \
+ > "$FIFO_UEBERZUG"
+}
+
+function previewgif() {
+ if [[ ! -d "/tmp$PWD/$6/" ]]; then
+ mkdir -p "/tmp$PWD/$6/"
+ convert -coalesce "$PWD/$6" "/tmp$PWD/$6/$6.png"
+ fi
+ if [[ ! -z "$PLAY_GIF" ]]; then
+ for frame in $(ls -1 /tmp$PWD/$6/$6*.png | sort -V); do
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="$frame") \
+ > "$FIFO_UEBERZUG"
+ # Sleep between frames to make the animation smooth.
+ sleep .07
+ done
+ else
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="/tmp$PWD/$6/$6-0.png") \
+ > "$FIFO_UEBERZUG"
+ fi
+}
+
+function previewpdf() {
+ if [[ ! "$6" == "$PDF_FILE" ]]; then
+ PDF_PAGE=1
+ echo 1 > $PDF_PAGE_CONFIG
+ rm -f "/tmp$PWD/$6.png"
+ fi
+
+ if [[ ! "$PDF_PAGE" == "1" ]] && [[ -f "/tmp$PWD/$6.png" ]]; then
+ rm -f "/tmp$PWD/$6.png"
+ fi
+
+ if [[ ! -f "/tmp$PWD/$6.png" ]]; then
+ pdftoppm -png -f $PDF_PAGE -singlefile "$6" "/tmp$PWD/$6"
+ fi
+ echo "$6" > $PDF_FILE_CONFIG
+
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="/tmp$PWD/$6.png") \
+ > "$FIFO_UEBERZUG"
+}
+
+
+function previewmagick() {
+ if [[ ! -f "/tmp$PWD/$6.png" ]]; then
+ convert -thumbnail $(identify -format "%wx%h" "$6") "$PWD/$6" "/tmp$PWD/$6.png"
+ fi
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="/tmp$PWD/$6.png") \
+ > "$FIFO_UEBERZUG"
+}
+
+
+
+function main() {
+ case "$1" in
+ "inc") inc "$@" ;;
+ "dec") dec "$@" ;;
+ "clear") previewclear "$@" ;;
+ "clean") fileclean "$@" ;;
+ "draw") preview "$@" ;;
+ "videopreview") previewvideo "$@" ;;
+ "epubpreview") previewepub "$@" ;;
+ "gifpreview") previewgif "$@" ;;
+ "pdfpreview") previewpdf "$@" ;;
+ "magickpreview") previewmagick "$@" ;;
+ "*") echo "Unknown command: '$@'" ;;
+ esac
+}
+main "$@"
diff --git a/.config/vifm/scripts/vifmrun b/.config/vifm/scripts/vifmrun
new file mode 100755
index 00000000..a032b418
--- /dev/null
+++ b/.config/vifm/scripts/vifmrun
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+export FIFO_UEBERZUG="/tmp/vifm-ueberzug-${PPID}"
+
+function cleanup {
+ rm "$FIFO_UEBERZUG" 2>/dev/null
+ pkill -P $$ 2>/dev/null
+}
+pkill -P $$ 2>/dev/null
+rm "$FIFO_UEBERZUG" 2>/dev/null
+mkfifo "$FIFO_UEBERZUG" >/dev/null
+trap cleanup EXIT 2>/dev/null
+tail --follow "$FIFO_UEBERZUG" | ueberzug layer --silent --parser bash 2>&1 >/dev/null &
+
+vifm
+cleanup
diff --git a/.config/vifm/vifm-help.txt b/.config/vifm/vifm-help.txt
new file mode 100644
index 00000000..d4880650
--- /dev/null
+++ b/.config/vifm/vifm-help.txt
@@ -0,0 +1,6103 @@
+VIFM(1) General Commands Manual VIFM(1)
+
+
+
+NAME
+ vifm - vi file manager
+
+SYNOPSIS
+ vifm [OPTION]...
+ vifm [OPTION]... path
+ vifm [OPTION]... path path
+
+DESCRIPTION
+ Vifm is an ncurses based file manager with vi like keybindings. If you
+ use vi, vifm gives you complete keyboard control over your files with-
+ out having to learn a new set of commands.
+
+OPTIONS
+ vifm starts in the current directory unless it is given a different di-
+ rectory on the command line or 'vifminfo' option includes "savedirs"
+ (in which case last visited directories are used as defaults).
+
+ - Read list of files from standard input stream and compose custom
+ view out of them (see "Custom views" section). Current working
+ directory is used as a base for relative paths.
+
+ Starts Vifm in the specified path.
+
+
+ Starts Vifm in the specified paths.
+
+ Specifying two directories triggers split view even when vifm was in
+ single-view mode on finishing previous session. To suppress this be-
+ haviour :only command can be put in the vifmrc file.
+
+ When only one path argument is found on command-line, the left/top pane
+ is automatically set as the current view.
+
+ Paths to files are also allowed in case you want vifm to start with
+ some archive opened.
+
+ --select
+ Open parent directory of the given path and select specified
+ file in it.
+
+ -f Makes vifm instead of opening files write selection to
+ $VIFM/vimfiles and quit.
+
+ --choose-files |-
+ Sets output file to write selection into on exit instead of
+ opening files. "-" means standard output. Use empty value to
+ disable it.
+
+ --choose-dir |-
+ Sets output file to write last visited directory into on exit.
+ "-" means standard output. Use empty value to disable it.
+
+ --delimiter
+ Sets separator for list of file paths written out by vifm.
+ Empty value means null character. Default is new line charac-
+ ter.
+
+ --on-choose
+ Sets command to be executed on selected files instead of opening
+ them. The command may use any of macros described in "Command
+ macros" section below. The command is executed once for whole
+ selection.
+
+ --logging[=]
+ Log some operational details $VIFM/log. If the optional startup
+ log path is specified and permissions allow to open it for writ-
+ ing, then logging of early initialization (before value of $VIFM
+ is determined) is put there.
+
+ --server-list
+ List available server names and exit.
+
+ --server-name
+ Name of target or this instance (sequential numbers are appended
+ on name conflict).
+
+ --remote
+ Sends the rest of the command line to another instance of vifm,
+ --server-name is treated just like any other argument and should
+ precede --remote on the command line. When there is no server,
+ quits silently. There is no limit on how many arguments can be
+ processed. One can combine --remote with -c or + to execute commands in already running instance of vifm.
+ See also "Client-Server" section below.
+
+ --remote-expr
+ passes expression to vifm server and prints result. See also
+ "Client-Server" section below.
+
+ -c or +
+ Run command-line mode on startup. Commands in such
+ arguments are executed in the order they appear in command line.
+ Commands with spaces or special symbols must be enclosed in dou-
+ ble or single quotes or all special symbols should be escaped
+ (the exact syntax strongly depends on shell). "+" argument is
+ equivalent to "$" and thus picks last item of of the view.
+
+ --help, -h
+ Show a brief command summary and exit vifm.
+
+ --version, -v
+ Show version information and quit.
+
+ --no-configs
+ Skip reading vifmrc and vifminfo.
+
+
+ See "Startup" section below for the explanations on $VIFM.
+
+General keys
+ Ctrl-C or Escape
+ cancel most operations (see "Cancellation" section below), clear
+ all selected files.
+
+ Ctrl-L clear and redraw the screen.
+
+Basic Movement
+ The basic vi key bindings are used to move through the files and pop-up
+ windows.
+
+ k, gk, or Ctrl-P
+ move cursor up one line.
+
+ j, gj or Ctrl-N
+ move cursor down one line.
+
+ h when 'lsview' is off move up one directory (moves to parent di-
+ rectory node in tree view), otherwise move left one file.
+
+ l when 'lsview' is off move into a directory or launches a file,
+ otherwise move right one file.
+
+ gg move to the first line of the file list.
+
+ G move to the last line in the file list.
+
+ gh go up one directory regardless of view representation (regular,
+ ls-like). Also can be used to leave custom views including tree
+ view.
+
+ gl or Enter
+ enter directory or launch a file.
+
+ H move to the first file in the window.
+
+ M move to the file in the middle of the window.
+
+ L move to the last file in the window.
+
+ Ctrl-F or Page Down
+ move forward one page.
+
+ Ctrl-B or Page Up
+ move back one page.
+
+ Ctrl-D jump back one half page.
+
+ Ctrl-U jump forward one half page.
+
+ n% move to the file that is n percent from the top of the list (for
+ example 25%).
+
+ 0 or ^ move cursor to the first column. See 'lsview' option descrip-
+ tion.
+
+ $ move cursor to the last column. See 'lsview' option descrip-
+ tion.
+
+ Space switch file lists.
+
+ gt switch to the next tab (wrapping around).
+
+ {n}gt switch to the tab number {n} (wrapping around).
+
+ gT switch to the previous tab (wrapping around).
+
+ {n}gT switch to {n}-th previous tab.
+
+Movement with Count
+ Most movement commands also accept a count, 12j would move down 12
+ files.
+
+ [count]%
+ move to percent of the file list.
+
+ [count]j
+ move down [count] files.
+
+ [count]k
+ move up [count] files.
+
+ [count]G or [count]gg
+ move to list position [count].
+
+ [count]h
+ go up [count] directories.
+
+Scrolling panes
+ zt redraw pane with file in top of list.
+
+ zz redraw pane with file in center of list.
+
+ zb redraw pane with file in bottom of list.
+
+ Ctrl-E scroll pane one line down.
+
+ Ctrl-Y scroll pane one line up.
+
+Pane manipulation
+ Second character can be entered with or without Control key.
+
+ Ctrl-W H
+ move the pane to the far left.
+
+ Ctrl-W J
+ move the pane to the very bottom.
+
+ Ctrl-W K
+ move the pane to the very top.
+
+ Ctrl-W L
+ move the pane to the far right.
+
+
+ Ctrl-W h
+ switch to the left pane.
+
+ Ctrl-W j
+ switch to the pane below.
+
+ Ctrl-W k
+ switch to the pane above.
+
+ Ctrl-W l
+ switch to the right pane.
+
+
+ Ctrl-W b
+ switch to bottom-right window.
+
+ Ctrl-W t
+ switch to top-left window.
+
+
+ Ctrl-W p
+ switch to previous window.
+
+ Ctrl-W w
+ switch to other pane.
+
+
+ Ctrl-W o
+ leave only one pane.
+
+ Ctrl-W s
+ split window horizontally.
+
+ Ctrl-W v
+ split window vertically.
+
+
+ Ctrl-W x
+ exchange panes.
+
+ Ctrl-W z
+ quit preview pane or view modes.
+
+
+ Ctrl-W -
+ decrease size of the view by count.
+
+ Ctrl-W +
+ increase size of the view by count.
+
+ Ctrl-W <
+ decrease size of the view by count.
+
+ Ctrl-W >
+ increase size of the view by count.
+
+
+ Ctrl-W |
+ set current view size to count.
+
+ Ctrl-W _
+ set current view size to count.
+
+ Ctrl-W =
+ make size of two views equal.
+
+ For Ctrl-W +, Ctrl-W -, Ctrl-W <, Ctrl-W >, Ctrl-W | and Ctrl-W _ com-
+ mands count can be given before and/or after Ctrl-W. The resulting
+ count is a multiplication of those two. So "2 Ctrl-W 2 -" decreases
+ window size by 4 lines or columns.
+
+ Ctrl-W | and Ctrl-W _ maximise current view by default.
+
+Marks
+ Marks are set the same way as they are in vi.
+
+ You can use these characters for marks [a-z][A-Z][0-9].
+
+ m[a-z][A-Z][0-9]
+ set a mark for the file at the current cursor position.
+
+ '[a-z][A-Z][0-9]
+ navigate to the file set for the mark.
+
+
+ There are also several special marks that can't be set manually:
+
+ - ' (single quote) - previously visited directory of the view, thus
+ hitting '' allows switching between two last locations
+
+ - < - the first file of the last visually selected block
+
+ - > - the last file of the last visually selected block
+
+Searching
+ /regular expression pattern
+ search for files matching regular expression in forward direc-
+ tion and advance cursor to next match.
+
+ / perform forward search with top item of search pattern history.
+
+ ?regular expression pattern
+ search for files matching regular expression in backward direc-
+ tion and advance cursor to previous match.
+
+ ? perform backward search with top item of search pattern history.
+
+ Trailing slash for directories is taken into account, so /\/ searches
+ for directories and symbolic links to directories. At the moment //
+ works too, but this can change in the future, so consider escaping the
+ slash if not typing pattern by hand.
+
+ Matches are automatically selected if 'hlsearch' is set. Enabling
+ 'incsearch' makes search interactive. 'ignorecase' and 'smartcase' op-
+ tions affect case sensitivity of search queries.
+
+
+ [count]n
+ go to the next file matching last search pattern. Takes last
+ search direction into account.
+
+ [count]N
+ go to the previous file matching last search pattern. Takes
+ last search direction into account.
+
+ If 'hlsearch' option is set, hitting n/N to perform search and go to
+ the first matching item resets current selection in normal mode. It is
+ not the case if search was already performed on files in the directory,
+ thus selection is not reset after clearing selection with escape key
+ and hitting n/N key again.
+
+ Note: vifm uses extended regular expressions for / and ?.
+
+
+ [count]f[character]
+ search forward for file with [character] as first character in
+ name. Search wraps around the end of the list.
+
+ [count]F[character]
+ search backward for file with [character] as first character in
+ name. Search wraps around the end of the list.
+
+ [count];
+ find the next match of f or F.
+
+ [count],
+ find the previous match of f or F.
+
+ Note: f, F, ; and , wrap around list beginning and end when they are
+ used alone and they don't wrap when they are used as selectors.
+
+File Filters
+ There are three basic file filters:
+
+ - dot files filter (does not affect "." and ".." special directories,
+ whose appearance is controlled by the 'dotdirs' option), see 'dot-
+ files' option;
+
+ - permanent filter;
+
+ - local filter (see description of the "=" normal mode command).
+
+ Permanent filter essentially allows defining a group of files names
+ which are not desirable to be seen by default, like temporary or backup
+ files, which might be created alongside normal ones. Just like you
+ don't usually need to see hidden dot files (files starting with a dot).
+ Local filter on the other hand is for temporary immediate filtering of
+ file list at hand, to get rid of uninterested files in the view or to
+ make it possible to use % range in a :command.
+
+ For the purposes of more deterministic editing permanent filter is
+ split into two parts:
+
+ - one edited explicitly via :filter command;
+
+ - another one which is edited implicitly via zf shortcut.
+
+ Files are tested against both parts and a match counts if at least one
+ of the parts matched.
+
+
+ Each file list has its own copy of each filter.
+
+ Filtered files are not checked in / search or :commands.
+
+ Files and directories are filtered separately. This is done by append-
+ ing a slash to a directory name before testing whether it matches the
+ filter. Examples:
+
+
+ " filter directories which names end with '.files'
+ :filter /^.*\.files\/$/
+
+ " filter files which names end with '.d'
+ :filter {*.d}
+
+ " filter files and directories which names end with '.o'
+ :filter /^.*\.o\/?$/
+
+ Note: vifm uses extended regular expressions.
+
+ The basic vim folding key bindings are used for managing filters.
+
+
+ za toggle visibility of dot files.
+
+ zo show dot files.
+
+ zm hide dot files.
+
+ zf add selected files to permanent filter.
+
+ zO reset permanent filter.
+
+ zR save and reset all filters.
+
+ zr clear local filter.
+
+ zM restore all filters (undoes last zR).
+
+ zd exclude selection or current file from a custom view. Does
+ nothing for regular view. For tree view excluding directory ex-
+ cludes that sub-tree. For compare views zd hides group of adja-
+ cent identical files, count can be specified as 1 to exclude
+ just single file or selected items instead. Files excluded this
+ way are not counted as filtered out and can't be returned unless
+ view is reloaded.
+
+ =regular expression pattern
+ filter out files that don't match regular expression. Whether
+ view is updated as regular expression is changed depends on the
+ value of the 'incsearch' option. This kind of filter is auto-
+ matically reset when directory is changed.
+
+Other Normal Mode Keys
+ [count]:
+ enter command line mode. [count] generates range.
+
+ q: open external editor to prompt for command-line command. See
+ "Command line editing" section for details.
+
+ q/ open external editor to prompt for search pattern to be searched
+ in forward direction. See "Command line editing" section for
+ details.
+
+ q? open external editor to prompt for search pattern to be searched
+ in backward direction. See "Command line editing" section for
+ details.
+
+ q= open external editor to prompt for filter pattern. See "Command
+ line editing" section for details. Unlike other q{x} commands
+ this one doesn't work in Visual mode.
+
+ [count]!! and [count]!
+ enter command line mode with entered ! command. [count] modi-
+ fies range.
+
+ Ctrl-O go backwards through directory history of current view. Nonex-
+ istent directories are automatically skipped.
+
+ Ctrl-I if 'cpoptions' contains "t" flag, and switch active
+ pane just like does, otherwise it goes forward through
+ directory history of current view. Nonexistent directories are
+ automatically skipped.
+
+ Ctrl-G create a window showing detailed information about the current
+ file.
+
+ Shift-Tab
+ enters view mode (works only after activating view pane with
+ :view command).
+
+ ga calculate directory size. Uses cached directory sizes when pos-
+ sible for better performance. As a special case calculating
+ size of ".." entry results in calculation of size of current di-
+ rectory.
+
+ gA like ga, but force update. Ignores old values of directory
+ sizes.
+
+ If file under cursor is selected, each selected item is processed, oth-
+ erwise only current file is updated.
+
+ gf find link destination (like l with 'followlinks' off, but also
+ finds directories).
+
+ gr only for MS-Windows
+ same as l key, but tries to run program with administrative
+ privileges.
+
+ av go to visual mode into selection amending state preserving cur-
+ rent selection.
+
+ gv go to visual mode restoring last selection.
+
+ [reg]gs
+ when no register is specified, restore last t selection (similar
+ to what gv does for visual mode selection). If register is
+ present, then all files listed in that register and which are
+ visible in current view are selected.
+
+ gu
+ make names of selected files lowercase.
+
+ [count]guu and [count]gugu
+ make names of [count] files starting from the current one lower-
+ case. Without [count] only current file is affected.
+
+ gU
+ make names of selected files uppercase.
+
+ [count]gUU and [count]gUgU
+ make names of [count] files starting from the current one upper-
+ case. Without [count] only current file is affected.
+
+ e explore file in the current pane.
+
+ i handle file (even if it's an executable and 'runexec' option is
+ set).
+
+ cw change word is used to rename a file or files.
+
+ cW change WORD is used to change only name of file (without exten-
+ sion).
+
+ cl change link target.
+
+ co only for *nix
+ change file owner.
+
+ cg only for *nix
+ change file group.
+
+ [count]cp
+ change file attributes (permission on *nix and properties on
+ Windows). If [count] is specified, it's treated as numerical
+ argument for non-recursive `chmod` command (of the form
+ [0-7]{3,4}).
+
+ [count]C
+ clone file [count] times.
+
+ [count]dd or d[count]selector
+ move selected file or files to trash directory (if 'trash' op-
+ tion is set, otherwise delete). See "Trash directory" section
+ below.
+
+ [count]DD or D[count]selector
+ like dd and d, but omitting trash directory (even when
+ 'trash' option is set).
+
+ Y, [count]yy or y[count]selector
+ yank selected files.
+
+ p copy yanked files to the current directory or move the files to
+ the current directory if they were deleted with dd or :d[elete]
+ or if the files were yanked from trash directory. See "Trash
+ directory" section below.
+
+ P move the last yanked files. The advantage of using P instead of
+ d followed by p is that P moves files only once. This isn't im-
+ portant in case you're moving files in the same file system
+ where your home directory is, but using P to move files on some
+ other file system (or file systems, in case you want to move
+ files from fs1 to fs2 and your home is on fs3) can save your
+ time.
+
+ al put symbolic links with absolute paths.
+
+ rl put symbolic links with relative paths.
+
+ t select or unselect (tag) the current file.
+
+ u undo last change.
+
+ Ctrl-R redo last change.
+
+ dp in compare view of "ofboth grouppaths" kind, makes corresponding
+ entry of the other pane equal to the current one. The semantics
+ is as follows:
+ - nothing done for identical entries
+ - if file is missing in current view, its pair gets removed
+ - if file is missing or differs in other view, it's replaced
+ - file pairs are defined by matching relative paths
+ File removal obeys 'trash' option. When the option is enabled,
+ the operation can be undone/redone (although results won't be
+ visible automatically).
+ Unlike in Vim, this operation is performed on a single line
+ rather than a set of adjacent changes.
+
+ do same as dp, but applies changes in the opposite direction.
+
+ v or V enter visual mode, clears current selection.
+
+ [count]Ctrl-A
+ increment first number in file name by [count] (1 by default).
+
+ [count]Ctrl-X
+ decrement first number in file name by [count] (1 by default).
+
+ ZQ same as :quit!.
+
+ ZZ same as :quit.
+
+ . repeat last command-line command (not normal mode command) of
+ this session (does nothing right after startup or :restart com-
+ mand). The command doesn't depend on command-line history and
+ can be used with completely disabled history.
+
+ ( go to previous group. Groups are defined by primary sorting
+ key. For name and iname members of each group have same first
+ letter, for all other sorting keys vifm uses size, uid, ...
+
+ ) go to next group. See ( key description above.
+
+ { speeds up navigation to closest previous entry of the opposite
+ type by moving to the first file backwards when cursor is on a
+ directory and to the first directory backwards when cursor is on
+ a file. This is essentially a special case of ( that is locked
+ on "dirs".
+
+ } same as {, but in forward direction.
+
+ [c go to previous mismatched entry in directory comparison view or
+ do nothing.
+
+ ]c go to next mismatched entry in directory comparison view or do
+ nothing.
+
+ [d go to previous directory entry or do nothing.
+
+ ]d go to next directory entry or do nothing.
+
+ [r same as :siblprev.
+
+ ]r same as :siblnext.
+
+ [R same as :siblprev!.
+
+ ]R same as :siblnext!.
+
+ [s go to previous selected entry or do nothing.
+
+ ]s go to next selected entry or do nothing.
+
+ [z go to first sibling of current entry.
+
+ ]z go to last sibling of current entry.
+
+ zj go to next directory sibling of current entry or do nothing.
+
+ zk go to previous directory sibling of current entry or do nothing.
+
+Using Count
+ You can use count with commands like yy.
+
+ [count]yy
+ yank count files starting from current cursor position downward.
+
+ Or you can use count with motions passed to y, d or D.
+
+ d[count]j
+ delete (count + 1) files starting from current cursor position
+ upward.
+
+Registers
+ vifm supports multiple registers for temporary storing list of yanked
+ or deleted files.
+
+ Registers should be specified by hitting double quote key followed by a
+ register name. Count is specified after register name. By default
+ commands use unnamed register, which has double quote as its name.
+
+ Though all commands accept registers, most of commands ignores them
+ (for example H or Ctrl-U). Other commands can fill register or append
+ new files to it.
+
+ Presently vifm supports ", _, a-z and A-Z characters as register names.
+
+ As mentioned above " is unnamed register and has special meaning of the
+ default register. Every time when you use named registers (a-z and A-
+ Z) unnamed register is updated to contain same list of files as the
+ last used register.
+
+ _ is black hole register. It can be used for writing, but its list is
+ always empty.
+
+ Registers with names from a to z and from A to Z are named ones. Low-
+ ercase registers are cleared before adding new files, while uppercase
+ aren't and should be used to append new files to the existing file list
+ of appropriate lowercase register (A for a, B for b, ...).
+
+ Registers can be changed on :empty command if they contain files under
+ trash directory (see "Trash directory" section below).
+
+ Registers do not contain one file more than once.
+
+ Example:
+
+ "a2yy
+
+ puts names of two files to register a (and to the unnamed register),
+
+ "Ad
+
+ removes one file and append its name to register a (and to the unnamed
+ register),
+
+ p or "ap or "Ap
+
+ inserts previously yanked and deleted files into current directory.
+
+Selectors
+ y, d, D, !, gu and gU commands accept selectors. You can combine them
+ with any of selectors below to quickly remove or yank several files.
+
+ Most of selectors are like vi motions: j, k, gg, G, H, L, M, %, f, F,
+ ;, comma, ', ^, 0 and $. But there are some additional ones.
+
+ a all files in current view.
+
+ s selected files.
+
+ S all files except selected.
+
+ Examples:
+
+ - dj - delete file under cursor and one below;
+
+ - d2j - delete file under cursor and two below;
+
+ - y6gg - yank all files from cursor position to 6th file in the list.
+
+ When you pass a count to whole command and its selector they are multi-
+ plied. So:
+
+ - 2d2j - delete file under cursor and four below;
+
+ - 2dj - delete file under cursor and two below;
+
+ - 2y6gg - yank all files from cursor position to 12th file in the
+ list.
+
+Visual Mode
+ Visual mode has to generic operating submodes:
+
+ - plain selection as it is in Vim;
+
+ - selection editing submode.
+
+ Both modes select files in range from cursor position at which visual
+ mode was entered to current cursor position (let's call it "selection
+ region"). Each of two borders can be adjusted by swapping them via "o"
+ or "O" keys and updating cursor position with regular cursor motion
+ keys. Obviously, once initial cursor position is altered this way,
+ real start position becomes unavailable.
+
+ Plain Vim-like visual mode starts with cleared selection, which is not
+ restored on rejecting selection ("Escape", "Ctrl-C", "v", "V"). Con-
+ trary to it, selection editing doesn't clear previously selected files
+ and restores them after reject. Accepting selection by performing an
+ operation on selected items (e.g. yanking them via "y") moves cursor to
+ the top of current selection region (not to the top most selected file
+ of the view).
+
+ In turn, selection editing supports three types of editing (look at
+ statusbar to know which one is currently active):
+
+ - append - amend selection by selecting elements in selection region;
+
+ - remove - amend selection by deselecting elements in selection re-
+ gion;
+
+ - invert - amend selection by inverting selection of elements in se-
+ lection region.
+
+ No matter how you activate selection editing it starts in "append".
+ One can switch type of operation (in the order given above) via "Ctrl-
+ G" key.
+
+ Almost all normal mode keys work in visual mode, but instead of accept-
+ ing selectors they operate on selected items.
+
+ Enter save selection and go back to normal mode not moving cursor.
+
+ av leave visual mode if in amending mode (restores previous selec-
+ tion), otherwise switch to amending selection mode.
+
+ gv restore previous visual selection.
+
+ v, V, Ctrl-C or Escape
+ leave visual mode if not in amending mode, otherwise switch to
+ normal visual selection.
+
+ Ctrl-G switch type of amending by round robin scheme: append -> remove
+ -> invert.
+
+ : enter command line mode. Selection is cleared on leaving the
+ mode.
+
+ o switch active selection bound.
+
+ O switch active selection bound.
+
+ gu, u make names of selected files lowercase.
+
+ gU, U make names of selected files uppercase.
+
+View Mode
+ This mode tries to imitate the less program. List of builtin shortcuts
+ can be found below. Shortcuts can be customized using :qmap, :qnoremap
+ and :qunmap command-line commands.
+
+ Shift-Tab, Tab, q, Q, ZZ
+ return to normal mode.
+
+ [count]e, [count]Ctrl-E, [count]j, [count]Ctrl-N, [count]Enter
+ scroll forward one line (or [count] lines).
+
+ [count]y, [count]Ctrl-Y, [count]k, [count]Ctrl-K, [count]Ctrl-P
+ scroll backward one line (or [count] lines).
+
+ [count]f, [count]Ctrl-F, [count]Ctrl-V, [count]Space
+ scroll forward one window (or [count] lines).
+
+ [count]b, [count]Ctrl-B, [count]Alt-V
+ scroll backward one window (or [count] lines).
+
+ [count]z
+ scroll forward one window (and set window to [count]).
+
+ [count]w
+ scroll backward one window (and set window to [count]).
+
+ [count]Alt-Space
+ scroll forward one window, but don't stop at end-of-file.
+
+ [count]d, [count]Ctrl-D
+ scroll forward one half-window (and set half-window to [count]).
+
+ [count]u, [count]Ctrl-U
+ scroll backward one half-window (and set half-window to
+ [count]).
+
+ r, Ctrl-R, Ctrl-L
+ repaint screen.
+
+ R reload view preserving scroll position.
+
+ F toggle automatic forwarding. Roughly equivalent to periodic
+ file reload and scrolling to the bottom. The behaviour is simi-
+ lar to `tail -F` or F key in less.
+
+ [count]/pattern
+ search forward for ([count]-th) matching line.
+
+ [count]?pattern
+ search backward for ([count]-th) matching line.
+
+ [count]n
+ repeat previous search (for [count]-th occurrence).
+
+ [count]N
+ repeat previous search in reverse direction (for [count]-th oc-
+ currence).
+
+ [count]g, [count]<, [count]Alt-<
+ scroll to the first line of the file (or line [count]).
+
+ [count]G, [count]>, [count]Alt->
+ scroll to the last line of the file (or line [count]).
+
+ [count]p, [count]%
+ scroll to the beginning of the file (or N percent into file).
+
+ v invoke an editor to edit the current file being viewed. The
+ command for editing is taken from the 'vicmd'/'vixcmd' option
+ value and extended with middle line number prepended by a plus
+ sign and name of the current file.
+
+ All "Ctrl-W x" keys work the same was as in Normal mode. Active mode
+ is automatically changed on navigating among windows. When less-like
+ mode activated on file preview is left using one by "Ctrl-W x" keys,
+ its state is stored until another file is displayed using preview (it's
+ possible to leave the mode, hide preview pane, do something else, then
+ get back to the file and show preview pane again with previously stored
+ state in it).
+
+Command line Mode
+ These keys are available in all submodes of the command line mode: com-
+ mand, search, prompt and filtering.
+
+ Down, Up, Left, Right, Home, End and Delete are extended keys and they
+ are not available if vifm is compiled with --disable-extended-keys op-
+ tion.
+
+ Esc, Ctrl-C
+ leave command line mode, cancels input. Cancelled input is
+ saved into appropriate history and can be recalled later.
+
+ Ctrl-M, Enter
+ execute command and leave command line mode.
+
+ Ctrl-I, Tab
+ complete command or its argument.
+
+ Shift-Tab
+ complete in reverse order.
+
+ Ctrl-_ stop completion and return original input.
+
+ Ctrl-B, Left
+ move cursor to the left.
+
+ Ctrl-F, Right
+ move cursor to the right.
+
+ Ctrl-A, Home
+ go to line beginning.
+
+ Ctrl-E, End
+ go to line end.
+
+ Alt-B go to the beginning of previous word.
+
+ Alt-F go to the end of next word.
+
+ Ctrl-U remove characters from cursor position till the beginning of
+ line.
+
+ Ctrl-K remove characters from cursor position till the end of line.
+
+ Ctrl-H, Backspace
+ remove character before the cursor.
+
+ Ctrl-D, Delete
+ remove character under the cursor.
+
+ Ctrl-W remove characters from cursor position till the beginning of
+ previous word.
+
+ Alt-D remove characters from cursor position till the beginning of
+ next word.
+
+ Ctrl-T swap the order of current and previous character and move cursor
+ forward or, if cursor past the end of line, swap the order of
+ two last characters in the line.
+
+ Alt-. insert last part of previous command to current cursor position.
+ Each next call will insert last part of older command.
+
+ Ctrl-G edit command-line content in external editor. See "Command line
+ editing" section for details.
+
+ Ctrl-N recall more recent command-line from history.
+
+ Ctrl-P recall older command-line from history.
+
+ Up recall more recent command-line from history, that begins as the
+ current command-line.
+
+ Down recall older command-line from history, that begins as the cur-
+ rent command-line.
+
+ Ctrl-] trigger abbreviation expansion.
+
+Pasting special values
+ The shortcuts listed below insert specified values into current cursor
+ position. Last key of every shortcut references value that it inserts:
+ - c - [c]urrent file
+ - d - [d]irectory path
+ - e - [e]xtension of a file name
+ - r - [r]oot part of a file name
+ - t - [t]ail part of directory path
+
+ - a - [a]utomatic filter
+ - m - [m]anual filter
+ - = - local filter, which is bound to "=" in normal mode
+
+ Values related to filelist in current pane are available through Ctrl-X
+ prefix, while values from the other pane have doubled Ctrl-X key as
+ their prefix (doubled Ctrl-X is presumably easier to type than upper-
+ case letters; it's still easy to remap the keys to correspond to names
+ of similar macros).
+
+ Ctrl-X c
+ name of the current file of the active pane.
+
+ Ctrl-X d
+ path to the current directory of the active pane.
+
+ Ctrl-X e
+ extension of the current file of the active pane.
+
+ Ctrl-X r
+ name root of current file of the active pane.
+
+ Ctrl-X t
+ the last component of path to the current directory of the ac-
+ tive pane.
+
+ Ctrl-X Ctrl-X c
+ name of the current file of the inactive pane.
+
+ Ctrl-X Ctrl-X d
+ path to the current directory of the inactive pane.
+
+ Ctrl-X Ctrl-X e
+ extension of the current file of the inactive pane.
+
+ Ctrl-X Ctrl-X r
+ name root of current file of the inactive pane.
+
+ Ctrl-X Ctrl-X t
+ the last component of path to the current directory of the inac-
+ tive pane.
+
+
+ Ctrl-X a
+ value of implicit permanent filter (old name "automatic") of the
+ active pane.
+
+ Ctrl-X m
+ value of explicit permanent filter (old name "manual") of the
+ active pane.
+
+ Ctrl-X =
+ value of local filter of the active pane.
+
+
+ Ctrl-X /
+ last pattern from search history.
+
+Command line editing
+ vifm provides a facility to edit several kinds of data, that is usually
+ edited in command-line mode, in external editor (using command speci-
+ fied by 'vicmd' or 'vixcmd' option). This has at least two advantages
+ over built-in command-line mode:
+ - one can use full power of Vim to edit text;
+ - finding and reusing history entries becomes possible.
+
+ The facility is supported by four input submodes of the command-line:
+ - command;
+ - forward search;
+ - backward search;
+ - file rename (see description of cw and cW normal mode keys).
+
+ Editing command-line using external editor is activated by the Ctrl-G
+ shortcut. It's also possible to do almost the same from Normal and
+ Visual modes using q:, q/ and q? commands.
+
+ Temporary file created for the purpose of editing the line has the fol-
+ lowing structure:
+
+ 1. First line, which is either empty or contains text already entered
+ in command-line.
+
+ 2. 2nd and all other lines with history items starting with the most
+ recent one. Altering this lines in any way won't change history
+ items stored by vifm.
+
+ After editing application is finished the first line of the file is
+ taken as the result of operation, when the application returns zero
+ exit code. If the application returns an error (see :cquit command in
+ Vim), all the edits made to the file are ignored, but the initial value
+ of the first line is saved in appropriate history.
+
+More Mode
+ This is the mode that appears when status bar content is so big that it
+ doesn't fit on the screen. One can identify the mode by "-- More --"
+ message at the bottom.
+
+ The following keys are handled in this mode:
+
+
+ Enter, Ctrl-J, j or Down
+ scroll one line down.
+
+ Backspace, k or Up
+ scroll one line up.
+
+
+ d scroll one page (half of a screen) down.
+
+ u scroll one page (half of a screen) up.
+
+
+ Space, f or PageDown
+ scroll down a screen.
+
+ b or PageUp
+ scroll up a screen.
+
+
+ G scroll to the bottom.
+
+ g scroll to the top.
+
+
+ q, Escape or Ctrl-C
+ quit the mode.
+
+ : switch to command-line mode.
+
+Commands
+ Commands are executed with :command_name
+
+ Commented out lines should start with the double quote symbol ("),
+ which may be preceded by whitespace characters intermixed with colons.
+ Inline comments can be added at the end of the line after double quote
+ symbol, only last line of a multi-line command can contain such com-
+ ment. Not all commands support inline comments as their syntax con-
+ flicts with names of registers and fields where double quotes are al-
+ lowed.
+
+ Most of the commands have two forms: complete and the short one. Exam-
+ ple:
+
+ :noh[lsearch]
+
+ This means the complete command is nohlsearch, and the short one is
+ noh.
+
+ Most of command-line commands completely reset selection in the current
+ view. However, there are several exceptions:
+
+ - `:invert s` most likely leaves some files selected;
+
+ - :normal command (when it doesn't leave command-line mode);
+
+ - :if and :else commands don't affect selection on successful execu-
+ tion.
+
+ '|' can be used to separate commands, so you can give multiple commands
+ in one line. If you want to use '|' in an argument, precede it with
+ '\'.
+
+ These commands see '|' as part of their arguments even when it's es-
+ caped:
+
+ :[range]!
+ :autocmd
+ :cabbrev
+ :cmap
+ :cnoreabbrev
+ :cnoremap
+ :command
+ :dmap
+ :dnoremap
+ :filetype
+ :fileviewer
+ :filextype
+ :map
+ :mmap
+ :mnoremap
+ :nmap
+ :nnoremap
+ :noremap
+ :normal
+ :qmap
+ :qnoremap
+ :vmap
+ :vnoremap
+ :wincmd
+ :windo
+ :winrun
+
+ To be able to use another command after one of these, wrap it with the
+ :execute command. An example:
+
+ if filetype('.') == 'reg' | execute '!!echo regular file' | endif
+
+ :[count]
+
+ :number
+ move to the file number.
+ :12 would move to the 12th file in the list.
+ :0 move to the top of the list.
+ :$ move to the bottom of the list.
+
+ :[count]command
+ The only builtin :[count]command are :[count]d[elete] and
+ :[count]y[ank].
+
+ :d3 would delete three files starting at the current file position
+ moving down.
+
+ :3d would delete one file at the third line in the list.
+
+ :command [args]
+
+ :[range]!program
+ execute command via shell. Accepts macros.
+
+ :[range]!command &
+
+ same as above, but the command is run in the background using vifm's
+ means.
+
+ Programs that write to stdout like "ls" create an error message showing
+ partial output of the command.
+
+ Note the space before ampersand symbol, if you omit it, command will be
+ run in the background using job control of your shell.
+
+ Accepts macros.
+
+ :!!
+
+ :[range]!!command
+ same as :!, but pauses before returning.
+
+ :!! repeat the last command.
+
+ :alink
+
+ :[range]alink[!?]
+ create absolute symbolic links to files in directory of inactive
+ view. With "?" prompts for destination file names in an edi-
+ tor. "!" forces overwrite.
+
+ :[range]alink[!] path
+ create absolute symbolic links to files in directory specified
+ by the path (absolute or relative to directory of inactive
+ view).
+
+ :[range]alink[!] name1 name2...
+ create absolute symbolic links of files in directory of other
+ view giving each next link a corresponding name from the argu-
+ ment list.
+
+ :apropos
+
+ :apropos keyword...
+ create a menu of items returned by the apropos command. Select-
+ ing an item in the menu opens corresponding man page. By de-
+ fault the command relies on the external "apropos" utility,
+ which can be customized by altering value of the 'aproposprg'
+ option.
+
+ :autocmd
+
+ :au[tocmd] {event} {pat} {cmd}
+ register autocommand for the {event}, which can be:
+ - DirEnter - triggered after directory is changed
+ Event name is case insensitive.
+
+ {pat} is a comma-separated list of modified globs patterns,
+ which can contain tilde or environment variables. All paths use
+ slash ('/') as directory separator. The pattern can start with
+ a '!', which negates it. Patterns that do not contain slashes
+ are matched against the last item of the path only (e.g. "dir"
+ in "/path/dir"). Literal comma can be entered by doubling it.
+ Two modifications to globs matching are as follows:
+ - * - never matches a slash (i.e., can signify single direc-
+ tory level)
+ - ** - matches any character (i.e., can match path of arbi-
+ trary depth)
+
+ {cmd} is a :command or several of them separated with '|'.
+
+ Examples of patterns:
+ - conf.d - matches conf.d directory anywhere
+ - *.d - matches directories ending with ".d" anywhere
+ - **.git - matches something.git, but not .git anywhere
+ - **/.git/** - matches /path/.git/objects, but not /path/.git
+ - **/.git/**/ - matches /path/.git/ only (because of trailing
+ slash)
+ - /etc/* - matches /etc/conf.d/, /etc/X11, but not
+ /etc/X11/fs
+ - /etc/**/*.d - matches /etc/conf.d, /etc/X11/conf.d, etc.
+ - /etc/**/* - matches /etc/ itself and any file below it
+ - /etc/**/** - matches /etc/ itself and any file below it
+
+ :au[tocmd] [{event}] [{pat}]
+ list those autocommands that match given event-pattern combina-
+ tion.
+ {event} and {pat} can be omitted to list all autocommands. To
+ list any autocommands for specific pattern one can use * place-
+ holder in place of {event}.
+
+ :au[tocmd]! [{event}] [{pat}]
+ remove autocommands that match given event-pattern combination.
+ Syntax is the same as for listing above.
+
+ :apropos
+ repeat last :apropos command.
+
+ :bmark
+
+ :bmark tag1 [tag2 [tag3...]]
+ bookmark current directory with specified tags.
+
+ :bmark! path tag1 [tag2 [tag3...]]
+ same as :bmark, but allows bookmarking specific path instead of
+ current directory. This is for use in vifmrc and for bookmark-
+ ing files.
+
+ Path can contain macros that expand to single path (%c, %C, %d,
+ %D) or those that can expand to multiple paths, but contain only
+ one (%f, %F, %rx). The latter is done for convenience on using
+ the command interactively. Complex macros that include spaces
+ (e.g. "%c:gs/ /_") should be escaped.
+
+ :bmarks
+
+ :bmarks
+ display all bookmarks in a menu.
+
+ :bmarks [tag1 [tag2...]]
+ display menu of bookmarks that include all of the specified
+ tags.
+
+ :bmgo
+
+ :bmgo [tag1 [tag2...]]
+ when there are more than one match acts exactly like :bmarks,
+ otherwise navigates to single match immediately (and fails if
+ there is no match).
+
+ :cabbrev
+
+ :ca[bbrev]
+ display menu of command-line mode abbreviations.
+
+ :ca[bbrev] lhs-prefix
+ display command-line mode abbreviations which left-hand side
+ starts with specified prefix.
+
+ :ca[bbrev] lhs rhs
+ register new or overwrites existing abbreviation for command-
+ line mode. rhs can contain spaces and any special sequences ac-
+ cepted in rhs of mappings (see "Mappings" section below). Ab-
+ breviations are expanded non-recursively.
+
+ :cnoreabbrev
+
+ :cnorea[bbrev]
+ display menu of command-line mode abbreviations.
+
+ :cnorea[bbrev] lhs-prefix
+ display command-line mode abbreviations which left-hand side
+ starts with specified prefix.
+
+ :cnorea[bbrev] lhs rhs
+ same as :cabbrev, but mappings in rhs are ignored during expan-
+ sion.
+
+ :cd
+
+ :cd or :cd ~ or :cd $HOME
+ change to home directory.
+
+ :cd - go to the last visited directory.
+
+ :cd ~/dir
+ change directory to ~/dir.
+
+ :cd /curr/dir /other/dir
+ change directory of the current pane to /curr/dir and directory
+ of the other pane to /other/dir. Relative paths are assumed to
+ be relative to directory of current view. Command won't fail if
+ one of directories is invalid. All forms of the command accept
+ macros.
+
+ :cd! /dir
+ same as :cd /dir /dir.
+
+ :cds
+
+ :cds[!] pattern string
+ navigate to path obtained by substituting first match in current
+ path. Arguments can include slashes, but starting first argu-
+ ment with a separator will activate below form of the command.
+ Specifying "!" changes directory of both panes.
+
+ Available flags:
+
+ - i - ignore case (the 'ignorecase' and 'smartcase' options are not
+ used)
+
+ - I - don't ignore case (the 'ignorecase' and 'smartcase' options are
+ not used)
+
+ :cds[!]/pattern/string/[flags]
+ same as above, but with :substitute-like syntax. Other punctua-
+ tion characters can be used as separators.
+
+ :change
+
+ :c[hange]
+ create a menu window to alter a files properties.
+
+ :chmod
+
+ :[range]chmod
+ display file attributes (permission on *nix and properties on
+ Windows) change dialog.
+
+ :[range]chmod[!] arg...
+ only for *nix
+ change permissions for files. See `man 1 chmod` for arg format.
+ "!" means set permissions recursively.
+
+ :chown
+
+ :[range]chown
+ only for *nix
+ same as co key in normal mode.
+
+ :[range]chown [user][:][group]
+ only for *nix
+ change owner and/or group of files. Operates on directories re-
+ cursively.
+
+ :clone
+
+ :[range]clone[!?]
+ clones files in current directory. With "?" vifm will open vi
+ to edit file names. "!" forces overwrite. Macros are expanded.
+
+ :[range]clone[!] path
+ clones files to directory specified with the path (absolute or
+ relative to current directory). "!" forces overwrite. Macros
+ are expanded.
+
+ :[range]clone[!] name1 name2...
+ clones files in current directory giving each next clone a cor-
+ responding name from the argument list. "!" forces overwrite.
+ Macros are expanded.
+
+ :colorscheme
+
+ :colo[rscheme]?
+ print current color scheme name on the status bar.
+
+ :colo[rscheme]
+ display a menu with a list of available color schemes. You can
+ choose primary color scheme here. It is used for view if no di-
+ rectory specific colorscheme fits current path. It's also used
+ to set border color (except view titles) and colors in menus and
+ dialogs.
+
+ :colo[rscheme] color_scheme_name
+ change primary color scheme to color_scheme_name. In case of
+ errors (e.g. some colors are not supported by terminal) either
+ nothing is changed or color scheme is reset to builtin colors to
+ ensure that TUI is left in a usable state.
+
+ :colo[rscheme] color_scheme_name directory
+ associate directory with the color scheme. The directory argu-
+ ment can be either absolute or relative path when :colorscheme
+ command is executed from command line, but mandatory should be
+ an absolute path when the command is executed in scripts loaded
+ at startup (until vifm is completely loaded).
+
+ :colo[rscheme] color_scheme_name color_scheme_name...
+ loads the first color scheme in the order given that exists and
+ is supported by the terminal. If none matches, current one re-
+ mains unchanged. For example:
+
+ " use a separate color scheme for panes which are inside FUSE mounts
+ execute 'colorscheme in-fuse' &fusehome
+
+ :comclear
+
+ :comc[lear]
+ remove all user defined commands.
+
+ :command
+
+ :com[mand]
+ display a menu of user commands.
+
+ :com[mand] beginning
+ display user defined commands that start with the beginning.
+
+ :com[mand] name action
+ set a new user command.
+ Trying to use a reserved command name will result in an error
+ message.
+ Use :com[mand]! to overwrite a previously set command.
+ Unlike vim user commands do not have to start with a capital
+ letter. User commands are run in a shell by default. To run a
+ command in the background you must set it as a background com-
+ mand with & at the end of the commands action (:com rm rm %f &).
+ Command name cannot contain numbers or special symbols (except
+ '?' and '!').
+
+ :com[mand] name /pattern
+ set search pattern.
+
+ :com[mand] name =pattern
+ set local filter value.
+
+ :com[mand] name filter{:filter args}
+ set file name filter (see :filter command description). For ex-
+ ample:
+
+ " display only audio files
+ :command onlyaudio filter/.+.\(mp3|wav|mp3|flac|ogg|m4a|wma|ape\)$/i
+ " display everything except audio files
+ :command noaudio filter!/.+.\(mp3|wav|mp3|flac|ogg|m4a|wma|ape\)$/i
+
+ :com[mand] cmd :commands
+ set kind of an alias for internal command (like in a shell).
+ Passes range given to alias to an aliased command, so running
+ :%cp after
+ :command cp :copy %a
+ equals
+ :%copy
+
+ :compare
+
+ :compare [byname | bysize | bycontents | listall | listunique |
+ listdups | ofboth | ofone | groupids | grouppaths | skipempty]...
+ compare files in one or two views according the arguments. The
+ default is "bycontents listall ofboth grouppaths". See "Compare
+ views" section below for details. Tree structure is incompati-
+ ble with alternative representations, so values of 'lsview' and
+ 'millerview' options are ignored.
+
+ :copen
+
+ :cope[n]
+ opens menu with contents of the last displayed menu with naviga-
+ tion to files by default, if any.
+
+ :copy
+
+ :[range]co[py][!?][ &]
+ copy files to directory of other view. With "?" prompts for
+ destination file names in an editor. "!" forces overwrite.
+
+ :[range]co[py][!] path[ &]
+ copy files to directory specified with the path (absolute or
+ relative to directory of other view). "!" forces overwrite.
+
+ :[range]co[py][!] name1 name2...[ &]
+ copy files to directory of other view giving each next file a
+ corresponding name from the argument list. "!" forces over-
+ write.
+
+ :cquit
+
+ :cq[uit][!]
+ same as :quit, but also aborts directory choosing via
+ --choose-dir (empties output file) and returns non-zero exit
+ code.
+
+ :cunabbrev
+
+ :cuna[bbrev] lhs
+ unregister command-line mode abbreviation by its lhs.
+
+ :cuna[bbrev] rhs
+ unregister command-line mode abbreviation by its rhs, so that
+ abbreviation could be removed even after expansion.
+
+ :delbmarks
+
+ :delbmarks
+ remove bookmarks from current directory.
+
+ :delbmarks tag1 [tag2 [tag3...]]
+ remove set of bookmarks that include all of the specified tags.
+
+ :delbmarks!
+ remove all bookmarks.
+
+ :delbmarks! path1 [path2 [path3...]]
+ remove bookmarks of listed paths.
+
+ :delcommand
+
+ :delc[ommand] user_command
+ remove user defined command named user_command.
+
+ :delete
+
+ :[range]d[elete][!][ &]
+ delete selected file or files. "!" means complete removal
+ (omitting trash).
+
+ :[range]d[elete][!] [reg] [count][ &]
+ delete selected or [count] files to the reg register. "!" means
+ complete removal (omitting trash).
+
+ :delmarks
+
+ :delm[arks]!
+ delete all marks.
+
+ :delm[arks] marks ...
+ delete specified marks, each argument is treated as a set of
+ marks.
+
+ :display
+
+ :di[splay]
+ display menu with registers content.
+
+ :di[splay] list ...
+ display the contents of the numbered and named registers that
+ are mentioned in list (for example "az to display "", "a and "z
+ content).
+
+ :dirs
+
+ :dirs display directory stack.
+
+ :echo
+
+ :ec[ho] [...]
+ evaluate each argument as an expression and output them sepa-
+ rated with a space. See help on :let command for a definition
+ of .
+
+ :edit
+
+ :[range]e[dit] [file...]
+ open selected or passed file(s) in editor. Macros and environ-
+ ment variables are expanded.
+
+ :else
+
+ :el[se]
+ execute commands until next matching :endif if all other condi-
+ tions didn't match. See also help on :if and :endif commands.
+
+ :elseif
+
+ :elsei[f] {expr1}
+ execute commands until next matching :elseif, :else or :endif if
+ conditions of previous :if and :elseif branches were evaluated
+ to zero. See also help on :if and :endif commands.
+
+ :empty
+
+ :empty permanently remove files from all existing non-empty trash di-
+ rectories (see "Trash directory" section below). Trash directo-
+ ries which are specified via %r and/or %u also get deleted com-
+ pletely. Also remove all operations from undolist that have no
+ sense after :empty and remove all records about files located
+ inside directories from all registers. Removal is performed as
+ background task with undetermined amount of work and can be
+ checked via :jobs menu.
+
+ :endif
+
+ :en[dif]
+ end conditional block. See also help on :if and :else commands.
+
+ :execute
+
+ :exe[cute] [...]
+ evaluate each argument as an expression and join results sepa-
+ rated by a space to get a single string which is then executed
+ as a command-line command. See help on :let command for a defi-
+ nition of .
+
+ :exit
+
+ :exi[t][!]
+ same as :quit.
+
+ :file
+
+ :f[ile][ &]
+ display menu of programs set for the file type of the current
+ file. " &" forces running associated program in background.
+
+ :f[ile] arg[ &]
+ run associated command that begins with the arg skipping opening
+ menu. " &" forces running associated program in background.
+
+ :filetype
+
+ :filet[ype] pattern-list [{descr}]def_prog[ &],[{descr}]prog2[ &],...
+ associate given program list to each of the patterns. Associ-
+ ated program (command) is used by handlers of l and Enter keys
+ (and also in the :file menu). If you need to insert comma into
+ command just double it (",,"). Space followed by an ampersand
+ as two last characters of a command means running of the command
+ in the background. Optional description can be given to each
+ command to ease understanding of what command will do in the
+ :file menu. Vifm will try the rest of the programs for an asso-
+ ciation when the default isn't found. When program entry
+ doesn't contain any of vifm macros, name of current file is ap-
+ pended as if program entry ended with %c macro on *nix and %"c
+ on Windows. On Windows path to executables containing spaces
+ can (and should be for correct work with such paths) be double
+ quoted. See "Patterns" section below for pattern definition.
+ See also "Automatic FUSE mounts" section below. Example for zip
+ archives and several actions:
+
+ filetype *.zip,*.jar,*.war,*.ear
+ \ {Mount with fuse-zip}
+ \ FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR,
+ \ {View contents}
+ \ zip -sf %c | less,
+ \ {Extract here}
+ \ tar -xf %c,
+
+ Note that on OS X when `open` is used to call an app, vifm is
+ unable to check whether that app is actually available. So if
+ automatic skipping of programs that aren't there is desirable,
+ `open` should be replaced with an actual command.
+
+ :filet[ype] filename
+ list (in menu mode) currently registered patterns that match
+ specified file name. Same as ":filextype filename".
+
+ :filextype
+
+ :filex[type] pattern-list [{ description }] def_program,program2,...
+ same as :filetype, but this command is ignored if not running in
+ X. In X :filextype is equal to :filetype. See "Patterns" sec-
+ tion below for pattern definition. See also "Automatic FUSE
+ mounts" section below.
+
+ For example, consider the following settings (the order might
+ seem strange, but it's for the demonstration purpose):
+
+ filetype *.html,*.htm
+ \ {View in lynx}
+ \ lynx
+ filextype *.html,*.htm
+ \ {Open with dwb}
+ \ dwb %f %i &,
+ filetype *.html,*.htm
+ \ {View in links}
+ \ links
+ filextype *.html,*.htm
+ \ {Open with firefox}
+ \ firefox %f &,
+ \ {Open with uzbl}
+ \ uzbl-browser %f %i &,
+
+ If you're using vifm inside a terminal emulator that is running
+ in graphical environment (when X is used on *nix; always on Win-
+ dows), vifm attempts to run application in this order:
+
+ 1. lynx
+ 2. dwb
+ 3. links
+ 4. firefox
+ 5. uzbl
+
+ If there is no graphical environment (checked presence of $DIS-
+ PLAY environment variable on *nix; never happens on Windows),
+ the list will look like:
+
+ 1. lynx
+ 2. links
+
+ Just as if all :filextype commands were not there.
+
+ The purpose of such differentiation is to allow comfortable use
+ of vifm with same settings in desktop environment/through remote
+ connection (SSH)/in native console.
+
+ Note that on OS X $DISPLAY isn't defined unless you define it,
+ so :filextype should be used only if you set $DISPLAY in some
+ way.
+
+ :filext[ype] filename
+ list (in menu mode) currently registered patterns that match
+ specified file name. Same as ":filetype filename".
+
+ :fileviewer
+
+ :filev[iewer] pattern-list command1,command2,...
+ register specified list of commands as viewers for each of the
+ patterns. Viewer is a command which output is captured and dis-
+ played in one of the panes of vifm after pressing "e" or running
+ :view command. When the command doesn't contain any of vifm
+ macros, name of current file is appended as if command ended
+ with %c macro. Comma escaping and missing commands processing
+ rules as for :filetype apply to this command. See "Patterns"
+ section below for pattern definition.
+
+ Example for zip archives:
+
+ fileviewer *.zip,*.jar,*.war,*.ear zip -sf %c, echo "No zip to preview:"
+
+ :filev[iewer] filename
+ list (in menu mode) currently registered patterns that match
+ specified filename.
+
+ :filter
+
+ :filter[!] {pattern}
+ filter files matching the pattern out of directory listings.
+ '!' controls state of filter inversion after updating filter
+ value (see also 'cpoptions' description). Filter is matched
+ case sensitively on *nix and case insensitively on Windows. See
+ "File Filters" and "Patterns" sections.
+
+ Example:
+
+ " filter all files ending in .o from the filelist.
+ :filter /.o$/
+
+
+ :filter[!] {empty-pattern}
+ same as above, but use last search pattern as pattern value.
+
+ Example:
+
+ :filter //I
+
+
+ :filter
+ reset filter (set it to an empty string) and show all files.
+
+ :filter!
+ same as :invert.
+
+ :filter?
+ show information on local, name and auto filters.
+
+ :find
+
+ :[range]fin[d] pattern
+ display results of find command in the menu. Searches among se-
+ lected files if any. Accepts macros. By default the command
+ relies on the external "find" utility, which can be customized
+ by altering value of the 'findprg' option.
+
+ :[range]fin[d] -opt...
+ same as :find above, but user defines all find arguments.
+ Searches among selected files if any.
+
+ :[range]fin[d] path -opt...
+ same as :find above, but user defines all find arguments. Ig-
+ nores selection and range.
+
+ :[range]fin[d]
+ repeat last :find command.
+
+ :finish
+
+ :fini[sh]
+ stop sourcing a script. Can only be used in a vifm script file.
+ This is a quick way to skip the rest of the file.
+
+ :goto
+
+ :go[to]
+ change directory if necessary and put specified path under the
+ cursor. The path should be existing non-root path. Macros and
+ environment variables are expanded.
+
+ :grep
+
+ :[range]gr[ep][!] pattern
+ will show results of grep command in the menu. Add "!" to re-
+ quest inversion of search (look for lines that do not match pat-
+ tern). Searches among selected files if any and no range given.
+ Ignores binary files by default. By default the command relies
+ on the external "grep" utility, which can be customized by al-
+ tering value of the 'grepprg' option.
+
+ :[range]gr[ep][!] -opt...
+ same as :grep above, but user defines all grep arguments, which
+ are not escaped. Searches among selected files if any.
+
+ :[range]gr[ep][!]
+ repeat last :grep command. "!" of this command inverts "!" in
+ repeated command.
+
+ :help
+
+ :h[elp]
+ show the help file.
+
+ :h[elp] argument
+ is the same as using ':h argument' in vim. Use vifm-
+ to get help on vifm (tab completion works). This form of the
+ command doesn't work when 'vimhelp' option is off.
+
+ :hideui
+
+ :hideui
+ hide interface to show previous commands' output.
+
+ :highlight
+
+ :hi[ghlight]
+ display information about all highlight groups active at the mo-
+ ment.
+
+ :hi[ghlight] clear
+ reset all highlighting to builtin defaults and removed all file-
+ name-specific rules.
+
+ :hi[ghlight] clear ( {pat1,pat2,...} | /regexp/ )
+ remove specified rule.
+
+ :hi[ghlight] ( group-name | {pat1,pat2,...} | /regexp/ )
+ display information on given highlight group or file name pat-
+ tern of color scheme used in the active view.
+
+ :hi[ghlight] ( group-name | {pat1,pat2,...} | /regexp/[iI] )
+ cterm=style | ctermfg=color | ctermbg=color
+ set style (cterm), foreground (ctermfg) or/and background
+ (ctermbg) parameters of highlight group or file name pattern for
+ color scheme used in the active view.
+
+ All style values as well as color names are case insensitive.
+
+ Available style values (some of them can be combined):
+ - bold
+ - underline
+ - reverse or inverse
+ - standout
+ - italic (on unsupported systems becomes reverse)
+ - none
+
+ Available group-name values:
+ - Win - color of all windows (views, dialogs, menus) and default color
+ for their content (e.g. regular files in views)
+ - AuxWin - color of auxiliary areas of windows
+ - OtherWin - color of inactive pane
+ - Border - color of vertical parts of the border
+ - TabLine - tab line color (for 'tabscope' set to "global")
+ - TabLineSel - color of the tip of selected tab (regardless of 'tab-
+ scope')
+ - TopLineSel - top line color of the current pane
+ - TopLine - top line color of the other pane
+ - CmdLine - the command line/status bar color
+ - ErrorMsg - color of error messages in the status bar
+ - StatusLine - color of the line above the status bar
+ - JobLine - color of job line that appears above the status line
+ - WildMenu - color of the wild menu items
+ - SuggestBox - color of key suggestion box
+ - CurrLine - line at cursor position in active view
+ - OtherLine - line at cursor position in inactive view
+ - Selected - color of selected files
+ - Directory - color of directories
+ - Link - color of symbolic links in the views
+ - BrokenLink - color of broken symbolic links
+ - Socket - color of sockets
+ - Device - color of block and character devices
+ - Executable - color of executable files
+ - Fifo - color of fifo pipes
+ - CmpMismatch - color of mismatched files in side-by-side comparison
+ by path
+ - User1..User9 - 9 colors which can be used via %* 'statusline' macro
+
+ Available colors:
+ - -1 or default or none - default or transparent
+ - black and lightblack
+ - red and lightred
+ - green and lightgreen
+ - yellow and lightyellow
+ - blue and lightblue
+ - magenta and lightmagenta
+ - cyan and lightcyan
+ - white and lightwhite
+ - 0-255 - corresponding colors from 256-color palette
+
+ Light versions of colors are regular colors with bold attribute set.
+ So order of arguments of :highlight command is important and it's bet-
+ ter to put "cterm" in front of others to prevent it from overwriting
+ attributes set by "ctermfg" or "ctermbg" arguments.
+
+ For convenience of color scheme authors xterm-like names for 256 color
+ palette is also supported. The mapping is taken from
+ http://vim.wikia.com/wiki/Xterm256_color_names_for_console_Vim Dupli-
+ cated entries were altered by adding an underscore followed by numeri-
+ cal suffix.
+
+ 0 Black 86 Aquamarine1 172 Orange3
+ 1 Red 87 DarkSlateGray2 173 LightSalmon3_2
+ 2 Green 88 DarkRed_2 174 LightPink3
+ 3 Yellow 89 DeepPink4_2 175 Pink3
+ 4 Blue 90 DarkMagenta 176 Plum3
+ 5 Magenta 91 DarkMagenta_2 177 Violet
+ 6 Cyan 92 DarkViolet 178 Gold3_2
+ 7 White 93 Purple 179 LightGoldenrod3
+ 8 LightBlack 94 Orange4_2 180 Tan
+ 9 LightRed 95 LightPink4 181 MistyRose3
+ 10 LightGreen 96 Plum4 182 Thistle3
+ 11 LightYellow 97 MediumPurple3 183 Plum2
+ 12 LightBlue 98 MediumPurple3_2 184 Yellow3_2
+ 13 LightMagenta 99 SlateBlue1 185 Khaki3
+ 14 LightCyan 100 Yellow4 186 LightGoldenrod2
+ 15 LightWhite 101 Wheat4 187 LightYellow3
+ 16 Grey0 102 Grey53 188 Grey84
+ 17 NavyBlue 103 LightSlateGrey 189 LightSteelBlue1
+ 18 DarkBlue 104 MediumPurple 190 Yellow2
+ 19 Blue3 105 LightSlateBlue 191 DarkOliveGreen1
+ 20 Blue3_2 106 Yellow4_2 192 DarkOliveG-
+ reen1_2
+ 21 Blue1 107 DarkOliveGreen3 193 DarkSeaGreen1_2
+ 22 DarkGreen 108 DarkSeaGreen 194 Honeydew2
+ 23 DeepSkyBlue4 109 LightSkyBlue3 195 LightCyan1
+ 24 DeepSkyBlue4_2 110 LightSkyBlue3_2 196 Red1
+ 25 DeepSkyBlue4_3 111 SkyBlue2 197 DeepPink2
+ 26 DodgerBlue3 112 Chartreuse2_2 198 DeepPink1
+ 27 DodgerBlue2 113 DarkOliveGreen3_2 199 DeepPink1_2
+ 28 Green4 114 PaleGreen3_2 200 Magenta2_2
+ 29 SpringGreen4 115 DarkSeaGreen3 201 Magenta1
+ 30 Turquoise4 116 DarkSlateGray3 202 OrangeRed1
+ 31 DeepSkyBlue3 117 SkyBlue1 203 IndianRed1
+ 32 DeepSkyBlue3_2 118 Chartreuse1 204 IndianRed1_2
+ 33 DodgerBlue1 119 LightGreen_2 205 HotPink
+ 34 Green3 120 LightGreen_3 206 HotPink_2
+ 35 SpringGreen3 121 PaleGreen1 207 MediumOrchid1_2
+ 36 DarkCyan 122 Aquamarine1_2 208 DarkOrange
+ 37 LightSeaGreen 123 DarkSlateGray1 209 Salmon1
+ 38 DeepSkyBlue2 124 Red3 210 LightCoral
+ 39 DeepSkyBlue1 125 DeepPink4_3 211 PaleVioletRed1
+ 40 Green3_2 126 MediumVioletRed 212 Orchid2
+ 41 SpringGreen3_2 127 Magenta3 213 Orchid1
+ 42 SpringGreen2 128 DarkViolet_2 214 Orange1
+ 43 Cyan3 129 Purple_2 215 SandyBrown
+ 44 DarkTurquoise 130 DarkOrange3 216 LightSalmon1
+ 45 Turquoise2 131 IndianRed 217 LightPink1
+ 46 Green1 132 HotPink3 218 Pink1
+ 47 SpringGreen2_2 133 MediumOrchid3 219 Plum1
+ 48 SpringGreen1 134 MediumOrchid 220 Gold1
+ 49 MediumSpringGreen 135 MediumPurple2 221 LightGolden-
+ rod2_2
+ 50 Cyan2 136 DarkGoldenrod 222 LightGolden-
+ rod2_3
+ 51 Cyan1 137 LightSalmon3 223 NavajoWhite1
+ 52 DarkRed 138 RosyBrown 224 MistyRose1
+ 53 DeepPink4 139 Grey63 225 Thistle1
+ 54 Purple4 140 MediumPurple2_2 226 Yellow1
+ 55 Purple4_2 141 MediumPurple1 227 LightGoldenrod1
+ 56 Purple3 142 Gold3 228 Khaki1
+ 57 BlueViolet 143 DarkKhaki 229 Wheat1
+ 58 Orange4 144 NavajoWhite3 230 Cornsilk1
+ 59 Grey37 145 Grey69 231 Grey100
+ 60 MediumPurple4 146 LightSteelBlue3 232 Grey3
+ 61 SlateBlue3 147 LightSteelBlue 233 Grey7
+ 62 SlateBlue3_2 148 Yellow3 234 Grey11
+ 63 RoyalBlue1 149 DarkOliveGreen3_3 235 Grey15
+ 64 Chartreuse4 150 DarkSeaGreen3_2 236 Grey19
+ 65 DarkSeaGreen4 151 DarkSeaGreen2 237 Grey23
+ 66 PaleTurquoise4 152 LightCyan3 238 Grey27
+ 67 SteelBlue 153 LightSkyBlue1 239 Grey30
+ 68 SteelBlue3 154 GreenYellow 240 Grey35
+ 69 CornflowerBlue 155 DarkOliveGreen2 241 Grey39
+ 70 Chartreuse3 156 PaleGreen1_2 242 Grey42
+ 71 DarkSeaGreen4_2 157 DarkSeaGreen2_2 243 Grey46
+ 72 CadetBlue 158 DarkSeaGreen1 244 Grey50
+ 73 CadetBlue_2 159 PaleTurquoise1 245 Grey54
+ 74 SkyBlue3 160 Red3_2 246 Grey58
+ 75 SteelBlue1 161 DeepPink3 247 Grey62
+ 76 Chartreuse3_2 162 DeepPink3_2 248 Grey66
+ 77 PaleGreen3 163 Magenta3_2 249 Grey70
+ 78 SeaGreen3 164 Magenta3_3 250 Grey74
+ 79 Aquamarine3 165 Magenta2 251 Grey78
+ 80 MediumTurquoise 166 DarkOrange3_2 252 Grey82
+ 81 SteelBlue1_2 167 IndianRed_2 253 Grey85
+ 82 Chartreuse2 168 HotPink3_2 254 Grey89
+ 83 SeaGreen2 169 HotPink2 255 Grey93
+ 84 SeaGreen1 170 Orchid
+ 85 SeaGreen1_2 171 MediumOrchid1
+
+ There are two colors (foreground and background) and only one bold at-
+ tribute. Thus single bold attribute affects both colors when "reverse"
+ attribute is used in vifm run inside terminal emulator. At the same
+ time linux native console can handle boldness of foreground and back-
+ ground colors independently, but for consistency with terminal emula-
+ tors this is available only implicitly by using light versions of col-
+ ors. This behaviour might be changed in the future.
+
+ Although vifm supports 256 colors in a sense they are supported by UI
+ drawing library, whether you will be able to use all of them highly de-
+ pends on your terminal. To set up terminal properly, make sure that
+ $TERM in the environment you run vifm is set to name of 256-color ter-
+ minal (on *nixes it can also be set via X resources), e.g.
+ xterm-256color. One can find list of available terminal names by list-
+ ing /usr/lib/terminfo/. Number of colors supported by terminal with
+ current settings can be checked via "tput colors" command.
+
+ Here is the hierarchy of highlight groups, which you need to know for
+ using transparency:
+ JobLine
+ SuggestBox
+ StatusLine
+ WildMenu
+ User1..User9
+ Border
+ CmdLine
+ ErrorMsg
+ Win
+ OtherWin
+ AuxWin
+ File name specific highlights
+ Directory
+ Link
+ BrokenLink
+ Socket
+ Device
+ Fifo
+ Executable
+ Selected
+ CurrLine
+ OtherLine
+ TopLine
+ TopLineSel
+ TabLineSel (for pane tabs)
+ TabLine
+ TabLineSel
+
+ "none" means default terminal color for highlight groups at the first
+ level of the hierarchy and transparency for all others.
+
+ Here file name specific highlights mean those configured via globs ({})
+ or regular expressions (//). At most one of them is applied per file
+ entry, namely the first that matches file name, hence order of :high-
+ light commands might be important in certain cases.
+
+ :history
+
+ :his[tory]
+ creates a pop-up menu of directories visited.
+
+ :his[tory] x
+ x can be:
+ d[ir] or . show directory history.
+ c[md] or : show command line history.
+ s[earch] or / show search history and search forward on l key.
+ f[search] or / show search history and search forward on l key.
+ b[search] or ? show search history and search backward on l key.
+ i[nput] or @ show prompt history (e.g. on one file renaming).
+ fi[lter] or = show filter history (see description of the "="
+ normal mode command).
+
+ :histnext
+
+ :histnext
+ same as . The main use case for this command is to work
+ around the common pain point of and being the same
+ ASCII character: one could alter the terminal emulator settings
+ to emit, for example, the `F1` keycode when Ctrl-I is pressed,
+ then `:noremap :histnext` in vifm, add "t" flag to the
+ 'cpoptions', and thus have both and working as ex-
+ pected.
+
+ :histprev
+
+ :histprev
+ same as .
+
+ :if
+
+ :if {expr1}
+ starts conditional block. Commands are executed until next
+ matching :elseif, :else or :endif command if {expr1} evaluates
+ to non-zero, otherwise they are ignored. See also help on :else
+ and :endif commands.
+
+ Example:
+
+ if $TERM == 'screen.linux'
+ highlight CurrLine ctermfg=lightwhite ctermbg=lightblack
+ elseif $TERM == 'tmux'
+ highlight CurrLine cterm=reverse ctermfg=black ctermbg=white
+ else
+ highlight CurrLine cterm=bold,reverse ctermfg=black ctermbg=white
+ endif
+
+ :invert
+
+ :invert [f]
+ invert file name filter.
+
+ :invert? [f]
+ show current filter state.
+
+ :invert s
+ invert selection.
+
+ :invert o
+ invert sorting order of the primary sorting key.
+
+ :invert? o
+ show sorting order of the primary sorting key.
+
+ :jobs
+
+ :jobs shows menu of current backgrounded processes.
+
+ :let
+
+ :let $ENV_VAR =
+ sets environment variable. Warning: setting environment vari-
+ able to an empty string on Windows removes it.
+
+ :let $ENV_VAR .=
+ append value to environment variable.
+
+ :let &[l:|g:]opt =
+ sets option value.
+
+ :let &[l:|g:]opt .=
+ append value to string option.
+
+ :let &[l:|g:]opt +=
+ increasing option value, adding sub-values.
+
+ :let &[l:|g:]opt -=
+ decreasing option value, removing sub-values.
+
+ Where could be a single-quoted string, double-quoted string, an
+ environment variable, function call or a concatanation of any of them
+ in any order using the '.' operator. Any whitespace is ignored.
+
+ :locate
+
+ :locate filename
+ use "locate" command to create a menu of filenames. Selecting a
+ file from the menu will reload the current file list in vifm to
+ show the selected file. By default the command relies on the
+ external "locate" utility (it's assumed that its database is al-
+ ready built), which can be customized by altering value of the
+ 'locateprg' option.
+
+ :locate
+ repeats last :locate command.
+
+ :ls
+
+ :ls lists windows of active terminal multiplexer (only when terminal
+ multiplexer is used). This is achieved by issuing proper com-
+ mand for active terminal multiplexer, thus the list is not han-
+ dled by vifm.
+
+ :lstrash
+
+ :lstrash
+ displays a menu with list of files in trash. Each element of
+ the list is original path of a deleted file, thus the list can
+ contain duplicates.
+
+ :mark
+
+ :[range]ma[rk][?] x [/full/path] [filename]
+ Set mark x (a-zA-Z0-9) at /full/path and filename. By default
+ current directory is being used. If no filename was given and
+ /full/path is current directory then last file in [range] is
+ used. Using of macros is allowed. Question mark will stop com-
+ mand from overwriting existing marks.
+
+ :marks
+
+ :marks create a pop-up menu of marks.
+
+ :marks list ...
+ display the contents of the marks that are mentioned in list.
+
+ :media
+
+ :media only for *nix
+ display media management menu. See also 'mediaprg' option.
+
+ :messages
+
+ :mes[sages]
+ shows previously given messages (up to 50).
+
+ :mkdir
+
+ :[line]mkdir[!] dir ...
+ create directories at specified paths. The [line] can be used
+ to pick node in a tree-view. "!" means make parent directories
+ as needed. Macros are expanded.
+
+ :move
+
+ :[range]m[ove][!?][ &]
+ move files to directory of other view. With "?" prompts for
+ destination file names in an editor. "!" forces overwrite.
+
+ :[range]m[ove][!] path[ &]
+ move files to directory specified with the path (absolute or
+ relative to directory of other view). "!" forces overwrite.
+
+ :[range]m[ove][!] name1 name2...[ &]
+ move files to directory of other view giving each next file a
+ corresponding name from the argument list. "!" forces over-
+ write.
+
+ :nohlsearch
+
+ :noh[lsearch]
+ clear selection in current pane.
+
+ :normal
+
+ :norm[al][!] commands
+ execute normal mode commands. If "!" is used, user defined map-
+ pings are ignored. Unfinished last command is aborted as if
+ or was typed. A ":" should be completed as well.
+ Commands can't start with a space, so put a count of 1 (one) be-
+ fore it.
+
+ :only
+
+ :on[ly]
+ switch to a one window view.
+
+ :popd
+
+ :popd remove pane directories from stack.
+
+ :pushd
+
+ :pushd[!] /curr/dir [/other/dir]
+ add pane directories to stack and process arguments like :cd
+ command.
+
+ :pushd exchange the top two items of the directory stack.
+
+ :put
+
+ :[line]pu[t][!] [reg] [ &]
+ puts files from specified register (" by default) into current
+ directory. The [line] can be used to pick node in a tree-view.
+ "!" moves files "!" moves files from their original location in-
+ stead of copying them. During this operation no confirmation
+ dialogs will be shown, all checks are performed beforehand.
+
+ :pwd
+
+ :pw[d] show the present working directory.
+
+ :qall
+
+ :qa[ll][!]
+ exit vifm (add ! to skip saving changes and checking for active
+ backgrounded commands).
+
+ :quit
+
+ :q[uit][!]
+ if there is more than one tab, close the current one, otherwise
+ exit vifm (add ! to skip saving changes and checking for active
+ backgrounded commands).
+
+ :redraw
+
+ :redr[aw]
+ redraw the screen immediately.
+
+ :registers
+
+ :reg[isters]
+ display menu with registers content.
+
+ :reg[isters] list ...
+ display the contents of the numbered and named registers that
+ are mentioned in list (for example "az to display "", "a and "z
+ content).
+
+ :regular
+
+ :regular
+
+ switch to regular view leaving custom view.
+ :rename
+
+ :[range]rename[!]
+ rename files using vi to edit names. ! means go recursively
+ through directories.
+
+ :[range]rename name1 name2...
+ rename each of selected files to a corresponding name.
+
+ :restart
+
+ :restart
+ free a lot of things (histories, commands, etc.), reread
+ vifminfo and vifmrc files and run startup commands passed in the
+ argument list, thus losing all unsaved changes (e.g. recent his-
+ tory or keys mapped in current session).
+
+ While many things get reset, some basic UI state and current lo-
+ cations are preserved, including tabs.
+
+ :restore
+
+ :[range]restore
+ restore file from trash directory, doesn't work outside one of
+ trash directories. See "Trash directory" section below.
+
+ :rlink
+
+ :[range]rlink[!?]
+ create relative symbolic links to files in directory of other
+ view. With "?" prompts for destination file names in an editor.
+ "!" forces overwrite.
+
+ :[range]rlink[!] path
+ create relative symbolic links of files in directory specified
+ with the path (absolute or relative to directory of other view).
+ "!" forces overwrite.
+
+ :[range]rlink[!] name1 name2...
+ create relative symbolic links of files in directory of other
+ view giving each next link a corresponding name from the argu-
+ ment list. "!" forces overwrite.
+
+ :screen
+
+ :screen
+ toggle whether to use the terminal multiplexer or not.
+ A terminal multiplexer uses pseudo terminals to allow multiple
+ windows to be used in the console or in a single xterm. Start-
+ ing vifm from terminal multiplexer with appropriate support
+ turned on will cause vifm to open a new terminal multiplexer
+ window for each new file edited or program launched from vifm.
+ This requires screen version 3.9.9 or newer for the screen -X
+ argument or tmux (1.8 version or newer is recommended).
+
+ :screen!
+ enable integration with terminal multiplexers.
+
+ :screen?
+ display whether integration with terminal multiplexers is en-
+ abled.
+
+ Note: the command is called screen for historical reasons (when tmux
+ wasn't yet supported) and might be changed in future releases, or get
+ an alias.
+
+ :select
+
+ :[range]select
+ select files in the given range (current file if no range is
+ given).
+
+ :select {pattern}
+ select files that match specified pattern. Possible {pattern}
+ forms are described in "Patterns" section below. Trailing slash
+ for directories is taken into account, so `:select! */ | invert
+ s` selects only files.
+
+ :select //[iI]
+ same as item above, but reuses last search pattern.
+
+ :select !{external command}
+ select files from the list supplied by external command. Files
+ are matched by full paths, relative paths are converted to abso-
+ lute ones beforehand.
+
+ :[range]select! [{pattern}]
+ same as above, but resets previously selected items before pro-
+ ceeding.
+
+ :set
+
+ :se[t] display all options that differ from their default value.
+
+ :se[t] all
+ display all options.
+
+ :se[t] opt1=val1 opt2='val2' opt3="val3" ...
+ sets given options. For local options both values are set.
+ You can use following syntax:
+ - for all options - option, option? and option&
+ - for boolean options - nooption, invoption and option!
+ - for integer options - option=x, option+=x and option-=x
+ - for string options - option=x and option+=x
+ - for string list options - option=x, option+=x, option-=x and
+ option^=x
+ - for enumeration options - option=x, option+=x and option-=x
+ - for set options - option=x, option+=x, option-=x and op-
+ tion^=x
+ - for charset options - option=x, option+=x, option-=x and op-
+ tion^=x
+
+ the meaning:
+ - option - turn option on (for boolean) or print its value (for
+ all others)
+ - nooption - turn option off
+ - invoption - invert option state
+ - option! - invert option state
+ - option? - print option value
+ - option& - reset option to its default value
+ - option=x or option:x - set option to x
+ - option+=x - add/append x to option
+ - option-=x - remove (or subtract) x from option
+ - option^=x - toggle x presence among values of the option
+
+ Option name can be prepended and appended by any number of
+ whitespace characters.
+
+ :setglobal
+
+ :setg[lobal]
+ display all global options that differ from their default value.
+
+ :setg[lobal] all
+ display all global options.
+
+ :setg[lobal] opt1=val1 opt2='val2' opt3="val3" ...
+ same as :set, but changes/prints only global options or global
+ values of local options. Changes to the latter might be not
+ visible until directory is changed.
+
+ :setlocal
+
+ :setl[ocal]
+ display all local options that differ from their default value.
+
+ :setl[ocal] all
+ display all local options.
+
+ :setl[ocal] opt1=val1 opt2='val2' opt3="val3" ...
+ same as :set, but changes/prints only local values of local op-
+ tions.
+
+ :shell
+
+ :sh[ell][!]
+ start a shell in current directory. "!" suppresses spawning
+ dedicated window of terminal multiplexer for a shell. To make
+ vifm adaptive to environment it uses $SHELL if it's defined,
+ otherwise 'shell' value is used.
+
+
+ :siblnext
+
+ :[count]siblnext[!]
+
+ change directory to [count]th next sibling directory after cur-
+ rent path using value of global sort option of current pane.
+ "!" enables wrapping.
+
+ For example, say, you're at /boot and root listing starts like
+ this:
+
+ bin/
+ boot/
+ dev/
+ ...
+
+ Issuing :siblnext will navigate to /dev.
+
+
+ :siblprev
+
+ :[count]siblprev[!]
+ same as :siblnext, but in the opposite direction.
+
+ :sort
+
+ :sor[t]
+ display dialog with different sorting methods, when one can se-
+ lect primary sorting key. When 'viewcolumns' options is empty
+ and 'lsview' is off, changing primary sorting key will also af-
+ fect view look (in particular the second column of the view will
+ be changed).
+
+ :source
+
+ :so[urce] file
+ read command-line commands from the file.
+
+ :split
+
+ :sp[lit]
+ switch to a two window horizontal view.
+
+ :sp[lit]!
+ toggle horizontal window splitting.
+
+ :sp[lit] path
+ splits the window horizontally to show both file directories.
+ Also changes other pane to path (absolute or relative to current
+ directory of active pane).
+
+ :substitute
+
+ :[range]s[ubstitute]/pattern/string/[flags]
+ for each file in range replace a match of pattern with string.
+
+ String can contain \0...\9 to link to capture groups (\0 - all match,
+ \1 - first group, etc.).
+
+ Pattern is stored in search history.
+
+ Available flags:
+
+ - i - ignore case (the 'ignorecase' and 'smartcase' options are not
+ used)
+
+ - I - don't ignore case (the 'ignorecase' and 'smartcase' options are
+ not used)
+
+ - g - substitute all matches in each file name (each g toggles this)
+
+ :[range]s[ubstitute]/pattern
+ substitute pattern with an empty string.
+
+ :[range]s[ubstitute]//string/[flags]
+ use last pattern from search history.
+
+ :[range]s[ubstitute]
+ repeat previous substitution command.
+
+ :sync
+
+ :sync [relative path]
+ change the other pane to the current pane directory or to some
+ path relative to the current directory. Using macros is al-
+ lowed.
+
+ :sync! change the other pane to the current pane directory and synchro-
+ nize cursor position. If current pane displays custom list of
+ files, position before entering it is used (current one might
+ not make any sense).
+
+
+ :sync! [location | cursorpos | localopts | filters | filelist | tree |
+ all]...
+ change enumerated properties of the other pane to match corre-
+ sponding properties of the current pane. Arguments have the
+ following meanings:
+
+ - location - current directory of the pane;
+
+ - cursorpos - cursor position (doesn't make sense without "lo-
+ cation");
+
+ - localopts - all local options;
+
+ - filters - all filters;
+
+ - filelist - list of files for custom view (implies "loca-
+ tion");
+
+ - tree - tree structure for tree view (implies "location");
+
+ - all - all of the above.
+
+ :tabclose
+
+ :tabc[lose]
+ close current tab, unless it's the only one open at current
+ scope.
+
+ :tabmove
+
+ :tabm[ove] [N]
+ without the argument or with `$` as the argument, current tab
+ becomes the last tab. With the argument, current tab is moved
+ after the tab with the specified number. Argument of `0` moves
+ current tab to the first position.
+
+ :tabname
+
+ :tabname [name]
+ set, update or reset (when no argument is provided) name of the
+ current tab.
+
+ :tabnew
+
+ :tabnew [path]
+ create new tab. Accepts optional path for the new tab. Macros
+ and environment variables are expanded.
+
+ :tabnext
+
+ :tabn[ext]
+ switch to the next tab (wrapping around).
+
+ :tabn[ext] {n}
+ go to the tab number {n}. Tab numeration starts with 1.
+
+ :tabprevious
+
+ :tabp[revious]
+ switch to the previous tab (wrapping around).
+
+ :tabp[revious] {n}
+ go to the {n}-th previous tab. Note that :tabnext handles its
+ argument differently.
+
+ :touch
+
+ :[line]touch file...
+ create files at specified paths. Aborts on errors. Doesn't up-
+ date time of existing files. The [line] can be used to pick
+ node in a tree-view. Macros are expanded.
+
+ :tr
+
+ :[range]tr/pattern/string/
+ for each file in range transliterate the characters which appear
+ in pattern to the corresponding character in string. When
+ string is shorter than pattern, it's padded with its last char-
+ acter.
+
+ :trashes
+
+ :trashes
+ lists all valid trash directories in a menu. Only non-empty and
+ writable trash directories are shown. This is exactly the list
+ of directories that are cleared when :empty command is executed.
+
+ :trashes?
+ same as :trashes, but also displays size of each trash direc-
+ tory.
+
+ :tree
+
+ :tree turn pane into tree view with current directory as its root.
+ The tree view is implemented on top of a custom view, but is au-
+ tomatically kept in sync with file system state and considers
+ all the filters. Thus the structure corresponds to what one
+ would see on visiting the directories manually. As a special
+ case for trees built out of custom view file-system tracking
+ isn't performed.
+
+ To leave tree view go up from its root or use gh at any level of
+ the tree. Any command that changes directory will also do, in
+ particular, `:cd ..`.
+
+ Tree structure is incompatible with alternative representations,
+ so values of 'lsview' and 'millerview' options are ignored.
+
+ :tree! toggle current view in and out of tree mode.
+
+ :undolist
+
+ :undol[ist]
+ display list of latest changes. Use "!" to see actual commands.
+
+ :unlet
+
+ :unl[et][!] $ENV_VAR1 $ENV_VAR2 ...
+ remove environment variables. Add ! to omit displaying of warn-
+ ings about nonexistent variables.
+
+ :unselect
+
+ :[range]unselect
+ unselect files in the given range (current file if no range is
+ given).
+
+ :unselect {pattern}
+ unselect files that match specified pattern. Possible {pattern}
+ forms are described in "Patterns" section below. Trailing slash
+ for directories is taken into account, so `:unselect */` unse-
+ lects directories.
+
+ :unselect !{external command}
+ unselect files from the list supplied by external command.
+ Files are matched by full paths, relative paths are converted to
+ absolute ones beforehand.
+
+ :unselect //[iI]
+ same as item above, but reuses last search pattern.
+
+ :version
+
+ :ve[rsion]
+ show menu with version information.
+
+ :vifm
+
+ :vifm same as :version.
+
+ :view
+
+ :vie[w]
+ toggle on and off the quick file view. See also 'quickview' op-
+ tion.
+
+ :vie[w]!
+ turn on quick file view if it's off.
+
+ :volumes
+
+ :volumes
+ only for MS-Windows
+ display menu with volume list. Hitting l (or Enter) key opens
+ appropriate volume in the current pane.
+
+ :vsplit
+
+ :vs[plit]
+ switch to a two window vertical view.
+
+ :vs[plit]!
+ toggle window vertical splitting.
+
+ :vs[plit] path
+ split the window vertically to show both file directories. And
+ changes other pane to path (absolute or relative to current di-
+ rectory of active pane).
+
+ :wincmd
+
+ :[count]winc[md] {arg}
+ same as running Ctrl-W [count] {arg}.
+
+ :windo
+
+ :windo [command...]
+ execute command for each pane (same as :winrun % command).
+
+ :winrun
+
+ :winrun type [command...]
+ execute command for pane(s), which is determined by type argu-
+ ment:
+ - ^ - top-left pane
+ - $ - bottom-right pane
+ - % - all panes
+ - . - current pane
+ - , - other pane
+
+ :write
+
+ :w[rite]
+ write vifminfo file.
+
+ :wq
+
+ :wq[!] same as :quit, but ! only disables check of backgrounded com-
+ mands. :wqall
+
+ :wqa[ll][!]
+ same as :qall, but ! only disables check of backgrounded com-
+ mands.
+
+ :xall
+
+ :xa[ll][!]
+ same as :qall.
+
+ :xit
+
+ :x[it][!]
+ same as :quit.
+
+ :yank
+
+ :[range]y[ank] [reg] [count]
+ will yank files to the reg register.
+
+ :map lhs rhs
+
+ :map lhs rhs
+ map lhs key sequence to rhs in normal and visual modes.
+
+ :map! lhs rhs
+ map lhs key sequence to rhs in command line mode.
+
+
+ :cmap :dmap :mmap :nmap :qmap
+ :vmap
+
+ :cm[ap] lhs rhs
+ map lhs to rhs in command line mode.
+
+ :dm[ap] lhs rhs
+ map lhs to rhs in dialog modes.
+
+ :mm[ap] lhs rhs
+ map lhs to rhs in menu mode.
+
+ :nm[ap] lhs rhs
+ map lhs to rhs in normal mode.
+
+ :qm[ap] lhs rhs
+ map lhs to rhs in view mode.
+
+ :vm[ap] lhs rhs
+ map lhs to rhs in visual mode.
+
+
+ :*map
+
+ :cm[ap]
+ list all maps in command line mode.
+
+ :dm[ap]
+ list all maps in dialog modes.
+
+ :mm[ap]
+ list all maps in menu mode.
+
+ :nm[ap]
+ list all maps in normal mode.
+
+ :qm[ap]
+ list all maps in view mode.
+
+ :vm[ap]
+ list all maps in visual mode.
+
+ :*map beginning
+
+ :cm[ap] beginning
+ list all maps in command line mode that start with the begin-
+ ning.
+
+ :dm[ap] beginning
+ list all maps in dialog modes that start with the beginning.
+
+ :mm[ap] beginning
+ list all maps in menu mode that start with the beginning.
+
+ :nm[ap] beginning
+ list all maps in normal mode that start with the beginning.
+
+ :qm[ap] beginning
+ list all maps in view mode that start with the beginning.
+
+ :vm[ap] beginning
+ list all maps in visual mode that start with the beginning.
+
+ :noremap
+
+ :no[remap] lhs rhs
+ map the key sequence lhs to rhs for normal and visual modes, but
+ disallow mapping of rhs.
+
+ :no[remap]! lhs rhs
+ map the key sequence lhs to rhs for command line mode, but dis-
+ allow mapping of rhs.
+
+ :cnoremap :dnoremap :mnoremap :nnoremap :qnoremap
+ :vnoremap
+
+ :cno[remap] lhs rhs
+ map the key sequence lhs to rhs for command line mode, but dis-
+ allow mapping of rhs.
+
+ :dn[oremap] lhs rhs
+ map the key sequence lhs to rhs for dialog modes, but disallow
+ mapping of rhs.
+
+ :mn[oremap] lhs rhs
+ map the key sequence lhs to rhs for menu mode, but disallow map-
+ ping of rhs.
+
+ :nn[oremap] lhs rhs
+ map the key sequence lhs to rhs for normal mode, but disallow
+ mapping of rhs.
+
+ :qn[oremap] lhs rhs
+ map the key sequence lhs to rhs for view mode, but disallow map-
+ ping of rhs.
+
+ :vn[oremap] lhs rhs
+ map the key sequence lhs to rhs for visual mode, but disallow
+ mapping of rhs.
+
+ :unmap
+
+ :unm[ap] lhs
+ remove user mapping of lhs from normal and visual modes.
+
+ :unm[ap]! lhs
+ remove user mapping of lhs from command line mode.
+
+ :cunmap :dunmap :munmap :nunmap :qunmap
+ :vunmap
+
+ :cu[nmap] lhs
+ remove user mapping of lhs from command line mode.
+
+ :du[nmap] lhs
+ remove user mapping of lhs from dialog modes.
+
+ :mu[nmap] lhs
+ remove user mapping of lhs from menu mode.
+
+ :nun[map] lhs
+ remove user mapping of lhs from normal mode.
+
+ :qun[map] lhs
+ remove user mapping of lhs from view mode.
+
+ :vu[nmap] lhs
+ remove user mapping of lhs from visual mode.
+
+Ranges
+ The ranges implemented include:
+ 2,3 - from second to third file in the list (including it)
+ % - the entire directory.
+ . - the current position in the filelist.
+ $ - the end of the filelist.
+ 't - the mark position t.
+
+ Examples:
+
+ :%delete
+
+ would delete all files in the directory.
+
+ :2,4delete
+
+ would delete the files in the list positions 2 through 4.
+
+ :.,$delete
+
+ would delete the files from the current position to the end of the
+ filelist.
+
+ :3delete4
+
+ would delete the files in the list positions 3, 4, 5, 6.
+
+ If a backward range is given :4,2delete - an query message is given and
+ user can chose what to do next.
+
+ The builtin commands that accept a range are :d[elete] and :y[ank].
+
+Command macros
+ The command macros may be used in user commands.
+
+ %a User arguments. When user arguments contain macros, they are
+ expanded before preforming substitution of %a.
+
+ %c %"c The current file under the cursor.
+
+ %C %"C The current file under the cursor in the other directory.
+
+ %f %"f All of the selected files.
+
+ %F %"F All of the selected files in the other directory list.
+
+ %b %"b Same as %f %F.
+
+ %d %"d Full path to current directory.
+
+ %D %"D Full path to other file list directory.
+
+ %rx %"rx
+ Full paths to files in the register {x}. In case of invalid
+ symbol in place of {x}, it's processed with the rest of the line
+ and default register is used.
+
+ %m Show command output in a menu.
+
+ %M Same as %m, but l (or Enter) key is handled like for :locate and
+ :find commands.
+
+ %u Process command output as list of paths and compose custom view
+ out of it.
+
+ %U Same as %u, but implies less list updates inside vifm, which is
+ absence of sorting at the moment.
+
+ %Iu same as %u, but gives up terminal before running external com-
+ mand.
+
+ %IU same as %U, but gives up terminal before running external com-
+ mand.
+
+ %S Show command output in the status bar.
+
+ %q redirect command output to quick view, which is activated if
+ disabled.
+
+ %s Execute command in split window of active terminal multiplexer
+ (ignored if not running inside one).
+
+ %n Forbid using of terminal multiplexer to run the command.
+
+ %i Completely ignore command output.
+
+
+ %pc Marks the end of the main command and the beginning of the clear
+ command for graphical preview, which is invoked on closing pre-
+ view of a file.
+
+ %pd Marks a preview command as one that directly communicates with
+ the terminal. Beware that this is for things like sixel which
+ are self-contained sequences that depend only on current cursor
+ position, using this with anything else is likely to mangle ter-
+ minal state.
+
+ The following dimensions and coordinates are in characters:
+
+ %px x coordinate of top-left corner of preview area.
+
+ %py y coordinate of top-left corner of preview area.
+
+ %pw width of preview area.
+
+ %ph height of preview area.
+
+
+ Use %% if you need to put a percent sign in your command.
+
+ Note that %m, %M, %s, %S, %i, %u and %U macros are mutually exclusive.
+ Only the last one of them on the command will take effect.
+
+ You can use file name modifiers after %c, %C, %f, %F, %b, %d and %D
+ macros. Supported modifiers are:
+
+ - :p - full path
+
+ - :u - UNC name of path (e.g. "\\server" in
+ "\\server\share"), Windows only. Expands to current computer name
+ for not UNC paths.
+
+ - :~ - relative to the home directory
+
+ - :. - relative to current directory
+
+ - :h - head of the file name
+
+ - :t - tail of the file name
+
+ - :r - root of the file name (without last extension)
+
+ - :e - extension of the file name (last one)
+
+ - :s?pat?sub? - substitute the first occurrence of pat with sub.
+ You can use any character for '?', but it must not occur in pat or
+ sub.
+
+ - :gs?pat?sub? - like :s, but substitutes all occurrences of pat with
+ sub.
+
+ See ':h filename-modifiers' in Vim's documentation for the detailed de-
+ scription.
+
+ Using %x means expand corresponding macro escaping all characters that
+ have special meaning. And %"x means using of double quotes and escape
+ only backslash and double quote characters, which is more useful on
+ Windows systems.
+
+ Position and quantity (if there is any) of %m, %M, %S or %s macros in
+ the command is unimportant. All their occurrences are removed from the
+ resulting command.
+
+ %c and %f macros are expanded to file names only, when %C and %F are
+ expanded to full paths. %f and %F follow this in %b too.
+
+ :com move mv %f %D
+ set the :move command to move all of the files selected in the
+ current directory to the other directory.
+
+ The %a macro is replaced with any arguments given to an alias command.
+ All arguments are considered optional.
+ :com lsl !!ls -l %a - set the lsl command to execute ls -l with
+ or without an argument.
+
+ :lsl
+ will list the directory contents of the current directory.
+
+ :lsl filename
+ will list only the given filename.
+
+ The macros can also be used in directly executing commands. ":!mv %f
+ %D" would move the current directory selected files to the other direc-
+ tory.
+
+ Appending & to the end of a command causes it to be executed in the
+ background. Typically you want to run two kinds of external commands
+ in the background:
+
+ - GUI applications that doesn't fork thus block vifm (:!sxiv %f &);
+
+ - console tools that do not work with terminal (:!mv %f %D &).
+
+ You don't want to run terminal commands, which require terminal input
+ or output something in background because they will mess up vifm's TUI.
+ Anyway, if you did run such a command, you can use Ctrl-L key to update
+ vifm's TUI.
+
+ Rewriting the example command with macros given above with background-
+ ing:
+
+ %m, %M, %s, %S, %u and %U macros cannot be combined with background
+ mark (" &") as it doesn't make much sense.
+
+Command backgrounding
+ Copy and move operation can take a lot of time to proceed. That's why
+ vifm supports backgrounding of this two operations. To run :copy,
+ :move or :delete command in the background just add " &" at the end of
+ a command.
+
+ For each background operation a new thread is created. Job cancella-
+ tion can be requested in the :jobs menu via dd shortcut.
+
+ You can see if command is still running in the :jobs menu. Back-
+ grounded commands have progress instead of process id at the line be-
+ ginning.
+
+ Background operations cannot be undone.
+
+Cancellation
+ Note that cancellation works somewhat different on Windows platform due
+ to different mechanism of break signal propagation. One also might
+ need to use Ctrl-Break shortcut instead of Ctrl-C.
+
+ There are two types of operations that can be cancelled:
+
+ - file system operations;
+
+ - mounting with FUSE (but not unmounting as it can cause loss of
+ data);
+
+ - calls of external applications.
+
+ Note that vifm never terminates applications, it sends SIGINT signal
+ and lets the application quit normally.
+
+ When one of set of operations is cancelled (e.g. copying of 5th file of
+ 10 files), further operations are cancelled too. In this case undo
+ history will contain only actually performed operations.
+
+ Cancelled operations are indicated by "(cancelled)" suffix appended to
+ information message on statusbar.
+
+ File system operations
+
+ Currently the following commands can be cancelled: :alink, :chmod,
+ :chown, :clone, :copy, :delete, :mkdir, :move, :restore, :rlink,
+ :touch. File putting (on p/P key) can be cancelled as well. It's not
+ hard to see that these are mainly long-running operations.
+
+ Cancelling commands when they are repeated for undo/redo operations is
+ allowed for convenience, but is not recommended as further undo/redo
+ operations might get blocked by side-effects of partially cancelled
+ group of operations.
+
+ These commands can't be cancelled: :empty, :rename, :substitute, :tr.
+
+ Mounting with FUSE
+
+ It's not considered to be an error, so only notification on the status
+ bar is shown.
+
+ External application calls
+
+ Each of this operations can be cancelled: :apropos, :find, :grep, :lo-
+ cate.
+
+Patterns
+ :highlight, :filetype, :filextype, :fileviewer commands and 'classify'
+ option support globs, regular expressions and mime types to match file
+ names or their paths.
+
+ There are six possible ways to write a single pattern:
+
+ 1. [!]{comma-separated-name-globs}
+
+ 2. [!]{{comma-separated-path-globs}}
+
+ 3. [!]/name-regular-expression/[iI]
+
+ 4. [!]//path-regular-expression//[iI]
+
+ 5. [!]
+
+ 6. undecorated-pattern
+
+ First five forms can include leading exclamation mark that negates pat-
+ tern matching.
+
+ The last form is implicitly refers to one of others. :highlight does
+ not accept undecorated form, while :filetype, :filextype, :fileviewer,
+ :select, :unselect and 'classify' treat it as list of name globs.
+
+ Path patterns receive absolute path of the file that includes its name
+ component as well.
+
+ To combine several patterns (AND them), make sure you're using one of
+ the first five forms and write patterns one after another, like this:
+ {*.vifm}
+ Mind that if you make a mistake the whole string will be treated as the
+ sixth form.
+
+ :filetype, :filextype and :fileviewer commands accept comma-separated
+ list of patterns instead of a single pattern, thus effectively handling
+ OR operation on them:
+ {*.vifm},{*.pdf}
+ Forms that accept comma-separated lists of patterns also process them
+ as lists of alternatives.
+
+ Patterns with regular expressions
+
+ Regular expression patterns are case insensitive by default, see de-
+ scription of commands, which might override default behaviour.
+
+ Flags of regular expressions mean the following:
+ - "i" makes filter case insensitive;
+ - "I" makes filter case sensitive. They can be repeated multiple
+ times, but the later one takes precedence (e.g. "iiiI" is equivalent
+ to "I" and "IiIi" is the same as "i").
+
+ There are no implicit `^` or `$`, so make sure to specify them explic-
+ itly if the pattern should match the whole name or path.
+
+ Patterns with globs
+
+ "Globs" section below provides short overview of globs and some impor-
+ tant points that one needs to know about them.
+
+ Patterns with mime-types
+
+ Mime type matching is essentially globs matching applied to mime type
+ of a file instead of its name/path. Note: mime types aren't detected
+ on Windows.
+
+ Examples
+
+ Associate `evince` to PDF-files only inside `/home/user/downloads/` di-
+ rectory (excluding its subdirectories):
+
+ :filextype //^/home/user/downloads/[^/]*.pdf$// evince %f
+
+
+Globs
+ Globs are always case insensitive as it makes sense in general case.
+
+ `*`, `?`, `[` and `]` are treated as special symbols in the pattern.
+ E.g.
+
+ :filetype * less %c
+
+ matches all files. One can use character classes for escaping, so
+
+ :filetype [*] less %c
+
+ matches only one file name, the one which contains only asterisk sym-
+ bol.
+
+ `*` means any number of any characters (possibly an empty substring),
+ with one exception: asterisk at the pattern beginning doesn't match dot
+ in the first position. E.g.
+
+ :fileviewer *.zip,*.jar zip -sf %c
+
+ associates using of `zip` program to preview all files with `zip` or
+ `jar` extensions as listing of their content, but `.file.zip` won't be
+ matched.
+
+ `?` means any character at this position. E.g.
+
+ :fileviewer ?.out file %c
+
+ calls `file` tool for all files which have exactly one character before
+ their extension (e.g. a.out, b.out).
+
+ Square brackets designate character class, which means that whole char-
+ acter class matches against any of characters listed in it. For exam-
+ ple
+
+ :fileviewer *.[ch] highlight -O xterm256 -s dante --syntax c %c
+
+ makes vifm call `highlight` program to colorize source and header files
+ in C language for a 256-color terminal. Equal command would be
+
+ :fileviewer *.c,*.h highlight -O xterm256 -s dante --syntax c %c
+
+
+ Inside square brackets `^` or `!` can be used for symbol class negotia-
+ tion and the `-` symbol to set a range. `^` and `!` should appear
+ right after the opening square bracket. For example
+
+ :filetype *.[!d]/ inspect_dir
+
+ associates `inspect_dir` as additional handler for all directories that
+ have one character extension unless it's "d" letter. And
+
+ :filetype [0-9].jpg sxiv
+
+ associates `sxiv` picture viewer only for JPEG-files that contain sin-
+ gle digit in their name.
+
+:set options
+ Local options
+ These are kind of options that are local to a specific view. So
+ you can set ascending sorting order for left pane and descending
+ order for right pane.
+
+ In addition to being local to views, each such option also has
+ two values:
+
+ - local to current directory (value associated with current
+ location);
+
+ - global to current directory (value associated with the
+ pane).
+
+ The idea is that current directory can be made a temporary ex-
+ ception to regular configuration of the view, until directory
+ change. Use :setlocal for that. :setglobal changes view value
+ not affecting settings until directory change. :set applies
+ changes immediately to all values.
+
+
+ 'aproposprg'
+ type: string
+ default: "apropos %a"
+ Specifies format for an external command to be invoked by the
+ :apropos command. The format supports expanding of macros, spe-
+ cific for a particular *prg option, and %% sequence for insert-
+ ing percent sign literally. This option should include the %a
+ macro to specify placement of arguments passed to the :apropos
+ command. If the macro is not used, it will be implicitly added
+ after a space to the value of this option.
+
+ 'autochpos'
+ type: boolean
+ default: true
+ When disabled vifm will set cursor to the first line in the view
+ after :cd and :pushd commands instead of saved cursor position.
+ Disabling this will also make vifm clear information about cur-
+ sor position in the view history on :cd and :pushd commands (and
+ on startup if 'autochpos' is disabled in the vifmrc). l key in
+ the ":history ." and ":trashes" menus are treated like :cd com-
+ mand. This option also affects marks so that navigating to a
+ mark doesn't restore cursor position.
+
+ When this option is enabled, more fine grained control over cur-
+ sor position is available via 'histcursor' option.
+
+ 'columns' 'co'
+ type: integer
+ default: terminal width on startup
+ Terminal width in characters.
+
+ 'caseoptions'
+ type: charset
+ default: ""
+ This option gives additional control over case sensitivity by
+ allowing overriding default behaviour to either always be case
+ sensitive or always be case insensitive. Possible values form
+ pairs of lower and upper case letters that configure specific
+ aspect of behaviour:
+ p - always ignore case of paths during completion.
+ P - always match case of paths during completion.
+ g - always ignore case of characters for f/F/;/,.
+ G - always match case of characters for f/F/;/,.
+
+ At most one item of each pair takes affect, if both or more are
+ present, only the last one matters. When none of pair's ele-
+ ments are present, the behaviour is default (depends on operat-
+ ing system for path completion and on values of 'ignorecase' and
+ 'smartcase' options for file navigation).
+
+ 'cdpath' 'cd'
+ type: string list
+ default: value of $CDPATH with commas instead of colons
+ Specifies locations to check on changing directory with relative
+ path that doesn't start with "./" or "../". When non-empty,
+ current directory is examined after directories listed in the
+ option.
+
+ This option doesn't affect completion of :cd command.
+
+ Example:
+
+ set cdpath=~
+
+ This way ":cd bin" will switch to "~/bin" even if directory
+ named "bin" exists in current directory, while ":cd ./bin" com-
+ mand will ignore value of 'cdpath'.
+
+ 'chaselinks'
+ type: boolean
+ default: false
+ When enabled path of view is always resolved to real path (with
+ all symbolic links expanded).
+
+ 'classify'
+ type: string list
+ default: ":dir:/"
+ Specifies file name prefixes and suffixes depending on file type
+ or name. The format is either of:
+ - [{prefix}]:{filetype}:[{suffix}]
+ - [{prefix}]::{pattern}::[{suffix}]
+ Possible {pattern} forms are described in "Patterns" section
+ above.
+
+ Priority rules:
+ - file name patterns have priority over type patterns
+ - file name patterns are matched in left-to-right order of
+ their appearance in this option
+
+ Either {prefix} or {suffix} or both can be omitted (which is the
+ default for all unspecified file types), this means empty {pre-
+ fix} and/or {suffix}. {prefix} and {suffix} should consist of
+ at most eight characters. Elements are separated by commas.
+ Neither prefixes nor suffixes are part of file names, so they
+ don't affect commands which operate on file names in any way.
+ Comma (',') character can be inserted by doubling it. List of
+ file type names can be found in the description of filetype()
+ function.
+
+ 'confirm' 'cf'
+ type: set
+ default: delete,permdelete
+ Defines which operations require confirmation:
+ - delete - moving files to trash (on d or :delete);
+ - permdelete - permanent deletion of files (on D or :delete!
+ command or on undo/redo operation).
+
+ 'cpoptions' 'cpo'
+ type: charset
+ default: "fst"
+ Contains a sequence of single-character flags. Each flag en-
+ ables behaviour of older versions of vifm. Flags:
+ - f - when included, running :filter command results in not in-
+ verted (matching files are filtered out) and :filter! in in-
+ verted (matching files are left) filter, when omitted, meaning
+ of the exclamation mark changes to the opposite;
+ - s - when included, yy, dd and DD normal mode commands act on
+ selection, otherwise they operate on current file only;
+ - t - when included, (thus ) behave as and
+ switches active pane, otherwise and go forward in
+ the view history. It's possible to make both and to
+ work as expected by setting up the terminal to emit a custom se-
+ quence when is pressed; see :histnext for details.
+
+ 'cvoptions'
+ type: set
+ default:
+ Specifies whether entering/leaving custom views triggers events
+ that normally happen on entering/leaving directories:
+ - autocmds - trigger autocommands on entering/leaving custom
+ views;
+ - localopts - reset local options on entering/leaving custom
+ views;
+ - localfilter - reset local filter on entering/leaving custom
+ views.
+
+ 'deleteprg'
+ type: string
+ default: ""
+ Specifies program to run on files that are permanently removed.
+ When empty, files are removed as usual, otherwise this command
+ is invoked on each file by appending its name. If the command
+ doesn't remove files, they will remain on the file system.
+
+ 'dirsize'
+ type: enumeration
+ default: size
+ Controls how size of directories is displayed in file views.
+ The following values are possible:
+ - size - size of directory (i.e., size used to store list of
+ files)
+ - nitems - number of entries in the directory (excluding . and
+ ..)
+
+ Size obtained via ga/gA overwrites this setting so seeing count
+ of files and occasionally size of directories is possible.
+
+ 'dotdirs'
+ type: set
+ default: nonrootparent
+ Controls displaying of dot directories. The following values
+ are possible:
+ - rootparent - show "../" in root directory of file system
+ - nonrootparent - show "../" in non-root directories of file
+ system
+
+ Note that empty directories always contain "../" entry regard-
+ less of value of this option. "../" disappears at the moment at
+ least one file is created.
+
+ 'dotfiles'
+ type: boolean
+ default: false
+ Whether dot files are shown in the view. Can be controlled with
+ z* bindings.
+
+ 'fastrun'
+ type: boolean
+ default: false
+ With this option turned on you can run partially entered com-
+ mands with unambiguous beginning using :! (e.g. :!Te instead of
+ :!Terminal or :!Te).
+
+ 'fillchars' 'fcs'
+ type: string list
+ default: ""
+ Sets characters used to fill borders.
+
+ item default used for
+ vborder:c ' ' left, middle and right vertical bor-
+ ders
+
+ If value is omitted, its default value is used. Example:
+
+ set fillchars=vborder:.
+
+ 'findprg'
+ type: string
+ default: "find %s %a -print , -type d \( ! -readable -o ! -exe-
+ cutable \) -prune"
+ Specifies format for an external command to be invoked by the
+ :find command. The format supports expansion of macros specific
+ for this particular option and %% sequence for inserting percent
+ sign literally. The macros are:
+
+ macro value/meaning
+ %s literal arguments of :find or
+ list of paths to search in
+
+ %A empty or
+ literal arguments of :find
+ %a empty or
+ literal arguments of :find or
+ predicate followed by escaped arguments of :find
+ %p empty or
+ literal arguments of :find or
+ escaped arguments (parameters) of :find
+
+ %u redirect output to custom view instead of showing a
+ menu
+ %U redirect output to unsorted custom view instead of
+ showing a menu
+
+ Predicate in %a is "-name" on *nix and "-iname" on Windows.
+
+ If both %u and %U are specified, %U is chosen.
+
+ Some macros can be added implicitly:
+ - if %s isn't present, it's appended
+ - if neither of %a, %A and %p is present, %a is appended
+ - if neither of %s, %a, %A and %p is present, %s and %a are ap-
+ pended in this order
+
+ The macros slightly change their meaning depending on format of
+ :find's arguments:
+ - if the first argument points to an existing directory, %s is
+ assigned all arguments while %a, %A and %p are left empty
+ - otherwise:
+ - %s is assigned a dot (".") meaning current directory or
+ list of selected file names, if any
+ - %a, %A and %p are assigned literal arguments when first
+ argument starts with a dash ("-"), otherwise %a gets an escaped
+ version of the arguments with a predicate and %p contains es-
+ caped version of the arguments
+
+ Starting with Windows Server 2003 a `where` command is avail-
+ able. One can configure vifm to use it in the following way:
+
+ set findprg="where /R %s %A"
+
+ As the syntax of this command is rather limited, one can't use
+ :find command with selection of more than one item because the
+ command ignores all directory paths except for the last one.
+
+ When using find port on Windows, another option is to setup
+ 'findprg' like this:
+
+ set findprg="find %s %a"
+
+
+ 'followlinks'
+ type: boolean
+ default: true
+ Follow links on l or Enter. That is navigate to destination
+ file instead of treating the link as if it were target file.
+ Doesn't affects links to directories, which are always entered
+ (use gf key for directories).
+
+ 'fusehome'
+ type: string
+ default: "($XDG_DATA_HOME/.local/share | $VIFM)/fuse/"
+ Directory to be used as a root dir for FUSE mounts. Value of
+ the option can contain environment variables (in form "$en-
+ vname"), which will be expanded (prepend it with a slash to pre-
+ vent expansion). The value should expand to an absolute path.
+
+ If you change this option, vifm won't remount anything. It af-
+ fects future mounts only. See "Automatic FUSE mounts" section
+ below for more information.
+
+ 'gdefault' 'gd'
+ type: boolean
+ default: false
+ When on, 'g' flag is on for :substitute by default.
+
+ 'grepprg'
+ type: string
+ default: "grep -n -H -I -r %i %a %s"
+ Specifies format for an external command to be invoked by the
+ :grep command. The format supports expanding of macros, spe-
+ cific for a particular *prg option, and %% sequence for insert-
+ ing percent sign literally. This option should include the %i
+ macro to specify placement of "-v" string when inversion of re-
+ sults is requested, %a or %A macro to specify placement of argu-
+ ments passed to the :grep command and the %s macro to specify
+ placement of list of files to search in. If some of the macros
+ are not used, they will be implicitly added after a space to the
+ value of the 'grepprg' option in the following order: %i, %a,
+ %s. Note that when neither %a nor %A are specified, it's %a
+ which is added implicitly.
+
+ Optional %u or %U macro could be used (if both specified %U is
+ chosen) to force redirection to custom or unsorted custom view
+ respectively.
+
+ See 'findprg' option for description of difference between %a
+ and %A.
+
+ Example of setup to use ack (http://beyondgrep.com/) instead of
+ grep:
+
+ set grepprg='ack -H -r %i %a %s'
+
+ or The Silver Searcher (https://github.com/ggreer/the_sil-
+ ver_searcher):
+
+ set grepprg='ag --line-numbers %i %a %s'
+
+
+
+ 'histcursor'
+ type: set
+ default: startup,dirmark,direnter
+ Defines situations when cursor should be moved according to di-
+ rectory history:
+ - startup - on loading file lists during startup
+ - dirmark - after navigating to a mark that doesn't specify
+ file
+ - direnter - on opening directory from a file list
+
+ This option has no effect when 'autochpos' is disabled.
+
+ Note that the list is not exhaustive and there are other situa-
+ tions when cursor is positioned automatically.
+
+ 'history' 'hi'
+ type: integer
+ default: 15
+ Maximum number of stored items in all histories.
+
+ 'hlsearch' 'hls'
+ type: boolean
+ default: true
+ Highlight all matches of search pattern.
+
+ 'iec' type: boolean
+ default: false
+ Use KiB, MiB, ... suffixes instead of K, M, ... when printing
+ size in human-friendly format.
+
+ 'ignorecase' 'ic'
+ type: boolean
+ default: false
+ Ignore case in search patterns (:substitute, / and ? commands)
+ and characters after f and F commands. It doesn't affect file
+ filtering.
+
+ 'incsearch' 'is'
+ type: boolean
+ default: false
+ When this option is set, search and view update for local filter
+ is be performed starting from initial cursor position each time
+ search pattern is changed.
+
+ 'iooptions'
+ type: set
+ default:
+ Controls details of file operations. The following values are
+ available:
+ - fastfilecloning - perform fast file cloning (copy-on-write),
+ when available
+ (available on Linux and btrfs file system).
+
+ 'laststatus' 'ls'
+ type: boolean
+ default: true
+ Controls if status bar is visible.
+
+ 'lines'
+ type: integer
+ default: terminal height on startup
+ Terminal height in lines.
+
+ 'locateprg'
+ type: string
+ default: "locate %a"
+ Specifies format for an external command to be invoked by the
+ :locate command. The format supports expanding of macros, spe-
+ cific for a particular *prg option, and %% sequence for insert-
+ ing percent sign literally. This option should include the %a
+ macro to specify placement of arguments passed to the :locate
+ command. If the macro is not used, it will be implicitly added
+ after a space to the value of this option.
+
+ Optional %u or %U macro could be used (if both specified %U is
+ chosen) to force redirection to custom or unsorted custom view
+ respectively.
+
+ 'mediaprg'
+ type: string
+ default: path to bundled script that supports udevil, udisks and
+ udisks2
+ (using udisks2 requires python with dbus module in-
+ stalled)
+ OS X: path points to a python script that uses diskutil
+ {only for *nix}
+ Specifies command to be used to manage media devices. Used by
+ :media command.
+
+ The command can be passed the following parameters:
+ - list -- list media
+ - mount {device} -- mount a device
+ - unmount {path} -- unmount given mount point
+
+ The output of `list` subcommand is parsed in search of lines
+ that start with one of the following prefixes:
+ - device= - specifies device path (e.g., "/dev/sde")
+ - label= - specifies optional device label (e.g., "Memory
+ card")
+ - info= - specifies arbitrary text to display next to
+ device (by
+ default "[label]" is used, if label is pro-
+ vided)
+ - mount-point= - specifies a mount point (can be absent or ap-
+ pear more than once)
+
+ All other lines are ignored. Each `device=` starts a new sec-
+ tion describing a device which should include two other possible
+ prefixes.
+
+ `list` subcommand is assumed to always succeed, while exit code
+ of `mount` and `unmount` is taken into account to determine
+ whether operation was performed successfully.
+
+ 'lsoptions'
+ type: string list
+ default: ""
+ scope: local
+
+ Configures ls-like view.
+
+ item used for
+ transposed filling view grid by columns rather than by
+ lines
+
+
+ 'lsview'
+ type: boolean
+ default: false
+ scope: local
+ When this option is set, directory view will be displayed in
+ multiple columns with file names similar to output of `ls -x`
+ command. See "ls-like view" section below for format descrip-
+ tion. This option has no effect if 'millerview' is on.
+
+ 'milleroptions'
+ type: string list
+ default: "lsize:1,csize:1,rsize:1,rpreview:dirs"
+ scope: local
+
+ Configures miller view.
+
+ item default used for
+ lsize:num 0 left column
+ csize:num 1 center column (can't be disabled)
+ rsize:num 0 right column
+ rpreview:str dirs right column
+
+ *size specifies ratios of columns. Each ratio is in the range
+ from 0 to 100 and values are adjusted to fit the limits. Zero
+ disables a column, but central (main) column can't be disabled.
+
+ rpreview specifies what file-system objects should be previewed
+ in the right column and can take two values: dirs (only directo-
+ ries) or all. Both options don't include parent directory
+ ("..").
+
+ Example of two-column mode which is useful in combination with
+ :view command:
+
+ set milleroptions=lsize:1,csize:2
+
+
+ 'millerview'
+ type: boolean
+ default: false
+ scope: local
+ When this option is set, directory view will be displayed in
+ multiple cascading columns. Ignores 'lsview'.
+
+ 'mintimeoutlen'
+ type: integer
+ default: 150
+ The fracture of 'timeoutlen' in milliseconds that is waited be-
+ tween subsequent input polls, which affects various asynchronous
+ operations (detecting changes made by external applications,
+ monitoring background jobs, redrawing UI). There are no strict
+ guarantees, however the higher this value is, the less is CPU
+ load in idle mode.
+
+ 'number' 'nu'
+ type: boolean
+ default: false
+ scope: local
+ Print line number in front of each file name when 'lsview' op-
+ tion is turned off. Use 'numberwidth' to control width of line
+ number. Also see 'relativenumber'.
+
+ 'numberwidth' 'nuw'
+ type: integer
+ default: 4
+ scope: local
+ Minimal number of characters for line number field.
+
+ 'previewprg'
+ type: string
+ default: ""
+ scope: local
+
+ External command to be used instead of preview programs config-
+ ured via :fileviewer command.
+
+ Example:
+
+ " always show git log in preview of files inside some repository
+ au DirEnter '~/git-repo/**/*' setl previewprg='git log --color -- %c 2>&1'
+
+ 'quickview'
+ type: boolean
+ default: false
+ Whether quick view (:view) is currently active or not.
+
+ 'relativenumber' 'rnu'
+ type: boolean
+ default: false
+ scope: local
+ Print relative line number in front of each file name when
+ 'lsview' option is turned off. Use 'numberwidth' to control
+ width of line number. Various combinations of 'number' and
+ 'relativenumber' lead to such results:
+
+ nonumber number
+
+ norelativenumber | first | 1 first
+ | second | 2 second
+ | third | 3 third
+
+ relativenumber | 1 first | 1 first
+ | 0 second |2 second
+ | 1 third | 1 third
+
+
+ 'rulerformat' 'ruf'
+ type: string
+ default: "%l/%S "
+ Determines the content of the ruler. Its minimal width is 13
+ characters and it's right aligned. Following macros are sup-
+ ported:
+ %= - separation point between left and right aligned halves of
+ the line
+ %l - file number
+ %L - total number of files in view (including filtered out
+ ones)
+ %x - number of files excluded by filters
+ %0- - old name for %x macro
+ %S - number of displayed files
+ %= - separation point between left and right align items
+ %% - percent sign
+ %[ - designates beginning of an optional block
+ %] - designates end of an optional block
+
+ Percent sign can be followed by optional minimum field width.
+ Add '-' before minimum field width if you want field to be right
+ aligned.
+
+ Example:
+
+ set rulerformat='%2l-%S%[ +%x%]'
+
+ 'runexec'
+ type: boolean
+ default: false
+ Run executable file on Enter or l.
+
+ 'scrollbind' 'scb'
+ type: boolean
+ default: false
+ When this option is set, vifm will try to keep difference of
+ scrolling positions of two windows constant.
+
+ 'scrolloff' 'so'
+ type: integer
+ default: 0
+ Minimal number of screen lines to keep above and below the cur-
+ sor. If you want cursor line to always be in the middle of the
+ view (except at the beginning or end of the file list), set this
+ option to some large value (e.g. 999).
+
+ 'shell' 'sh'
+ type: string
+ default: $SHELL or "/bin/sh" or "cmd" (on MS-Windows)
+ Full path to the shell to use to run external commands. On *nix
+ a shell argument can be supplied.
+
+ 'shellcmdflag' 'shcf'
+ type: string
+ default: "-c" or "/C" (for cmd.exe on MS-Windows)
+ Command-line option used to pass a command to 'shell'. It's
+ used in contexts where command comes from the user.
+
+ 'shortmess' 'shm'
+ type: charset
+ default: "p"
+ Contains a sequence of single-character flags. Each flag en-
+ ables shortening of some message displayed by vifm in the TUI.
+ Flags:
+ - L - display only last directory in tab line instead of full
+ path.
+ - M - shorten titles in windows of terminal multiplexers cre-
+ ated by vifm down to file name instead of using full path.
+ - T - truncate status-bar messages in the middle if they are
+ too long to fit on the command line. "..." will appear in the
+ middle.
+ - p - use tilde shortening in view titles.
+
+
+ 'showtabline' 'stal'
+ type: enumeration
+ default: multiple
+ Specifies when tab line should be displayed. Possible values:
+ - never - never display tab line
+ - multiple - show tab line only when there are at least two
+ tabs
+ - always - display tab line always
+
+ Alternatively 0, 1 and 2 Vim-like values are also accepted and
+ correspond to "never", "multiple" and "always" respectively.
+
+
+ 'sizefmt'
+ type: string list
+ default: "units:iec"
+ Configures the way size is formatted in human-friendly way.
+
+ item value meaning
+ units: iec Use 1024 byte units (K or KiB,
+ etc.).
+ See 'iec' option.
+ si Use 1000 byte units (KB, etc.).
+ precision: i > 0 How many fraction digits to con-
+ sider.
+ {not set} Precision of 1 for integer part
+ < 10,
+ 0 otherwise (provides old behav-
+ iour).
+ space {present} Insert space before unit sym-
+ bols.
+ This is the default.
+ nospace {present} Do not insert space before unit
+ symbols.
+
+ Numbers are rounded from zero. Trailing zeros are dropped.
+
+ Example:
+
+ set sizefmt=units:iec,precision:2,nospace
+
+
+ 'slowfs'
+ type: string list
+ default: ""
+ only for *nix
+ A list of mounter fs name beginnings (first column in /etc/mtab
+ or /proc/mounts) or paths prefixes for fs/directories that work
+ too slow for you. This option can be used to stop vifm from
+ making some requests to particular kinds of file systems that
+ can slow down file browsing. Currently this means don't check
+ if directory has changed, skip check if target of symbolic links
+ exists, assume that link target located on slow fs to be a di-
+ rectory (allows entering directories and navigating to files via
+ gf). If you set the option to "*", it means all the systems are
+ considered slow (useful for cygwin, where all the checks might
+ render vifm very slow if there are network mounts).
+
+ Example for autofs root /mnt/autofs:
+
+ set slowfs+=/mnt/autofs
+
+ 'smartcase' 'scs'
+ type: boolean
+ default: false
+ Overrides the ignorecase option if the search pattern contains
+ at least one upper case character. Only used when ignorecase
+ option is enabled. It doesn't affect file filtering.
+
+ 'sort' type: string list
+ default: +name on *nix and +iname on Windows
+ scope: local
+ Sets list of sorting keys (first item is primary key, second is
+ secondary key, etc.):
+ [+-]ext - extension of files and directories
+ [+-]fileext - extension of files only
+ [+-]name - name (including extension)
+ [+-]iname - name (including extension, ignores case)
+ [+-]type - file type
+ (dir/reg/exe/link/char/block/sock/fifo)
+ [+-]dir - directory grouping (directory < file)
+ [+-]gid - group id (*nix only)
+ [+-]gname - group name (*nix only)
+ [+-]mode - file type derived from its mode (*nix only)
+ [+-]perms - permissions string (*nix only)
+ [+-]uid - owner id (*nix only)
+ [+-]uname - owner name (*nix only)
+ [+-]nlinks - number of hard links (*nix only)
+ [+-]inode - inode number (*nix only)
+ [+-]size - size
+ [+-]nitems - number of items in a directory (zero for files)
+ [+-]groups - groups extracted via regexps from 'sortgroups'
+ [+-]target - symbolic link target (empty for other file
+ types)
+ [+-]atime - time accessed (e.g. read, executed)
+ [+-]ctime - time changed (changes in metadata, e.g. mode)
+ [+-]mtime - time modified (when file contents is changed)
+
+ Note: look for st_atime, st_ctime and st_mtime in "man 2 stat"
+ for more information on time keys.
+
+ '+' means ascending sort for this key, and '-' means descending
+ sort.
+
+ "dir" key is somewhat similar in this regard but it's added im-
+ plicitly: when "dir" is not specified, sorting behaves as if it
+ was the first key in the list. That's why if one wants sorting
+ algorithm to mix directories and files, "dir" should be appended
+ to sorting option, for example like this:
+
+ set sort+=dir
+
+ or
+
+ set sort=-size,dir
+
+ Value of the option is checked to include dir key and default
+ sorting key (name on *nix, iname on Windows). Here is what hap-
+ pens if one of them is missing:
+
+ - type key is added at the beginning;
+
+ - default key is added at the end;
+
+ all other keys are left untouched (at most they are moved).
+
+ This option also changes view columns according to primary sort-
+ ing key set, unless 'viewcolumns' option is not empty.
+
+ 'sortnumbers'
+ type: boolean
+ default: false
+ scope: local
+ Natural sort of (version) numbers within text.
+
+ 'sortgroups'
+ type: string
+ default: ""
+ scope: local
+ Sets comma-separated list of regular expressions to use for
+ group sorting, double comma is literal comma. Each expression
+ should contain at least one group or its value will be consid-
+ ered to be always empty. Only first match of each regular ex-
+ pression is considered. Groups are considered from right to
+ first similar to 'sort', first group divides list of files into
+ sub-groups, each of which is sorted by the second group and so
+ on.
+
+ Example:
+ set sortgroups=-(done|todo).*
+ this would put files with "-done" in their names above all files
+ with "-todo".
+
+ 'sortorder'
+ type: enumeration
+ default: ascending
+ Sets sort order for primary key: ascending, descending.
+
+ 'statusline' 'stl'
+ type: string
+ default: ""
+ Determines the content of the status line (the line right above
+ command-line). Empty string means use same format like in pre-
+ vious versions. Following macros are supported:
+
+ - %t - file name (considering value of the 'classify' option)
+
+ - %T - symbolic link target (empty for other filetypes)
+
+ - %f - file name relative to current directory (considers 'clas-
+ sify')
+
+ - %A - file attributes (permissions on *nix or properties on
+ Windows) %u - user name or uid (if it cannot be resolved)
+
+ - %g - group name or gid (if it cannot be resolved)
+
+ - %s - file size in human readable format
+
+ - %E - size of selected files in human readable format, same as
+ %s when no files are selected, except that it will never show
+ size of ../ in visual mode, since it cannot be selected
+
+ - %d - file modification date (uses 'timefmt' option)
+
+ - %D - path of the other pane for single-pane layout
+
+ - %a - amount of free space available at current partition
+
+ - %z - short tips/tricks/hints that chosen randomly after one
+ minute period
+
+ - %{} - evaluate arbitrary vifm expression '', e.g.
+ '&sort'
+
+ - %* - resets or applies one of User1..User9 highlight groups;
+ reset happens when width field is 0 or not specified, one of
+ groups gets picked when width field is in the range from 1 to
+ 9
+
+ - all 'rulerformat' macros
+
+ Percent sign can be followed by optional minimum field width.
+ Add '-' before minimum field width if you want field to be right
+ aligned.
+
+ On Windows file properties include the following flags (upper
+ case means flag is on):
+ A - archive
+ H - hidden
+ I - content isn't indexed
+ R - readonly
+ S - system
+ C - compressed
+ D - directory
+ E - encrypted
+ P - reparse point (e.g. symbolic link)
+ Z - sparse file
+
+ Example without colors:
+
+ set statusline=" %t%= %A %10u:%-7g %15s %20d %{&sort} "
+
+ Example with colors:
+
+ highlight User1 ctermbg=yellow
+ highlight User2 ctermbg=blue ctermfg=white cterm=bold
+ set statusline="%1* %-26t %2* %= %1* %A %2* %7u:%-7g %1* %-5s %2* %d "
+
+
+ 'suggestoptions'
+ type: string list
+ default:
+ Controls when, for what and how suggestions are displayed. The
+ following values are available:
+ - normal - in normal mode;
+ - visual - in visual mode;
+ - view - in view mode;
+ - otherpane - use other pane to display suggestions, when
+ available;
+ - delay[:num] - display suggestions after a small delay (to
+ do not annoy if you just want to type a fast shortcut consisting
+ of multiple keys), num specifies the delay in ms (500 by de-
+ fault), 'timeoutlen' at most;
+ - keys - include shortcuts (commands and selectors);
+ - foldsubkeys - fold multiple keys with common prefix;
+ - marks - include marks;
+ - registers[:num] - include registers, at most num files (5 by
+ default).
+
+ 'syncregs'
+ type: string
+ default:
+ Specifies identifier of group of instances that share registers
+ between each other. When several instances of vifm have this
+ option set to identical value, they automatically synchronize
+ contents of their registers on operations which use them.
+
+ 'syscalls'
+ type: boolean
+ default: false
+ When disabled, vifm will rely on external applications to per-
+ form file-system operations, otherwise system calls are used in-
+ stead (much faster and supports progress tracking). The option
+ should eventually be removed. Mostly *nix-like systems are af-
+ fected.
+
+ 'tabscope'
+ type: enumeration
+ default: global
+ Picks style of tabs, which defines what a single tab contains.
+ Possible values:
+ - global - tab describes complete UI of two views and how they
+ are arranged
+ - pane - tab is located "inside" a pane and manages it and
+ quick view
+
+ 'tabstop' 'ts'
+ type: integer
+ default: value from curses library
+ Number of spaces that a Tab in the file counts for.
+
+ 'timefmt'
+ type: string
+ default: "%m/%d %H:%M"
+ Format of time in file list. See "man 1 date" or "man 3 strf-
+ time" for details.
+
+ 'timeoutlen' 'tm'
+ type: integer
+ default: 1000
+ The time in milliseconds that is waited for a mapped key in case
+ of already typed key sequence is ambiguous.
+
+ 'title'
+ type: boolean
+ default: true when title can be restored, false otherwise
+ When enabled, title of the terminal or terminal multiplexer's
+ window is updated according to current location. Because not
+ all terminals support setting title, this works only if `$TERM`
+ value matches one of the following conditions:
+ - equals "xterm" or starts with "xterm-"
+ - equals "rxvt" or starts with "rxvt-"
+ - equals "screen" or starts with "screen-"
+ - equals "aterm"
+ - equals "Eterm"
+
+ 'trash'
+ type: boolean
+ default: true
+ Use trash directory. See "Trash directory" section below.
+
+ 'trashdir'
+ type: string
+ default: on *nix:
+ "%r/.vifm-Trash-%u,$VIFM/Trash,%r/.vifm-Trash"
+ or if $VIFM/Trash doesn't exist
+ "%r/.vifm-Trash-%u,$XDG_DATA_HOME/vifm/Trash,%r/.vifm-Trash"
+ on Windows:
+ "%r/.vifm-Trash,$XDG_DATA_HOME/vifm/Trash"
+ List of trash directory path specifications, separated with com-
+ mas. Each list item either defines an absolute path to trash
+ directory or a path relative to a mount point root when list el-
+ ement starts with "%r/". Value of the option can contain envi-
+ ronment variables (of form "$envname"), which will be expanded
+ (prepend $ with a slash to prevent expansion). Environment
+ variables are expanded when the option is set.
+
+ On *nix, if element ends with "%u", the mark is replaced with
+ real user ID and permissions are set so that only that only
+ owner is able to use it.
+ Note that even this setup is not completely secure when combined
+ with "%r/" and it's overall safer to keep files in home direc-
+ tory, but that implies cost of copying files between partitions.
+
+ When new file gets cut (deleted) vifm traverses each element of
+ the option in the order of their appearance and uses first trash
+ directory that it was able to create or that is already
+ writable.
+
+ Default value tries to use trash directory per mount point and
+ falls back to ~/.vifm/Trash on failure.
+
+ Will attempt to create the directory if it does not exist. See
+ "Trash directory" section below.
+
+ 'tuioptions' 'to'
+ type: charset
+ default: "ps"
+ Each flag configures some aspect of TUI appearance. The flags
+ are:
+ p - when included:
+ * file list inside a pane gets additional single character
+ padding on left and right sides;
+ * quick view and view mode get single character padding.
+ s - when included, left and right borders (side borders, hence
+ "s" character) are visible.
+ u - use Unicode characters in the TUI (Unicode ellipsis instead
+ of "...").
+
+ 'undolevels' 'ul'
+ type: integer
+ default: 100
+ Maximum number of changes that can be undone. Note that here
+ single file operation is used as a unit, not operation, i.e.
+ deletion of 101 files will exceed default limit.
+
+ 'vicmd'
+ type: string
+ default: "vim"
+ Command used to edit files in various contexts. Ampersand sign
+ at the end (regardless whether it's preceded by space or not)
+ means backgrounding of command.
+
+ Background flag is ignored in certain context where vifm waits
+ for the editor to finish. Such contexts include any command
+ that spawns editor to change list of file names or a command,
+ with :rename being one example. `-f` is also appended to pre-
+ vent forking in such cases, so the command needs to handle the
+ flag.
+
+ Additionally `+{num}` and `+'call cursor()'` arguments are used
+ to position cursor when location is known.
+
+ 'viewcolumns'
+ type: string
+ default: ""
+ scope: local
+ Format string containing list of columns in the view. When this
+ option is empty, view columns to show are chosen automatically
+ using sorting keys (see 'sort') as a base. Value of this option
+ is ignored if 'lsview' is set. See "Column view" section below
+ for format description.
+
+ An example of setting the options for both panes (note :windo
+ command):
+
+ windo set viewcolumns=-{name}..,6{size},11{perms}
+
+ 'vixcmd'
+ type: string
+ default: value of 'vicmd'
+ Same as 'vicmd', but takes precedence over it when running in-
+ side a graphical environment.
+
+ 'vifminfo'
+ type: set
+ default: bookmarks,bmarks
+ Controls what will be saved in the $VIFM/vifminfo file.
+
+ bmarks - named bookmarks
+ bookmarks - marks, except special ones like '< and '>
+ tui - state of the user interface (sorting, number of
+ windows, quick
+ view state, active view)
+ dhistory - directory history
+ state - file name and dot filters and terminal multiplex-
+ ers integration
+ state
+ cs - primary color scheme
+ savedirs - save last visited directory (requires dhistory)
+ chistory - command line history
+ shistory - search history (/ and ? commands)
+ phistory - prompt history
+ fhistory - history of local filter (see description of the
+ "=" normal mode
+ command)
+ dirstack - directory stack overwrites previous stack, unless
+ stack of
+ current session is empty
+ registers - registers content
+ options - all options that can be set with the :set command
+ (obsolete)
+ filetypes - associated programs and viewers (obsolete)
+ commands - user defined commands (see :command description)
+ (obsolete)
+
+ 'vimhelp'
+ type: boolean
+ default: false
+ Use vim help format.
+
+ 'wildmenu' 'wmnu'
+ type: boolean
+ default: false
+ Controls whether possible matches of completion will be shown
+ above the command line.
+
+ 'wildstyle'
+ type: enumeration
+ default: bar
+ Picks presentation style of wild menu. Possible values:
+ - bar - one-line with left-to-right cursor
+ - popup - multi-line with top-to-bottom cursor
+
+ 'wordchars'
+ type: string list
+ default: "1-8,14-31,33-255" (that is all non-whitespace charac-
+ ters)
+ Specifies which characters in command-line mode should be con-
+ sidered as part of a word. Value of the option is comma-sepa-
+ rated list of ranges. If both endpoints of a range match, sin-
+ gle endpoint is enough (e.g. "a" = "a-a"). Both endpoints are
+ inclusive. There are two accepted forms: character representing
+ itself or number encoding character according to ASCII table.
+ In case of ambiguous characters (dash, comma, digit) use numeric
+ form. Accepted characters are in the range from 0 to 255. Any
+ Unicode character with code greater than 255 is considered to be
+ part of a word.
+
+ The option affects Alt-D, Alt-B and Alt-F, but not Ctrl-W. This
+ is intentionally to allow two use cases:
+
+ - Moving by WORDS and deletion by words.
+ - Moving by words and deletion by WORDS.
+
+ To get the latter use the following mapping:
+
+ cnoremap
+
+ Also used for abbreviations.
+
+ 'wrap' type: boolean
+ default: true
+ Controls whether to wrap text in quick view.
+
+ 'wrapscan' 'ws'
+ type: boolean
+ default: true
+ Searches wrap around end of the list.
+
+Mappings
+ Map arguments
+
+ LHS of mappings can be preceded by arguments which take the form of
+ special sequences:
+
+
+ Postpone UI updates until RHS is completely processed.
+
+ In case of builtin mapping causing conflict for a user-defined
+ mapping (e.g., `t` builtin to a partially typed `ta` user-de-
+ fined mapping), ignore the builtin mapping and wait for input
+ indefinitely as opposed to default behaviour of triggering the
+ builtin mapping after a delay defined by 'timeoutlen'. Example:
+
+ nnoremap tw :set wrap!
+ nnoremap tn :set number!
+ nnoremap tr :set relativenumber!
+
+ Special sequences
+
+ Since it's not easy to enter special characters there are several spe-
+ cial sequences that can be used in place of them. They are:
+
+ Enter key.
+
+ Escape key.
+
+
+ Space key.
+
+ Less-than character (<).
+
+ provides a way to disable a mapping (by mapping it to ).
+
+ Backspace key (see key conflict description below).
+
+
+ Tabulation and Shift+Tabulation keys.
+
+
+ Home/End.
+
+
+ Arrow keys.
+
+
+ PageUp/PageDown.
+
+
+ Delete key. and mean different codes, but
+ is more common.
+
+
+ Insert key.
+
+ ,,...,,,,,,
+ Control + some key (see key conflict description below).
+
+ only for *nix
+ Control + Space.
+
+ ,,...,
+ ,,..., Alt + some key.
+
+ ,,...,
+ ,,..., only for *nix
+ Alt + Ctrl + some key.
+
+ -
+ Functional keys.
+
+ -
+ only for MS-Windows
+ functional keys with Control key pressed.
+
+ -
+ only for MS-Windows
+ functional keys with Alt key pressed.
+
+ -
+ only for MS-Windows
+ functional keys with Shift key pressed.
+
+ Note that due to the way terminals process their input, several key-
+ board keys might be mapped to single key code, for example:
+
+ - and ;
+
+ - and ;
+
+ - and ;
+
+ - etc.
+
+ Most of the time they are defined consistently and don't cause sur-
+ prises, but and are treated differently in different envi-
+ ronments (although they match each other all the time), that's why they
+ correspond to different keys in vifm. As a consequence, if you map or be sure to repeat the mapping with the other one so that it
+ works in all environments. Alternatively, provide your mapping in one
+ form and add one of the following:
+
+ " if mappings with in the LHS work
+ map
+ " if mappings with in the LHS work
+ map
+
+ Whitespace
+
+ vifm removes whitespace characters at the beginning and end of com-
+ mands. That's why you may want to use at the end of rhs in
+ mappings. For example:
+
+ cmap man
+
+ will put "man " in line when you hit the key in the command line
+ mode.
+
+Expression syntax
+ Supported expressions is a subset of what VimL provides.
+
+ Expression syntax summary, from least to most significant:
+
+ expr1 expr2
+ expr2 || expr2 .. logical OR
+
+ expr2 expr3
+ expr3 && expr3 .. logical AND
+
+ expr3 expr4
+ expr4 == expr4 equal
+ expr4 != expr4 not equal
+ expr4 > expr4 greater than
+ expr4 >= expr4 greater than or equal
+ expr4 < expr4 smaller than
+ expr4 <= expr4 smaller than or equal
+
+ expr4 expr5
+ expr5 + expr5 .. number addition
+ expr5 - expr5 .. number subtraction
+
+ expr5 expr6
+ expr6 . expr6 .. string concatenation
+
+ expr6 expr7
+ - expr6 unary minus
+ + expr6 unary plus
+ ! expr6 logical NOT
+
+ expr7 number number constant
+ "string" string constant, \ is special
+ 'string' string constant, ' is doubled
+ &option option value
+ $VAR environment variable
+ v:var builtin variable
+ function(expr1, ...) function call
+ (expr1) nested expression
+
+ ".." indicates that the operations in this level can be concatenated.
+
+ expr1
+ -----
+ expr2 || expr2
+
+ Arguments are converted to numbers before evaluation.
+
+ Result is non-zero if at least one of arguments is non-zero.
+
+ It's right associative and with short-circuiting, so sub-expressions
+ are evaluated from left to right until result of whole expression is
+ determined (i.e., until first non-zero) or end of the expression.
+
+ expr2
+ -----
+ expr3 && expr3
+
+ Arguments are converted to numbers before evaluation.
+
+ Result is non-zero only if both arguments are non-zero.
+
+ It's right associative and with short-circuiting, so sub-expressions
+ are evaluated from left to right until result of whole expression is
+ determined (i.e., until first zero) or end of the expression.
+
+ expr3
+ -----
+ expr4 {cmp} expr4
+
+ Compare two expr4 expressions, resulting in a 0 if it evaluates to
+ false or 1 if it evaluates to true.
+
+ equal ==
+ not equal !=
+ greater than >
+ greater than or equal >=
+ smaller than <
+ smaller than or equal <=
+
+ Examples:
+
+ 'a' == 'a' == 1
+ 'a' > 'b' == 1
+ 'a' == 'b' == 0
+ '2' > 'b' == 0
+ 2 > 'b' == 1
+ 2 > '1b' == 1
+ 2 > '9b' == 0
+ -1 == -'1' == 1
+ 0 == '--1' == 1
+
+ expr4
+ -----
+ expr5 + expr5 .. number addition expr5 - expr5 .. number sub-
+ traction
+
+ Examples:
+
+ 1 + 3 - 3 == 1
+ 1 + '2' == 3
+
+ expr5
+ -----
+ expr6 . expr6 .. string concatenation
+
+ Examples:
+
+ 'a' . 'b' == 'ab'
+ 'aaa' . '' . 'c' == 'aaac'
+
+ expr6
+ -----
+
+ - expr6 unary minus
+ + expr6 unary plus
+ ! expr6 logical NOT
+
+ For '-' the sign of the number is changed.
+ For '+' the number is unchanged.
+ For '!' non-zero becomes zero, zero becomes one.
+
+ A String will be converted to a Number first.
+
+ These operations can be repeated and mixed. Examples:
+
+ --9 == 9
+ ---9 == -9
+ -+9 == 9
+ !-9 == 0
+ !'' == 1
+ !'x' == 0
+ !!9 == 1
+
+ expr7
+ -----
+
+ number number constant
+ -----
+
+ Decimal number. Examples:
+
+ 0 == 0
+ 0000 == 0
+ 01 == 1
+ 123 == 123
+ 10000 == 10000
+
+ string
+ ------
+ "string" string constant
+
+ Note that double quotes are used.
+
+ A string constant accepts these special characters:
+ \b backspace
+ \e escape
+ \n newline
+ \r return
+ \t tab
+ \\ backslash
+ \" double quote
+
+ Examples:
+
+ "\"Hello,\tWorld!\""
+ "Hi,\nthere!"
+
+ literal-string
+ --------------
+ 'string' string constant
+
+ Note that single quotes are used.
+
+ This string is taken as it is. No backslashes are removed or have a
+ special meaning. The only exception is that two quotes stand for one
+ quote.
+
+ Examples:
+
+ 'All\slashes\are\saved.'
+ 'This string contains doubled single quotes ''here'''
+
+ option
+ ------
+ &option option value (local one is preferred, if exists)
+ &g:option global option value &l:option local
+ option value
+
+ Examples:
+
+ echo 'Terminal size: '.&columns.'x'.&lines
+ if &columns > 100
+
+ Any valid option name can be used here (note that "all" in ":set all"
+ is a pseudo option). See ":set options" section above.
+
+ environment variable
+ --------------------
+ $VAR environment variable
+
+ The String value of any environment variable. When it is not defined,
+ the result is an empty string.
+
+ Examples:
+
+ 'This is my $PATH env: ' . $PATH
+ 'vifmrc at ' . $MYVIFMRC . ' is used.'
+
+ builtin variable
+ --------------------
+ v:var builtin variable
+
+ Information exposed by vifm for use in scripting.
+
+ v:count
+ count passed to : command, 0 by default. Can be used in mappings to
+ pass
+ count to a different command.
+ v:count1
+ same as v:count, but 1 by default.
+ v:servername
+ See below.
+
+ function call
+ -------------
+ function(expr1, ...) function call
+
+ See "Functions" section below.
+
+ Examples:
+
+ "'" . filetype('.') . "'"
+ filetype('.') == 'reg'
+
+ expression nesting
+ ------------------
+ (expr1) nested expression
+
+ Groups any other expression of arbitrary complexity enforcing order in
+ which operators are applied.
+
+
+Functions
+ USAGE RESULT DESCRIPTION
+
+ chooseopt({opt}) String Queries choose parameters passed on
+ startup.
+ executable({expr}) Integer Checks whether {expr} command avail-
+ able.
+ expand({expr}) String Expands special keywords in {expr}.
+ extcached({cache}, {path}, {extcmd})
+ String Caches output of {extcmd} per {cache}
+ and
+ {path} combination.
+ filetype({fnum} [, {resolve}])
+ String Returns file type from position.
+ fnameescape({expr}) String Escapes {expr} for use in a :command.
+ getpanetype() String Returns type of current pane.
+ has({property}) Integer Checks whether instance has {prop-
+ erty}.
+ layoutis({type}) Integer Checks whether layout is of type
+ {type}.
+ paneisat({loc}) Integer Checks whether current pane is at
+ {loc}.
+ system({command}) String Executes shell command and returns
+ its output.
+ tabpagenr([{arg}]) Integer Returns number of current or last
+ tab.
+ term({command}) String Like system(), but for interactive
+ commands.
+
+ chooseopt({opt})
+
+ Retrieves values of options related to file choosing. {opt} can be one
+ of:
+ files returns argument of --choose-files or empty string
+ dir returns argument of --choose-dir or empty string
+ cmd returns argument of --on-choose or empty string
+ delimiter returns argument of --delimiter or the default one (\n)
+
+ executable({expr})
+
+ If {expr} is absolute or relative path, checks whether path destination
+ exists and refers to an executable, otherwise checks whether command
+ named {expr} is present in directories listed in $PATH. Checks for
+ various executable extensions on Windows. Returns boolean value de-
+ scribing result of the check.
+
+ Example:
+
+ " use custom default viewer script if it's available and installed
+ " in predefined system directory, otherwise try to find it elsewhere
+ if executable('/usr/local/bin/defviewer')
+ fileview * /usr/local/bin/defviewer %c
+ else
+ if executable('defviewer')
+ fileview * defviewer %c
+ endif
+ endif
+
+ expand({expr})
+
+ Expands environment variables and macros in {expr} just like it's done
+ for command-line commands. Returns a string. See "Command macros"
+ section above.
+
+ Examples:
+
+ " percent sign
+ :echo expand('%%')
+ " the last part of directory name of the other pane
+ :echo expand('%D:t')
+ " $PATH environment variable (same as `:echo $PATH`)
+ :echo expand('$PATH')
+
+ extcached({cache}, {path}, {extcmd})
+
+ Caches value of {extcmd} external command automatically updating it as
+ necessary based on monitoring change date of a {path}. The cache is
+ invalidated when file or its meta-data is updated. A single path can
+ have multiple caches associated with it.
+
+ {path} value is normalized, but symbolic links in it aren't resolved.
+
+ Example:
+
+ " display number and size of blocks actually used by a file or directory
+ set statusline+=" Uses: %{ extcached('uses',
+ expand('%c'),
+ expand('stat --format=%%bx%%B %c')) }"
+
+ filetype({fnum} [, {resolve}])
+
+ The result is a string, which represents file type and is one of the
+ list:
+ exe executables
+ reg regular files
+ link symbolic links
+ broken broken symbolic links (appears only when resolving)
+ dir directories
+ char character devices
+ block block devices
+ fifo pipes
+ sock *nix domain sockets
+ ? unknown file type (should not normally appear)
+
+ The result can also be an empty string in case of invalid argument.
+
+ Parameter {fnum} can have following values:
+ - '.' to get type of file under the cursor in the active pane
+ - numerical value base 1 to get type of file on specified line num-
+ ber
+
+ Optional parameter {resolve} is treated as a boolean and specifies
+ whether symbolic links should be resolved.
+
+ fnameescape({expr})
+
+ Escapes parameter to make it suitable for use as an argument of a :com-
+ mand. List of escaped characters includes %, which is doubled.
+
+ Usage example:
+
+ " navigate to most recently modified file in current directory
+ execute 'goto' fnameescape(system('ls -t | head -1'))
+
+ getpanetype()
+
+ Retrieves string describing type of current pane. Possible return val-
+ ues:
+ regular regular file listing of some directory
+ custom custom file list (%u)
+ very-custom very custom file list (%U)
+ tree tree view
+
+ has({property})
+
+ Allows examining internal parameters from scripts to e.g. figure out
+ environment in which application is running. Returns 1 if property is
+ true/present, otherwise 0 is returned. Currently the following proper-
+ ties are supported (anything else will yield 0):
+ unix runs in *nix-like environment (including Cygwin)
+ win runs on Windows
+
+ Usage example:
+
+ " skip user/group on Windows
+ if !has('win')
+ let $RIGHTS = '%10u:%-7g '
+ endif
+
+ execute 'set' 'statusline=" %t%= %A '.$RIGHTS.'%15E %20d "'
+
+ layoutis({type})
+
+ Checks whether current interface layout is {type} or not, where {type}
+ can be:
+ only single-pane mode
+ split double-pane mode (either vertical or horizon split)
+ vsplit vertical split (left and right panes)
+ hsplit horizontal split (top and bottom panes)
+
+ Usage example:
+
+ " automatically split vertically before enabling preview
+ :nnoremap w :if layoutis('only') | vsplit | endif | view!
+
+ paneisat({loc})
+
+ Checks whether position of active pane in current layout matches one of
+ the following locations:
+ top pane reaches top border
+ bottom pane reaches bottom border
+ left pane reaches left border
+ right pane reaches right border
+
+ system({command})
+
+ Runs the command in shell and returns its output (joined standard out-
+ put and standard error streams). All trailing newline characters are
+ stripped to allow easy appending to command output. Ctrl-C should in-
+ terrupt the command.
+
+ Use this function to consume output of external commands that don't re-
+ quire user interaction and term() for interactive commands that make
+ use of terminal and are capable of handling stream redirection.
+
+ Usage example:
+
+ " command to enter .git/ directory of git-repository (when ran inside one)
+ command! cdgit :execute 'cd' system('git rev-parse --git-dir')
+
+ tabpagenr([{arg}])
+
+ When called without arguments returns number of current tab page base
+ one.
+
+ When called with "$" as an argument returns number of the last tab page
+ base one, which is the same as number of tabs.
+
+ term({command})
+
+ Same as system() function, but user interface is shutdown during the
+ execution of the command, which makes sure that external interactive
+ applications won't affect the way terminal is used by vifm.
+
+ Usage example:
+
+ " command to change directory by picking it via fzf
+ command! fzfcd :execute 'cd' "'".term('find -type d | fzf 2> /dev/tty')."'"
+
+Menus and dialogs
+ When navigating to some path from a menu there is a difference in end
+ location depending on whether path has trailing slash or not. Files
+ normally don't have trailing slashes so "file/" won't work and one can
+ only navigate to a file anyway. On the other hand with directories
+ there are two options: navigate to a directory or inside of it. To al-
+ low both use cases, the first one is used on paths like "dir" and the
+ second one for "dir/".
+
+ Commands
+
+ :range navigate to a menu line.
+
+ :exi[t][!] :q[uit][!] :x[it][!]
+ leave menu mode.
+
+ :noh[lsearch]
+ reset search match highlighting.
+
+ :w[rite] {dest}
+ write all menu lines into file specified by {dest}.
+
+ General
+
+ j, Ctrl-N - move down.
+ k, Ctrl-P - move up.
+ Enter, l - select and exit the menu.
+ Ctrl-L - redraw the menu.
+
+ Escape, Ctrl-C, ZZ, ZQ, q - quit.
+
+ In all menus
+
+ The following set of keys has the same meaning as in normal mode.
+
+ Ctrl-B, Ctrl-F
+ Ctrl-D, Ctrl-U
+ Ctrl-E, Ctrl-Y
+ /, ?
+ n, N
+ [count]G, [count]gg
+ H, M, L
+ zb, zt, zz
+
+ zh - scroll menu items [count] characters to the right.
+ zl - scroll menu items [count] characters to the left.
+ zH - scroll menu items half of screen width characters to the right.
+ zL - scroll menu items half of screen width characters to the left.
+
+ : - enter command line mode for menus (currently only :exi[t], :q[uit],
+ :x[it] and :{range} are supported).
+
+ b - interpret content of the menu as list of paths and use it to create
+ custom view in place of previously active pane. See "Custom views"
+ section below.
+ B - same as above, but creates unsorted view.
+
+ v - load menu content into quickfix list of the editor (Vim compatible
+ by assumption) or if list doesn't have separators after file names
+ (colons) open each line as a file name.
+
+
+ Below is description of additional commands and reaction on selection
+ in some menus and dialogs.
+
+ Apropos menu
+
+ Selecting menu item runs man on a given topic. Menu won't be closed
+ automatically to allow view several pages one by one.
+
+ Command-line mode abbreviations menu
+
+ Type dd on an abbreviation to remove it.
+
+ c leaves menu preserving file selection and inserts right-hand side of
+ selected command into command-line.
+
+ Color scheme menu
+
+ Selecting name of a color scheme applies it the same way as if ":col-
+ orscheme " was executed on the command-line.
+
+ Commands menu
+
+ Selecting command executes it with empty arguments (%a).
+
+ dd on a command to remove.
+
+ Marks menu
+
+ Selecting mark navigates to it.
+
+ dd on a mark to remove it.
+
+ Bookmarks menu
+
+ Selecting a bookmark navigates to it.
+
+ Type dd on a bookmark to remove it.
+
+ gf and e also work to make it more convenient to bookmark files.
+
+ Trash (:lstrash) menu
+
+ r on a file name to restore it from trash.
+
+ dd deletes file under the cursor.
+
+ Trashes menu
+
+ dd empties selected trash in background.
+
+ Directory history and Trashes menus
+
+ Selecting directory name will change directory of the current view as
+ if :cd command was used.
+
+ Directory stack menu
+
+ Selecting directory name will rotate stack to put selected directory
+ pair at the top of the stack.
+
+ Filetype menu
+
+ Commands from vifmrc or typed in command-line are displayed above empty
+ line. All commands below empty line are from .desktop files.
+
+ c leaves menu preserving file selection and inserts command after :! in
+ command-line mode.
+
+ Grep, find, locate, bookmarks and user menu with navigation (%M macro)
+
+ gf - navigate previously active view to currently selected item.
+ Leaves menu mode except for grep menu. Pressing Enter key has the same
+ effect.
+
+ e - open selected path in the editor, stays in menu mode.
+
+ c - leave menu preserving file selection and insert file name after :!
+ in command-line mode.
+
+ User menu without navigation (%m macro)
+
+ c leaves menu preserving file selection and inserts whole line after :!
+ in command-line mode.
+
+ Grep menu
+
+ Selecting file (via Enter or l key) opens it in editor set by 'vicmd'
+ at given line number. Menu won't be closed automatically to allow
+ viewing more than one result.
+
+ See above for "gf" and "e" keys description.
+
+ Command-line history menu
+
+ Selecting an item executes it as command-line command, search query or
+ local filter.
+
+ c leaves menu preserving file selection and inserts line into command-
+ line of appropriate kind.
+
+ Volumes menu
+
+ Selecting a drive navigates previously active pane to the root of that
+ drive.
+
+ Fileinfo dialog
+
+ Enter, q - close dialog
+
+ Sort dialog
+
+ h, Space - switch ascending/descending.
+ q - close dialog
+
+ One shortcut per sorting key (see the dialog).
+
+ Attributes (permissions or properties) dialog
+
+ h, Space - check/uncheck.
+ q - close dialog
+
+ Item states:
+
+ - * - checked flag.
+
+ - X - means that it has different value for files in selection.
+
+ - d (*nix only) - (only for execute flags) means u-x+X, g-x+X or o-x+X
+ argument for the chmod program. If you're not on OS X and want to
+ remove execute permission bit from all files, but preserve it for di-
+ rectories, set all execute flags to 'd' and check 'Set Recursively'
+ flag.
+
+ Jobs menu
+
+ dd requests cancellation of job under cursor. The job won't be removed
+ from the list, but marked as being cancelled (if cancellation was suc-
+ cessfully requested). A message will pop up if the job has already
+ stopped. Note that on Windows cancelling external programs like this
+ might not work, because their parent shell doesn't have any windows.
+
+ e key displays errors of selected job if any were collected. They are
+ displayed in a new menu, but you can get back to jobs menu by pressing
+ h.
+
+
+ Undolist menu
+
+ r - reset undo position to group under the cursor.
+
+
+ Media menu
+
+ Selecting a device either mounts (if it wasn't mounted yet) or navi-
+ gates to its first mount point.
+
+ Selecting a mount point navigates to it.
+
+ Selecting "not mounted" line causes mounting.
+
+ Selecting any other line does nothing.
+
+ r - reload the list.
+
+ m - mount/unmount device (cursor should be positioned on lines under
+ device information).
+
+ [ - put cursor on the previous device.
+
+ ] - put cursor on the next device.
+
+
+Custom views
+ Definition
+
+ Normally file views contain list of files from a single directory, but
+ sometimes it's useful to populate them with list of files that do not
+ belong to the same directory, which is what custom views are for.
+
+ Presentation
+
+ Custom views are still related to directory they were in before custom
+ list was loaded. Path to that directory (original directory) can be
+ seen in the title of a custom view.
+
+ Files in same directory have to be named differently, this doesn't hold
+ for custom views thus seeing just file names might be rather confusing.
+ In order to give an idea where files come from and when possible, rela-
+ tive paths to original directory of the view is displayed, otherwise
+ full path is used instead.
+
+ Custom views normally don't contain any inexistent files.
+
+ Navigation
+
+ Custom views have some differences related to navigation in regular
+ views.
+
+ gf - acts similar to gf on symbolic links and navigates to the file at
+ its real
+ location.
+
+ h - go to closes parent node in tree view, otherwise return to the
+ original directory.
+
+ gh - return to the original directory.
+
+ Opening ".." entry also causes return to the original directory.
+
+ History
+
+ Custom list exists only while it's visible, once left one can't return
+ to it, so there is no appearances of it in any history.
+
+ Filters
+
+ Only local filter affects content of the view. This is intentional,
+ presumably if one loads list, precisely that list should be displayed
+ (except for inexistent paths, which are ignored).
+
+ Search
+
+ Although directory names are visible in listing, they are not search-
+ able. Only file names are taken into account (might be changed in fu-
+ ture, searching whole lines seems quite reasonable).
+
+ Sorting
+
+ Contrary to search sorting by name works on whole visible part of file
+ path.
+
+ Highlight
+
+ Whole file name is highlighted as one entity, even if there are direc-
+ tory elements.
+
+ Updates
+
+ Reloads can occur, though they are not automatic due to files being
+ scattered among different places. On a reload, inexistent files are
+ removed and meta-data of all other files is updated.
+
+ Once custom view forgets about the file, it won't add it back even if
+ it's created again. So not seeing file previously affected by an oper-
+ ation, which was undone is normal.
+
+ Operations
+
+ All operations that add files are forbidden for custom views. For ex-
+ ample, moving/copying/putting files into a custom view doesn't work,
+ because it doesn't make much sense.
+
+ On the other hand, operations that use files of a custom view as a
+ source (e.g. yanking, copying, moving file from custom view, deletion)
+ and operations that modify names are all allowed.
+
+Compare views
+ Kinds
+
+ :compare can produce four different results depending on arguments:
+ - single compare view (ofone and either listall or listdups);
+ - single custom view (ofone and listunique);
+ - two compare views (ofboth and either listall or listdups);
+ - two custom views (ofboth and listunique).
+
+ The first two display files of one file system tree. Here duplicates
+ are files that have at least one copy in the same tree. The other two
+ kinds of operation compare two trees, in which duplicates are files
+ that are found in both trees.
+
+ Lists of unique files are presented in custom views because there is no
+ file grouping to preserve as all file ids are guaranteed to be dis-
+ tinct.
+
+ Creation
+
+ Arguments passed to :compare form four categories each with its own
+ prefix and is responsible for particular property of operation.
+
+ Which files to compare:
+ - ofboth - compares files of two panes against each other;
+ - ofone - compares files of the same directory.
+
+ How files are compared:
+ - byname - by their name only;
+ - bysize - only by their size;
+ - bycontents - by combination of size and hash of file contents.
+
+ Which files to display:
+ - listall - all files;
+ - listunique - unique files only;
+ - listdups - only duplicated files.
+
+ How results are grouped (has no effect if "ofone" specified):
+ - groupids - files considered identical are always adjacent in out-
+ put;
+ - grouppaths - file system ordering is preferred (this also enables
+ displaying identically named files as mismatches).
+
+ Which files to omit:
+ - skipempty - ignore empty files.
+
+ Each argument can appear multiple times, the rightmost one of the group
+ is considered. Arguments alter default behaviour instead of substitut-
+ ing it.
+
+ Examples
+
+ The defaults corresponds to probably the most common use case of com-
+ paring files in two trees with grouping by paths, so the following are
+ equivalent:
+
+ :compare
+ :compare bycontents grouppaths
+ :compare bycontents listall ofboth grouppaths
+
+ Another use case is to find duplicates in the current sub-tree:
+
+ :compare listdups ofone
+
+ The following command lists files that are unique to each pane:
+
+ :compare listunique
+
+ Look
+
+ The view can't switch to ls-like view as it's unable to display diff-
+ like data.
+
+ Comparison views have second column displaying id of the file, files
+ with same id are considered to be equal. The view columns configura-
+ tion is predefined.
+
+ Behaviour
+
+ When two views are being compared against each other the following
+ changes to the regular behaviour apply:
+ - views are scrolled synchronously (as if 'scrollbind' was set);
+ - views' cursors are synchronized;
+ - local filtering is disabled (its results wouldn't be meaningful);
+ - zd excludes groups of adjacent identical files, 1zd gives usual be-
+ haviour;
+ - sorting is permanently disabled (ordering is fixed);
+ - removed files hide their counter pairs;
+ - exiting one of the views terminates the other immediately;
+ - renaming files isn't blocked, but isn't taken into account and might
+ require regeneration of comparison;
+ - entries which indicate absence of equivalent file have empty names
+ and can be matched as such;
+ - when unique files of both views are listed custom views can be
+ empty, this absence of unique files is stated clearly.
+
+ One compare view has similar properties (those that are applicable for
+ single pane).
+
+ Files are gathered in this way:
+ - recursively starting at current location of the view;
+ - dot files are excluded if view hides them at the moment of compari-
+ son;
+ - directories are not taken into account;
+ - symbolic links to directories are ignored.
+
+Startup
+ On startup vifm determines several variables that are used during the
+ session. They are determined in the order they appear below.
+
+ On *nix systems $HOME is normally present and used as is. On Windows
+ systems vifm tries to find correct home directory in the following or-
+ der:
+ - $HOME variable;
+ - $USERPROFILE variable (on Windows only);
+ - a combination of $HOMEDRIVE and $HOMEPATH variables (on Windows
+ only).
+
+ vifm tries to find correct configuration directory by checking the fol-
+ lowing places:
+ - $VIFM variable;
+ - parent directory of the executable file (on Windows only);
+ - $HOME/.vifm directory;
+ - $APPDATA/Vifm directory (on Windows only);
+ - $XDG_CONFIG_HOME/vifm directory;
+ - $HOME/.config/vifm directory.
+
+ vifm tries to find correct configuration file by checking the following
+ places:
+ - $MYVIFMRC variable;
+ - vifmrc in parent directory of the executable file (on Windows only);
+ - $VIFM/vifmrc file.
+
+Configure
+ See "Startup" section above for the explanations on $VIFM and $MYV-
+ IFMRC.
+
+ The vifmrc file contains commands that will be executed on vifm
+ startup. There are two such files: global and local. Global one is at
+ {prefix}/etc/vifm/vifmrc, see $MYVIFMRC variable description for the
+ search algorithm used to find local vifmrc. Global vifmrc is loaded
+ before the local one, so that the later one can redefine anything con-
+ figured globally.
+
+ Use vifmrc to set settings, mappings, filetypes etc. To use multi line
+ commands precede each next line with a slash (whitespace before slash
+ is ignored, but all spaces at the end of the lines are saved). For ex-
+ ample:
+
+ set
+ \smartcase
+
+ equals "setsmartcase". When
+
+ set
+ \ smartcase
+
+ equals "set smartcase".
+
+ The $VIFM/vifminfo file contains session settings. You may edit it by
+ hand to change the settings, but it's not recommended to do that, edit
+ vifmrc instead. You can control what settings will be saved in
+ vifminfo by setting 'vifminfo' option. Vifm always writes this file on
+ exit unless 'vifminfo' option is empty. Marks, bookmarks, commands,
+ histories, filetypes, fileviewers and registers in the file are merged
+ with vifm configuration (which has bigger priority).
+
+ Generally, runtime configuration has bigger priority during merging,
+ but there are some exceptions:
+
+ - directory stack stored in the file is not overwritten unless some-
+ thing is changed in vifm session that performs merge;
+
+ - each mark or bookmark is marked with a timestamp, so that newer
+ value is not overwritten by older one, thus no matter from where it
+ comes, the newer one wins.
+
+ The $VIFM/scripts directory can contain shell scripts. vifm modifies
+ its PATH environment variable to let user run those scripts without
+ specifying full path. All subdirectories of the $VIFM/scripts will be
+ added to PATH too. Script in a subdirectory overlaps script with the
+ same name in all its parent directories.
+
+ The $VIFM/colors/ and {prefix}/etc/vifm/colors/ directories contain
+ color schemes. Available color schemes are searched in that order, so
+ on name conflict the one in $VIFM/colors/ wins.
+
+ Each color scheme should have ".vifm" extension. This wasn't the case
+ before and for this reason the following rules apply during lookup:
+
+ - if there is no file with .vifm extension, all regular files are
+ listed;
+
+ - otherwise only files with .vifm extension are listed (with the ex-
+ tension being truncated).
+
+Automatic FUSE mounts
+ vifm has a builtin support of automated FUSE file system mounts. It is
+ implemented using file associations mechanism. To enable automated
+ mounts, one needs to use a specially formatted program line in filetype
+ or filextype commands. These use special macros, which differ from
+ macros in commands unrelated to FUSE. Currently three formats are sup-
+ ported:
+
+ 1) FUSE_MOUNT This format should be used in case when all information
+ needed for mounting all files of a particular type is the same. E.g.
+ mounting of tar files don't require any file specific options.
+
+ Format line:
+ FUSE_MOUNT|mounter %SOURCE_FILE %DESTINATION_DIR [%FOREGROUND]
+
+ Example filetype command:
+
+ :filetype FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR
+
+ 2) FUSE_MOUNT2 This format allows one to use specially formatted files
+ to perform mounting and is useful for mounting remotes, for example re-
+ mote file systems over ftp or ssh.
+
+ Format line:
+ FUSE_MOUNT2|mounter %PARAM %DESTINATION_DIR [%FOREGROUND]
+
+ Example filetype command:
+
+ :filetype *.ssh FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR
+
+ Example file content:
+
+ root@127.0.0.1:/
+
+ 3) FUSE_MOUNT3
+
+ This format is equivalent to FUSE_MOUNT, but omits unmounting. It is
+ useful for cases, when unmounting isn't needed, like when using AVFS.
+
+ Example :filetype command:
+
+ :filetype *.tar,*.tar.bz2,*.tbz2,*.tgz,*.tar.gz,*.tar.xz,*.txz,*.deb
+ \ {Mount with avfs}
+ \ FUSE_MOUNT3|mount-avfs %DESTINATION_DIR %SOURCE_FILE
+
+ Example `mount-avfs` helper script:
+
+ #!/bin/sh
+
+ dest=$1
+ file=$2
+
+ rmdir "$dest"
+ ln -s "$HOME/.avfs$file#/" "$dest"
+
+ All % macros are expanded by vifm at runtime and have the following
+ meaning:
+ - %SOURCE_FILE is replaced by full path to selected file;
+ - %DESTINATION_DIR is replaced by full path to mount directory, which
+ is created by vifm basing on the value of 'fusehome' option;
+ - %PARAM value is filled from the first line of file (whole line),
+ though in the future it can be changed to whole file content;
+ - %FOREGROUND means that you want to run mount command as a regular
+ command (required to be able to provide input for communication with
+ mounter in interactive way).
+
+ %FOREGROUND is an optional macro. Other macros are not mandatory, but
+ mount commands likely won't work without them.
+
+ %CLEAR is obsolete name of %FOREGROUND, which is still supported, but
+ might be removed in future. Its use is discouraged.
+
+ Unlike macros elsewhere, these are recognized only if they appear at
+ the end of a command or are followed by a space. There is no way to
+ escape % either. These are historical limitations, which might be ad-
+ dressed in the future.
+
+ The mounted FUSE file systems will be automatically unmounted in two
+ cases:
+
+ - when vifm quits (with ZZ, :q, etc. or when killed by signal);
+
+ - when you explicitly leave mount point going up to its parent direc-
+ tory (with h, Enter on "../" or ":cd ..") and other pane is not in
+ the same directory or its child directories.
+
+View look
+ vifm supports displaying of file list view in two different ways:
+
+ - in a table mode, when multiple columns can be set using 'view-
+ columns' option (see "Column view" section below for details);
+
+ - in a multicolumn list manner which looks almost like `ls -x` com-
+ mand output (see "ls-like view" section below for details).
+
+ The look is local for each view and can be chosen by changing value of
+ the 'lsview' boolean option.
+
+ Depending on view look some of keys change their meaning to allow more
+ natural cursor moving. This concerns mainly h, j, k, l and other simi-
+ lar navigation keys.
+
+ Also some of options can be ignored if they don't affect view display-
+ ing in selected look. For example value of 'viewcolumns' when 'lsview'
+ is set.
+
+ls-like view
+ When this view look is enabled by setting 'lsview' option on, vifm will
+ display files in multiple columns. Number of columns depends on the
+ length of the longest file name present in current directory of the
+ view. Whole file list is automatically reflowed on directory change,
+ terminal or view resize.
+
+ View looks close to output of `ls -x` command, so files are listed left
+ to right in rows.
+
+ In this mode file manipulation commands (e.g. d) don't work line-wise
+ like they do in Vim, since such operations would be uncommon for file
+ manipulation tasks. Thus, for example, dd will remove only current
+ file.
+
+ By default the view is filled by lines, 'lsoptions' can be used to get
+ filling by columns.
+
+ Note that tree-view and compare view inhibit ls-like view.
+
+Column view
+ View columns are described by a comma-separated list of column descrip-
+ tions, each of which has the following format
+ [ '-' ] [ fw ( [ '.' tw ] | '%' ) ] '{' type '}' '.'{0,3}
+ where fw stands for full width and tw stands for text width.
+
+ So it basically consists of four parts:
+ 1. Optional alignment specifier
+ 2. Optional width specifier
+ 3. Mandatory column name
+ 4. Optional cropping specifier
+
+ Alignment specifier
+
+ It's an optional minus or asterisk sign as the first symbol of the
+ string.
+
+ Specifies type of text alignment within a column. Three types are sup-
+ ported:
+
+ - left align
+
+ set viewcolumns=-{name}
+
+ - right align (default)
+
+ set viewcolumns={name}
+
+ - dynamic align
+
+ It's like left alignment, but when the text is bigger than the col-
+ umn, the alignment is made at the right (so the part of the field is
+ always visible).
+
+ set viewcolumns=*{name}
+
+ Width specifier
+
+ It's a number followed by a percent sign, two numbers (second one
+ should be less than or equal to the first one) separated with a dot or
+ a single number.
+
+ Specifies column width and its units. There are three size types:
+
+ - absolute size - column width is specified in characters
+
+ set viewcolumns=-100{name},20.15{ext}
+
+ results in two columns with lengths of 100 and 20 and a reserved
+ space of five characters on the left of second column.
+
+ - relative (percent) size - column width is specified in percents of
+ view width
+
+ set viewcolumns=-80%{name},15%{ext},5%{mtime}
+
+ results in three columns with lengths of 80/100, 15/100 and 5/100 of
+ view width.
+
+ - auto size (default) - column width is automatically determined
+
+ set viewcolumns=-{name},{ext},{mtime}
+
+ results in three columns with length of one third of view width.
+ There is no size adjustment to content, since it will slow down ren-
+ dering.
+
+ Columns of different sizing types can be freely mixed in one view.
+ Though sometimes some of columns can be seen partly or be completely
+ invisible if there is not enough space to display them.
+
+ Column name
+
+ This is just a sort key surrounded with curly braces or {root}, e.g.
+
+ {name},{ext},{mtime}
+
+ {name} and {iname} keys are the same and present both for consistency
+ with 'sort' option.
+
+ Following keys don't have corresponding sorting keys:
+
+ - {root} - display name without extension (as a complement for
+ {ext})
+
+ - {fileroot} - display name without extension for anything except for
+ directories and symbolic links to directories (as a complement for
+ {fileext})
+
+ Empty curly braces ({}) are replaced with the default secondary column
+ for primary sort key. So after the next command view will be displayed
+ almost as if 'viewcolumns' is empty, but adding ellipsis for long file
+ names:
+
+ set viewcolumns=-{name}..,6{}.
+
+ Cropping specifier
+
+ It's from one to three dots after closing curly brace in column format.
+
+ Specifies type of text truncation if it doesn't fit in the column.
+ Currently three types are supported:
+
+ - truncation - text is truncated
+
+ set viewcolumns=-{name}.
+
+ results in truncation of names that are too long too fit in the
+ view.
+
+ - adding of ellipsis - ellipsis on the left or right are added when
+ needed
+
+ set viewcolumns=-{name}..
+
+ results in that ellipsis are added at the end of too long file
+ names.
+
+ - none (default) - text can pass column boundaries
+
+ set viewcolumns=-{name}...,{ext}
+
+ results in that long file names can partially be written on the ext
+ column.
+
+Color schemes
+ The color schemes in vifm can be applied in two different ways:
+
+ - as the primary color scheme;
+
+ - as local to a pane color scheme.
+
+ Both types are set using :colorscheme command, but of different forms:
+
+ - :colorscheme color_scheme_name - for the primary color scheme;
+
+ - :colorscheme color_scheme_name directory - for local color schemes.
+
+ Look of different parts of the TUI (Text User Interface) is determined
+ in this way:
+
+ - Border, TabLine, TabLineSel, TopLineSel, TopLine, CmdLine, Er-
+ rorMsg, StatusLine, JobLine, SuggestBox and WildMenu are always de-
+ termined by the primary color scheme;
+
+ - CurrLine, Selected, Directory, Link, BrokenLink, Socket, Device,
+ Executable, Fifo, CmpMismatch, Win, AuxWin and OtherWin are deter-
+ mined by primary color scheme and a set of local color schemes,
+ which can be empty.
+
+ There might be a set of local color schemes because they are structured
+ hierarchically according to file system structure. For example, having
+ the following piece of file system:
+
+ ~
+ `-- bin
+ |
+ `-- my
+
+ Two color schemes:
+
+ # ~/.vifm/colors/for_bin
+ highlight Win cterm=none ctermfg=white ctermbg=red
+ highlight CurrLine cterm=none ctermfg=red ctermbg=black
+
+ # ~/.vifm/colors/for_bin_my
+ highlight CurrLine cterm=none ctermfg=green ctermbg=black
+
+ And these three commands in the vifmrc file:
+
+ colorscheme Default
+ colorscheme for_bin ~/bin
+ colorscheme for_bin_my ~/bin/my
+
+ File list will look in the following way for each level:
+
+ - ~/ - Default color scheme
+ black background
+ cursor with blue background
+
+ - ~/bin/ - mix of Default and for_bin color schemes
+ red background
+ cursor with black background and red foreground
+
+ - ~/bin/my/ - mix of Default, for_bin and for_bin_my color schemes
+ red background
+ cursor with black background and green foreground
+
+Trash directory
+ vifm has support of trash directory, which is used as temporary storage
+ for deleted files or files that were cut. Using trash is controlled by
+ the 'trash' option, and exact path to the trash can be set with
+ 'trashdir' option. Trash directory in vifm differs from the system-
+ wide one by default, because of possible incompatibilities of storing
+ deleted files among different file managers. But one can set
+ 'trashdir' to "~/.local/share/Trash" to use a "standard" trash direc-
+ tory.
+
+ There are two scenarios of using trash in vifm:
+
+ 1. As a place for storing files that were cut by "d" and may be in-
+ serted to some other place in file system.
+
+ 2. As a storage of files, that are deleted but not purged yet.
+
+ The first scenario uses deletion ("d") operations to put files to trash
+ and put ("p") operations to restore files from trash directory. Note
+ that such operations move files to and from trash directory, which can
+ be long term operations in case of different partitions or remote
+ drives mounted locally.
+
+ The second scenario uses deletion ("d") operations for moving files to
+ trash directory and :empty command-line command to purge all previously
+ deleted files.
+
+ Deletion and put operations depend on registers, which can point to
+ files in trash directory. Normally, there are no nonexistent files in
+ registers, but vifm doesn't keep track of modifications under trash di-
+ rectory, so one shouldn't expect value of registers to be absolutely
+ correct if trash directory was modified not by operation that are meant
+ for it. But this won't lead to any issues with operations, since they
+ ignore nonexistent files.
+
+Client-Server
+ vifm supports remote execution of command-line mode commands, remote
+ changing of directories and expression evaluation. This is possible
+ using --remote and --remote-expr command-line arguments.
+
+ To execute a command remotely combine --remote argument with -c or +. For example:
+
+ vifm --remote -c 'cd /'
+ vifm --remote '+cd /'
+
+ To change directory not using command-line mode commands one can spec-
+ ify paths right after --remote argument, like this:
+
+ vifm --remote /
+ vifm --remote ~
+ vifm --remote /usr/bin /tmp
+
+ Evaluating expression remotely might be useful to query information
+ about an instance, for example its location:
+
+ vifm --remote-expr 'expand("%d")'
+
+ If there are several running instances, the target can be specified
+ with --server-name option (otherwise, the first one lexicographically
+ is used):
+
+ vifm --server-name work --remote ~/work/project
+
+ List of names of running instances can be obtained via --server-list
+ option. Name of the current one is available via v:servername.
+
+
+ v:servername
+ server name of the running vifm instance. Empty if client-
+ server feature is disabled.
+
+Plugin
+ Plugin for using vifm in vim as a file selector.
+
+ Commands:
+
+ :EditVifm select a file or files to open in the current buffer.
+ :Vifm alias for :EditVifm.
+ :SplitVifm split buffer and select a file or files to open.
+ :VsplitVifm vertically split buffer and select a file or files to
+ open.
+ :DiffVifm select a file or files to compare to the current file
+ with
+ :vert diffsplit.
+ :TabVifm select a file or files to open in tabs.
+
+ Each command accepts up to two arguments: left pane directory and right
+ pane directory. After arguments are checked, vifm process is spawned
+ in a special "file-picker" mode. To pick files just open them either
+ by pressing l, i or Enter keys, or by running :edit command. If no
+ files are selected, file under the cursor is opened, otherwise whole
+ selection is passed to the plugin and opened in vim.
+
+ The plugin have only two settings. It's a string variable named
+ g:vifm_term to let user specify command to run GUI terminal. By de-
+ fault it's equal to 'xterm -e'. And another string variable named
+ g:vifm_exec, which equals "vifm" by default and specifies path to
+ vifm's executable. To pass arguments to vifm use g:vifm_exec_args,
+ which is empty by default.
+
+ To use the plugin copy the vifm.vim file to either the system wide
+ vim/plugin directory or into ~/.vim/plugin.
+
+ If you would prefer not to use the plugin and it is in the system wide
+ plugin directory add
+
+ let loaded_vifm=1
+
+ to your ~/.vimrc file.
+
+Reserved
+ The following command names are reserved and shouldn't be used for user
+ commands.
+
+ g[lobal]
+ v[global]
+
+ENVIRONMENT
+ VIFM Points to main configuration directory (usually ~/.vifm/).
+
+ MYVIFMRC
+ Points to main configuration file (usually ~/.vifm/vifmrc).
+
+ These environment variables are valid inside vifm and also can be used
+ to configure it by setting some of them before running vifm.
+
+ When $MYVIFMRC isn't set, it's made as $VIFM/vifmrc (exception for Win-
+ dows: vifmrc in the same directory as vifm.exe has higher priority than
+ $VIFM/vifmrc).
+
+ See "Startup" section above for more details.
+
+ VIFM_FUSE_FILE
+ On execution of external commands this variable is set to the
+ full path of file used to initiate FUSE mount of the closes
+ mount point from current pane directory up. It's not set when
+ outside FUSE mount point. When vifm is used inside terminal
+ multiplexer, it tries to set this variable as well (it doesn't
+ work this way on its own).
+
+SEE ALSO
+ vifm-convert-dircolors(1), vifm-pause(1)
+
+ Website: https://vifm.info/
+ Wiki: https://wiki.vifm.info/
+
+ Esperanto translation of the documentation by Sebastian Cyprych:
+ http://cyprych.neostrada.pl/tekstoj/komputiloj/vifm-help.eo.html
+
+AUTHOR
+ Vifm was written by ksteen
+ And currently is developed by xaizek
+
+
+
+vifm 0.10.1 July 29, 2019 VIFM(1)
diff --git a/.config/vifm/vifmimgpdffile b/.config/vifm/vifmimgpdffile
new file mode 100644
index 00000000..959b9eae
--- /dev/null
+++ b/.config/vifm/vifmimgpdffile
@@ -0,0 +1 @@
+Factura UTE Noviembre.pdf
diff --git a/.config/vifm/vifmimgpdfpage b/.config/vifm/vifmimgpdfpage
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/.config/vifm/vifmimgpdfpage
@@ -0,0 +1 @@
+1
diff --git a/.config/vifm/vifmrc b/.config/vifm/vifmrc
new file mode 100644
index 00000000..e84de679
--- /dev/null
+++ b/.config/vifm/vifmrc
@@ -0,0 +1,499 @@
+" vim: filetype=vifm :
+" Sample configuration file for vifm (last updated: 2 June, 2019)
+" You can edit this file by hand.
+" The " character at the beginning of a line comments out the line.
+" Blank lines are ignored.
+" The basic format for each item is shown with an example.
+
+" ------------------------------------------------------------------------------
+
+" Command used to edit files in various contexts. The default is vim.
+" If you would like to use another vi clone such as Elvis or Vile
+" you will need to change this setting.
+
+set vicmd=vim
+" set vicmd=elvis\ -G\ termcap
+" set vicmd=vile
+
+" This makes vifm perform file operations on its own instead of relying on
+" standard utilities like `cp`. While using `cp` and alike is a more universal
+" solution, it's also much slower when processing large amounts of files and
+" doesn't support progress measuring.
+
+set syscalls
+
+" Trash Directory
+" The default is to move files that are deleted with dd or :d to
+" the trash directory. If you change this you will not be able to move
+" files by deleting them and then using p to put the file in the new location.
+" I recommend not changing this until you are familiar with vifm.
+" This probably shouldn't be an option.
+
+set trash
+
+" This is how many directories to store in the directory history.
+
+set history=100
+
+" Automatically resolve symbolic links on l or Enter.
+
+set nofollowlinks
+
+" With this option turned on you can run partially entered commands with
+" unambiguous beginning using :! (e.g. :!Te instead of :!Terminal or :!Te).
+
+" set fastrun
+
+" Natural sort of (version) numbers within text.
+
+set sortnumbers
+
+" Maximum number of changes that can be undone.
+
+set undolevels=100
+
+" Use Vim's format of help file (has highlighting and "hyperlinks").
+" If you would rather use a plain text help file set novimhelp.
+
+set vimhelp
+
+" If you would like to run an executable file when you
+" press return on the file name set this.
+
+set norunexec
+
+" Selected color scheme
+
+colorscheme Default
+
+" Format for displaying time in file list. For example:
+" TIME_STAMP_FORMAT=%m/%d-%H:%M
+" See man date or man strftime for details.
+
+set timefmt=%m/%d\ %H:%M
+
+" Show list of matches on tab completion in command-line mode
+
+set wildmenu
+
+" Display completions in a form of popup with descriptions of the matches
+
+set wildstyle=popup
+
+" Display suggestions in normal, visual and view modes for keys, marks and
+" registers (at most 5 files). In other view, when available.
+
+set suggestoptions=normal,visual,view,otherpane,keys,marks,registers
+
+" Ignore case in search patterns unless it contains at least one uppercase
+" letter
+
+set ignorecase
+set smartcase
+
+" Don't highlight search results automatically
+
+set nohlsearch
+
+" Use increment searching (search while typing)
+set incsearch
+
+" Try to leave some space from cursor to upper/lower border in lists
+
+set scrolloff=4
+
+" Don't do too many requests to slow file systems
+
+if !has('win')
+ set slowfs=curlftpfs
+endif
+
+" Set custom status line look
+
+set statusline=" Hint: %z%= %A %10u:%-7g %15s %20d "
+
+" ------------------------------------------------------------------------------
+
+" :mark mark /full/directory/path [filename]
+
+mark b ~/bin/
+mark h ~/
+
+" ------------------------------------------------------------------------------
+
+" :com[mand][!] command_name action
+" The following macros can be used in a command
+" %a is replaced with the user arguments.
+" %c the current file under the cursor.
+" %C the current file under the cursor in the other directory.
+" %f the current selected file, or files.
+" %F the current selected file, or files in the other directory.
+" %b same as %f %F.
+" %d the current directory name.
+" %D the other window directory name.
+" %m run the command in a menu window
+
+command! df df -h %m 2> /dev/null
+command! diff vim -d %f %F
+command! zip zip -r %f.zip %f
+command! run !! ./%f
+command! make !!make %a
+command! mkcd :mkdir %a | cd %a
+command! vgrep vim "+grep %a"
+command! reload :write | restart
+
+" ------------------------------------------------------------------------------
+
+" The file type is for the default programs to be used with
+" a file extension.
+" :filetype pattern1,pattern2 defaultprogram,program2
+" :fileviewer pattern1,pattern2 consoleviewer
+" The other programs for the file type can be accessed with the :file command
+" The command macros %f, %F, %d, %F may be used in the commands.
+" The %a macro is ignored. To use a % you must put %%.
+
+" For automated FUSE mounts, you must register an extension with :file[x]type
+" in one of following formats:
+"
+" :filetype extensions FUSE_MOUNT|some_mount_command using %SOURCE_FILE and %DESTINATION_DIR variables
+" %SOURCE_FILE and %DESTINATION_DIR are filled in by vifm at runtime.
+" A sample line might look like this:
+" :filetype *.zip,*.jar,*.war,*.ear FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR
+"
+" :filetype extensions FUSE_MOUNT2|some_mount_command using %PARAM and %DESTINATION_DIR variables
+" %PARAM and %DESTINATION_DIR are filled in by vifm at runtime.
+" A sample line might look like this:
+" :filetype *.ssh FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR
+" %PARAM value is filled from the first line of file (whole line).
+" Example first line for SshMount filetype: root@127.0.0.1:/
+"
+" You can also add %CLEAR if you want to clear screen before running FUSE
+" program.
+
+" Pdf
+filextype *.pdf evince %c %i &, apvlv %c, xpdf %c
+fileviewer *.pdf
+ \ vifmimg pdfpreview %px %py %pw %ph %c
+ \ %pc
+ \ vifmimg clear
+" Epub
+fileviewer *.epub
+ \ vifmimg epubpreview %px %py %pw %ph %c
+ \ %pc
+ \ vifmimg clear
+" PostScript
+filextype *.ps,*.eps,*.ps.gz
+ \ {View in zathura}
+ \ zathura %f,
+ \ {View in gv}
+ \ gv %c %i &,
+
+" Djvu
+filextype *.djvu
+ \ {View in zathura}
+ \ zathura %f,
+ \ {View in apvlv}
+ \ apvlv %f,
+
+" Audio
+filetype *.wav,*.mp3,*.flac,*.m4a,*.wma,*.ape,*.ac3,*.og[agx],*.spx,*.opus
+ \ {Play using ffplay}
+ \ ffplay -nodisp -autoexit %c,
+ \ {Play using MPlayer}
+ \ mplayer %f,
+fileviewer *.mp3 mp3info
+fileviewer *.flac soxi
+
+" Video
+filextype *.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob,
+ \*.fl[icv],*.m2v,*.mov,*.webm,*.ts,*.mts,*.m4v,*.r[am],*.qt,*.divx,
+ \*.as[fx]
+ \ {View using ffplay}
+ \ ffplay -fs -autoexit %f,
+ \ {View using Dragon}
+ \ dragon %f:p,
+ \ {View using mplayer}
+ \ mplayer %f,
+fileviewer *.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob,
+ \*.fl[icv],*.m2v,*.mov,*.webm,*.ts,*.mts,*.m4v,*.r[am],*.qt,*.divx,
+ \ vifmimg videopreview %px %py %pw %ph %c
+ \ %pc
+ \ vifmimg clear
+" Web
+filextype *.html,*.htm
+ \ {Open with dwb}
+ \ dwb %f %i &,
+ \ {Open with firefox}
+ \ firefox %f &,
+ \ {Open with uzbl}
+ \ uzbl-browser %f %i &,
+filetype *.html,*.htm links, lynx
+
+" Object
+filetype *.o nm %f | less
+
+" Man page
+filetype *.[1-8] man ./%c
+fileviewer *.[1-8] man ./%c | col -b
+
+" Images
+filextype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm
+ \ {View in feh}
+ \ feh %f,
+ \ {View in gpicview}
+ \ gpicview %c,
+ \ {View in shotwell}
+ \ shotwell,
+fileviewer *.bmp,*.jpg,*.jpeg,*.png,*.xpm
+ \ vifmimg draw %px %py %pw %ph %c
+ \ %pc
+ \ vifmimg clear
+fileviewer *.gif
+ \ vifmimg gifpreview %px %py %pw %ph %c
+ \ %pc
+ \ vifmimg clear
+fileviewer *.ico
+ \ vifmimg magickpreview %px %py %pw %ph %c
+ \ %pc
+ \ vifmimg clear
+" OpenRaster
+filextype *.ora
+ \ {Edit in MyPaint}
+ \ mypaint %f,
+
+" Mindmap
+filextype *.vym
+ \ {Open with VYM}
+ \ vym %f &,
+
+" MD5
+filetype *.md5
+ \ {Check MD5 hash sum}
+ \ md5sum -c %f %S,
+
+" SHA1
+filetype *.sha1
+ \ {Check SHA1 hash sum}
+ \ sha1sum -c %f %S,
+
+" SHA256
+filetype *.sha256
+ \ {Check SHA256 hash sum}
+ \ sha256sum -c %f %S,
+
+" SHA512
+filetype *.sha512
+ \ {Check SHA512 hash sum}
+ \ sha512sum -c %f %S,
+
+" GPG signature
+filetype *.asc
+ \ {Check signature}
+ \ !!gpg --verify %c,
+
+" Torrent
+filetype *.torrent ktorrent %f &
+fileviewer *.torrent dumptorrent -v %c
+
+" FuseZipMount
+filetype *.zip,*.jar,*.war,*.ear,*.oxt,*.apkg
+ \ {Mount with fuse-zip}
+ \ FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR,
+ \ {View contents}
+ \ zip -sf %c | less,
+ \ {Extract here}
+ \ tar -xf %c,
+fileviewer *.zip,*.jar,*.war,*.ear,*.oxt zip -sf %c
+
+" ArchiveMount
+filetype *.tar,*.tar.bz2,*.tbz2,*.tgz,*.tar.gz,*.tar.xz,*.txz
+ \ {Mount with archivemount}
+ \ FUSE_MOUNT|archivemount %SOURCE_FILE %DESTINATION_DIR,
+fileviewer *.tgz,*.tar.gz tar -tzf %c
+fileviewer *.tar.bz2,*.tbz2 tar -tjf %c
+fileviewer *.tar.txz,*.txz xz --list %c
+fileviewer *.tar tar -tf %c
+
+" Rar2FsMount and rar archives
+filetype *.rar
+ \ {Mount with rar2fs}
+ \ FUSE_MOUNT|rar2fs %SOURCE_FILE %DESTINATION_DIR,
+fileviewer *.rar unrar v %c
+
+" IsoMount
+filetype *.iso
+ \ {Mount with fuseiso}
+ \ FUSE_MOUNT|fuseiso %SOURCE_FILE %DESTINATION_DIR,
+
+" SshMount
+filetype *.ssh
+ \ {Mount with sshfs}
+ \ FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR %FOREGROUND,
+
+" FtpMount
+filetype *.ftp
+ \ {Mount with curlftpfs}
+ \ FUSE_MOUNT2|curlftpfs -o ftp_port=-,,disable_eprt %PARAM %DESTINATION_DIR %FOREGROUND,
+
+" Fuse7z and 7z archives
+filetype *.7z
+ \ {Mount with fuse-7z}
+ \ FUSE_MOUNT|fuse-7z %SOURCE_FILE %DESTINATION_DIR,
+fileviewer *.7z 7z l %c
+
+" Office files
+filextype *.odt,*.doc,*.docx,*.xls,*.xlsx,*.odp,*.pptx libreoffice %f &
+fileviewer *.doc catdoc %c
+fileviewer *.docx docx2txt.pl %f -
+
+" TuDu files
+filetype *.tudu tudu -f %c
+
+" Qt projects
+filextype *.pro qtcreator %f &
+
+" Directories
+filextype */
+ \ {View in thunar}
+ \ Thunar %f &,
+
+" Syntax highlighting in preview
+"
+" Explicitly set highlight type for some extensions
+"
+" 256-color terminal
+" fileviewer *.[ch],*.[ch]pp highlight -O xterm256 -s dante --syntax c %c
+" fileviewer Makefile,Makefile.* highlight -O xterm256 -s dante --syntax make %c
+"
+" 16-color terminal
+" fileviewer *.c,*.h highlight -O ansi -s dante %c
+"
+" Or leave it for automatic detection
+"
+" fileviewer *[^/] pygmentize -O style=monokai -f console256 -g
+
+" Displaying pictures in terminal
+"
+" fileviewer *.jpg,*.png shellpic %c
+
+" Open all other files with default system programs (you can also remove all
+" :file[x]type commands above to ensure they don't interfere with system-wide
+" settings). By default all unknown files are opened with 'vi[x]cmd'
+" uncommenting one of lines below will result in ignoring 'vi[x]cmd' option
+" for unknown file types.
+" For *nix:
+" filetype * xdg-open
+" For OS X:
+" filetype * open
+" For Windows:
+" filetype * start, explorer
+
+" ------------------------------------------------------------------------------
+
+" What should be saved automatically between vifm sessions. Drop "savedirs"
+" value if you don't want vifm to remember last visited directories for you.
+set vifminfo=dhistory,savedirs,chistory,state,tui,shistory,
+ \phistory,fhistory,dirstack,registers,bookmarks,bmarks
+
+" ------------------------------------------------------------------------------
+
+" Examples of configuring both panels
+
+" Customize view columns a bit (enable ellipsis for truncated file names)
+"
+" set viewcolumns=-{name}..,6{}.
+
+" Filter-out build and temporary files
+"
+" filter! /^.*\.(lo|o|d|class|py[co])$|.*~$/
+
+" ------------------------------------------------------------------------------
+
+" Sample mappings
+
+" Start shell in current directory
+nnoremap s :shell
+
+" Display sorting dialog
+nnoremap S :sort
+
+" Toggle visibility of preview window
+nnoremap w :view
+vnoremap w :viewgv
+
+" Open file in existing instance of gvim
+nnoremap o :!gvim --remote-tab-silent %f
+" Open file in new instance of gvim
+nnoremap O :!gvim %f
+
+" Open file in the background using its default program
+nnoremap gb :file &l
+
+" Interaction with system clipboard
+if has('win')
+ " Yank current directory path to Windows clipboard with forward slashes
+ nnoremap yp :!echo %"d:gs!\!/! %i | clip
+ " Yank path to current file to Windows clipboard with forward slashes
+ nnoremap yf :!echo %"c:gs!\!/! %i | clip
+elseif executable('xclip')
+ " Yank current directory path into the clipboard
+ nnoremap yd :!echo %d | xclip %i
+ " Yank current file path into the clipboard
+ nnoremap yf :!echo %c:p | xclip %i
+elseif executable('xsel')
+ " Yank current directory path into primary and selection clipboards
+ nnoremap yd :!echo -n %d | xsel --input --primary %i &&
+ \ echo -n %d | xsel --clipboard --input %i
+ " Yank current file path into into primary and selection clipboards
+ nnoremap yf :!echo -n %c:p | xsel --input --primary %i &&
+ \ echo -n %c:p | xsel --clipboard --input %i
+endif
+
+" Mappings for faster renaming
+nnoremap I cw
+nnoremap cc cw
+nnoremap A cw
+
+" Open console in current directory
+nnoremap ,t :!xterm &
+
+" Open editor to edit vifmrc and apply settings after returning to vifm
+nnoremap ,c :write | edit $MYVIFMRC | restart
+" Open gvim to edit vifmrc
+nnoremap ,C :!gvim --remote-tab-silent $MYVIFMRC &
+
+" Toggle wrap setting on ,w key
+nnoremap ,w :set wrap!
+
+" Example of standard two-panel file managers mappings
+nnoremap :!less %f
+nnoremap :edit
+nnoremap :copy
+nnoremap :move
+nnoremap :mkdir
+nnoremap :delete
+
+" ------------------------------------------------------------------------------
+
+" Various customization examples
+
+" Use ag (the silver searcher) instead of grep
+"
+" set grepprg='ag --line-numbers %i %a %s'
+
+" Add additional place to look for executables
+"
+" let $PATH = $HOME.'/bin/fuse:'.$PATH
+
+" Block particular shortcut
+"
+" nnoremap
+
+" Export IPC name of current instance as environment variable and use it to
+" communicate with the instance later.
+"
+" It can be used in some shell script that gets run from inside vifm, for
+" example, like this:
+" vifm --server-name "$VIFM_SERVER_NAME" --remote +"cd '$PWD'"
+"
+" let $VIFM_SERVER_NAME = v:servername
--
cgit v1.2.3