As a person raised by GUIs, an extra visual confirmation and an extra prompt is a nice touch. I also like when the system says “Oh, is that a directory? No problem, I’ll give you the usual treatment.” You know what I mean?

alias ls='ls --group-directories-first --color=auto -w 120'
alias ll='exa --group-directories-first -l'
alias la='ll -a'
alias lt='ll --tree'

alias cp='cp --recursive --interactive --verbose --reflink=always'
alias mv='mv --interactive --verbose'

# custom pwd
# - replace $HOME with ~
# - make everything before the last '/' green, and everything after white and bold
# - alias to p
alias pwd="pwd | sed 's:$HOME:~:' | sed -E 's:(.*/)([^/]+):\x1b[32m\1\x1b[0m\x1b[1m\2\x1b[0m:'"
alias p="pwd"

# custom cd.
# - prints the new directory after cd'ing.
cd () { 
    command cd "$@" && p;
}
alias c="cd"
alias '..'='c ..'
alias '...'='c ../..'

# For the '~' alias, we want to use the original cd because printing '~'
# again would be redundant.
alias '~'='command cd'

# custom rm.
# adds a '-r' flag only if there is a single argument and that argument
# is a directory.
# This is because I want the behavior of -I (interactive) to be the default,
# but I also want to have the -r flag available when I need it without being
# prompted for single files.
function rm () { 
  if [ $# -eq 1 ] && [ -d "$1" ]; then
    rm --verbose --interactive=once --recursive "$1";
  else
    rm --verbose --interactive=once "$@";
  fi;
}

# mkdir + cd (created as a function because they run on the current shell,
# which is what we want for cd)
mc () { 
  mkdir -p -- "$1" && cd -P -- "$1";
}
  • nous@programming.dev
    link
    fedilink
    English
    arrow-up
    10
    ·
    2 years ago

    Only when needed. And I don’t really use aliases at all for basic things like that. I don’t like things like cp or mv being verbose most of the time as I don’t have much use for their output and like it when commands are quite unless there is a problem as it makes it easier to see the error lines. I don’t really want to be confirming every file in a recursive rm or cp or mv either - just leads to hitting y automatically and not thinking about it. I do like how zsh warns you about rm * though with the directory you are about to remove though.

    • sebastiancarlos@lemmy.sdf.orgOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      edit-2
      2 years ago

      That’s fair.

      I don’t really want to be confirming every file in a recursive rm or cp or mv either

      Ah but rm will only make you confirm if there are more than 3 files to be removed. And cp and mv only if there’s risk of overwriting. And it’s only one confirm per command, not per file.

      • nous@programming.dev
        link
        fedilink
        English
        arrow-up
        5
        ·
        2 years ago

        You must have a different version of rm then I do:

        $ rm -i a
        rm: remove regular empty file 'a'? y
        $ rm -ir f
        rm: descend into directory 'f'? y
        rm: remove regular empty file 'f/a'? y
        rm: remove regular empty file 'f/b'? y
        rm: remove regular empty file 'f/c'? y
        rm: remove regular empty file 'f/d'? y
        rm: remove regular empty file 'f/e'? y
        rm: remove directory 'f'? y
        

        Never really had an issue with cp or mv overwriting files where I didnt mean to. Possibly because I don’t default recursive on all the time. So they tend to error when accidentality copying folders. And I tend to tab complete paths to see what is in them. I also tend to use rsync for copying large directories rather than just cp when the directories might not be empty to start with.