Something went wrong. Try again.
Configuration for my NixOS based systems and Home Manager
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205#!/usr/bin/env rcflag e +fn usage { echo 'usage: bm [-f|--full] [-l|--ls] [name]' >[1=2] echo ' bm add [-n|--name name] [path]' >[1=2] echo ' bm rm [-f|--full] [-l|--ls] [name]' >[1=2] echo ' bm list [-f|--full]' >[1=2]}fn fail { echo bm: $"* >[1=2] exit 1}fn bookmark_path { cat $store/$1}fn validate_name { if(~ $1 () add rm list -*) fail $1 is reserved if(~ $1 .* */* *' '*) fail invalid bookmark name: $1}fn list_bookmarks { for(file in $store/*) { if(test -f $file) { name=`` $nl {basename $file} dir=`` $nl {cat $file} if(~ $full 1) printf '%s\t%s\n' $name $dir if(! ~ $full 1) printf '%s\n' $name } }}fn choose_bookmark { if(! whatis fzf >/dev/null >[2=1]) fail fzf is required candidates=`` $nl {mktemp -t bm.XXXXXXXX} for(file in $store/*) { if(test -f $file) { name=`` $nl {basename $file} dir=`` $nl {cat $file} contents=() if(~ $show_ls 1) contents=`` $nl {ls -A -1 $dir | tr '\n' ' '} printf '%s\t%s\t%s\n' $name $dir $"contents >>$candidates } } nth=1 if(~ $full 1) nth=1,2 selection=`` $nl {fzf --delimiter '\t' --nth $nth --with-nth 1,2,3 <$candidates} status=$status rm -f $candidates if(~ $status 130 1) return if(! ~ $status 0) exit $status printf '%s\n' $selection}if(~ $XDG_DATA_HOME ()) data_home=$HOME/.local/shareif(! ~ $XDG_DATA_HOME ()) data_home=$XDG_DATA_HOMEstore=$data_home/bm/bookmarksmkdir -p $storeif(~ $1 --path) shiftcommand=goif(~ $1 add rm list) { command=$1 shift}switch($command) {case add name=() dir=() while(! ~ $#* 0) { switch($1) { case -n --name shift if(~ $#* 0) fail missing name name=$1 case -h --help usage exit case -* fail unknown option: $1 case * if(! ~ $dir ()) fail too many paths dir=$1 } shift } if(~ $dir ()) dir=$PWD if(! test -d $dir) fail not a directory: $dir dir=`` $nl {cd $dir && pwd -P} if(~ $name ()) name=`` $nl {basename $dir} validate_name $name tmp=`` $nl {mktemp $store/.tmp.XXXXXXXX} printf '%s\n' $dir >$tmp mv -f $tmp $store/$name echo $dir >[1=2]case rm full=0 show_ls=0 name=() while(! ~ $#* 0) { switch($1) { case -f --full full=1 case -l --ls show_ls=1 case -h --help usage exit case -* fail unknown option: $1 case * if(! ~ $name ()) fail too many bookmark names name=$1 } shift } if(~ $name ()) { selection=`` $nl {choose_bookmark} if(~ $selection ()) exit name=`` $nl {printf '%s\n' $selection | cut -f1} } if(! test -f $store/$name) fail no such bookmark: $name rm -f $store/$namecase list full=0 while(! ~ $#* 0) { switch($1) { case -f --full full=1 case -h --help usage exit case * fail unknown option: $1 } shift } list_bookmarkscase go full=0 show_ls=0 name=() while(! ~ $#* 0) { switch($1) { case -f --full full=1 case -l --ls show_ls=1 case -h --help usage exit case -* fail unknown option: $1 case * if(! ~ $name ()) fail too many bookmark names name=$1 } shift } if(~ $name ()) { selection=`` $nl {choose_bookmark} if(~ $selection ()) exit name=`` $nl {printf '%s\n' $selection | cut -f1} } if(! test -f $store/$name) fail no such bookmark: $name dir=`` $nl {bookmark_path $name} if(! test -d $dir) fail bookmark is not a directory: $dir printf '%s\n' $dir}