From f74937c68359d39ca1524b98d054bbc6ac1c3624 Mon Sep 17 00:00:00 2001 From: mrjk Date: Mon, 17 Apr 2023 14:42:37 -0400 Subject: [PATCH] fix: init script --- bin/idmgr | 4 +- shell/bash.sh | 164 +++++++------------------------------------------- 2 files changed, 25 insertions(+), 143 deletions(-) diff --git a/bin/idmgr b/bin/idmgr index 250075c..39863bd 100755 --- a/bin/idmgr +++ b/bin/idmgr @@ -151,7 +151,9 @@ idm_core__shell () echo "export IDM_BIN=${IDM_BIN:-$IDM_DIR_ROOT/bin/idmgr}" echo "export IDM_DIR_ROOT='$IDM_DIR_ROOT'" - echo "IDM_SRC_WORDS='$IDM_SRC_WORDS $(lib_id_get_all_id | xargs)'" + #echo "IDM_SRC_WORDS='$IDM_SRC_WORDS $(lib_id_get_all_id | xargs)'" + echo "IDM_SRC_WORDS='$IDM_SRC_WORDS'" + echo "IDM_DIR_ID='$IDM_DIR_ID'" tail -n +2 $IDM_DIR_ROOT/shell/bash.sh } diff --git a/shell/bash.sh b/shell/bash.sh index a0c4a3a..d0a0d8e 100644 --- a/shell/bash.sh +++ b/shell/bash.sh @@ -6,20 +6,29 @@ IDM_BIN=${IDM_BIN:-idmgr} i () { + local IDM_SRC_IDS=$($IDM_BIN id names) + local result= + local idents=$() + local id= + for id in $( find $IDM_DIR_ID -type f -name '*.env' 2>/dev/null ); do + id=${id##*/} + idents="${idents:+$idents }${id%%\.env}" + done - if grep -q " ${1:-NONE} " <<<" ${IDM_SRC_WORDS} "; then + local patterns=" ${IDM_SRC_WORDS} ${IDM_SRC_IDS} $idents" + if grep -q " ${1:-NONE} " <<<" $patterns "; then result="$( $IDM_BIN $@)" # Debug module - if [ "${ID_DEBUG-}" == "true" ]; then - echo "DEBUG: Command: $IDM_BIN $@" + if [ "${IDM_DEBUG-}" == "true" ]; then + >&2 echo "DEBUG: Source: $IDM_BIN $@" if [ "${result:-NONE}" == "NONE" ]; then - echo "DEBUG: ======= ${result:-NONE}" + >&2 echo "DEBUG: ======= ${result:-NONE}" else - echo "DEBUG: ======= Shell has sourced =======" + >&2 echo "DEBUG: ======= Shell has sourced =======" echo "${result:-NONE}" - echo "DEBUG: =======" + >&2 echo "DEBUG: =======" fi fi @@ -27,6 +36,10 @@ i () eval "$result" else + if [ "${IDM_DEBUG-}" == "true" ]; then + >&2 echo "DEBUG: Command: $IDM_BIN $@" + >&2 echo "DEBUG: =======" + fi $IDM_BIN $@ fi @@ -35,6 +48,9 @@ i () i_restore_last_id () { + + [[ "$IDM_LAST_ID_AUTOLOAD" == 'true' ]] || return 0 + local IDM_DIR_CACHE=${IDM_DIR_CACHE:-${XDG_CACHE_HOME:-~/.cache}/idmgr} local state_file=$IDM_DIR_CACHE/last_id if [ -f "$state_file" ]; then @@ -45,7 +61,6 @@ i_restore_last_id () i enable $id fi fi - } @@ -54,138 +69,3 @@ bind -x '"\C-b": i disable' i_restore_last_id - -# completion file for bash - -# Copyright (C) 2012 - 2014 Jason A. Donenfeld and -# Brian Mattern . All Rights Reserved. -# This file is licensed under the GPLv2+. Please see COPYING for more information. - -_pass_complete_entries () { - prefix="${PASSWORD_STORE_DIR:-$HOME/.password-store/}" - prefix="${prefix%/}/" - suffix=".gpg" - autoexpand=${1:-0} - - local IFS=$'\n' - local items=($(compgen -f $prefix$cur)) - - # Remember the value of the first item, to see if it is a directory. If - # it is a directory, then don't add a space to the completion - local firstitem="" - # Use counter, can't use ${#items[@]} as we skip hidden directories - local i=0 - - for item in ${items[@]}; do - [[ $item =~ /\.[^/]*$ ]] && continue - - # if there is a unique match, and it is a directory with one entry - # autocomplete the subentry as well (recursively) - if [[ ${#items[@]} -eq 1 && $autoexpand -eq 1 ]]; then - while [[ -d $item ]]; do - local subitems=($(compgen -f "$item/")) - local filtereditems=( ) - for item2 in "${subitems[@]}"; do - [[ $item2 =~ /\.[^/]*$ ]] && continue - filtereditems+=( "$item2" ) - done - if [[ ${#filtereditems[@]} -eq 1 ]]; then - item="${filtereditems[0]}" - else - break - fi - done - fi - - # append / to directories - [[ -d $item ]] && item="$item/" - - item="${item%$suffix}" - COMPREPLY+=("${item#$prefix}") - if [[ $i -eq 0 ]]; then - firstitem=$item - fi - let i+=1 - done - - # The only time we want to add a space to the end is if there is only - # one match, and it is not a directory - if [[ $i -gt 1 || ( $i -eq 1 && -d $firstitem ) ]]; then - compopt -o nospace - fi -} - -_pass_complete_folders () { - prefix="${PASSWORD_STORE_DIR:-$HOME/.password-store/}" - prefix="${prefix%/}/" - - local IFS=$'\n' - local items=($(compgen -d $prefix$cur)) - for item in ${items[@]}; do - [[ $item == $prefix.* ]] && continue - COMPREPLY+=("${item#$prefix}/") - done -} - -_pass_complete_keys () { - local IFS=$'\n' - # Extract names and email addresses from gpg --list-keys - local keys="$(gpg2 --list-secret-keys --with-colons | cut -d : -f 10 | sort -u | sed '/^$/d')" - COMPREPLY+=($(compgen -W "${keys}" -- ${cur})) -} - -_pass() -{ - COMPREPLY=() - local cur="${COMP_WORDS[COMP_CWORD]}" - local commands="init ls find grep show insert generate edit rm mv cp git help version" - if [[ $COMP_CWORD -gt 1 ]]; then - local lastarg="${COMP_WORDS[$COMP_CWORD-1]}" - case "${COMP_WORDS[1]}" in - init) - if [[ $lastarg == "-p" || $lastarg == "--path" ]]; then - _pass_complete_folders - compopt -o nospace - else - COMPREPLY+=($(compgen -W "-p --path" -- ${cur})) - _pass_complete_keys - fi - ;; - ls|list|edit) - _pass_complete_entries - ;; - show|-*) - COMPREPLY+=($(compgen -W "-c --clip" -- ${cur})) - _pass_complete_entries 1 - ;; - insert) - COMPREPLY+=($(compgen -W "-e --echo -m --multiline -f --force" -- ${cur})) - _pass_complete_entries - ;; - generate) - COMPREPLY+=($(compgen -W "-n --no-symbols -c --clip -f --force -i --in-place" -- ${cur})) - _pass_complete_entries - ;; - cp|copy|mv|rename) - COMPREPLY+=($(compgen -W "-f --force" -- ${cur})) - _pass_complete_entries - ;; - rm|remove|delete) - COMPREPLY+=($(compgen -W "-r --recursive -f --force" -- ${cur})) - _pass_complete_entries - ;; - git) - COMPREPLY+=($(compgen -W "init push pull config log reflog rebase" -- ${cur})) - ;; - esac - else - COMPREPLY+=($(compgen -W "${commands}" -- ${cur})) - _pass_complete_entries 1 - fi -} - -complete -o filenames -F _pass pass - -# Show current identities -echo "INFO: idmgr has been loaded, use 'idmgr' or 'i' to call it" -#$IDM_BIN id ls