January 22, 2022

2022 Dotfiles Highlights

is_mac Am I on a Mac?

When you’re constantly switching between linux and MacOS it can be extremely beneficial to have a way to conditionally set shell preferences depending on your environment. I’ll stick this snippet at the top of my .zshrc file and use it in my dotfiles for conditional aliases or setups.

The setup is simple. You define a variable, AM_MAC and assign it to 0. Create a function that checks for the operating system type of darwin and if it matches, set AM_MAC to 1. Be sure to call the function after defining it.

AM_MAC=0

is_mac() {
  if [[ $OSTYPE == 'darwin'* ]]; then
        AM_MAC=1
  fi
}

is_mac

Here’s an example of conditionally setting up something homebrew specific on MacOS.

if (( AM_MAC > 0)); then
  source $(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh
fi

Here’s how you can manage linux only aliases

linux_aliases() {
    # Custom Apt
    alias app="sudo apt-get"
    alias app-remove="sudo apt-get remove"
    alias app-install="sudo apt-get install"
    alias app-edit="sudo envedit /etc/apt/sources.list"
    alias app-search="apt-cache --names-only search"
    alias app-search-all="apt-cache search"
    alias app-update="sudo apt-get update && sudo apt-get upgrade"
    alias app-info="apt-cache showpkg"
}

# Only Alias apt-get if we are on linux
if ! [ AM_MAC==1 ]; then; linux_aliases; fi

repos <project> Auto CD Into Repos

If you’re like me, you usually have a fairly organized setup where you stick most/all of your projects in one folder. I’ve set up a function to cd into my project director and either list all the files, or if you pass an additional argument it will cd into that directory. So instead of cd ~/code/repos/<project> I just type repos <project>. Saving me literal seconds each day.

repos() {
    # Navigate to repos director and open target directory is specified
    if [ -z "$1" ]; then
        cd ~/code/repos && ls -la
        return
    fi

    cd ~/code/repos/$1
}

mkcd - Make and Change Directories

Need I say more?

# Make and CD into directory
function mkcd {
  if [ ! -n "$1" ]; then
    echo "Enter a directory name"
  elif [ -d $1 ]; then
    echo "\`$1' already exists"
  else
    mkdir $1 && cd $1
  fi
}

lfcd - Visually Change Directories

This one requires that you have the lf file manager installed. Once that’s installed this alias allows you to navigate your file system using lf and wherever you quit you will change directories into.

# Use lf to switch directories and bind it to ctrl-o
lfcd () {
    tmp="$(mktemp)"
    lf -last-dir-path="$tmp" "$@"
    if [ -f "$tmp" ]; then
        dir="$(cat "$tmp")"
        rm -f "$tmp"
        [ -d "$dir" ] && [ "$dir" != "$(pwd)" ] && cd "$dir"
    fi
}
bindkey -s '^o' 'lfcd\n'

lfcode - Visually Open VS Code from Directory

This one also requires that you have the lf file manager installed. Similar to the above it allows you to navigate your file system visually in the terminal and open your last location in Visual Studio Code.

# Opens Last lf Directory in VSCode
lfcode () {
    tmp="$(mktemp)"
    lf -last-dir-path="$tmp" "$@"
    if [ -f "$tmp" ]; then
        dir="$(cat "$tmp")"
        rm -f "$tmp"
        [ -d "$dir" ] && [ "$dir" != "$(pwd)" ] && code "$dir"
    fi
}
bindkey -s '^[c' 'lfcode\n'