# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
#[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
	# We have color support; assume it's compliant with Ecma-48
	# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
	# a case would tend to support setf rather than setaf.)
	color_prompt=yes
    else
	color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    #alias grep='grep --color=auto'
    #alias fgrep='fgrep --color=auto'
    #alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
#alias ll='ls -l'
#alias la='ls -A'
#alias l='ls -CF'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

# Directory changes
alias cdn='vim ~/Notes "+cd ~/Notes" "+enew" "+CtrlP"'
alias cdd='cd $HOME/Downloads/'
alias cdo='cd $HOME/Source/'
alias cdc='cd $HOME/.config/'
alias cd-projects='cd $HOME/Projects/'
alias cd-x='cd $HOME/Encrypted/x/'
alias cd-vim='cd /usr/share/vim/vim82/pack/my-plugins/start'
alias cdz='cd $((mru listdirs | fzf --height=50%) || printf ".")'

# General
alias v='vim'
alias yt='youtube-dl'
alias ytb='youtube-dl --no-progress'
alias depth='echo $SHLVL'
alias lsg='ls -la | grep' #Determines if a file or folder with a name containing a sequence of characters is in the current directory
alias show='apt show'
alias lynx='lynx -vikeys'
alias lsa='ls -laF'
alias doihave='apt list --installed'
alias email='neomutt'

# Utilities
alias ins='sudo apt-get install'
alias uns='sudo apt-get purge'
alias update='sudo apt-get update; sudo apt-get upgrade;'
alias nnn='nnn -xE'
alias do-xbind='xbindkeys -f $HOME/Source/configs/xbindkeysrc'
alias get-rndnum='head /dev/urandom | tr -dc A-Za-z0-9 | head -c 8'
alias music="ncmpcpp"
alias chat="irssi"
alias t="task"
alias record-window='recordmydesktop --full-shots --windowid $(xwininfo | grep "id: 0x" |
	grep -Eo "0x[a-z0-9]+")'


# Programming
alias py='ipython3 --TerminalInteractiveShell.editing_mode=vi'
alias g='git'
alias gc='git clone'
alias gs='git status'
alias ga='git add'
alias gb='git branch'
alias gl='git log'
alias gd='git diff'

# Edit config and system files
alias edit-bashrc='vim $HOME/.bashrc'
alias edit-profile='vim $HOME/.profile'
alias edit-vimrc='sudo vim /etc/vim/vimrc.local'
alias edit-xkb='vim $HOME/.config/xkb/custom.xkb'
alias edit-xr='vim ~/.config/xfiles/Xresources'
alias edit-sources='sudo vim /etc/apt/sources.list'
alias edit-tmux='vim $HOME/.config/tmux/tmux.conf'
alias edit-git='vim $HOME/.config/git/config'
alias load-xr='xrdb ~/.config/xfiles/Xresources'
alias load-xkb='xkbcomp $HOME/.config/xkb/custom.xkb $DISPLAY'
alias load-xt='xrdb $HOME/.config/Xresources'
alias load-profile='source $HOME/.profile'
alias lo='load-profile'
alias betterXev="xev | awk -F'[ )]+' '/^KeyPress/ { a[NR+2] } NR in a { printf \"%-3s %s\\n\", $5, $8 }'"


# Encryption
alias mntx='encfs $HOME/Encrypted/.x/ $HOME/Encrypted/x/'
alias umntx='encfs -u $HOME/Encrypted/x/'

# Applications
alias scan='sudo arp-scan 192.168.0.1/24'
alias weechat='weechat -d "$XDG_CONFIG_HOME"/weechat'


#Special functions! :D

search() { 
	apt search $@ | less
}

clean() {
	#Check if there is too many arguments
	if [ "$#" -gt "1" ] 
	then
		echo "Too many arguments. There are $#."
		return
	fi
	  
	case "$1" in
		'')
			;;
		soft)
			history -c ;;
		hard)
			history -c
			rm -r $HOME/tmp/; mkdir $HOME/tmp/ ;;
		*)
			echo "Invalid arguments"; return ;;
		esac

	echo "History clear"
	sudo apt-get autoremove #Cleanup packages
	echo "Clean complete"
}

firewall() {
	if [ "$#" -gt "1" ] 
	then
		echo "Too many arguments. There are $#."
		return
	fi
	  
	case "$1" in
		on)
			sudo iptables -F

			#Allows lo, allows SSH in, allows packets related to connections established with output
			sudo iptables -A walkin -i lo -j ACCEPT 
			sudo iptables -A walkin -p tcp --dport 22 -j ACCEPT
			sudo iptables -A walkin -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

			#Allows lo, allows ssh out, allows connections out that are owned by root, allows vpn
			sudo iptables -A walkout -o lo -j ACCEPT 
			sudo iptables -A walkout -p tcp --dport 22 -j ACCEPT
			sudo iptables -A walkout -m owner --uid-owner root -j ACCEPT
			sudo iptables -A walkout -o tun0 -j ACCEPT

			sudo iptables -A INPUT -j walkin
			sudo iptables -A INPUT -j DROP

			sudo iptables -A OUTPUT -j walkout
			sudo iptables -A OUTPUT -j DROP
			#Not needed
			sudo iptables -P INPUT DROP
			sudo iptables -P OUTPUT DROP
			echo "Firewall is on"
			;;
		off)
			sudo iptables -F
			sudo iptables -P INPUT ACCEPT
			sudo iptables -P OUTPUT ACCEPT
			echo "Firewall is off"
			;;
		*)
			echo "Invalid arguments"; return ;;
		esac
}

define() {
	dict $1 | less;
}

n () {
	# Block nesting of nnn in subshells
	if [ -n $NNNLVL  ] && [ "${NNNLVL:-0}" -ge 1  ]; then
		echo "nnn is already running"
		return
	fi

	# The default behaviour is to cd on quit (nnn checks if NNN_TMPFILE is set)
	# To cd on quit only on ^G, remove the "export" as in:
	#     NNN_TMPFILE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd"
	# NOTE: NNN_TMPFILE is fixed, should not be modified
	NNN_TMPFILE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd"

	# Unmask ^Q (, ^V etc.) (if required, see `stty -a`) to Quit nnn
	# stty start undef
	# stty stop undef
	# stty lwrap undef
	# stty lnext undef

	nnn "$@"

	if [ -f "$NNN_TMPFILE"  ]; then
		. "$NNN_TMPFILE"
		rm -f "$NNN_TMPFILE" > /dev/null
	fi
}

rebind() {
	sudo cp "$1" /usr/local/bin/
}

export GOPATH="$HOME/go"
export GO111MODULE=on
export EDITOR='vim'
export PAGER='less'
export NNN_BMS='h:~/;c:~/.config;n:~/Notes;m:/mnt/media'
export NNN_FIFO=/tmp/nnn.fifo
export NNN_PLUG='p:preview-tui;c:x2sel;i:imgview;s:tmspawn'
export USE_PISTOL=0
export XDG_CONFIG_HOME=$HOME/.config
export XDG_CACHE_HOME=$HOME/.cache
export XDG_DATA_HOME=$HOME/.local/share
