@@ -3,6 +3,29 @@
browser_cmd="brave-browser"
browser_new_cmd="brave-browser --new-window"
# First argument is the directory picking message
ask_dir() {
d=$(mru listdirs | dmenu -i -c -l 20 -p "$1")
if [ -z "$d" ]; then exit; fi
printf "$d"
}
# First argument is the file picking message
ask_file() {
d=$(ask_dir "from")
if [ -z "$d" ]; then exit; fi
f=$(
find "$d" -maxdepth 4 \( -path '*/.*/*' -o -name 'node_modules'\
-o -name '*.uuid' -o -name 'vendor' -o -regex '.*sw[op]$' \) -prune -o -print |
dmenu -i -c -l 20 -p "$1"
)
printf "$f"
}
launch() {
app=$(printf "Notes
Files
@@ -26,6 +49,7 @@ launch() {
Package info
Images
Games
Movie
Play clipboard
Play downloads
Processes
@@ -33,7 +57,7 @@ launch() {
dmenu -i -c -l 20 -p "Launcher")
case $app in
Notes) st -t "Notes" -e vim "+cd ~/notes/text " "+CtrlP";;
Notes) st -t "Notes" -e vim "+cd ~/Notes " "+CtrlP";;
Files) st -t "Files" -e sh -lc nnn;;
Edit) editor;;
Editor) st -t "Editor" -e vim "+CtrlPMRUFiles";;
@@ -45,7 +69,10 @@ launch() {
Tasks) st -t "Tasks" -e sh -lc taskwarrior-tui;;
Page) pages pager "$(printf "1\n2\n3\n" | dmenu -p 'page')";;
Games) games;;
Multiplexer) st -t "Multiplexer" -e tmux attach-session -t 0 || st -t "Multiplexer" -e tmux new-session -s 0;;
Movie) mpv $(find /mnt/media/movies -name '*.m*' -type f -not -path '*.x/*' |
dmenu -i -c -l 20 -p 'Play');;
Multiplexer) st -t "Multiplexer" -e tmux attach-session -t 0 ||
st -t "Multiplexer" -e tmux new-session -s 0;;
'Go page') num=$(go_page); pages pager $num;;
Chat) element-desktop;;
Music) st -t "Music" -e ncmpcpp;;
@@ -54,7 +81,8 @@ launch() {
Email) st -t 'Email' -e sh -lc neomutt;;
Images) view_images;;
'Play clipboard') mpv "$(xclip -o -selection clipboard)";;
'Play downloads') mpv "$HOME/downloads/tmp/$(ls ~/downloads/tmp/ | dmenu -i -l 10 -p 'play')";;
'Play downloads') mpv "$HOME/Downloads/tmp/$(ls ~/Downloads/tmp/ |
dmenu -i -l 10 -p 'play')";;
'Mixer') st -t "Mixer" -e pulsemixer;;
'Equalizer') qpaeq;;
Processes) st -t "Processes" -e top;;
@@ -82,6 +110,9 @@ action() {
Select song
Download
Download music
Torrent
Configure
Move
Update cache
Enable Bar
Exit" | tr -d '\t' |
@@ -108,6 +139,9 @@ action() {
#This should check for an error code and confirm that download has started
'Download') download;;
'Download music') download_music;;
'Torrent') torrent;;
'Configure') configure;;
'Move') move;;
esac
}
@@ -137,44 +171,54 @@ do_search() {
Github" | tr -d '\t' | dmenu -i -c -p "Search")
case "$type" in
Manual) p=$(man -k '' | dmenu -i -c -l 20 -p 'Manual' | cut -d' ' -f1); if [ -z $p ]; then exit; fi; st -t "Manual - $p" -e man "$p";;
Manual) p=$(man -k '' | dmenu -i -c -l 20 -p 'Manual' | cut -d' ' -f1);
if [ -z $p ]; then exit; fi; st -t "Manual - $p" -e man "$p";;
Github) github;;
Godocs) godoc;;
DDG) ddg;;
Package) package;;
Definition) word=$(printf '' | dmenu -p 'word'); if [ -z "$word" ]; then exit; fi; st -e sh -lc "dict \"$word\" | less";;
Definition) word=$(printf '' | dmenu -p 'word');
if [ -z "$word" ]; then exit; fi;
st -e sh -lc "dict \"$word\" | less";;
esac
}
download() {
youtube-dl --add-metadata --no-progress -o "$HOME/downloads/%(title)s.%(ext)s" "$(xclip -selection clipboard -o)"
youtube-dl --add-metadata --no-progress -o \
"$HOME/Downloads/%(title)s.%(ext)s" "$(xclip -selection clipboard -o)"
notify-send -u low -t 3000 "Download complete"
}
download_music() {
youtube-dl -x --add-metadata --no-progress --audio-format mp3 -o \
"$HOME/music/new/%(track)s - %(artist)s.%(ext)s" "$(xclip -selection clipboard -o)"
if [ ! $? ]; then
youtube-dl -x --add-metadata --no-progress --audio-format mp3 -o \
"$HOME/music/new/%(title)s - %(artist)s.%(ext)s" "$(xclip -selection clipboard -o)"
fi
if [ -e "$HOME/music/new/NA - NA"* ]; then
rm "$HOME/music/new/NA - NA"*
youtube-dl -x --add-metadata --no-progress --audio-format mp3 -o \
"$HOME/music/new/%(title)s - %(artist)s.%(ext)s" "$(xclip -selection clipboard -o)"
"$HOME/music/new/%(title)s - %(artist)s.%(ext)s" \
"$(xclip -selection clipboard -o)"
fi
notify-send -u low -t 3000 "Download complete"
notify-send -u low -t 3000 "Download complete"
}
view_images() {
d=$(mru listdirs | dmenu -c -l 20 -i -p 'where?')
if [ -z "$d" ]; then exit; fi
sxiv -r "$d"
}
package() {
type=$(printf "search\ninfo" | dmenu -c -p 'package')
if [ -z "$type" ]; then
exit
elif [ "$type" = "info" ]; then
@@ -189,37 +233,45 @@ package() {
editor() {
#handle spacing in filenames bug
file=$(mru list | dmenu -i -c -l 20 -p 'edit file')
if [ -z "$file" ]; then exit; fi
first=$(printf "$file" | head -n1 -)
d=$(dirname "$first")
files=$(printf "$file" | tr '\n' ' ')
printf "files: $files"
st -t 'Editor' -e vim "+cd $d" $files
}
opener() {
mru list | dmenu -i -c -l 20 -p 'open' | while read f; do xdg-open "$f"; done
mru list | dmenu -i -c -l 20 -p 'open' |
while read f; do xdg-open "$f"; done
}
screenshot() {
method=$(printf "clipboard
method=$(
printf "clipboard
file
both" |
dmenu -i -p "Screenshot")
if [ $method = "file" ]; then
scrot --note "-f 'LiterationSans Nerd Font Book/11' -x 10 -y 20 -c 255,0,0,255 -t 'Hi'"\
scrot --note "-f 'LiterationSans Nerd Font Book/11' -x 10 -y 20 -c
255,0,0,255 -t 'Hi'"\
-s ~/Pictures/screenshots/screenshot-%Y-%m-%d_$wx$h.png
fi
if [ $method = "clipboard" ]; then
scrot --note "-f 'LiterationSans Nerd Font Book/11' -x 10 -y 20 -c 255,0,0,255 -t 'Hi'"\
scrot --note "-f 'LiterationSans Nerd Font Book/11' -x 10 -y 20 -c
255,0,0,255 -t 'Hi'"\
-s ~/Pictures/screenshots/screenshot-%Y-%m-%d_$wx$h.png\
-e "xclip $f; rm $f"
fi
if [ $method = "both" ]; then
scrot --note "-f 'LiterationSans Nerd Font Book/11' -x 10 -y 20 -c 255,0,0,255 -t 'Hi'"\
scrot --note "-f 'LiterationSans Nerd Font Book/11' -x 10 -y 20 -c
255,0,0,255 -t 'Hi'"\
-s ~/Pictures/screenshots/screenshot-%Y-%m-%d_$wx$h.png\
-e "xclip $f;"
fi
@@ -230,7 +282,8 @@ search_type() {
search_mode='tab'
case "$search_string" in
'New window') search_mode='window'; search_string=$(printf '' | dmenu -c -p "new $1");;
'New window') search_mode='window';
search_string=$(printf '' | dmenu -c -p "new $1");;
'Bookmarks');;
'History') ;;
# *) printf "Invalid argument";;
@@ -293,11 +346,17 @@ manual() {
goinfo() {
#Maybe this can also show recent searches
search=$(printf "Window\nNotify" | dmenu -p 'goinfo')
case $search in
Window) search=$(printf '' | dmenu -p 'goinfo'); result=$(go doc "$search"); infowindow "$result"; exit;;
Notify) search=$(printf '' | dmenu -p 'goinfo'); result=$(go doc "$search"); notify-send -u low -t 0 "Go documentation" "$result"; exit;;
Window) search=$(printf '' | dmenu -p 'goinfo');
result=$(go doc "$search"); infowindow "$result"; exit;;
Notify) search=$(printf '' | dmenu -p 'goinfo');
result=$(go doc "$search");
notify-send -u low -t 0 "Go documentation" "$result"; exit;;
esac
result=$(go doc "$search"); notify-send -u low -t 0 "Go documentation" "$result";
result=$(go doc "$search");
notify-send -u low -t 0 "Go documentation" "$result";
}
go_page() {
@@ -320,6 +379,7 @@ cmd() {
cmd_clip() {
value=$(cmd)
show_value="$(expr substr "$value" 1 200)\n..."
notify-send -u low -t 2000 "Items cliped" "$show_value"
printf "%s" "$value" | xclip -selection clipboard
}
@@ -330,28 +390,31 @@ sel_account() {
sed -e "s:$HOME/.password-store/::" -e "s:\.gpg::" |
dmenu -c -i -l 20 -p 'account'
)
if [ -z "$account" ]; then exit; fi
printf "$account"
}
username() {
account=$(sel_account)
if [ -z "$account" ]; then exit; fi
name=$(pass show "$account" | sed -n -e "s/^username: //p" |
dmenu -c -i -l 20 -p 'which username' | xclip -f -selection clipboard)
if [ -z "$name" ]; then exit; fi
notify-send -u low -t 2000 "username copied" "$account: $name"
}
password() {
rm prompt-login-*
touch /tmp/prompt-login-$$
account=$(find ~/.password-store/[!\.]* -type f |
sed -e "s:$HOME/.password-store/::" -e "s:\.gpg::" |
dmenu -i -c -l 20 -p 'which service')
pass -c $account
notify-send -u low -t 1000 'password copied' "Copied $account"
}
# Giving multiple accounts for the same service the same username may cause problems.
@@ -361,12 +424,17 @@ other_password() {
account=$(sel_account)
name=$(pass show "$account" | sed -n -e "s/^username: //p" |
dmenu -i -c -l 20 -p 'which user password')
if [ -z "$name" ]; then exit; fi
copy=$(pass show $account | grep -B 1 "^username: $name" | head -n1 | tr -d '\n')
printf "$copy" | xclip -selection clipboard
notify-send -u low -t 2000 "password copied" "$account: $name"
sleep 30s
new_copy=$(xclip -o -selection clipboard)
if [ "$copy" = $newcopy ]; then
printf '' | xclip -selection clipboard
fi
@@ -375,33 +443,39 @@ other_password() {
show_password() {
account=$(sel_account)
info=$(pass show "$account")
st -e sh -lc "printf '$info' | less"
}
edit_password() {
account=$(sel_account)
if [ -z "$account" ]; then exit; fi
error=$(st -e pass edit "$account" 2>&1)
if [ -n "$error" ]; then notify-send -u low -t 3000 "password edit error" "$error"; fi
}
if [ -z "$account" ]; then exit; fi
error=$(st -e pass edit "$account" 2>&1)
if [ -n "$error" ];
then notify-send -u low -t 3000 "password edit error" "$error"; fi
}
# Execute a command with the specified file or directory as it's argument
choose() {
d=$(mru listdirs | dmenu -i -c -l 20 -p 'from')
if [ -z "$d" ]; then exit; fi
f=$(
(printf "$d\n"; find "$d" -type f -not \( -path '*/.*/*' -o -path '*node_modules/*' -o -ipath '*backups/my-plugins*' -o -ipath '*/.uuid' -ipath '*.swp*' \)) |
dmenu -i -c -l 20 -p 'choose file'
(printf "$d\n"; find "$d" -type f -not \( -path '*/.*/*' -o -path
'*node_modules/*' -o -ipath '*backups/my-plugins*' -o -ipath '*/.uuid'
-ipath '*.swp*' \)) | dmenu -i -c -l 20 -p 'choose file'
)
if [ -z "$f" ]; then exit; fi
c=$(dmenu_path | dmenu -i -c -p 'operation')
if [ -z $c ]; then exit; fi
$c "$f"
}
vpn() {
ls
$c "$f"
}
# It finds all the current files in a known directory without needing to update the mru list of files
@@ -466,6 +540,37 @@ bookmarks() {
esac
}
torrent() {
sel=$(printf "List
Add
Delete
Edit" | tr -d "\t" | dmenu -i -c -p 'Bookmarks')
case "$sel" in
'Add') btcli add -T -d /mnt/media/torrents/ \
"$(
find ~/Downloads -name '*.torrent' |
dmenu -i -c -l 30 -p "Select torrent"
)";;
'List');; # Already lists as final output
esac
notify-send -u low -t 6000 "Torrents" "$(btcli list)"
}
move() {
f=$(ask_file "Choose file")
dest=$(ask_dir "Destination")
notify-send -u low -t 6000 "Move" "$(mv $f $dest)"
}
# Should be used for automatically selecting and copying files in
# ~/Source/configs to their correct path
# configure() {
# }
case $1 in
launch ) launch;;
action) action;;