This is a collection of personal tweaks/rituals that make Ubuntu feel just right for me like how a ballerina customizes their pointe shoes to feel just right for them, as well as some other useful resources I keep going back to.
It would be cool if this was an Ansible playbook, but I haven't made it there yet. This also has some handy commands that I always look up and then forget.
The definitive NVIDIA Ubuntu Driver / CUDA Install Guide
Hermetic and Reproducible Python Package Template authored by yours truly.
I love to use Pixi, which can be installed with the following.
curl -fsSL https://pixi.sh/install.sh | sh
I prefer Claude Code, driven with Token Kit, as my main agent. Other models plug in underneath it: Shunt is a local gateway that adds GPT-6 Astra, Sol and Luna to Claude Code (every model id sets its effort, e.g. gpt-6-astra-high) as native subagents and /model entries, using my existing Codex login.
Token Kit: task folders, automatic rollover, and repo docs for Claude sessions, with a dispatch guide. GPT models come in as Shunt subagents.
CodeGraph indexes a repo locally so agents can look up code instead of re-exploring it. Token Kit attaches it per session with token-kit run ... --codegraph, and automatically in any worktree that already has a .codegraph/ index. Install it under ~/.local (no sudo):
npm install -g --prefix ~/.local @colbymchenry/codegraph
Before Token Kit I ran a hand-built set of Claude Code subagents (the-grizzly, swe-worker-bee, test-titan, bloat-killer, and others). That setup is kept in history, pinned to d9a0585: README, agents, settings.
Claude code can be installed with the following.
curl -fsSL https://claude.ai/install.sh | bash
Claude swap is great.
uv tool install claude-swap
Strategic rolling window resets
# sudo add-apt-repository ppa:mattrose/terminator
# sudo apt-get update
sudo apt-get install terminator # Make sure to turn on infinite scrollback: right click->preferences->profiles->scrolling
sudo apt-get install htop
sudo apt-get install nvtop
sudo apt-get install btop
Terminator extras (most often not needed, but sometimes helpful):
mkdir -p ~/.config/terminator/
touch ~/.config/terminator/config
gsettings set org.gnome.settings-daemon.plugins.media-keys terminal "['<Control><Alt>t']"
gsettings set org.gnome.desktop.default-applications.terminal exec 'terminator'
sudo snap install code --classic
sudo apt-get install vim
sudo apt-get install openssh-client
sudo apt-get install openssh-server
The free plan from Tailscale works great (up to 100 personal devices!).
I tried to use WireGuard alone once and quickly retreated to the comfort of Tailscale.
Locking down SSH to only be accessible via Tailscale
Replacing the Ubuntu login wall of text with your own color banner, rendered from patorjk's generator.
Remotely turning on WRX90 Sage SE
I like to use NoMachine.
Importantly, for NoMachine to work, in the Settings, under System, "Desktop Sharing" and "Remote Control" need to be enabled. Edit: Turns out NoMachine does not depend on this, and this can lead to crashes on multi-gpu systems.
NoMachine can be installed headlessly with the following.
wget https://web9001.nomachine.com/download/9.3/Linux/nomachine_9.3.7_1_amd64.deb
sudo dpkg -i nomachine_9.3.7_1_amd64.deb
I want to try Sunshine/Moonlight but I haven't gotten around to it yet.
I need to remember to always do the following. Settings -> Sharing -> Remote Desktop -> On.
Can be added to key agent here
Creating a private fork from a public repo - make sure to have public repo link ready
More information about private forks
Caffeine and Tactile are must have extensions IMO
sudo apt-get install gnome-shell-extension-manager
curl -d "Backup successful ๐" ntfy.sh/mytopic
Obsidian Ubuntu 24.04 Permissions
Run Obsidian with the --disable-gpu flag to prevent any glitches with Wayland!
Sometimes libfuse2 is needed.
sudo apt update -y && sudo apt install -y libfuse2
Updating Watch Count Stack Overflow
Check disk usage with the following.
sudo apt-get install baobab
sudo baobab
If your overlay2 folder gets huge, see the following.
Get rid of old docker images with the following.
docker system df
# Clear builder cache with the following.
docker builder prune -a -f
sudo grub-reboot "gnulinux-advanced-$(findmnt -no UUID /)>gnulinux-$(uname -r)-recovery-$(findmnt -no UUID /)" && sudo reboot
K9s:
wget https://github.com/derailed/k9s/releases/download/v0.32.7/k9s_linux_amd64.deb && apt install ./k9s_linux_amd64.deb && rm k9s_linux_amd64.deb
Handy commands that I always forget:
kubectl config get-contexts # Get all contexts
kubectl get namespaces # Get all namespaces
kubectl config use-context <CONTEXT> # Set Contexts
kubectl config set-context --current --namespace=<NAMESPACE> # Set the namespace for the current context
I've used Keyd in the past but tbh I didn't love it and am considering switching to Hawck. I think binding the capslock key to something that isn't useless is great.
Keyd conf file:
[ids]
*
[main]
capslock = layer(capslock)
[capslock]
e = oneshot(control)
q = oneshot(alt)
o = oneshot(shift)
p = oneshot(tab)
g = b
h = left
j = down
k = up
l = right
u = S-'
i = S-5
For local agentic coding:
vim ~/.local/share/opencode/opencode.json
ollama run SimonPu/Qwen3-Coder:30B-Instruct_Q4_K_XL
Running Ollama:
EDIT: I no longer recommend using Ollama, the native llama.cpp is great!
docker rm ollama 2>/dev/null || true && docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
docker exec -it ollama bash
# Some favorites of mine:
ollama run deepseek-r1:70b
ollama run qwen:110b
ollama run qwen2.5-coder:32b
# Example of increasing context size:
echo \
"FROM deepseek-r1:70b
PARAMETER num_ctx 60000
PARAMETER num_predict 30000" > Modelfile
ollama create deepseek-r1-60k-context-and-30k:70b -f Modelfile
ollama run deepseek-r1-60k-context-and-30k:70b --verbose
# Afterwards, make sure to clean up with CTRL + C, CTRL + D, and then docker stop ollama
Some VSCode Python extensions conflict with each other. I forgot how to resolve this. I think you may want just the Microsoft Python extension and as few others as possible. I also really like the rainbow indent extension it's great!
nvidia-smi --query-compute-apps=pid --format=csv,noheader | xargs -I{} ps -p {} -o pid,user,cmd ww
srun --jobid=2199070 --overlap --pty bash