diff --git a/install.sh b/install.sh
index ab4b552..35552f2 100755
--- a/install.sh
+++ b/install.sh
@@ -7,15 +7,22 @@ DOTFILES=(
 	zprofile
 	zshrc
 	plan
+	ssh/config
 )
 
+CPP_PROGS=(
+	filteruntil
+)
+
+CXX="${CXX:-g++}"
+
 echo "Setting up oh-my-zsh"
 rm -rf ~/.oh-my-zsh
 git clone https://github.com/ohmyzsh/ohmyzsh.git ~/.oh-my-zsh
 
 echo "Downloading zsh theme"
 mkdir -p ~/.oh-my-zsh/custom/themes/
-wget -xqO ~/.oh-my-zsh/custom/themes/aphrodite.zsh-theme https://github.com/win0err/aphrodite-terminal-theme/raw/6f8733782e7e31676897dd9fb036fa7e057553c6/aphrodite.zsh-theme
+curl --create-dirs -Lo ~/.oh-my-zsh/custom/themes/aphrodite.zsh-theme https://github.com/win0err/aphrodite-terminal-theme/raw/master/aphrodite.zsh-theme
 
 for f in ${DOTFILES}
 do
@@ -26,6 +33,12 @@ do
 done
 
 mkdir -p ~/bin
+for f in ${CPP_PROGS}
+do
+	echo "Installing $f"
+	$CXX -std=c++23 -O3 "$(pwd)/src/$f.cpp" -o "$HOME/bin/$f"
+done
+
 for f in bin/*
 do
 	FILENAME=$(echo $f | awk -F'/' '{print $2}')
diff --git a/oh-my-zsh b/oh-my-zsh
deleted file mode 160000
index 67cc59b..0000000
--- a/oh-my-zsh
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 67cc59b4258a13232cddfddd75f44d8ca2b80172
diff --git a/src/filteruntil.cpp b/src/filteruntil.cpp
new file mode 100644
index 0000000..3473061
--- /dev/null
+++ b/src/filteruntil.cpp
@@ -0,0 +1,21 @@
+#include <iostream>
+
+int main(int argc, char **argv) {
+	if(argc != 2) {
+		std::cerr << "usage: " << argv[0] << " <pattern-string>" << std::endl;
+		return 1;
+	}
+
+	std::string pattern(argv[1]);
+	std::string line;
+
+	while(std::getline(std::cin, line)) {
+		if(line.find(pattern) != std::string::npos) {
+			break;
+		}
+	}
+
+	while(std::getline(std::cin, line)) {
+		std::cout << line << std::endl;
+	}
+}
diff --git a/ssh/config b/ssh/config
new file mode 100644
index 0000000..9861ded
--- /dev/null
+++ b/ssh/config
@@ -0,0 +1,9 @@
+Host git.tends.to
+	User git
+	Port 7920
+
+Host silicon helium deuterium
+	User nsood
+
+Host argon
+	User tends
diff --git a/vimrc b/vimrc
index 3ea9764..f29f619 100644
--- a/vimrc
+++ b/vimrc
@@ -3,3 +3,4 @@ set autoindent
 set tabstop=4
 " makes it so that yanks/deletes go into middle click keyboard
 set clipboard=unnamed
+set backspace=indent,eol,start
diff --git a/zprofile b/zprofile
index fc043a8..e01fdf6 100644
--- a/zprofile
+++ b/zprofile
@@ -7,6 +7,11 @@ fi
 # fix for firefox using xwayland instead of wayland native
 if [ "$XDG_SESSION_TYPE" = "wayland" ]; then
     export MOZ_ENABLE_WAYLAND=1
+	export GDK_BACKEND=wayland
 fi
 
+# make AUR packages not compress, since they immediately get
+# decompressed anyway
+export PKGEXT=".pkg.tar"
+
 export TENDS_TO=42
diff --git a/zshrc b/zshrc
index 8dac141..016161d 100644
--- a/zshrc
+++ b/zshrc
@@ -1,109 +1,19 @@
 # PATH changes are in .zshenv
-alias sudo='sudo --preserve-env=PATH env '
-alias lntexheader='ln -s ~/coursenotes/nsdheader.sty $(pwd)'
 
 # Path to your oh-my-zsh installation.
 export ZSH="$HOME/.oh-my-zsh"
 
-# Set name of the theme to load --- if set to "random", it will
-# load a random theme each time oh-my-zsh is loaded, in which case,
-# to know which specific one was loaded, run: echo $RANDOM_THEME
-# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
 # Aphrodite theme: https://github.com/win0err/aphrodite-terminal-theme
 ZSH_THEME="aphrodite"
 
-# Set list of themes to pick from when loading at random
-# Setting this variable when ZSH_THEME=random will cause zsh to load
-# a theme from this variable instead of looking in $ZSH/themes/
-# If set to an empty array, this variable will have no effect.
-# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" )
-
 # Uncomment the following line to use case-sensitive completion.
-# CASE_SENSITIVE="true"
+CASE_SENSITIVE="true"
 
-# Uncomment the following line to use hyphen-insensitive completion.
-# Case-sensitive completion must be off. _ and - will be interchangeable.
-# HYPHEN_INSENSITIVE="true"
-
-# Uncomment the following line to disable bi-weekly auto-update checks.
-# DISABLE_AUTO_UPDATE="true"
-
-# Uncomment the following line to automatically update without prompting.
-# DISABLE_UPDATE_PROMPT="true"
-
-# Uncomment the following line to change how often to auto-update (in days).
-# export UPDATE_ZSH_DAYS=13
-
-# Uncomment the following line if pasting URLs and other text is messed up.
-# DISABLE_MAGIC_FUNCTIONS="true"
-
-# Uncomment the following line to disable colors in ls.
-# DISABLE_LS_COLORS="true"
-
-# Uncomment the following line to disable auto-setting terminal title.
-# DISABLE_AUTO_TITLE="true"
-
-# Uncomment the following line to enable command auto-correction.
-# ENABLE_CORRECTION="true"
-
-# Uncomment the following line to display red dots whilst waiting for completion.
-# Caution: this setting can cause issues with multiline prompts (zsh 5.7.1 and newer seem to work)
-# See https://github.com/ohmyzsh/ohmyzsh/issues/5765
-# COMPLETION_WAITING_DOTS="true"
-
-# Uncomment the following line if you want to disable marking untracked files
-# under VCS as dirty. This makes repository status check for large repositories
-# much, much faster.
-# DISABLE_UNTRACKED_FILES_DIRTY="true"
-
-# Uncomment the following line if you want to change the command execution time
-# stamp shown in the history command output.
-# You can set one of the optional three formats:
-# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
-# or set a custom format using the strftime function format specifications,
-# see 'man strftime' for details.
-# HIST_STAMPS="mm/dd/yyyy"
-
-# Would you like to use another custom folder than $ZSH/custom?
-# ZSH_CUSTOM=/path/to/new-custom-folder
-
-# Which plugins would you like to load?
-# Standard plugins can be found in $ZSH/plugins/
-# Custom plugins may be added to $ZSH_CUSTOM/plugins/
-# Example format: plugins=(rails git textmate ruby lighthouse)
-# Add wisely, as too many plugins slow down shell startup.
+# oh-my-zsh plugins
 plugins=()
 
 source $ZSH/oh-my-zsh.sh
 
-# User configuration
-
-# export MANPATH="/usr/local/man:$MANPATH"
-
-# You may need to manually set your language environment
-# export LANG=en_US.UTF-8
-
-# Preferred editor for local and remote sessions
-# if [[ -n $SSH_CONNECTION ]]; then
-#   export EDITOR='vim'
-# else
-#   export EDITOR='mvim'
-# fi
-
-# Compilation flags
-# export ARCHFLAGS="-arch x86_64"
-
-# Set personal aliases, overriding those provided by oh-my-zsh libs,
-# plugins, and themes. Aliases can be placed here, though oh-my-zsh
-# users are encouraged to define aliases within the ZSH_CUSTOM folder.
-# For a full list of active aliases, run `alias`.
-#
-# Example aliases
-# alias zshconfig="mate ~/.zshrc"
-# alias ohmyzsh="mate ~/.oh-my-zsh"
-
-[[ ! -r /home/nsood/.opam/opam-init/init.zsh ]] || source /home/nsood/.opam/opam-init/init.zsh  > /dev/null 2> /dev/null
-
 exp() {
 	cd "$@" && ls
 }
@@ -112,6 +22,9 @@ cdmk() {
 	mkdir -p "$@" && cd "$@"
 }
 
+# use gvim -v as vim if vim does not exist
+# on Fedora, vim is compiled without copy-paste support,
+# but gvim is compiled with
 if which gvim &>/dev/null && ! which vim &>/dev/null; then
 	alias vim='gvim -v'
 	export EDITOR='gvim -v'
@@ -119,6 +32,16 @@ else
 	export EDITOR=vim
 fi
 
+# bat config
+if which bat &> /dev/null; then
+	# tell it to use 8-bit terminal colors
+	export BAT_THEME="ansi"
+
+	# tell man to use it as the pager
+	export MANPAGER="sh -c 'col -bx | bat -l man -p'"
+	export MANROFFOPT="-c"
+fi
+
 alias ':q'=exit
 alias open=xdg-open
-alias neofetch=hyfetch
+alias lntexheader='ln -s ~/coursenotes/nsdheader.sty $(pwd)'