DT, this is one of the most useful videos you have done. Videos like this, describing simple tools that have far-reaching uses is something we need more of. Please.
IDK if this is for everyone, but in dmconf to get this to work outside of emacs, I had to change the DMEDITOR to 'st -e nvim' (also worked with termite) that way it would open up the terminal and then launch nvim.
goddam, ever since i learned about dmenu, rofi, shell scripting and other stuff i dont really have to open teriminals to do everyday stuff like changing the wallpapers or changing the color theme on pywal, is so nice. Specially when u can alias it or add it as a keyboar shortcut
I made a simple script to search songs from my music folder by filename pattern, select with dmenu, and queue it to my playlist. It's the best thing since sliced bread.
I'm actually having a lot of fun just trying to shell script my way into getting the perfect Desktop environment out of my Window Manager. Just earlier today, I made a script that reads your steam game folder, then generates a Rofi menu to choose between these games. I came up with a script that sets some certain color configs to constantly be cycling in a rainbow style. I'm not even going to use that, but it was fun to make. I've got a ton of these ideas just to mess around with, and this video gave me a few more. It really is a good way to learn shell scripting.
That's incredible. I'm going to steal the code. I'm getting into Linux for the past year or so and I've been learning much in this channel. Nice as well been joining this Linux community as an escape from the madness all over the mainstream web platforms.
ive been meaning to make up some rofi/dmenu scripts for a while now. things like selecting multiple files and then choosing in the menu which scripts to send the file list to. like renaming or removing certain characters, resizing images, converting videos etc, there really is tons of things you can do. and the beauty of it all is that you only have to write each script one, then give it a descriptive name. beats having to remember all of the commands off the top of your head and having to type them out
This is very sick. I have looked for this kind of thing many times and this version seems to be very simple + useful. Very nice examples as well - this is in the top 5 most useful ideas of computer use I think & definitely want others to learn this
So I threw a small shell script together to edit my configs. Its relatively easier to understand. All you have to do is dump your paths in one file line by line. (Replace nvim/nnn and the path with whatever you want). Thought it would be helpful. PS. DT. Love your channel so much! I learnt a lot from it. Thank you for your content :) #!/usr/bin/bash choice=$(cat "/home/eragon/Documents/scripts/listofscripts.txt" |dmenu -l 10) echo $choice if [ -d $choice ] then echo "Directory" nnn $choice else echo "File" nvim $choice fi
I recently made my first rofi script, which replaces "Open with NVIM" in the right click menu with a script that finds all your open NVIM sessions and opens the file in the one you pick with nvim-remote. I usually navigate files in the terminal of course, but this can be useful when downloading files from the browser. I live in tmux and usually have a lot of sessions open. If I'm working on something I don't want it to open a new terminal, the file is probably related to something I'm already working on.
Thanks DT for this I need to move some of my configs to dmenu, right now I have 7~8 aliases for config edits like vi_zsh // for zsh config vi_vi // vim config vi_(etc)
Feel so sorry for the first script man, I mean I could do that in a loooott less, just using la on .config or anything else, greppping things I want , output that to a file, and use sed and tr and cut maybe to just format it. (I know it sounds complicated but in essence this will take like 2 or 3 lines max Edit: the second script is similar to the first but makes much more sense in the second, the first would be much easier
You should check out how sxmo (simple X11 mobile) uses dmenu on the PinePhone. I originally typed a comment with some examples, but I clicked something that took me away from this video which then erased my two paragraphs of text, so look at their scripts yourself. Their dmenu scripts that are run based on the X window title are cool and remind me of Microsoft's UWP menuing system. Although I believe for that system to work, developers had to code their application to use their proprietary menu system API, but these dmenu scripts are implemented in an extensible unix fashion: all selecting the options presented by dmenu does is send key combinations to your applications, so I could rewrite the script to list whatever entries with whatever keystrokes I want.
What is the purpose of the hyphen in the 2nd field of your array's elements? Assuming the hyphen isn't a kind of placeholder for a field value to be populated later you could have used a "declare -A" instead declaring an associative array (or hash as called in Perl, or dictionary as called in Python) which would have saved you the pipe into awk to parse the value field of your array elements.
@Learn Linux Me too. Although in a script like this it doesn't really matter, I often imagine nested loops where command pipes in the inner loop could be executed many thousand times and where you want to avoid unnecessary forks of subshells. Have you heard of Randal Schwartz's _Useless Use of Cat Award_ ? This dates back three decades when dynamic content of many websites in the WWW was generated by often _Idiotic Perl_ scripts.
I was also wondering about that dash. My fzf / rofi radio bookmarks only use two fields. Luke Smith showed a nice way to break up those variables with # or % and using the dash may be more handy than splitting fields on the spaces.
@@Mach7RadioIntercepts Yes, I think what you mean is called parameter expansion. There should be a section in man bash explaining all sorts of variable expansions and pattern substitutions. This is by far the most efficient way of parsing because it is a shell built-in functionality and avoids invocation of any external commands to accomplish the task, as one usually does by piping into e.g. grep, sed, tr, awk, perl etc. e.g. If the value of an array element of DT's example was stored in ENTRY one could expand all after the hyphen referring to ${ENTRY#*-\ } likewise to expand all up to the hyphen by referring to ${ENTRY%\ -*}
I wish dmenu had an option to specify a separate output list, so for DT's dmconf script he could just display "alacritty awesome bash..." but selecting one of them would return the file path. Here is my scrappy solution: grep "$(echo -e "[1] first [2] second [3] third" | dmenu | cut -d' ' -f1)"
Try using an associative array. Print and select just the index name, and use the string returned to recall the desired path: ===== declare -A options options[bash]=$HOME/.bashrc options[vim]=$HOME/.vimrc ...etc... choice=$( printf '%s ' "${!options[@]}" | sort | dmenu .... ) echo "${options[$choice]}" ===== [Edit: I almost forgot, associative arrays do not *sort* naturally, so it's best to include your own, to be sure you see them in alphabetical (or other desired) order.]
@DistroTube Do you use any lockscreen?I have been through your dotfiles but didn't anything that mentioned slock, xscreensaver etc? Do you mind making a video on it?
I don't use screenlockers much on my on machines. And slock is a simple program. Not much to it. Install it. Run 'slock' to lock the screen. Start typing your password...if the screen is blue and unlocks, you typed your pass word correctly. If the screen turns red, then you entered the wrong password, try again.
Cool video. Lately I've been thinking about writing a dmenu scripts that launches Steam games without the need to open the Steam library window. Maybe with this tutorial I'll try it soon. I wish there were a way for the script to update itself, but I don't think there's a Steam file I can easily parse to automatically find games installed via Steam. On another note, do you recommend a good dmenu script that can parse .desktop files but unlike i3-dmenu-desktop works with any window manager like, oh I don't know dwm, the actual tiling window manager made by the same suckless guys as dmenu itself? (what were the i3 guys thinking hard coding i3-dmenu-desktop to integrate with i3)
@@JopiesausGaming It later occured to me I don't need the executables or paths to the games, just their IDs and names. In the steamapps folder, there isn't one big repository, but rather, a file for each installed game called "appmanifest_(id).acf". They each contain an "appid" field and a "name" field. Any idea how I go about parsing these files one at a time whilst still making sure the names and IDs go together?
@@albynoson If you use "grep '\"appid\"\|\"name\"' $STEAMDIR/appmanifest_*" it should give a workable output, i am however not that competent in string manipulation in bash, so i wouldn't immediately know how to proceed from there.
They are not really the same thing. The Xmonad prompt is part of Xmonad. It is not a standalone program like dmenu that you can incorporate into scripting.
I was in dwm in this video. But in xmonad, just create a keybinding like: ("M-p s", spawn "bash /path/to/script") The above example assumes you use EZ keybindings. The keybinding in this example is a keychord, SUPER+p followed by 's'.
@@DistroTube Much appreciated! I really love EZ Keys. I really wouldn't want to go back to standard keybindings after seeing how easy EZ can be! I'm going to try my dmenu scripts again later like this amd see what happens. Thanks again!
There's the venerable old _Bash Advanced Scripting Guide_ , always a staple, but it's a bit obscure for newbies, and perhaps a bit outdated. The _Bash Guide For Beginners_ may be better for beginners. There are certainly a lot of other good newer ones out there now, findable with just a flick of the DuckDuckGo. And while they aren't "guides", per se, I highly recommend _Greg's Wiki_ and the _Bash Hacker's Wiki_ . They are both indispensable for learning how to code _properly_ and to avoid common pitfalls. If you do nothing else, read Greg's BashFAQ and Bash Pitfall pages before you dive too deep into your coding.
I think learning a POSIX shell is way better then Bash. Why? Simple. That script can be runned on different OS's like BSD, Solaris, AIX, HP-UX, etc., not just on GNU/Linux where bash is the default shell. Beside Bourne Shell code is more elegant the bash. I have scripts which run on FreeBSD, OpenBSD, Solaris, HP-UX and GNU/Linux without the need of modification. They just run. #!/bin/sh. This is the way! :)
I have a version of dmenu_run which only shows a subset of the commands, instead of all executables in PATH. For example I never want to launch "true", "false", "dd", or "[" from the desktop (without args) 🙃 instead it just shows things I tend to launch.
One doubt any BEST free resources to learn shell scripting from the entry level to high level in the field of CYBERSEC OR HACKING LINE??? CAN YOU HELP ME ON THIS ???
What's the point of the first script? You're using emacs for editing all config files. Just use named bookmarks that is available in vanilla emacs (use a namespace format like config/bookmarkname to easily find config files). With Helm and other fancy stuff it's trivial to setup a better menu.
DT, this is one of the most useful videos you have done. Videos like this, describing simple tools that have far-reaching uses is something we need more of. Please.
IDK if this is for everyone, but in dmconf to get this to work outside of emacs, I had to change the DMEDITOR to 'st -e nvim' (also worked with termite) that way it would open up the terminal and then launch nvim.
hello and thx for an advice
@@daveshouldaine2520 thanks as I ran into the same issue. This fixes it.
That second script is actually a great idea!! I'm going to write a version of it myself to practice :)
goddam, ever since i learned about dmenu, rofi, shell scripting and other stuff i dont really have to open teriminals to do everyday stuff like changing the wallpapers or changing the color theme on pywal, is so nice. Specially when u can alias it or add it as a keyboar shortcut
what about system updates?
@@zvezdan956 i just use "alias uu="sudo apt update && sudo apt upgrade ""
@@zvezdan956 what's a system update?
I made a simple script to search songs from my music folder by filename pattern, select with dmenu, and queue it to my playlist. It's the best thing since sliced bread.
I've been playing with a similar idea. A dmenu script that controls the deadbeef player, gets tracks info, or loads playlists.
pls share the code
I'm actually having a lot of fun just trying to shell script my way into getting the perfect Desktop environment out of my Window Manager.
Just earlier today, I made a script that reads your steam game folder, then generates a Rofi menu to choose between these games.
I came up with a script that sets some certain color configs to constantly be cycling in a rainbow style. I'm not even going to use that, but it was fun to make.
I've got a ton of these ideas just to mess around with, and this video gave me a few more.
It really is a good way to learn shell scripting.
Played around with dmenu yesterday and there are so many possibilities; exaclty what I'd expect from suckless
I know this is an older vid but I just discovered dmenu and this has helped me immensely. Thanks for sharing.
That's incredible. I'm going to steal the code. I'm getting into Linux for the past year or so and I've been learning much in this channel. Nice as well been joining this Linux community as an escape from the madness all over the mainstream web platforms.
you save my time, already using your scripts, and edit it a little for my machine
ive been meaning to make up some rofi/dmenu scripts for a while now. things like selecting multiple files and then choosing in the menu which scripts to send the file list to. like renaming or removing certain characters, resizing images, converting videos etc, there really is tons of things you can do. and the beauty of it all is that you only have to write each script one, then give it a descriptive name. beats having to remember all of the commands off the top of your head and having to type them out
good stuff. going to start writing scripts for my dmenu. thank you for showcasing this
Is that you in your wallpaper?
i thought the same thing
This is very sick. I have looked for this kind of thing many times and this version seems to be very simple + useful.
Very nice examples as well - this is in the top 5 most useful ideas of computer use I think & definitely want others to learn this
So I threw a small shell script together to edit my configs. Its relatively easier to understand. All you have to do is dump your paths in one file line by line. (Replace nvim/nnn and the path with whatever you want).
Thought it would be helpful.
PS. DT. Love your channel so much! I learnt a lot from it. Thank you for your content :)
#!/usr/bin/bash
choice=$(cat "/home/eragon/Documents/scripts/listofscripts.txt" |dmenu -l 10)
echo $choice
if [ -d $choice ]
then
echo "Directory"
nnn $choice
else
echo "File"
nvim $choice
fi
I recently made my first rofi script, which replaces "Open with NVIM" in the right click menu with a script that finds all your open NVIM sessions and opens the file in the one you pick with nvim-remote. I usually navigate files in the terminal of course, but this can be useful when downloading files from the browser. I live in tmux and usually have a lot of sessions open. If I'm working on something I don't want it to open a new terminal, the file is probably related to something I'm already working on.
Love this channel. Simple. Straightforward.
I’m so about to fork one of these scripts and make a crypto checker script now.
Awesome ! Thanks for this video. I will play around with dmenu :)
Very useful, thank you Derek. Keep it coming!
Dmenu has informed us that you have not extended your car's warranty
lool nice one
Well done, will try it out later! Thank you very much for this information
Thanks DT for this
I need to move some of my configs to dmenu, right now I have 7~8 aliases for config edits like
vi_zsh // for zsh config
vi_vi // vim config
vi_(etc)
Dmenu: "do you have time to talk about our lord and savior, DT?"
Nice seeing this type of videos again
Feel so sorry for the first script man, I mean I could do that in a loooott less, just using la on .config or anything else, greppping things I want , output that to a file, and use sed and tr and cut maybe to just format it. (I know it sounds complicated but in essence this will take like 2 or 3 lines max
Edit: the second script is similar to the first but makes much more sense in the second, the first would be much easier
This is brilliant!
That is some great stuff right there!
I automate tasks with shell scripting nice handy feature 😉
You should check out how sxmo (simple X11 mobile) uses dmenu on the PinePhone. I originally typed a comment with some examples, but I clicked something that took me away from this video which then erased my two paragraphs of text, so look at their scripts yourself.
Their dmenu scripts that are run based on the X window title are cool and remind me of Microsoft's UWP menuing system. Although I believe for that system to work, developers had to code their application to use their proprietary menu system API, but these dmenu scripts are implemented in an extensible unix fashion: all selecting the options presented by dmenu does is send key combinations to your applications, so I could rewrite the script to list whatever entries with whatever keystrokes I want.
What is the purpose of the hyphen in the 2nd field of your array's elements?
Assuming the hyphen isn't a kind of placeholder for a field value to be populated later you could have used a "declare -A" instead declaring an associative array (or hash as called in Perl, or dictionary as called in Python) which would have saved you the pipe into awk to parse the value field of your array elements.
@Learn Linux
Me too. Although in a script like this it doesn't really matter, I often imagine nested loops where command pipes in the inner loop could be executed many thousand times and where you want to avoid unnecessary forks of subshells.
Have you heard of Randal Schwartz's _Useless Use of Cat Award_ ?
This dates back three decades when dynamic content of many websites in the WWW was generated by often _Idiotic Perl_ scripts.
I was also wondering about that dash. My fzf / rofi radio bookmarks only use two fields. Luke Smith showed a nice way to break up those variables with # or % and using the dash may be more handy than splitting fields on the spaces.
@@Mach7RadioIntercepts
Yes, I think what you mean is called parameter expansion.
There should be a section in man bash explaining all sorts of variable expansions and pattern substitutions.
This is by far the most efficient way of parsing because it is a shell built-in functionality and avoids invocation of any external commands to accomplish the task, as one usually does by piping into e.g. grep, sed, tr, awk, perl etc.
e.g.
If the value of an array element of DT's example was stored in ENTRY one could expand all after the hyphen referring to
${ENTRY#*-\ }
likewise to expand all up to the hyphen by referring to
${ENTRY%\ -*}
Just as I was wondering how to make a nice menu to read books with zathura, what timing lol
I wish dmenu had an option to specify a separate output list, so for DT's dmconf script he could just display
"alacritty awesome bash..."
but selecting one of them would return the file path.
Here is my scrappy solution:
grep "$(echo -e "[1] first
[2] second
[3] third" | dmenu | cut -d' ' -f1)"
Try using an associative array. Print and select just the index name, and use the string returned to recall the desired path:
=====
declare -A options
options[bash]=$HOME/.bashrc
options[vim]=$HOME/.vimrc
...etc...
choice=$( printf '%s
' "${!options[@]}" | sort | dmenu .... )
echo "${options[$choice]}"
=====
[Edit: I almost forgot, associative arrays do not *sort* naturally, so it's best to include your own, to be sure you see them in alphabetical (or other desired) order.]
Hey DT, do you use dmenu as your launcher? If so, do you use the path version or do you have a script that's working with .desktop files?
My dmenu doesn't search the .desktop files. Usually this isn't a problem for me....except with appimages.
I watched your wallpaper vid already, this is the first time I've experienced visceral wallpaper envy. /sexy
Hello DT you are the best❤️
Hey, thanks!
Hey DT can you talk about ZFS.
Hey DT, can you make a video on dmenu-flexipatch, dwm-flexipatch, st-flexipatch, etc?
@DistroTube Do you use any lockscreen?I have been through your dotfiles but didn't anything that mentioned slock, xscreensaver etc? Do you mind making a video on it?
I don't use screenlockers much on my on machines. And slock is a simple program. Not much to it. Install it. Run 'slock' to lock the screen. Start typing your password...if the screen is blue and unlocks, you typed your pass word correctly. If the screen turns red, then you entered the wrong password, try again.
@@DistroTube Oh is it? Thanks a lot for the reply. Love your content.
Qutebrowser stores bookmarks in a text file, its easy to pipe in dmenu.
Hey DT, nice content, thanks. Where can I get the wallpaper you're using in this vid?
Check the 'wallpapers' repo on my GitLab. (0213.jpg)
Cool video. Lately I've been thinking about writing a dmenu scripts that launches Steam games without the need to open the Steam library window. Maybe with this tutorial I'll try it soon. I wish there were a way for the script to update itself, but I don't think there's a Steam file I can easily parse to automatically find games installed via Steam.
On another note, do you recommend a good dmenu script that can parse .desktop files but unlike i3-dmenu-desktop works with any window manager like, oh I don't know dwm, the actual tiling window manager made by the same suckless guys as dmenu itself? (what were the i3 guys thinking hard coding i3-dmenu-desktop to integrate with i3)
You might be able to use SteamCMD to create a list of installed games which gets read out by the dmenu script.
@@JopiesausGaming It later occured to me I don't need the executables or paths to the games, just their IDs and names. In the steamapps folder, there isn't one big repository, but rather, a file for each installed game called "appmanifest_(id).acf". They each contain an "appid" field and a "name" field. Any idea how I go about parsing these files one at a time whilst still making sure the names and IDs go together?
@@albynoson If you use "grep '\"appid\"\|\"name\"' $STEAMDIR/appmanifest_*" it should give a workable output, i am however not that competent in string manipulation in bash, so i wouldn't immediately know how to proceed from there.
may I suggest using exit 0 instead of exit 1 when it is not an error?
What's your opinion on rofi run launcher
Bhai maine tere latest video me comment kiya hai dekhle. Aur haa rofi jyada customisable hota hai
Excellent! 👏👏👏
hmm, what do you think of xmonad prompt compared to dmenu?
They are not really the same thing. The Xmonad prompt is part of Xmonad. It is not a standalone program like dmenu that you can incorporate into scripting.
I figured out what DT stands for ... Donald trump
DT real name is donald trump
Derek Taylor is just his fake internet name.
Nop, DT is a strong password.
What would I use to have vim open in the terminal for editing config files? DMEDITOR="What?"
What is it that you put in your Xmonad config to launch these scripts? I've tried creating a few of these and they always launch kind of buggy
I was in dwm in this video. But in xmonad, just create a keybinding like:
("M-p s", spawn "bash /path/to/script")
The above example assumes you use EZ keybindings. The keybinding in this example is a keychord, SUPER+p followed by 's'.
@@DistroTube Much appreciated! I really love EZ Keys. I really wouldn't want to go back to standard keybindings after seeing how easy EZ can be! I'm going to try my dmenu scripts again later like this amd see what happens. Thanks again!
while using sxhkd the script open, but when I press enter on dmenu, it doesn't open the config file
That’s great
I'm gonna have to look at your kill script and use instamenu / imenu with it maybe I'll let you know how it works out
pls let me know
rofi also does the same thing, but dmenu is lighter
Rofi is prettier
@@fabioramatis2373 instamenu is nicer then rofi too and backwards compatible with dmenu
Making dinner.
any scripting guides?
There's the venerable old _Bash Advanced Scripting Guide_ , always a staple, but it's a bit obscure for newbies, and perhaps a bit outdated. The _Bash Guide For Beginners_ may be better for beginners. There are certainly a lot of other good newer ones out there now, findable with just a flick of the DuckDuckGo.
And while they aren't "guides", per se, I highly recommend _Greg's Wiki_ and the _Bash Hacker's Wiki_ . They are both indispensable for learning how to code _properly_ and to avoid common pitfalls. If you do nothing else, read Greg's BashFAQ and Bash Pitfall pages before you dive too deep into your coding.
@@davidh.4944 thank you!
rofi can use dmenu scripts
I use YAD in much the same way
@Learn Linux For simple things it's great... For more advanced stuff I'd use C++ and GTK instead of fighting with pipes and redirection...
Why "exit 1"? That should be a zero imo.
Yep.
DT can I make this on Rofi too rigth?? 🧐
Sure. Where I pipe things into dmenu, just change it to pipe into rofi.
@@DistroTube cool!! thanks
Why do you exit 1 on quit? Is quitting an error?
No, it should be exit 0. Probably just me being lazy and copying exit 1 from another place. Will correct those on the next push.
the best thing is to use fzf with dmenu
@8:20 free julian assange
shame on americans. they leave a solider alone in the battle field. all they care is themselves. democracy fails.
I think learning a POSIX shell is way better then Bash. Why? Simple. That script can be runned on different OS's like BSD, Solaris, AIX, HP-UX, etc., not just on GNU/Linux where bash is the default shell. Beside Bourne Shell code is more elegant the bash. I have scripts which run on FreeBSD, OpenBSD, Solaris, HP-UX and GNU/Linux without the need of modification. They just run.
#!/bin/sh. This is the way! :)
Shell scripting with Dmenu? are you friend of that guy named Luke? 🤣
I have a version of dmenu_run which only shows a subset of the commands, instead of all executables in PATH. For example I never want to launch "true", "false", "dd", or "[" from the desktop (without args) 🙃 instead it just shows things I tend to launch.
One doubt any BEST free resources to learn shell scripting from the entry level to high level in the field of CYBERSEC OR HACKING LINE??? CAN YOU HELP ME ON THIS ???
Why gitlab instead of github?
Can someone explain
edit: got it so github belongs to micro$hit now
recently github was swallowed by microsoft, so the more weary folk migrated into new foss site.
github belongs to microsoft
@Learn Linux I prefer Codeberg
@@wikingagresor So why is kernel development still on github?
@@cam0227 Why not? Before git it used proprietary tool too.
No witty message at the end? I feel like waiting for a post-credits scene on a movie only to be yelled at to get out of the theater...
What's the point of the first script? You're using emacs for editing all config files. Just use named bookmarks that is available in vanilla emacs (use a namespace format like config/bookmarkname to easily find config files). With Helm and other fancy stuff it's trivial to setup a better menu.
Who says you have to use Emacs with this script?
If I have my dm-record (copy of yours) in my ~/.dotfiles/bin how can I call it from dmenu?