aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorJacob Janzen <jjanzenn@proton.me>2024-08-10 11:44:42 -0500
committerJacob Janzen <jjanzenn@proton.me>2024-08-10 11:44:42 -0500
commited9c225ebeccc2ae47e3298865d2ed67d3ebc105 (patch)
tree16753a1673df86545228d3dbce76710f4f692866 /common
parent35f4e161d5ba2c2757dd3d8f2c38c0380d004b2f (diff)
symlinks for .profile and .zshrc
Diffstat (limited to 'common')
-rw-r--r--common/profile.org18
-rw-r--r--common/zshrc.org113
2 files changed, 131 insertions, 0 deletions
diff --git a/common/profile.org b/common/profile.org
new file mode 100644
index 0000000..87bbbaa
--- /dev/null
+++ b/common/profile.org
@@ -0,0 +1,18 @@
+#+TITLE: =.profile= Settings
+* Path
+Add items to the path.
+#+begin_src sh :tangle ~/.profile
+export PATH="$HOME/.local/share/fzf-zsh-plugin/bin:$HOME/node_modules/.bin:$HOME/.emacs.d/bin:$HOME/bin:$HOME/gems/bin:$HOME/.local/bin:$HOME/go/bin:$PATH"
+#+end_src
+
+* SSH Agent
+Run =ssh-agent= if =ssh-agent= is not already running on my Gentoo system. Ensure that the authorization socket is available in the shell.
+#+begin_src sh :tangle ~/.profile
+ if [ "$(uname)" = 'Linux' ] && grep 'ID=gentoo' /etc/os-release; then
+ if [ ! -S ~/.ssh/ssh_auth_sock ]; then
+ eval `ssh-agent` > /dev/null
+ ln -sf "$SSH_AUTH_SOCK" ~/.ssh/ssh_auth_sock
+ fi
+ export SSH_AUTH_SOCK=~/.ssh/ssh_auth_sock
+ fi
+#+end_src
diff --git a/common/zshrc.org b/common/zshrc.org
new file mode 100644
index 0000000..4ff5524
--- /dev/null
+++ b/common/zshrc.org
@@ -0,0 +1,113 @@
+#+title: ZSH Configuration
+Set up completions.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ zstyle ':completion:*' completer _expand _complete _ignored _approximate
+ zstyle ':completion:*' matcher-list '' 'm:{[:lower:]}={[:upper:]}' 'r:|[._-]=** r:|=**' 'l:|=* r:|=*'
+ zstyle :compinstall filename '/home/jjanzen/.zshrc'
+ autoload -U compinit promptinit
+ compinit
+ promptinit
+#+end_src
+
+Enable Gentoo completions on my Gentoo system.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ if [ "$(uname)" = 'Linux' ] && grep 'ID=gentoo' /etc/os-release; then
+ prompt gentoo
+ fi
+#+end_src
+
+Set up the history with 1000 entries and ignored duplicate commands.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ HISTFILE=~/.histfile
+ HISTSIZE=1000
+ SAVEHIST=1000
+ setopt hist_ignore_all_dups
+#+end_src
+
+Enable automatic =cd=.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ setopt autocd
+#+end_src
+
+Enable extended glob.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ setopt extendedglob
+#+end_src
+
+If a glob returns nothing, don't keep the =*=.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ setopt nullglob
+#+end_src
+
+Report the status of background jobs immediately.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ setopt notify
+#+end_src
+
+Disable the beep.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ unsetopt beep
+#+end_src
+
+Use =vi= keybindings.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ bindkey -v
+#+end_src
+
+Use =lesspipe= back end for =less= if it is installed.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ which lesspipe.sh &> /dev/null && export LESSOPEN="|lesspipe.sh %s"
+#+end_src
+
+Use =eza= as my =ls= command if it is installed.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ which eza &> /dev/null && alias ls=eza
+#+end_src
+
+Use Neovim as my =vi= and =vim= application if it is installed.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ which nvim &> /dev/null && alias vi=nvim && alias vim=nvim
+#+end_src
+
+If the Firefox binary is called =firefox-bin=, let =firefox= also run =firefox-bin=.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ which firefox-bin &> /dev/null && alias firefox=firefox-bin
+#+end_src
+
+Lazy =ls= shortcuts.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ alias ll='ls -alF'
+ alias la='ls -a'
+ alias l='ls -F'
+ alias sl='ls'
+#+end_src
+
+*** Prompt
+Define function to write out icons for the git status.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ parse_git_dirty() {
+ git_status="$(git status 2> /dev/null)"
+ [[ "$git_status" =~ "use \"git push\" to publish your local commits" ]] && echo -n " %F{green}%f"
+ [[ "$git_status" =~ "Changes to be committed:" ]] && echo -n " %F{magenta}%f"
+ [[ "$git_status" =~ "Changes not staged for commit:" ]] && echo -n " %F{yellow}%f"
+ [[ "$git_status" =~ "Untracked files:" ]] && echo -n " %F{red}%f"
+ }
+#+end_src
+
+Enable git status in the prompt.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ setopt prompt_subst
+ autoload -Uz vcs_info
+ precmd () { vcs_info }
+ zstyle ':vcs_info:*' formats ' %F{blue}%b%f' # git(main)
+#+end_src
+
+Define the prompt as follows:
+- Error code (if applicable)
+- Path using =~= for the home directory and truncating if too long
+- Git branch
+- Git status
+- =$= to mark the start of the prompt
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ PS1='%(?..%B%F{red}[%?%\]%f%b )%F{green}%20<...<%~%<<%f$vcs_info_msg_0_$(parse_git_dirty) $ '
+#+end_src