From b4259aa2a2b1f92e31531464482c0632184f6425 Mon Sep 17 00:00:00 2001 From: Daniel Flanagan Date: Sun, 22 Nov 2020 00:21:37 -0600 Subject: [PATCH] More changes I have the worst commits --- apps/kitty/kitty.conf | 14 +- apps/neovim/init.vim | 3 + apps/nnn/plugins/preview | 307 +++++++----------- apps/shell/fish/aliases.fish | 8 +- apps/shell/fish/config.fish | 10 +- bin/{n => note} | 0 .../provision.d/20-install-packages.bash | 1 + 7 files changed, 140 insertions(+), 203 deletions(-) rename bin/{n => note} (100%) diff --git a/apps/kitty/kitty.conf b/apps/kitty/kitty.conf index 069bc24..fa71b39 100644 --- a/apps/kitty/kitty.conf +++ b/apps/kitty/kitty.conf @@ -1,36 +1,32 @@ font_family Iosevka +font_size 11.0 allow_remote_control yes repaint_delay 5 -input_delay 1 +input_delay 5 sync_to_monitor yes disable_ligatures always -# font_features Iosevka Fixed SS07 Medium -liga -dlig -calt -font_size 11.0 adjust_line_height 0 window_padding_width 10.0 window_margin_width 0.0 -clear_all_shortcuts yes - map ctrl+shift+equal change_font_size all +0.5 map ctrl+shift+minus change_font_size all -0.5 map shift+insert paste_from_clipboard map ctrl+shift+v paste_from_selection -enable_audio_bell yes +enable_audio_bell no +visual_bell_duration 1.0 -url_style curly +url_style single strip_trailing_spaces smart kitty_mod ctrl+shift+alt open_url_modifiers ctrl -# TODO: generate via color scheme generator - background #111111 foreground #f8f8f2 diff --git a/apps/neovim/init.vim b/apps/neovim/init.vim index b0a02a2..7b90cb2 100644 --- a/apps/neovim/init.vim +++ b/apps/neovim/init.vim @@ -94,6 +94,9 @@ command! W write inoremap jj inoremap jk +nnoremap :qa +inoremap + nnoremap :GitFiles nnoremap :Files nnoremap :GFiles? diff --git a/apps/nnn/plugins/preview b/apps/nnn/plugins/preview index 255c35d..d1cfcf4 100755 --- a/apps/nnn/plugins/preview +++ b/apps/nnn/plugins/preview @@ -1,231 +1,156 @@ #!/usr/bin/env sh -# Description: Terminal based file previewer -# -# Note: This plugin needs a "NNN_FIFO" to work. See man. -# -# Dependencies: -# - Supports 3 independent methods to preview with: -# - tmux (>=3.0), or -# - kitty with allow_remote_control on, or -# - $TERMINAL set to a terminal (it's xterm by default). -# - less or $PAGER -# - tree or exa or ls -# - mediainfo or file -# - mktemp -# - unzip -# - tar -# - man -# - optional: bat for code syntax highlighting -# - optional: kitty terminal or catimg for images -# - optional: scope.sh file viewer from ranger. -# To use: -# 1. drop scope.sh executable in $PATH -# 2. set/export $USE_SCOPE as 1 -# - optional: pistol file viewer (https://github.com/doronbehar/pistol). -# To use: -# 1. install pistol -# 2. set/export $USE_PISTOL as 1 -# -# Usage: -# You need to set a NNN_FIFO path and a key for the plugin with NNN_PLUG, -# then start `nnn`: -# -# $ nnn -a -# -# or -# -# $ NNN_FIFO=/tmp/nnn.fifo nnn -# -# Then in `nnn`, launch the `preview-tui` plugin. -# -# If you provide the same NNN_FIFO to all nnn instances, there will be a -# single common preview window. If you provide different FIFO path (e.g. -# with -a), they will be independent. -# -# The previews will be shown in a tmux split. If that isn't possible, it -# will try to use a kitty terminal split. And as a final fallback, a -# different terminal window will be used ($TERMINAL). -# -# Tmux and kitty users can configure $SPLIT to either "h" or "v" to set a -# 'h'orizontal split or a 'v'ertical split (as in, the line that splits the -# windows will be horizontal or vertical). -# -# Kitty users need `allow_remote_control` set to `yes`. To customize the -# window split, `enabled_layouts` has to be set to `all` or `splits` (the -# former is the default value). This terminal is also able to show images -# without extra dependencies. -# -# Shell: POSIX compliant -# Authors: Todd Yamakawa, Léo Villeveygoux, @Recidiviste, Mario Ortiz Manero - -SPLIT="$SPLIT" # you can set a permanent split here -TERMINAL="$TERMINAL" # same goes for the terminal +SPLIT="$SPLIT" +TERMINAL="$TERMINAL" USE_SCOPE="${USE_SCOPE:-0}" -USE_PISTOL="${USE_PISTOL:-0}" -PAGER="${PAGER:-less -R}" -[ "$PAGER" = "most" ] && PAGER="less -R" if [ -e "${TMUX%%,*}" ] && tmux -V | grep -q '[ -][3456789]\.'; then - TERMINAL=tmux + TERMINAL=tmux elif [ -n "$KITTY_WINDOW_ID" ] && kitty @ ls >/dev/null 2>&1; then - TERMINAL=kitty + TERMINAL=kitty else - TERMINAL="${TERMINAL:-xterm}" + TERMINAL="${TERMINAL:-xterm}" fi if [ -z "$SPLIT" ] && [ $(($(tput lines) * 2)) -gt "$(tput cols)" ]; then - SPLIT='h' + SPLIT='h' elif [ "$SPLIT" != 'h' ]; then - SPLIT='v' + SPLIT='v' fi exists() { - which "$1" >/dev/null 2>&1 + which "$1" >/dev/null 2>&1 } fifo_pager() { - cmd="$1" - shift - - # We use a FIFO to access $PAGER PID in jobs control - tmpfifopath="${TMPDIR:-/tmp}/nnn-preview-tui-fifo.$$" - mkfifo "$tmpfifopath" || return - - $PAGER < "$tmpfifopath" & - - ( - exec > "$tmpfifopath" - "$cmd" "$@" & - ) - - rm "$tmpfifopath" + cmd="$1"; shift + tmpfifopath="${TMPDIR:-/tmp}/nnn-preview-tui-fifo.$$" + mkfifo "$tmpfifopath" || return + $PAGER < "$tmpfifopath" & + ( + exec > "$tmpfifopath" + "$cmd" "$@" & + ) + rm "$tmpfifopath" } -# Binary file: show file info inside the pager print_bin_info() { - printf -- "-------- \033[1;31mBinary file\033[0m --------\n" - if exists mediainfo; then - mediainfo "$1" 2>/dev/null - else - file -b "$1" - fi + printf -- "-------- \033[1;31mBinary file\033[0m --------\n" + if exists mediainfo; then + mediainfo "$1" 2>/dev/null + else + file -b "$1" + # TODO: hexyl? + fi } preview_file () { - kill %- %+ 2>/dev/null && wait %- %+ 2>/dev/null - clear + kill %- %+ 2>/dev/null && wait %- %+ 2>/dev/null + clear - # Trying to use pistol if it's available. - if [ "$USE_PISTOL" -ne 0 ] && exists pistol; then - fifo_pager pistol "$1" - return - fi + # Trying to use pistol if it's available. + # if [ "$USE_PISTOL" -ne 0 ] && exists pistol; then + # fifo_pager pistol "$1" + # return + # fi - # Trying to use scope.sh if it's available. - if [ "$USE_SCOPE" -ne 0 ] && exists scope.sh; then - fifo_pager scope.sh "$1" "$cols" "$lines" "$(mktemp -d)" \ - "True" 2>/dev/null - return - fi + # Detecting the exact type of the file: the encoding, mime type, and + # extension in lowercase. + encoding="$(file -Lb --mime-encoding -- "$1")" + mimetype="$(file -Lb --mime-type -- "$1")" + ext="${1##*.}" + if [ -n "$ext" ]; then + ext="$(printf "%s" "${ext}" | tr '[:upper:]' '[:lower:]')" + fi + lines=$(($(tput lines)-1)) + cols=$(tput cols) - # Detecting the exact type of the file: the encoding, mime type, and - # extension in lowercase. - encoding="$(file -Lb --mime-encoding -- "$1")" - mimetype="$(file -Lb --mime-type -- "$1")" - ext="${1##*.}" - if [ -n "$ext" ]; then - ext="$(printf "%s" "${ext}" | tr '[:upper:]' '[:lower:]')" - fi - lines=$(($(tput lines)-1)) - cols=$(tput cols) - - # Otherwise, falling back to the defaults. - if [ -d "$1" ]; then - cd "$1" || return - if exists tree; then - fifo_pager tree -L 3 -F - elif exists exa; then - fifo_pager exa -G --colour=always 2>/dev/null - else - fifo_pager ls --color=always - fi - elif [ "$encoding" = "binary" ]; then - if [ "${mimetype%%/*}" = "image" ] ; then - if [ "$TERMINAL" = "kitty" ]; then - # Kitty terminal users can use the native image preview method. - kitty +kitten icat --silent --transfer-mode=stream --stdin=no \ - "$1" & - elif exists catimg; then - catimg "$1" - elif exists viu; then - viu -t "$1" - else - fifo_pager print_bin_info "$1" - fi - elif [ "$mimetype" = "application/zip" ] ; then - fifo_pager unzip -l "$1" - elif [ "$ext" = "gz" ] || [ "$ext" = "bz2" ] ; then - fifo_pager tar -tvf "$1" - else - fifo_pager print_bin_info "$1" - fi - elif [ "$mimetype" = "text/troff" ] ; then - fifo_pager man -Pcat -l "$1" - else - if exists bat; then - fifo_pager bat --terminal-width="$cols" --paging=never --decorations=always --color=always \ - "$1" 2>/dev/null - else - $PAGER "$1" & - fi - fi + # Otherwise, falling back to the defaults. + if [ -d "$1" ]; then + cd "$1" || return + if exists tree; then + fifo_pager tree -L 3 -F + elif exists exa; then + fifo_pager exa -G --colour=always 2>/dev/null + else + fifo_pager ls --color=always + fi + elif [ "$encoding" = "binary" ]; then + if [ "${mimetype%%/*}" = "image" ] ; then + if [ "$TERMINAL" = "kitty" ]; then + # Kitty terminal users can use the native image preview method. + kitty +kitten icat --silent --transfer-mode=stream --stdin=no "$1" & + elif exists catimg; then + catimg "$1" + elif exists viu; then + viu -t "$1" + else + fifo_pager print_bin_info "$1" + fi + elif [ "$mimetype" = "application/zip" ] ; then + fifo_pager unzip -l "$1" + elif [ "$ext" = "gz" ] || [ "$ext" = "bz2" ] ; then + fifo_pager tar -tvf "$1" + else + fifo_pager print_bin_info "$1" + fi + elif [ "$mimetype" = "text/troff" ] ; then + fifo_pager man -Pcat -l "$1" + else + if exists bat; then + fifo_pager bat --terminal-width="$cols" --paging=never --decorations=always --color=always \ + "$1" 2>/dev/null + else + $PAGER "$1" & + fi + fi } if [ "$PREVIEW_MODE" ] ; then - if [ ! -r "$NNN_FIFO" ] ; then - echo "No FIFO available! (\$NNN_FIFO='$NNN_FIFO')" >&2 - read -r - exit 1 - fi + if [ ! -r "$NNN_FIFO" ] ; then + echo "No FIFO available! (\$NNN_FIFO='$NNN_FIFO')" >&2 + read -r + exit 1 + fi - preview_file "$1" + preview_file "$1" - # use cat instead of 'exec <' to avoid issues with dash shell - # shellcheck disable=SC2002 - cat "$NNN_FIFO" |\ - while read -r selection ; do - preview_file "$selection" - done + # use cat instead of 'exec <' to avoid issues with dash shell + # shellcheck disable=SC2002 + cat "$NNN_FIFO" | \ + while read -r selection ; do + preview_file "$selection" + done - # Restoring the previous layout for kitty users. This will only work for - # kitty >= 0.18.0. - if [ "$TERMINAL" = "kitty" ]; then - kitty @ last-used-layout --no-response >/dev/null 2>&1 - fi + # TODO: detect if file is opened and close preview until back in nnn - exit 0 + # Restoring the previous layout for kitty users. This will only work for + # kitty >= 0.18.0. + if [ "$TERMINAL" = "kitty" ]; then + kitty @ last-used-layout --no-response >/dev/null 2>&1 + fi + + exit 0 fi if [ "$TERMINAL" = "tmux" ]; then - # tmux splits are inverted - if [ "$SPLIT" = "v" ]; then SPLIT="h"; else SPLIT="v"; fi - - tmux split-window -e "NNN_FIFO=$NNN_FIFO" -e "PREVIEW_MODE=1" -d"$SPLIT" "$0" "$1" + # tmux splits are inverted + if [ "$SPLIT" = "v" ]; then SPLIT="h"; else SPLIT="v"; fi + tmux split-window -e "NNN_FIFO=$NNN_FIFO" -e "PREVIEW_MODE=1" -d"$SPLIT" "$0" "$1" elif [ "$TERMINAL" = "kitty" ]; then - # Setting the layout for the new window. It will be restored after the - # script ends. - kitty @ goto-layout splits >/dev/null + # Setting the layout for the new window. It will be restored after the + # script ends. + kitty @ goto-layout splits >/dev/null - # Trying to use kitty's integrated window management as the split window. - # All environmental variables that will be used in the new window must - # be explicitly passed. - kitty @ launch --no-response --title "nnn preview" --keep-focus \ - --cwd "$PWD" --env "PATH=$PATH" --env "NNN_FIFO=$NNN_FIFO" \ - --env "PREVIEW_MODE=1" --env "PAGER=$PAGER" \ - --env "USE_SCOPE=$USE_SCOPE" --env "SPLIT=$SPLIT" \ - --env "USE_PISTOL=$USE_PISTOL" \ - --location "${SPLIT}split" "$0" "$1" >/dev/null + # Trying to use kitty's integrated window management as the split window. + # All environmental variables that will be used in the new window must + # be explicitly passed. + kitty @ launch --no-response --title "nnn preview" --keep-focus \ + --cwd "$PWD" --env "PATH=$PATH" --env "NNN_FIFO=$NNN_FIFO" \ + --env "PREVIEW_MODE=1" --env "PAGER=$PAGER" \ + --env "USE_SCOPE=$USE_SCOPE" --env "SPLIT=$SPLIT" \ + --env "USE_PISTOL=$USE_PISTOL" \ + --location "${SPLIT}split" "$0" "$1" >/dev/null else - PREVIEW_MODE=1 $TERMINAL -e "$0" "$1" & + PREVIEW_MODE=1 $TERMINAL -e "$0" "$1" & fi diff --git a/apps/shell/fish/aliases.fish b/apps/shell/fish/aliases.fish index 1fe6111..de6fcf7 100755 --- a/apps/shell/fish/aliases.fish +++ b/apps/shell/fish/aliases.fish @@ -13,10 +13,15 @@ alias la 'll -A' # show all # TODO: cat > bat alias tree 'tree -Csuh' alias f fzf -alias r 'nnn -P p' alias t "tmux" alias rcp 'rsync -r -ah --progress' +function r --wraps nnn --description 'support nnn quit and change directory' + set NNN_TMPFILE "$XDG_CONFIG_HOME/nnn/.lastd" + nnn -P p $argv + test -e $NNN_TMPFILE && source $NNN_TMPFILE && rm $NNN_TMPFILE +end + alias vltl "$EDITOR (ltl)" alias cdltl "cd (ltld)" @@ -119,4 +124,5 @@ alias grep "rg" alias vim nvim alias vi nvim +alias v nvim diff --git a/apps/shell/fish/config.fish b/apps/shell/fish/config.fish index dc29b43..110e8f9 100755 --- a/apps/shell/fish/config.fish +++ b/apps/shell/fish/config.fish @@ -20,7 +20,7 @@ set -Ux ERL_AFLAGS "-kernel shell_history enabled -kernel shell_history_file_byt set -Ux LESS "-r" set -Ux LS_COLORS 'ow=01;36;40' # more sane ls colors set -Ux EDITOR nvim -set -Ux VISUAL less +set -Ux VISUAL nvim set -Ux PAGER less set -Ux MANPAGER 'env MANWIDTH="" nvim --cmd "let g:prosession_on_startup=0" +Man!' @@ -28,7 +28,10 @@ has_command fd && set -Ux FZF_DEFAULT_COMMAND 'fd --type f --hidden --follow --e test -f ~/.fzf/shell/key-bindings.fish && source ~/.fzf/shell/key-bindings.fish -function fish_greeting; date; end +function fish_greeting; + set_color -b black brblack + printf "%s@%s %s\n" $USER (hostname) (date) +end # we assume the user uses "$HOME" to just store their mess of dotfiles and other # nonsense that clutters it up and that they have a preferred starting @@ -61,5 +64,8 @@ function src-hidden-dir echo "Checking $f..." test -f $f && source $f end +test -d $ENV_PATH/.hidden/fish.d && \ + complete --command src-hidden-dir -a \ + "(pushd $NICE_HOME && fd . $ENV_PATH/.hidden/fish.d/ --max-depth 1 --min-depth 1 -x ls -p && popd)" mkdir -p $NOTES_PATH $USER_LOGS_PATH $SCROTS_PATH diff --git a/bin/n b/bin/note similarity index 100% rename from bin/n rename to bin/note diff --git a/env/arch-linux/provision.d/20-install-packages.bash b/env/arch-linux/provision.d/20-install-packages.bash index a3346d8..1f41805 100755 --- a/env/arch-linux/provision.d/20-install-packages.bash +++ b/env/arch-linux/provision.d/20-install-packages.bash @@ -59,6 +59,7 @@ yay -Sy \ openssl `# Crypto` \ asdf-vm `# Runtime Version Manager` \ python python-pip `# Python 3 Language` \ + hexyl `# CLI Hex Viewer` \ pass `# Password Management` \ firefox-developer-edition `# Default Web Browser` \ rsync `# File Transfer` \