Solve Problems With Shell Scripting And Dmenu

Поделиться
HTML-код
  • Опубликовано: 25 ноя 2024

Комментарии • 118

  • @JinxTheBorderCollie
    @JinxTheBorderCollie 3 года назад +24

    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.

  • @TheLinuxCast
    @TheLinuxCast 3 года назад +11

    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.

  • @coffeedude
    @coffeedude 3 года назад +7

    That second script is actually a great idea!! I'm going to write a version of it myself to practice :)

  • @smeqwack7337
    @smeqwack7337 3 года назад +6

    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

    • @zvezdan956
      @zvezdan956 3 года назад

      what about system updates?

    • @Mathias-bz2kr
      @Mathias-bz2kr 3 года назад

      @@zvezdan956 i just use "alias uu="sudo apt update && sudo apt upgrade ""

    • @smeqwack7337
      @smeqwack7337 3 года назад

      @@zvezdan956 what's a system update?

  • @GodIsTheReason
    @GodIsTheReason 3 года назад +3

    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.

    • @DistroTube
      @DistroTube  3 года назад +1

      I've been playing with a similar idea. A dmenu script that controls the deadbeef player, gets tracks info, or loads playlists.

    • @rafinhodivino5877
      @rafinhodivino5877 3 года назад +1

      pls share the code

  • @redgeoblaze3752
    @redgeoblaze3752 2 года назад +1

    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.

  • @primorock8141
    @primorock8141 3 года назад +2

    Played around with dmenu yesterday and there are so many possibilities; exaclty what I'd expect from suckless

  • @williammckeever4790
    @williammckeever4790 Месяц назад

    I know this is an older vid but I just discovered dmenu and this has helped me immensely. Thanks for sharing.

  • @ricardopinho630
    @ricardopinho630 3 года назад +2

    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.

  • @ipws13
    @ipws13 3 года назад +3

    you save my time, already using your scripts, and edit it a little for my machine

  • @zebbleganubi723
    @zebbleganubi723 3 года назад +1

    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

  • @adriancostin9138
    @adriancostin9138 3 года назад +1

    good stuff. going to start writing scripts for my dmenu. thank you for showcasing this

  • @skye1596
    @skye1596 3 года назад +25

    Is that you in your wallpaper?

  • @toastybowl
    @toastybowl 2 года назад +1

    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

  • @SubhadityaMukherjee
    @SubhadityaMukherjee 3 года назад +1

    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

  • @MarcelRobitaille
    @MarcelRobitaille 3 года назад +1

    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.

  • @temudjin1155
    @temudjin1155 3 года назад +3

    Love this channel. Simple. Straightforward.

  • @starrwulfe
    @starrwulfe 3 года назад +5

    I’m so about to fork one of these scripts and make a crypto checker script now.

  • @Adam-yf2ux
    @Adam-yf2ux 3 года назад +1

    Awesome ! Thanks for this video. I will play around with dmenu :)

  • @kanashimi6209
    @kanashimi6209 3 года назад +2

    Very useful, thank you Derek. Keep it coming!

  • @leviticus8930
    @leviticus8930 3 года назад +14

    Dmenu has informed us that you have not extended your car's warranty

  • @Ohmygodzilla
    @Ohmygodzilla 3 года назад +2

    Well done, will try it out later! Thank you very much for this information

  • @blank001
    @blank001 3 года назад +2

    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)

  • @StrikerEureka85
    @StrikerEureka85 3 года назад +20

    Dmenu: "do you have time to talk about our lord and savior, DT?"

  • @sumnerd69
    @sumnerd69 3 года назад

    Nice seeing this type of videos again

  • @artificialcode
    @artificialcode 2 года назад +1

    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

  • @marioschroers7318
    @marioschroers7318 3 года назад +4

    This is brilliant!

  • @sunriseleatherco.6587
    @sunriseleatherco.6587 3 года назад +1

    That is some great stuff right there!

  • @shubhamdwivedi7766
    @shubhamdwivedi7766 3 года назад

    I automate tasks with shell scripting nice handy feature 😉

  • @albynoson
    @albynoson 3 года назад

    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.

  • @othernicksweretaken
    @othernicksweretaken 3 года назад +2

    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.

    • @othernicksweretaken
      @othernicksweretaken 3 года назад

      @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.

    • @Mach7RadioIntercepts
      @Mach7RadioIntercepts 3 года назад

      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.

    • @othernicksweretaken
      @othernicksweretaken 3 года назад +1

      @@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%\ -*}

  • @mesientomuchomejor2027
    @mesientomuchomejor2027 3 года назад

    Just as I was wondering how to make a nice menu to read books with zathura, what timing lol

  • @stumbling
    @stumbling 3 года назад

    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)"

    • @davidh.4944
      @davidh.4944 3 года назад +1

      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.]

  • @piotrzieniewicz9045
    @piotrzieniewicz9045 3 года назад +3

    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?

    • @DistroTube
      @DistroTube  3 года назад +1

      My dmenu doesn't search the .desktop files. Usually this isn't a problem for me....except with appimages.

  • @n0kodoko143
    @n0kodoko143 3 года назад +1

    I watched your wallpaper vid already, this is the first time I've experienced visceral wallpaper envy. /sexy

  • @LordOfWizardurl
    @LordOfWizardurl 3 года назад +1

    Hello DT you are the best❤️

  • @anzar4142
    @anzar4142 3 года назад +3

    Hey DT can you talk about ZFS.

  • @kartikeykushwaha3622
    @kartikeykushwaha3622 3 года назад +1

    Hey DT, can you make a video on dmenu-flexipatch, dwm-flexipatch, st-flexipatch, etc?

  • @myownbasement
    @myownbasement 3 года назад +1

    @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?

    • @DistroTube
      @DistroTube  3 года назад +1

      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.

    • @myownbasement
      @myownbasement 3 года назад

      @@DistroTube Oh is it? Thanks a lot for the reply. Love your content.

  • @sebastienhebert6457
    @sebastienhebert6457 3 года назад +1

    Qutebrowser stores bookmarks in a text file, its easy to pipe in dmenu.

  • @georgesomeone7725
    @georgesomeone7725 3 года назад +1

    Hey DT, nice content, thanks. Where can I get the wallpaper you're using in this vid?

    • @DistroTube
      @DistroTube  3 года назад

      Check the 'wallpapers' repo on my GitLab. (0213.jpg)

  • @albynoson
    @albynoson 3 года назад +1

    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
      @JopiesausGaming 3 года назад

      You might be able to use SteamCMD to create a list of installed games which gets read out by the dmenu script.

    • @albynoson
      @albynoson 3 года назад

      @@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?

    • @JopiesausGaming
      @JopiesausGaming 3 года назад

      @@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.

  • @marcello4258
    @marcello4258 3 года назад +1

    may I suggest using exit 0 instead of exit 1 when it is not an error?

  • @anantgupta7916
    @anantgupta7916 3 года назад +2

    What's your opinion on rofi run launcher

    • @vaibhavppandey
      @vaibhavppandey 3 года назад

      Bhai maine tere latest video me comment kiya hai dekhle. Aur haa rofi jyada customisable hota hai

  • @kevinwood5048
    @kevinwood5048 3 года назад

    Excellent! 👏👏👏

  • @drishalballaney
    @drishalballaney 3 года назад +1

    hmm, what do you think of xmonad prompt compared to dmenu?

    • @DistroTube
      @DistroTube  3 года назад +2

      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.

  • @gabemurray5365
    @gabemurray5365 3 года назад +3

    I figured out what DT stands for ... Donald trump
    DT real name is donald trump

    • @Gabifuertes
      @Gabifuertes 3 года назад

      Derek Taylor is just his fake internet name.

    • @tonythai5991
      @tonythai5991 2 года назад

      Nop, DT is a strong password.

  • @joecool169
    @joecool169 3 года назад

    What would I use to have vim open in the terminal for editing config files? DMEDITOR="What?"

  • @andrewcarpin2850
    @andrewcarpin2850 3 года назад +1

    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

    • @DistroTube
      @DistroTube  3 года назад +1

      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'.

    • @andrewcarpin2850
      @andrewcarpin2850 3 года назад

      @@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!

  • @nathbarbosa83
    @nathbarbosa83 3 года назад

    while using sxhkd the script open, but when I press enter on dmenu, it doesn't open the config file

  • @ahmedabd2259
    @ahmedabd2259 3 года назад +1

    That’s great

  • @TrueWordsOfEternity
    @TrueWordsOfEternity 3 года назад +1

    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

  • @areg7182
    @areg7182 3 года назад +2

    rofi also does the same thing, but dmenu is lighter

    • @fabioramatis2373
      @fabioramatis2373 3 года назад +1

      Rofi is prettier

    • @TrueWordsOfEternity
      @TrueWordsOfEternity 3 года назад

      @@fabioramatis2373 instamenu is nicer then rofi too and backwards compatible with dmenu

  • @daviddupoise6443
    @daviddupoise6443 3 года назад +8

    Making dinner.

  • @raynei
    @raynei 3 года назад +1

    any scripting guides?

    • @davidh.4944
      @davidh.4944 3 года назад +1

      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.

    • @raynei
      @raynei 3 года назад

      @@davidh.4944 thank you!

  • @gradientO
    @gradientO 3 года назад +2

    rofi can use dmenu scripts

  • @svenkarlsen2702
    @svenkarlsen2702 3 года назад +1

    I use YAD in much the same way

    • @svenkarlsen2702
      @svenkarlsen2702 3 года назад

      @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...

  • @vorrnth8734
    @vorrnth8734 3 года назад +3

    Why "exit 1"? That should be a zero imo.

  • @darkarie
    @darkarie 3 года назад +1

    DT can I make this on Rofi too rigth?? 🧐

    • @DistroTube
      @DistroTube  3 года назад +4

      Sure. Where I pipe things into dmenu, just change it to pipe into rofi.

    • @darkarie
      @darkarie 3 года назад

      @@DistroTube cool!! thanks

  • @Johan.Molenberghs
    @Johan.Molenberghs 3 года назад

    Why do you exit 1 on quit? Is quitting an error?

    • @DistroTube
      @DistroTube  3 года назад +2

      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.

  • @librereader
    @librereader 3 года назад

    the best thing is to use fzf with dmenu

  • @brknglss7741
    @brknglss7741 3 года назад +2

    @8:20 free julian assange

    • @karthickb1973
      @karthickb1973 3 года назад

      shame on americans. they leave a solider alone in the battle field. all they care is themselves. democracy fails.

  • @falx966
    @falx966 3 года назад

    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! :)

  • @v1ntee
    @v1ntee 3 года назад

    Shell scripting with Dmenu? are you friend of that guy named Luke? 🤣

  • @charlessmith5465
    @charlessmith5465 3 года назад

    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.

  • @ronaldomessi6161
    @ronaldomessi6161 3 года назад

    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 ???

  • @cam0227
    @cam0227 3 года назад +2

    Why gitlab instead of github?
    Can someone explain
    edit: got it so github belongs to micro$hit now

    • @wikingagresor
      @wikingagresor 3 года назад +2

      recently github was swallowed by microsoft, so the more weary folk migrated into new foss site.

    • @brknglss7741
      @brknglss7741 3 года назад +1

      github belongs to microsoft

    • @nykal1510
      @nykal1510 3 года назад

      @Learn Linux I prefer Codeberg

    • @cam0227
      @cam0227 3 года назад

      @@wikingagresor So why is kernel development still on github?

    • @vorrnth8734
      @vorrnth8734 3 года назад

      @@cam0227 Why not? Before git it used proprietary tool too.

  • @OctaviusPelagius
    @OctaviusPelagius 3 года назад

    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...

  • @randomuser5237
    @randomuser5237 3 года назад

    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.

    • @DistroTube
      @DistroTube  3 года назад

      Who says you have to use Emacs with this script?

  •  2 года назад

    If I have my dm-record (copy of yours) in my ~/.dotfiles/bin how can I call it from dmenu?