diff --git a/dotfiles/.zsh_functions b/dotfiles/.zsh_functions new file mode 100644 index 0000000..130b77c --- /dev/null +++ b/dotfiles/.zsh_functions @@ -0,0 +1,143 @@ +################################################################################## +# +# New Start: A modern Arch workflow built with an emphasis on functionality. +# Copyright (C) 2017 Donovan Glover +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +################################################################################## + +#################################################################### +# Screen resolution functions (also changes DPI, but not for the +# programs and other software that you already have open) +#################################################################### + +# Easily change the resolution to 1080p +function 1080p() { + xrandr --output VGA-1 --mode "1920x1080" # Change the resolution + sed -i '/Xft.dpi/c\Xft.dpi: 96' ~/.Xresources # Change the dpi line to 96 + xrdb ~/.Xresources # Reload .Xresources +} + +# Easily change the resolution to 4k +function 4k() { + # Get the display type (VGA-1, etc.) + local display=$(xrandr | grep -Eo ".{0,20} connected" | awk '{print $1}') + + # Get the default mode name for 4k + local mode=$(cvt 3840 2160 | grep "Modeline" | awk '{print $2}') + + # If the 4k mode hasn't been added yet + if [[ !(xrandr | grep -q 3840x2160) ]]; then + + # Create the new mode with cvt settings + xrandr --newmode $(cvt 3840 2160 | grep -o '"3840x2160.*') + + # Add the new mode to the display with xrandr + xrandr --addmode ${display} ${mode} + + fi + + xrandr --output ${display} --mode ${mode} # Change the resolution to 4k + sed -i '/Xft.dpi/c\Xft.dpi: 180' ~/.Xresources # Change the dpi line to 180 + xrdb ~/.Xresources # Reload .Xresources +} + +#################################################################### +# Git functions +#################################################################### + +# Easily clone and cd into GitHub repositories +function hub() { + git clone ssh://git@github.com/$1.git + cd $(basename "$1") +} + +# Do the same for GitLab +function lab() { + git clone ssh://git@gitlab.com/$1.git + cd $(basename "$1") +} + +#################################################################### +# Utility functions +#################################################################### + +# Take a screenshot after a certain amount of time +function ss() { + (sleep $1 && shotgun) & +} + +# Automatically open the readme in any repository +function readme() { + local readme=`ls | grep README` + if [[ $readme ]]; then + lvim $readme + else + echo "No README found." + fi +} + +# Extract any file easily +function extract() { + if [ -z "$1" ]; then + echo "You must specify a file to extract." + echo "Usage: extract " + return 1 + fi + + if [ -f $1 ]; then + case $1 in + *.rar) unrar x -ad ../$1 ;; # Proprietary rar format + *.zip) unzip ../$1 ;; # Simple and clean zip files + *.7z) 7z x ../$1 ;; # Free and open source 7z format + # Other formats + *.tar.bz2) tar xvjf ../$1 ;; + *.tar.gz) tar xvzf ../$1 ;; + *.tar.xz) tar xvJf ../$1 ;; + *.lzma) unlzma ../$1 ;; + *.bz2) bunzip2 ../$1 ;; + *.gz) gunzip ../$1 ;; + *.tar) tar xvf ../$1 ;; + *.tbz2) tar xvjf ../$1 ;; + *.tgz) tar xvzf ../$1 ;; + *.xz) unxz ../$1 ;; + *.Z) uncompress ../$1 ;; + # Fallback if none of these work + *) echo "extract: '$1' - Unknown archive method." ;; + esac + else + echo "extract: '$1' - File does not exist." + fi +} + +#################################################################### +# Opening things and other launcher functions +#################################################################### + +# TODO: Easily play any video (both online and offline) +function play() { + if [ -z "$1" ]; then + echo "You need to pass something to play." + echo "Usage: play " + return 1 + fi + # TODO: Figure out why this doesn't work for certain inputs + launch mpv "`ls | grep -i \"$1\"`" +} + +# TODO: Easily open any file +function open() { + echo "TODO" +}