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)"
}
  • kibiz0r@midwest.social
    link
    fedilink
    English
    arrow-up
    9
    ·
    edit-2
    2 hours ago

    I often want to know the status code of a curl request, but I don’t want that extra information to mess with the response body that it prints to stdout.

    What to do?

    Render an image instead, of course!

    curlcat takes the same params as curl, but it uses iTerm2’s imgcat tool to draw an “HTTP Cat” of the status code.

    It even sends the image to stderr instead of stdout, so you can still pipe curlcat to jq or something.

    #!/usr/bin/env zsh
    
    stdoutfile=$( mktemp )
    curl -sw "\n%{http_code}" $@ > $stdoutfile
    exitcode=$?
    
    if [[ $exitcode == 0 ]]; then
      statuscode=$( cat $stdoutfile | tail -1 )
    
      if [[ ! -f $HOME/.httpcat$statuscode ]]; then
        curl -so $HOME/.httpcat$statuscode https://http.cat/$statuscode
      fi
    
      imgcat $HOME/.httpcat$statuscode 1>&2
    fi
    
    cat $stdoutfile | ghead -n -1
    
    exit $exitcode
    
  • Daniel Quinn@lemmy.ca
    link
    fedilink
    English
    arrow-up
    2
    ·
    1 hour 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.

  • XXIC3CXSTL3Z@lemmy.ml
    link
    fedilink
    arrow-up
    1
    ·
    55 minutes ago

    Ooooou I got a couple :3

    This one is just a basic mirror fixing thing cuz sometimes I go a while without updating pacman:

    alias fixpkg='rate-mirrors --protocol https arch | sudo tee /etc/pacman.d/mirrorlist && sudo pacman -Syy'
    

    This function I made to create virtual audio sinks so I can route audios via qpw and play earrape into discord calls if I want XD

    create_vsink() {
        local sink_name=${1:-vsink}  # Default sink name is 'vsink' if no input is provided
        local description=${2:-"Virtual Sink"}  # Default description
        pactl load-module module-null-sink sink_name="$sink_name" sink_properties=device.des>
        echo "Virtual sink '$sink_name' created with description '$description'."
    }
    

    Simple parser function I made that makes a whole repo using my git key so it’s not just locally created I kinda forgot why I made it tbh:

    git_clone() {
        local url="${1#https://}"  # Remove "https://" if present
        git clone "https://$git_key@$url"
    }
    

    Awesome mpv function I made that allows for real time pitch+speed shifting via hotkeys and is flexible with extra parameters and shit:

    mpv_pitch() {
        if [[ -z "$1" ]]; then
            echo "Usage: mpv_pitch <file> [mpv-options]"
            return 1
        fi
        local file="$1"
        shift
        mpv --input-conf=/dev/stdin "$file" "$@" <<EOF
    SHIFT+RIGHT add audio-pitch-correction 0; add pitch 0.01; add speed 0.01  # Decrease pit>
    SHIFT+LEFT add audio-pitch-correction 0; add pitch -0.01; add speed -0.01 # Increase pit>
    EOF
    }
    

    Automatic audio router for firefox audio streams that uses the aforementioned create_sink function to make a specific sink that I can use carla on to mix and make cool shit out of haha

    firefox_crush() {
        create_vsink CrunchSink "CrunchSink" 
        firefox --name firefox-vc &
    
        (while true; do
            SINK_INPUT_ID=$(pactl list sink-inputs short | grep "firefox" | awk '{print $1}')
            if [[ -n "$SINK_INPUT_ID" ]]; then
                pactl move-sink-input "$SINK_INPUT_ID" CrunchSink
                break
            fi
            sleep 0.25
        done) &
    }
    
  • Ritsu4Life@lemmy.world
    link
    fedilink
    arrow-up
    2
    ·
    2 hours ago

    I have started my daily drawing journey which i still am bad at it. To create a new .kra files files every day I use this

    #/usr/bin/bash
    
    days=$(</var/home/monika/scripts/days)
    echo "$days"
    
    file_name=/var/home/monika/Pictures/Art/day$days.kra
    
    if [ -f $file_name ]; then
      echo file is present
    else
      if [[ $days%7 -eq 0 ]]; then
        echo "Week completed"
      fi
      cp "/var/home/monika/scripts/duplicate.kra" $file_name
      flatpak run org.kde.krita $file_name
      echo $(($days + 1)) >/var/home/monika/scripts/days
    fi
    
    
  • qpsLCV5@lemmy.ml
    link
    fedilink
    arrow-up
    3
    ·
    edit-2
    2 hours 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…

  • balsoft@lemmy.ml
    link
    fedilink
    arrow-up
    1
    ·
    1 hour ago

    I’ve stolen a bunch of Git aliases from somewhere (I don’t remember where), here are the ones I ended up using the most:

    g=git
    ga='git add'
    gau='git add --update'
    gcfu='git commit --fixup'
    gc='git commit --verbose'
    'gc!'='git commit --verbose --amend'
    gcmsg='git commit --message'
    gca='git com
    gd='git diff'
    gf='git fetch'
    gl='git pull'
    gst='git status'
    gstall='git stash --all'
    gstaa='git stash apply'
    gp='git push'
    'gpf!'='git push --force-with-lease'
    grb='git rebase'
    grba='git rebase --abort'
    grbc='git rebase --continue'
    

    I also often use

    ls='eza'
    md='mkdir -p'
    mcd() { mkdir -p "$1" && cd "$1" }
    

    And finally some Nix things:

    b='nix build'
    bf='nix build -f'
    bb=nix build -f .'
    s='nix shell'
    sf='nix shell -f'
    snp='nix shell np#'
    d='nix develop'
    df='nix develop -f'
    
  • Nugscree@lemmy.world
    link
    fedilink
    arrow-up
    1
    ·
    edit-2
    1 hour ago

    Because using docker can sometimes cause ownership issues if not properly configured in your docker-compose.yml, I just added an alias to ~/.zshrc to rectify that.

    -edit- Only run this script in your user owned directories, e.g. anything from ~/ (or /home/<your_username>) you might otherwise cause ownership issues for your system.

    ## Set ownership of files/folders recursively to current user
    alias iownyou="sudo chown -R $USER:$GROUP"
    
  • monovergent 🛠️@lemmy.ml
    link
    fedilink
    arrow-up
    1
    ·
    2 hours ago

    My desktop text editor has an autosave feature, but it only works after you’ve manually saved the file. All I wanted is something like the notes app on my phone, where I can jot down random thoughts without worrying about naming a new file. So here’s the script behind my text editor shortcut, which creates a new text file in ~/.drafts, names it with the current date, adds a suffix if the file already exists, and finally opens the editor:

    #!/bin/bash
    
    name=/home/defacto/.drafts/"`date +"%Y%m%d"`"_text
    if [[ -e "$name" || -L "$name" ]] ; then
        i=1
        while [[ -e "$name"_$i || -L "$name"_$i ]] ; do
            let i++
        done
        name="$name"_$i
    fi
    touch -- "$name"
    pluma "$name" #replace pluma with your editor of choice
    
  • gonzo-rand19@moist.catsweat.com
    link
    fedilink
    arrow-up
    10
    ·
    5 hours ago

    Here are probably the most useful ones. I prefer for rm to be interactive so I don’t accidentally delete something important and for mkdir to create a parent directory if necessary.

    alias rm='rm -i'
    alias mkdir='mkdir -p'
    alias podup='podman-compose down && podman-compose pull && podman-compose up -d'
    

    This extract function (which I didn’t make myself, I got it from when I was using nakeDeb) has been pretty useful too.

    function extract()
    {
         if [ -f $1 ] ; then
             case $1 in
                 *.tar.bz2)   tar xvjf $1     ;;
                 *.tar.gz)    tar xvzf $1     ;;
                 *.bz2)       bunzip2 $1      ;;
                 *.rar)       unrar x $1      ;;
                 *.gz)        gunzip $1       ;;
                 *.tar)       tar xvf $1      ;;
                 *.tbz2)      tar xvjf $1     ;;
                 *.tgz)       tar xvzf $1     ;;
                 *.zip)       unzip $1        ;;
                 *.Z)         uncompress $1   ;;
                 *.7z)        7z x $1         ;;
                 *.xz)        unxz $1         ;;
                 *)           echo "'$1' cannot be extracted via >extract<" ;;
             esac
         else
             echo "'$1' is not a valid file"
         fi
    }
    
  • utopiah@lemmy.ml
    link
    fedilink
    arrow-up
    2
    ·
    edit-2
    3 hours 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"

    • thingsiplay@beehaw.org
      link
      fedilink
      arrow-up
      3
      ·
      3 hours ago

      A few days ago I posted a one-liner to do the same thing too. It will resolve aliases from your history and expand program paths to its fullpath. I thought you might be interested: https://beehaw.org/post/20584479

      type -P $(awk '{print $1}' ~/.bash_history | sort -u) | sort
      
  • odc@lemmy.sdf.org
    link
    fedilink
    English
    arrow-up
    4
    ·
    4 hours ago

    I’ll share 3:

    alias chx='chmod +x'
    alias rr='rm -rf'
    alias shrug="echo '¯\_(ツ)_/¯'"
    
    • thingsiplay@beehaw.org
      link
      fedilink
      arrow-up
      1
      ·
      3 hours ago

      i also have the chmod one, but mine is named just x:

      alias x='chmod +x'
      

      I also have the yt-dlp "$(wl-paste)" one, but its build around a custom script. So sharing it here makes no sense. Its funny how often we do same thing in different ways (extracting or creating archives in example). Often aliases get development into function and then they turn into scripts. For some of the more simple aliases, here a selection:

      alias f='fastfetch -l none'
      alias vim='nvim'
      alias baloo='balooctl6'
      
  • WQMan@lemmy.ml
    link
    fedilink
    arrow-up
    1
    ·
    3 hours ago

    I replaced rm with trash-put, just in case I realize I need some files that I removed down the line.

    alias rm='trash-put'
    

    Official author don’t recommend it due to different semantics. But honestly for my own personal use case its fine for me.


    Also I like to alias xclip:

    alias clippy='xclip -selection clipboard'
    
    # cat things.txt | clippy
    
    • IsoKiero@sopuli.xyz
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 hour ago

      Official author don’t recommend it due to different semantics. But honestly for my own personal use case its fine for me.

      I don’t recommend that either. If you get used to that ‘rm’ doesn’t actually remove files and then your alias is missing for whatever reason it’ll bite you in the rear at some point. And obviously the same hazard goes with a ton of other commands too.

    • thingsiplay@beehaw.org
      link
      fedilink
      arrow-up
      4
      ·
      3 hours ago

      Little tip: In case you need to use rm directly, even with the alias in effect, you can put a backslah in front of the command to use its original meaning: \rm filename

        • thingsiplay@beehaw.org
          link
          fedilink
          arrow-up
          2
          ·
          edit-2
          11 minutes ago

          I’m not sure what you mean with the question. If you have any alias like alias rm='ls -l in your .bashrc in example, then you cannot use the original command rm anymore, as it is aliased to something else. I’m speaking about the terminal, when you enter the command. However, if you put a backslash in front of it like \rm in the terminal, then the alias for it is ignored and the original command is executed instead.

          Edit: Made a more clear alias example.

          • XXIC3CXSTL3Z@lemmy.ml
            link
            fedilink
            arrow-up
            2
            ·
            edit-2
            2 minutes ago

            Oh ty ty that answers my question! I am fairly new to being a poweruser on linux so I may have worded that wrong XD