A while ago I made a tiny function in my ~/.zshrc to download a video from the link in my clipboard. I use this nearly every day to share videos with people without forcing them to watch it on whatever site I found it. What’s a script/alias that you use a lot?

# Download clipboard to tmp with yt-dlp
tmpv() {
  cd /tmp/ && yt-dlp "$(wl-paste)"
}
  • jsomae@lemmy.ml
    link
    fedilink
    arrow-up
    15
    arrow-down
    1
    ·
    27 days ago

    I wrote a script called please. You input please followed by any other command (e.g. please git clone, please wget blahblah) and a robotic voice will say “affirmative,” then the command will run, and when it completes, the robotic voice reads out the exit code (e.g. “completed successfully” or “failed with status 1” etc.)

    This is useful for when you have a command that takes a long time and you want to be alerted when it’s finished. And it’s a gentleman.

      • jsomae@lemmy.ml
        link
        fedilink
        arrow-up
        12
        ·
        27 days ago

        It’s full of random shit I put in as a joke, but here it is. You can use please -s to get lightly roasted when your command fails.

        spoiler
        #!/bin/bash
        # announces success or failure of task
        
        if ! command -v "spd-say" > /dev/null
        then
            echo "spd-say must be installed."
            exit -1
        fi
        
        VOLUME=0
        SERIOUS=1
        FINISH_ONLY=0
        
        if [ $# -ge 2 ]
        then
            if [ $1 == "-i" ]
            then
                # parse volume from command line
                VOLUME=$2
                shift 2
            fi
        fi
        
        spd-say -C
        
        # force stop speech synthesizer
        killall -q speech-dispatcher
        
        # androgynous voice
        # __sayfn="spd-say -i -80 -t female3"
        
        # deep voice
        __sayfn="spd-say -i $VOLUME -r -10 -p -100 -t male3"
        
        function _sayfn {
            $__sayfn "$@" 2>/dev/null
            if [ $? -ne 0 ]
            then
                $__sayfn "$@"
            fi
        }
        
        if [ $# -eq 0 ] || [ "$1" == "--help" ]
        then
            _sayfn "Directive required."
            echo "Usage: please [-i volume] [-s|--serious] [-f|--finish] <command...>"
            echo "       please [-i volume] --say text"
            echo "       -i: volume in range -100 to +100"
            echo "       --serious, -s: no silliness. Serious only. (Just kidding.)"
            echo "       --finish, -f: do not announce start"
            exit -2
        fi
        
        # threading issue
        sleep 0.001
        
        if [ $# -ge 2 ]
        then
            if [ $1 == "--say" ]
            then
                # _sayfn the given line
                shift 1
                _sayfn "$@"
                exit 0
            fi
        
            if [ $1 == "--serious" ] || [ $1 == "-s" ]
            then
                shift 1
                SERIOUS=0
            fi
            
            if [ $1 == "--finish" ] || [ $1 == "-f" ]
            then
                shift 1
                FINISH_ONLY=1
            fi
        fi
        
        i=$(shuf -n1 -e "." "!") # inflection on voice
        
        if [ "$FINISH_ONLY" -eq 0 ]
        then
            if [ "$SERIOUS" -eq 0 ]
            then
                # startup lines (randomized for character)
                _sayfn -r -5 -x ".<break time=\"60ms\"/>$(shuf -n1 -e \
                    'Proceeding As Directed...' \
                    'By your command...' \
                    'By your command...' \
                    'By the power ov greyskaall!' \
                    'By your command,line...' \
                    'As you wish...' \
                    'Stand by.' \
                    'Engaged...' \
                    'Initializing...' \
                    'Activating' \
                    'At once!' \
                    "Post Haste$i" \
                    'it shall be done immediately' \
                    'Very well.' \
                    'It shall be so.' \
                    "righty-o$i" \
                    "Affirmative$i" \
                    "Acknowledged$i" \
                    "Confirmed$i" \
                )"
            else
                _sayfn -r -5 -x ".<break time=\"60ms\"/>Engaged..."
            fi
        
            if [ $? -ne 0 ]
            then
                _sayfn "Speech engine failure."
                echo "Failed to run speech engine. Cancelling task."
                exit -3
            fi
        fi
        
        if ! command -v "$1" > /dev/null
        then
            # _sayfn a little faster because this exits fast.
            _sayfn -r +10 "Unable to comply? invalid command."
            >&2 echo "$1: command not found."
            exit -4
        fi
        
        eval " $@"
        result=$?
        i=$(shuf -n1 -e "," "!" "?") # inflection on voice
        transition=$(shuf -n1 -e "; error" ", with error" "; status")
        taskname=$(shuf -n1 -e "task" "task" "command" "objective" "mission" "procedure" "routine")
        errtext=$(shuf -n1 -e "Task_failed" "Task_failed" "Task_resulted_in_failure" "Procedure_terminated_in_an_error" "An_error_has_occurred" "Auxilliary_system_failure" "system_failure")
        consolation=$(shuf -n1 -e "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "Attention required." "Attention is required!" "Perhaps It was inevitable." "It may or may not be cause for alarm." "Perhaps Machines too, are fallible." "Apologies" "Hopefully nobody else was watching" "shazbot" "maybe next time." "Nobody could have predicted this outcome." "I'm very sorry." "how unfortunate." "remember: don't panic" "oh dear" "Nothing could have been done to prevent this" "Remember: No disasters are fully preventable" "perhaps the only winning move is not to play" "Remember: Failure is our teacher, not our undertaker." "Remember: If at first you don't succeed... try again." "Remember: If at first you don't succeed... try... try again." "But your friends still love you." "Remember: the machine is not your enemy." "Command?" "Awaiting further instructions." "Remember: Logic is the beginning of wisdom... not the end of it." "Remember: When you eliminate the impossible, whatever remains, however improbable, must be the truth." "Keep at it. Victory is within reach." "Remember: The road to success and the road to failure are almost exactly the same." "Now, while this could have gone better, it could also have gone much worse." "Remember: we do this not because it is easy, but because we thought it was going to be easy." "Don't give up." "It has now been... -- zero... -- days, since the last serious failure." "Remember: instead of documenting the problem, you can fix it." "Remember: Artificial intelligence is no match for artificial stupidity." "Standing by," "Remember: with every failure, we get closer to success." "We live in a society." "sometimes failure is not an option; it's a necessity." "Keep at it." "Remember: mistakes are just the first step on the road to failure... <break time=\"250ms\"/> I mean success." "Don't leave. The drones need you... <break time=\"350ms\"/> They look up to you." "Try again, for great justice." "fantastic" "brilliant" "did you really think that would work?")
        
        if [ $SERIOUS -eq 0 ]
        then
            # perhaps some silliness.
            if [ $result -eq 0 ]
            then
                _sayfn --wait "$(shuf -n1 -e \
                   "$taskname complete. All systems nominal" \
                   "$taskname completed successfully." \
                   "$taskname resulted in success." \
                   "$taskname yielded a successful result." \
                   "$taskname concluded successfully." \
                   "$taskname completed as instructed." \
                   "Jobs done." \
                )" &
            else
                if [ $result -eq 1 ]
                then
                    _sayfn -x --wait "$(shuf -n1 -e \
                       "Alert$i Primary system failure. Attention is required." \
                       "Alert$i System failure$i Attention required! $consolation" \
                       "Alert$i $taskname resulted in failure! <break time=\"150ms\"/> $consolation" \
                       "Alert$i $taskname was not completed as intended; $consolation" \
                       "Alert$i An error has occurred! <break time=\"220ms\"/> $consolation" \
                    )" &
                   
                else
                    _sayfn --wait -x "Alert$i $errtext$transition code $result! <break time=\"350ms\"/> $consolation" &
                fi
            fi
        else
            # no silliness here.
            if [ $result -eq 0 ]
            then
                _sayfn --wait "Command complete."
            else
                if [ $result -eq 1 ]
                then
                    _sayfn -x --wait "Alert. Command failed; error code $result!"
                fi
            fi
        fi
        
        exit $result
        
    • data1701d (He/Him)@startrek.website
      link
      fedilink
      English
      arrow-up
      1
      ·
      27 days ago

      I once experimented with something similar, except it was supported to trigger my smart speaker and drop into another part of the house to tell me.

      Honestly, I really need to replace my proprietary smart speaker system with something self-hosted; it’s just I only recently have had the time to start cinsidering.

  • golden_zealot@lemmy.ml
    link
    fedilink
    English
    arrow-up
    11
    ·
    27 days ago

    alias clip='xclip -selection clipboard'

    When you pipe to this, for example ls | clip, it will stick the output of the command ran into the clipboard without needing to manually copy the output.

  • Bo7a@lemmy.ca
    link
    fedilink
    arrow-up
    8
    ·
    27 days ago
    #Create a dir and cd into it
    mkcd() { mkdir -p "$@" && cd "$@"; }
    
    • iliketurtiles@programming.dev
      link
      fedilink
      English
      arrow-up
      2
      ·
      edit-2
      27 days ago

      Here’s a script I use a lot that creates a temporary directory, cds you into it, then cleans up after you exit. Ctrl-D to exit, and it takes you back to the directory you were in before.

      Similar to what another user shared replying to this comment but mine is in bash + does these extra stuff.

      #!/bin/bash
      
      function make_temp_dir {
          # create a temporary directory and cd into it.
          TMP_CURR="$PWD";
          TMP_TMPDIR="$(mktemp -d)";
          cd "$TMP_TMPDIR";
      }
      
      function del_temp_dir {
          # delete the temporary directory once done using it.
          cd "$TMP_CURR";
          rm -r "$TMP_TMPDIR";
      }
      
      function temp {
          # create an empty temp directory and cd into it. Ctr-D to exit, which will
          # delete the temp directory
          make_temp_dir;
          bash -i;
          del_temp_dir;
      }
      
      temp
      
  • djblw@lemmy.world
    link
    fedilink
    arrow-up
    6
    ·
    27 days ago

    This tmux wrapper is remarkably convenient:

    Usage:

    # Usage: t [session-name]
    #
    # With no arguments:
    #   Lists existing tmux sessions, or prints "[No sessions]" if none exist.
    #
    # With a session name:
    #   Attempts to attach to the named tmux session.
    #   If the session does not exist, creates a new session with that name.
    #
    # Examples:
    #   t            # Lists all tmux sessions
    #   t dev        # Attaches to "dev" session or creates it if it doesn't exist
    
    function t {
    	if [[ -z $1 ]]; then
    		tmux ls 2> /dev/null || echo "[No sessions]"
    	else
    		tmux attach -t $@ 2> /dev/null
    		if [[ $? -ne 0 ]]; then
    			tmux new -s $@
    		fi
    	fi
    }
    
  • Daniel Quinn@lemmy.ca
    link
    fedilink
    English
    arrow-up
    4
    ·
    27 days ago

    I have a few interesting ones.

    Download a video:

    alias yt="yt-dlp -o '%(title)s-%(id)s.%(ext)s' "
    

    Execute the previous command as root:

    alias please='sudo $(fc -n -l -1)'
    

    Delete all the Docker things. I do this surprisingly often:

    alias docker-nuke="docker system prune --all --volumes --force"
    

    This is a handy one for detecting a hard link

    function is-hardlink {
      count=$(stat -c %h -- "${1}")
      if [ "${count}" -gt 1 ]; then
        echo "Yes.  There are ${count} links to this file."
      else
        echo "Nope.  This file is unique."
      fi
    }
    

    I run this one pretty much every day. Regardless of the distro I’m using, it Updates All The Things:

    function up {
      if [[ $(command -v yay) ]]; then
        yay -Syu --noconfirm
        yay -Yc --noconfirm
      elif [[ $(command -v apt) ]]; then
        sudo apt update
        sudo apt upgrade -y
        sudo apt autoremove -y
      fi
      flatpak update --assumeyes
      flatpak remove --unused --assumeyes
    }
    

    I maintain an aliases file in GitLab with all the stuff I have in my environment if anyone is curious.

    • golden_zealot@lemmy.ml
      link
      fedilink
      English
      arrow-up
      9
      ·
      27 days ago

      Execute the previous command as root

      Fun fact if you are using bash, !! will evaluate to the previous command, so if you miss sudo on some long command, you can also just do sudo !!.

      • jwt@programming.dev
        link
        fedilink
        arrow-up
        4
        ·
        27 days ago

        With the added benefit of it looking like you’re yelling at your prompt in order to get it to use sudo.

  • harsh3466@lemmy.ml
    link
    fedilink
    arrow-up
    4
    ·
    edit-2
    27 days ago
    alias gl='git log'
    alias server-name-here='ssh server-name-here'
    

    I have a bunch of the server aliases. I use those and gl the most.

      • harsh3466@lemmy.ml
        link
        fedilink
        arrow-up
        3
        ·
        27 days ago

        I do have the servers in ~/.ssh/config. I just got tired of typing ssh server and wanted the be able to just type server to ssh in.

        • jwt@programming.dev
          link
          fedilink
          arrow-up
          5
          ·
          edit-2
          27 days ago

          We almost have the same setup then, I use

          ssh_hostnames=$(grep "^Host " ~/.ssh/config | awk '!/*/ {print $2}')
          for host in $ssh_hostnames
          do
           alias $host="ssh $host"
          done
          

          in my .bash_aliases to parse the ~/.ssh/config file and cut off the 'ssh ’ part automatically for every Host I have in there.

          • harsh3466@lemmy.ml
            link
            fedilink
            arrow-up
            3
            ·
            27 days ago

            That is a lovely setup. I’m gonna drop that into my bash_aliases so much more elegant than me adding the alias for each server.

  • qpsLCV5@lemmy.ml
    link
    fedilink
    arrow-up
    3
    ·
    edit-2
    27 days ago

    it’s somewhat vibe coded but the one i probably use the most is this one to swap between speakers and headset. the device name to look for is just put directly in there, it’d take some adjustment to run it on different machines. this is in my .bashrc:

    # switch sinks
    toggle_audio() {
      # Find headset sink ID dynamically
      headset_id=$(pactl list sinks short | grep "Plantronics" | awk '{print $1}')
      
      # Find speakers sink ID dynamically
      speakers_id=$(pactl list sinks short | grep "pci-0000_05_00.6" | awk '{print $1}')
      
      # Get current default sink
      current_sink=$(pactl get-default-sink)
      
      # Get current sink ID
      current_id=$(pactl list sinks short | grep "$current_sink" | awk '{print $1}')
      
      # Toggle between the two
      if [ "$current_id" = "$headset_id" ]; then
        pactl set-default-sink "$speakers_id"
        echo "Switched to speakers (Sink $speakers_id)"
      else
        pactl set-default-sink "$headset_id"
        echo "Switched to headset (Sink $headset_id)"
      fi
    }
    

    generally i try not to use too many custom things because for work i regularly work on all kinds of different servers and i’ve just been too lazy to set up some solution to keep it all in sync. someday…

  • INeedMana@lemmy.world
    link
    fedilink
    arrow-up
    3
    ·
    27 days ago
    $ which diffuc
    diffuc: aliased to diff -uw --color=always
    
    $ which grepnir
    grepnir: aliased to grep -niIr
    
    $ cat `which ts`
    #!/bin/bash
    
    if [ "$#" -lt 1 ]; then
                    tmux list-sessions
                    exit
    fi
    
    if ! tmux attach -t "$1"
    then
                    tmux new-session -s "$1"
    fi
    
  • IronKrill@lemmy.ca
    link
    fedilink
    arrow-up
    3
    ·
    26 days ago

    on most of my systems I get tired of constantly lsing after a cd so I combine them:

    cd(){
        cd $1 && ls
    }
    

    (excuse if this doesn’t work, I am writing this from memory)

    I also wrote a function to access docker commands quicker on my Truenas system. If passed nothing, it enters the docker jailmaker system, else it passes the command to docker running inside the system.

    docker () {
            if [[ "$1" == "" ]]; then
                    jlmkr shell docker
                    return
            else
                    sudo systemd-run --pipe --machine docker docker "$@"
                    return
            fi
    }
    

    I have a few similar shortcuts for programs inside jailmaker and long directories that I got sick of typing out.

  • vortexal@lemmy.ml
    link
    fedilink
    arrow-up
    3
    ·
    27 days ago

    I’ve only used aliases twice so far. The first was to replace yt-dlp with a newer version because the version that comes pre-installed in Linux Mint is too outdated to download videos from YouTube. The second was because I needed something called “Nuget”. I don’t remember exactly what Nuget is but I think it was a dependency for some application I tried several months ago.

    alias yt-dlp='/home/j/yt-dlp/yt-dlp'
    alias nuget="mono /usr/local/bin/nuget.exe"
    
    • vithigar@lemmy.ca
      link
      fedilink
      arrow-up
      4
      ·
      27 days ago

      Nuget is a the .NET package manager. Like npm or pip, but for .NET projects.

      If you needed it for a published application that strikes me as fairly strange.

      • vortexal@lemmy.ml
        link
        fedilink
        arrow-up
        4
        ·
        edit-2
        27 days ago

        I looked through my bash history and it looks like I needed it to build an Xbox eeprom editor for Xemu. Xemu doesn’t (or at least didn’t, I haven’t used newer versions yet) have a built in eeprom editor and editing the Xbox eeprom is required for enabling both wide screen and higher resolutions for the games that support them natively.

        I just looked at Xemu’s documentation, and it looks like they’ve added a link to an online eeprom editor, so the editor I used (which they do still link to) is no longer required.

  • SuperiorOne@lemmy.ml
    link
    fedilink
    English
    arrow-up
    3
    ·
    27 days ago

    jmpd(jump directory): fuzzy finds and opens directory with fzf

    # fish shell
    function jmpd
        set _selection $(fzf --walker=dir);
        if test -n "$_selection"
            cd "$_selection";
        end
    end
    
  • owsei@programming.dev
    link
    fedilink
    arrow-up
    3
    ·
    edit-2
    26 days ago

    I made this one to find binaries in NixOs and other systems

    get_bin_path() {
            paths=${2:-$PATH}
            for dr in $(echo $paths | tr ':' '\n') ; do
                    if [ -f "$dr/$1" ] ; then
                            echo "$dr/$1"
                            return 0
                    fi
            done
            return 1
    }
    

    Then I made this one to, if I have a shell o opened inside neovim it will tell the neovim process running the shell to open a file on it, instead of starting a new process

    _nvim_con() {
            abs_path=$(readlink --canonicalize "$@" | sed s'| |\\ |'g)
            $(get_bin_path nvim) --server $NVIM --remote-send "<ESC>:edit $abs_path<CR>"
            exit
    }
    
    # start host and open file
    _nvim_srv() {
            $(get_bin_path nvim) --listen $HOME/.cache/nvim/$$-server.pipe $@
    }
    
    if [ -n "$NVIM" ] ; then
            export EDITOR="_nvim_con"
    else
            export EDITOR="_nvim_srv"
    fi
    

    Lastly this bit: which if it detects a file and a line number split by a : it will open the file and jump to the line

    _open() {
            path_parts=$(readlink --canonicalize "$@" | sed s'| |\\ |'g | sed 's/:/\t/' )
            file=$(echo "$path_parts" | awk ' { print $1 }' )
            line=$(echo "$path_parts" | awk ' { print $2 }' )
    
            if [ -n "$line" ] ; then
                    # has line number
                    if [ -n "$NVIM" ] ; then
                            $(get_bin_path nvim) --server $NVIM --remote-send "<ESC>:edit $file<CR>:+$line<CR>"
                            exit
                    else
                            $(get_bin_path nvim) --listen $HOME/.cache/nvim/$$-server.pipe $file "+:$line"
                    fi
            else
                    $EDITOR $file
            fi
    }
    
    alias nvim="_open"
    

    all of my bash config is here

  • utopiah@lemmy.ml
    link
    fedilink
    arrow-up
    2
    ·
    edit-2
    27 days ago

    To answer your question realistically I did history | sed "s/.* //" | sort | uniq -c | sort -n

    which returned as first non standard command lr which from my grep lr ~/.bashrc is alias lr="ls -lrth"