aboutsummaryrefslogtreecommitdiffstats
path: root/bashrc
blob: 4bd483dd00b13e700e5093f7955bacb901b18e9c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
# completion as advised by arch wiki
complete -cf sudo man which

# reduce history size
export HISTCONTROL=ignoreboth

# completions
if [ -f /usr/share/bash-completion/completions/pass ]; then
    . /usr/share/bash-completion/completions/pass
fi

# export PS1='bash-\v-\u@\h \W\$ '
export PS1='\[\033[38;5;208m\]\u@\h:\w\$\[\033[0m\] '

# vi mode
#set -o vi

# prevent clobbering of files
# echo "output" >| file.txt to do it manually
set -o noclobber

# Setting PATH
export PATH=~/.cargo/bin:$PATH
export PATH=~/bin/:$PATH

# nvim as vim
#alias vim='/usr/bin/nvim'
# alias vi='/usr/bin/vim'
export EDITOR=vim

# openai keys
source $HOME/dotfiles/openai_key

# aliases
alias pacget="pacman -Slq | fzf --multi --preview 'pacman -Si {1}' | xargs -ro sudo pacman -S"
alias pacdel="pacman -Qq | fzf --multi --preview 'pacman -Qi {1}' | xargs -ro sudo pacman -Rns"
alias gloga='git log --oneline --decorate --graph --all'
alias batnote='batnote-source-code'
alias am='append_to_masterlist'
alias ls='ls --color=auto'
alias h='hey_openai'
alias hd='openai_data'
alias xclip='xclip -selection c'
alias notes="cd ~/Documents/Notes/"
alias blog="cd ~/code/html/yulqen.org/"
alias bud="cd ~/Budget/hledger/"
alias getip="curl ifconfig.me"
alias tprojects="task rc.list.all.projects=1 projects"
alias ttags="task rc.list.all.tags=1 tags"
alias tkilled="task +killlist list"
alias ttagged="task tags.any: list"
alias tuntagged="task tags.none: list"
alias ttoday="task ml_due_or_scheduled_today"
alias tl="/home/lemon/Documents/Notes/todo/todo.sh list"
alias t="todoist-cli"
alias khal="$HOME/src/virtualenvs/khal-venv/bin/khal"
alias vdirsyncer="$HOME/src/virtualenvs/khal-venv/bin/vdirsyncer"
alias khard="$HOME/src/virtualenvs/khal-venv/bin/khard"
alias thisweek='khal list today 5days -d google_timebox'
alias tcomptoday='task end.after:today-1d completed'

# Environment variables
export LEDGER_FILE="$HOME/Budget/hledger/budget.ledger"
#export TERM="screen-256color" arch wiki says not to set this here.
export LESS="-iMRS -x2"
export NOTES_DIR="~/Documents/Notes"
export RANGER_LOAD_DEFAULT_RC="FALSE"
# export FZF_DEFAULT_COMMAND="rg --files --hidden --glob '!.git' "
export FZF_DEFAULT_COMMAND='ag -l --path-to-ignore ~/.ignore --nocolor --hidden -g ""'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
export FZF_ALT_C_COMMAND="$FZF_DEFAULT_COMMAND"
export FZF_DEFAULT_OPTS="--preview='bat --color=always {}' --bind shift-up:preview-page-up,shift-down:preview-page-down --color info:108,prompt:109,spinner:108,pointer:168,marker:168"

# fzf
source /usr/share/fzf/key-bindings.bash
source /usr/share/fzf/completion.bash

# gpg
export=GPG_TTY="$(tty)"
export=SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
gpgconf --launch gpg-agent

#completion for todo.sh
source ~/Documents/Notes/todo/todo_completion
complete -o default -o nospace -F _todo t

source $HOME/secrets

# Functions

##############################################################
# Quick way to create a new blog post with Hugo from wherever
# on the filesystem.
# Used ChatGPT to get the substitution and escaping correct.
# Called with a single string argument.
# ############################################################

function newpost() {
  if [[ $# -ne 1 ]]; then echo "Give me the title!"; return; fi
  title="$1"
  # convert title to lowercase and replace spaces with hyphens for the slug
  slug=$(echo "$title" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
  # create the new post file with Hugo
  cd $HOME/code/html/yulqen.org
  post_path="content/blog/$slug.md"
  hugo new "$post_path"
  # update the front matter with the original title string
  echo "Looking for $post_path..."
  awk -v title="$title" '{gsub(/title: .*/, "title: \""title"\"")}1' "$post_path" > tmp && mv tmp "$post_path"
  vim $post_path
}

###################################################################
# To output in cat, just call todj.
# To enable editing the files in vim, call todj vim.
# You can use less or any other tool to display the text if you wish
# Arguments:
# 	None
#	Output:
#		Writes to stdout or opens program passed as first argument
###################################################################
todj () {
  CMD=${1:-"cat"}
  $CMD $(find /home/lemon/Documents/Notes/journal -name "*$(date '+%Y-%m-%d')*")
}

#########################################################################
# This function takes two arguments as strings. The idea is to enable
# passing file data into the function, such as a csv file or some code.
# Call like this openai_data "Please optimise the following function in
# python" "$(</path/to/file)" This is supposed to be a good way to read a
# file's contents in bash
# Arguments:
# 	Text prompt
#		File contents
#	Output:
#		Writes to stdout
#########################################################################
openai_data() {
  if [[ $# -ne 2 ]]; then echo "Give me two params!"; return; fi

		text_prompt="$1"
    data="$2"
    prompt="${text_prompt}: ${data}"
    json=$(jq -n --arg p "$data" '{model: "gpt-3.5-turbo", messages: [{role: "user", content: $p}], temperature: 0.7}')
    local gpt=$(curl https://api.openai.com/v1/chat/completions -s \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $OPENAI_KEY" \
    -H "OpenAI-Organization: $OPENAI_ORG_ID" \
    -d "$json")
    echo $gpt | jq -r '.choices[0].message.content'
}

################################################################################
# A straight forward request to the OpenAI GPT-3 model.
# Takes a single string argument and returns a simple response.
# hey_openai "What is the best way to open and interate through a file in Perl?"
# Arguments:
# 	Text prompt
#	Output:
#		Writes to stdout
################################################################################
hey_openai() {
		prompt="$1"
    local gpt=$(curl https://api.openai.com/v1/chat/completions -s \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $OPENAI_KEY" \
    -H "OpenAI-Organization: $OPENAI_ORG_ID" \
    -d "{
        \"model\": \"gpt-3.5-turbo\",
        \"messages\": [{\"role\": \"user\", \"content\": \"$prompt\"}],
        \"temperature\": 0.7
    }")
    echo $gpt | jq -r '.choices[0].message.content'
}

append_to_masterlist() {
  ml=~/Documents/Notes/todo/masterlist.txt
  echo "$1" >> "$ml"
  cat "$ml"
}

# Colors for ls - yellow directories
# export LS_COLORS="$LS_COLORS:di=1;33"
# Install Ruby Gems to ~/gems
export GEM_HOME="$HOME/gems"
export PATH="$HOME/gems/bin:$PATH"
export PATH="$HOME/go/bin:$PATH"
export PATH="$HOME/.local/share/gem/ruby/3.0.0/bin:$PATH"
export PATH="$HOME/.local/bin:$PATH"
export PATH="/opt/pycharm-2021.3.3/bin:$PATH"