{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Archive",
  "home_page_url": "https://dots.waylonwalker.com",
  "feed_url": "https://dots.waylonwalker.com/archive/feed.json",
  "description": "Waylon Walker's dot files",
  "authors": [
    {
      "name": "Waylon Walker",
      "url": "https://waylonwalker.com",
      "avatar": "/waylon.svg"
    }
  ],
  "language": "en",
  "items": [
    {
      "id": "https://dots.waylonwalker.com/cheatsheets/zsh/",
      "url": "https://dots.waylonwalker.com/cheatsheets/zsh/",
      "title": "ZSH Cheatsheet",
      "content_html": "\u003ch1 id=\"zsh-cheatsheet\"\u003eZSH Cheatsheet\u003c/h1\u003e\n\u003ch2 id=\"keybindings\"\u003eKeybindings \u003ca href=\"#keybindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+T\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003efzf file completion\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+R\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003efzf history search\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+C\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003efzf directory completion\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+A\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eBeginning of line\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+E\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEnd of line\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+U\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDelete to beginning\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+K\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDelete to end\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+W\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDelete word backward\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+D\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDelete word forward\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+L\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eClear screen\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+D\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eExit shell\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+Z\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eBackground/foreground\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"history-expansion\"\u003eHistory Expansion \u003ca href=\"#history-expansion\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003ePattern\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e!!\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eLast command\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e!$\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eLast argument\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e!^\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFirst argument\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e!:1-3\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eArguments 1-3\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e^foo^bar\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eReplace foo with bar in last command\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"directory-navigation\"\u003eDirectory Navigation \u003ca href=\"#directory-navigation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommand\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ecd -\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePrevious directory\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ecd ~\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eHome directory\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003epushd dir\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAdd to stack\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003epopd\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRemove from stack\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003edirs\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShow stack\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e...\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo up 2 directories\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e....\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo up 3 directories\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"aliases\"\u003eAliases \u003ca href=\"#aliases\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eAlias\u003c/th\u003e\n\u003cth\u003eCommand\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003el\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003els -la\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ela\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003els -A\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ell\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003els -alF\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eg\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003egit\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egs\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003egit status\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ega\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003egit add\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003egit commit\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egp\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003egit push\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ek\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ekubectl\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003edc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003edocker-compose\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"fzf-integration\"\u003eFZF Integration \u003ca href=\"#fzf-integration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Search history\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCtrl+R\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Find files to open\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003envim **/* \u003cspan class=\"p\"\u003e|\u003c/span\u003e fzf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Change directory\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e **/* \u003cspan class=\"p\"\u003e|\u003c/span\u003e fzf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Kill processes\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ekill\u003c/span\u003e -9 \u003cspan class=\"k\"\u003e$(\u003c/span\u003eps aux \u003cspan class=\"p\"\u003e|\u003c/span\u003e fzf \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{print $2}\u0026#39;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"completion\"\u003eCompletion \u003ca href=\"#completion\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eTab\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eComplete\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eTab\u003c/code\u003e again\u003c/td\u003e\n\u003ctd\u003eMenu of options\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+I\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAlternative complete\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEsc+/\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eComplete from history\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"global-aliases-pipe-anywhere\"\u003eGlobal Aliases (pipe anywhere) \u003ca href=\"#global-aliases-pipe-anywhere\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eAlias\u003c/th\u003e\n\u003cth\u003eMeaning\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eH\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e`\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eT\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e`\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eG\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e`\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eL\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e`\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eS\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e`\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eU\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e`\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"directory-stack\"\u003eDirectory Stack \u003ca href=\"#directory-stack\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Add directories\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003epushd\u003c/span\u003e ~/git/project\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003epushd\u003c/span\u003e ~/work/another\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Navigate stack\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003epushd\u003c/span\u003e +1  \u003cspan class=\"c1\"\u003e# Rotate forward\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003epushd\u003c/span\u003e -1  \u003cspan class=\"c1\"\u003e# Rotate backward\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Show stack\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003edirs\u003c/span\u003e -v\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Remove from stack\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003epopd\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"quick-workflows\"\u003eQuick Workflows \u003ca href=\"#quick-workflows\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eEdit file:\u003c/strong\u003e \u003ccode\u003envim **/*.py | fzf\u003c/code\u003e → select\n\u003cstrong\u003eSearch history:\u003c/strong\u003e \u003ccode\u003eCtrl+R\u003c/code\u003e → type → \u003ccode\u003eEnter\u003c/code\u003e\n\u003cstrong\u003eDirectory navigation:\u003c/strong\u003e \u003ccode\u003eAlt+C\u003c/code\u003e → fuzzy find\n\u003cstrong\u003eChain commands:\u003c/strong\u003e \u003ccode\u003eps aux | G process | L\u003c/code\u003e → pipe through grep and less\u003c/p\u003e\n",
      "content_text": "\n# ZSH Cheatsheet\n\n## Keybindings\n| Key | Action |\n|-----|--------|\n| `Ctrl+T` | fzf file completion |\n| `Ctrl+R` | fzf history search |\n| `Alt+C` | fzf directory completion |\n| `Ctrl+A` | Beginning of line |\n| `Ctrl+E` | End of line |\n| `Ctrl+U` | Delete to beginning |\n| `Ctrl+K` | Delete to end |\n| `Ctrl+W` | Delete word backward |\n| `Alt+D` | Delete word forward |\n| `Ctrl+L` | Clear screen |\n| `Ctrl+D` | Exit shell |\n| `Ctrl+Z` | Background/foreground |\n\n## History Expansion\n| Pattern | Action |\n|---------|--------|\n| `!!` | Last command |\n| `!$` | Last argument |\n| `!^` | First argument |\n| `!:1-3` | Arguments 1-3 |\n| `^foo^bar` | Replace foo with bar in last command |\n\n## Directory Navigation\n| Command | Action |\n|---------|--------|\n| `cd -` | Previous directory |\n| `cd ~` | Home directory |\n| `pushd dir` | Add to stack |\n| `popd` | Remove from stack |\n| `dirs` | Show stack |\n| `...` | Go up 2 directories |\n| `....` | Go up 3 directories |\n\n## Aliases\n| Alias | Command |\n|-------|---------|\n| `l` | `ls -la` |\n| `la` | `ls -A` |\n| `ll` | `ls -alF` |\n| `g` | `git` |\n| `gs` | `git status` |\n| `ga` | `git add` |\n| `gc` | `git commit` |\n| `gp` | `git push` |\n| `k` | `kubectl` |\n| `dc` | `docker-compose` |\n\n## FZF Integration\n```bash\n# Search history\nCtrl+R\n\n# Find files to open\nnvim **/* | fzf\n\n# Change directory\ncd **/* | fzf\n\n# Kill processes\nkill -9 $(ps aux | fzf | awk '{print $2}')\n```\n\n## Completion\n| Key | Action |\n|-----|--------|\n| `Tab` | Complete |\n| `Tab` again | Menu of options |\n| `Ctrl+I` | Alternative complete |\n| `Esc+/` | Complete from history |\n\n## Global Aliases (pipe anywhere)\n| Alias | Meaning |\n|-------|---------|\n| `H` | `| head` |\n| `T` | `| tail` |\n| `G` | `| grep` |\n| `L` | `| less` |\n| `S` | `| sort` |\n| `U` | `| uniq` |\n\n## Directory Stack\n```bash\n# Add directories\npushd ~/git/project\npushd ~/work/another\n\n# Navigate stack\npushd +1  # Rotate forward\npushd -1  # Rotate backward\n\n# Show stack\ndirs -v\n\n# Remove from stack\npopd\n```\n\n## Quick Workflows\n**Edit file:** `nvim **/*.py | fzf` → select\n**Search history:** `Ctrl+R` → type → `Enter`\n**Directory navigation:** `Alt+C` → fuzzy find\n**Chain commands:** `ps aux | G process | L` → pipe through grep and less",
      "summary": "ZSH shell keybindings and productivity features",
      "date_published": "2026-02-08T00:00:00Z",
      "date_modified": "2026-02-08T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/cheatsheets/tmux/",
      "url": "https://dots.waylonwalker.com/cheatsheets/tmux/",
      "title": "tmux Cheatsheet",
      "content_html": "\u003ch1 id=\"tmux-cheatsheet\"\u003etmux Cheatsheet\u003c/h1\u003e\n\u003ch2 id=\"prefix\"\u003ePrefix \u003ca href=\"#prefix\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eCtrl+Space\u003c/code\u003e (custom, not \u003ccode\u003eCtrl+B\u003c/code\u003e)\u003c/p\u003e\n\u003ch2 id=\"session-management\"\u003eSession Management \u003ca href=\"#session-management\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+Space\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: attach to workspace session\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+T\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: attach to workspace in current directory\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+Escape\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: create new workspace\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+Backspace\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: add repo to workspace\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+J\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: switch to any session with fzf\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+G\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: open scratch session\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+Shift+G\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: open scratch session (large)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+K\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: kill sessions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eJ\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003etmux session tree browser\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"copy-mode\"\u003eCopy Mode \u003ca href=\"#copy-mode\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+[\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEnter copy mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+V\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEnter copy mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+Enter\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEnter copy mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEnter\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEnter copy mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"status-bar\"\u003eStatus Bar \u003ca href=\"#status-bar\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ePrefix+s\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle status bar\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ePrefix+Ctrl+S\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle status bar\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"git-integration\"\u003eGit Integration \u003ca href=\"#git-integration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+F\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: git commit --verbose\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+Shift+F\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: gitui\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"workspaces\"\u003eWorkspaces \u003ca href=\"#workspaces\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+W\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: attach to ~/work\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+W\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: attach to ~/work\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+G\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: attach to ~/git\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+P\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: attach to ~/project\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+T\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNew session: todo list in nvim\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"window-management\"\u003eWindow Management \u003ca href=\"#window-management\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ePrefix+c\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCreate new window\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ePrefix+n\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNext window\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ePrefix+p\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePrevious window\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ePrefix+0-9\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo to window number\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ePrefix+,\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRename window\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ePrefix+\u0026amp;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eKill window\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"pane-management\"\u003ePane Management \u003ca href=\"#pane-management\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ePrefix+\u0026quot;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSplit horizontal\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ePrefix+%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSplit vertical\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ePrefix+hjkl\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNavigate panes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ePrefix+HJKL\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eResize panes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ePrefix+x\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eKill pane\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ePrefix+z\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eZoom pane\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"quick-workflows\"\u003eQuick Workflows \u003ca href=\"#quick-workflows\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eProject hopping:\u003c/strong\u003e \u003ccode\u003eAlt+Space\u003c/code\u003e → select session\n\u003cstrong\u003eScratch pad:\u003c/strong\u003e \u003ccode\u003eAlt+G\u003c/code\u003e for quick notes\n\u003cstrong\u003eGit commit:\u003c/strong\u003e \u003ccode\u003eAlt+F\u003c/code\u003e for fast commit\n\u003cstrong\u003eTodo list:\u003c/strong\u003e \u003ccode\u003eCtrl+T\u003c/code\u003e opens dedicated todo session\u003c/p\u003e\n",
      "content_text": "\n# tmux Cheatsheet\n\n## Prefix\n`Ctrl+Space` (custom, not `Ctrl+B`)\n\n## Session Management\n| Key | Action |\n|-----|--------|\n| `Alt+Space` | Popup: attach to workspace session |\n| `Alt+T` | Popup: attach to workspace in current directory |\n| `Alt+Escape` | Popup: create new workspace |\n| `Alt+Backspace` | Popup: add repo to workspace |\n| `Ctrl+J` | Popup: switch to any session with fzf |\n| `Alt+G` | Popup: open scratch session |\n| `Alt+Shift+G` | Popup: open scratch session (large) |\n| `Ctrl+K` | Popup: kill sessions |\n| `J` | tmux session tree browser |\n\n## Copy Mode\n| Key | Action |\n|-----|--------|\n| `Alt+[` | Enter copy mode |\n| `Alt+V` | Enter copy mode |\n| `Alt+Enter` | Enter copy mode |\n| `Enter` | Enter copy mode |\n\n## Status Bar\n| Key | Action |\n|-----|--------|\n| `Prefix+s` | Toggle status bar |\n| `Prefix+Ctrl+S` | Toggle status bar |\n\n## Git Integration\n| Key | Action |\n|-----|--------|\n| `Alt+F` | Popup: git commit --verbose |\n| `Alt+Shift+F` | Popup: gitui |\n\n## Workspaces\n| Key | Action |\n|-----|--------|\n| `Ctrl+W` | Popup: attach to ~/work |\n| `Alt+W` | Popup: attach to ~/work |\n| `Ctrl+G` | Popup: attach to ~/git |\n| `Ctrl+P` | Popup: attach to ~/project |\n| `Ctrl+T` | New session: todo list in nvim |\n\n## Window Management\n| Key | Action |\n|-----|--------|\n| `Prefix+c` | Create new window |\n| `Prefix+n` | Next window |\n| `Prefix+p` | Previous window |\n| `Prefix+0-9` | Go to window number |\n| `Prefix+,` | Rename window |\n| `Prefix+\u0026` | Kill window |\n\n## Pane Management\n| Key | Action |\n|-----|--------|\n| `Prefix+\"` | Split horizontal |\n| `Prefix+%` | Split vertical |\n| `Prefix+hjkl` | Navigate panes |\n| `Prefix+HJKL` | Resize panes |\n| `Prefix+x` | Kill pane |\n| `Prefix+z` | Zoom pane |\n\n## Quick Workflows\n**Project hopping:** `Alt+Space` → select session\n**Scratch pad:** `Alt+G` for quick notes\n**Git commit:** `Alt+F` for fast commit\n**Todo list:** `Ctrl+T` opens dedicated todo session",
      "summary": "tmux keybindings and quick reference",
      "date_published": "2026-02-08T00:00:00Z",
      "date_modified": "2026-02-08T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/cheatsheets/session-management/",
      "url": "https://dots.waylonwalker.com/cheatsheets/session-management/",
      "title": "Session Management Cheatsheet",
      "content_html": "\u003ch1 id=\"session-management-cheatsheet\"\u003eSession Management Cheatsheet\u003c/h1\u003e\n\u003ch2 id=\"tmux-session-operations\"\u003eTmux Session Operations \u003ca href=\"#tmux-session-operations\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"session-creation\"\u003eSession Creation \u003ca href=\"#session-creation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+Escape\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: create new workspace\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+T\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eTodo list session (nvim)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etmux new -s name\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eManual session creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"session-navigation\"\u003eSession Navigation \u003ca href=\"#session-navigation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+Space\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: attach to workspace\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+J\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFuzzy-find any session\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+T\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eWorkspace in current directory\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eJ\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003etmux session tree browser\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"quick-session-access\"\u003eQuick Session Access \u003ca href=\"#quick-session-access\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eTarget\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+W\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e~/work directory\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+W\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e~/work directory\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+G\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e~/git directory\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+P\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e~/project directory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"session-management\"\u003eSession Management \u003ca href=\"#session-management\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+K\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: kill sessions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etmux ls\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eList all sessions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etmux kill-session -t name\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eKill specific session\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"workspace-patterns\"\u003eWorkspace Patterns \u003ca href=\"#workspace-patterns\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"project-workspace\"\u003eProject Workspace \u003ca href=\"#project-workspace\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create project-specific session\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAlt+T  \u003cspan class=\"c1\"\u003e# Creates workspace in current dir\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Session structure:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Window 1: nvim (code)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Window 2: gitui (version control)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Window 3: lf (file management)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Window 4: shell (commands)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"scratch-sessions\"\u003eScratch Sessions \u003ca href=\"#scratch-sessions\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eSession Type\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+G\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSmall scratch session\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+Shift+G\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eLarge scratch session\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"todo-session\"\u003eTodo Session \u003ca href=\"#todo-session\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003ePurpose\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+T\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eTodo management (nvim with 3 files)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e- backlog.md\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e- doing.md\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e- done.md\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"window-management\"\u003eWindow Management \u003ca href=\"#window-management\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"window-creation\"\u003eWindow Creation \u003ca href=\"#window-creation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etmux: Prefix+c\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCreate new window\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etmux: Prefix+\u0026quot;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSplit horizontal\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etmux: Prefix+%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSplit vertical\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"window-navigation\"\u003eWindow Navigation \u003ca href=\"#window-navigation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etmux: Prefix+n\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNext window\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etmux: Prefix+p\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePrevious window\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etmux: Prefix+0-9\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo to window number\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etmux: Prefix+ hjkl\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNavigate panes\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"window-naming\"\u003eWindow Naming \u003ca href=\"#window-naming\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etmux: Prefix+,\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRename window\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etmux: Prefix+\u0026amp;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eKill window\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"session-templates\"\u003eSession Templates \u003ca href=\"#session-templates\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"development-session\"\u003eDevelopment Session \u003ca href=\"#development-session\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Window 1: Code Editor\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003envim .\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Window 2: Git Operations  \u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egitui\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Window 3: File Manager\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003elf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Window 4: Terminal/Testing\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Open for commands\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"review-session\"\u003eReview Session \u003ca href=\"#review-session\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Window 1: PR/Code Review\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003envim files-to-review\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Window 2: Git Status\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit status\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Window 3: Build/Testing\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Run tests, builds\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"debug-session\"\u003eDebug Session \u003ca href=\"#debug-session\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Window 1: Code with issues\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003envim problem-file\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Window 2: Logs/Terminal\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etail -f logs/app.log\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Window 3: Shell for debugging\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Commands, inspection\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"session-persistence\"\u003eSession Persistence \u003ca href=\"#session-persistence\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"what-persists\"\u003eWhat Persists \u003ca href=\"#what-persists\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003etmux sessions survive reboots\u003c/li\u003e\n\u003cli\u003eWorking directories maintained\u003c/li\u003e\n\u003cli\u003eWindow layouts preserved\u003c/li\u003e\n\u003cli\u003eRunning processes continue\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"what-doesnt-persist\"\u003eWhat Doesn't Persist \u003ca href=\"#what-doesnt-persist\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eShell history (managed by zsh)\u003c/li\u003e\n\u003cli\u003eTemporary files\u003c/li\u003e\n\u003cli\u003eClipboard contents\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"backup-sessions\"\u003eBackup Sessions \u003ca href=\"#backup-sessions\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Save session configuration\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etmux list-windows -t session-name \u0026gt; session-backup.txt\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Recreate session from backup\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Use saved layout to rebuild\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"workflow-patterns\"\u003eWorkflow Patterns \u003ca href=\"#workflow-patterns\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"context-switching\"\u003eContext Switching \u003ca href=\"#context-switching\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Switch to different project\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAlt+Space  \u003cspan class=\"c1\"\u003e# Select workspace session\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Quick scratch for temporary work\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAlt+G  \u003cspan class=\"c1\"\u003e# Open scratch session\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Return to main work\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCtrl+J  \u003cspan class=\"c1\"\u003e# Fuzzy-find main session\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"collaborative-sessions\"\u003eCollaborative Sessions \u003ca href=\"#collaborative-sessions\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Share session with pair programming\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etmux new -s pair-programming\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Other person: tmux attach -t pair-programming\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"automated-sessions\"\u003eAutomated Sessions \u003ca href=\"#automated-sessions\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Session for specific task\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etmux new -s task-name \u003cspan class=\"se\"\u003e\\;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  send-keys \u003cspan class=\"s1\"\u003e\u0026#39;nvim file1\u0026#39;\u003c/span\u003e Enter \u003cspan class=\"se\"\u003e\\;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  new-window \u003cspan class=\"se\"\u003e\\;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e  send-keys \u003cspan class=\"s1\"\u003e\u0026#39;cd project \u0026amp;\u0026amp; git status\u0026#39;\u003c/span\u003e Enter\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"quick-reference\"\u003eQuick Reference \u003ca href=\"#quick-reference\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eStart work:\u003c/strong\u003e \u003ccode\u003eAlt+Space\u003c/code\u003e → select workspace\n\u003cstrong\u003eQuick scratch:\u003c/strong\u003e \u003ccode\u003eAlt+G\u003c/code\u003e → temporary session\u003cbr\u003e\n\u003cstrong\u003eProject hopping:\u003c/strong\u003e \u003ccode\u003eCtrl+J\u003c/code\u003e → fuzzy-find\n\u003cstrong\u003eKill session:\u003c/strong\u003e \u003ccode\u003eCtrl+K\u003c/code\u003e → select → confirm\n\u003cstrong\u003eTodo time:\u003c/strong\u003e \u003ccode\u003eCtrl+T\u003c/code\u003e → task management\n\u003cstrong\u003eFile browse:\u003c/strong\u003e \u003ccode\u003eAlt+C\u003c/code\u003e → find directory → \u003ccode\u003elf\u003c/code\u003e\u003c/p\u003e\n\u003ch2 id=\"session-health\"\u003eSession Health \u003ca href=\"#session-health\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"clean-up-sessions\"\u003eClean Up Sessions \u003ca href=\"#clean-up-sessions\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# List all sessions\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etmux ls\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Kill dead sessions\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etmux kill-session -t dead-session\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Clean up detached\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etmux list-sessions \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep detached\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"session-monitoring\"\u003eSession Monitoring \u003ca href=\"#session-monitoring\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Check session activity\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etmux list-sessions -F \u003cspan class=\"s1\"\u003e\u0026#39;#{session_name}: #{session_attached}\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Monitor long-running processes\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# In session: jobs -l\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"best-practices\"\u003eBest Practices \u003ca href=\"#best-practices\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eOne session per project\u003c/strong\u003e - Keeps context organized\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eName sessions meaningfully\u003c/strong\u003e - Easy identification\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eUse consistent window layouts\u003c/strong\u003e - Muscle memory\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eKill unused sessions\u003c/strong\u003e - Prevent clutter\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBackup important layouts\u003c/strong\u003e - Quick recreation\u003c/li\u003e\n\u003c/ol\u003e\n",
      "content_text": "\n# Session Management Cheatsheet\n\n## Tmux Session Operations\n\n### Session Creation\n| Key | Action |\n|-----|--------|\n| `Alt+Escape` | Popup: create new workspace |\n| `Ctrl+T` | Todo list session (nvim) |\n| `tmux new -s name` | Manual session creation |\n\n### Session Navigation\n| Key | Action |\n|-----|--------|\n| `Alt+Space` | Popup: attach to workspace |\n| `Ctrl+J` | Fuzzy-find any session |\n| `Alt+T` | Workspace in current directory |\n| `J` | tmux session tree browser |\n\n### Quick Session Access\n| Key | Target |\n|-----|--------|\n| `Ctrl+W` | ~/work directory |\n| `Alt+W` | ~/work directory |\n| `Ctrl+G` | ~/git directory |\n| `Ctrl+P` | ~/project directory |\n\n### Session Management\n| Key | Action |\n|-----|--------|\n| `Ctrl+K` | Popup: kill sessions |\n| `tmux ls` | List all sessions |\n| `tmux kill-session -t name` | Kill specific session |\n\n## Workspace Patterns\n\n### Project Workspace\n```bash\n# Create project-specific session\nAlt+T  # Creates workspace in current dir\n\n# Session structure:\n# Window 1: nvim (code)\n# Window 2: gitui (version control)\n# Window 3: lf (file management)\n# Window 4: shell (commands)\n```\n\n### Scratch Sessions\n| Key | Session Type |\n|-----|--------------|\n| `Alt+G` | Small scratch session |\n| `Alt+Shift+G` | Large scratch session |\n\n### Todo Session\n| Key | Purpose |\n|-----|---------|\n| `Ctrl+T` | Todo management (nvim with 3 files) |\n|  | - backlog.md |\n|  | - doing.md |\n|  | - done.md |\n\n## Window Management\n\n### Window Creation\n| Key | Action |\n|-----|--------|\n| `tmux: Prefix+c` | Create new window |\n| `tmux: Prefix+\"` | Split horizontal |\n| `tmux: Prefix+%` | Split vertical |\n\n### Window Navigation\n| Key | Action |\n|-----|--------|\n| `tmux: Prefix+n` | Next window |\n| `tmux: Prefix+p` | Previous window |\n| `tmux: Prefix+0-9` | Go to window number |\n| `tmux: Prefix+ hjkl` | Navigate panes |\n\n### Window Naming\n| Key | Action |\n|-----|--------|\n| `tmux: Prefix+,` | Rename window |\n| `tmux: Prefix+\u0026` | Kill window |\n\n## Session Templates\n\n### Development Session\n```bash\n# Window 1: Code Editor\nnvim .\n\n# Window 2: Git Operations  \ngitui\n\n# Window 3: File Manager\nlf\n\n# Window 4: Terminal/Testing\n# Open for commands\n```\n\n### Review Session\n```bash\n# Window 1: PR/Code Review\nnvim files-to-review\n\n# Window 2: Git Status\ngit status\n\n# Window 3: Build/Testing\n# Run tests, builds\n```\n\n### Debug Session\n```bash\n# Window 1: Code with issues\nnvim problem-file\n\n# Window 2: Logs/Terminal\ntail -f logs/app.log\n\n# Window 3: Shell for debugging\n# Commands, inspection\n```\n\n## Session Persistence\n\n### What Persists\n- tmux sessions survive reboots\n- Working directories maintained\n- Window layouts preserved\n- Running processes continue\n\n### What Doesn't Persist\n- Shell history (managed by zsh)\n- Temporary files\n- Clipboard contents\n\n### Backup Sessions\n```bash\n# Save session configuration\ntmux list-windows -t session-name \u003e session-backup.txt\n\n# Recreate session from backup\n# Use saved layout to rebuild\n```\n\n## Workflow Patterns\n\n### Context Switching\n```bash\n# Switch to different project\nAlt+Space  # Select workspace session\n\n# Quick scratch for temporary work\nAlt+G  # Open scratch session\n\n# Return to main work\nCtrl+J  # Fuzzy-find main session\n```\n\n### Collaborative Sessions\n```bash\n# Share session with pair programming\ntmux new -s pair-programming\n# Other person: tmux attach -t pair-programming\n```\n\n### Automated Sessions\n```bash\n# Session for specific task\ntmux new -s task-name \\; \\\n  send-keys 'nvim file1' Enter \\; \\\n  new-window \\; \\\n  send-keys 'cd project \u0026\u0026 git status' Enter\n```\n\n## Quick Reference\n\n**Start work:** `Alt+Space` → select workspace\n**Quick scratch:** `Alt+G` → temporary session  \n**Project hopping:** `Ctrl+J` → fuzzy-find\n**Kill session:** `Ctrl+K` → select → confirm\n**Todo time:** `Ctrl+T` → task management\n**File browse:** `Alt+C` → find directory → `lf`\n\n## Session Health\n\n### Clean Up Sessions\n```bash\n# List all sessions\ntmux ls\n\n# Kill dead sessions\ntmux kill-session -t dead-session\n\n# Clean up detached\ntmux list-sessions | grep detached\n```\n\n### Session Monitoring\n```bash\n# Check session activity\ntmux list-sessions -F '#{session_name}: #{session_attached}'\n\n# Monitor long-running processes\n# In session: jobs -l\n```\n\n## Best Practices\n\n1. **One session per project** - Keeps context organized\n2. **Name sessions meaningfully** - Easy identification\n3. **Use consistent window layouts** - Muscle memory\n4. **Kill unused sessions** - Prevent clutter\n5. **Backup important layouts** - Quick recreation",
      "summary": "Terminal session management with tmux and workspace patterns",
      "date_published": "2026-02-08T00:00:00Z",
      "date_modified": "2026-02-08T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/cheatsheets/neovim/",
      "url": "https://dots.waylonwalker.com/cheatsheets/neovim/",
      "title": "Neovim Cheatsheet",
      "content_html": "\u003ch1 id=\"neovim-cheatsheet\"\u003eNeovim Cheatsheet\u003c/h1\u003e\n\u003ch2 id=\"navigation\"\u003eNavigation \u003ca href=\"#navigation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ehjkl\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eLeft, Down, Up, Right\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ew\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eWord forward\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eb\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eWord backward\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e0\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStart of line\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e$\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEnd of line\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egg\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eTop of file\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eG\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eBottom of file\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+U\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePage up\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+D\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePage down\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eJump to matching bracket\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"file-operations\"\u003eFile Operations \u003ca href=\"#file-operations\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e:w\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSave file\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e:q\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eQuit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e:wq\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSave and quit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e:q!\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eQuit without saving\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e:e filename\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOpen file\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e:tabnew\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNew tab\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e:tabn\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNext tab\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e:tabp\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePrevious tab\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e:sp\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSplit horizontal\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e:vsp\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSplit vertical\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"insert-mode\"\u003eInsert Mode \u003ca href=\"#insert-mode\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ei\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eInsert before cursor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eInsert after cursor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eI\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eInsert at line start\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eA\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eInsert at line end\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eo\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOpen line below\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eO\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOpen line above\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEsc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eExit insert mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"editing\"\u003eEditing \u003ca href=\"#editing\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ex\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDelete character\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003edd\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDelete line\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eyy\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCopy line\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ep\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePaste after\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eP\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePaste before\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eu\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eUndo\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+R\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRedo\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e.\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRepeat last command\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\u0026gt;\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndent line\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\u0026lt;\u0026lt;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOutdent line\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"search--replace\"\u003eSearch \u0026amp; Replace \u003ca href=\"#search--replace\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e/pattern\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSearch forward\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e?pattern\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSearch backward\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003en\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNext match\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eN\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePrevious match\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e:%s/old/new/g\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eReplace all\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e:%s/old/new/gc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eReplace with confirm\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"visual-mode\"\u003eVisual Mode \u003ca href=\"#visual-mode\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ev\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCharacter visual mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eV\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eLine visual mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+V\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eBlock visual mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ed\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDelete selection\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ey\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCopy selection\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ec\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eChange selection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"telescope-fuzzy-finding\"\u003eTelescope (Fuzzy Finding) \u003ca href=\"#telescope-fuzzy-finding\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+P\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFind files\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+F\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eLive grep\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+B\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eBuffers\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+H\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eHelp tags\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+R\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eResume last picker\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"lsp-language-server\"\u003eLSP (Language Server) \u003ca href=\"#lsp-language-server\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egd\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo to definition\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egr\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo to references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egI\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo to implementation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eK\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eHover documentation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+K\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSignature help\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\u0026lt;leader\u0026gt;ca\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCode actions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\u0026lt;leader\u0026gt;rn\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRename\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[d\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePrevious diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e]d\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNext diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"git-gitsigns\"\u003eGit (GitSigns) \u003ca href=\"#git-gitsigns\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e]c\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNext git hunk\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[c\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePrevious git hunk\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\u0026lt;leader\u0026gt;hs\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStage hunk\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\u0026lt;leader\u0026gt;hr\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eReset hunk\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\u0026lt;leader\u0026gt;hp\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePreview hunk\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\u0026lt;leader\u0026gt;hb\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eBlame line\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"terminal\"\u003eTerminal \u003ca href=\"#terminal\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+T\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle terminal\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\u0026lt;C-\\\\\u0026gt;\u0026lt;C-N\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eTerminal normal mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"quick-workflows\"\u003eQuick Workflows \u003ca href=\"#quick-workflows\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eFile finding:\u003c/strong\u003e \u003ccode\u003eCtrl+P\u003c/code\u003e → type → \u003ccode\u003eEnter\u003c/code\u003e\n\u003cstrong\u003eCode navigation:\u003c/strong\u003e \u003ccode\u003egd\u003c/code\u003e on symbol → \u003ccode\u003eCtrl+O\u003c/code\u003e to return\n\u003cstrong\u003eGit workflow:\u003c/strong\u003e \u003ccode\u003e]c\u003c/code\u003e → \u003ccode\u003e\u0026lt;leader\u0026gt;hs\u003c/code\u003e → stage changes\n\u003cstrong\u003eSearch:\u003c/strong\u003e \u003ccode\u003eCtrl+F\u003c/code\u003e → type → \u003ccode\u003eEnter\u003c/code\u003e to open result\u003c/p\u003e\n",
      "content_text": "\n# Neovim Cheatsheet\n\n## Navigation\n| Key | Action |\n|-----|--------|\n| `hjkl` | Left, Down, Up, Right |\n| `w` | Word forward |\n| `b` | Word backward |\n| `0` | Start of line |\n| `$` | End of line |\n| `gg` | Top of file |\n| `G` | Bottom of file |\n| `Ctrl+U` | Page up |\n| `Ctrl+D` | Page down |\n| `%` | Jump to matching bracket |\n\n## File Operations\n| Key | Action |\n|-----|--------|\n| `:w` | Save file |\n| `:q` | Quit |\n| `:wq` | Save and quit |\n| `:q!` | Quit without saving |\n| `:e filename` | Open file |\n| `:tabnew` | New tab |\n| `:tabn` | Next tab |\n| `:tabp` | Previous tab |\n| `:sp` | Split horizontal |\n| `:vsp` | Split vertical |\n\n## Insert Mode\n| Key | Action |\n|-----|--------|\n| `i` | Insert before cursor |\n| `a` | Insert after cursor |\n| `I` | Insert at line start |\n| `A` | Insert at line end |\n| `o` | Open line below |\n| `O` | Open line above |\n| `Esc` | Exit insert mode |\n\n## Editing\n| Key | Action |\n|-----|--------|\n| `x` | Delete character |\n| `dd` | Delete line |\n| `yy` | Copy line |\n| `p` | Paste after |\n| `P` | Paste before |\n| `u` | Undo |\n| `Ctrl+R` | Redo |\n| `.` | Repeat last command |\n| `\u003e\u003e` | Indent line |\n| `\u003c\u003c` | Outdent line |\n\n## Search \u0026 Replace\n| Key | Action |\n|-----|--------|\n| `/pattern` | Search forward |\n| `?pattern` | Search backward |\n| `n` | Next match |\n| `N` | Previous match |\n| `:%s/old/new/g` | Replace all |\n| `:%s/old/new/gc` | Replace with confirm |\n\n## Visual Mode\n| Key | Action |\n|-----|--------|\n| `v` | Character visual mode |\n| `V` | Line visual mode |\n| `Ctrl+V` | Block visual mode |\n| `d` | Delete selection |\n| `y` | Copy selection |\n| `c` | Change selection |\n\n## Telescope (Fuzzy Finding)\n| Key | Action |\n|-----|--------|\n| `Ctrl+P` | Find files |\n| `Ctrl+F` | Live grep |\n| `Ctrl+B` | Buffers |\n| `Ctrl+H` | Help tags |\n| `Ctrl+R` | Resume last picker |\n\n## LSP (Language Server)\n| Key | Action |\n|-----|--------|\n| `gd` | Go to definition |\n| `gr` | Go to references |\n| `gI` | Go to implementation |\n| `K` | Hover documentation |\n| `Ctrl+K` | Signature help |\n| `\u003cleader\u003eca` | Code actions |\n| `\u003cleader\u003ern` | Rename |\n| `[d` | Previous diagnostic |\n| `]d` | Next diagnostic |\n\n## Git (GitSigns)\n| Key | Action |\n|-----|--------|\n| `]c` | Next git hunk |\n| `[c` | Previous git hunk |\n| `\u003cleader\u003ehs` | Stage hunk |\n| `\u003cleader\u003ehr` | Reset hunk |\n| `\u003cleader\u003ehp` | Preview hunk |\n| `\u003cleader\u003ehb` | Blame line |\n\n## Terminal\n| Key | Action |\n|-----|--------|\n| `Ctrl+T` | Toggle terminal |\n| `\u003cC-\\\\\u003e\u003cC-N\u003e` | Terminal normal mode |\n\n## Quick Workflows\n**File finding:** `Ctrl+P` → type → `Enter`\n**Code navigation:** `gd` on symbol → `Ctrl+O` to return\n**Git workflow:** `]c` → `\u003cleader\u003ehs` → stage changes\n**Search:** `Ctrl+F` → type → `Enter` to open result",
      "summary": "Neovim keybindings and essential commands quick reference",
      "date_published": "2026-02-08T00:00:00Z",
      "date_modified": "2026-02-08T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/cheatsheets/lf/",
      "url": "https://dots.waylonwalker.com/cheatsheets/lf/",
      "title": "LF Cheatsheet",
      "content_html": "\u003ch1 id=\"lf-cheatsheet\"\u003eLF Cheatsheet\u003c/h1\u003e\n\u003ch2 id=\"navigation\"\u003eNavigation \u003ca href=\"#navigation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ehjkl\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eLeft, Down, Up, Right\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEnter\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEnter directory or open file\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eBackspace\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParent directory\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eg\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo to top\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eG\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo to bottom\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eHome\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo to top\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEnd\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo to bottom\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"file-operations\"\u003eFile Operations \u003ca href=\"#file-operations\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ed\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDelete (move to trash)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eD\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDelete permanently\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ey\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCopy (yank)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ep\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePaste\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ec\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCut\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003er\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRename\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e:rename\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eInteractive rename\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e:bulk\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eBulk rename\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"selection\"\u003eSelection \u003ca href=\"#selection\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ev\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle selection\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eV\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSelect all\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eu\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eClear selection\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003et\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle selection for glob pattern\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+A\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSelect all files\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+U\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eClear all selections\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"file-creation\"\u003eFile Creation \u003ca href=\"#file-creation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e:touch filename\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCreate empty file\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e:mkdir dirname\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCreate directory\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eF\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCreate file\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eM\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCreate directory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"view--preview\"\u003eView \u0026amp; Preview \u003ca href=\"#view--preview\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSpace\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle preview\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ezh\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle hidden files\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ezI\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle preview of directories\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e$\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle preview window\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle percent view\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShow file size\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eA\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShow detailed info\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"search\"\u003eSearch \u003ca href=\"#search\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e/\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSearch forward\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e?\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSearch backward\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003en\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNext match\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eN\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePrevious match\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ef\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFind character in line\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eF\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFind character backward\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"jump-points\"\u003eJump Points \u003ca href=\"#jump-points\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ecd ~\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eHome\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ecd /\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRoot\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003em\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSet bookmark\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e'\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo to bookmark\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\\\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo to bookmark by name\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"shell-integration\"\u003eShell Integration \u003ca href=\"#shell-integration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e!\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShell command\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e$\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShell command with current file\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\u0026amp;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShell command in background\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ew\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOpen with \u003ccode\u003e$EDITOR\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eW\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOpen with default app\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ee\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOpen file in editor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ex\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eExecute file\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"workflows\"\u003eWorkflows \u003ca href=\"#workflows\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+P\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle tmux popup\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ei\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle preview mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eq\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eQuit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+C\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCancel operation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"common-patterns\"\u003eCommon Patterns \u003ca href=\"#common-patterns\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# File selection workflow\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ev → \u003cspan class=\"k\"\u003eselect\u003c/span\u003e files → y → navigate → p → paste\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Bulk rename\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCtrl+A → :bulk → edit with nvim → save\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Quick file ops\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ed → Enter to confirm trash\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ec → navigate → Enter to move\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Preview images\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSpace → image preview → q to \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e preview\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"custom-commands\"\u003eCustom Commands \u003ca href=\"#custom-commands\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommand\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e:zip\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCreate zip archive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e:extract\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eExtract archive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e:chmod +x\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMake executable\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e:du -sh\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShow directory size\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"quick-workflows\"\u003eQuick Workflows \u003ca href=\"#quick-workflows\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eNavigate:\u003c/strong\u003e \u003ccode\u003ehjkl\u003c/code\u003e or \u003ccode\u003eEnter\u003c/code\u003e to enter directories\n\u003cstrong\u003eSelect multiple:\u003c/strong\u003e \u003ccode\u003ev\u003c/code\u003e on each file → \u003ccode\u003ey\u003c/code\u003e to copy\n\u003cstrong\u003eQuick delete:\u003c/strong\u003e Select files → \u003ccode\u003ed\u003c/code\u003e → confirm\n\u003cstrong\u003eFile info:\u003c/strong\u003e \u003ccode\u003ea\u003c/code\u003e for sizes, \u003ccode\u003eSpace\u003c/code\u003e for preview\n\u003cstrong\u003eEdit:\u003c/strong\u003e \u003ccode\u003ee\u003c/code\u003e to open in nvim, \u003ccode\u003eEnter\u003c/code\u003e to open with default\u003c/p\u003e\n",
      "content_text": "\n# LF Cheatsheet\n\n## Navigation\n| Key | Action |\n|-----|--------|\n| `hjkl` | Left, Down, Up, Right |\n| `Enter` | Enter directory or open file |\n| `Backspace` | Parent directory |\n| `g` | Go to top |\n| `G` | Go to bottom |\n| `Home` | Go to top |\n| `End` | Go to bottom |\n\n## File Operations\n| Key | Action |\n|-----|--------|\n| `d` | Delete (move to trash) |\n| `D` | Delete permanently |\n| `y` | Copy (yank) |\n| `p` | Paste |\n| `c` | Cut |\n| `r` | Rename |\n| `:rename` | Interactive rename |\n| `:bulk` | Bulk rename |\n\n## Selection\n| Key | Action |\n|-----|--------|\n| `v` | Toggle selection |\n| `V` | Select all |\n| `u` | Clear selection |\n| `t` | Toggle selection for glob pattern |\n| `Ctrl+A` | Select all files |\n| `Ctrl+U` | Clear all selections |\n\n## File Creation\n| Key | Action |\n|-----|--------|\n| `:touch filename` | Create empty file |\n| `:mkdir dirname` | Create directory |\n| `F` | Create file |\n| `M` | Create directory |\n\n## View \u0026 Preview\n| Key | Action |\n|-----|--------|\n| `Space` | Toggle preview |\n| `zh` | Toggle hidden files |\n| `zI` | Toggle preview of directories |\n| `$` | Toggle preview window |\n| `%` | Toggle percent view |\n| `a` | Show file size |\n| `A` | Show detailed info |\n\n## Search\n| Key | Action |\n|-----|--------|\n| `/` | Search forward |\n| `?` | Search backward |\n| `n` | Next match |\n| `N` | Previous match |\n| `f` | Find character in line |\n| `F` | Find character backward |\n\n## Jump Points\n| Key | Action |\n|-----|--------|\n| `cd ~` | Home |\n| `cd /` | Root |\n| `m` | Set bookmark |\n| `'` | Go to bookmark |\n| `\\` | Go to bookmark by name |\n\n## Shell Integration\n| Key | Action |\n|-----|--------|\n| `!` | Shell command |\n| `$` | Shell command with current file |\n| `\u0026` | Shell command in background |\n| `w` | Open with `$EDITOR` |\n| `W` | Open with default app |\n| `e` | Open file in editor |\n| `x` | Execute file |\n\n## Workflows\n| Key | Action |\n|-----|--------|\n| `Ctrl+P` | Toggle tmux popup |\n| `i` | Toggle preview mode |\n| `q` | Quit |\n| `Ctrl+C` | Cancel operation |\n\n## Common Patterns\n```bash\n# File selection workflow\nv → select files → y → navigate → p → paste\n\n# Bulk rename\nCtrl+A → :bulk → edit with nvim → save\n\n# Quick file ops\nd → Enter to confirm trash\nc → navigate → Enter to move\n\n# Preview images\nSpace → image preview → q to exit preview\n```\n\n## Custom Commands\n| Command | Action |\n|---------|--------|\n| `:zip` | Create zip archive |\n| `:extract` | Extract archive |\n| `:chmod +x` | Make executable |\n| `:du -sh` | Show directory size |\n\n## Quick Workflows\n**Navigate:** `hjkl` or `Enter` to enter directories\n**Select multiple:** `v` on each file → `y` to copy\n**Quick delete:** Select files → `d` → confirm\n**File info:** `a` for sizes, `Space` for preview\n**Edit:** `e` to open in nvim, `Enter` to open with default",
      "summary": "LF file manager keybindings and quick reference",
      "date_published": "2026-02-08T00:00:00Z",
      "date_modified": "2026-02-08T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/cheatsheets/gitui/",
      "url": "https://dots.waylonwalker.com/cheatsheets/gitui/",
      "title": "GitUI Cheatsheet",
      "content_html": "\u003ch1 id=\"gitui-cheatsheet\"\u003eGitUI Cheatsheet\u003c/h1\u003e\n\u003ch2 id=\"navigation\"\u003eNavigation \u003ca href=\"#navigation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ehjkl\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eLeft, Down, Up, Right\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEnter\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSelect/Confirm\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eTab\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSwitch between panels\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEsc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo back/Cancel\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eq\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eQuit\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"file-staging-panel\"\u003eFile Staging Panel \u003ca href=\"#file-staging-panel\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSpace\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStage/unstage file\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStage all\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eA\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStage all tracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ec\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCommit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ee\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEdit file in $EDITOR\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ed\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDiscard changes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ei\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle ignored files\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003er\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRefresh\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"staging-view-hunks\"\u003eStaging View (Hunks) \u003ca href=\"#staging-view-hunks\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSpace\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStage/unstage hunk\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStage all hunks\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eA\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStage all tracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ec\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCommit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003es\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStage selection\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eu\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eUnstage selection\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ed\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDiscard hunk\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ee\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEdit hunk\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEnter\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle hunk selection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"log-panel\"\u003eLog Panel \u003ca href=\"#log-panel\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEnter\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShow commit details\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ec\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCherry-pick commit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003er\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRevert commit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eb\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCreate branch from commit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003et\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eTag commit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003es\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSquash commits\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ef\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFixup commits\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"branch-panel\"\u003eBranch Panel \u003ca href=\"#branch-panel\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ec\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCheckout branch\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003en\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNew branch\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ed\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDelete branch\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eD\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eForce delete branch\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003er\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRename branch\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003em\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMerge branch\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eR\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRebase onto branch\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"stashing\"\u003eStashing \u003ca href=\"#stashing\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ez\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStash changes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eZ\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStash with message\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ep\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePop stash\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eApply stash\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ed\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDrop stash\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"status-panel\"\u003eStatus Panel \u003ca href=\"#status-panel\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003el\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOpen log\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eb\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOpen branches\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003es\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOpen stash\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003et\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOpen tags\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003er\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOpen remotes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ef\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFetch\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eP\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePush\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ep\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePull\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003em\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMerge\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eR\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRebase\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"search\"\u003eSearch \u003ca href=\"#search\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e/\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSearch\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003en\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNext result\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eN\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePrevious result\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"help\"\u003eHelp \u003ca href=\"#help\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e?\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShow help\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e1\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShow status help\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e2\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShow log help\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e3\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShow diffing help\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"common-workflows\"\u003eCommon Workflows \u003ca href=\"#common-workflows\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"commit-changes\"\u003eCommit Changes \u003ca href=\"#commit-changes\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003eOpen GitUI: \u003ccode\u003egitui\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStage files: \u003ccode\u003eSpace\u003c/code\u003e on each file\u003c/li\u003e\n\u003cli\u003eCommit: \u003ccode\u003ec\u003c/code\u003e → type message → \u003ccode\u003eEnter\u003c/code\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"switch-branch\"\u003eSwitch Branch \u003ca href=\"#switch-branch\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003eOpen branches: \u003ccode\u003eb\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSelect branch: \u003ccode\u003ej/k\u003c/code\u003e → \u003ccode\u003eEnter\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCheckout: \u003ccode\u003ec\u003c/code\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"cherry-pick\"\u003eCherry-pick \u003ca href=\"#cherry-pick\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003eOpen log: \u003ccode\u003el\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSelect commit: \u003ccode\u003eEnter\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCherry-pick: \u003ccode\u003ec\u003c/code\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"resolve-conflicts\"\u003eResolve Conflicts \u003ca href=\"#resolve-conflicts\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003eDuring merge/rebase, conflicts appear\u003c/li\u003e\n\u003cli\u003ePress \u003ccode\u003ee\u003c/code\u003e to edit conflicted file\u003c/li\u003e\n\u003cli\u003eResolve in editor\u003c/li\u003e\n\u003cli\u003eReturn to GitUI\u003c/li\u003e\n\u003cli\u003eContinue: \u003ccode\u003ec\u003c/code\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"keyboard-tips\"\u003eKeyboard Tips \u003ca href=\"#keyboard-tips\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eQuick quit:\u003c/strong\u003e \u003ccode\u003eq\u003c/code\u003e from anywhere\n\u003cstrong\u003eBack out:\u003c/strong\u003e \u003ccode\u003eEsc\u003c/code\u003e cancels current operation\n\u003cstrong\u003eBulk stage:\u003c/strong\u003e In staging, \u003ccode\u003ea\u003c/code\u003e stages all\n\u003cstrong\u003eSearch files:\u003c/strong\u003e \u003ccode\u003e/\u003c/code\u003e to search, \u003ccode\u003en\u003c/code\u003e for next\n\u003cstrong\u003eEdit file:\u003c/strong\u003e \u003ccode\u003ee\u003c/code\u003e opens in $EDITOR\u003c/p\u003e\n\u003ch2 id=\"quick-reference\"\u003eQuick Reference \u003ca href=\"#quick-reference\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eStatus → Commit:\u003c/strong\u003e \u003ccode\u003egitui\u003c/code\u003e → \u003ccode\u003eSpace\u003c/code\u003e files → \u003ccode\u003ec\u003c/code\u003e\n\u003cstrong\u003eCheckout:\u003c/strong\u003e \u003ccode\u003egitui\u003c/code\u003e → \u003ccode\u003eb\u003c/code\u003e → select → \u003ccode\u003ec\u003c/code\u003e\n\u003cstrong\u003eLog view:\u003c/strong\u003e \u003ccode\u003egitui\u003c/code\u003e → \u003ccode\u003el\u003c/code\u003e\n\u003cstrong\u003eStash:\u003c/strong\u003e \u003ccode\u003egitui\u003c/code\u003e → \u003ccode\u003ez\u003c/code\u003e\n\u003cstrong\u003ePush:\u003c/strong\u003e \u003ccode\u003egitui\u003c/code\u003e → \u003ccode\u003eP\u003c/code\u003e\u003c/p\u003e\n",
      "content_text": "\n# GitUI Cheatsheet\n\n## Navigation\n| Key | Action |\n|-----|--------|\n| `hjkl` | Left, Down, Up, Right |\n| `Enter` | Select/Confirm |\n| `Tab` | Switch between panels |\n| `Esc` | Go back/Cancel |\n| `q` | Quit |\n\n## File Staging Panel\n| Key | Action |\n|-----|--------|\n| `Space` | Stage/unstage file |\n| `a` | Stage all |\n| `A` | Stage all tracked |\n| `c` | Commit |\n| `e` | Edit file in $EDITOR |\n| `d` | Discard changes |\n| `i` | Toggle ignored files |\n| `r` | Refresh |\n\n## Staging View (Hunks)\n| Key | Action |\n|-----|--------|\n| `Space` | Stage/unstage hunk |\n| `a` | Stage all hunks |\n| `A` | Stage all tracked |\n| `c` | Commit |\n| `s` | Stage selection |\n| `u` | Unstage selection |\n| `d` | Discard hunk |\n| `e` | Edit hunk |\n| `Enter` | Toggle hunk selection |\n\n## Log Panel\n| Key | Action |\n|-----|--------|\n| `Enter` | Show commit details |\n| `c` | Cherry-pick commit |\n| `r` | Revert commit |\n| `b` | Create branch from commit |\n| `t` | Tag commit |\n| `s` | Squash commits |\n| `f` | Fixup commits |\n\n## Branch Panel\n| Key | Action |\n|-----|--------|\n| `c` | Checkout branch |\n| `n` | New branch |\n| `d` | Delete branch |\n| `D` | Force delete branch |\n| `r` | Rename branch |\n| `m` | Merge branch |\n| `R` | Rebase onto branch |\n\n## Stashing\n| Key | Action |\n|-----|--------|\n| `z` | Stash changes |\n| `Z` | Stash with message |\n| `p` | Pop stash |\n| `a` | Apply stash |\n| `d` | Drop stash |\n\n## Status Panel\n| Key | Action |\n|-----|--------|\n| `l` | Open log |\n| `b` | Open branches |\n| `s` | Open stash |\n| `t` | Open tags |\n| `r` | Open remotes |\n| `f` | Fetch |\n| `P` | Push |\n| `p` | Pull |\n| `m` | Merge |\n| `R` | Rebase |\n\n## Search\n| Key | Action |\n|-----|--------|\n| `/` | Search |\n| `n` | Next result |\n| `N` | Previous result |\n\n## Help\n| Key | Action |\n|-----|--------|\n| `?` | Show help |\n| `1` | Show status help |\n| `2` | Show log help |\n| `3` | Show diffing help |\n\n## Common Workflows\n\n### Commit Changes\n1. Open GitUI: `gitui`\n2. Stage files: `Space` on each file\n3. Commit: `c` → type message → `Enter`\n\n### Switch Branch\n1. Open branches: `b`\n2. Select branch: `j/k` → `Enter`\n3. Checkout: `c`\n\n### Cherry-pick\n1. Open log: `l`\n2. Select commit: `Enter`\n3. Cherry-pick: `c`\n\n### Resolve Conflicts\n1. During merge/rebase, conflicts appear\n2. Press `e` to edit conflicted file\n3. Resolve in editor\n4. Return to GitUI\n5. Continue: `c`\n\n## Keyboard Tips\n**Quick quit:** `q` from anywhere\n**Back out:** `Esc` cancels current operation\n**Bulk stage:** In staging, `a` stages all\n**Search files:** `/` to search, `n` for next\n**Edit file:** `e` opens in $EDITOR\n\n## Quick Reference\n**Status → Commit:** `gitui` → `Space` files → `c`\n**Checkout:** `gitui` → `b` → select → `c`\n**Log view:** `gitui` → `l`\n**Stash:** `gitui` → `z`\n**Push:** `gitui` → `P`",
      "summary": "GitUI TUI git client keybindings and quick reference",
      "date_published": "2026-02-08T00:00:00Z",
      "date_modified": "2026-02-08T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/cheatsheets/git/",
      "url": "https://dots.waylonwalker.com/cheatsheets/git/",
      "title": "Git Cheatsheet",
      "content_html": "\u003ch1 id=\"git-cheatsheet\"\u003eGit Cheatsheet\u003c/h1\u003e\n\u003ch2 id=\"setup--config\"\u003eSetup \u0026amp; Config \u003ca href=\"#setup--config\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global user.name \u003cspan class=\"s2\"\u003e\u0026#34;Your Name\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global user.email \u003cspan class=\"s2\"\u003e\u0026#34;you@example.com\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global init.defaultBranch main\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global pull.rebase \u003cspan class=\"nb\"\u003efalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"repository-operations\"\u003eRepository Operations \u003ca href=\"#repository-operations\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommand\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit init\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eInitialize repository\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit clone url\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eClone repository\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit status\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShow status\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit log --oneline\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCompact log\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit log --graph\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual branch graph\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"staging--committing\"\u003eStaging \u0026amp; Committing \u003ca href=\"#staging--committing\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommand\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit add file\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStage file\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit add .\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStage all\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit commit -m \u0026quot;msg\u0026quot;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCommit staged\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit commit -am \u0026quot;msg\u0026quot;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStage+commit tracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit amend\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEdit last commit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit reset file\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eUnstage file\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit checkout -- file\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDiscard changes\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"branch-operations\"\u003eBranch Operations \u003ca href=\"#branch-operations\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommand\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit branch\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eList branches\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit branch name\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCreate branch\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit checkout branch\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSwitch branch\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit checkout -b name\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCreate+switch\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit branch -d name\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDelete merged\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit branch -D name\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDelete force\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit merge branch\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMerge branch\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit rebase branch\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRebase onto\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"remote-operations\"\u003eRemote Operations \u003ca href=\"#remote-operations\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommand\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit remote add name url\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAdd remote\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit fetch\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFetch changes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit pull\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePull + merge\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit push\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePush to remote\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit push -u origin branch\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePush+set upstream\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit push origin --delete branch\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDelete remote branch\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"history--diff\"\u003eHistory \u0026amp; Diff \u003ca href=\"#history--diff\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommand\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit diff\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShow unstaged\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit diff --staged\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShow staged\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit diff HEAD~1\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShow last commit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit show commit\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShow commit details\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit blame file\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShow line history\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit log -p file\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFile history with diff\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"stashing\"\u003eStashing \u003ca href=\"#stashing\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommand\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit stash\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStash changes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit stash save \u0026quot;msg\u0026quot;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStash with message\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit stash list\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eList stashes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit stash apply\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eApply stash\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit stash pop\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eApply+remove\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit stash drop\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRemove stash\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"undo--fix\"\u003eUndo \u0026amp; Fix \u003ca href=\"#undo--fix\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommand\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit reset --soft HEAD~1\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eUndo last commit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit reset --hard HEAD~1\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eUndo last commit + changes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit revert commit\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCreate inverse commit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egit clean -fd\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRemove untracked files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"common-workflows\"\u003eCommon Workflows \u003ca href=\"#common-workflows\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"start-new-feature\"\u003eStart New Feature \u003ca href=\"#start-new-feature\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout -b feature-name\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# ...work...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit add .\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit commit -m \u003cspan class=\"s2\"\u003e\u0026#34;Add feature description\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit push -u origin feature-name\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"sync-branch\"\u003eSync Branch \u003ca href=\"#sync-branch\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout main\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit pull origin main\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout feature-branch\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit merge main\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit push\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"fix-last-commit\"\u003eFix Last Commit \u003ca href=\"#fix-last-commit\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Add forgotten file\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit add forgotten-file\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit commit --amend --no-edit\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Or edit message\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit commit --amend\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"selective-commit\"\u003eSelective Commit \u003ca href=\"#selective-commit\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit add file1 file3\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit commit -m \u003cspan class=\"s2\"\u003e\u0026#34;Commit specific files\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit add file2\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit commit -m \u003cspan class=\"s2\"\u003e\u0026#34;Separate commit\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"quick-tips\"\u003eQuick Tips \u003ca href=\"#quick-tips\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eUncommitted changes:\u003c/strong\u003e \u003ccode\u003egit stash\u003c/code\u003e → \u003ccode\u003egit pull\u003c/code\u003e → \u003ccode\u003egit stash pop\u003c/code\u003e\n\u003cstrong\u003eSee what changed:\u003c/strong\u003e \u003ccode\u003egit diff HEAD~5 HEAD\u003c/code\u003e\n\u003cstrong\u003eFind commit:\u003c/strong\u003e \u003ccode\u003egit log --grep=\u0026quot;search term\u0026quot;\u003c/code\u003e\n\u003cstrong\u003eCherry-pick:\u003c/strong\u003e \u003ccode\u003egit cherry-pick commit-hash\u003c/code\u003e\n\u003cstrong\u003eTag release:\u003c/strong\u003e \u003ccode\u003egit tag v1.0.0 \u0026amp;\u0026amp; git push --tags\u003c/code\u003e\u003c/p\u003e\n",
      "content_text": "\n# Git Cheatsheet\n\n## Setup \u0026 Config\n```bash\ngit config --global user.name \"Your Name\"\ngit config --global user.email \"you@example.com\"\ngit config --global init.defaultBranch main\ngit config --global pull.rebase false\n```\n\n## Repository Operations\n| Command | Action |\n|---------|--------|\n| `git init` | Initialize repository |\n| `git clone url` | Clone repository |\n| `git status` | Show status |\n| `git log --oneline` | Compact log |\n| `git log --graph` | Visual branch graph |\n\n## Staging \u0026 Committing\n| Command | Action |\n|---------|--------|\n| `git add file` | Stage file |\n| `git add .` | Stage all |\n| `git commit -m \"msg\"` | Commit staged |\n| `git commit -am \"msg\"` | Stage+commit tracked |\n| `git amend` | Edit last commit |\n| `git reset file` | Unstage file |\n| `git checkout -- file` | Discard changes |\n\n## Branch Operations\n| Command | Action |\n|---------|--------|\n| `git branch` | List branches |\n| `git branch name` | Create branch |\n| `git checkout branch` | Switch branch |\n| `git checkout -b name` | Create+switch |\n| `git branch -d name` | Delete merged |\n| `git branch -D name` | Delete force |\n| `git merge branch` | Merge branch |\n| `git rebase branch` | Rebase onto |\n\n## Remote Operations\n| Command | Action |\n|---------|--------|\n| `git remote add name url` | Add remote |\n| `git fetch` | Fetch changes |\n| `git pull` | Pull + merge |\n| `git push` | Push to remote |\n| `git push -u origin branch` | Push+set upstream |\n| `git push origin --delete branch` | Delete remote branch |\n\n## History \u0026 Diff\n| Command | Action |\n|---------|--------|\n| `git diff` | Show unstaged |\n| `git diff --staged` | Show staged |\n| `git diff HEAD~1` | Show last commit |\n| `git show commit` | Show commit details |\n| `git blame file` | Show line history |\n| `git log -p file` | File history with diff |\n\n## Stashing\n| Command | Action |\n|---------|--------|\n| `git stash` | Stash changes |\n| `git stash save \"msg\"` | Stash with message |\n| `git stash list` | List stashes |\n| `git stash apply` | Apply stash |\n| `git stash pop` | Apply+remove |\n| `git stash drop` | Remove stash |\n\n## Undo \u0026 Fix\n| Command | Action |\n|---------|--------|\n| `git reset --soft HEAD~1` | Undo last commit |\n| `git reset --hard HEAD~1` | Undo last commit + changes |\n| `git revert commit` | Create inverse commit |\n| `git clean -fd` | Remove untracked files |\n\n## Common Workflows\n\n### Start New Feature\n```bash\ngit checkout -b feature-name\n# ...work...\ngit add .\ngit commit -m \"Add feature description\"\ngit push -u origin feature-name\n```\n\n### Sync Branch\n```bash\ngit checkout main\ngit pull origin main\ngit checkout feature-branch\ngit merge main\ngit push\n```\n\n### Fix Last Commit\n```bash\n# Add forgotten file\ngit add forgotten-file\ngit commit --amend --no-edit\n# Or edit message\ngit commit --amend\n```\n\n### Selective Commit\n```bash\ngit add file1 file3\ngit commit -m \"Commit specific files\"\ngit add file2\ngit commit -m \"Separate commit\"\n```\n\n## Quick Tips\n**Uncommitted changes:** `git stash` → `git pull` → `git stash pop`\n**See what changed:** `git diff HEAD~5 HEAD`\n**Find commit:** `git log --grep=\"search term\"`\n**Cherry-pick:** `git cherry-pick commit-hash`\n**Tag release:** `git tag v1.0.0 \u0026\u0026 git push --tags`",
      "summary": "Git commands and workflows quick reference",
      "date_published": "2026-02-08T00:00:00Z",
      "date_modified": "2026-02-08T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/cheatsheets/fzf/",
      "url": "https://dots.waylonwalker.com/cheatsheets/fzf/",
      "title": "fzf Cheatsheet",
      "content_html": "\u003ch1 id=\"fzf-cheatsheet\"\u003efzf Cheatsheet\u003c/h1\u003e\n\u003ch2 id=\"shell-integration-keybindings\"\u003eShell Integration Keybindings \u003ca href=\"#shell-integration-keybindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+T\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFind files and insert path\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+R\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSearch command history\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+C\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFind directories and cd\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eTab\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eComplete paths with fzf\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"fzf-interface-controls\"\u003efzf Interface Controls \u003ca href=\"#fzf-interface-controls\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+J/K\u003c/code\u003e or \u003ccode\u003eCtrl+N/P\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNavigate up/down\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+H/L\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMove cursor left/right in query\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEnter\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSelect item\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEsc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCancel\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+U\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eClear query\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eTab\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMulti-select\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eShift+Tab\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDeselect\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e?\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle preview\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"common-commands\"\u003eCommon Commands \u003ca href=\"#common-commands\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Basic file finding\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efzf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# With preview\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efzf --preview \u003cspan class=\"s1\"\u003e\u0026#39;bat --style=numbers --color=always {}\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Edit selected file\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003envim \u003cspan class=\"k\"\u003e$(\u003c/span\u003efzf\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Kill process\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ekill\u003c/span\u003e -9 \u003cspan class=\"k\"\u003e$(\u003c/span\u003eps aux \u003cspan class=\"p\"\u003e|\u003c/span\u003e fzf \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{print $2}\u0026#39;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Git checkout branch\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout \u003cspan class=\"k\"\u003e$(\u003c/span\u003egit branch \u003cspan class=\"p\"\u003e|\u003c/span\u003e fzf \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed \u003cspan class=\"s1\"\u003e\u0026#39;s/* //\u0026#39;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# cd to directory\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e \u003cspan class=\"k\"\u003e$(\u003c/span\u003efind . -type d \u003cspan class=\"p\"\u003e|\u003c/span\u003e fzf\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Search history\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ehistory\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e fzf\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"environment-variables\"\u003eEnvironment Variables \u003ca href=\"#environment-variables\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Default appearance\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eFZF_DEFAULT_OPTS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;--height 40% --layout=reverse --border\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Default file search\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eFZF_DEFAULT_COMMAND\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;fd --type f --hidden --follow --exclude .git\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Ctrl+T command\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eFZF_CTRL_T_COMMAND\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$FZF_DEFAULT_COMMAND\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Alt+C command  \u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eFZF_ALT_C_COMMAND\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;fd --type d --hidden --follow --exclude .git\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"integration-examples\"\u003eIntegration Examples \u003ca href=\"#integration-examples\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Find and edit config files\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003envim ~/.config/**/*\u003cspan class=\"o\"\u003e(\u003c/span\u003e.\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e fzf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Search git files\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit ls-files \u003cspan class=\"p\"\u003e|\u003c/span\u003e fzf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Docker actions\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker ps \u003cspan class=\"p\"\u003e|\u003c/span\u003e fzf \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{print $1}\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e xargs docker logs\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Package management\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eapt list --installed \u003cspan class=\"p\"\u003e|\u003c/span\u003e fzf\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"quick-workflows\"\u003eQuick Workflows \u003ca href=\"#quick-workflows\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eFind file:\u003c/strong\u003e \u003ccode\u003eCtrl+T\u003c/code\u003e → type → \u003ccode\u003eEnter\u003c/code\u003e\n\u003cstrong\u003eSearch history:\u003c/strong\u003e \u003ccode\u003eCtrl+R\u003c/code\u003e → type → \u003ccode\u003eEnter\u003c/code\u003e\u003cbr\u003e\n\u003cstrong\u003eChange directory:\u003c/strong\u003e \u003ccode\u003eAlt+C\u003c/code\u003e → select → \u003ccode\u003eEnter\u003c/code\u003e\n\u003cstrong\u003eMulti-select:\u003c/strong\u003e \u003ccode\u003eTab\u003c/code\u003e to select multiple items\u003c/p\u003e\n",
      "content_text": "\n# fzf Cheatsheet\n\n## Shell Integration Keybindings\n| Key | Action |\n|-----|--------|\n| `Ctrl+T` | Find files and insert path |\n| `Ctrl+R` | Search command history |\n| `Alt+C` | Find directories and cd |\n| `Tab` | Complete paths with fzf |\n\n## fzf Interface Controls\n| Key | Action |\n|-----|--------|\n| `Ctrl+J/K` or `Ctrl+N/P` | Navigate up/down |\n| `Ctrl+H/L` | Move cursor left/right in query |\n| `Enter` | Select item |\n| `Esc` | Cancel |\n| `Ctrl+U` | Clear query |\n| `Tab` | Multi-select |\n| `Shift+Tab` | Deselect |\n| `?` | Toggle preview |\n\n## Common Commands\n```bash\n# Basic file finding\nfzf\n\n# With preview\nfzf --preview 'bat --style=numbers --color=always {}'\n\n# Edit selected file\nnvim $(fzf)\n\n# Kill process\nkill -9 $(ps aux | fzf | awk '{print $2}')\n\n# Git checkout branch\ngit checkout $(git branch | fzf | sed 's/* //')\n\n# cd to directory\ncd $(find . -type d | fzf)\n\n# Search history\nhistory | fzf\n```\n\n## Environment Variables\n```bash\n# Default appearance\nexport FZF_DEFAULT_OPTS=\"--height 40% --layout=reverse --border\"\n\n# Default file search\nexport FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'\n\n# Ctrl+T command\nexport FZF_CTRL_T_COMMAND=\"$FZF_DEFAULT_COMMAND\"\n\n# Alt+C command  \nexport FZF_ALT_C_COMMAND='fd --type d --hidden --follow --exclude .git'\n```\n\n## Integration Examples\n```bash\n# Find and edit config files\nnvim ~/.config/**/*(.) | fzf\n\n# Search git files\ngit ls-files | fzf\n\n# Docker actions\ndocker ps | fzf | awk '{print $1}' | xargs docker logs\n\n# Package management\napt list --installed | fzf\n```\n\n## Quick Workflows\n**Find file:** `Ctrl+T` → type → `Enter`\n**Search history:** `Ctrl+R` → type → `Enter`  \n**Change directory:** `Alt+C` → select → `Enter`\n**Multi-select:** `Tab` to select multiple items",
      "summary": "fzf keybindings and fuzzy finder quick reference",
      "date_published": "2026-02-08T00:00:00Z",
      "date_modified": "2026-02-08T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/cheatsheets/daily-workflow/",
      "url": "https://dots.waylonwalker.com/cheatsheets/daily-workflow/",
      "title": "Daily Workflow Cheatsheet",
      "content_html": "\u003ch1 id=\"daily-workflow-cheatsheet\"\u003eDaily Workflow Cheatsheet\u003c/h1\u003e\n\u003ch2 id=\"morning-startup\"\u003eMorning Startup \u003ca href=\"#morning-startup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eOpen terminal session\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eAlt+Space\u003c/code\u003e → Open workspace session\u003c/li\u003e\n\u003cli\u003eOr \u003ccode\u003eAlt+T\u003c/code\u003e → Workspace in current directory\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eCheck status\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003egs\u003c/code\u003e → Git status\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003egitui\u003c/code\u003e → Review changes\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eAlt+Shift+F\u003c/code\u003e → Open gitui in popup\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eOpen project\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eCtrl+P\u003c/code\u003e → Find files with telescope\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCtrl+T\u003c/code\u003e → Open todo list session\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"file-operations\"\u003eFile Operations \u003ca href=\"#file-operations\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eTask\u003c/th\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eFind file\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+T\u003c/code\u003e (fzf) or \u003ccode\u003eCtrl+P\u003c/code\u003e (telescope)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eNavigate directories\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+C\u003c/code\u003e (fzf cd) or \u003ccode\u003elf\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eQuick edit\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003envim $(fzf)\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eFile preview\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elf\u003c/code\u003e → \u003ccode\u003eSpace\u003c/code\u003e for preview\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"common-patterns\"\u003eCommon Patterns \u003ca href=\"#common-patterns\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"working-on-new-feature\"\u003eWorking on New Feature \u003ca href=\"#working-on-new-feature\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 1. Create feature branch\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout -b feature-name\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 2. Work on files\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003envim \u003cspan class=\"k\"\u003e$(\u003c/span\u003efzf\u003cspan class=\"k\"\u003e)\u003c/span\u003e  \u003cspan class=\"c1\"\u003e# Find and open files\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 3. Commit changes\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egitui        \u003cspan class=\"c1\"\u003e# Stage and commit\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 4. Push branch\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit push -u origin feature-name\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"file-management-workflow\"\u003eFile Management Workflow \u003ca href=\"#file-management-workflow\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 1. Navigate with lf\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003elf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 2. Quick operations in lf:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#    v → select files → y → copy\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#    d → move to trash\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#    Space → preview files\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"search--replace\"\u003eSearch \u0026amp; Replace \u003ca href=\"#search--replace\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Search in files\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCtrl+F \u003cspan class=\"o\"\u003e(\u003c/span\u003etelescope live grep\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Find files by name\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCtrl+P \u003cspan class=\"o\"\u003e(\u003c/span\u003etelescope find files\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Command line search\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erg \u003cspan class=\"s2\"\u003e\u0026#34;pattern\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e nvim -  \u003cspan class=\"c1\"\u003e# Edit results\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"session-management\"\u003eSession Management \u003ca href=\"#session-management\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"project-switching\"\u003eProject Switching \u003ca href=\"#project-switching\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+Space\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: workspace session\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+J\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFuzzy-find any session\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+T\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eWorkspace in current dir\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+G\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eQuick scratch session\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"window-management\"\u003eWindow Management \u003ca href=\"#window-management\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eTask\u003c/th\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eNew terminal\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+T\u003c/code\u003e in tmux\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSplit horizontal\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003etmux: Prefix+\u0026quot;\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSplit vertical\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003etmux: Prefix+%\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSwitch panes\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003etmux: Prefix+hjkl\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"productivity-shortcuts\"\u003eProductivity Shortcuts \u003ca href=\"#productivity-shortcuts\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"quick-commands\"\u003eQuick Commands \u003ca href=\"#quick-commands\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eTask\u003c/th\u003e\n\u003cth\u003eCommand\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eEdit config\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003envim ~/.zshrc\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSource config\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003esource ~/.zshrc\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSystem update\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003esudo apt update \u0026amp;\u0026amp; sudo apt upgrade\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCheck tools\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003emise list\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"shell-aliases\"\u003eShell Aliases \u003ca href=\"#shell-aliases\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eAlias\u003c/th\u003e\n\u003cth\u003eCommand\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003el\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003els -la\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ela\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003els -A\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eg\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003egit\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egs\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003egit status\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ek\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ekubectl\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003edc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003edocker-compose\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"git-workflow\"\u003eGit Workflow \u003ca href=\"#git-workflow\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"daily-commit-pattern\"\u003eDaily Commit Pattern \u003ca href=\"#daily-commit-pattern\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 1. Check what changed\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egs\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 2. Stage changes\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egitui    \u003cspan class=\"c1\"\u003e# Visual staging\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 3. Commit\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# In gitui: Space files → c → type message → Enter\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 4. Push to remote\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit push\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"branch-management\"\u003eBranch Management \u003ca href=\"#branch-management\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Switch branches\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout branch-name\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create new branch\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout -b feature-name\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Sync with main\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout main\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit pull origin main\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout feature-branch\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit merge main\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"end-of-day\"\u003eEnd of Day \u003ca href=\"#end-of-day\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"clean-up\"\u003eClean Up \u003ca href=\"#clean-up\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eCommit all work\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003egs\u003c/code\u003e → check status\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003egitui\u003c/code\u003e → stage and commit\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003egit push\u003c/code\u003e → sync to remote\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSave session\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003etmux sessions persist automatically\u003c/li\u003e\n\u003cli\u003eClean up temporary scratch sessions\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eUpdate notes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eCtrl+T\u003c/code\u003e → todo session\u003c/li\u003e\n\u003cli\u003eUpdate doing.md/done.md\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"troubleshooting-quick-fixes\"\u003eTroubleshooting Quick Fixes \u003ca href=\"#troubleshooting-quick-fixes\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"merge-conflicts\"\u003eMerge Conflicts \u003ca href=\"#merge-conflicts\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Edit conflicts\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003envim \u003cspan class=\"k\"\u003e$(\u003c/span\u003egit diff --name-only \u003cspan class=\"p\"\u003e|\u003c/span\u003e head -1\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Or use gitui\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egitui  \u003cspan class=\"c1\"\u003e# Shows conflicted files, press e to edit\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"file-recovery\"\u003eFile Recovery \u003ca href=\"#file-recovery\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Restore deleted file\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout HEAD -- filename\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Undo last commit (keep changes)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit reset --soft HEAD~1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Discard all local changes\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit reset --hard HEAD\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"quick-reference-card\"\u003eQuick Reference Card \u003ca href=\"#quick-reference-card\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSession:\u003c/strong\u003e \u003ccode\u003eAlt+Space\u003c/code\u003e → select\n\u003cstrong\u003eFiles:\u003c/strong\u003e \u003ccode\u003eCtrl+T\u003c/code\u003e → find → \u003ccode\u003eEnter\u003c/code\u003e\n\u003cstrong\u003eEdit:\u003c/strong\u003e \u003ccode\u003envim filename\u003c/code\u003e\n\u003cstrong\u003eGit:\u003c/strong\u003e \u003ccode\u003egitui\u003c/code\u003e → \u003ccode\u003eSpace\u003c/code\u003e files → \u003ccode\u003ec\u003c/code\u003e\n\u003cstrong\u003eSearch:\u003c/strong\u003e \u003ccode\u003eCtrl+F\u003c/code\u003e → type → \u003ccode\u003eEnter\u003c/code\u003e\n\u003cstrong\u003eTodo:\u003c/strong\u003e \u003ccode\u003eCtrl+T\u003c/code\u003e (tmux todo session)\u003c/p\u003e\n",
      "content_text": "\n# Daily Workflow Cheatsheet\n\n## Morning Startup\n1. **Open terminal session**\n   - `Alt+Space` → Open workspace session\n   - Or `Alt+T` → Workspace in current directory\n\n2. **Check status**\n   - `gs` → Git status\n   - `gitui` → Review changes\n   - `Alt+Shift+F` → Open gitui in popup\n\n3. **Open project**\n   - `Ctrl+P` → Find files with telescope\n   - `Ctrl+T` → Open todo list session\n\n## File Operations\n| Task | Method |\n|------|--------|\n| Find file | `Ctrl+T` (fzf) or `Ctrl+P` (telescope) |\n| Navigate directories | `Alt+C` (fzf cd) or `lf` |\n| Quick edit | `nvim $(fzf)` |\n| File preview | `lf` → `Space` for preview |\n\n## Common Patterns\n\n### Working on New Feature\n```bash\n# 1. Create feature branch\ngit checkout -b feature-name\n\n# 2. Work on files\nnvim $(fzf)  # Find and open files\n\n# 3. Commit changes\ngitui        # Stage and commit\n\n# 4. Push branch\ngit push -u origin feature-name\n```\n\n### File Management Workflow\n```bash\n# 1. Navigate with lf\nlf\n\n# 2. Quick operations in lf:\n#    v → select files → y → copy\n#    d → move to trash\n#    Space → preview files\n```\n\n### Search \u0026 Replace\n```bash\n# Search in files\nCtrl+F (telescope live grep)\n\n# Find files by name\nCtrl+P (telescope find files)\n\n# Command line search\nrg \"pattern\" | nvim -  # Edit results\n```\n\n## Session Management\n\n### Project Switching\n| Key | Action |\n|-----|--------|\n| `Alt+Space` | Popup: workspace session |\n| `Ctrl+J` | Fuzzy-find any session |\n| `Alt+T` | Workspace in current dir |\n| `Alt+G` | Quick scratch session |\n\n### Window Management\n| Task | Key |\n|------|-----|\n| New terminal | `Ctrl+T` in tmux |\n| Split horizontal | `tmux: Prefix+\"` |\n| Split vertical | `tmux: Prefix+%` |\n| Switch panes | `tmux: Prefix+hjkl` |\n\n## Productivity Shortcuts\n\n### Quick Commands\n| Task | Command |\n|------|---------|\n| Edit config | `nvim ~/.zshrc` |\n| Source config | `source ~/.zshrc` |\n| System update | `sudo apt update \u0026\u0026 sudo apt upgrade` |\n| Check tools | `mise list` |\n\n### Shell Aliases\n| Alias | Command |\n|-------|---------|\n| `l` | `ls -la` |\n| `la` | `ls -A` |\n| `g` | `git` |\n| `gs` | `git status` |\n| `k` | `kubectl` |\n| `dc` | `docker-compose` |\n\n## Git Workflow\n\n### Daily Commit Pattern\n```bash\n# 1. Check what changed\ngs\n\n# 2. Stage changes\ngitui    # Visual staging\n\n# 3. Commit\n# In gitui: Space files → c → type message → Enter\n\n# 4. Push to remote\ngit push\n```\n\n### Branch Management\n```bash\n# Switch branches\ngit checkout branch-name\n\n# Create new branch\ngit checkout -b feature-name\n\n# Sync with main\ngit checkout main\ngit pull origin main\ngit checkout feature-branch\ngit merge main\n```\n\n## End of Day\n\n### Clean Up\n1. **Commit all work**\n   - `gs` → check status\n   - `gitui` → stage and commit\n   - `git push` → sync to remote\n\n2. **Save session**\n   - tmux sessions persist automatically\n   - Clean up temporary scratch sessions\n\n3. **Update notes**\n   - `Ctrl+T` → todo session\n   - Update doing.md/done.md\n\n## Troubleshooting Quick Fixes\n\n### Merge Conflicts\n```bash\n# Edit conflicts\nnvim $(git diff --name-only | head -1)\n\n# Or use gitui\ngitui  # Shows conflicted files, press e to edit\n```\n\n### File Recovery\n```bash\n# Restore deleted file\ngit checkout HEAD -- filename\n\n# Undo last commit (keep changes)\ngit reset --soft HEAD~1\n\n# Discard all local changes\ngit reset --hard HEAD\n```\n\n## Quick Reference Card\n\n**Session:** `Alt+Space` → select\n**Files:** `Ctrl+T` → find → `Enter`\n**Edit:** `nvim filename`\n**Git:** `gitui` → `Space` files → `c`\n**Search:** `Ctrl+F` → type → `Enter`\n**Todo:** `Ctrl+T` (tmux todo session)",
      "summary": "Daily terminal workflow and productivity patterns",
      "date_published": "2026-02-08T00:00:00Z",
      "date_modified": "2026-02-08T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/cheatsheets/",
      "url": "https://dots.waylonwalker.com/cheatsheets/",
      "title": "Cheatsheets",
      "content_html": "\u003cp\u003eQuick reference guides for the most commonly used tools and workflows. Perfect for when you need a reminder of that one keybinding or command.\u003c/p\u003e\n\u003ch2 id=\"terminal--shell\"\u003eTerminal \u0026amp; Shell \u003ca href=\"#terminal--shell\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/cheatsheets/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eZSH Cheatsheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eZSH shell keybindings and productivity features\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 8, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/cheatsheets/fzf/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003efzf Cheatsheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003efzf keybindings and fuzzy finder quick reference\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 8, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003c!-- embed not found: cheatsheets/starship --\u003e\n\u003cp\u003e![[ cheatsheets/starship ]]\u003c/p\u003e\n\u003ch2 id=\"editors--development\"\u003eEditors \u0026amp; Development \u003ca href=\"#editors--development\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/cheatsheets/neovim/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNeovim Cheatsheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNeovim keybindings and essential commands quick reference\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 8, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/cheatsheets/gitui/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitUI Cheatsheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGitUI TUI git client keybindings and quick reference\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 8, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003c!-- embed not found: cheatsheets/lazygit --\u003e\n\u003cp\u003e![[ cheatsheets/lazygit ]]\u003c/p\u003e\n\u003ch2 id=\"terminal-multiplexers\"\u003eTerminal Multiplexers \u003ca href=\"#terminal-multiplexers\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/cheatsheets/tmux/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etmux Cheatsheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux keybindings and quick reference\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 8, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003c!-- embed not found: cheatsheets/zellij --\u003e\n\u003cp\u003e![[ cheatsheets/zellij ]]\u003c/p\u003e\n\u003ch2 id=\"file-management\"\u003eFile Management \u003ca href=\"#file-management\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/cheatsheets/lf/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLF Cheatsheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLF file manager keybindings and quick reference\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 8, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003c!-- embed not found: cheatsheets/yazi --\u003e\n\u003cp\u003e![[ cheatsheets/yazi ]]\u003c/p\u003e\n\u003ch2 id=\"git--version-control\"\u003eGit \u0026amp; Version Control \u003ca href=\"#git--version-control\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/cheatsheets/git/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGit Cheatsheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGit commands and workflows quick reference\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 8, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003c!-- embed not found: cheatsheets/gh --\u003e\n\u003cp\u003e![[ cheatsheets/gh ]]\u003c/p\u003e\n\u003ch2 id=\"utilities\"\u003eUtilities \u003ca href=\"#utilities\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003c!-- embed not found: cheatsheets/atuin --\u003e\n\u003cp\u003e![[ cheatsheets/atuin ]]\u003c/p\u003e\n\u003c!-- embed not found: cheatsheets/delta --\u003e\n\u003cp\u003e![[ cheatsheets/delta ]]\u003c/p\u003e\n\u003c!-- embed not found: cheatsheets/workspace --\u003e\n\u003cp\u003e![[ cheatsheets/workspace ]]\u003c/p\u003e\n\u003ch2 id=\"workflow-cheatsheets\"\u003eWorkflow Cheatsheets \u003ca href=\"#workflow-cheatsheets\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/cheatsheets/daily-workflow/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDaily Workflow Cheatsheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDaily terminal workflow and productivity patterns\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 8, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003c!-- embed not found: cheatsheets/git-workflow --\u003e\n\u003cp\u003e![[ cheatsheets/git-workflow ]]\u003c/p\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/cheatsheets/session-management/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSession Management Cheatsheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTerminal session management with tmux and workspace patterns\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 8, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nQuick reference guides for the most commonly used tools and workflows. Perfect for when you need a reminder of that one keybinding or command.\n\n## Terminal \u0026 Shell\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/cheatsheets/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eZSH Cheatsheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eZSH shell keybindings and productivity features\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 8, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/cheatsheets/fzf/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003efzf Cheatsheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003efzf keybindings and fuzzy finder quick reference\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 8, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003c!-- embed not found: cheatsheets/starship --\u003e\n![[ cheatsheets/starship ]]\n\n## Editors \u0026 Development\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/cheatsheets/neovim/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNeovim Cheatsheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNeovim keybindings and essential commands quick reference\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 8, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/cheatsheets/gitui/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitUI Cheatsheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGitUI TUI git client keybindings and quick reference\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 8, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003c!-- embed not found: cheatsheets/lazygit --\u003e\n![[ cheatsheets/lazygit ]]\n\n## Terminal Multiplexers\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/cheatsheets/tmux/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etmux Cheatsheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux keybindings and quick reference\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 8, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003c!-- embed not found: cheatsheets/zellij --\u003e\n![[ cheatsheets/zellij ]]\n\n## File Management\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/cheatsheets/lf/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLF Cheatsheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLF file manager keybindings and quick reference\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 8, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003c!-- embed not found: cheatsheets/yazi --\u003e\n![[ cheatsheets/yazi ]]\n\n## Git \u0026 Version Control\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/cheatsheets/git/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGit Cheatsheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGit commands and workflows quick reference\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 8, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003c!-- embed not found: cheatsheets/gh --\u003e\n![[ cheatsheets/gh ]]\n\n## Utilities\n\n\u003c!-- embed not found: cheatsheets/atuin --\u003e\n![[ cheatsheets/atuin ]]\n\n\u003c!-- embed not found: cheatsheets/delta --\u003e\n![[ cheatsheets/delta ]]\n\n\u003c!-- embed not found: cheatsheets/workspace --\u003e\n![[ cheatsheets/workspace ]]\n\n## Workflow Cheatsheets\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/cheatsheets/daily-workflow/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDaily Workflow Cheatsheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDaily terminal workflow and productivity patterns\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 8, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003c!-- embed not found: cheatsheets/git-workflow --\u003e\n![[ cheatsheets/git-workflow ]]\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/cheatsheets/session-management/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSession Management Cheatsheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTerminal session management with tmux and workspace patterns\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 8, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "summary": "Quick reference cards for common operations and keybindings",
      "date_published": "2026-02-08T00:00:00Z",
      "date_modified": "2026-02-08T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "slash"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/zsh/",
      "url": "https://dots.waylonwalker.com/zsh/",
      "title": "zsh Configuration",
      "content_html": "\u003cp\u003ezsh is my primary shell, configured for productivity with autosuggestions,\nsyntax highlighting, and a custom prompt.\u003c/p\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ezsh-autosuggestions\u003c/strong\u003e - Fish-like suggestions as you type\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ezsh-syntax-highlighting\u003c/strong\u003e - Command validation as you type\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStarship prompt\u003c/strong\u003e - Fast, customizable prompt with git info\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003efzf integration\u003c/strong\u003e - Fuzzy completion and history search\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAtuin\u003c/strong\u003e - Enhanced shell history with sync\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"installation\"\u003eInstallation \u003ca href=\"#installation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003ezsh should be installed via your package manager:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Ubuntu/Debian\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install zsh\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Arch Linux\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S zsh\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# macOS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebrew install zsh\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eMake zsh your default shell:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echsh -s \u003cspan class=\"k\"\u003e$(\u003c/span\u003ewhich zsh\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"configuration\"\u003eConfiguration \u003ca href=\"#configuration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eThe main config file is \u003ccode\u003e~/.zshrc\u003c/code\u003e. Key sections include:\u003c/p\u003e\n\u003ch4 id=\"path-management\"\u003ePath Management \u003ca href=\"#path-management\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h4\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003ePATH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$HOME\u003c/span\u003e\u003cspan class=\"s2\"\u003e/.local/bin:\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PATH\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003ePATH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$HOME\u003c/span\u003e\u003cspan class=\"s2\"\u003e/.cargo/bin:\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PATH\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003ePATH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$HOME\u003c/span\u003e\u003cspan class=\"s2\"\u003e/go/bin:\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PATH\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch4 id=\"tool-activation\"\u003eTool Activation \u003ca href=\"#tool-activation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h4\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# mise (tool manager)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eeval\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e~/.local/bin/mise activate zsh\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# starship prompt\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eeval\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003estarship init zsh\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# atuin history\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eeval\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003eatuin init zsh\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# direnv\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eeval\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003edirenv hook zsh\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch4 id=\"plugins\"\u003ePlugins \u003ca href=\"#plugins\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h4\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# These provide suggestions and highlighting\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003esource\u003c/span\u003e ~/.zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003esource\u003c/span\u003e ~/.zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003esource\u003c/span\u003e ~/.zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"custom-functions\"\u003eCustom Functions \u003ca href=\"#custom-functions\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"web2app\"\u003eweb2app \u003ca href=\"#web2app\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eCreate desktop web app launchers:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eweb2app \u003cspan class=\"s2\"\u003e\u0026#34;GitHub\u0026#34;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://github.com\u0026#34;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://icon-url.png\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"browser-detection\"\u003eBrowser Detection \u003ca href=\"#browser-detection\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eAutomatically detects your default browser from desktop files:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Falls back through: brave, chromium, google-chrome, firefox\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$BROWSER\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"history-configuration\"\u003eHistory Configuration \u003ca href=\"#history-configuration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eExtended history with sharing between sessions:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eHISTFILESIZE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e1000000000\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eHISTSIZE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e1000000000\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eSAVEHIST\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e1000000000\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esetopt appendhistory\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esetopt share_history\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"key-bindings\"\u003eKey Bindings \u003ca href=\"#key-bindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+E\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEdit command in $EDITOR\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+K\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eClear screen and run wfetch\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+N\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eExpand alias\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+P\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eList all commands with fzf\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+G\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOpen gitui\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eUp/Down\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eHistory search by prefix\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"completion\"\u003eCompletion \u003ca href=\"#completion\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAdvanced completion with:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCase-insensitive matching\u003c/li\u003e\n\u003cli\u003eFuzzy matching\u003c/li\u003e\n\u003cli\u003eMenu selection with arrow keys\u003c/li\u003e\n\u003cli\u003eGrouped results with descriptions\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/starship/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eStarship Prompt\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eStarship - minimal, fast, and customizable shell prompt\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/atuin/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAtuin\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAtuin - a magical shell history with sync\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/mise/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003emise Tool Management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003emise - the universal version manager for development tools\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://zsh.sourceforge.io/Doc/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eZSH - Documentation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ezsh.sourceforge.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nzsh is my primary shell, configured for productivity with autosuggestions,\nsyntax highlighting, and a custom prompt.\n\n## Features\n\n- **zsh-autosuggestions** - Fish-like suggestions as you type\n- **zsh-syntax-highlighting** - Command validation as you type\n- **Starship prompt** - Fast, customizable prompt with git info\n- **fzf integration** - Fuzzy completion and history search\n- **Atuin** - Enhanced shell history with sync\n\n## Setup\n\n### Installation\n\nzsh should be installed via your package manager:\n\n```bash\n# Ubuntu/Debian\nsudo apt install zsh\n\n# Arch Linux\nsudo pacman -S zsh\n\n# macOS\nbrew install zsh\n```\n\nMake zsh your default shell:\n\n```bash\nchsh -s $(which zsh)\n```\n\n### Configuration\n\nThe main config file is `~/.zshrc`. Key sections include:\n\n#### Path Management\n\n```zsh\nexport PATH=\"$HOME/.local/bin:$PATH\"\nexport PATH=\"$HOME/.cargo/bin:$PATH\"\nexport PATH=\"$HOME/go/bin:$PATH\"\n```\n\n#### Tool Activation\n\n```zsh\n# mise (tool manager)\neval \"$(~/.local/bin/mise activate zsh)\"\n\n# starship prompt\neval \"$(starship init zsh)\"\n\n# atuin history\neval \"$(atuin init zsh)\"\n\n# direnv\neval \"$(direnv hook zsh)\"\n```\n\n#### Plugins\n\n```zsh\n# These provide suggestions and highlighting\nsource ~/.zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh\nsource ~/.zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh\nsource ~/.zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh\n```\n\n## Custom Functions\n\n### web2app\n\nCreate desktop web app launchers:\n\n```zsh\nweb2app \"GitHub\" \"https://github.com\" \"https://icon-url.png\"\n```\n\n### Browser Detection\n\nAutomatically detects your default browser from desktop files:\n\n```zsh\n# Falls back through: brave, chromium, google-chrome, firefox\necho $BROWSER\n```\n\n## History Configuration\n\nExtended history with sharing between sessions:\n\n```zsh\nHISTFILESIZE=1000000000\nHISTSIZE=1000000000\nSAVEHIST=1000000000\nsetopt appendhistory\nsetopt share_history\n```\n\n## Key Bindings\n\n| Key | Action |\n|-----|--------|\n| `Ctrl+E` | Edit command in $EDITOR |\n| `Ctrl+K` | Clear screen and run wfetch |\n| `Ctrl+N` | Expand alias |\n| `Ctrl+P` | List all commands with fzf |\n| `Ctrl+G` | Open gitui |\n| `Up/Down` | History search by prefix |\n\n## Completion\n\nAdvanced completion with:\n\n- Case-insensitive matching\n- Fuzzy matching\n- Menu selection with arrow keys\n- Grouped results with descriptions\n\n## See Also\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/starship/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eStarship Prompt\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eStarship - minimal, fast, and customizable shell prompt\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/atuin/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAtuin\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAtuin - a magical shell history with sync\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/mise/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003emise Tool Management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003emise - the universal version manager for development tools\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://zsh.sourceforge.io/Doc/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eZSH - Documentation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ezsh.sourceforge.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "zsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/zellij/",
      "url": "https://dots.waylonwalker.com/zellij/",
      "title": "Zellij",
      "content_html": "\u003cp\u003eZellij is a terminal workspace with batteries included. It's a modern alternative to tmux and screen.\u003c/p\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLayout system\u003c/strong\u003e - Define window layouts in YAML\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePlugins\u003c/strong\u003e - Extend functionality with WebAssembly plugins\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRust-based\u003c/strong\u003e - Fast and safe implementation\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWebAssembly\u003c/strong\u003e - Plugin system built on WASM\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eEasy to use\u003c/strong\u003e - Sensible defaults, minimal configuration\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstall via package manager:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Via mise (recommended)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise install zellij\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Arch Linux\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S zellij\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# macOS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebrew install zellij\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Cargo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecargo install zellij\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"launching\"\u003eLaunching \u003ca href=\"#launching\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Start new session\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ezellij\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Start with specific layout\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ezellij --layout mylayout\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Attach to existing\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ezellij attach\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# List sessions\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ezellij list-sessions\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"key-bindings\"\u003eKey Bindings \u003ca href=\"#key-bindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eZellij uses \u003ccode\u003eCtrl+g\u003c/code\u003e as the prefix key:\u003c/p\u003e\n\u003ch3 id=\"session\"\u003eSession \u003ca href=\"#session\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+g\u003c/code\u003e \u003ccode\u003ed\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDetach\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+g\u003c/code\u003e \u003ccode\u003eq\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eQuit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+g\u003c/code\u003e \u003ccode\u003es\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSession manager\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"panes\"\u003ePanes \u003ca href=\"#panes\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+g\u003c/code\u003e \u003ccode\u003en\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNew pane (horizontal)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+g\u003c/code\u003e \u003ccode\u003ep\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNew pane (vertical)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+g\u003c/code\u003e \u003ccode\u003ex\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eClose pane\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+g\u003c/code\u003e \u003ccode\u003eh/j/k/l\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMove between panes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+g\u003c/code\u003e \u003ccode\u003ef\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFullscreen pane\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+Arrow\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMove between panes (no prefix)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"tabs\"\u003eTabs \u003ca href=\"#tabs\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+g\u003c/code\u003e \u003ccode\u003ec\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNew tab\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+g\u003c/code\u003e \u003ccode\u003e,\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRename tab\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+g\u003c/code\u003e \u003ccode\u003eCtrl+h/l\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePrevious/next tab\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+g\u003c/code\u003e \u003ccode\u003e[1-9]\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo to tab\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"scrollsearch\"\u003eScroll/Search \u003ca href=\"#scrollsearch\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+g\u003c/code\u003e \u003ccode\u003e[\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEnter scroll mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+s\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSearch (in scroll mode)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003en/N\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNext/previous match\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEsc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eExit scroll mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"layouts\"\u003eLayouts \u003ca href=\"#layouts\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eCreate layouts in \u003ccode\u003e~/.config/zellij/layouts/\u003c/code\u003e:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# ~/.config/zellij/layouts/dev.yaml\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003etemplate\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edirection\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eHorizontal\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eparts\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e- \u003cspan class=\"nt\"\u003edirection\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eVertical\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003esplit_size\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003ePercent\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e50\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eparts\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e- \u003cspan class=\"nt\"\u003edirection\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eVertical\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e- \u003cspan class=\"nt\"\u003edirection\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eVertical\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e- \u003cspan class=\"nt\"\u003edirection\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eVertical\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003esplit_size\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003ePercent\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e50\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eparts\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e- \u003cspan class=\"nt\"\u003edirection\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eVertical\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e            \u003c/span\u003e\u003cspan class=\"nt\"\u003ecommand\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e{\u003cspan class=\"nt\"\u003ecmd: cargo, args\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;watch\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;-x\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;run\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e}\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eUse: \u003ccode\u003ezellij --layout dev\u003c/code\u003e\u003c/p\u003e\n\u003ch2 id=\"configuration\"\u003eConfiguration \u003ca href=\"#configuration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eConfig file: \u003ccode\u003e~/.config/zellij/config.kdl\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-kdl\"\u003etheme \u0026quot;dracula\u0026quot;\n\ndefault_shell \u0026quot;zsh\u0026quot;\n\nkeybinds {\n    normal {\n        bind \u0026quot;Ctrl a\u0026quot; { SwitchToMode \u0026quot;Tmux\u0026quot;; }\n    }\n}\n\nplugins {\n    filepicker location=\u0026quot;zellij:filepicker\u0026quot;\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/tmux/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etmux Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux configuration for persistent terminal sessions with popup windows and session management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ezsh Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/workspace/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWorkspace Script\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWorkspace script - session management automation for tmux\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/cheatsheets/session-management/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSession Management Cheatsheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTerminal session management with tmux and workspace patterns\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 8, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://zellij.dev/documentation/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eIntroduction - Zellij User Guide\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ezellij.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nZellij is a terminal workspace with batteries included. It's a modern alternative to tmux and screen.\n\n## Features\n\n- **Layout system** - Define window layouts in YAML\n- **Plugins** - Extend functionality with WebAssembly plugins\n- **Rust-based** - Fast and safe implementation\n- **WebAssembly** - Plugin system built on WASM\n- **Easy to use** - Sensible defaults, minimal configuration\n\n## Setup\n\nInstall via package manager:\n\n```bash\n# Via mise (recommended)\nmise install zellij\n\n# Arch Linux\nsudo pacman -S zellij\n\n# macOS\nbrew install zellij\n\n# Cargo\ncargo install zellij\n```\n\n## Launching\n\n```bash\n# Start new session\nzellij\n\n# Start with specific layout\nzellij --layout mylayout\n\n# Attach to existing\nzellij attach\n\n# List sessions\nzellij list-sessions\n```\n\n## Key Bindings\n\nZellij uses `Ctrl+g` as the prefix key:\n\n### Session\n\n| Key | Action |\n|-----|--------|\n| `Ctrl+g` `d` | Detach |\n| `Ctrl+g` `q` | Quit |\n| `Ctrl+g` `s` | Session manager |\n\n### Panes\n\n| Key | Action |\n|-----|--------|\n| `Ctrl+g` `n` | New pane (horizontal) |\n| `Ctrl+g` `p` | New pane (vertical) |\n| `Ctrl+g` `x` | Close pane |\n| `Ctrl+g` `h/j/k/l` | Move between panes |\n| `Ctrl+g` `f` | Fullscreen pane |\n| `Alt+Arrow` | Move between panes (no prefix) |\n\n### Tabs\n\n| Key | Action |\n|-----|--------|\n| `Ctrl+g` `c` | New tab |\n| `Ctrl+g` `,` | Rename tab |\n| `Ctrl+g` `Ctrl+h/l` | Previous/next tab |\n| `Ctrl+g` `[1-9]` | Go to tab |\n\n### Scroll/Search\n\n| Key | Action |\n|-----|--------|\n| `Ctrl+g` `[` | Enter scroll mode |\n| `Ctrl+s` | Search (in scroll mode) |\n| `n/N` | Next/previous match |\n| `Esc` | Exit scroll mode |\n\n## Layouts\n\nCreate layouts in `~/.config/zellij/layouts/`:\n\n```yaml\n# ~/.config/zellij/layouts/dev.yaml\ntemplate:\n  direction: Horizontal\n  parts:\n    - direction: Vertical\n      split_size:\n        Percent: 50\n      parts:\n        - direction: Vertical\n        - direction: Vertical\n    - direction: Vertical\n      split_size:\n        Percent: 50\n      parts:\n        - direction: Vertical\n          run:\n            command: {cmd: cargo, args: [\"watch\", \"-x\", \"run\"]}\n```\n\nUse: `zellij --layout dev`\n\n## Configuration\n\nConfig file: `~/.config/zellij/config.kdl`\n\nExample:\n\n```kdl\ntheme \"dracula\"\n\ndefault_shell \"zsh\"\n\nkeybinds {\n    normal {\n        bind \"Ctrl a\" { SwitchToMode \"Tmux\"; }\n    }\n}\n\nplugins {\n    filepicker location=\"zellij:filepicker\"\n}\n```\n\n## See Also\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/tmux/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etmux Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux configuration for persistent terminal sessions with popup windows and session management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ezsh Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/workspace/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWorkspace Script\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWorkspace script - session management automation for tmux\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/cheatsheets/session-management/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eSession Management Cheatsheet\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTerminal session management with tmux and workspace patterns\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 8, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://zellij.dev/documentation/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eIntroduction - Zellij User Guide\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ezellij.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Zellij - a terminal workspace with batteries included",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/yep/",
      "url": "https://dots.waylonwalker.com/yep/",
      "title": "Yep",
      "content_html": "\u003cp\u003eThings I use, recommend, and endorse without reservation.\u003c/p\u003e\n\u003ch2 id=\"software\"\u003eSoftware \u003ca href=\"#software\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"development\"\u003eDevelopment \u003ca href=\"#development\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eNeovim\u003c/strong\u003e - Modern vim. Fast, extensible, powerful. See \u003ca href=\"/neovim/\" class=\"wikilink\" data-title=\"Neovim Configuration\" data-description=\"Neovim configuration with lazy.nvim for plugin management\" data-date=\"2026-02-07\"\u003eNeovim Configuration\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etmux\u003c/strong\u003e - Terminal multiplexer that changed how I work. See \u003ca href=\"/tmux/\" class=\"wikilink\" data-title=\"tmux Configuration\" data-description=\"tmux configuration for persistent terminal sessions with popup windows and session management\" data-date=\"2026-02-07\"\u003etmux Configuration\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ezsh\u003c/strong\u003e - Best shell experience with the right plugins. See \u003ca href=\"/zsh/\" class=\"wikilink\" data-title=\"zsh Configuration\" data-description=\"zsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\" data-date=\"2026-02-07\"\u003ezsh Configuration\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003emise\u003c/strong\u003e - One tool to manage all dev tool versions. See \u003ca href=\"/mise/\" class=\"wikilink\" data-title=\"mise Tool Management\" data-description=\"mise - the universal version manager for development tools\" data-date=\"2026-02-07\"\u003emise Tool Management\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003efzf\u003c/strong\u003e - Fuzzy finding that integrates everywhere. See \u003ca href=\"/fzf/\" class=\"wikilink\" data-title=\"fzf\" data-description=\"fzf - a command-line fuzzy finder\" data-date=\"2026-02-07\"\u003efzf\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003egit\u003c/strong\u003e - Version control done right. See \u003ca href=\"/git/\" class=\"wikilink\" data-title=\"Git Configuration\" data-description=\"Git configuration with aliases, delta for diffs, and work/personal separation\" data-date=\"2026-02-07\"\u003eGit Configuration\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003euv\u003c/strong\u003e - Python packaging and dependency management done right. See [[uv]]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"terminal\"\u003eTerminal \u003ca href=\"#terminal\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ekitty\u003c/strong\u003e - GPU-accelerated terminal. See \u003ca href=\"/kitty/\" class=\"wikilink\" data-title=\"kitty Terminal\" data-description=\"kitty - a fast, feature-rich, GPU-based terminal emulator\" data-date=\"2026-02-07\"\u003ekitty Terminal\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ewezterm\u003c/strong\u003e - Cross-platform and scriptable. See \u003ca href=\"/wezterm/\" class=\"wikilink\" data-title=\"WezTerm\" data-description=\"WezTerm - a GPU-accelerated cross-platform terminal emulator\" data-date=\"2026-02-07\"\u003eWezTerm\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"window-management\"\u003eWindow Management \u003ca href=\"#window-management\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eHyprland\u003c/strong\u003e - Wayland tiling compositor with excellent workspace support. See \u003ca href=\"/hyprland/\" class=\"wikilink\" data-title=\"Hyprland Window Manager\" data-description=\"Hyprland - a dynamic tiling Wayland compositor\" data-date=\"2026-02-07\"\u003eHyprland Window Manager\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAwesome WM\u003c/strong\u003e - When I need X11. See \u003ca href=\"/awesome/\" class=\"wikilink\" data-title=\"Awesome Window Manager\" data-description=\"Awesome WM - a highly configurable X11 window manager\" data-date=\"2026-02-07\"\u003eAwesome Window Manager\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eKDE Plasma\u003c/strong\u003e - Actually like this DE - great workspace management and keyboard shortcuts\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eI need window managers with robust workspace hotkeys: win+num to switch, win+shift+num to send apps, win+ctrl+num to join workspaces. Both tiling and floating work fine if the workspace management is solid.\u003c/p\u003e\n\u003ch3 id=\"utilities\"\u003eUtilities \u003ca href=\"#utilities\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eatuin\u003c/strong\u003e - Shell history that syncs. See \u003ca href=\"/atuin/\" class=\"wikilink\" data-title=\"Atuin\" data-description=\"Atuin - a magical shell history with sync\" data-date=\"2026-02-07\"\u003eAtuin\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003estarship\u003c/strong\u003e - Fast, informative prompt. See \u003ca href=\"/starship/\" class=\"wikilink\" data-title=\"Starship Prompt\" data-description=\"Starship - minimal, fast, and customizable shell prompt\" data-date=\"2026-02-07\"\u003eStarship Prompt\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003egitui\u003c/strong\u003e - Fast git TUI written in Rust. See \u003ca href=\"/gitui/\" class=\"wikilink\" data-title=\"gitui\" data-description=\"gitui - a blazing-fast terminal UI for git\" data-date=\"2026-02-07\"\u003egitui\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003elazygit\u003c/strong\u003e - Alternative git UI. See \u003ca href=\"/lazygit/\" class=\"wikilink\" data-title=\"Lazygit\" data-description=\"Lazygit - a simple terminal UI for git commands\" data-date=\"2026-02-07\"\u003eLazygit\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003elf\u003c/strong\u003e - Fast terminal file manager. See \u003ca href=\"/lf/\" class=\"wikilink\" data-title=\"lf\" data-description=\"lf - a terminal file manager written in Go\" data-date=\"2026-02-07\"\u003elf\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eyazi\u003c/strong\u003e - Alternative file manager with async I/O. See \u003ca href=\"/yazi/\" class=\"wikilink\" data-title=\"Yazi\" data-description=\"Yazi - a terminal file manager\" data-date=\"2026-02-07\"\u003eYazi\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"python\"\u003ePython \u003ca href=\"#python\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003euv\u003c/strong\u003e - Fast, all-in-one Python packaging and dependency management\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eruff\u003c/strong\u003e - Fast Python linter and formatter\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003epytest\u003c/strong\u003e - Testing without complexity\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"hardware\"\u003eHardware \u003ca href=\"#hardware\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e(Add specific hardware recommendations if desired)\u003c/em\u003e\u003c/p\u003e\n\u003ch2 id=\"workflows\"\u003eWorkflows \u003ca href=\"#workflows\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eKeyboard-driven everything\u003c/strong\u003e - Minimize mouse usage\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWin+num workspace switching\u003c/strong\u003e - Instant access to any workspace\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDotfiles in git\u003c/strong\u003e - Version control everything\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eContainers for isolation\u003c/strong\u003e - Keep host system clean\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDocumentation as code\u003c/strong\u003e - Write it down, automate it\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eVanilla JS\u003c/strong\u003e - Prefer simple over complex build pipelines\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"development-approach\"\u003eDevelopment Approach \u003ca href=\"#development-approach\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"javascriptfrontend\"\u003eJavaScript/Frontend \u003ca href=\"#javascriptfrontend\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eVanilla JavaScript\u003c/strong\u003e - No build step, no dependencies when possible\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCDN libraries\u003c/strong\u003e - Alpine.js, htmx, or similar via script tag\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAvoid heavy frameworks\u003c/strong\u003e - No webpack, no deep node_modules trees\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eProgressive enhancement\u003c/strong\u003e - Start simple, add complexity only when needed\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"python-1\"\u003ePython \u003ca href=\"#python-1\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003euv\u003c/strong\u003e - For all dependency management and virtual environments\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003epyproject.toml\u003c/strong\u003e - Modern Python packaging standard\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSimple structure\u003c/strong\u003e - Flat is better than nested\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eType hints\u003c/strong\u003e - For code clarity without ceremony\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"principles\"\u003ePrinciples \u003ca href=\"#principles\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOpen source over proprietary when possible\u003c/li\u003e\n\u003cli\u003eSimple over complex\u003c/li\u003e\n\u003cli\u003eFast over feature-rich\u003c/li\u003e\n\u003cli\u003eKeyboard over mouse\u003c/li\u003e\n\u003cli\u003eText over GUI\u003c/li\u003e\n\u003cli\u003eVanilla over framework when feasible\u003c/li\u003e\n\u003cli\u003eOne tool that does it well over many tools\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eSee \u003ca href=\"/nope/\" class=\"wikilink\" data-title=\"Nope\" data-description=\"Things I avoid and do not recommend\" data-date=\"2026-02-07\"\u003eNope\u003c/a\u003e for things I avoid.\u003c/p\u003e\n",
      "content_text": "\nThings I use, recommend, and endorse without reservation.\n\n## Software\n\n### Development\n\n- **Neovim** - Modern vim. Fast, extensible, powerful. See \u003ca href=\"/neovim/\" class=\"wikilink\" data-title=\"Neovim Configuration\" data-description=\"Neovim configuration with lazy.nvim for plugin management\" data-date=\"2026-02-07\"\u003eNeovim Configuration\u003c/a\u003e\n- **tmux** - Terminal multiplexer that changed how I work. See \u003ca href=\"/tmux/\" class=\"wikilink\" data-title=\"tmux Configuration\" data-description=\"tmux configuration for persistent terminal sessions with popup windows and session management\" data-date=\"2026-02-07\"\u003etmux Configuration\u003c/a\u003e\n- **zsh** - Best shell experience with the right plugins. See \u003ca href=\"/zsh/\" class=\"wikilink\" data-title=\"zsh Configuration\" data-description=\"zsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\" data-date=\"2026-02-07\"\u003ezsh Configuration\u003c/a\u003e\n- **mise** - One tool to manage all dev tool versions. See \u003ca href=\"/mise/\" class=\"wikilink\" data-title=\"mise Tool Management\" data-description=\"mise - the universal version manager for development tools\" data-date=\"2026-02-07\"\u003emise Tool Management\u003c/a\u003e\n- **fzf** - Fuzzy finding that integrates everywhere. See \u003ca href=\"/fzf/\" class=\"wikilink\" data-title=\"fzf\" data-description=\"fzf - a command-line fuzzy finder\" data-date=\"2026-02-07\"\u003efzf\u003c/a\u003e\n- **git** - Version control done right. See \u003ca href=\"/git/\" class=\"wikilink\" data-title=\"Git Configuration\" data-description=\"Git configuration with aliases, delta for diffs, and work/personal separation\" data-date=\"2026-02-07\"\u003eGit Configuration\u003c/a\u003e\n- **uv** - Python packaging and dependency management done right. See [[uv]]\n\n### Terminal\n\n- **kitty** - GPU-accelerated terminal. See \u003ca href=\"/kitty/\" class=\"wikilink\" data-title=\"kitty Terminal\" data-description=\"kitty - a fast, feature-rich, GPU-based terminal emulator\" data-date=\"2026-02-07\"\u003ekitty Terminal\u003c/a\u003e\n- **wezterm** - Cross-platform and scriptable. See \u003ca href=\"/wezterm/\" class=\"wikilink\" data-title=\"WezTerm\" data-description=\"WezTerm - a GPU-accelerated cross-platform terminal emulator\" data-date=\"2026-02-07\"\u003eWezTerm\u003c/a\u003e\n\n### Window Management\n\n- **Hyprland** - Wayland tiling compositor with excellent workspace support. See \u003ca href=\"/hyprland/\" class=\"wikilink\" data-title=\"Hyprland Window Manager\" data-description=\"Hyprland - a dynamic tiling Wayland compositor\" data-date=\"2026-02-07\"\u003eHyprland Window Manager\u003c/a\u003e\n- **Awesome WM** - When I need X11. See \u003ca href=\"/awesome/\" class=\"wikilink\" data-title=\"Awesome Window Manager\" data-description=\"Awesome WM - a highly configurable X11 window manager\" data-date=\"2026-02-07\"\u003eAwesome Window Manager\u003c/a\u003e\n- **KDE Plasma** - Actually like this DE - great workspace management and keyboard shortcuts\n\nI need window managers with robust workspace hotkeys: win+num to switch, win+shift+num to send apps, win+ctrl+num to join workspaces. Both tiling and floating work fine if the workspace management is solid.\n\n### Utilities\n\n- **atuin** - Shell history that syncs. See \u003ca href=\"/atuin/\" class=\"wikilink\" data-title=\"Atuin\" data-description=\"Atuin - a magical shell history with sync\" data-date=\"2026-02-07\"\u003eAtuin\u003c/a\u003e\n- **starship** - Fast, informative prompt. See \u003ca href=\"/starship/\" class=\"wikilink\" data-title=\"Starship Prompt\" data-description=\"Starship - minimal, fast, and customizable shell prompt\" data-date=\"2026-02-07\"\u003eStarship Prompt\u003c/a\u003e\n- **gitui** - Fast git TUI written in Rust. See \u003ca href=\"/gitui/\" class=\"wikilink\" data-title=\"gitui\" data-description=\"gitui - a blazing-fast terminal UI for git\" data-date=\"2026-02-07\"\u003egitui\u003c/a\u003e\n- **lazygit** - Alternative git UI. See \u003ca href=\"/lazygit/\" class=\"wikilink\" data-title=\"Lazygit\" data-description=\"Lazygit - a simple terminal UI for git commands\" data-date=\"2026-02-07\"\u003eLazygit\u003c/a\u003e\n- **lf** - Fast terminal file manager. See \u003ca href=\"/lf/\" class=\"wikilink\" data-title=\"lf\" data-description=\"lf - a terminal file manager written in Go\" data-date=\"2026-02-07\"\u003elf\u003c/a\u003e\n- **yazi** - Alternative file manager with async I/O. See \u003ca href=\"/yazi/\" class=\"wikilink\" data-title=\"Yazi\" data-description=\"Yazi - a terminal file manager\" data-date=\"2026-02-07\"\u003eYazi\u003c/a\u003e\n\n### Python\n\n- **uv** - Fast, all-in-one Python packaging and dependency management\n- **ruff** - Fast Python linter and formatter\n- **pytest** - Testing without complexity\n\n## Hardware\n\n*(Add specific hardware recommendations if desired)*\n\n## Workflows\n\n- **Keyboard-driven everything** - Minimize mouse usage\n- **Win+num workspace switching** - Instant access to any workspace\n- **Dotfiles in git** - Version control everything\n- **Containers for isolation** - Keep host system clean\n- **Documentation as code** - Write it down, automate it\n- **Vanilla JS** - Prefer simple over complex build pipelines\n\n## Development Approach\n\n### JavaScript/Frontend\n\n- **Vanilla JavaScript** - No build step, no dependencies when possible\n- **CDN libraries** - Alpine.js, htmx, or similar via script tag\n- **Avoid heavy frameworks** - No webpack, no deep node_modules trees\n- **Progressive enhancement** - Start simple, add complexity only when needed\n\n### Python\n\n- **uv** - For all dependency management and virtual environments\n- **pyproject.toml** - Modern Python packaging standard\n- **Simple structure** - Flat is better than nested\n- **Type hints** - For code clarity without ceremony\n\n## Principles\n\n- Open source over proprietary when possible\n- Simple over complex\n- Fast over feature-rich\n- Keyboard over mouse\n- Text over GUI\n- Vanilla over framework when feasible\n- One tool that does it well over many tools\n\nSee \u003ca href=\"/nope/\" class=\"wikilink\" data-title=\"Nope\" data-description=\"Things I avoid and do not recommend\" data-date=\"2026-02-07\"\u003eNope\u003c/a\u003e for things I avoid.\n",
      "summary": "Things I endorse and recommend",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "slash"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/yazi/",
      "url": "https://dots.waylonwalker.com/yazi/",
      "title": "Yazi",
      "content_html": "\u003cp\u003eYazi is a blazing-fast terminal file manager written in Rust with async I/O.\u003c/p\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eAsync I/O\u003c/strong\u003e - Non-blocking file operations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFast\u003c/strong\u003e - Written in Rust, optimized for speed\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePreviews\u003c/strong\u003e - Built-in image, video, and code previews\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCustomizable\u003c/strong\u003e - Keybindings, themes, and plugins\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eIntegration\u003c/strong\u003e - Works with neovim, tmux, shells\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstall via package manager:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Via mise (recommended)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise install yazi\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Or install script\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl --proto \u003cspan class=\"s1\"\u003e\u0026#39;=https\u0026#39;\u003c/span\u003e --tlsv1.2 -sSf https://sh.rustup.rs \u003cspan class=\"p\"\u003e|\u003c/span\u003e sh\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Then cargo install yazi-fm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Arch Linux (AUR)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eyay -S yazi\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"configuration\"\u003eConfiguration \u003ca href=\"#configuration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eConfig directory: \u003ccode\u003e~/.config/yazi/\u003c/code\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eyazi.toml\u003c/code\u003e - General configuration\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ekeymap.toml\u003c/code\u003e - Key bindings\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etheme.toml\u003c/code\u003e - Colors and styling\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"key-bindings\"\u003eKey Bindings \u003ca href=\"#key-bindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"navigation\"\u003eNavigation \u003ca href=\"#navigation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ej/k\u003c/code\u003e or \u003ccode\u003e↓/↑\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMove down/up\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eh/l\u003c/code\u003e or \u003ccode\u003e←/→\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParent/child directory\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egg\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo to top\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eG\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo to bottom\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eH\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eBack in history\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eL\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eForward in history\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"file-operations\"\u003eFile Operations \u003ca href=\"#file-operations\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSpace\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSelect item\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ey\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eYank (copy)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ex\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCut\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ep\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePaste\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ed\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDelete\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eD\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePermanent delete\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003er\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRename\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCreate file\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eA\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCreate directory\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEnter\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOpen file\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eo\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOpen with specific app\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"view\"\u003eView \u003ca href=\"#view\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eTab\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSwitch panel\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e~\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo to home\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e.\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle hidden files\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003es\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSearch files\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eS\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSearch contents\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e/\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFilter items\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ez\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eJump to directory\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ec\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCopy path\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"shell-integration\"\u003eShell Integration \u003ca href=\"#shell-integration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAdd to \u003ccode\u003e~/.zshrc\u003c/code\u003e:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efunction\u003c/span\u003e yy\u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003elocal\u003c/span\u003e \u003cspan class=\"nv\"\u003etmp\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003emktemp -t \u003cspan class=\"s2\"\u003e\u0026#34;yazi-cwd.XXXXXX\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    yazi \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$@\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e --cwd-file\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$tmp\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"nv\"\u003ecwd\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003ecat -- \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$tmp\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -n \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$cwd\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$cwd\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e !\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PWD\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003ecd\u003c/span\u003e -- \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$cwd\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    rm -f -- \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$tmp\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThen use \u003ccode\u003eyy\u003c/code\u003e to launch yazi and automatically cd to the last visited directory on exit.\u003c/p\u003e\n\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/neovim/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNeovim Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNeovim configuration with lazy.nvim for plugin management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ezsh Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://yazi-rs.github.io/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://yazi-rs.github.io/webp/docusaurus-social-card.wbep\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eYazi\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBlazing fast terminal file manager written in Rust, based on async I/O.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eyazi-rs.github.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nYazi is a blazing-fast terminal file manager written in Rust with async I/O.\n\n## Features\n\n- **Async I/O** - Non-blocking file operations\n- **Fast** - Written in Rust, optimized for speed\n- **Previews** - Built-in image, video, and code previews\n- **Customizable** - Keybindings, themes, and plugins\n- **Integration** - Works with neovim, tmux, shells\n\n## Setup\n\nInstall via package manager:\n\n```bash\n# Via mise (recommended)\nmise install yazi\n\n# Or install script\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n# Then cargo install yazi-fm\n\n# Arch Linux (AUR)\nyay -S yazi\n```\n\n## Configuration\n\nConfig directory: `~/.config/yazi/`\n\n- `yazi.toml` - General configuration\n- `keymap.toml` - Key bindings\n- `theme.toml` - Colors and styling\n\n## Key Bindings\n\n### Navigation\n\n| Key | Action |\n|-----|--------|\n| `j/k` or `↓/↑` | Move down/up |\n| `h/l` or `←/→` | Parent/child directory |\n| `gg` | Go to top |\n| `G` | Go to bottom |\n| `H` | Back in history |\n| `L` | Forward in history |\n\n### File Operations\n\n| Key | Action |\n|-----|--------|\n| `Space` | Select item |\n| `y` | Yank (copy) |\n| `x` | Cut |\n| `p` | Paste |\n| `d` | Delete |\n| `D` | Permanent delete |\n| `r` | Rename |\n| `a` | Create file |\n| `A` | Create directory |\n| `Enter` | Open file |\n| `o` | Open with specific app |\n\n### View\n\n| Key | Action |\n|-----|--------|\n| `Tab` | Switch panel |\n| `~` | Go to home |\n| `.` | Toggle hidden files |\n| `s` | Search files |\n| `S` | Search contents |\n| `/` | Filter items |\n| `z` | Jump to directory |\n| `c` | Copy path |\n\n## Shell Integration\n\nAdd to `~/.zshrc`:\n\n```bash\nfunction yy() {\n    local tmp=\"$(mktemp -t \"yazi-cwd.XXXXXX\")\"\n    yazi \"$@\" --cwd-file=\"$tmp\"\n    if cwd=\"$(cat -- \"$tmp\")\" \u0026\u0026 [ -n \"$cwd\" ] \u0026\u0026 [ \"$cwd\" != \"$PWD\" ]; then\n        cd -- \"$cwd\"\n    fi\n    rm -f -- \"$tmp\"\n}\n```\n\nThen use `yy` to launch yazi and automatically cd to the last visited directory on exit.\n\n## See Also\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/neovim/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNeovim Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNeovim configuration with lazy.nvim for plugin management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ezsh Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://yazi-rs.github.io/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://yazi-rs.github.io/webp/docusaurus-social-card.wbep\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eYazi\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBlazing fast terminal file manager written in Rust, based on async I/O.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eyazi-rs.github.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Yazi - a terminal file manager",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/workspace/",
      "url": "https://dots.waylonwalker.com/workspace/",
      "title": "Workspace Script",
      "content_html": "\u003cp\u003eA custom workspace management script that automates tmux session creation and management for organized project development.\u003c/p\u003e\n\u003ch2 id=\"overview\"\u003eOverview \u003ca href=\"#overview\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe workspace script provides automated tmux session management, making it easy to:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCreate organized session groups\u003c/li\u003e\n\u003cli\u003eQuickly switch between projects\u003c/li\u003e\n\u003cli\u003eMaintain consistent development environments\u003c/li\u003e\n\u003cli\u003eSync workspace configuration across machines\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"location\"\u003eLocation \u003ca href=\"#location\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre\u003e\u003ccode\u003e~/git/workspaces/workspaces.py\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGit repository discovery\u003c/strong\u003e - Automatically find repos in workspace directories\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSession groups\u003c/strong\u003e - Organize related projects\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eQuick attach\u003c/strong\u003e - Fast switching between workspaces\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eConfiguration sync\u003c/strong\u003e - Keep workspace definitions in version control\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"usage\"\u003eUsage \u003ca href=\"#usage\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"basic-commands\"\u003eBasic Commands \u003ca href=\"#basic-commands\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Attach to workspace (creates if needed)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e~/git/workspaces/workspaces.py -W git attach\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create new workspace\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e~/git/workspaces/workspaces.py -W git create\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Add current repo to workspace\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e~/git/workspaces/workspaces.py -W git add\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"from-tmux\"\u003eFrom tmux \u003ca href=\"#from-tmux\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eThe script integrates with tmux keybindings:\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+Space\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAttach to workspace\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+T\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAttach to workspace in current directory\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+Escape\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCreate new workspace\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+Backspace\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAdd repo to workspace\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"how-it-works\"\u003eHow It Works \u003ca href=\"#how-it-works\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eDiscovers repositories\u003c/strong\u003e - Scans configured directories for git repos\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCreates sessions\u003c/strong\u003e - Generates tmux sessions with standardized layouts\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eManages windows\u003c/strong\u003e - Each repo gets its own window or layout\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSyncs config\u003c/strong\u003e - Stores workspace definitions in git-tracked files\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"configuration\"\u003eConfiguration \u003ca href=\"#configuration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWorkspaces are defined in:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e~/.config/workspaces/config.toml\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eworkspaces\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003egit\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003epath\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;~/git\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eauto_discover\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003elayout\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;main-vertical\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eworkspaces\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ework\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003epath\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;~/work\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eauto_discover\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003efalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003erepos\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;project1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;project2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"integration-with-tmux\"\u003eIntegration with tmux \u003ca href=\"#integration-with-tmux\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe script is called from tmux keybindings in \u003ccode\u003e~/.tmux.conf\u003c/code\u003e:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ebind\u003c/span\u003e -n M-Space display-popup -T \u003cspan class=\"s1\"\u003e\u0026#39;attach to workspace\u0026#39;\u003c/span\u003e -E -d \u003cspan class=\"s1\"\u003e\u0026#39;~/git\u0026#39;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;~/git/workspaces/workspaces.py -W git attach\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis creates popup windows for workspace management without leaving your current context.\u003c/p\u003e\n\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/tmux/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etmux Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux configuration for persistent terminal sessions with popup windows and session management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ezsh Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/nvim-telescope/telescope-project.nvim\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/cef280708e0cf0342e3f8c0c8de13142e4b51318e359dff2228822f304c07655/nvim-telescope/telescope-project.nvim\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - nvim-telescope/telescope-project.nvim\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eContribute to nvim-telescope/telescope-project.nvim development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nA custom workspace management script that automates tmux session creation and management for organized project development.\n\n## Overview\n\nThe workspace script provides automated tmux session management, making it easy to:\n\n- Create organized session groups\n- Quickly switch between projects\n- Maintain consistent development environments\n- Sync workspace configuration across machines\n\n## Location\n\n```\n~/git/workspaces/workspaces.py\n```\n\n## Features\n\n- **Git repository discovery** - Automatically find repos in workspace directories\n- **Session groups** - Organize related projects\n- **Quick attach** - Fast switching between workspaces\n- **Configuration sync** - Keep workspace definitions in version control\n\n## Usage\n\n### Basic Commands\n\n```bash\n# Attach to workspace (creates if needed)\n~/git/workspaces/workspaces.py -W git attach\n\n# Create new workspace\n~/git/workspaces/workspaces.py -W git create\n\n# Add current repo to workspace\n~/git/workspaces/workspaces.py -W git add\n```\n\n### From tmux\n\nThe script integrates with tmux keybindings:\n\n| Key | Action |\n|-----|--------|\n| `Alt+Space` | Attach to workspace |\n| `Alt+T` | Attach to workspace in current directory |\n| `Alt+Escape` | Create new workspace |\n| `Alt+Backspace` | Add repo to workspace |\n\n## How It Works\n\n1. **Discovers repositories** - Scans configured directories for git repos\n2. **Creates sessions** - Generates tmux sessions with standardized layouts\n3. **Manages windows** - Each repo gets its own window or layout\n4. **Syncs config** - Stores workspace definitions in git-tracked files\n\n## Configuration\n\nWorkspaces are defined in:\n\n```\n~/.config/workspaces/config.toml\n```\n\nExample:\n\n```toml\n[workspaces.git]\npath = \"~/git\"\nauto_discover = true\nlayout = \"main-vertical\"\n\n[workspaces.work]\npath = \"~/work\"\nauto_discover = false\nrepos = [\"project1\", \"project2\"]\n```\n\n## Integration with tmux\n\nThe script is called from tmux keybindings in `~/.tmux.conf`:\n\n```bash\nbind -n M-Space display-popup -T 'attach to workspace' -E -d '~/git' \"~/git/workspaces/workspaces.py -W git attach\"\n```\n\nThis creates popup windows for workspace management without leaving your current context.\n\n## See Also\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/tmux/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etmux Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux configuration for persistent terminal sessions with popup windows and session management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ezsh Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/nvim-telescope/telescope-project.nvim\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/cef280708e0cf0342e3f8c0c8de13142e4b51318e359dff2228822f304c07655/nvim-telescope/telescope-project.nvim\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - nvim-telescope/telescope-project.nvim\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eContribute to nvim-telescope/telescope-project.nvim development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Workspace script - session management automation for tmux",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/wezterm/",
      "url": "https://dots.waylonwalker.com/wezterm/",
      "title": "WezTerm",
      "content_html": "\u003cp\u003eWezTerm is a GPU-accelerated cross-platform terminal emulator and multiplexer written in Rust.\u003c/p\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eCross-platform\u003c/strong\u003e - Works on Linux, macOS, and Windows\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGPU-accelerated\u003c/strong\u003e - Smooth rendering using OpenGL\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eLua configuration\u003c/strong\u003e - Powerful scripting with Lua\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBuilt-in multiplexer\u003c/strong\u003e - Tabs and panes without external tools\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSSH client\u003c/strong\u003e - Native SSH support with terminal features\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstall via package manager:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Ubuntu/Debian\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Download .deb from GitHub releases\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Arch Linux\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S wezterm\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# macOS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebrew install --cask wezterm\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Windows\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Download from GitHub releases or use winget\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewinget install wez.wezterm\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"configuration\"\u003eConfiguration \u003ca href=\"#configuration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eConfig file: \u003ccode\u003e~/.config/wezterm/wezterm.lua\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eExample configuration:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kd\"\u003elocal\u003c/span\u003e \u003cspan class=\"n\"\u003ewezterm\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erequire\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;wezterm\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kr\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003efont\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ewezterm.font\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;JetBrains Mono\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003efont_size\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mf\"\u003e12.0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecolor_scheme\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;Dracula\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ewindow_background_opacity\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mf\"\u003e0.95\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eenable_tab_bar\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ehide_tab_bar_if_only_one_tab\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"key-bindings\"\u003eKey Bindings \u003ca href=\"#key-bindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+Shift+T\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNew tab\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+Shift+W\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eClose tab\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+Shift+Tab\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNext tab\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+Shift+Enter\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSplit pane vertically\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+Shift+%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSplit pane horizontally\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+Shift+Arrow\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMove between panes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+Shift+Space\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eQuick select mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+Shift+F\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSearch scrollback\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"multiplexer-features\"\u003eMultiplexer Features \u003ca href=\"#multiplexer-features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWezTerm includes a built-in multiplexer that can replace tmux:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e-- Enable multiplexing\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econfig.leader\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"n\"\u003ekey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;a\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emods\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;CTRL\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econfig.keys\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"n\"\u003ekey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;|\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emods\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;LEADER|SHIFT\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eaction\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ewezterm.action\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eSplitHorizontal\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"n\"\u003edomain\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;CurrentPaneDomain\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"n\"\u003ekey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;-\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emods\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;LEADER\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eaction\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ewezterm.action\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eSplitVertical\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"n\"\u003edomain\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;CurrentPaneDomain\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/kitty/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ekitty Terminal\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ekitty - a fast, feature-rich, GPU-based terminal emulator\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/tmux/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etmux Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux configuration for persistent terminal sessions with popup windows and session management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://wezfurlong.org/wezterm/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://wezfurlong.org/assets/images/social/wezterm.png\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWezterm - Wez Furlong\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWez Furlong\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ewezfurlong.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nWezTerm is a GPU-accelerated cross-platform terminal emulator and multiplexer written in Rust.\n\n## Features\n\n- **Cross-platform** - Works on Linux, macOS, and Windows\n- **GPU-accelerated** - Smooth rendering using OpenGL\n- **Lua configuration** - Powerful scripting with Lua\n- **Built-in multiplexer** - Tabs and panes without external tools\n- **SSH client** - Native SSH support with terminal features\n\n## Setup\n\nInstall via package manager:\n\n```bash\n# Ubuntu/Debian\n# Download .deb from GitHub releases\n\n# Arch Linux\nsudo pacman -S wezterm\n\n# macOS\nbrew install --cask wezterm\n\n# Windows\n# Download from GitHub releases or use winget\nwinget install wez.wezterm\n```\n\n## Configuration\n\nConfig file: `~/.config/wezterm/wezterm.lua`\n\nExample configuration:\n\n```lua\nlocal wezterm = require 'wezterm'\n\nreturn {\n    font = wezterm.font 'JetBrains Mono',\n    font_size = 12.0,\n    color_scheme = 'Dracula',\n    window_background_opacity = 0.95,\n    enable_tab_bar = true,\n    hide_tab_bar_if_only_one_tab = true,\n}\n```\n\n## Key Bindings\n\n| Key | Action |\n|-----|--------|\n| `Ctrl+Shift+T` | New tab |\n| `Ctrl+Shift+W` | Close tab |\n| `Ctrl+Shift+Tab` | Next tab |\n| `Ctrl+Shift+Enter` | Split pane vertically |\n| `Ctrl+Shift+%` | Split pane horizontally |\n| `Ctrl+Shift+Arrow` | Move between panes |\n| `Ctrl+Shift+Space` | Quick select mode |\n| `Ctrl+Shift+F` | Search scrollback |\n\n## Multiplexer Features\n\nWezTerm includes a built-in multiplexer that can replace tmux:\n\n```lua\n-- Enable multiplexing\nconfig.leader = { key = 'a', mods = 'CTRL' }\nconfig.keys = {\n    { key = '|', mods = 'LEADER|SHIFT', action = wezterm.action.SplitHorizontal { domain = 'CurrentPaneDomain' } },\n    { key = '-', mods = 'LEADER', action = wezterm.action.SplitVertical { domain = 'CurrentPaneDomain' } },\n}\n```\n\n## See Also\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/kitty/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ekitty Terminal\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ekitty - a fast, feature-rich, GPU-based terminal emulator\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/tmux/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etmux Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux configuration for persistent terminal sessions with popup windows and session management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://wezfurlong.org/wezterm/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://wezfurlong.org/assets/images/social/wezterm.png\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWezterm - Wez Furlong\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWez Furlong\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ewezfurlong.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "WezTerm - a GPU-accelerated cross-platform terminal emulator",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/waybar/",
      "url": "https://dots.waylonwalker.com/waybar/",
      "title": "Waybar",
      "content_html": "\u003cp\u003eWaybar is a highly customizable Wayland bar for Sway and other wlroots-based compositors.\u003c/p\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eWayland native\u003c/strong\u003e - No XWayland needed\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCSS styling\u003c/strong\u003e - Full CSS3 support for theming\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eModular\u003c/strong\u003e - Use only the modules you need\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCustom scripts\u003c/strong\u003e - Display any information via custom modules\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSystem tray\u003c/strong\u003e - Support for tray icons\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstall via package manager:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Ubuntu/Debian\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install waybar\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Arch Linux\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S waybar\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Fedora\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo dnf install waybar\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"configuration\"\u003eConfiguration \u003ca href=\"#configuration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eConfig file: \u003ccode\u003e~/.config/waybar/config\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eExample configuration:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;layer\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;top\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;position\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;top\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;height\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e30\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;modules-left\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;sway/workspaces\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;sway/mode\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;modules-center\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;sway/window\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;modules-right\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;pulseaudio\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;network\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;cpu\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;memory\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;battery\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;clock\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;tray\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;sway/workspaces\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;format\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;{name}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;clock\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;format\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;{:%Y-%m-%d %H:%M}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;battery\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;format\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;{capacity}% {icon}\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;format-icons\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"styling\"\u003eStyling \u003ca href=\"#styling\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eStyle file: \u003ccode\u003e~/.config/waybar/style.css\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eExample styling:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efont-family\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;JetBrains Mono\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kc\"\u003esans-serif\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efont-size\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e13\u003c/span\u003e\u003cspan class=\"kt\"\u003epx\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003ewindow\u003c/span\u003e\u003cspan class=\"p\"\u003e#\u003c/span\u003e\u003cspan class=\"nn\"\u003ewaybar\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ebackground-color\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#1e1e2e\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#cdd6f4\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e#\u003c/span\u003e\u003cspan class=\"nn\"\u003eworkspaces\u003c/span\u003e \u003cspan class=\"nt\"\u003ebutton\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003epadding\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e \u003cspan class=\"mi\"\u003e10\u003c/span\u003e\u003cspan class=\"kt\"\u003epx\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ecolor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#cdd6f4\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e#\u003c/span\u003e\u003cspan class=\"nn\"\u003eworkspaces\u003c/span\u003e \u003cspan class=\"nt\"\u003ebutton\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003efocused\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ebackground-color\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mh\"\u003e#313244\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e#\u003c/span\u003e\u003cspan class=\"nn\"\u003eclock\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003epadding\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e \u003cspan class=\"mi\"\u003e10\u003c/span\u003e\u003cspan class=\"kt\"\u003epx\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"common-modules\"\u003eCommon Modules \u003ca href=\"#common-modules\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclock\u003c/strong\u003e - Date and time\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebattery\u003c/strong\u003e - Battery status\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecpu\u003c/strong\u003e - CPU usage\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ememory\u003c/strong\u003e - RAM usage\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003enetwork\u003c/strong\u003e - Network status\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003epulseaudio\u003c/strong\u003e - Volume control\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etray\u003c/strong\u003e - System tray\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eworkspaces\u003c/strong\u003e - Workspace tags\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ewindow\u003c/strong\u003e - Active window title\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecustom\u003c/strong\u003e - Custom scripts\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"custom-module-example\"\u003eCustom Module Example \u003ca href=\"#custom-module-example\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;custom/weather\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;format\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;{}\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;exec\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;curl -s wttr.in/?format=1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;interval\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e3600\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/hyprland/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHyprland Window Manager\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHyprland - a dynamic tiling Wayland compositor\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/polybar/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePolybar\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePolybar - a fast and easy-to-use status bar for X11\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/Alexays/Waybar\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/2f72d8ff8e79b72c9177bb65cd265b57145ced504d5310b2e47d16119349b8ef/Alexays/Waybar\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - Alexays/Waybar: Highly customizable Wayland bar for Sway and Wlroots based compositors. :tada:\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHighly customizable Wayland bar for Sway and Wlroots based compositors. :v: :tada: - GitHub - Alexays/Waybar: Highly customizable Wayland bar for Sway and Wlroots based compositors. :tada:\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nWaybar is a highly customizable Wayland bar for Sway and other wlroots-based compositors.\n\n## Features\n\n- **Wayland native** - No XWayland needed\n- **CSS styling** - Full CSS3 support for theming\n- **Modular** - Use only the modules you need\n- **Custom scripts** - Display any information via custom modules\n- **System tray** - Support for tray icons\n\n## Setup\n\nInstall via package manager:\n\n```bash\n# Ubuntu/Debian\nsudo apt install waybar\n\n# Arch Linux\nsudo pacman -S waybar\n\n# Fedora\nsudo dnf install waybar\n```\n\n## Configuration\n\nConfig file: `~/.config/waybar/config`\n\nExample configuration:\n\n```json\n{\n    \"layer\": \"top\",\n    \"position\": \"top\",\n    \"height\": 30,\n    \"modules-left\": [\"sway/workspaces\", \"sway/mode\"],\n    \"modules-center\": [\"sway/window\"],\n    \"modules-right\": [\"pulseaudio\", \"network\", \"cpu\", \"memory\", \"battery\", \"clock\", \"tray\"],\n    \n    \"sway/workspaces\": {\n        \"format\": \"{name}\"\n    },\n    \n    \"clock\": {\n        \"format\": \"{:%Y-%m-%d %H:%M}\"\n    },\n    \n    \"battery\": {\n        \"format\": \"{capacity}% {icon}\",\n        \"format-icons\": [\"\", \"\", \"\", \"\", \"\"]\n    }\n}\n```\n\n## Styling\n\nStyle file: `~/.config/waybar/style.css`\n\nExample styling:\n\n```css\n* {\n    font-family: \"JetBrains Mono\", sans-serif;\n    font-size: 13px;\n}\n\nwindow#waybar {\n    background-color: #1e1e2e;\n    color: #cdd6f4;\n}\n\n#workspaces button {\n    padding: 0 10px;\n    color: #cdd6f4;\n}\n\n#workspaces button.focused {\n    background-color: #313244;\n}\n\n#clock {\n    padding: 0 10px;\n}\n```\n\n## Common Modules\n\n- **clock** - Date and time\n- **battery** - Battery status\n- **cpu** - CPU usage\n- **memory** - RAM usage\n- **network** - Network status\n- **pulseaudio** - Volume control\n- **tray** - System tray\n- **workspaces** - Workspace tags\n- **window** - Active window title\n- **custom** - Custom scripts\n\n## Custom Module Example\n\n```json\n\"custom/weather\": {\n    \"format\": \"{}\",\n    \"exec\": \"curl -s wttr.in/?format=1\",\n    \"interval\": 3600\n}\n```\n\n## See Also\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/hyprland/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHyprland Window Manager\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHyprland - a dynamic tiling Wayland compositor\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/polybar/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePolybar\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePolybar - a fast and easy-to-use status bar for X11\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/Alexays/Waybar\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/2f72d8ff8e79b72c9177bb65cd265b57145ced504d5310b2e47d16119349b8ef/Alexays/Waybar\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - Alexays/Waybar: Highly customizable Wayland bar for Sway and Wlroots based compositors. :tada:\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHighly customizable Wayland bar for Sway and Wlroots based compositors. :v: :tada: - GitHub - Alexays/Waybar: Highly customizable Wayland bar for Sway and Wlroots based compositors. :tada:\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Waybar - a highly customizable Wayland bar",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/uses/",
      "url": "https://dots.waylonwalker.com/uses/",
      "title": "Uses",
      "content_html": "\u003cp\u003eThis is my setup - the hardware and software I use every day for development.\u003c/p\u003e\n\u003ch2 id=\"hardware\"\u003eHardware \u003ca href=\"#hardware\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"development-machine\"\u003eDevelopment Machine \u003ca href=\"#development-machine\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003e\u003cem\u003e(Update with your actual specs)\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eCPU\u003c/strong\u003e: AMD Ryzen or Intel\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRAM\u003c/strong\u003e: 32GB+\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStorage\u003c/strong\u003e: NVMe SSD\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGPU\u003c/strong\u003e: Integrated or dedicated for external displays\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDisplays\u003c/strong\u003e: Multiple monitors for productivity\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"peripherals\"\u003ePeripherals \u003ca href=\"#peripherals\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eKeyboard\u003c/strong\u003e: Mechanical with custom layout\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMouse\u003c/strong\u003e: Trackball or ergonomic mouse (used minimally)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWebcam\u003c/strong\u003e: For video calls\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMicrophone\u003c/strong\u003e: For recording and calls\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"mobile\"\u003eMobile \u003ca href=\"#mobile\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003e\u003cem\u003e(Update with your actual devices)\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePhone\u003c/strong\u003e: Android or iOS\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTablet\u003c/strong\u003e: For reading and media\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"software-stack\"\u003eSoftware Stack \u003ca href=\"#software-stack\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"operating-system\"\u003eOperating System \u003ca href=\"#operating-system\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eOS\u003c/strong\u003e: Arch Linux\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWindow Manager\u003c/strong\u003e: Hyprland (Wayland)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTerminal\u003c/strong\u003e: kitty\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eShell\u003c/strong\u003e: zsh with starship prompt\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"development-environment\"\u003eDevelopment Environment \u003ca href=\"#development-environment\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eEditor\u003c/strong\u003e: Neovim (lazy.nvim based config)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMultiplexer\u003c/strong\u003e: tmux\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eVersion Control\u003c/strong\u003e: git with delta and gitui\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTool Manager\u003c/strong\u003e: mise\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eContainer\u003c/strong\u003e: podman\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"daily-tools\"\u003eDaily Tools \u003ca href=\"#daily-tools\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eBrowser\u003c/strong\u003e: Brave\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePassword Manager\u003c/strong\u003e: Bitwarden\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNotes\u003c/strong\u003e: Markdown files in git\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eChat\u003c/strong\u003e: Signal\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMusic\u003c/strong\u003e: Streaming service\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"cli-tools\"\u003eCLI Tools \u003ca href=\"#cli-tools\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eEssential command-line tools:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003efzf\u003c/code\u003e - Fuzzy finder\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eripgrep\u003c/code\u003e - Fast code search\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efd\u003c/code\u003e - Fast file finder\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ebat\u003c/code\u003e - Syntax-highlighting cat\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eeza\u003c/code\u003e - Modern ls replacement\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ezoxide\u003c/code\u003e - Smart cd command\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eatuin\u003c/code\u003e - Shell history\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elf\u003c/code\u003e - File manager (primary)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eyazi\u003c/code\u003e - Alternative file manager\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"neovim-plugins\"\u003eNeovim Plugins \u003ca href=\"#neovim-plugins\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eKey plugins I rely on:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003elazy.nvim - Plugin manager\u003c/li\u003e\n\u003cli\u003etelescope.nvim - Fuzzy finder\u003c/li\u003e\n\u003cli\u003envim-lspconfig - LSP support\u003c/li\u003e\n\u003cli\u003envim-treesitter - Syntax highlighting\u003c/li\u003e\n\u003cli\u003egitsigns.nvim - Git integration\u003c/li\u003e\n\u003cli\u003elualine.nvim - Status line\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"dotfiles-management\"\u003eDotfiles Management \u003ca href=\"#dotfiles-management\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAll configurations are in the devtainer repository:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit clone https://github.com/waylonwalker/devtainer.git ~/devtainer\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eInstalled via symlinks or stow.\u003c/p\u003e\n\u003ch2 id=\"workflow\"\u003eWorkflow \u003ca href=\"#workflow\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003eTerminal (kitty) always open with tmux\u003c/li\u003e\n\u003cli\u003eNeovim for all editing\u003c/li\u003e\n\u003cli\u003eBrowser for research and documentation\u003c/li\u003e\n\u003cli\u003eGit for version control\u003c/li\u003e\n\u003cli\u003eContainers for isolated environments\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"inspiration\"\u003eInspiration \u003ca href=\"#inspiration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis /uses page is inspired by \u003ca href=\"https://uses.tech/\"\u003euses.tech\u003c/a\u003e - a collection of developer setups.\u003c/p\u003e\n\u003cp\u003eSee \u003ca href=\"/defaults/\" class=\"wikilink\" data-title=\"Defaults\" data-description=\"My default choices for tools and technologies\" data-date=\"2026-02-07\"\u003eDefaults\u003c/a\u003e for my default tool choices when starting new projects.\u003c/p\u003e\n",
      "content_text": "\nThis is my setup - the hardware and software I use every day for development.\n\n## Hardware\n\n### Development Machine\n\n*(Update with your actual specs)*\n\n- **CPU**: AMD Ryzen or Intel\n- **RAM**: 32GB+\n- **Storage**: NVMe SSD\n- **GPU**: Integrated or dedicated for external displays\n- **Displays**: Multiple monitors for productivity\n\n### Peripherals\n\n- **Keyboard**: Mechanical with custom layout\n- **Mouse**: Trackball or ergonomic mouse (used minimally)\n- **Webcam**: For video calls\n- **Microphone**: For recording and calls\n\n### Mobile\n\n*(Update with your actual devices)*\n\n- **Phone**: Android or iOS\n- **Tablet**: For reading and media\n\n## Software Stack\n\n### Operating System\n\n- **OS**: Arch Linux\n- **Window Manager**: Hyprland (Wayland)\n- **Terminal**: kitty\n- **Shell**: zsh with starship prompt\n\n### Development Environment\n\n- **Editor**: Neovim (lazy.nvim based config)\n- **Multiplexer**: tmux\n- **Version Control**: git with delta and gitui\n- **Tool Manager**: mise\n- **Container**: podman\n\n### Daily Tools\n\n- **Browser**: Brave\n- **Password Manager**: Bitwarden\n- **Notes**: Markdown files in git\n- **Chat**: Signal\n- **Music**: Streaming service\n\n### CLI Tools\n\nEssential command-line tools:\n\n- `fzf` - Fuzzy finder\n- `ripgrep` - Fast code search\n- `fd` - Fast file finder\n- `bat` - Syntax-highlighting cat\n- `eza` - Modern ls replacement\n- `zoxide` - Smart cd command\n- `atuin` - Shell history\n- `lf` - File manager (primary)\n- `yazi` - Alternative file manager\n\n### Neovim Plugins\n\nKey plugins I rely on:\n\n- lazy.nvim - Plugin manager\n- telescope.nvim - Fuzzy finder\n- nvim-lspconfig - LSP support\n- nvim-treesitter - Syntax highlighting\n- gitsigns.nvim - Git integration\n- lualine.nvim - Status line\n\n## Dotfiles Management\n\nAll configurations are in the devtainer repository:\n\n```bash\ngit clone https://github.com/waylonwalker/devtainer.git ~/devtainer\n```\n\nInstalled via symlinks or stow.\n\n## Workflow\n\n1. Terminal (kitty) always open with tmux\n2. Neovim for all editing\n3. Browser for research and documentation\n4. Git for version control\n5. Containers for isolated environments\n\n## Inspiration\n\nThis /uses page is inspired by [uses.tech](https://uses.tech/) - a collection of developer setups.\n\nSee \u003ca href=\"/defaults/\" class=\"wikilink\" data-title=\"Defaults\" data-description=\"My default choices for tools and technologies\" data-date=\"2026-02-07\"\u003eDefaults\u003c/a\u003e for my default tool choices when starting new projects.\n",
      "summary": "Hardware and software I use daily",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "slash"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tmux/",
      "url": "https://dots.waylonwalker.com/tmux/",
      "title": "tmux Configuration",
      "content_html": "\u003cp\u003etmux is a terminal multiplexer that lets you switch easily between several\nprograms in one terminal, detach them (they keep running in the background) and\nreattach them to a different terminal.\u003c/p\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePopup windows\u003c/strong\u003e - Quick access to sessions and tools without leaving current\ncontext\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSession management\u003c/strong\u003e - Easy switching between projects\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eVi mode\u003c/strong\u003e - Familiar keybindings for copy mode\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMinimal status bar\u003c/strong\u003e - Hidden by default, toggle when needed\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"installation\"\u003eInstallation \u003ca href=\"#installation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eInstall via mise:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise install tmux\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOr your package manager:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Ubuntu/Debian\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install tmux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Arch Linux\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S tmux\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"configuration\"\u003eConfiguration \u003ca href=\"#configuration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eThe config file is \u003ccode\u003e~/.tmux.conf\u003c/code\u003e. Main settings:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Vi mode for copy/paste\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esetw -g mode-keys vi\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Don\u0026#39;t detach on destroy\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eset-option -g detach-on-destroy off\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Focus events for nvim integration\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eset-option -g focus-events on\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Hidden status bar by default\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eset-option -g status off\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"key-bindings\"\u003eKey Bindings \u003ca href=\"#key-bindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"prefix\"\u003ePrefix \u003ca href=\"#prefix\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eThe prefix key is \u003ccode\u003eCtrl+Space\u003c/code\u003e (custom):\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ebind\u003c/span\u003e Space send-prefix\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"session-management\"\u003eSession Management \u003ca href=\"#session-management\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+Space\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: attach to workspace session\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+T\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: attach to workspace in current directory\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+Escape\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: create new workspace\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+Backspace\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: add repo to workspace\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+J\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: switch to any session with fzf\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+G\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: open scratch session\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+Shift+G\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: open scratch session (large)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+K\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: kill sessions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eJ\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003etmux session tree browser\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"copy-mode\"\u003eCopy Mode \u003ca href=\"#copy-mode\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+[\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEnter copy mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+V\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEnter copy mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+Enter\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEnter copy mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEnter\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEnter copy mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eCopy uses \u003ccode\u003ewl-copy\u003c/code\u003e on Wayland or \u003ccode\u003exclip\u003c/code\u003e on X11.\u003c/p\u003e\n\u003ch3 id=\"status-bar\"\u003eStatus Bar \u003ca href=\"#status-bar\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ePrefix+s\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle status bar\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ePrefix+Ctrl+S\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle status bar\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"git-integration\"\u003eGit Integration \u003ca href=\"#git-integration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+F\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: git commit --verbose\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+Shift+F\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: gitui\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"workspaces\"\u003eWorkspaces \u003ca href=\"#workspaces\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+W\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: attach to ~/work\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+W\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: attach to ~/work\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+G\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: attach to ~/git\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+P\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePopup: attach to ~/project\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+T\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNew session: todo list in nvim\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"popup-windows\"\u003ePopup Windows \u003ca href=\"#popup-windows\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003ePopups are a key feature - they let you access tools without leaving your\ncurrent context:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Example: switch sessions without leaving current window\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ebind\u003c/span\u003e C-j display-popup -E \u003cspan class=\"s2\"\u003e\u0026#34;\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    tmux list-sessions -F \u0026#39;#{?session_attached,,#{session_name}}\u0026#39; |\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    sed \u0026#39;/^\u003c/span\u003e$\u003cspan class=\"s2\"\u003e/d\u0026#39; |\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    fzf --reverse --header jump-to-session --preview \u0026#39;tmux capture-pane -pt {}\u0026#39; \\\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e        --bind \u0026#39;enter:execute(tmux switch-client -t {})+accept\u0026#39;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"workflows\"\u003eWorkflows \u003ca href=\"#workflows\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"project-hopping\"\u003eProject Hopping \u003ca href=\"#project-hopping\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003e\u003ccode\u003eAlt+Space\u003c/code\u003e to see all workspace sessions\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCtrl+J\u003c/code\u003e to fuzzy-find any session\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eAlt+G\u003c/code\u003e for a quick scratch pad\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"git-workflow\"\u003eGit Workflow \u003ca href=\"#git-workflow\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003e\u003ccode\u003eAlt+F\u003c/code\u003e to write a commit message in a popup\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eAlt+Shift+F\u003c/code\u003e for full gitui when needed\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"todo-management\"\u003eTodo Management \u003ca href=\"#todo-management\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003e\u003ccode\u003eCtrl+T\u003c/code\u003e opens a dedicated todo session with three files:\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ebacklog.md\u003c/code\u003e - Things to do eventually\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edoing.md\u003c/code\u003e - Currently working on\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edone.md\u003c/code\u003e - Completed tasks\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"clipboard-integration\"\u003eClipboard Integration \u003ca href=\"#clipboard-integration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eCopy mode automatically integrates with system clipboard:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ebind\u003c/span\u003e -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel \u003cspan class=\"se\"\u003e\\\\\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;bash -c \u0026#39;command -v wl-copy \u0026gt;/dev/null \u0026amp;\u0026amp; wl-copy || \\\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e    xclip -i -f -selection primary | xclip -i -selection clipboard\u0026#39;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zellij/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eZellij\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eZellij - a terminal workspace with batteries included\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ezsh Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/workspace/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWorkspace Script\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWorkspace script - session management automation for tmux\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/tmux/tmux/wiki\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/4af025f64a340cae98c16826e770e0bf1f432116ea30a380012ada618cfa678b/tmux/tmux\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHome\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux source code. Contribute to tmux/tmux development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\ntmux is a terminal multiplexer that lets you switch easily between several\nprograms in one terminal, detach them (they keep running in the background) and\nreattach them to a different terminal.\n\n## Features\n\n- **Popup windows** - Quick access to sessions and tools without leaving current\n  context\n- **Session management** - Easy switching between projects\n- **Vi mode** - Familiar keybindings for copy mode\n- **Minimal status bar** - Hidden by default, toggle when needed\n\n## Setup\n\n### Installation\n\nInstall via mise:\n\n```bash\nmise install tmux\n```\n\nOr your package manager:\n\n```bash\n# Ubuntu/Debian\nsudo apt install tmux\n\n# Arch Linux\nsudo pacman -S tmux\n```\n\n### Configuration\n\nThe config file is `~/.tmux.conf`. Main settings:\n\n```bash\n# Vi mode for copy/paste\nsetw -g mode-keys vi\n\n# Don't detach on destroy\nset-option -g detach-on-destroy off\n\n# Focus events for nvim integration\nset-option -g focus-events on\n\n# Hidden status bar by default\nset-option -g status off\n```\n\n## Key Bindings\n\n### Prefix\n\nThe prefix key is `Ctrl+Space` (custom):\n\n```bash\nbind Space send-prefix\n```\n\n### Session Management\n\n| Key | Action |\n|-----|--------|\n| `Alt+Space` | Popup: attach to workspace session |\n| `Alt+T` | Popup: attach to workspace in current directory |\n| `Alt+Escape` | Popup: create new workspace |\n| `Alt+Backspace` | Popup: add repo to workspace |\n| `Ctrl+J` | Popup: switch to any session with fzf |\n| `Alt+G` | Popup: open scratch session |\n| `Alt+Shift+G` | Popup: open scratch session (large) |\n| `Ctrl+K` | Popup: kill sessions |\n| `J` | tmux session tree browser |\n\n### Copy Mode\n\n| Key | Action |\n|-----|--------|\n| `Alt+[` | Enter copy mode |\n| `Alt+V` | Enter copy mode |\n| `Alt+Enter` | Enter copy mode |\n| `Enter` | Enter copy mode |\n\nCopy uses `wl-copy` on Wayland or `xclip` on X11.\n\n### Status Bar\n\n| Key | Action |\n|-----|--------|\n| `Prefix+s` | Toggle status bar |\n| `Prefix+Ctrl+S` | Toggle status bar |\n\n### Git Integration\n\n| Key | Action |\n|-----|--------|\n| `Alt+F` | Popup: git commit --verbose |\n| `Alt+Shift+F` | Popup: gitui |\n\n### Workspaces\n\n| Key | Action |\n|-----|--------|\n| `Ctrl+W` | Popup: attach to ~/work |\n| `Alt+W` | Popup: attach to ~/work |\n| `Ctrl+G` | Popup: attach to ~/git |\n| `Ctrl+P` | Popup: attach to ~/project |\n| `Ctrl+T` | New session: todo list in nvim |\n\n## Popup Windows\n\nPopups are a key feature - they let you access tools without leaving your\ncurrent context:\n\n```bash\n# Example: switch sessions without leaving current window\nbind C-j display-popup -E \"\\\n    tmux list-sessions -F '#{?session_attached,,#{session_name}}' |\\\n    sed '/^$/d' |\\\n    fzf --reverse --header jump-to-session --preview 'tmux capture-pane -pt {}' \\\\\n        --bind 'enter:execute(tmux switch-client -t {})+accept'\"\n```\n\n## Workflows\n\n### Project Hopping\n\n1. `Alt+Space` to see all workspace sessions\n2. `Ctrl+J` to fuzzy-find any session\n3. `Alt+G` for a quick scratch pad\n\n### Git Workflow\n\n1. `Alt+F` to write a commit message in a popup\n2. `Alt+Shift+F` for full gitui when needed\n\n### Todo Management\n\n1. `Ctrl+T` opens a dedicated todo session with three files:\n   - `backlog.md` - Things to do eventually\n   - `doing.md` - Currently working on\n   - `done.md` - Completed tasks\n\n## Clipboard Integration\n\nCopy mode automatically integrates with system clipboard:\n\n```bash\nbind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel \\\\\n    \"bash -c 'command -v wl-copy \u003e/dev/null \u0026\u0026 wl-copy || \\\\\n    xclip -i -f -selection primary | xclip -i -selection clipboard'\"\n```\n\n## See Also\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zellij/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eZellij\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eZellij - a terminal workspace with batteries included\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ezsh Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/workspace/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWorkspace Script\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWorkspace script - session management automation for tmux\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/tmux/tmux/wiki\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/4af025f64a340cae98c16826e770e0bf1f432116ea30a380012ada618cfa678b/tmux/tmux\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHome\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux source code. Contribute to tmux/tmux development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "tmux configuration for persistent terminal sessions with popup windows and session management",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tmux-session-switching/",
      "url": "https://dots.waylonwalker.com/tmux-session-switching/",
      "title": "tmux Session Switching Demo",
      "content_html": "\u003cp\u003eA demonstration of switching between multiple tmux sessions using Alt+Space and session management commands.\u003c/p\u003e\n\u003ch2 id=\"what-is-shown\"\u003eWhat is Shown \u003ca href=\"#what-is-shown\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMultiple sessions running (dotfiles, project1, work)\u003c/li\u003e\n\u003cli\u003eSwitching between sessions with Alt+Space\u003c/li\u003e\n\u003cli\u003eChecking current session context with pwd\u003c/li\u003e\n\u003cli\u003eListing all active sessions\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"key-takeaway\"\u003eKey Takeaway \u003ca href=\"#key-takeaway\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSession switching allows you to work on multiple projects simultaneously. Switch contexts instantly without losing your place in each project.\u003c/p\u003e\n\u003cp\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\"\u003e\u003csource src=\"/tapes/tmux-session-switching.mp4\" type=\"video/mp4\"\u003etmux session switching demo\u003c/video\u003e\u003c/p\u003e\n\u003ch2 id=\"related\"\u003eRelated \u003ca href=\"#related\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/tmux/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etmux Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux configuration for persistent terminal sessions with popup windows and session management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nA demonstration of switching between multiple tmux sessions using Alt+Space and session management commands.\n\n## What is Shown\n\n- Multiple sessions running (dotfiles, project1, work)\n- Switching between sessions with Alt+Space\n- Checking current session context with pwd\n- Listing all active sessions\n\n## Key Takeaway\n\nSession switching allows you to work on multiple projects simultaneously. Switch contexts instantly without losing your place in each project.\n\n![tmux session switching demo](/tapes/tmux-session-switching.mp4)\n\n## Related\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/tmux/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etmux Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux configuration for persistent terminal sessions with popup windows and session management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Demonstration of tmux session switching workflow for managing multiple projects",
      "image": "/tapes/tmux-session-switching.mp4",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "vhs",
        "demo",
        "tmux"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tmux-scratch-session/",
      "url": "https://dots.waylonwalker.com/tmux-scratch-session/",
      "title": "tmux Scratch Session Demo",
      "content_html": "\u003cp\u003eA demonstration of using tmux scratch sessions for quick notes, experiments, and temporary work without cluttering your main workspace.\u003c/p\u003e\n\u003ch2 id=\"what-is-shown\"\u003eWhat is Shown \u003ca href=\"#what-is-shown\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWorking in a main project session\u003c/li\u003e\n\u003cli\u003eOpening scratch session with Alt+G\u003c/li\u003e\n\u003cli\u003eRunning quick commands in the scratch pad\u003c/li\u003e\n\u003cli\u003eExiting back to the original session\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"key-takeaway\"\u003eKey Takeaway \u003ca href=\"#key-takeaway\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eScratch sessions provide a clean slate for quick experiments. Create one with Alt+G, do your work, then exit back to where you were.\u003c/p\u003e\n\u003cp\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\"\u003e\u003csource src=\"/tapes/tmux-scratch-session.mp4\" type=\"video/mp4\"\u003etmux scratch session demo\u003c/video\u003e\u003c/p\u003e\n\u003ch2 id=\"related\"\u003eRelated \u003ca href=\"#related\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/tmux/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etmux Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux configuration for persistent terminal sessions with popup windows and session management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nA demonstration of using tmux scratch sessions for quick notes, experiments, and temporary work without cluttering your main workspace.\n\n## What is Shown\n\n- Working in a main project session\n- Opening scratch session with Alt+G\n- Running quick commands in the scratch pad\n- Exiting back to the original session\n\n## Key Takeaway\n\nScratch sessions provide a clean slate for quick experiments. Create one with Alt+G, do your work, then exit back to where you were.\n\n![tmux scratch session demo](/tapes/tmux-scratch-session.mp4)\n\n## Related\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/tmux/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etmux Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux configuration for persistent terminal sessions with popup windows and session management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Demonstration of tmux scratch session workflow for quick notes and experiments",
      "image": "/tapes/tmux-scratch-session.mp4",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "vhs",
        "demo",
        "tmux"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tmux-git-project-session/",
      "url": "https://dots.waylonwalker.com/tmux-git-project-session/",
      "title": "tmux Git Project Session Demo",
      "content_html": "\u003cp\u003eA demonstration of creating dedicated tmux sessions for individual git repositories, keeping each project's context isolated.\u003c/p\u003e\n\u003ch2 id=\"what-is-shown\"\u003eWhat is Shown \u003ca href=\"#what-is-shown\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStarting in a git repository\u003c/li\u003e\n\u003cli\u003eCreating a new session named after the project\u003c/li\u003e\n\u003cli\u003eListing all active sessions\u003c/li\u003e\n\u003cli\u003eOpening the editor in the new session context\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"key-takeaway\"\u003eKey Takeaway \u003ca href=\"#key-takeaway\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eDedicated sessions per project keep your workspaces organized. Each git repo gets its own tmux session with the correct working directory.\u003c/p\u003e\n\u003cp\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\"\u003e\u003csource src=\"/tapes/tmux-git-project-session.mp4\" type=\"video/mp4\"\u003etmux git project session demo\u003c/video\u003e\u003c/p\u003e\n\u003ch2 id=\"related\"\u003eRelated \u003ca href=\"#related\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/tmux/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etmux Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux configuration for persistent terminal sessions with popup windows and session management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/git/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGit Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGit configuration with aliases, delta for diffs, and work/personal separation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nA demonstration of creating dedicated tmux sessions for individual git repositories, keeping each project's context isolated.\n\n## What is Shown\n\n- Starting in a git repository\n- Creating a new session named after the project\n- Listing all active sessions\n- Opening the editor in the new session context\n\n## Key Takeaway\n\nDedicated sessions per project keep your workspaces organized. Each git repo gets its own tmux session with the correct working directory.\n\n![tmux git project session demo](/tapes/tmux-git-project-session.mp4)\n\n## Related\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/tmux/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etmux Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux configuration for persistent terminal sessions with popup windows and session management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/git/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGit Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGit configuration with aliases, delta for diffs, and work/personal separation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Demonstration of creating dedicated tmux sessions for git projects",
      "image": "/tapes/tmux-git-project-session.mp4",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "vhs",
        "demo",
        "tmux",
        "git"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/neovim-telescope/",
      "url": "https://dots.waylonwalker.com/neovim-telescope/",
      "title": "Neovim Telescope File Finding Demo",
      "content_html": "\u003cp\u003eA demonstration of using Telescope in Neovim for fuzzy file finding and navigation.\u003c/p\u003e\n\u003ch2 id=\"what-is-shown\"\u003eWhat is Shown \u003ca href=\"#what-is-shown\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOpening Neovim\u003c/li\u003e\n\u003cli\u003eLaunching Telescope with Space+ff\u003c/li\u003e\n\u003cli\u003eTyping to filter files\u003c/li\u003e\n\u003cli\u003eSelecting and opening a file\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"key-takeaway\"\u003eKey Takeaway \u003ca href=\"#key-takeaway\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTelescope brings the power of fzf into Neovim. Find and open files without leaving your editor.\u003c/p\u003e\n\u003cp\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\"\u003e\u003csource src=\"/tapes/neovim-telescope.mp4\" type=\"video/mp4\"\u003eneovim telescope demo\u003c/video\u003e\u003c/p\u003e\n\u003ch2 id=\"related\"\u003eRelated \u003ca href=\"#related\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/neovim/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNeovim Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNeovim configuration with lazy.nvim for plugin management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003c!-- embed not found: telescope.nvim --\u003e\n\u003cp\u003e![[ telescope.nvim ]]\u003c/p\u003e\n",
      "content_text": "\nA demonstration of using Telescope in Neovim for fuzzy file finding and navigation.\n\n## What is Shown\n\n- Opening Neovim\n- Launching Telescope with Space+ff\n- Typing to filter files\n- Selecting and opening a file\n\n## Key Takeaway\n\nTelescope brings the power of fzf into Neovim. Find and open files without leaving your editor.\n\n![neovim telescope demo](/tapes/neovim-telescope.mp4)\n\n## Related\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/neovim/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNeovim Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNeovim configuration with lazy.nvim for plugin management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003c!-- embed not found: telescope.nvim --\u003e\n![[ telescope.nvim ]]\n",
      "summary": "Demonstration of Neovim telescope for fuzzy file finding",
      "image": "/tapes/neovim-telescope.mp4",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "vhs",
        "demo",
        "neovim",
        "telescope"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/neovim-lsp-go-to-definition/",
      "url": "https://dots.waylonwalker.com/neovim-lsp-go-to-definition/",
      "title": "Neovim LSP Go-to-Definition Demo",
      "content_html": "\u003cp\u003eA demonstration of Neovim's Language Server Protocol integration for code navigation and go-to-definition.\u003c/p\u003e\n\u003ch2 id=\"what-is-shown\"\u003eWhat is Shown \u003ca href=\"#what-is-shown\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOpening a Python file in Neovim\u003c/li\u003e\n\u003cli\u003eNavigating to a function call\u003c/li\u003e\n\u003cli\u003eUsing gd to jump to definition\u003c/li\u003e\n\u003cli\u003eUsing Ctrl+o to jump back\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"key-takeaway\"\u003eKey Takeaway \u003ca href=\"#key-takeaway\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eLSP transforms Neovim into a full IDE. Jump to definitions, see documentation, and refactor code with built-in intelligence.\u003c/p\u003e\n\u003cp\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\"\u003e\u003csource src=\"/tapes/neovim-lsp-go-to-definition.mp4\" type=\"video/mp4\"\u003eneovim lsp demo\u003c/video\u003e\u003c/p\u003e\n\u003ch2 id=\"related\"\u003eRelated \u003ca href=\"#related\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/neovim/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNeovim Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNeovim configuration with lazy.nvim for plugin management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003c!-- embed not found: nvim-lspconfig --\u003e\n\u003cp\u003e![[ nvim-lspconfig ]]\u003c/p\u003e\n",
      "content_text": "\nA demonstration of Neovim's Language Server Protocol integration for code navigation and go-to-definition.\n\n## What is Shown\n\n- Opening a Python file in Neovim\n- Navigating to a function call\n- Using gd to jump to definition\n- Using Ctrl+o to jump back\n\n## Key Takeaway\n\nLSP transforms Neovim into a full IDE. Jump to definitions, see documentation, and refactor code with built-in intelligence.\n\n![neovim lsp demo](/tapes/neovim-lsp-go-to-definition.mp4)\n\n## Related\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/neovim/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNeovim Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNeovim configuration with lazy.nvim for plugin management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003c!-- embed not found: nvim-lspconfig --\u003e\n![[ nvim-lspconfig ]]\n",
      "summary": "Demonstration of Neovim LSP go-to-definition and code navigation",
      "image": "/tapes/neovim-lsp-go-to-definition.mp4",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "vhs",
        "demo",
        "neovim",
        "lsp"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/lf-tmux-popup/",
      "url": "https://dots.waylonwalker.com/lf-tmux-popup/",
      "title": "lf in tmux Popup",
      "content_html": "\u003cp\u003eA demonstration of using lf inside a tmux popup window, showing the seamless integration between file management and terminal multiplexing.\u003c/p\u003e\n\u003ch2 id=\"what-is-shown\"\u003eWhat is Shown \u003ca href=\"#what-is-shown\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWorking in a terminal session\u003c/li\u003e\n\u003cli\u003eOpening lf (simulating Alt+E popup binding)\u003c/li\u003e\n\u003cli\u003eNavigating to a file\u003c/li\u003e\n\u003cli\u003eOpening the file\u003c/li\u003e\n\u003cli\u003eReturning to the original session\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"key-takeaway\"\u003eKey Takeaway \u003ca href=\"#key-takeaway\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe tmux popup integration allows you to browse files without leaving your current context. Open files, check directories, then return exactly where you were.\u003c/p\u003e\n\u003cp\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\"\u003e\u003csource src=\"/tapes/lf-tmux-popup.mp4\" type=\"video/mp4\"\u003elf tmux popup demo\u003c/video\u003e\u003c/p\u003e\n\u003ch2 id=\"related\"\u003eRelated \u003ca href=\"#related\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/lf/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003elf\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003elf - a terminal file manager written in Go\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/tmux/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etmux Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux configuration for persistent terminal sessions with popup windows and session management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nA demonstration of using lf inside a tmux popup window, showing the seamless integration between file management and terminal multiplexing.\n\n## What is Shown\n\n- Working in a terminal session\n- Opening lf (simulating Alt+E popup binding)\n- Navigating to a file\n- Opening the file\n- Returning to the original session\n\n## Key Takeaway\n\nThe tmux popup integration allows you to browse files without leaving your current context. Open files, check directories, then return exactly where you were.\n\n![lf tmux popup demo](/tapes/lf-tmux-popup.mp4)\n\n## Related\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/lf/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003elf\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003elf - a terminal file manager written in Go\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/tmux/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etmux Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux configuration for persistent terminal sessions with popup windows and session management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Demonstration of lf file manager integrated with tmux popup workflow",
      "image": "/tapes/lf-tmux-popup.mp4",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "vhs",
        "demo",
        "lf",
        "tmux"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/lf-intro/",
      "url": "https://dots.waylonwalker.com/lf-intro/",
      "title": "lf File Manager Demo",
      "content_html": "\u003cp\u003eA quick demonstration of lf file manager showing basic navigation using vim-style keybindings.\u003c/p\u003e\n\u003ch2 id=\"what-is-shown\"\u003eWhat is Shown \u003ca href=\"#what-is-shown\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eLaunching lf in the sandbox directory\u003c/li\u003e\n\u003cli\u003eNavigating with \u003ccode\u003ej/k\u003c/code\u003e (down/up)\u003c/li\u003e\n\u003cli\u003eEntering directories with \u003ccode\u003el\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGoing back with \u003ccode\u003eh\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eJumping to bottom with \u003ccode\u003eG\u003c/code\u003e and top with \u003ccode\u003egg\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eQuitting with \u003ccode\u003eq\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"key-takeaway\"\u003eKey Takeaway \u003ca href=\"#key-takeaway\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003elf provides fast, keyboard-driven file navigation without leaving the terminal. The vim-style bindings make it intuitive for anyone familiar with modal editors.\u003c/p\u003e\n\u003cp\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\"\u003e\u003csource src=\"/tapes/lf-intro.mp4\" type=\"video/mp4\"\u003elf file manager demo\u003c/video\u003e\u003c/p\u003e\n\u003ch2 id=\"related\"\u003eRelated \u003ca href=\"#related\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/lf/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003elf\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003elf - a terminal file manager written in Go\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nA quick demonstration of lf file manager showing basic navigation using vim-style keybindings.\n\n## What is Shown\n\n- Launching lf in the sandbox directory\n- Navigating with `j/k` (down/up)\n- Entering directories with `l`\n- Going back with `h`\n- Jumping to bottom with `G` and top with `gg`\n- Quitting with `q`\n\n## Key Takeaway\n\nlf provides fast, keyboard-driven file navigation without leaving the terminal. The vim-style bindings make it intuitive for anyone familiar with modal editors.\n\n![lf file manager demo](/tapes/lf-intro.mp4)\n\n## Related\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/lf/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003elf\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003elf - a terminal file manager written in Go\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Demonstration of lf file manager navigation and basic operations",
      "image": "/tapes/lf-intro.mp4",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "vhs",
        "demo",
        "lf"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/lazygit-staging/",
      "url": "https://dots.waylonwalker.com/lazygit-staging/",
      "title": "lazygit Staging Workflow Demo",
      "content_html": "\u003cp\u003eA demonstration of the complete git workflow using lazygit: staging files, writing commits, and pushing changes.\u003c/p\u003e\n\u003ch2 id=\"what-is-shown\"\u003eWhat is Shown \u003ca href=\"#what-is-shown\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOpening lazygit with modified and new files\u003c/li\u003e\n\u003cli\u003eNavigating the status panel\u003c/li\u003e\n\u003cli\u003eStaging files with Space\u003c/li\u003e\n\u003cli\u003eCreating a commit with c\u003c/li\u003e\n\u003cli\u003ePushing changes with p\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"key-takeaway\"\u003eKey Takeaway \u003ca href=\"#key-takeaway\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003elazygit's visual interface makes git operations intuitive. Stage with Space, commit with c, push with p—all without typing git commands.\u003c/p\u003e\n\u003cp\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\"\u003e\u003csource src=\"/tapes/lazygit-staging.mp4\" type=\"video/mp4\"\u003elazygit staging demo\u003c/video\u003e\u003c/p\u003e\n\u003ch2 id=\"related\"\u003eRelated \u003ca href=\"#related\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/lazygit/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLazygit\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLazygit - a simple terminal UI for git commands\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/git/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGit Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGit configuration with aliases, delta for diffs, and work/personal separation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/gitui/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003egitui\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003egitui - a blazing-fast terminal UI for git\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nA demonstration of the complete git workflow using lazygit: staging files, writing commits, and pushing changes.\n\n## What is Shown\n\n- Opening lazygit with modified and new files\n- Navigating the status panel\n- Staging files with Space\n- Creating a commit with c\n- Pushing changes with p\n\n## Key Takeaway\n\nlazygit's visual interface makes git operations intuitive. Stage with Space, commit with c, push with p—all without typing git commands.\n\n![lazygit staging demo](/tapes/lazygit-staging.mp4)\n\n## Related\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/lazygit/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLazygit\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLazygit - a simple terminal UI for git commands\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/git/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGit Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGit configuration with aliases, delta for diffs, and work/personal separation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/gitui/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003egitui\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003egitui - a blazing-fast terminal UI for git\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Demonstration of lazygit staging, committing, and pushing workflow",
      "image": "/tapes/lazygit-staging.mp4",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "vhs",
        "demo",
        "lazygit",
        "git"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/lazydocker-containers/",
      "url": "https://dots.waylonwalker.com/lazydocker-containers/",
      "title": "lazydocker Container Management Demo",
      "content_html": "\u003cp\u003eA demonstration of using lazydocker to view and manage Docker containers from the terminal.\u003c/p\u003e\n\u003ch2 id=\"what-is-shown\"\u003eWhat is Shown \u003ca href=\"#what-is-shown\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOpening lazydocker\u003c/li\u003e\n\u003cli\u003eNavigating the container list\u003c/li\u003e\n\u003cli\u003eViewing container details\u003c/li\u003e\n\u003cli\u003eChecking logs\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"key-takeaway\"\u003eKey Takeaway \u003ca href=\"#key-takeaway\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003elazydocker provides a complete Docker management interface in the terminal. View containers, images, volumes, and logs without docker commands.\u003c/p\u003e\n\u003cp\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\"\u003e\u003csource src=\"/tapes/lazydocker-containers.mp4\" type=\"video/mp4\"\u003elazydocker demo\u003c/video\u003e\u003c/p\u003e\n\u003ch2 id=\"related\"\u003eRelated \u003ca href=\"#related\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/tags/lazydocker/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePosts tagged: lazydocker\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAll posts with the tag \u0026#34;lazydocker\u0026#34;\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nA demonstration of using lazydocker to view and manage Docker containers from the terminal.\n\n## What is Shown\n\n- Opening lazydocker\n- Navigating the container list\n- Viewing container details\n- Checking logs\n\n## Key Takeaway\n\nlazydocker provides a complete Docker management interface in the terminal. View containers, images, volumes, and logs without docker commands.\n\n![lazydocker demo](/tapes/lazydocker-containers.mp4)\n\n## Related\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/tags/lazydocker/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePosts tagged: lazydocker\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAll posts with the tag \u0026#34;lazydocker\u0026#34;\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Demonstration of lazydocker for managing Docker containers",
      "image": "/tapes/lazydocker-containers.mp4",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "vhs",
        "demo",
        "lazydocker",
        "docker"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/gitui-intro/",
      "url": "https://dots.waylonwalker.com/gitui-intro/",
      "title": "gitui Staging and Commit Demo",
      "content_html": "\u003cp\u003eA demonstration of the complete git workflow using gitui: staging files, writing commits, and pushing changes.\u003c/p\u003e\n\u003ch2 id=\"what-is-shown\"\u003eWhat is Shown \u003ca href=\"#what-is-shown\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOpening gitui in a git repository\u003c/li\u003e\n\u003cli\u003eStaging files with \u003ccode\u003eSpace\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eOpening commit dialog with \u003ccode\u003ec\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eWriting a commit message\u003c/li\u003e\n\u003cli\u003eSubmitting with \u003ccode\u003eCtrl+s\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ePushing with \u003ccode\u003ep\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"key-takeaway\"\u003eKey Takeaway \u003ca href=\"#key-takeaway\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003egitui provides a fast, keyboard-driven interface for common git operations. Stage, commit, and push without typing git commands or using a mouse.\u003c/p\u003e\n\u003cp\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\"\u003e\u003csource src=\"/tapes/gitui-intro.mp4\" type=\"video/mp4\"\u003egitui staging demo\u003c/video\u003e\u003c/p\u003e\n\u003ch2 id=\"related\"\u003eRelated \u003ca href=\"#related\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/gitui/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003egitui\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003egitui - a blazing-fast terminal UI for git\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/git/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGit Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGit configuration with aliases, delta for diffs, and work/personal separation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nA demonstration of the complete git workflow using gitui: staging files, writing commits, and pushing changes.\n\n## What is Shown\n\n- Opening gitui in a git repository\n- Staging files with `Space`\n- Opening commit dialog with `c`\n- Writing a commit message\n- Submitting with `Ctrl+s`\n- Pushing with `p`\n\n## Key Takeaway\n\ngitui provides a fast, keyboard-driven interface for common git operations. Stage, commit, and push without typing git commands or using a mouse.\n\n![gitui staging demo](/tapes/gitui-intro.mp4)\n\n## Related\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/gitui/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003egitui\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003egitui - a blazing-fast terminal UI for git\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/git/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGit Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGit configuration with aliases, delta for diffs, and work/personal separation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Demonstration of gitui staging, committing, and pushing workflow",
      "image": "/tapes/gitui-intro.mp4",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "vhs",
        "demo",
        "gitui",
        "git"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/fzf-history-search/",
      "url": "https://dots.waylonwalker.com/fzf-history-search/",
      "title": "fzf History Search Demo",
      "content_html": "\u003cp\u003eA demonstration of using fzf (with atuin) to search command history using Ctrl+R.\u003c/p\u003e\n\u003ch2 id=\"what-is-shown\"\u003eWhat is Shown \u003ca href=\"#what-is-shown\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOpening history search with Ctrl+R\u003c/li\u003e\n\u003cli\u003eTyping to filter previous commands\u003c/li\u003e\n\u003cli\u003eNavigating results with arrow keys\u003c/li\u003e\n\u003cli\u003eSelecting and executing a previous command\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"key-takeaway\"\u003eKey Takeaway \u003ca href=\"#key-takeaway\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHistory search eliminates retyping. Find any previous command instantly with fuzzy matching.\u003c/p\u003e\n\u003cp\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\"\u003e\u003csource src=\"/tapes/fzf-history-search.mp4\" type=\"video/mp4\"\u003efzf history search demo\u003c/video\u003e\u003c/p\u003e\n\u003ch2 id=\"related\"\u003eRelated \u003ca href=\"#related\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/fzf/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003efzf\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003efzf - a command-line fuzzy finder\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/atuin/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAtuin\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAtuin - a magical shell history with sync\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ezsh Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nA demonstration of using fzf (with atuin) to search command history using Ctrl+R.\n\n## What is Shown\n\n- Opening history search with Ctrl+R\n- Typing to filter previous commands\n- Navigating results with arrow keys\n- Selecting and executing a previous command\n\n## Key Takeaway\n\nHistory search eliminates retyping. Find any previous command instantly with fuzzy matching.\n\n![fzf history search demo](/tapes/fzf-history-search.mp4)\n\n## Related\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/fzf/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003efzf\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003efzf - a command-line fuzzy finder\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/atuin/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAtuin\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAtuin - a magical shell history with sync\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ezsh Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Demonstration of fzf history search with Ctrl+R and atuin integration",
      "image": "/tapes/fzf-history-search.mp4",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "vhs",
        "demo",
        "fzf",
        "atuin"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/fzf-file-finding/",
      "url": "https://dots.waylonwalker.com/fzf-file-finding/",
      "title": "fzf File Finding Demo",
      "content_html": "\u003cp\u003eA demonstration of using fzf to quickly find and select files with fuzzy matching and Ctrl+T integration.\u003c/p\u003e\n\u003ch2 id=\"what-is-shown\"\u003eWhat is Shown \u003ca href=\"#what-is-shown\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOpening fzf with Ctrl+T\u003c/li\u003e\n\u003cli\u003eTyping to fuzzy filter results\u003c/li\u003e\n\u003cli\u003eSelecting a file from the filtered list\u003c/li\u003e\n\u003cli\u003eThe file path is inserted into the command line\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"key-takeaway\"\u003eKey Takeaway \u003ca href=\"#key-takeaway\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003efzf's fuzzy finding makes locating files effortless. Type partial names, see results instantly, select with Enter.\u003c/p\u003e\n\u003cp\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\"\u003e\u003csource src=\"/tapes/fzf-file-finding.mp4\" type=\"video/mp4\"\u003efzf file finding demo\u003c/video\u003e\u003c/p\u003e\n\u003ch2 id=\"related\"\u003eRelated \u003ca href=\"#related\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/fzf/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003efzf\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003efzf - a command-line fuzzy finder\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ezsh Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nA demonstration of using fzf to quickly find and select files with fuzzy matching and Ctrl+T integration.\n\n## What is Shown\n\n- Opening fzf with Ctrl+T\n- Typing to fuzzy filter results\n- Selecting a file from the filtered list\n- The file path is inserted into the command line\n\n## Key Takeaway\n\nfzf's fuzzy finding makes locating files effortless. Type partial names, see results instantly, select with Enter.\n\n![fzf file finding demo](/tapes/fzf-file-finding.mp4)\n\n## Related\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/fzf/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003efzf\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003efzf - a command-line fuzzy finder\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ezsh Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Demonstration of fzf file finding with Ctrl+T integration",
      "image": "/tapes/fzf-file-finding.mp4",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "vhs",
        "demo",
        "fzf"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/starship/",
      "url": "https://dots.waylonwalker.com/starship/",
      "title": "Starship Prompt",
      "content_html": "\u003cp\u003e\u003ca href=\"https://starship.rs/\"\u003eStarship\u003c/a\u003e is a minimal, fast, and customizable prompt\nfor any shell. It provides useful context at a glance without cluttering your\nterminal.\u003c/p\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFast\u003c/strong\u003e - Written in Rust, renders in milliseconds\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCross-shell\u003c/strong\u003e - Works with zsh, bash, fish, and more\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eInformative\u003c/strong\u003e - Git status, tool versions, execution time\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCustomizable\u003c/strong\u003e - Extensive configuration options\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"installation\"\u003eInstallation \u003ca href=\"#installation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eVia mise (recommended):\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise install starship\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOr direct install:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -sS https://starship.rs/install.sh \u003cspan class=\"p\"\u003e|\u003c/span\u003e sh\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"shell-integration\"\u003eShell Integration \u003ca href=\"#shell-integration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eAdd to \u003ccode\u003e~/.zshrc\u003c/code\u003e:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eeval\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003estarship init zsh\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"configuration\"\u003eConfiguration \u003ca href=\"#configuration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eConfig file: \u003ccode\u003e~/.config/starship.toml\u003c/code\u003e\u003c/p\u003e\n\u003ch3 id=\"minimal-setup\"\u003eMinimal Setup \u003ca href=\"#minimal-setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# Don\u0026#39;t print a new line at the start of the prompt\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eadd_newline\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003efalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# Replace the \u0026#34;❯\u0026#34; symbol in the prompt with \u0026#34;➜\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003echaracter\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esuccess_symbol\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[➜](bold green)\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eerror_symbol\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[✗](bold red)\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"git-status\"\u003eGit Status \u003ca href=\"#git-status\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eShow detailed git information:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003egit_status\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003econflicted\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;🏳\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eahead\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;🏎💨\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ebehind\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;😰\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ediverged\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;😵\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eup_to_date\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;✓\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003euntracked\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;🤷\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003estashed\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;📦\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003emodified\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;📝\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003estaged\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[++\\($count\\)](green)\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003erenamed\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;👅\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003edeleted\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;🗑\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"tool-versions\"\u003eTool Versions \u003ca href=\"#tool-versions\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eShow active tool versions:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003enodejs\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eformat\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;via [🤖 $version](bold green) \u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003epython\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eformat\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;via [🐍 $version](bold blue) \u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003erust\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eformat\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;via [🦀 $version](bold red) \u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003egolang\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eformat\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;via [🐹 $version](bold cyan) \u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"directory\"\u003eDirectory \u003ca href=\"#directory\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eCustomize how directories are displayed:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003edirectory\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003etruncation_length\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e3\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003etruncate_to_repo\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"command-duration\"\u003eCommand Duration \u003ca href=\"#command-duration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eShow how long the last command took:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003ecmd_duration\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003emin_time\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e500\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eformat\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;took [$duration](bold yellow)\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"modules\"\u003eModules \u003ca href=\"#modules\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eStarship supports many modules out of the box:\u003c/p\u003e\n\u003ch3 id=\"development\"\u003eDevelopment \u003ca href=\"#development\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003egit_branch\u003c/strong\u003e - Current git branch\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003egit_commit\u003c/strong\u003e - Current git commit\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003egit_state\u003c/strong\u003e - Rebase/merge/cherry-pick state\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003egit_status\u003c/strong\u003e - Working tree status\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003epackage\u003c/strong\u003e - Package version from package.json, Cargo.toml, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"languages\"\u003eLanguages \u003ca href=\"#languages\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003enodejs\u003c/strong\u003e - Node.js version\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003epython\u003c/strong\u003e - Python version and virtualenv\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003erust\u003c/strong\u003e - Rust version\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003egolang\u003c/strong\u003e - Go version\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eruby\u003c/strong\u003e - Ruby version\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003elua\u003c/strong\u003e - Lua version\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"system\"\u003eSystem \u003ca href=\"#system\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003edirectory\u003c/strong\u003e - Current directory\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ehostname\u003c/strong\u003e - System hostname\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eusername\u003c/strong\u003e - Current user\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etime\u003c/strong\u003e - Current time\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebattery\u003c/strong\u003e - Battery percentage\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ememory_usage\u003c/strong\u003e - RAM usage\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"tools\"\u003eTools \u003ca href=\"#tools\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eaws\u003c/strong\u003e - AWS profile\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003egcloud\u003c/strong\u003e - Google Cloud region\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ekubernetes\u003c/strong\u003e - Current k8s context\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eterraform\u003c/strong\u003e - Terraform workspace\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"conditional-formatting\"\u003eConditional Formatting \u003ca href=\"#conditional-formatting\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eShow modules only in certain contexts:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003enodejs\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003edetect_extensions\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;js\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;mjs\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;cjs\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;ts\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003edetect_files\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;package.json\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;.node-version\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003edetect_folders\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;node_modules\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"performance\"\u003ePerformance \u003ca href=\"#performance\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eStarship is designed to be fast, but you can optimize further:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# Disable unused modules\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003efill\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003edisabled\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eline_break\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003edisabled\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# Reduce git status checks\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003egit_status\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003edisabled\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003efalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eahead\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;⇡${count}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ediverged\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;⇕⇡${ahead_count}⇣${behind_count}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ebehind\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;⇣${count}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"transient-prompt\"\u003eTransient Prompt \u003ca href=\"#transient-prompt\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eKeep previous prompts minimal:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003echaracter\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esuccess_symbol\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[❯](bold green)\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eerror_symbol\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[❯](bold red)\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# This requires shell-specific config\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eFor zsh, add to \u003ccode\u003e~/.zshrc\u003c/code\u003e:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Transient prompt\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esetopt transient_rprompt\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"troubleshooting\"\u003eTroubleshooting \u003ca href=\"#troubleshooting\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"prompt-not-showing\"\u003ePrompt not showing \u003ca href=\"#prompt-not-showing\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003eCheck starship is in PATH: \u003ccode\u003ewhich starship\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eVerify init command is in shell config\u003c/li\u003e\n\u003cli\u003eRestart shell: \u003ccode\u003eexec zsh\u003c/code\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"slow-prompt\"\u003eSlow prompt \u003ca href=\"#slow-prompt\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eProfile with: \u003ccode\u003eSTARSHIP_LOG=trace starship prompt\u003c/code\u003e\u003c/p\u003e\n\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://starship.rs/config/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://starship.rs/icon.png\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eStarship: Cross-Shell Prompt\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eStarship is the minimal, blazing fast, and extremely customizable prompt for any shell! Shows the information you need, while staying sleek and minimal. Quick installation available for Bash, Fish,...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estarship.rs\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ezsh Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://starship.rs/presets/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://starship.rs/icon.png\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eStarship: Cross-Shell Prompt\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eStarship is the minimal, blazing fast, and extremely customizable prompt for any shell! Shows the information you need, while staying sleek and minimal. Quick installation available for Bash, Fish,...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estarship.rs\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\n[Starship](https://starship.rs/) is a minimal, fast, and customizable prompt\nfor any shell. It provides useful context at a glance without cluttering your\nterminal.\n\n## Features\n\n- **Fast** - Written in Rust, renders in milliseconds\n- **Cross-shell** - Works with zsh, bash, fish, and more\n- **Informative** - Git status, tool versions, execution time\n- **Customizable** - Extensive configuration options\n\n## Setup\n\n### Installation\n\nVia mise (recommended):\n\n```bash\nmise install starship\n```\n\nOr direct install:\n\n```bash\ncurl -sS https://starship.rs/install.sh | sh\n```\n\n### Shell Integration\n\nAdd to `~/.zshrc`:\n\n```bash\neval \"$(starship init zsh)\"\n```\n\n## Configuration\n\nConfig file: `~/.config/starship.toml`\n\n### Minimal Setup\n\n```toml\n# Don't print a new line at the start of the prompt\nadd_newline = false\n\n# Replace the \"❯\" symbol in the prompt with \"➜\"\n[character]\nsuccess_symbol = \"[➜](bold green)\"\nerror_symbol = \"[✗](bold red)\"\n```\n\n### Git Status\n\nShow detailed git information:\n\n```toml\n[git_status]\nconflicted = \"🏳\"\nahead = \"🏎💨\"\nbehind = \"😰\"\ndiverged = \"😵\"\nup_to_date = \"✓\"\nuntracked = \"🤷\"\nstashed = \"📦\"\nmodified = \"📝\"\nstaged = \"[++\\($count\\)](green)\"\nrenamed = \"👅\"\ndeleted = \"🗑\"\n```\n\n### Tool Versions\n\nShow active tool versions:\n\n```toml\n[nodejs]\nformat = \"via [🤖 $version](bold green) \"\n\n[python]\nformat = \"via [🐍 $version](bold blue) \"\n\n[rust]\nformat = \"via [🦀 $version](bold red) \"\n\n[golang]\nformat = \"via [🐹 $version](bold cyan) \"\n```\n\n### Directory\n\nCustomize how directories are displayed:\n\n```toml\n[directory]\ntruncation_length = 3\ntruncate_to_repo = true\n```\n\n### Command Duration\n\nShow how long the last command took:\n\n```toml\n[cmd_duration]\nmin_time = 500\nformat = \"took [$duration](bold yellow)\"\n```\n\n## Modules\n\nStarship supports many modules out of the box:\n\n### Development\n\n- **git_branch** - Current git branch\n- **git_commit** - Current git commit\n- **git_state** - Rebase/merge/cherry-pick state\n- **git_status** - Working tree status\n- **package** - Package version from package.json, Cargo.toml, etc.\n\n### Languages\n\n- **nodejs** - Node.js version\n- **python** - Python version and virtualenv\n- **rust** - Rust version\n- **golang** - Go version\n- **ruby** - Ruby version\n- **lua** - Lua version\n\n### System\n\n- **directory** - Current directory\n- **hostname** - System hostname\n- **username** - Current user\n- **time** - Current time\n- **battery** - Battery percentage\n- **memory_usage** - RAM usage\n\n### Tools\n\n- **aws** - AWS profile\n- **gcloud** - Google Cloud region\n- **kubernetes** - Current k8s context\n- **terraform** - Terraform workspace\n\n## Conditional Formatting\n\nShow modules only in certain contexts:\n\n```toml\n[nodejs]\ndetect_extensions = [\"js\", \"mjs\", \"cjs\", \"ts\"]\ndetect_files = [\"package.json\", \".node-version\"]\ndetect_folders = [\"node_modules\"]\n```\n\n## Performance\n\nStarship is designed to be fast, but you can optimize further:\n\n```toml\n# Disable unused modules\n[fill]\ndisabled = true\n\n[line_break]\ndisabled = true\n\n# Reduce git status checks\n[git_status]\ndisabled = false\nahead = \"⇡${count}\"\ndiverged = \"⇕⇡${ahead_count}⇣${behind_count}\"\nbehind = \"⇣${count}\"\n```\n\n## Transient Prompt\n\nKeep previous prompts minimal:\n\n```toml\n[character]\nsuccess_symbol = \"[❯](bold green)\"\nerror_symbol = \"[❯](bold red)\"\n\n# This requires shell-specific config\n```\n\nFor zsh, add to `~/.zshrc`:\n\n```bash\n# Transient prompt\nsetopt transient_rprompt\n```\n\n## Troubleshooting\n\n### Prompt not showing\n\n1. Check starship is in PATH: `which starship`\n2. Verify init command is in shell config\n3. Restart shell: `exec zsh`\n\n### Slow prompt\n\nProfile with: `STARSHIP_LOG=trace starship prompt`\n\n## See Also\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://starship.rs/config/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://starship.rs/icon.png\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eStarship: Cross-Shell Prompt\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eStarship is the minimal, blazing fast, and extremely customizable prompt for any shell! Shows the information you need, while staying sleek and minimal. Quick installation available for Bash, Fish,...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estarship.rs\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ezsh Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://starship.rs/presets/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://starship.rs/icon.png\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eStarship: Cross-Shell Prompt\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eStarship is the minimal, blazing fast, and extremely customizable prompt for any shell! Shows the information you need, while staying sleek and minimal. Quick installation available for Bash, Fish,...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003estarship.rs\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Starship - minimal, fast, and customizable shell prompt",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/polybar/",
      "url": "https://dots.waylonwalker.com/polybar/",
      "title": "Polybar",
      "content_html": "\u003cp\u003ePolybar is a fast and easy-to-use status bar for X11 window managers.\u003c/p\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLightweight\u003c/strong\u003e - Minimal resource usage\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eModular\u003c/strong\u003e - Enable only what you need\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eThemable\u003c/strong\u003e - Extensive customization options\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMulti-monitor\u003c/strong\u003e - Support for multiple displays\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFont icons\u003c/strong\u003e - Support for Nerd Fonts and icons\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstall via package manager:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Ubuntu/Debian\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install polybar\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Arch Linux\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S polybar\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Fedora\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo dnf install polybar\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Build from source\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# See GitHub releases for latest version\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"configuration\"\u003eConfiguration \u003ca href=\"#configuration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eConfig file: \u003ccode\u003e~/.config/polybar/config.ini\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eStructure:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e[bar/main]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003ewidth\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e100%\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003eheight\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e24\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003ebackground\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e#1e1e2e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003eforeground\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e#cdd6f4\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003efont-0\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;JetBrains Mono:size=10;2\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003efont-1\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Font Awesome 6 Free:size=10;2\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003emodules-left\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003ebspwm xwindow\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003emodules-center\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003edate\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003emodules-right\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003evolume network battery\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e[module/date]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003einternal/date\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003einterval\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003edate\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e%Y-%m-%d\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003etime\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e%H:%M\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003elabel\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e%date% %time%\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e[module/volume]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003einternal/pulseaudio\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003elabel-volume\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003eVOL %percentage%%\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"launching\"\u003eLaunching \u003ca href=\"#launching\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAdd to your window manager startup:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Kill existing\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekillall -q polybar\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Launch\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epolybar main \u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"common-modules\"\u003eCommon Modules \u003ca href=\"#common-modules\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ei3\u003c/strong\u003e - i3 workspace integration\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebspwm\u003c/strong\u003e - BSPWM workspace integration\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003exwindow\u003c/strong\u003e - Active window title\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003exworkspaces\u003c/strong\u003e - EWMH workspace support\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edate\u003c/strong\u003e - Clock and calendar\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ealsa\u003c/strong\u003e / \u003cstrong\u003epulseaudio\u003c/strong\u003e - Volume control\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebattery\u003c/strong\u003e - Battery status\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecpu\u003c/strong\u003e - CPU usage\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ememory\u003c/strong\u003e - RAM usage\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003enetwork\u003c/strong\u003e - Network status\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etemperature\u003c/strong\u003e - System temperature\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"custom-script-module\"\u003eCustom Script Module \u003ca href=\"#custom-script-module\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e[module/custom-script]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003ecustom/script\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003eexec\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e~/.config/polybar/scripts/custom.sh\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003einterval\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e5\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003elabel\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e%output%\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/awesome/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAwesome Window Manager\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAwesome WM - a highly configurable X11 window manager\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/waybar/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWaybar\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWaybar - a highly customizable Wayland bar\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/polybar/polybar\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/8279456c4727fd40b640f9a3531e8ad2416da1bf633589302f6bfb6d3e13f4fc/polybar/polybar\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - polybar/polybar: A fast and easy-to-use status bar\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA fast and easy-to-use status bar. Contribute to polybar/polybar development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nPolybar is a fast and easy-to-use status bar for X11 window managers.\n\n## Features\n\n- **Lightweight** - Minimal resource usage\n- **Modular** - Enable only what you need\n- **Themable** - Extensive customization options\n- **Multi-monitor** - Support for multiple displays\n- **Font icons** - Support for Nerd Fonts and icons\n\n## Setup\n\nInstall via package manager:\n\n```bash\n# Ubuntu/Debian\nsudo apt install polybar\n\n# Arch Linux\nsudo pacman -S polybar\n\n# Fedora\nsudo dnf install polybar\n\n# Build from source\n# See GitHub releases for latest version\n```\n\n## Configuration\n\nConfig file: `~/.config/polybar/config.ini`\n\nStructure:\n\n```ini\n[bar/main]\nwidth = 100%\nheight = 24\nbackground = #1e1e2e\nforeground = #cdd6f4\n\nfont-0 = \"JetBrains Mono:size=10;2\"\nfont-1 = \"Font Awesome 6 Free:size=10;2\"\n\nmodules-left = bspwm xwindow\nmodules-center = date\nmodules-right = volume network battery\n\n[module/date]\ntype = internal/date\ninterval = 1\ndate = %Y-%m-%d\ntime = %H:%M\nlabel = %date% %time%\n\n[module/volume]\ntype = internal/pulseaudio\nlabel-volume = VOL %percentage%%\n```\n\n## Launching\n\nAdd to your window manager startup:\n\n```bash\n# Kill existing\nkillall -q polybar\n\n# Launch\npolybar main \u0026\n```\n\n## Common Modules\n\n- **i3** - i3 workspace integration\n- **bspwm** - BSPWM workspace integration\n- **xwindow** - Active window title\n- **xworkspaces** - EWMH workspace support\n- **date** - Clock and calendar\n- **alsa** / **pulseaudio** - Volume control\n- **battery** - Battery status\n- **cpu** - CPU usage\n- **memory** - RAM usage\n- **network** - Network status\n- **temperature** - System temperature\n\n## Custom Script Module\n\n```ini\n[module/custom-script]\ntype = custom/script\nexec = ~/.config/polybar/scripts/custom.sh\ninterval = 5\nlabel = %output%\n```\n\n## See Also\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/awesome/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAwesome Window Manager\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAwesome WM - a highly configurable X11 window manager\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/waybar/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWaybar\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWaybar - a highly customizable Wayland bar\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/polybar/polybar\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/8279456c4727fd40b640f9a3531e8ad2416da1bf633589302f6bfb6d3e13f4fc/polybar/polybar\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - polybar/polybar: A fast and easy-to-use status bar\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA fast and easy-to-use status bar. Contribute to polybar/polybar development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Polybar - a fast and easy-to-use status bar for X11",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/nope/",
      "url": "https://dots.waylonwalker.com/nope/",
      "title": "Nope",
      "content_html": "\u003cp\u003eThings I avoid, do not use, or actively recommend against.\u003c/p\u003e\n\u003cp\u003eThis is not about bashing tools that work for others - these are things that do not work for \u003cem\u003eme\u003c/em\u003e and my workflows.\u003c/p\u003e\n\u003ch2 id=\"software-i-avoid\"\u003eSoftware I Avoid \u003ca href=\"#software-i-avoid\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"ides\"\u003eIDEs \u003ca href=\"#ides\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eVS Code\u003c/strong\u003e - Resource-heavy for what I need. I prefer Neovim's speed and efficiency.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eJetBrains products\u003c/strong\u003e - Overkill for my use cases and too resource-intensive.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhy: I spend most of my time in a terminal. Heavy IDEs feel sluggish and get in my way.\u003c/p\u003e\n\u003ch3 id=\"window-managers\"\u003eWindow Managers \u003ca href=\"#window-managers\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGNOME\u003c/strong\u003e - Too much mouse interaction, not keyboard-friendly enough for my workflow.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ei3\u003c/strong\u003e (personally) - Used it for years, but prefer Hyprland's Wayland-native approach now.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eNote: I actually like KDE, but my primary requirement for any window manager is robust workspace management with hotkeys. I need win+num to switch, win+shift+num to send apps, and win+ctrl+num to join workspaces. I enjoy tiling but have no strong preference between tiling and floating - both work fine with a good workspace manager that lets me reach any app in one keystroke.\u003c/p\u003e\n\u003ch3 id=\"development-tools\"\u003eDevelopment Tools \u003ca href=\"#development-tools\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003envm/rbenv/pyenv separately\u003c/strong\u003e - Use \u003ca href=\"/mise/\" class=\"wikilink\" data-title=\"mise Tool Management\" data-description=\"mise - the universal version manager for development tools\" data-date=\"2026-02-07\"\u003emise Tool Management\u003c/a\u003e instead. One tool instead of many.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDocker Desktop\u003c/strong\u003e - Bloated. Use podman or docker CLI directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"python-dependency-management\"\u003ePython Dependency Management \u003ca href=\"#python-dependency-management\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eAfter years using pip-tools, hatch, and conda, I've been \u003cstrong\u003euv pilled\u003c/strong\u003e. I now avoid:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePoetry\u003c/strong\u003e - Overly complex for my needs\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHatch\u003c/strong\u003e - Used it for years, but uv is simpler\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003epip-tools\u003c/strong\u003e - Used it for years, uv replaces it completely\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003evirtualenv\u003c/strong\u003e - uv handles environments\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003econda\u003c/strong\u003e - Used it for years, uv + pyproject.toml is cleaner\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eflit\u003c/strong\u003e - Unnecessary with uv\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eWhat I use instead:\u003c/strong\u003e [[uv]] - Fast, simple, and handles everything I need.\u003c/p\u003e\n\u003ch3 id=\"javascript-development\"\u003eJavaScript Development \u003ca href=\"#javascript-development\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eI avoid JavaScript frameworks with heavy build pipelines and deep node_modules trees. I prefer:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eVanilla JavaScript\u003c/strong\u003e - No build step, no dependencies\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCDN libraries\u003c/strong\u003e - Add what you need via script tag\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSimple tools\u003c/strong\u003e - Avoid webpack, complex bundlers, and deep dependency chains\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"practices-i-avoid\"\u003ePractices I Avoid \u003ca href=\"#practices-i-avoid\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eMouse-heavy workflows\u003c/strong\u003e - Slows me down, causes wrist strain\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eClicking through GUIs\u003c/strong\u003e - Prefer keyboard shortcuts and CLI\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eManual, repetitive tasks\u003c/strong\u003e - Automate or script everything\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eKeeping everything in my head\u003c/strong\u003e - Document in version control\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHeavy build pipelines\u003c/strong\u003e - Prefer simplicity over complexity\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"business-models\"\u003eBusiness Models \u003ca href=\"#business-models\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSubscription fatigue\u003c/strong\u003e - Prefer perpetual licenses or open source\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eVendor lock-in\u003c/strong\u003e - Prefer tools with open standards and export options\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCloud-only dependencies\u003c/strong\u003e - Keep local-first options available\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"counter-arguments-i-accept\"\u003eCounter-Arguments I Accept \u003ca href=\"#counter-arguments-i-accept\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThese tools work great for others:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVS Code has excellent debugging support\u003c/li\u003e\n\u003cli\u003eIDEs provide discoverability for new developers\u003c/li\u003e\n\u003cli\u003eGUI tools can be more approachable\u003c/li\u003e\n\u003cli\u003eComplex build pipelines enable powerful optimizations\u003c/li\u003e\n\u003cli\u003ePoetry and conda solve real problems for many teams\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eUse what works for you. These are my preferences, not universal truths.\u003c/p\u003e\n\u003cp\u003eSee \u003ca href=\"/yep/\" class=\"wikilink\" data-title=\"Yep\" data-description=\"Things I endorse and recommend\" data-date=\"2026-02-07\"\u003eYep\u003c/a\u003e for things I do recommend.\u003c/p\u003e\n",
      "content_text": "\nThings I avoid, do not use, or actively recommend against.\n\nThis is not about bashing tools that work for others - these are things that do not work for *me* and my workflows.\n\n## Software I Avoid\n\n### IDEs\n\n- **VS Code** - Resource-heavy for what I need. I prefer Neovim's speed and efficiency.\n- **JetBrains products** - Overkill for my use cases and too resource-intensive.\n\nWhy: I spend most of my time in a terminal. Heavy IDEs feel sluggish and get in my way.\n\n### Window Managers\n\n- **GNOME** - Too much mouse interaction, not keyboard-friendly enough for my workflow.\n- **i3** (personally) - Used it for years, but prefer Hyprland's Wayland-native approach now.\n\nNote: I actually like KDE, but my primary requirement for any window manager is robust workspace management with hotkeys. I need win+num to switch, win+shift+num to send apps, and win+ctrl+num to join workspaces. I enjoy tiling but have no strong preference between tiling and floating - both work fine with a good workspace manager that lets me reach any app in one keystroke.\n\n### Development Tools\n\n- **nvm/rbenv/pyenv separately** - Use \u003ca href=\"/mise/\" class=\"wikilink\" data-title=\"mise Tool Management\" data-description=\"mise - the universal version manager for development tools\" data-date=\"2026-02-07\"\u003emise Tool Management\u003c/a\u003e instead. One tool instead of many.\n- **Docker Desktop** - Bloated. Use podman or docker CLI directly.\n\n### Python Dependency Management\n\nAfter years using pip-tools, hatch, and conda, I've been **uv pilled**. I now avoid:\n\n- **Poetry** - Overly complex for my needs\n- **Hatch** - Used it for years, but uv is simpler\n- **pip-tools** - Used it for years, uv replaces it completely\n- **virtualenv** - uv handles environments\n- **conda** - Used it for years, uv + pyproject.toml is cleaner\n- **flit** - Unnecessary with uv\n\n**What I use instead:** [[uv]] - Fast, simple, and handles everything I need.\n\n### JavaScript Development\n\nI avoid JavaScript frameworks with heavy build pipelines and deep node_modules trees. I prefer:\n\n- **Vanilla JavaScript** - No build step, no dependencies\n- **CDN libraries** - Add what you need via script tag\n- **Simple tools** - Avoid webpack, complex bundlers, and deep dependency chains\n\n## Practices I Avoid\n\n- **Mouse-heavy workflows** - Slows me down, causes wrist strain\n- **Clicking through GUIs** - Prefer keyboard shortcuts and CLI\n- **Manual, repetitive tasks** - Automate or script everything\n- **Keeping everything in my head** - Document in version control\n- **Heavy build pipelines** - Prefer simplicity over complexity\n\n## Business Models\n\n- **Subscription fatigue** - Prefer perpetual licenses or open source\n- **Vendor lock-in** - Prefer tools with open standards and export options\n- **Cloud-only dependencies** - Keep local-first options available\n\n## Counter-Arguments I Accept\n\nThese tools work great for others:\n\n- VS Code has excellent debugging support\n- IDEs provide discoverability for new developers\n- GUI tools can be more approachable\n- Complex build pipelines enable powerful optimizations\n- Poetry and conda solve real problems for many teams\n\nUse what works for you. These are my preferences, not universal truths.\n\nSee \u003ca href=\"/yep/\" class=\"wikilink\" data-title=\"Yep\" data-description=\"Things I endorse and recommend\" data-date=\"2026-02-07\"\u003eYep\u003c/a\u003e for things I do recommend.\n",
      "summary": "Things I avoid and do not recommend",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "slash"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/next/",
      "url": "https://dots.waylonwalker.com/next/",
      "title": "Next",
      "content_html": "\u003cp\u003eUpcoming content, improvements, and ideas for this documentation site.\u003c/p\u003e\n\u003ch2 id=\"guides--how-to\"\u003eGuides \u0026amp; How-To \u003ca href=\"#guides--how-to\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e \u003cstrong\u003eInstallation/bootstrap guide\u003c/strong\u003e - Complete step-by-step fresh machine setup\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e \u003cstrong\u003eMigration guide\u003c/strong\u003e - Moving from other tools (VS Code → Neovim, etc.)\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e \u003cstrong\u003eSync strategy\u003c/strong\u003e - How dotfiles stay synchronized across machines\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e \u003cstrong\u003eBackup \u0026amp; restore\u003c/strong\u003e - Disaster recovery for the environment\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e \u003cstrong\u003ePer-machine configs\u003c/strong\u003e - Laptop vs desktop differences\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e \u003cstrong\u003eTroubleshooting\u003c/strong\u003e - Common issues and fixes with solutions\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"quick-reference-pages-potential-additions\"\u003eQuick Reference Pages (Potential Additions) \u003ca href=\"#quick-reference-pages-potential-additions\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e \u003cstrong\u003emise recipes\u003c/strong\u003e - Common mise tool configurations\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e \u003cstrong\u003eneovim recipes\u003c/strong\u003e - Language-specific neovim setups\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e \u003cstrong\u003etmux layouts\u003c/strong\u003e - Project-specific session layouts\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e \u003cstrong\u003egit workflows\u003c/strong\u003e - Team-specific git process documentation\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"deep-dives\"\u003eDeep Dives \u003ca href=\"#deep-dives\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e \u003cstrong\u003eWorkflow documentation\u003c/strong\u003e - \u0026quot;How I work\u0026quot; series\n\u003cul\u003e\n\u003cli\u003eTDD workflow\u003c/li\u003e\n\u003cli\u003eDebugging workflow\u003c/li\u003e\n\u003cli\u003eCode review process\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e \u003cstrong\u003ePlugin deep dives\u003c/strong\u003e - Specific neovim plugins explained\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e \u003cstrong\u003eScript explanations\u003c/strong\u003e - Custom scripts in detail\n\u003cul\u003e\n\u003cli\u003eworkspace.py\u003c/li\u003e\n\u003cli\u003eweb2app function\u003c/li\u003e\n\u003cli\u003ekube-check script\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"metacontext\"\u003eMeta/Context \u003ca href=\"#metacontext\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cinput checked=\"\" disabled=\"\" type=\"checkbox\"\u003e \u003cstrong\u003eTool comparison\u003c/strong\u003e - Detailed comparisons (Why X over Y) → [[tool-comparison]]\u003c/li\u003e\n\u003cli\u003e\u003cinput checked=\"\" disabled=\"\" type=\"checkbox\"\u003e \u003cstrong\u003eEvolution\u003c/strong\u003e - How the setup has changed over 10+ years → [[evolution]]\u003c/li\u003e\n\u003cli\u003e\u003cinput checked=\"\" disabled=\"\" type=\"checkbox\"\u003e \u003cstrong\u003ePhilosophy\u003c/strong\u003e - Deeper dive into the \u0026quot;why\u0026quot; behind choices → [[philosophy]]\u003c/li\u003e\n\u003cli\u003e\u003cinput checked=\"\" disabled=\"\" type=\"checkbox\"\u003e \u003cstrong\u003eHardware\u003c/strong\u003e - Detailed workstation specs → [[hardware]]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"interactivereference\"\u003eInteractive/Reference \u003ca href=\"#interactivereference\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cinput checked=\"\" disabled=\"\" type=\"checkbox\"\u003e \u003cstrong\u003eCheatsheets\u003c/strong\u003e - Quick reference cards for common operations → \u003ca href=\"/cheatsheets/\" class=\"wikilink\" data-title=\"Cheatsheets\" data-description=\"Quick reference cards for common operations and keybindings\" data-date=\"2026-02-08\"\u003eCheatsheets\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"improvements\"\u003eImprovements \u003ca href=\"#improvements\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cinput checked=\"\" disabled=\"\" type=\"checkbox\"\u003e Add wikilink support to zellij page (it's missing the embeds) → \u003ca href=\"/zellij/\" class=\"wikilink\" data-title=\"Zellij\" data-description=\"Zellij - a terminal workspace with batteries included\" data-date=\"2026-02-07\"\u003eZellij\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cinput checked=\"\" disabled=\"\" type=\"checkbox\"\u003e Create uv.md page (referenced in yep.md but missing) → [[uv]]\u003c/li\u003e\n\u003cli\u003e\u003cinput checked=\"\" disabled=\"\" type=\"checkbox\"\u003e Add more external embeds to tool pages\u003c/li\u003e\n\u003cli\u003e\u003cinput checked=\"\" disabled=\"\" type=\"checkbox\"\u003e \u003cstrong\u003eVHS recordings for key workflows\u003c/strong\u003e - Designed 12 tape posts with markdown frontmatter\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"vhs-recording-infrastructure\"\u003eVHS Recording Infrastructure \u003ca href=\"#vhs-recording-infrastructure\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eEach VHS tape now has its own markdown post in \u003ccode\u003epages/tapes/\u003c/code\u003e with:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFrontmatter including \u003ccode\u003etemplate: image\u003c/code\u003e and \u003ccode\u003eimage: /tapes/filename.mp4\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDescription of what is shown\u003c/li\u003e\n\u003cli\u003eKey takeaway\u003c/li\u003e\n\u003cli\u003eRelated tool embeds\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eTape Posts Created:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cinput checked=\"\" disabled=\"\" type=\"checkbox\"\u003e lf-intro.md - Basic file manager navigation\u003c/li\u003e\n\u003cli\u003e\u003cinput checked=\"\" disabled=\"\" type=\"checkbox\"\u003e lf-tmux-popup.md - Popup integration workflow\u003c/li\u003e\n\u003cli\u003e\u003cinput checked=\"\" disabled=\"\" type=\"checkbox\"\u003e gitui-intro.md - Staging and committing\u003c/li\u003e\n\u003cli\u003e\u003cinput checked=\"\" disabled=\"\" type=\"checkbox\"\u003e tmux-scratch-session.md - Alt+G scratch pad workflow\u003c/li\u003e\n\u003cli\u003e\u003cinput checked=\"\" disabled=\"\" type=\"checkbox\"\u003e tmux-session-switching.md - Session management\u003c/li\u003e\n\u003cli\u003e\u003cinput checked=\"\" disabled=\"\" type=\"checkbox\"\u003e tmux-git-project-session.md - Project-specific sessions\u003c/li\u003e\n\u003cli\u003e\u003cinput checked=\"\" disabled=\"\" type=\"checkbox\"\u003e fzf-file-finding.md - Ctrl+T fuzzy finding\u003c/li\u003e\n\u003cli\u003e\u003cinput checked=\"\" disabled=\"\" type=\"checkbox\"\u003e fzf-history-search.md - Ctrl+R history search\u003c/li\u003e\n\u003cli\u003e\u003cinput checked=\"\" disabled=\"\" type=\"checkbox\"\u003e lazygit-staging.md - Alternative git UI workflow\u003c/li\u003e\n\u003cli\u003e\u003cinput checked=\"\" disabled=\"\" type=\"checkbox\"\u003e lazydocker-containers.md - Docker management\u003c/li\u003e\n\u003cli\u003e\u003cinput checked=\"\" disabled=\"\" type=\"checkbox\"\u003e neovim-telescope.md - File finding in editor\u003c/li\u003e\n\u003cli\u003e\u003cinput checked=\"\" disabled=\"\" type=\"checkbox\"\u003e neovim-lsp-go-to-definition.md - Code navigation\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eStill to Record:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e Record actual mp4 files for all designed tapes\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e tmux \u0026quot;day in the terminal\u0026quot; workflow demo\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e Workspace management script demo\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e Kubernetes workflow with k9s\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSandbox Setup:\u003c/strong\u003e\nAll VHS recordings use the \u003ccode\u003evhs/sandbox/\u003c/code\u003e directory for safety. See AGENTS.md for sandbox best practices.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eWorkflow Demos (20-30 seconds)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u0026quot;A day in the terminal\u0026quot; - tmux session → neovim → gitui → back\u003c/li\u003e\n\u003cli\u003eWorkspace management - Using workspace script to switch projects\u003c/li\u003e\n\u003cli\u003eGit workflow - Branch, edit, stage, commit with gitui\u003c/li\u003e\n\u003cli\u003eFile exploration - fzf + lf + bat pipeline\u003c/li\u003e\n\u003cli\u003eKubernetes workflow - k9s to inspect, edit, apply\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSetup Guides (30-45 seconds)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFresh machine bootstrap - mise install → stow configs → verify\u003c/li\u003e\n\u003cli\u003eAdding a new tool - Update mise config → install → verify → commit\u003c/li\u003e\n\u003cli\u003eCreating a workspace - ~/git/workspaces/workspaces.py create workflow\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eConfiguration Highlights (15-20 seconds)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eStarship prompt customization - Show git status, tool versions\u003c/li\u003e\n\u003cli\u003etmux keybinding demo - Prefix key, splits, popups\u003c/li\u003e\n\u003cli\u003eNeovim plugin showcase - Telescope file finding, LSP features\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eComparison Videos\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u0026quot;Before/After\u0026quot; - Mouse-heavy workflow vs keyboard-driven\u003c/li\u003e\n\u003cli\u003eIDE vs Terminal - Same task in VS Code vs neovim+tmux\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eTape Organization\u003c/strong\u003e\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003evhs/\n├── tools/\n│   ├── tmux-intro.tape\n│   ├── fzf-demo.tape\n│   └── lazygit-workflow.tape\n├── workflows/\n│   ├── git-workflow.tape\n│   ├── dev-session.tape\n│   └── workspace-switching.tape\n└── guides/\n    ├── bootstrap.tape\n    └── new-tool-setup.tape\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eIntegration with Docs\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEmbed videos in tool pages after the \u0026quot;Features\u0026quot; section\u003c/li\u003e\n\u003cli\u003eUse as hero videos on index pages\u003c/li\u003e\n\u003cli\u003eLink to full recordings from quickstart guides\u003c/li\u003e\n\u003cli\u003eCreate GIF fallbacks for mobile/low-bandwidth\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e Dark/light theme toggle\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"content-ideas\"\u003eContent Ideas \u003ca href=\"#content-ideas\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"still-to-create\"\u003eStill To Create \u003ca href=\"#still-to-create\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ericing\u003c/strong\u003e - Aesthetic customization beyond function\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eone-shot-apps\u003c/strong\u003e - Documentation for the one-shot-apps directory\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eansible\u003c/strong\u003e - Infrastructure as code for machine setup\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edistrobox\u003c/strong\u003e - Container-based development environments\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003equtebrowser\u003c/strong\u003e - Keyboard-driven web browser config\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ek9s\u003c/strong\u003e - Kubernetes terminal UI\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"recently-completed-not-previously-listed\"\u003eRecently Completed (Not Previously Listed) \u003ca href=\"#recently-completed-not-previously-listed\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ehyprland\u003c/strong\u003e - Wayland tiling compositor configuration → \u003ca href=\"/hyprland/\" class=\"wikilink\" data-title=\"Hyprland Window Manager\" data-description=\"Hyprland - a dynamic tiling Wayland compositor\" data-date=\"2026-02-07\"\u003eHyprland Window Manager\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ehelix\u003c/strong\u003e - Modern modal text editor → \u003ca href=\"/helix/\" class=\"wikilink\" data-title=\"Helix Editor\" data-description=\"Helix - a post-modern modal text editor\" data-date=\"2026-02-07\"\u003eHelix Editor\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eawesome\u003c/strong\u003e - X11 tiling window manager → \u003ca href=\"/awesome/\" class=\"wikilink\" data-title=\"Awesome Window Manager\" data-description=\"Awesome WM - a highly configurable X11 window manager\" data-date=\"2026-02-07\"\u003eAwesome Window Manager\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003elazygit\u003c/strong\u003e - Git TUI alternative to gitui → \u003ca href=\"/lazygit/\" class=\"wikilink\" data-title=\"Lazygit\" data-description=\"Lazygit - a simple terminal UI for git commands\" data-date=\"2026-02-07\"\u003eLazygit\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eatuin\u003c/strong\u003e - Enhanced shell history with sync → \u003ca href=\"/atuin/\" class=\"wikilink\" data-title=\"Atuin\" data-description=\"Atuin - a magical shell history with sync\" data-date=\"2026-02-07\"\u003eAtuin\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edelta\u003c/strong\u003e - Syntax-highlighted git diff viewer → \u003ca href=\"/delta/\" class=\"wikilink\" data-title=\"Delta\" data-description=\"Delta - syntax-highlighting pager for git and diff output\" data-date=\"2026-02-07\"\u003eDelta\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003egh\u003c/strong\u003e - GitHub CLI for git operations → \u003ca href=\"/gh/\" class=\"wikilink\" data-title=\"GitHub CLI\" data-description=\"GitHub CLI - a command-line tool for GitHub\" data-date=\"2026-02-07\"\u003eGitHub CLI\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003estarship\u003c/strong\u003e - Fast, customizable shell prompt → \u003ca href=\"/starship/\" class=\"wikilink\" data-title=\"Starship Prompt\" data-description=\"Starship - minimal, fast, and customizable shell prompt\" data-date=\"2026-02-07\"\u003eStarship Prompt\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ekitty\u003c/strong\u003e - GPU-accelerated terminal emulator → \u003ca href=\"/kitty/\" class=\"wikilink\" data-title=\"kitty Terminal\" data-description=\"kitty - a fast, feature-rich, GPU-based terminal emulator\" data-date=\"2026-02-07\"\u003ekitty Terminal\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ewezterm\u003c/strong\u003e - Cross-platform terminal emulator → \u003ca href=\"/wezterm/\" class=\"wikilink\" data-title=\"WezTerm\" data-description=\"WezTerm - a GPU-accelerated cross-platform terminal emulator\" data-date=\"2026-02-07\"\u003eWezTerm\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003epolybar\u003c/strong\u003e - Status bar for X11 window managers → \u003ca href=\"/polybar/\" class=\"wikilink\" data-title=\"Polybar\" data-description=\"Polybar - a fast and easy-to-use status bar for X11\" data-date=\"2026-02-07\"\u003ePolybar\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ewaybar\u003c/strong\u003e - Status bar for Wayland compositors → \u003ca href=\"/waybar/\" class=\"wikilink\" data-title=\"Waybar\" data-description=\"Waybar - a highly customizable Wayland bar\" data-date=\"2026-02-07\"\u003eWaybar\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eyazi\u003c/strong\u003e - Async file manager alternative to lf → \u003ca href=\"/yazi/\" class=\"wikilink\" data-title=\"Yazi\" data-description=\"Yazi - a terminal file manager\" data-date=\"2026-02-07\"\u003eYazi\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eworkspace\u003c/strong\u003e - Project management and workspace switching → \u003ca href=\"/workspace/\" class=\"wikilink\" data-title=\"Workspace Script\" data-description=\"Workspace script - session management automation for tmux\" data-date=\"2026-02-07\"\u003eWorkspace Script\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edefaults\u003c/strong\u003e - Default application and system configurations → \u003ca href=\"/defaults/\" class=\"wikilink\" data-title=\"Defaults\" data-description=\"My default choices for tools and technologies\" data-date=\"2026-02-07\"\u003eDefaults\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cem\u003eThis is a living document. Items will be checked off as they're completed and new ideas will be added.\u003c/em\u003e\u003c/p\u003e\n",
      "content_text": "\nUpcoming content, improvements, and ideas for this documentation site.\n\n## Guides \u0026 How-To\n\n- [ ] **Installation/bootstrap guide** - Complete step-by-step fresh machine setup\n- [ ] **Migration guide** - Moving from other tools (VS Code → Neovim, etc.)\n- [ ] **Sync strategy** - How dotfiles stay synchronized across machines\n- [ ] **Backup \u0026 restore** - Disaster recovery for the environment\n- [ ] **Per-machine configs** - Laptop vs desktop differences\n- [ ] **Troubleshooting** - Common issues and fixes with solutions\n\n### Quick Reference Pages (Potential Additions)\n\n- [ ] **mise recipes** - Common mise tool configurations\n- [ ] **neovim recipes** - Language-specific neovim setups  \n- [ ] **tmux layouts** - Project-specific session layouts\n- [ ] **git workflows** - Team-specific git process documentation\n\n## Deep Dives\n\n- [ ] **Workflow documentation** - \"How I work\" series\n  - TDD workflow\n  - Debugging workflow\n  - Code review process\n- [ ] **Plugin deep dives** - Specific neovim plugins explained\n- [ ] **Script explanations** - Custom scripts in detail\n  - workspace.py\n  - web2app function\n  - kube-check script\n\n## Meta/Context\n\n- [x] **Tool comparison** - Detailed comparisons (Why X over Y) → [[tool-comparison]]\n- [x] **Evolution** - How the setup has changed over 10+ years → [[evolution]]\n- [x] **Philosophy** - Deeper dive into the \"why\" behind choices → [[philosophy]]\n- [x] **Hardware** - Detailed workstation specs → [[hardware]]\n\n## Interactive/Reference\n\n- [x] **Cheatsheets** - Quick reference cards for common operations → \u003ca href=\"/cheatsheets/\" class=\"wikilink\" data-title=\"Cheatsheets\" data-description=\"Quick reference cards for common operations and keybindings\" data-date=\"2026-02-08\"\u003eCheatsheets\u003c/a\u003e\n\n## Improvements\n\n- [x] Add wikilink support to zellij page (it's missing the embeds) → \u003ca href=\"/zellij/\" class=\"wikilink\" data-title=\"Zellij\" data-description=\"Zellij - a terminal workspace with batteries included\" data-date=\"2026-02-07\"\u003eZellij\u003c/a\u003e\n- [x] Create uv.md page (referenced in yep.md but missing) → [[uv]]\n- [x] Add more external embeds to tool pages\n- [x] **VHS recordings for key workflows** - Designed 12 tape posts with markdown frontmatter\n\n### VHS Recording Infrastructure\n\nEach VHS tape now has its own markdown post in `pages/tapes/` with:\n- Frontmatter including `template: image` and `image: /tapes/filename.mp4`\n- Description of what is shown\n- Key takeaway\n- Related tool embeds\n\n**Tape Posts Created:**\n- [x] lf-intro.md - Basic file manager navigation\n- [x] lf-tmux-popup.md - Popup integration workflow\n- [x] gitui-intro.md - Staging and committing\n- [x] tmux-scratch-session.md - Alt+G scratch pad workflow\n- [x] tmux-session-switching.md - Session management\n- [x] tmux-git-project-session.md - Project-specific sessions\n- [x] fzf-file-finding.md - Ctrl+T fuzzy finding\n- [x] fzf-history-search.md - Ctrl+R history search\n- [x] lazygit-staging.md - Alternative git UI workflow\n- [x] lazydocker-containers.md - Docker management\n- [x] neovim-telescope.md - File finding in editor\n- [x] neovim-lsp-go-to-definition.md - Code navigation\n\n**Still to Record:**\n- [ ] Record actual mp4 files for all designed tapes\n- [ ] tmux \"day in the terminal\" workflow demo\n- [ ] Workspace management script demo\n- [ ] Kubernetes workflow with k9s\n\n**Sandbox Setup:**\nAll VHS recordings use the `vhs/sandbox/` directory for safety. See AGENTS.md for sandbox best practices.\n\n**Workflow Demos (20-30 seconds)**\n- \"A day in the terminal\" - tmux session → neovim → gitui → back\n- Workspace management - Using workspace script to switch projects\n- Git workflow - Branch, edit, stage, commit with gitui\n- File exploration - fzf + lf + bat pipeline\n- Kubernetes workflow - k9s to inspect, edit, apply\n\n**Setup Guides (30-45 seconds)**\n- Fresh machine bootstrap - mise install → stow configs → verify\n- Adding a new tool - Update mise config → install → verify → commit\n- Creating a workspace - ~/git/workspaces/workspaces.py create workflow\n\n**Configuration Highlights (15-20 seconds)**\n- Starship prompt customization - Show git status, tool versions\n- tmux keybinding demo - Prefix key, splits, popups\n- Neovim plugin showcase - Telescope file finding, LSP features\n\n**Comparison Videos**\n- \"Before/After\" - Mouse-heavy workflow vs keyboard-driven\n- IDE vs Terminal - Same task in VS Code vs neovim+tmux\n\n**Tape Organization**\n```\nvhs/\n├── tools/\n│   ├── tmux-intro.tape\n│   ├── fzf-demo.tape\n│   └── lazygit-workflow.tape\n├── workflows/\n│   ├── git-workflow.tape\n│   ├── dev-session.tape\n│   └── workspace-switching.tape\n└── guides/\n    ├── bootstrap.tape\n    └── new-tool-setup.tape\n```\n\n**Integration with Docs**\n- Embed videos in tool pages after the \"Features\" section\n- Use as hero videos on index pages\n- Link to full recordings from quickstart guides\n- Create GIF fallbacks for mobile/low-bandwidth\n- [ ] Dark/light theme toggle\n\n## Content Ideas\n\n### Still To Create\n\n- **ricing** - Aesthetic customization beyond function\n- **one-shot-apps** - Documentation for the one-shot-apps directory\n- **ansible** - Infrastructure as code for machine setup\n- **distrobox** - Container-based development environments\n- **qutebrowser** - Keyboard-driven web browser config\n- **k9s** - Kubernetes terminal UI\n\n### Recently Completed (Not Previously Listed)\n\n- **hyprland** - Wayland tiling compositor configuration → \u003ca href=\"/hyprland/\" class=\"wikilink\" data-title=\"Hyprland Window Manager\" data-description=\"Hyprland - a dynamic tiling Wayland compositor\" data-date=\"2026-02-07\"\u003eHyprland Window Manager\u003c/a\u003e\n- **helix** - Modern modal text editor → \u003ca href=\"/helix/\" class=\"wikilink\" data-title=\"Helix Editor\" data-description=\"Helix - a post-modern modal text editor\" data-date=\"2026-02-07\"\u003eHelix Editor\u003c/a\u003e\n- **awesome** - X11 tiling window manager → \u003ca href=\"/awesome/\" class=\"wikilink\" data-title=\"Awesome Window Manager\" data-description=\"Awesome WM - a highly configurable X11 window manager\" data-date=\"2026-02-07\"\u003eAwesome Window Manager\u003c/a\u003e\n- **lazygit** - Git TUI alternative to gitui → \u003ca href=\"/lazygit/\" class=\"wikilink\" data-title=\"Lazygit\" data-description=\"Lazygit - a simple terminal UI for git commands\" data-date=\"2026-02-07\"\u003eLazygit\u003c/a\u003e\n- **atuin** - Enhanced shell history with sync → \u003ca href=\"/atuin/\" class=\"wikilink\" data-title=\"Atuin\" data-description=\"Atuin - a magical shell history with sync\" data-date=\"2026-02-07\"\u003eAtuin\u003c/a\u003e\n- **delta** - Syntax-highlighted git diff viewer → \u003ca href=\"/delta/\" class=\"wikilink\" data-title=\"Delta\" data-description=\"Delta - syntax-highlighting pager for git and diff output\" data-date=\"2026-02-07\"\u003eDelta\u003c/a\u003e\n- **gh** - GitHub CLI for git operations → \u003ca href=\"/gh/\" class=\"wikilink\" data-title=\"GitHub CLI\" data-description=\"GitHub CLI - a command-line tool for GitHub\" data-date=\"2026-02-07\"\u003eGitHub CLI\u003c/a\u003e\n- **starship** - Fast, customizable shell prompt → \u003ca href=\"/starship/\" class=\"wikilink\" data-title=\"Starship Prompt\" data-description=\"Starship - minimal, fast, and customizable shell prompt\" data-date=\"2026-02-07\"\u003eStarship Prompt\u003c/a\u003e\n- **kitty** - GPU-accelerated terminal emulator → \u003ca href=\"/kitty/\" class=\"wikilink\" data-title=\"kitty Terminal\" data-description=\"kitty - a fast, feature-rich, GPU-based terminal emulator\" data-date=\"2026-02-07\"\u003ekitty Terminal\u003c/a\u003e\n- **wezterm** - Cross-platform terminal emulator → \u003ca href=\"/wezterm/\" class=\"wikilink\" data-title=\"WezTerm\" data-description=\"WezTerm - a GPU-accelerated cross-platform terminal emulator\" data-date=\"2026-02-07\"\u003eWezTerm\u003c/a\u003e\n- **polybar** - Status bar for X11 window managers → \u003ca href=\"/polybar/\" class=\"wikilink\" data-title=\"Polybar\" data-description=\"Polybar - a fast and easy-to-use status bar for X11\" data-date=\"2026-02-07\"\u003ePolybar\u003c/a\u003e\n- **waybar** - Status bar for Wayland compositors → \u003ca href=\"/waybar/\" class=\"wikilink\" data-title=\"Waybar\" data-description=\"Waybar - a highly customizable Wayland bar\" data-date=\"2026-02-07\"\u003eWaybar\u003c/a\u003e\n- **yazi** - Async file manager alternative to lf → \u003ca href=\"/yazi/\" class=\"wikilink\" data-title=\"Yazi\" data-description=\"Yazi - a terminal file manager\" data-date=\"2026-02-07\"\u003eYazi\u003c/a\u003e\n- **workspace** - Project management and workspace switching → \u003ca href=\"/workspace/\" class=\"wikilink\" data-title=\"Workspace Script\" data-description=\"Workspace script - session management automation for tmux\" data-date=\"2026-02-07\"\u003eWorkspace Script\u003c/a\u003e\n- **defaults** - Default application and system configurations → \u003ca href=\"/defaults/\" class=\"wikilink\" data-title=\"Defaults\" data-description=\"My default choices for tools and technologies\" data-date=\"2026-02-07\"\u003eDefaults\u003c/a\u003e\n\n---\n\n*This is a living document. Items will be checked off as they're completed and new ideas will be added.*\n",
      "summary": "Upcoming content and improvements for the site",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "slash"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/neovim/",
      "url": "https://dots.waylonwalker.com/neovim/",
      "title": "Neovim Configuration",
      "content_html": "\u003cp\u003eNeovim is my primary text editor, configured with a modern setup using\nlazy.nvim for plugin management.\u003c/p\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003elazy.nvim\u003c/strong\u003e - Fast, modern plugin manager\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eLSP\u003c/strong\u003e - Language Server Protocol for IDE-like features\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTreesitter\u003c/strong\u003e - Better syntax highlighting and parsing\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003efzf/telescope\u003c/strong\u003e - Fuzzy finding for files, buffers, and more\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGit integration\u003c/strong\u003e - Gitsigns, fugitive, and diffview\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"installation\"\u003eInstallation \u003ca href=\"#installation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eVia mise (recommended):\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise install neovim\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOr from source/package manager:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Ubuntu/Debian\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install neovim\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Arch Linux\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S neovim\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# macOS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebrew install neovim\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"configuration-structure\"\u003eConfiguration Structure \u003ca href=\"#configuration-structure\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre\u003e\u003ccode\u003envim/.config/nvim/\n├── init.lua                 # Entry point\n├── lazy-lock.json          # Plugin lockfile\n└── lua/\n    ├── config/\n    │   ├── keymaps.lua     # Key bindings\n    │   ├── options.lua     # Vim options\n    │   └── lazy.lua        # Plugin manager setup\n    └── plugins/            # Individual plugin configs\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"plugin-categories\"\u003ePlugin Categories \u003ca href=\"#plugin-categories\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"core\"\u003eCore \u003ca href=\"#core\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003elazy.nvim\u003c/strong\u003e - Plugin manager\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eplenary.nvim\u003c/strong\u003e - Lua utility library\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003envim-web-devicons\u003c/strong\u003e - File type icons\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"lsp--completion\"\u003eLSP \u0026amp; Completion \u003ca href=\"#lsp--completion\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003envim-lspconfig\u003c/strong\u003e - LSP configuration\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003emason.nvim\u003c/strong\u003e - LSP server installer\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003envim-cmp\u003c/strong\u003e - Completion engine\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eLuaSnip\u003c/strong\u003e - Snippet engine\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"fuzzy-finding\"\u003eFuzzy Finding \u003ca href=\"#fuzzy-finding\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003etelescope.nvim\u003c/strong\u003e - Fuzzy finder framework\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etelescope-fzf-native\u003c/strong\u003e - Native fzf integration\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etelescope-ui-select\u003c/strong\u003e - UI selection enhancement\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"git\"\u003eGit \u003ca href=\"#git\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003egitsigns.nvim\u003c/strong\u003e - Git decorations in gutter\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003evim-fugitive\u003c/strong\u003e - Git commands\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ediffview.nvim\u003c/strong\u003e - Enhanced diff viewing\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"ui\"\u003eUI \u003ca href=\"#ui\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003elualine.nvim\u003c/strong\u003e - Status line\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebufferline.nvim\u003c/strong\u003e - Tab-like buffer line\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003envim-tree.lua\u003c/strong\u003e - File explorer\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ewhich-key.nvim\u003c/strong\u003e - Keybinding helper\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eindent-blankline.nvim\u003c/strong\u003e - Indentation guides\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"editing\"\u003eEditing \u003ca href=\"#editing\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003envim-treesitter\u003c/strong\u003e - Syntax tree parser\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003evim-surround\u003c/strong\u003e - Surround text objects\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003evim-commentary\u003c/strong\u003e - Comment toggling\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003envim-autopairs\u003c/strong\u003e - Auto-close brackets\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003evim-sleuth\u003c/strong\u003e - Automatic indentation detection\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"themes\"\u003eThemes \u003ca href=\"#themes\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003etokyonight.nvim\u003c/strong\u003e - Main color scheme\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"key-concepts\"\u003eKey Concepts \u003ca href=\"#key-concepts\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"lazy-loading\"\u003eLazy Loading \u003ca href=\"#lazy-loading\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003ePlugins are loaded on demand to improve startup time:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e-- Load only when opening a file\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;nvim-treesitter\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eevent\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;BufReadPost\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e-- Load on specific command\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;neo-tree.nvim\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecmd\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Neotree\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e-- Load on key mapping\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;telescope.nvim\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ekeys\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;leader\u0026gt;ff\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;leader\u0026gt;fg\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"lsp-setup\"\u003eLSP Setup \u003ca href=\"#lsp-setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eLanguage servers are configured via mason and lspconfig:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erequire\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;mason\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e).\u003c/span\u003e\u003cspan class=\"n\"\u003esetup\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erequire\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;mason-lspconfig\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e).\u003c/span\u003e\u003cspan class=\"n\"\u003esetup\u003c/span\u003e\u003cspan class=\"p\"\u003e({\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eensure_installed\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;lua_ls\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;rust_analyzer\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;pyright\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"custom-keymaps\"\u003eCustom Keymaps \u003ca href=\"#custom-keymaps\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eAll keymaps are in \u003ccode\u003elua/config/keymaps.lua\u003c/code\u003e:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e-- Leader key\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.g\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003emapleader\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34; \u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e-- Quick save\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.keymap\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;n\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;leader\u0026gt;w\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;cmd\u0026gt;w\u0026lt;cr\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e-- Better window navigation\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.keymap\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;n\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;C-h\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;C-w\u0026gt;h\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.keymap\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;n\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;C-j\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;C-w\u0026gt;j\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.keymap\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;n\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;C-k\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;C-w\u0026gt;k\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.keymap\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;n\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;C-l\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;C-w\u0026gt;l\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"daily-workflow\"\u003eDaily Workflow \u003ca href=\"#daily-workflow\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"file-navigation\"\u003eFile Navigation \u003ca href=\"#file-navigation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e\u0026lt;leader\u0026gt;ff\u003c/code\u003e - Find files\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e\u0026lt;leader\u0026gt;fg\u003c/code\u003e - Live grep\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e\u0026lt;leader\u0026gt;fb\u003c/code\u003e - Find buffers\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e\u0026lt;leader\u0026gt;fh\u003c/code\u003e - Help tags\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"code-navigation\"\u003eCode Navigation \u003ca href=\"#code-navigation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003egd\u003c/code\u003e - Go to definition\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003egr\u003c/code\u003e - Go to references\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003egi\u003c/code\u003e - Go to implementation\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eK\u003c/code\u003e - Hover documentation\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"git-1\"\u003eGit \u003ca href=\"#git-1\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e]c\u003c/code\u003e / \u003ccode\u003e[c\u003c/code\u003e - Next/previous hunk\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e\u0026lt;leader\u0026gt;hs\u003c/code\u003e - Stage hunk\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e\u0026lt;leader\u0026gt;hr\u003c/code\u003e - Reset hunk\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e\u0026lt;leader\u0026gt;hp\u003c/code\u003e - Preview hunk\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"performance-tips\"\u003ePerformance Tips \u003ca href=\"#performance-tips\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eCheck startup time\u003c/strong\u003e: \u003ccode\u003envim --startuptime startup.log\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eProfile plugins\u003c/strong\u003e: \u003ccode\u003e:Lazy profile\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDisable unused providers\u003c/strong\u003e:\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.g\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eloaded_python3_provider\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.g\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eloaded_ruby_provider\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.g\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eloaded_perl_provider\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evim.g\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eloaded_node_provider\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://lazy.folke.io/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://lazy.folke.io/img/docusaurus-social-card.jpg\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e🚀 Getting Started | lazy.nvim\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003elazy.nvim is a modern plugin manager for Neovim.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003elazy.folke.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/neovim/nvim-lspconfig\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/d301edf1504d34a463691768935c6a17d8a22c0604814244b6d76a4bec5fbba6/neovim/nvim-lspconfig\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - neovim/nvim-lspconfig: Quickstart configs for Nvim LSP\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eQuickstart configs for Nvim LSP. Contribute to neovim/nvim-lspconfig development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/nvim-telescope/telescope.nvim\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/4b7f15f421a5ab83f0101c41d5aa1bb38e144e81229384d40cc9ff4a2bab8b82/nvim-telescope/telescope.nvim\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - nvim-telescope/telescope.nvim: Find, Filter, Preview, Pick. All lua, all the time.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFind, Filter, Preview, Pick. All lua, all the time. - nvim-telescope/telescope.nvim\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/helix/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHelix Editor\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHelix - a post-modern modal text editor\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nNeovim is my primary text editor, configured with a modern setup using\nlazy.nvim for plugin management.\n\n## Features\n\n- **lazy.nvim** - Fast, modern plugin manager\n- **LSP** - Language Server Protocol for IDE-like features\n- **Treesitter** - Better syntax highlighting and parsing\n- **fzf/telescope** - Fuzzy finding for files, buffers, and more\n- **Git integration** - Gitsigns, fugitive, and diffview\n\n## Setup\n\n### Installation\n\nVia mise (recommended):\n\n```bash\nmise install neovim\n```\n\nOr from source/package manager:\n\n```bash\n# Ubuntu/Debian\nsudo apt install neovim\n\n# Arch Linux\nsudo pacman -S neovim\n\n# macOS\nbrew install neovim\n```\n\n### Configuration Structure\n\n```\nnvim/.config/nvim/\n├── init.lua                 # Entry point\n├── lazy-lock.json          # Plugin lockfile\n└── lua/\n    ├── config/\n    │   ├── keymaps.lua     # Key bindings\n    │   ├── options.lua     # Vim options\n    │   └── lazy.lua        # Plugin manager setup\n    └── plugins/            # Individual plugin configs\n```\n\n## Plugin Categories\n\n### Core\n\n- **lazy.nvim** - Plugin manager\n- **plenary.nvim** - Lua utility library\n- **nvim-web-devicons** - File type icons\n\n### LSP \u0026 Completion\n\n- **nvim-lspconfig** - LSP configuration\n- **mason.nvim** - LSP server installer\n- **nvim-cmp** - Completion engine\n- **LuaSnip** - Snippet engine\n\n### Fuzzy Finding\n\n- **telescope.nvim** - Fuzzy finder framework\n- **telescope-fzf-native** - Native fzf integration\n- **telescope-ui-select** - UI selection enhancement\n\n### Git\n\n- **gitsigns.nvim** - Git decorations in gutter\n- **vim-fugitive** - Git commands\n- **diffview.nvim** - Enhanced diff viewing\n\n### UI\n\n- **lualine.nvim** - Status line\n- **bufferline.nvim** - Tab-like buffer line\n- **nvim-tree.lua** - File explorer\n- **which-key.nvim** - Keybinding helper\n- **indent-blankline.nvim** - Indentation guides\n\n### Editing\n\n- **nvim-treesitter** - Syntax tree parser\n- **vim-surround** - Surround text objects\n- **vim-commentary** - Comment toggling\n- **nvim-autopairs** - Auto-close brackets\n- **vim-sleuth** - Automatic indentation detection\n\n### Themes\n\n- **tokyonight.nvim** - Main color scheme\n\n## Key Concepts\n\n### Lazy Loading\n\nPlugins are loaded on demand to improve startup time:\n\n```lua\n-- Load only when opening a file\n{ \"nvim-treesitter\", event = \"BufReadPost\" }\n\n-- Load on specific command\n{ \"neo-tree.nvim\", cmd = \"Neotree\" }\n\n-- Load on key mapping\n{ \"telescope.nvim\", keys = { \"\u003cleader\u003eff\", \"\u003cleader\u003efg\" } }\n```\n\n### LSP Setup\n\nLanguage servers are configured via mason and lspconfig:\n\n```lua\nrequire(\"mason\").setup()\nrequire(\"mason-lspconfig\").setup({\n    ensure_installed = { \"lua_ls\", \"rust_analyzer\", \"pyright\" }\n})\n```\n\n### Custom Keymaps\n\nAll keymaps are in `lua/config/keymaps.lua`:\n\n```lua\n-- Leader key\nvim.g.mapleader = \" \"\n\n-- Quick save\nvim.keymap.set(\"n\", \"\u003cleader\u003ew\", \"\u003ccmd\u003ew\u003ccr\u003e\")\n\n-- Better window navigation\nvim.keymap.set(\"n\", \"\u003cC-h\u003e\", \"\u003cC-w\u003eh\")\nvim.keymap.set(\"n\", \"\u003cC-j\u003e\", \"\u003cC-w\u003ej\")\nvim.keymap.set(\"n\", \"\u003cC-k\u003e\", \"\u003cC-w\u003ek\")\nvim.keymap.set(\"n\", \"\u003cC-l\u003e\", \"\u003cC-w\u003el\")\n```\n\n## Daily Workflow\n\n### File Navigation\n\n- `\u003cleader\u003eff` - Find files\n- `\u003cleader\u003efg` - Live grep\n- `\u003cleader\u003efb` - Find buffers\n- `\u003cleader\u003efh` - Help tags\n\n### Code Navigation\n\n- `gd` - Go to definition\n- `gr` - Go to references\n- `gi` - Go to implementation\n- `K` - Hover documentation\n\n### Git\n\n- `]c` / `[c` - Next/previous hunk\n- `\u003cleader\u003ehs` - Stage hunk\n- `\u003cleader\u003ehr` - Reset hunk\n- `\u003cleader\u003ehp` - Preview hunk\n\n## Performance Tips\n\n1. **Check startup time**: `nvim --startuptime startup.log`\n2. **Profile plugins**: `:Lazy profile`\n3. **Disable unused providers**:\n\n```lua\nvim.g.loaded_python3_provider = 0\nvim.g.loaded_ruby_provider = 0\nvim.g.loaded_perl_provider = 0\nvim.g.loaded_node_provider = 0\n```\n\n## See Also\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://lazy.folke.io/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://lazy.folke.io/img/docusaurus-social-card.jpg\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003e🚀 Getting Started | lazy.nvim\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003elazy.nvim is a modern plugin manager for Neovim.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003elazy.folke.io\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/neovim/nvim-lspconfig\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/d301edf1504d34a463691768935c6a17d8a22c0604814244b6d76a4bec5fbba6/neovim/nvim-lspconfig\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - neovim/nvim-lspconfig: Quickstart configs for Nvim LSP\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eQuickstart configs for Nvim LSP. Contribute to neovim/nvim-lspconfig development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/nvim-telescope/telescope.nvim\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/4b7f15f421a5ab83f0101c41d5aa1bb38e144e81229384d40cc9ff4a2bab8b82/nvim-telescope/telescope.nvim\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - nvim-telescope/telescope.nvim: Find, Filter, Preview, Pick. All lua, all the time.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eFind, Filter, Preview, Pick. All lua, all the time. - nvim-telescope/telescope.nvim\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/helix/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHelix Editor\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHelix - a post-modern modal text editor\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Neovim configuration with lazy.nvim for plugin management",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/mise/",
      "url": "https://dots.waylonwalker.com/mise/",
      "title": "mise Tool Management",
      "content_html": "\u003cp\u003e\u003ca href=\"https://mise.jdx.dev/\"\u003emise\u003c/a\u003e is a universal version manager for development\ntools. It replaces separate version managers (nvm, pyenv, rbenv, etc.) with a\nsingle tool.\u003c/p\u003e\n\u003ch2 id=\"why-mise\"\u003eWhy mise? \u003ca href=\"#why-mise\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eOne tool\u003c/strong\u003e - Manage all languages and tools in one place\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFast\u003c/strong\u003e - Written in Rust, activates in milliseconds\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCompatible\u003c/strong\u003e - Works with asdf plugins\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eProject-specific\u003c/strong\u003e - Per-directory tool versions via \u003ccode\u003e.tool-versions\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"installation\"\u003eInstallation \u003ca href=\"#installation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl https://mise.run \u003cspan class=\"p\"\u003e|\u003c/span\u003e sh\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eActivate in your shell:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;eval \u0026#34;$(~/.local/bin/mise activate zsh)\u0026#34;\u0026#39;\u003c/span\u003e \u0026gt;\u0026gt; ~/.zshrc\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"configuration\"\u003eConfiguration \u003ca href=\"#configuration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe main config is at \u003ccode\u003emise/.config/mise/config.toml\u003c/code\u003e:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003esettings\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eidiomatic_version_file_enable_tools\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;ruby\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003etools\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eage\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;latest\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eargocd\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;latest\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eatuin\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;latest\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ebitwarden\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;latest\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# ... more tools\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"key-commands\"\u003eKey Commands \u003ca href=\"#key-commands\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Install all tools from config\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise install\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Install a specific tool\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise install node@20\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# List installed tools\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise list\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Use a specific version in current directory\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise use node@20\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Run a command with a specific tool version\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise \u003cspan class=\"nb\"\u003eexec\u003c/span\u003e node@18 -- npm \u003cspan class=\"nb\"\u003etest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"tools-managed\"\u003eTools Managed \u003ca href=\"#tools-managed\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eMy setup includes:\u003c/p\u003e\n\u003ch3 id=\"development\"\u003eDevelopment \u003ca href=\"#development\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eneovim\u003c/code\u003e - Text editor\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003enode\u003c/code\u003e - JavaScript runtime\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003epnpm\u003c/code\u003e - Package manager\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003euv\u003c/code\u003e - Python package manager\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"kubernetes\"\u003eKubernetes \u003ca href=\"#kubernetes\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ekubectl\u003c/code\u003e - Kubernetes CLI\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ehelm\u003c/code\u003e - Package manager for K8s\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ek9s\u003c/code\u003e - Terminal UI for K8s\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eargocd\u003c/code\u003e - GitOps tool\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"utilities\"\u003eUtilities \u003ca href=\"#utilities\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003efzf\u003c/code\u003e - Fuzzy finder\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eripgrep\u003c/code\u003e - Fast grep alternative\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efd\u003c/code\u003e - Fast find alternative\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ebat\u003c/code\u003e - Enhanced cat\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eeza\u003c/code\u003e - Modern ls replacement\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edelta\u003c/code\u003e - Syntax-highlighting pager for git\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edifftastic\u003c/code\u003e - Structural diff tool\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edirenv\u003c/code\u003e - Environment variable manager\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"terminal\"\u003eTerminal \u003ca href=\"#terminal\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estarship\u003c/code\u003e - Shell prompt\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ezellij\u003c/code\u003e - Terminal multiplexer\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etmux\u003c/code\u003e - Terminal multiplexer\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elf\u003c/code\u003e - File manager\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eyazi\u003c/code\u003e - Alternative file manager\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"git\"\u003eGit \u003ca href=\"#git\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003egitui\u003c/code\u003e - Terminal UI for git (primary)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elazygit\u003c/code\u003e - Alternative git TUI\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003egithub-cli\u003c/code\u003e - GitHub CLI\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eripsecrets\u003c/code\u003e - Secret scanner\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"media\"\u003eMedia \u003ca href=\"#media\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003evhs\u003c/code\u003e - Terminal recording tool\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"project-specific-versions\"\u003eProject-Specific Versions \u003ca href=\"#project-specific-versions\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eCreate a \u003ccode\u003e.tool-versions\u003c/code\u003e file in project directories:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;nodejs 20.11.0\u0026#34;\u003c/span\u003e \u0026gt; .tool-versions\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;python 3.11\u0026#34;\u003c/span\u003e \u0026gt;\u0026gt; .tool-versions\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003emise will automatically switch to these versions when you enter the directory.\u003c/p\u003e\n\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://mise.jdx.dev/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHome | mise-en-place\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003emise-en-place documentation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emise.jdx.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://asdf-vm.com/manage/plugins.html\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePlugins | asdf\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eManage multiple runtime versions with a single CLI tool\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003easdf-vm.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\n[mise](https://mise.jdx.dev/) is a universal version manager for development\ntools. It replaces separate version managers (nvm, pyenv, rbenv, etc.) with a\nsingle tool.\n\n## Why mise?\n\n- **One tool** - Manage all languages and tools in one place\n- **Fast** - Written in Rust, activates in milliseconds\n- **Compatible** - Works with asdf plugins\n- **Project-specific** - Per-directory tool versions via `.tool-versions`\n\n## Installation\n\n```bash\ncurl https://mise.run | sh\n```\n\nActivate in your shell:\n\n```bash\necho 'eval \"$(~/.local/bin/mise activate zsh)\"' \u003e\u003e ~/.zshrc\n```\n\n## Configuration\n\nThe main config is at `mise/.config/mise/config.toml`:\n\n```toml\n[settings]\nidiomatic_version_file_enable_tools = [\"ruby\"]\n\n[tools]\nage = \"latest\"\nargocd = \"latest\"\natuin = \"latest\"\nbitwarden = \"latest\"\n# ... more tools\n```\n\n## Key Commands\n\n```bash\n# Install all tools from config\nmise install\n\n# Install a specific tool\nmise install node@20\n\n# List installed tools\nmise list\n\n# Use a specific version in current directory\nmise use node@20\n\n# Run a command with a specific tool version\nmise exec node@18 -- npm test\n```\n\n## Tools Managed\n\nMy setup includes:\n\n### Development\n\n- `neovim` - Text editor\n- `node` - JavaScript runtime\n- `pnpm` - Package manager\n- `uv` - Python package manager\n\n### Kubernetes\n\n- `kubectl` - Kubernetes CLI\n- `helm` - Package manager for K8s\n- `k9s` - Terminal UI for K8s\n- `argocd` - GitOps tool\n\n### Utilities\n\n- `fzf` - Fuzzy finder\n- `ripgrep` - Fast grep alternative\n- `fd` - Fast find alternative\n- `bat` - Enhanced cat\n- `eza` - Modern ls replacement\n- `delta` - Syntax-highlighting pager for git\n- `difftastic` - Structural diff tool\n- `direnv` - Environment variable manager\n\n### Terminal\n\n- `starship` - Shell prompt\n- `zellij` - Terminal multiplexer\n- `tmux` - Terminal multiplexer\n- `lf` - File manager\n- `yazi` - Alternative file manager\n\n### Git\n\n- `gitui` - Terminal UI for git (primary)\n- `lazygit` - Alternative git TUI\n- `github-cli` - GitHub CLI\n- `ripsecrets` - Secret scanner\n\n### Media\n\n- `vhs` - Terminal recording tool\n\n## Project-Specific Versions\n\nCreate a `.tool-versions` file in project directories:\n\n```bash\necho \"nodejs 20.11.0\" \u003e .tool-versions\necho \"python 3.11\" \u003e\u003e .tool-versions\n```\n\nmise will automatically switch to these versions when you enter the directory.\n\n## See Also\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://mise.jdx.dev/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHome | mise-en-place\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003emise-en-place documentation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003emise.jdx.dev\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://asdf-vm.com/manage/plugins.html\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePlugins | asdf\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eManage multiple runtime versions with a single CLI tool\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003easdf-vm.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "mise - the universal version manager for development tools",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/links/",
      "url": "https://dots.waylonwalker.com/links/",
      "title": "Links",
      "content_html": "\u003cp\u003eA collection of links to things I find useful or interesting.\u003c/p\u003e\n\u003ch2 id=\"my-sites\"\u003eMy Sites \u003ca href=\"#my-sites\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://waylonwalker.com/\"\u003ewaylonwalker.com\u003c/a\u003e - Personal website and blog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://devtainer.waylonwalker.com/\"\u003edevtainer.waylonwalker.com\u003c/a\u003e - This site (dotfiles documentation)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"projects\"\u003eProjects \u003ca href=\"#projects\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/waylonwalker/devtainer\"\u003eGitHub - waylonwalker/devtainer\u003c/a\u003e - Dotfiles and development container\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"tools-i-recommend\"\u003eTools I Recommend \u003ca href=\"#tools-i-recommend\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSee the full documentation for these tools on this site:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"/neovim/\" class=\"wikilink\" data-title=\"Neovim Configuration\" data-description=\"Neovim configuration with lazy.nvim for plugin management\" data-date=\"2026-02-07\"\u003eNeovim Configuration\u003c/a\u003e - Editor of choice\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/tmux/\" class=\"wikilink\" data-title=\"tmux Configuration\" data-description=\"tmux configuration for persistent terminal sessions with popup windows and session management\" data-date=\"2026-02-07\"\u003etmux Configuration\u003c/a\u003e - Terminal multiplexer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/zsh/\" class=\"wikilink\" data-title=\"zsh Configuration\" data-description=\"zsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\" data-date=\"2026-02-07\"\u003ezsh Configuration\u003c/a\u003e - Shell\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/mise/\" class=\"wikilink\" data-title=\"mise Tool Management\" data-description=\"mise - the universal version manager for development tools\" data-date=\"2026-02-07\"\u003emise Tool Management\u003c/a\u003e - Tool version manager\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"inspiration\"\u003eInspiration \u003ca href=\"#inspiration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSites that inspired this documentation approach:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://llmstxt.site/\"\u003ellmstxt.site\u003c/a\u003e - llms.txt format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://uses.tech/\"\u003euses.tech\u003c/a\u003e - /uses pages directory\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"friends-and-community\"\u003eFriends and Community \u003ca href=\"#friends-and-community\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eOther developers with documented setups:\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e(Add links as you discover them)\u003c/em\u003e\u003c/p\u003e\n\u003ch2 id=\"slash-pages\"\u003eSlash Pages \u003ca href=\"#slash-pages\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInspired by the \u003ca href=\"https://uses.tech/\"\u003e/uses\u003c/a\u003e and \u003ca href=\"https://nownownow.com/\"\u003e/now\u003c/a\u003e movements, this site includes several slash pages:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"/about/\" class=\"wikilink\" data-title=\"About\" data-description=\"About Waylon Walker and this site\" data-date=\"2026-02-07\"\u003eAbout\u003c/a\u003e - About me\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/colophon/\" class=\"wikilink\" data-title=\"Colophon\" data-description=\"How this site is built - colophon\" data-date=\"2026-02-07\"\u003eColophon\u003c/a\u003e - How this site is built\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/ai/\" class=\"wikilink\" data-title=\"AI\" data-description=\"How I use AI tools in my workflow\" data-date=\"2026-02-07\"\u003eAI\u003c/a\u003e - How I use AI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/uses/\" class=\"wikilink\" data-title=\"Uses\" data-description=\"Hardware and software I use daily\" data-date=\"2026-02-07\"\u003eUses\u003c/a\u003e - Hardware and software I use\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/defaults/\" class=\"wikilink\" data-title=\"Defaults\" data-description=\"My default choices for tools and technologies\" data-date=\"2026-02-07\"\u003eDefaults\u003c/a\u003e - My default choices\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/yep/\" class=\"wikilink\" data-title=\"Yep\" data-description=\"Things I endorse and recommend\" data-date=\"2026-02-07\"\u003eYep\u003c/a\u003e - Things I endorse\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/nope/\" class=\"wikilink\" data-title=\"Nope\" data-description=\"Things I avoid and do not recommend\" data-date=\"2026-02-07\"\u003eNope\u003c/a\u003e - Things I avoid\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nA collection of links to things I find useful or interesting.\n\n## My Sites\n\n- [waylonwalker.com](https://waylonwalker.com/) - Personal website and blog\n- [devtainer.waylonwalker.com](https://devtainer.waylonwalker.com/) - This site (dotfiles documentation)\n\n## Projects\n\n- [GitHub - waylonwalker/devtainer](https://github.com/waylonwalker/devtainer) - Dotfiles and development container\n\n## Tools I Recommend\n\nSee the full documentation for these tools on this site:\n\n- \u003ca href=\"/neovim/\" class=\"wikilink\" data-title=\"Neovim Configuration\" data-description=\"Neovim configuration with lazy.nvim for plugin management\" data-date=\"2026-02-07\"\u003eNeovim Configuration\u003c/a\u003e - Editor of choice\n- \u003ca href=\"/tmux/\" class=\"wikilink\" data-title=\"tmux Configuration\" data-description=\"tmux configuration for persistent terminal sessions with popup windows and session management\" data-date=\"2026-02-07\"\u003etmux Configuration\u003c/a\u003e - Terminal multiplexer\n- \u003ca href=\"/zsh/\" class=\"wikilink\" data-title=\"zsh Configuration\" data-description=\"zsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\" data-date=\"2026-02-07\"\u003ezsh Configuration\u003c/a\u003e - Shell\n- \u003ca href=\"/mise/\" class=\"wikilink\" data-title=\"mise Tool Management\" data-description=\"mise - the universal version manager for development tools\" data-date=\"2026-02-07\"\u003emise Tool Management\u003c/a\u003e - Tool version manager\n\n## Inspiration\n\nSites that inspired this documentation approach:\n\n- [llmstxt.site](https://llmstxt.site/) - llms.txt format\n- [uses.tech](https://uses.tech/) - /uses pages directory\n\n## Friends and Community\n\nOther developers with documented setups:\n\n*(Add links as you discover them)*\n\n## Slash Pages\n\nInspired by the [/uses](https://uses.tech/) and [/now](https://nownownow.com/) movements, this site includes several slash pages:\n\n- \u003ca href=\"/about/\" class=\"wikilink\" data-title=\"About\" data-description=\"About Waylon Walker and this site\" data-date=\"2026-02-07\"\u003eAbout\u003c/a\u003e - About me\n- \u003ca href=\"/colophon/\" class=\"wikilink\" data-title=\"Colophon\" data-description=\"How this site is built - colophon\" data-date=\"2026-02-07\"\u003eColophon\u003c/a\u003e - How this site is built\n- \u003ca href=\"/ai/\" class=\"wikilink\" data-title=\"AI\" data-description=\"How I use AI tools in my workflow\" data-date=\"2026-02-07\"\u003eAI\u003c/a\u003e - How I use AI\n- \u003ca href=\"/uses/\" class=\"wikilink\" data-title=\"Uses\" data-description=\"Hardware and software I use daily\" data-date=\"2026-02-07\"\u003eUses\u003c/a\u003e - Hardware and software I use\n- \u003ca href=\"/defaults/\" class=\"wikilink\" data-title=\"Defaults\" data-description=\"My default choices for tools and technologies\" data-date=\"2026-02-07\"\u003eDefaults\u003c/a\u003e - My default choices\n- \u003ca href=\"/yep/\" class=\"wikilink\" data-title=\"Yep\" data-description=\"Things I endorse and recommend\" data-date=\"2026-02-07\"\u003eYep\u003c/a\u003e - Things I endorse\n- \u003ca href=\"/nope/\" class=\"wikilink\" data-title=\"Nope\" data-description=\"Things I avoid and do not recommend\" data-date=\"2026-02-07\"\u003eNope\u003c/a\u003e - Things I avoid\n",
      "summary": "Links to other sites and resources",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "slash"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/lf/",
      "url": "https://dots.waylonwalker.com/lf/",
      "title": "lf",
      "content_html": "\u003cp\u003elf is a terminal file manager written in Go, heavily inspired by ranger. It focuses on simplicity and speed with minimal dependencies.\u003c/p\u003e\n\u003cp\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\"\u003e\u003csource src=\"/tapes/lf-intro.mp4\" type=\"video/mp4\"\u003elf demo\u003c/video\u003e\u003c/p\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFast\u003c/strong\u003e - Written in Go, starts instantly\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMinimal\u003c/strong\u003e - Single binary, no runtime dependencies\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eConfigurable\u003c/strong\u003e - Shell commands for previews and custom actions\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMouse support\u003c/strong\u003e - Optional mouse integration\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eServer mode\u003c/strong\u003e - Remote file management via client/server\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstall via package manager:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Via mise (recommended)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise install lf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Arch Linux\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S lf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# macOS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebrew install lf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Go install\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ego install github.com/gokcehan/lf@latest\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"configuration\"\u003eConfiguration \u003ca href=\"#configuration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eConfig file: \u003ccode\u003e~/.config/lf/lfrc\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eExample configuration:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Basic settings\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e preview \u003cspan class=\"nb\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e drawbox \u003cspan class=\"nb\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e hidden \u003cspan class=\"nb\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e ignorecase \u003cspan class=\"nb\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Key mappings\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emap gh \u003cspan class=\"nb\"\u003ecd\u003c/span\u003e ~\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emap g/ \u003cspan class=\"nb\"\u003ecd\u003c/span\u003e /\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emap E \u003cspan class=\"nv\"\u003e$$\u003c/span\u003eEDITOR \u003cspan class=\"nv\"\u003e$f\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Custom commands\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emap D delete\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emap x cut\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emap y copy\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emap p paste\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Previewer\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e previewer ~/.config/lf/preview\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"key-bindings\"\u003eKey Bindings \u003ca href=\"#key-bindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"navigation\"\u003eNavigation \u003ca href=\"#navigation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ej/k\u003c/code\u003e or \u003ccode\u003e↓/↑\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMove down/up\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eh/l\u003c/code\u003e or \u003ccode\u003e←/→\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParent/child directory\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egg\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo to top\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eG\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo to bottom\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eH\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eBack in history\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eL\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eForward in history\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e~\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo to home\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"file-operations\"\u003eFile Operations \u003ca href=\"#file-operations\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSpace\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle selection\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ey\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eYank (copy)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ed\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCut\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ep\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePaste\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eD\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDelete\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003er\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRename\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCreate file\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eA\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCreate directory\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eE\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOpen with $EDITOR\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEnter\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOpen file\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"view\"\u003eView \u003ca href=\"#view\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e.\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle hidden files\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ei\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle preview\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ezh\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle hidden files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"tmux-integration\"\u003etmux Integration \u003ca href=\"#tmux-integration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eFrom \u003ccode\u003e.tmux.conf\u003c/code\u003e:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ebind\u003c/span\u003e -n M-e display-popup -d \u003cspan class=\"s1\"\u003e\u0026#39;#{pane_current_path}\u0026#39;\u003c/span\u003e -h 100% -w 75% -x \u003cspan class=\"m\"\u003e0\u003c/span\u003e -E \u003cspan class=\"s2\"\u003e\u0026#34;lf\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis opens lf in a popup window with Alt+E, starting in the current pane's directory.\u003c/p\u003e\n\u003cp\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\"\u003e\u003csource src=\"/tapes/lf-tmux-popup.mp4\" type=\"video/mp4\"\u003elf in tmux popup workflow\u003c/video\u003e\u003c/p\u003e\n\u003ch2 id=\"previews\"\u003ePreviews \u003ca href=\"#previews\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003elf uses external programs for previews. Create \u003ccode\u003e~/.config/lf/preview\u003c/code\u003e:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/sh\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e\u003c/span\u003e\u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e in\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    *.txt\u003cspan class=\"p\"\u003e|\u003c/span\u003e*.md\u003cspan class=\"o\"\u003e)\u003c/span\u003e cat \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    *.jpg\u003cspan class=\"p\"\u003e|\u003c/span\u003e*.png\u003cspan class=\"o\"\u003e)\u003c/span\u003e viu \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    *\u003cspan class=\"o\"\u003e)\u003c/span\u003e file \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eesac\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"shell-integration\"\u003eShell Integration \u003ca href=\"#shell-integration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAdd to \u003ccode\u003e~/.zshrc\u003c/code\u003e:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003elfcd \u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003etmp\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003emktemp\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    lf -last-dir-path\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$tmp\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$@\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -f \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$tmp\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003edir\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003ecat \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$tmp\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        rm -f \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$tmp\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e[\u003c/span\u003e -d \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$dir\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$dir\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e !\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PWD\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"nb\"\u003ecd\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$dir\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThen use \u003ccode\u003elfcd\u003c/code\u003e to launch lf and automatically cd to the last visited directory on exit.\u003c/p\u003e\n\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/yazi/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eYazi\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYazi - a terminal file manager\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ezsh Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/gokcehan/lf\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/4de59f7cdcd52916609773afbb43de08bd4fc1fea2b6863f5af01d1f6c48baaa/gokcehan/lf\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - gokcehan/lf: Terminal file manager\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTerminal file manager. Contribute to gokcehan/lf development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nlf is a terminal file manager written in Go, heavily inspired by ranger. It focuses on simplicity and speed with minimal dependencies.\n\n![lf demo](/tapes/lf-intro.mp4)\n\n## Features\n\n- **Fast** - Written in Go, starts instantly\n- **Minimal** - Single binary, no runtime dependencies\n- **Configurable** - Shell commands for previews and custom actions\n- **Mouse support** - Optional mouse integration\n- **Server mode** - Remote file management via client/server\n\n## Setup\n\nInstall via package manager:\n\n```bash\n# Via mise (recommended)\nmise install lf\n\n# Arch Linux\nsudo pacman -S lf\n\n# macOS\nbrew install lf\n\n# Go install\ngo install github.com/gokcehan/lf@latest\n```\n\n## Configuration\n\nConfig file: `~/.config/lf/lfrc`\n\nExample configuration:\n\n```bash\n# Basic settings\nset preview true\nset drawbox true\nset hidden true\nset ignorecase true\n\n# Key mappings\nmap gh cd ~\nmap g/ cd /\nmap E $$EDITOR $f\n\n# Custom commands\nmap D delete\nmap x cut\nmap y copy\nmap p paste\n\n# Previewer\nset previewer ~/.config/lf/preview\n```\n\n## Key Bindings\n\n### Navigation\n\n| Key | Action |\n|-----|--------|\n| `j/k` or `↓/↑` | Move down/up |\n| `h/l` or `←/→` | Parent/child directory |\n| `gg` | Go to top |\n| `G` | Go to bottom |\n| `H` | Back in history |\n| `L` | Forward in history |\n| `~` | Go to home |\n\n### File Operations\n\n| Key | Action |\n|-----|--------|\n| `Space` | Toggle selection |\n| `y` | Yank (copy) |\n| `d` | Cut |\n| `p` | Paste |\n| `D` | Delete |\n| `r` | Rename |\n| `a` | Create file |\n| `A` | Create directory |\n| `E` | Open with $EDITOR |\n| `Enter` | Open file |\n\n### View\n\n| Key | Action |\n|-----|--------|\n| `.` | Toggle hidden files |\n| `i` | Toggle preview |\n| `zh` | Toggle hidden files |\n\n## tmux Integration\n\nFrom `.tmux.conf`:\n\n```bash\nbind -n M-e display-popup -d '#{pane_current_path}' -h 100% -w 75% -x 0 -E \"lf\"\n```\n\nThis opens lf in a popup window with Alt+E, starting in the current pane's directory.\n\n![lf in tmux popup workflow](/tapes/lf-tmux-popup.mp4)\n\n## Previews\n\nlf uses external programs for previews. Create `~/.config/lf/preview`:\n\n```bash\n#!/bin/sh\ncase \"$1\" in\n    *.txt|*.md) cat \"$1\" ;;\n    *.jpg|*.png) viu \"$1\" ;;\n    *) file \"$1\" ;;\nesac\n```\n\n## Shell Integration\n\nAdd to `~/.zshrc`:\n\n```bash\nlfcd () {\n    tmp=\"$(mktemp)\"\n    lf -last-dir-path=\"$tmp\" \"$@\"\n    if [ -f \"$tmp\" ]; then\n        dir=\"$(cat \"$tmp\")\"\n        rm -f \"$tmp\"\n        [ -d \"$dir\" ] \u0026\u0026 [ \"$dir\" != \"$PWD\" ] \u0026\u0026 cd \"$dir\"\n    fi\n}\n```\n\nThen use `lfcd` to launch lf and automatically cd to the last visited directory on exit.\n\n## See Also\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/yazi/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eYazi\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eYazi - a terminal file manager\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ezsh Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/gokcehan/lf\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/4de59f7cdcd52916609773afbb43de08bd4fc1fea2b6863f5af01d1f6c48baaa/gokcehan/lf\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - gokcehan/lf: Terminal file manager\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTerminal file manager. Contribute to gokcehan/lf development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "lf - a terminal file manager written in Go",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/lazygit/",
      "url": "https://dots.waylonwalker.com/lazygit/",
      "title": "Lazygit",
      "content_html": "\u003cp\u003eLazygit is a simple terminal UI for git commands that makes common git operations fast and visual.\u003c/p\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eVisual staging\u003c/strong\u003e - Stage/unstage files with spacebar\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBranch management\u003c/strong\u003e - Create, checkout, merge branches easily\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eConflict resolution\u003c/strong\u003e - Interactive merge conflict handling\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCommit history\u003c/strong\u003e - Browse and search commits\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStash management\u003c/strong\u003e - View and apply stashes\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCustom commands\u003c/strong\u003e - Add your own keybindings\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstall via package manager:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Ubuntu/Debian\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo add-apt-repository ppa:lazygit-team/release\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install lazygit\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Arch Linux\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S lazygit\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# macOS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebrew install lazygit\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Via mise\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise install lazygit\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"launching\"\u003eLaunching \u003ca href=\"#launching\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003elazygit\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOr from within a git repo:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003elg  \u003cspan class=\"c1\"\u003e# If you have an alias\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"key-bindings\"\u003eKey Bindings \u003ca href=\"#key-bindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"global\"\u003eGlobal \u003ca href=\"#global\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e?\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eHelp\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eq\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eQuit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e1-5\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSwitch panel (Status, Files, Local Branches, Commits, Stash)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eR\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRefresh\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"files-panel\"\u003eFiles Panel \u003ca href=\"#files-panel\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSpace\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStage/unstage\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ed\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDiscard changes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStage all\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eA\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eUnstage all\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ec\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCommit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eC\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCommit with editor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ee\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEdit file\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"branches-panel\"\u003eBranches Panel \u003ca href=\"#branches-panel\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ec\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCheckout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003en\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNew branch\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003em\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMerge\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003er\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRebase\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ed\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDelete\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"commits-panel\"\u003eCommits Panel \u003ca href=\"#commits-panel\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003es\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSquash\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003er\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eReword\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ed\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDrop\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ee\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEdit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ep\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePick\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"custom-commands\"\u003eCustom Commands \u003ca href=\"#custom-commands\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAdd custom commands in \u003ccode\u003e~/.config/lazygit/config.yml\u003c/code\u003e:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003ecustomCommands\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"nt\"\u003ekey\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;f\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003econtext\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;files\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003edescription\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;Fixup commit\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ecommand\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;git commit --fixup {{.SelectedLocalCommit.Sha}}\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003esubprocess\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/git/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGit Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGit configuration with aliases, delta for diffs, and work/personal separation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/gitui/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003egitui\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003egitui - a blazing-fast terminal UI for git\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/delta/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDelta\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDelta - syntax-highlighting pager for git and diff output\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/jesseduffield/lazygit\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/82349f5c5216b21086c8d33ac2facf9bc67141241711b8812a6a693ea295b93c/jesseduffield/lazygit\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - jesseduffield/lazygit: simple terminal UI for git commands\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003esimple terminal UI for git commands. Contribute to jesseduffield/lazygit development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nLazygit is a simple terminal UI for git commands that makes common git operations fast and visual.\n\n## Features\n\n- **Visual staging** - Stage/unstage files with spacebar\n- **Branch management** - Create, checkout, merge branches easily\n- **Conflict resolution** - Interactive merge conflict handling\n- **Commit history** - Browse and search commits\n- **Stash management** - View and apply stashes\n- **Custom commands** - Add your own keybindings\n\n## Setup\n\nInstall via package manager:\n\n```bash\n# Ubuntu/Debian\nsudo add-apt-repository ppa:lazygit-team/release\nsudo apt update\nsudo apt install lazygit\n\n# Arch Linux\nsudo pacman -S lazygit\n\n# macOS\nbrew install lazygit\n\n# Via mise\nmise install lazygit\n```\n\n## Launching\n\n```bash\nlazygit\n```\n\nOr from within a git repo:\n\n```bash\nlg  # If you have an alias\n```\n\n## Key Bindings\n\n### Global\n\n| Key | Action |\n|-----|--------|\n| `?` | Help |\n| `q` | Quit |\n| `1-5` | Switch panel (Status, Files, Local Branches, Commits, Stash) |\n| `R` | Refresh |\n\n### Files Panel\n\n| Key | Action |\n|-----|--------|\n| `Space` | Stage/unstage |\n| `d` | Discard changes |\n| `a` | Stage all |\n| `A` | Unstage all |\n| `c` | Commit |\n| `C` | Commit with editor |\n| `e` | Edit file |\n\n### Branches Panel\n\n| Key | Action |\n|-----|--------|\n| `c` | Checkout |\n| `n` | New branch |\n| `m` | Merge |\n| `r` | Rebase |\n| `d` | Delete |\n\n### Commits Panel\n\n| Key | Action |\n|-----|--------|\n| `s` | Squash |\n| `r` | Reword |\n| `d` | Drop |\n| `e` | Edit |\n| `p` | Pick |\n\n## Custom Commands\n\nAdd custom commands in `~/.config/lazygit/config.yml`:\n\n```yaml\ncustomCommands:\n  - key: 'f'\n    context: 'files'\n    description: 'Fixup commit'\n    command: 'git commit --fixup {{.SelectedLocalCommit.Sha}}'\n    subprocess: true\n```\n\n## See Also\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/git/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGit Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGit configuration with aliases, delta for diffs, and work/personal separation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/gitui/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003egitui\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003egitui - a blazing-fast terminal UI for git\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/delta/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDelta\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDelta - syntax-highlighting pager for git and diff output\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/jesseduffield/lazygit\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/82349f5c5216b21086c8d33ac2facf9bc67141241711b8812a6a693ea295b93c/jesseduffield/lazygit\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - jesseduffield/lazygit: simple terminal UI for git commands\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003esimple terminal UI for git commands. Contribute to jesseduffield/lazygit development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Lazygit - a simple terminal UI for git commands",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/kitty/",
      "url": "https://dots.waylonwalker.com/kitty/",
      "title": "kitty Terminal",
      "content_html": "\u003cp\u003ekitty is a fast, feature-rich, GPU-based terminal emulator that offloads rendering to the GPU for smooth performance.\u003c/p\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGPU acceleration\u003c/strong\u003e - Renders text using the GPU for better performance\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTabs and windows\u003c/strong\u003e - Built-in multiplexing without needing tmux\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eUnicode support\u003c/strong\u003e - Excellent support for emojis and international characters\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eImage support\u003c/strong\u003e - Display images directly in the terminal\u003c/li\u003e\n\u003cli\u003e** kittens** - Extend functionality with Python scripts\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstall via package manager:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Ubuntu/Debian\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install kitty\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Arch Linux\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S kitty\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# macOS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebrew install kitty\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOr via mise:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise install kitty\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"configuration\"\u003eConfiguration \u003ca href=\"#configuration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eConfig file: \u003ccode\u003e~/.config/kitty/kitty.conf\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eKey settings from my config:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Font\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efont_family      JetBrains Mono\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efont_size        12.0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Opacity\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebackground_opacity 0.95\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Cursor\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecursor_shape     block\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecursor_blink_interval \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Scrollback\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003escrollback_lines \u003cspan class=\"m\"\u003e10000\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"key-bindings\"\u003eKey Bindings \u003ca href=\"#key-bindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+Shift+Enter\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNew window\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+Shift+W\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eClose window\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+Shift+]\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNext window\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+Shift+[\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePrevious window\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+Shift+T\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNew tab\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+Shift+Q\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eClose tab\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+Shift+Right\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNext tab\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+Shift+Left\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePrevious tab\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+Shift+Up\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eScroll up\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+Shift+Down\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eScroll down\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+Shift+G\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShow last command output\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+Shift+H\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eBrowse scrollback in less\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"kittens\"\u003ekittens \u003ca href=\"#kittens\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003ekittens are small Python programs that extend kitty:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# SSH with kitty enhancements\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekitty +kitten ssh hostname\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Diff files with image support\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekitty +kitten diff file1 file2\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Transfer files over SSH\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekitty +kitten transfer file.txt remote:\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"integration-with-tmux\"\u003eIntegration with tmux \u003ca href=\"#integration-with-tmux\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWhile kitty has its own multiplexing, I often use it with tmux for session persistence:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Start kitty with tmux\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekitty tmux\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/wezterm/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWezTerm\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWezTerm - a GPU-accelerated cross-platform terminal emulator\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/tmux/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etmux Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux configuration for persistent terminal sessions with popup windows and session management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://sw.kovidgoyal.net/kitty/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://sw.kovidgoyal.net/kitty/_images/social_previews/summary_index_f767dd9c.png\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ekitty\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIf you live in the terminal, kitty is made for YOU! The fast, feature-rich, GPU based terminal emulator. Fast Uses GPU and SIMD vector CPU instructions for best in class performance, Uses threaded ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ekitty \u0026middot; sw.kovidgoyal.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nkitty is a fast, feature-rich, GPU-based terminal emulator that offloads rendering to the GPU for smooth performance.\n\n## Features\n\n- **GPU acceleration** - Renders text using the GPU for better performance\n- **Tabs and windows** - Built-in multiplexing without needing tmux\n- **Unicode support** - Excellent support for emojis and international characters\n- **Image support** - Display images directly in the terminal\n- ** kittens** - Extend functionality with Python scripts\n\n## Setup\n\nInstall via package manager:\n\n```bash\n# Ubuntu/Debian\nsudo apt install kitty\n\n# Arch Linux\nsudo pacman -S kitty\n\n# macOS\nbrew install kitty\n```\n\nOr via mise:\n\n```bash\nmise install kitty\n```\n\n## Configuration\n\nConfig file: `~/.config/kitty/kitty.conf`\n\nKey settings from my config:\n\n```bash\n# Font\nfont_family      JetBrains Mono\nfont_size        12.0\n\n# Opacity\nbackground_opacity 0.95\n\n# Cursor\ncursor_shape     block\ncursor_blink_interval 0\n\n# Scrollback\nscrollback_lines 10000\n```\n\n## Key Bindings\n\n| Key | Action |\n|-----|--------|\n| `Ctrl+Shift+Enter` | New window |\n| `Ctrl+Shift+W` | Close window |\n| `Ctrl+Shift+]` | Next window |\n| `Ctrl+Shift+[` | Previous window |\n| `Ctrl+Shift+T` | New tab |\n| `Ctrl+Shift+Q` | Close tab |\n| `Ctrl+Shift+Right` | Next tab |\n| `Ctrl+Shift+Left` | Previous tab |\n| `Ctrl+Shift+Up` | Scroll up |\n| `Ctrl+Shift+Down` | Scroll down |\n| `Ctrl+Shift+G` | Show last command output |\n| `Ctrl+Shift+H` | Browse scrollback in less |\n\n## kittens\n\nkittens are small Python programs that extend kitty:\n\n```bash\n# SSH with kitty enhancements\nkitty +kitten ssh hostname\n\n# Diff files with image support\nkitty +kitten diff file1 file2\n\n# Transfer files over SSH\nkitty +kitten transfer file.txt remote:\n```\n\n## Integration with tmux\n\nWhile kitty has its own multiplexing, I often use it with tmux for session persistence:\n\n```bash\n# Start kitty with tmux\nkitty tmux\n```\n\n## See Also\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/wezterm/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWezTerm\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWezTerm - a GPU-accelerated cross-platform terminal emulator\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/tmux/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etmux Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux configuration for persistent terminal sessions with popup windows and session management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://sw.kovidgoyal.net/kitty/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://sw.kovidgoyal.net/kitty/_images/social_previews/summary_index_f767dd9c.png\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ekitty\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eIf you live in the terminal, kitty is made for YOU! The fast, feature-rich, GPU based terminal emulator. Fast Uses GPU and SIMD vector CPU instructions for best in class performance, Uses threaded ...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ekitty \u0026middot; sw.kovidgoyal.net\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "kitty - a fast, feature-rich, GPU-based terminal emulator",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/neovim-window-management/",
      "url": "https://dots.waylonwalker.com/neovim-window-management/",
      "title": "Window Management - Neovim Keybindings",
      "content_html": "\u003cp\u003eSplit, arrange, and navigate editor windows. Keep multiple files visible and organized.\u003c/p\u003e\n\u003ch2 id=\"keybindings\"\u003eKeybindings \u003ca href=\"#keybindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eMode\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n",
      "content_text": "\nSplit, arrange, and navigate editor windows. Keep multiple files visible and organized.\n\n## Keybindings\n\n| Key | Mode | Description |\n|-----|------|-------------|\n",
      "summary": "Window Management keybindings for Neovim",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "neovim",
        "keybindings",
        "window-management"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/neovim-terminal/",
      "url": "https://dots.waylonwalker.com/neovim-terminal/",
      "title": "Terminal Operations - Neovim Keybindings",
      "content_html": "\u003cp\u003eAccess your shell without leaving your editor. Run commands and build tools.\u003c/p\u003e\n\u003ch2 id=\"keybindings\"\u003eKeybindings \u003ca href=\"#keybindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eMode\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n",
      "content_text": "\nAccess your shell without leaving your editor. Run commands and build tools.\n\n## Keybindings\n\n| Key | Mode | Description |\n|-----|------|-------------|\n",
      "summary": "Terminal Operations keybindings for Neovim",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "neovim",
        "keybindings",
        "terminal"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/neovim-tag/",
      "url": "https://dots.waylonwalker.com/neovim-tag/",
      "title": "Workspace Tag Operations - Neovim Keybindings",
      "content_html": "\u003cp\u003eJump between workspace tags and views. Organize windows.\u003c/p\u003e\n\u003ch2 id=\"keybindings\"\u003eKeybindings \u003ca href=\"#keybindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eMode\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n",
      "content_text": "\nJump between workspace tags and views. Organize windows.\n\n## Keybindings\n\n| Key | Mode | Description |\n|-----|------|-------------|\n",
      "summary": "Workspace Tag Operations keybindings for Neovim",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "neovim",
        "keybindings",
        "tag"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/neovim-search/",
      "url": "https://dots.waylonwalker.com/neovim-search/",
      "title": "Search and Find - Neovim Keybindings",
      "content_html": "\u003cp\u003eFind anything in your project instantly. Search files, symbols, and text.\u003c/p\u003e\n\u003ch2 id=\"keybindings\"\u003eKeybindings \u003ca href=\"#keybindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eMode\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n",
      "content_text": "\nFind anything in your project instantly. Search files, symbols, and text.\n\n## Keybindings\n\n| Key | Mode | Description |\n|-----|------|-------------|\n",
      "summary": "Search and Find keybindings for Neovim",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "neovim",
        "keybindings",
        "search"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/neovim-other/",
      "url": "https://dots.waylonwalker.com/neovim-other/",
      "title": "Other - Neovim Keybindings",
      "content_html": "\u003cp\u003eUtility commands for productivity enhancements.\u003c/p\u003e\n\u003ch2 id=\"keybindings\"\u003eKeybindings \u003ca href=\"#keybindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eMode\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cC-U\u003e\u003c/td\u003e\n\u003ctd\u003einsert\u003c/td\u003e\n\u003ctd\u003e:help i_CTRL-U-default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(fzf-normal)\u003c/td\u003e\n\u003ctd\u003eterminal\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(fzf-insert)\u003c/td\u003e\n\u003ctd\u003eterminal\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e%\u003c/td\u003e\n\u003ctd\u003evisual_select\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e@\u003c/td\u003e\n\u003ctd\u003evisual_select\u003c/td\u003e\n\u003ctd\u003e:help v_@-default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eQ\u003c/td\u003e\n\u003ctd\u003evisual_select\u003c/td\u003e\n\u003ctd\u003e:help v_Q-default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[%\u003c/td\u003e\n\u003ctd\u003evisual_select\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e]%\u003c/td\u003e\n\u003ctd\u003evisual_select\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ea%\u003c/td\u003e\n\u003ctd\u003evisual_select\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eg%\u003c/td\u003e\n\u003ctd\u003evisual_select\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egx\u003c/td\u003e\n\u003ctd\u003evisual_select\u003c/td\u003e\n\u003ctd\u003eOpens filepath or URI under cursor with the system handler (file explorer, web browser, …)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitVisualTextObject)\u003c/td\u003e\n\u003ctd\u003evisual_select\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitVisualMultiForward)\u003c/td\u003e\n\u003ctd\u003evisual_select\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitVisualMultiBackward)\u003c/td\u003e\n\u003ctd\u003evisual_select\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitVisualBackward)\u003c/td\u003e\n\u003ctd\u003evisual_select\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitVisualForward)\u003c/td\u003e\n\u003ctd\u003evisual_select\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e%\u003c/td\u003e\n\u003ctd\u003eoperator_pending\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[%\u003c/td\u003e\n\u003ctd\u003eoperator_pending\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e]%\u003c/td\u003e\n\u003ctd\u003eoperator_pending\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eg%\u003c/td\u003e\n\u003ctd\u003eoperator_pending\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitOperationMultiForward)\u003c/td\u003e\n\u003ctd\u003eoperator_pending\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitOperationMultiBackward)\u003c/td\u003e\n\u003ctd\u003eoperator_pending\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitOperationBackward)\u003c/td\u003e\n\u003ctd\u003eoperator_pending\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitOperationForward)\u003c/td\u003e\n\u003ctd\u003eoperator_pending\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e%\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u0026amp;\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:help \u0026amp;-default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[%\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003eAdd empty line above cursor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[\u003cC-T\u003e\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:ptprevious\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[\u003cC-L\u003e\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:lpfile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[\u003cC-Q\u003e\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:cpfile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e]%\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e]\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003eAdd empty line below cursor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e]\u003cC-T\u003e\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:ptnext\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e]\u003cC-L\u003e\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:lnfile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e]\u003cC-Q\u003e\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:cnfile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eg%\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egx\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003eOpens filepath or URI under cursor with the system handler (file explorer, web browser, …)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(fzf-normal)\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(fzf-insert)\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitNormalMultiForward)\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitNormalMultiBackward)\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitNormalBackward)\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitNormalForward)\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cC-L\u003e\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:help CTRL-L-default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e%\u003c/td\u003e\n\u003ctd\u003evisual\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e@\u003c/td\u003e\n\u003ctd\u003evisual\u003c/td\u003e\n\u003ctd\u003e:help v_@-default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eQ\u003c/td\u003e\n\u003ctd\u003evisual\u003c/td\u003e\n\u003ctd\u003e:help v_Q-default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[%\u003c/td\u003e\n\u003ctd\u003evisual\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e]%\u003c/td\u003e\n\u003ctd\u003evisual\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ea%\u003c/td\u003e\n\u003ctd\u003evisual\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eg%\u003c/td\u003e\n\u003ctd\u003evisual\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egx\u003c/td\u003e\n\u003ctd\u003evisual\u003c/td\u003e\n\u003ctd\u003eOpens filepath or URI under cursor with the system handler (file explorer, web browser, …)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitVisualTextObject)\u003c/td\u003e\n\u003ctd\u003evisual\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitVisualMultiForward)\u003c/td\u003e\n\u003ctd\u003evisual\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitVisualMultiBackward)\u003c/td\u003e\n\u003ctd\u003evisual\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitVisualBackward)\u003c/td\u003e\n\u003ctd\u003evisual\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitVisualForward)\u003c/td\u003e\n\u003ctd\u003evisual\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n",
      "content_text": "\nUtility commands for productivity enhancements.\n\n## Keybindings\n\n| Key | Mode | Description |\n|-----|------|-------------|\n| \u003cC-U\u003e | insert | :help i_CTRL-U-default |\n| \u003cPlug\u003e(fzf-normal) | terminal |  |\n| \u003cPlug\u003e(fzf-insert) | terminal |  |\n| % | visual_select |  |\n| @ | visual_select | :help v_@-default |\n| Q | visual_select | :help v_Q-default |\n| [% | visual_select |  |\n| ]% | visual_select |  |\n| a% | visual_select |  |\n| g% | visual_select |  |\n| gx | visual_select | Opens filepath or URI under cursor with the system handler (file explorer, web browser, …) |\n| \u003cPlug\u003e(MatchitVisualTextObject) | visual_select |  |\n| \u003cPlug\u003e(MatchitVisualMultiForward) | visual_select |  |\n| \u003cPlug\u003e(MatchitVisualMultiBackward) | visual_select |  |\n| \u003cPlug\u003e(MatchitVisualBackward) | visual_select |  |\n| \u003cPlug\u003e(MatchitVisualForward) | visual_select |  |\n| % | operator_pending |  |\n| [% | operator_pending |  |\n| ]% | operator_pending |  |\n| g% | operator_pending |  |\n| \u003cPlug\u003e(MatchitOperationMultiForward) | operator_pending |  |\n| \u003cPlug\u003e(MatchitOperationMultiBackward) | operator_pending |  |\n| \u003cPlug\u003e(MatchitOperationBackward) | operator_pending |  |\n| \u003cPlug\u003e(MatchitOperationForward) | operator_pending |  |\n| % | normal |  |\n| \u0026 | normal | :help \u0026-default |\n| [% | normal |  |\n| [  | normal | Add empty line above cursor |\n| [\u003cC-T\u003e | normal |  :ptprevious |\n| [\u003cC-L\u003e | normal | :lpfile |\n| [\u003cC-Q\u003e | normal | :cpfile |\n| ]% | normal |  |\n| ]  | normal | Add empty line below cursor |\n| ]\u003cC-T\u003e | normal | :ptnext |\n| ]\u003cC-L\u003e | normal | :lnfile |\n| ]\u003cC-Q\u003e | normal | :cnfile |\n| g% | normal |  |\n| gx | normal | Opens filepath or URI under cursor with the system handler (file explorer, web browser, …) |\n| \u003cPlug\u003e(fzf-normal) | normal |  |\n| \u003cPlug\u003e(fzf-insert) | normal |  |\n| \u003cPlug\u003e(MatchitNormalMultiForward) | normal |  |\n| \u003cPlug\u003e(MatchitNormalMultiBackward) | normal |  |\n| \u003cPlug\u003e(MatchitNormalBackward) | normal |  |\n| \u003cPlug\u003e(MatchitNormalForward) | normal |  |\n| \u003cC-L\u003e | normal | :help CTRL-L-default |\n| % | visual |  |\n| @ | visual | :help v_@-default |\n| Q | visual | :help v_Q-default |\n| [% | visual |  |\n| ]% | visual |  |\n| a% | visual |  |\n| g% | visual |  |\n| gx | visual | Opens filepath or URI under cursor with the system handler (file explorer, web browser, …) |\n| \u003cPlug\u003e(MatchitVisualTextObject) | visual |  |\n| \u003cPlug\u003e(MatchitVisualMultiForward) | visual |  |\n| \u003cPlug\u003e(MatchitVisualMultiBackward) | visual |  |\n| \u003cPlug\u003e(MatchitVisualBackward) | visual |  |\n| \u003cPlug\u003e(MatchitVisualForward) | visual |  |\n",
      "summary": "Other keybindings for Neovim",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "neovim",
        "keybindings",
        "other"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/neovim-navigation/",
      "url": "https://dots.waylonwalker.com/neovim-navigation/",
      "title": "Navigation and Movement - Neovim Keybindings",
      "content_html": "\u003cp\u003eMove through your code efficiently. Jump between files, symbols, and references.\u003c/p\u003e\n\u003ch2 id=\"keybindings\"\u003eKeybindings \u003ca href=\"#keybindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eMode\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cS-Tab\u003e\u003c/td\u003e\n\u003ctd\u003einsert\u003c/td\u003e\n\u003ctd\u003evim.snippet.jump if active, otherwise \u003cS-Tab\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cTab\u003e\u003c/td\u003e\n\u003ctd\u003einsert\u003c/td\u003e\n\u003ctd\u003evim.snippet.jump if active, otherwise \u003cTab\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cTab\u003e\u003c/td\u003e\n\u003ctd\u003evisual_select\u003c/td\u003e\n\u003ctd\u003evim.snippet.jump if active, otherwise \u003cTab\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e#\u003c/td\u003e\n\u003ctd\u003evisual_select\u003c/td\u003e\n\u003ctd\u003e:help v_#-default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e*\u003c/td\u003e\n\u003ctd\u003evisual_select\u003c/td\u003e\n\u003ctd\u003e:help v_star-default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cS-Tab\u003e\u003c/td\u003e\n\u003ctd\u003evisual_select\u003c/td\u003e\n\u003ctd\u003evim.snippet.jump if active, otherwise \u003cS-Tab\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[B\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:brewind\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[b\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:bprevious\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[T\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:trewind\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[t\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:tprevious\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[A\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:rewind\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[a\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:previous\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[L\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:lrewind\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[l\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:lprevious\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[Q\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:crewind\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[q\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:cprevious\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[D\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003eJump to the first diagnostic in the current buffer\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[d\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003eJump to the previous diagnostic in the current buffer\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e]B\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:blast\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e]b\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:bnext\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e]T\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:tlast\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e]t\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:tnext\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e]A\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:last\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e]a\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:next\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e]L\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:llast\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e]l\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:lnext\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e]Q\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:clast\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e]q\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:cnext\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e]D\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003eJump to the last diagnostic in the current buffer\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e]d\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003eJump to the next diagnostic in the current buffer\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cC-W\u003e\u003cC-D\u003e\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003eShow diagnostics under the cursor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cC-W\u003ed\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003eShow diagnostics under the cursor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e#\u003c/td\u003e\n\u003ctd\u003evisual\u003c/td\u003e\n\u003ctd\u003e:help v_#-default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e*\u003c/td\u003e\n\u003ctd\u003evisual\u003c/td\u003e\n\u003ctd\u003e:help v_star-default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cTab\u003e\u003c/td\u003e\n\u003ctd\u003eselect\u003c/td\u003e\n\u003ctd\u003evim.snippet.jump if active, otherwise \u003cTab\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cS-Tab\u003e\u003c/td\u003e\n\u003ctd\u003eselect\u003c/td\u003e\n\u003ctd\u003evim.snippet.jump if active, otherwise \u003cS-Tab\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n",
      "content_text": "\nMove through your code efficiently. Jump between files, symbols, and references.\n\n## Keybindings\n\n| Key | Mode | Description |\n|-----|------|-------------|\n| \u003cS-Tab\u003e | insert | vim.snippet.jump if active, otherwise \u003cS-Tab\u003e |\n| \u003cTab\u003e | insert | vim.snippet.jump if active, otherwise \u003cTab\u003e |\n| \u003cTab\u003e | visual_select | vim.snippet.jump if active, otherwise \u003cTab\u003e |\n| # | visual_select | :help v_#-default |\n| * | visual_select | :help v_star-default |\n| \u003cS-Tab\u003e | visual_select | vim.snippet.jump if active, otherwise \u003cS-Tab\u003e |\n| [B | normal | :brewind |\n| [b | normal | :bprevious |\n| [T | normal | :trewind |\n| [t | normal | :tprevious |\n| [A | normal | :rewind |\n| [a | normal | :previous |\n| [L | normal | :lrewind |\n| [l | normal | :lprevious |\n| [Q | normal | :crewind |\n| [q | normal | :cprevious |\n| [D | normal | Jump to the first diagnostic in the current buffer |\n| [d | normal | Jump to the previous diagnostic in the current buffer |\n| ]B | normal | :blast |\n| ]b | normal | :bnext |\n| ]T | normal | :tlast |\n| ]t | normal | :tnext |\n| ]A | normal | :last |\n| ]a | normal | :next |\n| ]L | normal | :llast |\n| ]l | normal | :lnext |\n| ]Q | normal | :clast |\n| ]q | normal | :cnext |\n| ]D | normal | Jump to the last diagnostic in the current buffer |\n| ]d | normal | Jump to the next diagnostic in the current buffer |\n| \u003cC-W\u003e\u003cC-D\u003e | normal | Show diagnostics under the cursor |\n| \u003cC-W\u003ed | normal | Show diagnostics under the cursor |\n| # | visual | :help v_#-default |\n| * | visual | :help v_star-default |\n| \u003cTab\u003e | select | vim.snippet.jump if active, otherwise \u003cTab\u003e |\n| \u003cS-Tab\u003e | select | vim.snippet.jump if active, otherwise \u003cS-Tab\u003e |\n",
      "summary": "Navigation and Movement keybindings for Neovim",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "neovim",
        "keybindings",
        "navigation"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/neovim-media/",
      "url": "https://dots.waylonwalker.com/neovim-media/",
      "title": "Media Controls - Neovim Keybindings",
      "content_html": "\u003cp\u003eControl playback and volume from your keyboard. Manage media.\u003c/p\u003e\n\u003ch2 id=\"keybindings\"\u003eKeybindings \u003ca href=\"#keybindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eMode\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n",
      "content_text": "\nControl playback and volume from your keyboard. Manage media.\n\n## Keybindings\n\n| Key | Mode | Description |\n|-----|------|-------------|\n",
      "summary": "Media Controls keybindings for Neovim",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "neovim",
        "keybindings",
        "media"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/neovim-lsp/",
      "url": "https://dots.waylonwalker.com/neovim-lsp/",
      "title": "LSP and IntelliSense - Neovim Keybindings",
      "content_html": "\u003cp\u003eNavigate code like an IDE. Jump to definitions, view documentation, and fix errors.\u003c/p\u003e\n\u003ch2 id=\"keybindings\"\u003eKeybindings \u003ca href=\"#keybindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eMode\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003egra\u003c/td\u003e\n\u003ctd\u003evisual_select\u003c/td\u003e\n\u003ctd\u003evim.lsp.buf.code_action()\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egO\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003evim.lsp.buf.document_symbol()\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egrt\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003evim.lsp.buf.type_definition()\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egri\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003evim.lsp.buf.implementation()\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egrr\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003evim.lsp.buf.references()\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egra\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003evim.lsp.buf.code_action()\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egrn\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003evim.lsp.buf.rename()\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egra\u003c/td\u003e\n\u003ctd\u003evisual\u003c/td\u003e\n\u003ctd\u003evim.lsp.buf.code_action()\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n",
      "content_text": "\nNavigate code like an IDE. Jump to definitions, view documentation, and fix errors.\n\n## Keybindings\n\n| Key | Mode | Description |\n|-----|------|-------------|\n| gra | visual_select | vim.lsp.buf.code_action() |\n| gO | normal | vim.lsp.buf.document_symbol() |\n| grt | normal | vim.lsp.buf.type_definition() |\n| gri | normal | vim.lsp.buf.implementation() |\n| grr | normal | vim.lsp.buf.references() |\n| gra | normal | vim.lsp.buf.code_action() |\n| grn | normal | vim.lsp.buf.rename() |\n| gra | visual | vim.lsp.buf.code_action() |\n",
      "summary": "LSP and IntelliSense keybindings for Neovim",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "neovim",
        "keybindings",
        "lsp"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/neovim-layout/",
      "url": "https://dots.waylonwalker.com/neovim-layout/",
      "title": "Layout Management - Neovim Keybindings",
      "content_html": "\u003cp\u003eSwitch between window layouts. Optimize your workspace.\u003c/p\u003e\n\u003ch2 id=\"keybindings\"\u003eKeybindings \u003ca href=\"#keybindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eMode\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n",
      "content_text": "\nSwitch between window layouts. Optimize your workspace.\n\n## Keybindings\n\n| Key | Mode | Description |\n|-----|------|-------------|\n",
      "summary": "Layout Management keybindings for Neovim",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "neovim",
        "keybindings",
        "layout"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/neovim-keybindings/",
      "url": "https://dots.waylonwalker.com/neovim-keybindings/",
      "title": "Neovim Keybindings Reference",
      "content_html": "\u003cp\u003eComplete reference for Neovim keybindings organized by functional category.\u003c/p\u003e\n\u003ch2 id=\"categories\"\u003eCategories \u003ca href=\"#categories\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"/neovim-navigation/\" class=\"wikilink\" data-title=\"Navigation and Movement - Neovim Keybindings\" data-description=\"Navigation and Movement keybindings for Neovim\" data-date=\"2026-02-07\"\u003eNavigation and Movement\u003c/a\u003e (36 keybindings)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/neovim-editing/\" class=\"wikilink\" data-title=\"Text Editing - Neovim Keybindings\" data-description=\"Text Editing keybindings for Neovim\" data-date=\"2026-02-07\"\u003eText Editing\u003c/a\u003e (9 keybindings)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/neovim-lsp/\" class=\"wikilink\" data-title=\"LSP and IntelliSense - Neovim Keybindings\" data-description=\"LSP and IntelliSense keybindings for Neovim\" data-date=\"2026-02-07\"\u003eLSP and IntelliSense\u003c/a\u003e (8 keybindings)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/neovim-other/\" class=\"wikilink\" data-title=\"Other - Neovim Keybindings\" data-description=\"Other keybindings for Neovim\" data-date=\"2026-02-07\"\u003eOther\u003c/a\u003e (58 keybindings)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/keybindings-complete-list/\" class=\"wikilink\" data-title=\"Complete Keybindings List\" data-description=\"Complete alphabetical list of all keybindings across all environments\" data-date=\"2026-02-07\"\u003eComplete List (Alphabetical)\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nComplete reference for Neovim keybindings organized by functional category.\n\n## Categories\n\n- \u003ca href=\"/neovim-navigation/\" class=\"wikilink\" data-title=\"Navigation and Movement - Neovim Keybindings\" data-description=\"Navigation and Movement keybindings for Neovim\" data-date=\"2026-02-07\"\u003eNavigation and Movement\u003c/a\u003e (36 keybindings)\n- \u003ca href=\"/neovim-editing/\" class=\"wikilink\" data-title=\"Text Editing - Neovim Keybindings\" data-description=\"Text Editing keybindings for Neovim\" data-date=\"2026-02-07\"\u003eText Editing\u003c/a\u003e (9 keybindings)\n- \u003ca href=\"/neovim-lsp/\" class=\"wikilink\" data-title=\"LSP and IntelliSense - Neovim Keybindings\" data-description=\"LSP and IntelliSense keybindings for Neovim\" data-date=\"2026-02-07\"\u003eLSP and IntelliSense\u003c/a\u003e (8 keybindings)\n- \u003ca href=\"/neovim-other/\" class=\"wikilink\" data-title=\"Other - Neovim Keybindings\" data-description=\"Other keybindings for Neovim\" data-date=\"2026-02-07\"\u003eOther\u003c/a\u003e (58 keybindings)\n- \u003ca href=\"/keybindings-complete-list/\" class=\"wikilink\" data-title=\"Complete Keybindings List\" data-description=\"Complete alphabetical list of all keybindings across all environments\" data-date=\"2026-02-07\"\u003eComplete List (Alphabetical)\u003c/a\u003e\n",
      "summary": "Complete reference for Neovim keybindings organized by category",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "neovim",
        "keybindings",
        "reference"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/neovim-git/",
      "url": "https://dots.waylonwalker.com/neovim-git/",
      "title": "Git Operations - Neovim Keybindings",
      "content_html": "\u003cp\u003eManage version control without leaving your editor. Stage, commit, diff, and browse history.\u003c/p\u003e\n\u003ch2 id=\"keybindings\"\u003eKeybindings \u003ca href=\"#keybindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eMode\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n",
      "content_text": "\nManage version control without leaving your editor. Stage, commit, diff, and browse history.\n\n## Keybindings\n\n| Key | Mode | Description |\n|-----|------|-------------|\n",
      "summary": "Git Operations keybindings for Neovim",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "neovim",
        "keybindings",
        "git"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/neovim-files/",
      "url": "https://dots.waylonwalker.com/neovim-files/",
      "title": "File Operations - Neovim Keybindings",
      "content_html": "\u003cp\u003eOpen, save, and manage files quickly. Browse your project structure.\u003c/p\u003e\n\u003ch2 id=\"keybindings\"\u003eKeybindings \u003ca href=\"#keybindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eMode\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n",
      "content_text": "\nOpen, save, and manage files quickly. Browse your project structure.\n\n## Keybindings\n\n| Key | Mode | Description |\n|-----|------|-------------|\n",
      "summary": "File Operations keybindings for Neovim",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "neovim",
        "keybindings",
        "files"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/neovim-editing/",
      "url": "https://dots.waylonwalker.com/neovim-editing/",
      "title": "Text Editing - Neovim Keybindings",
      "content_html": "\u003cp\u003eEdit text faster with powerful selection, manipulation, and transformation commands.\u003c/p\u003e\n\u003ch2 id=\"keybindings\"\u003eKeybindings \u003ca href=\"#keybindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eMode\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cC-S\u003e\u003c/td\u003e\n\u003ctd\u003einsert\u003c/td\u003e\n\u003ctd\u003evim.lsp.buf.signature_help()\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egc\u003c/td\u003e\n\u003ctd\u003evisual_select\u003c/td\u003e\n\u003ctd\u003eToggle comment\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cC-S\u003e\u003c/td\u003e\n\u003ctd\u003evisual_select\u003c/td\u003e\n\u003ctd\u003evim.lsp.buf.signature_help()\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egc\u003c/td\u003e\n\u003ctd\u003eoperator_pending\u003c/td\u003e\n\u003ctd\u003eComment textobject\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eY\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e:help Y-default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egcc\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003eToggle comment line\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egc\u003c/td\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003eToggle comment\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egc\u003c/td\u003e\n\u003ctd\u003evisual\u003c/td\u003e\n\u003ctd\u003eToggle comment\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cC-S\u003e\u003c/td\u003e\n\u003ctd\u003eselect\u003c/td\u003e\n\u003ctd\u003evim.lsp.buf.signature_help()\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n",
      "content_text": "\nEdit text faster with powerful selection, manipulation, and transformation commands.\n\n## Keybindings\n\n| Key | Mode | Description |\n|-----|------|-------------|\n| \u003cC-S\u003e | insert | vim.lsp.buf.signature_help() |\n| gc | visual_select | Toggle comment |\n| \u003cC-S\u003e | visual_select | vim.lsp.buf.signature_help() |\n| gc | operator_pending | Comment textobject |\n| Y | normal | :help Y-default |\n| gcc | normal | Toggle comment line |\n| gc | normal | Toggle comment |\n| gc | visual | Toggle comment |\n| \u003cC-S\u003e | select | vim.lsp.buf.signature_help() |\n",
      "summary": "Text Editing keybindings for Neovim",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "neovim",
        "keybindings",
        "editing"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/neovim-client/",
      "url": "https://dots.waylonwalker.com/neovim-client/",
      "title": "Client Window Operations - Neovim Keybindings",
      "content_html": "\u003cp\u003eFocus and manage application windows. Switch between programs.\u003c/p\u003e\n\u003ch2 id=\"keybindings\"\u003eKeybindings \u003ca href=\"#keybindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eMode\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n",
      "content_text": "\nFocus and manage application windows. Switch between programs.\n\n## Keybindings\n\n| Key | Mode | Description |\n|-----|------|-------------|\n",
      "summary": "Client Window Operations keybindings for Neovim",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "neovim",
        "keybindings",
        "client"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/neovim-awesome/",
      "url": "https://dots.waylonwalker.com/neovim-awesome/",
      "title": "Awesome WM Core - Neovim Keybindings",
      "content_html": "\u003cp\u003eControl your window manager. Launch applications.\u003c/p\u003e\n\u003ch2 id=\"keybindings\"\u003eKeybindings \u003ca href=\"#keybindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eMode\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n",
      "content_text": "\nControl your window manager. Launch applications.\n\n## Keybindings\n\n| Key | Mode | Description |\n|-----|------|-------------|\n",
      "summary": "Awesome WM Core keybindings for Neovim",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "neovim",
        "keybindings",
        "awesome"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/keybindings-complete-list/",
      "url": "https://dots.waylonwalker.com/keybindings-complete-list/",
      "title": "Complete Keybindings List",
      "content_html": "\u003cp\u003eAll keybindings across Neovim and Awesome WM environments, organized alphabetically for quick reference.\u003c/p\u003e\n\u003ch2 id=\"neovim-keybindings\"\u003eNeovim Keybindings \u003ca href=\"#neovim-keybindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eMode\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003cth\u003eCommand\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e#\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual\u003c/td\u003e\n\u003ctd\u003e:help v_#-default\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e#\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual_select\u003c/td\u003e\n\u003ctd\u003e:help v_#-default\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitNormalForward)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOperator_pending\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitOperationForward)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitVisualForward)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual_select\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitVisualForward)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\u0026amp;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:help \u0026amp;-default\u003c/td\u003e\n\u003ctd\u003e:\u0026amp;\u0026amp;\u003cCR\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e*\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual\u003c/td\u003e\n\u003ctd\u003e:help v_star-default\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e*\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual_select\u003c/td\u003e\n\u003ctd\u003e:help v_star-default\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e@\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual\u003c/td\u003e\n\u003ctd\u003e:help v_@-default\u003c/td\u003e\n\u003ctd\u003emode() ==# 'V' ? ':normal! @'.getcharstr().'\u003cCR\u003e' : '@'\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e@\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual_select\u003c/td\u003e\n\u003ctd\u003e:help v_@-default\u003c/td\u003e\n\u003ctd\u003emode() ==# 'V' ? ':normal! @'.getcharstr().'\u003cCR\u003e' : '@'\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[ \u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003eAdd empty line above cursor\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitNormalMultiBackward)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOperator_pending\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitOperationMultiBackward)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitVisualMultiBackward)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual_select\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitVisualMultiBackward)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[\u0026lt;C-L\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:lpfile\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[\u0026lt;C-Q\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:cpfile\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[\u0026lt;C-T\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:ptprevious\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:previous\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[A\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:rewind\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[b\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:bprevious\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[B\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:brewind\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[D\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003eJump to the first diagnostic in the current buffer\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[d\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003eJump to the previous diagnostic in the current buffer\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[l\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:lprevious\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[L\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:lrewind\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[q\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:cprevious\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[Q\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:crewind\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[t\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:tprevious\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e[T\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:trewind\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e] \u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003eAdd empty line below cursor\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e]%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitNormalMultiForward)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e]%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOperator_pending\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitOperationMultiForward)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e]%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitVisualMultiForward)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e]%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual_select\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitVisualMultiForward)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e]\u0026lt;C-L\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:lnfile\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e]\u0026lt;C-Q\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:cnfile\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e]\u0026lt;C-T\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:ptnext\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e]A\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:last\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e]a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:next\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e]B\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:blast\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e]b\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:bnext\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e]D\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003eJump to the last diagnostic in the current buffer\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e]d\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003eJump to the next diagnostic in the current buffer\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e]L\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:llast\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e]l\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:lnext\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e]Q\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:clast\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e]q\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:cnext\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e]T\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:tlast\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e]t\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:tnext\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ea%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitVisualTextObject)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ea%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual_select\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitVisualTextObject)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eg%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitNormalBackward)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eg%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOperator_pending\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitOperationBackward)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eg%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitVisualBackward)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eg%\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual_select\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cPlug\u003e(MatchitVisualBackward)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003eToggle comment\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOperator_pending\u003c/td\u003e\n\u003ctd\u003eComment textobject\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual\u003c/td\u003e\n\u003ctd\u003eToggle comment\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual_select\u003c/td\u003e\n\u003ctd\u003eToggle comment\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egcc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003eToggle comment line\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egO\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003evim.lsp.buf.document_symbol()\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egra\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003evim.lsp.buf.code_action()\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egra\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual\u003c/td\u003e\n\u003ctd\u003evim.lsp.buf.code_action()\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egra\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual_select\u003c/td\u003e\n\u003ctd\u003evim.lsp.buf.code_action()\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egri\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003evim.lsp.buf.implementation()\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egrn\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003evim.lsp.buf.rename()\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egrr\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003evim.lsp.buf.references()\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egrt\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003evim.lsp.buf.type_definition()\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egx\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003eOpens filepath or URI under cursor with the system handler (file explorer, web browser, …)\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egx\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual\u003c/td\u003e\n\u003ctd\u003eOpens filepath or URI under cursor with the system handler (file explorer, web browser, …)\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003egx\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual_select\u003c/td\u003e\n\u003ctd\u003eOpens filepath or URI under cursor with the system handler (file explorer, web browser, …)\u003c/td\u003e\n\u003ctd\u003enil\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eQ\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual\u003c/td\u003e\n\u003ctd\u003e:help v_Q-default\u003c/td\u003e\n\u003ctd\u003emode() ==# 'V' ? ':normal! @\u003cC-R\u003e=reg_recorded()\u003cCR\u003e\u003cCR\u003e' : 'Q'\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eQ\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eVisual_select\u003c/td\u003e\n\u003ctd\u003e:help v_Q-default\u003c/td\u003e\n\u003ctd\u003emode() ==# 'V' ? ':normal! @\u003cC-R\u003e=reg_recorded()\u003cCR\u003e\u003cCR\u003e' : 'Q'\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eY\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003e:help Y-default\u003c/td\u003e\n\u003ctd\u003ey$\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n",
      "content_text": "\nAll keybindings across Neovim and Awesome WM environments, organized alphabetically for quick reference.\n\n\n## Neovim Keybindings\n\n| Key | Mode | Description | Command |\n|-----|------|-------------|----------|\n| `#` | Visual | :help v_#-default | nil |\n| `#` | Visual_select | :help v_#-default | nil |\n| `%` | Normal |  | \u003cPlug\u003e(MatchitNormalForward) |\n| `%` | Operator_pending |  | \u003cPlug\u003e(MatchitOperationForward) |\n| `%` | Visual |  | \u003cPlug\u003e(MatchitVisualForward) |\n| `%` | Visual_select |  | \u003cPlug\u003e(MatchitVisualForward) |\n| `\u0026` | Normal | :help \u0026-default | :\u0026\u0026\u003cCR\u003e |\n| `*` | Visual | :help v_star-default | nil |\n| `*` | Visual_select | :help v_star-default | nil |\n| `@` | Visual | :help v_@-default | mode() ==# 'V' ? ':normal! @'.getcharstr().'\u003cCR\u003e' : '@' |\n| `@` | Visual_select | :help v_@-default | mode() ==# 'V' ? ':normal! @'.getcharstr().'\u003cCR\u003e' : '@' |\n| `[ ` | Normal | Add empty line above cursor | nil |\n| `[%` | Normal |  | \u003cPlug\u003e(MatchitNormalMultiBackward) |\n| `[%` | Operator_pending |  | \u003cPlug\u003e(MatchitOperationMultiBackward) |\n| `[%` | Visual |  | \u003cPlug\u003e(MatchitVisualMultiBackward) |\n| `[%` | Visual_select |  | \u003cPlug\u003e(MatchitVisualMultiBackward) |\n| `[\u003cC-L\u003e` | Normal | :lpfile | nil |\n| `[\u003cC-Q\u003e` | Normal | :cpfile | nil |\n| `[\u003cC-T\u003e` | Normal |  :ptprevious | nil |\n| `[a` | Normal | :previous | nil |\n| `[A` | Normal | :rewind | nil |\n| `[b` | Normal | :bprevious | nil |\n| `[B` | Normal | :brewind | nil |\n| `[D` | Normal | Jump to the first diagnostic in the current buffer | nil |\n| `[d` | Normal | Jump to the previous diagnostic in the current buffer | nil |\n| `[l` | Normal | :lprevious | nil |\n| `[L` | Normal | :lrewind | nil |\n| `[q` | Normal | :cprevious | nil |\n| `[Q` | Normal | :crewind | nil |\n| `[t` | Normal | :tprevious | nil |\n| `[T` | Normal | :trewind | nil |\n| `] ` | Normal | Add empty line below cursor | nil |\n| `]%` | Normal |  | \u003cPlug\u003e(MatchitNormalMultiForward) |\n| `]%` | Operator_pending |  | \u003cPlug\u003e(MatchitOperationMultiForward) |\n| `]%` | Visual |  | \u003cPlug\u003e(MatchitVisualMultiForward) |\n| `]%` | Visual_select |  | \u003cPlug\u003e(MatchitVisualMultiForward) |\n| `]\u003cC-L\u003e` | Normal | :lnfile | nil |\n| `]\u003cC-Q\u003e` | Normal | :cnfile | nil |\n| `]\u003cC-T\u003e` | Normal | :ptnext | nil |\n| `]A` | Normal | :last | nil |\n| `]a` | Normal | :next | nil |\n| `]B` | Normal | :blast | nil |\n| `]b` | Normal | :bnext | nil |\n| `]D` | Normal | Jump to the last diagnostic in the current buffer | nil |\n| `]d` | Normal | Jump to the next diagnostic in the current buffer | nil |\n| `]L` | Normal | :llast | nil |\n| `]l` | Normal | :lnext | nil |\n| `]Q` | Normal | :clast | nil |\n| `]q` | Normal | :cnext | nil |\n| `]T` | Normal | :tlast | nil |\n| `]t` | Normal | :tnext | nil |\n| `a%` | Visual |  | \u003cPlug\u003e(MatchitVisualTextObject) |\n| `a%` | Visual_select |  | \u003cPlug\u003e(MatchitVisualTextObject) |\n| `g%` | Normal |  | \u003cPlug\u003e(MatchitNormalBackward) |\n| `g%` | Operator_pending |  | \u003cPlug\u003e(MatchitOperationBackward) |\n| `g%` | Visual |  | \u003cPlug\u003e(MatchitVisualBackward) |\n| `g%` | Visual_select |  | \u003cPlug\u003e(MatchitVisualBackward) |\n| `gc` | Normal | Toggle comment | nil |\n| `gc` | Operator_pending | Comment textobject | nil |\n| `gc` | Visual | Toggle comment | nil |\n| `gc` | Visual_select | Toggle comment | nil |\n| `gcc` | Normal | Toggle comment line | nil |\n| `gO` | Normal | vim.lsp.buf.document_symbol() | nil |\n| `gra` | Normal | vim.lsp.buf.code_action() | nil |\n| `gra` | Visual | vim.lsp.buf.code_action() | nil |\n| `gra` | Visual_select | vim.lsp.buf.code_action() | nil |\n| `gri` | Normal | vim.lsp.buf.implementation() | nil |\n| `grn` | Normal | vim.lsp.buf.rename() | nil |\n| `grr` | Normal | vim.lsp.buf.references() | nil |\n| `grt` | Normal | vim.lsp.buf.type_definition() | nil |\n| `gx` | Normal | Opens filepath or URI under cursor with the system handler (file explorer, web browser, …) | nil |\n| `gx` | Visual | Opens filepath or URI under cursor with the system handler (file explorer, web browser, …) | nil |\n| `gx` | Visual_select | Opens filepath or URI under cursor with the system handler (file explorer, web browser, …) | nil |\n| `Q` | Visual | :help v_Q-default | mode() ==# 'V' ? ':normal! @\u003cC-R\u003e=reg_recorded()\u003cCR\u003e\u003cCR\u003e' : 'Q' |\n| `Q` | Visual_select | :help v_Q-default | mode() ==# 'V' ? ':normal! @\u003cC-R\u003e=reg_recorded()\u003cCR\u003e\u003cCR\u003e' : 'Q' |\n| `Y` | Normal | :help Y-default | y$ |\n\n",
      "summary": "Complete alphabetical list of all keybindings across all environments",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "keybindings",
        "reference",
        "complete"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/keybindings/",
      "url": "https://dots.waylonwalker.com/keybindings/",
      "title": "Keybindings Reference",
      "content_html": "\u003cp\u003eComplete reference for all keybindings across Neovim and Awesome WM environments.\u003c/p\u003e\n\u003ch2 id=\"environments\"\u003eEnvironments \u003ca href=\"#environments\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"/neovim-keybindings/\" class=\"wikilink\" data-title=\"Neovim Keybindings Reference\" data-description=\"Complete reference for Neovim keybindings organized by category\" data-date=\"2026-02-07\"\u003eNeovim Keybindings\u003c/a\u003e (112 keybindings)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/keybindings-complete-list/\" class=\"wikilink\" data-title=\"Complete Keybindings List\" data-description=\"Complete alphabetical list of all keybindings across all environments\" data-date=\"2026-02-07\"\u003eComplete List (Alphabetical)\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
      "content_text": "\nComplete reference for all keybindings across Neovim and Awesome WM environments.\n\n## Environments\n\n- \u003ca href=\"/neovim-keybindings/\" class=\"wikilink\" data-title=\"Neovim Keybindings Reference\" data-description=\"Complete reference for Neovim keybindings organized by category\" data-date=\"2026-02-07\"\u003eNeovim Keybindings\u003c/a\u003e (112 keybindings)\n- \u003ca href=\"/keybindings-complete-list/\" class=\"wikilink\" data-title=\"Complete Keybindings List\" data-description=\"Complete alphabetical list of all keybindings across all environments\" data-date=\"2026-02-07\"\u003eComplete List (Alphabetical)\u003c/a\u003e\n",
      "summary": "Complete reference for all keybindings across Neovim and Awesome WM environments",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "keybindings",
        "reference"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/",
      "url": "https://dots.waylonwalker.com/",
      "title": "Dotfiles Overview",
      "content_html": "\u003cp\u003eWelcome to my personal dotfiles documentation. This is a collection of\nconfigurations that I've built up over years of tweaking my development\nenvironment to maximize productivity and minimize friction.\u003c/p\u003e\n\u003ch2 id=\"philosophy\"\u003ePhilosophy \u003ca href=\"#philosophy\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThese dotfiles follow a few core principles:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eMinimal friction\u003c/strong\u003e - Tools should get out of the way and let you work\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eKeyboard-centric\u003c/strong\u003e - Mouse usage is minimized\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePortable\u003c/strong\u003e - Works across different machines and environments\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eVersion controlled\u003c/strong\u003e - Everything is tracked and reproducible\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"whats-included\"\u003eWhat's Included \u003ca href=\"#whats-included\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"shell--terminal\"\u003eShell \u0026amp; Terminal \u003ca href=\"#shell--terminal\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"/zsh/\" class=\"wikilink\" data-title=\"zsh Configuration\" data-description=\"zsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\" data-date=\"2026-02-07\"\u003ezsh Configuration\u003c/a\u003e - Primary shell with extensive customization\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/tmux/\" class=\"wikilink\" data-title=\"tmux Configuration\" data-description=\"tmux configuration for persistent terminal sessions with popup windows and session management\" data-date=\"2026-02-07\"\u003etmux Configuration\u003c/a\u003e - Terminal multiplexer for persistent sessions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/kitty/\" class=\"wikilink\" data-title=\"kitty Terminal\" data-description=\"kitty - a fast, feature-rich, GPU-based terminal emulator\" data-date=\"2026-02-07\"\u003ekitty Terminal\u003c/a\u003e - GPU-accelerated terminal emulator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/wezterm/\" class=\"wikilink\" data-title=\"WezTerm\" data-description=\"WezTerm - a GPU-accelerated cross-platform terminal emulator\" data-date=\"2026-02-07\"\u003eWezTerm\u003c/a\u003e - Cross-platform terminal emulator\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"editors\"\u003eEditors \u003ca href=\"#editors\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"/neovim/\" class=\"wikilink\" data-title=\"Neovim Configuration\" data-description=\"Neovim configuration with lazy.nvim for plugin management\" data-date=\"2026-02-07\"\u003eNeovim Configuration\u003c/a\u003e - Modal editor with extensive plugin ecosystem\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/helix/\" class=\"wikilink\" data-title=\"Helix Editor\" data-description=\"Helix - a post-modern modal text editor\" data-date=\"2026-02-07\"\u003eHelix Editor\u003c/a\u003e - Post-modern modal editor\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"window-management\"\u003eWindow Management \u003ca href=\"#window-management\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"/hyprland/\" class=\"wikilink\" data-title=\"Hyprland Window Manager\" data-description=\"Hyprland - a dynamic tiling Wayland compositor\" data-date=\"2026-02-07\"\u003eHyprland Window Manager\u003c/a\u003e - Dynamic tiling Wayland compositor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/awesome/\" class=\"wikilink\" data-title=\"Awesome Window Manager\" data-description=\"Awesome WM - a highly configurable X11 window manager\" data-date=\"2026-02-07\"\u003eAwesome Window Manager\u003c/a\u003e - Highly configurable X11 window manager\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"development-tools\"\u003eDevelopment Tools \u003ca href=\"#development-tools\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"/mise/\" class=\"wikilink\" data-title=\"mise Tool Management\" data-description=\"mise - the universal version manager for development tools\" data-date=\"2026-02-07\"\u003emise Tool Management\u003c/a\u003e - Universal version manager for dev tools\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/git/\" class=\"wikilink\" data-title=\"Git Configuration\" data-description=\"Git configuration with aliases, delta for diffs, and work/personal separation\" data-date=\"2026-02-07\"\u003eGit Configuration\u003c/a\u003e - Version control configuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/gitui/\" class=\"wikilink\" data-title=\"gitui\" data-description=\"gitui - a blazing-fast terminal UI for git\" data-date=\"2026-02-07\"\u003egitui\u003c/a\u003e - Terminal UI for git (primary)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/lazygit/\" class=\"wikilink\" data-title=\"Lazygit\" data-description=\"Lazygit - a simple terminal UI for git commands\" data-date=\"2026-02-07\"\u003eLazygit\u003c/a\u003e - Alternative git TUI\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"status--system\"\u003eStatus \u0026amp; System \u003ca href=\"#status--system\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"/waybar/\" class=\"wikilink\" data-title=\"Waybar\" data-description=\"Waybar - a highly customizable Wayland bar\" data-date=\"2026-02-07\"\u003eWaybar\u003c/a\u003e - Highly customizable Wayland bar\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/polybar/\" class=\"wikilink\" data-title=\"Polybar\" data-description=\"Polybar - a fast and easy-to-use status bar for X11\" data-date=\"2026-02-07\"\u003ePolybar\u003c/a\u003e - Fast and easy-to-use status bar\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"utilities\"\u003eUtilities \u003ca href=\"#utilities\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"/atuin/\" class=\"wikilink\" data-title=\"Atuin\" data-description=\"Atuin - a magical shell history with sync\" data-date=\"2026-02-07\"\u003eAtuin\u003c/a\u003e - Magical shell history\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/starship/\" class=\"wikilink\" data-title=\"Starship Prompt\" data-description=\"Starship - minimal, fast, and customizable shell prompt\" data-date=\"2026-02-07\"\u003eStarship Prompt\u003c/a\u003e - Minimal, fast shell prompt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/fzf/\" class=\"wikilink\" data-title=\"fzf\" data-description=\"fzf - a command-line fuzzy finder\" data-date=\"2026-02-07\"\u003efzf\u003c/a\u003e - Command-line fuzzy finder\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/lf/\" class=\"wikilink\" data-title=\"lf\" data-description=\"lf - a terminal file manager written in Go\" data-date=\"2026-02-07\"\u003elf\u003c/a\u003e - Terminal file manager\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/yazi/\" class=\"wikilink\" data-title=\"Yazi\" data-description=\"Yazi - a terminal file manager\" data-date=\"2026-02-07\"\u003eYazi\u003c/a\u003e - Alternative file manager\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/zellij/\" class=\"wikilink\" data-title=\"Zellij\" data-description=\"Zellij - a terminal workspace with batteries included\" data-date=\"2026-02-07\"\u003eZellij\u003c/a\u003e - Terminal workspace with batteries included\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"getting-started\"\u003eGetting Started \u003ca href=\"#getting-started\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eIf you're interested in using any of these configurations, check out the\n\u003ca href=\"/getting-started/\" class=\"wikilink\" data-title=\"Getting Started\" data-description=\"Getting started with these dotfiles - installation and setup guide\" data-date=\"2026-02-07\"\u003eGetting Started\u003c/a\u003e guide for installation and setup\ninstructions.\u003c/p\u003e\n\u003ch2 id=\"structure\"\u003eStructure \u003ca href=\"#structure\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe dotfiles are organized by application, with each directory containing the\nrelevant configuration files:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e.\n├── zsh/           # Shell configuration\n├── tmux/          # Terminal multiplexer\n├── nvim/          # Neovim configuration\n├── hypr/          # Hyprland window manager\n├── mise/          # Dev tool management\n└── ...\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eEach tool has its own documentation page covering setup, key features, and\ncustomization options.\u003c/p\u003e\n\u003ch2 id=\"contributing\"\u003eContributing \u003ca href=\"#contributing\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThese are my personal configurations, but feel free to fork and adapt them for\nyour own use. If you find bugs or have suggestions, issues and pull requests are\nwelcome.\u003c/p\u003e\n",
      "content_text": "\nWelcome to my personal dotfiles documentation. This is a collection of\nconfigurations that I've built up over years of tweaking my development\nenvironment to maximize productivity and minimize friction.\n\n## Philosophy\n\nThese dotfiles follow a few core principles:\n\n- **Minimal friction** - Tools should get out of the way and let you work\n- **Keyboard-centric** - Mouse usage is minimized\n- **Portable** - Works across different machines and environments\n- **Version controlled** - Everything is tracked and reproducible\n\n## What's Included\n\n### Shell \u0026 Terminal\n\n- \u003ca href=\"/zsh/\" class=\"wikilink\" data-title=\"zsh Configuration\" data-description=\"zsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\" data-date=\"2026-02-07\"\u003ezsh Configuration\u003c/a\u003e - Primary shell with extensive customization\n- \u003ca href=\"/tmux/\" class=\"wikilink\" data-title=\"tmux Configuration\" data-description=\"tmux configuration for persistent terminal sessions with popup windows and session management\" data-date=\"2026-02-07\"\u003etmux Configuration\u003c/a\u003e - Terminal multiplexer for persistent sessions\n- \u003ca href=\"/kitty/\" class=\"wikilink\" data-title=\"kitty Terminal\" data-description=\"kitty - a fast, feature-rich, GPU-based terminal emulator\" data-date=\"2026-02-07\"\u003ekitty Terminal\u003c/a\u003e - GPU-accelerated terminal emulator\n- \u003ca href=\"/wezterm/\" class=\"wikilink\" data-title=\"WezTerm\" data-description=\"WezTerm - a GPU-accelerated cross-platform terminal emulator\" data-date=\"2026-02-07\"\u003eWezTerm\u003c/a\u003e - Cross-platform terminal emulator\n\n### Editors\n\n- \u003ca href=\"/neovim/\" class=\"wikilink\" data-title=\"Neovim Configuration\" data-description=\"Neovim configuration with lazy.nvim for plugin management\" data-date=\"2026-02-07\"\u003eNeovim Configuration\u003c/a\u003e - Modal editor with extensive plugin ecosystem\n- \u003ca href=\"/helix/\" class=\"wikilink\" data-title=\"Helix Editor\" data-description=\"Helix - a post-modern modal text editor\" data-date=\"2026-02-07\"\u003eHelix Editor\u003c/a\u003e - Post-modern modal editor\n\n### Window Management\n\n- \u003ca href=\"/hyprland/\" class=\"wikilink\" data-title=\"Hyprland Window Manager\" data-description=\"Hyprland - a dynamic tiling Wayland compositor\" data-date=\"2026-02-07\"\u003eHyprland Window Manager\u003c/a\u003e - Dynamic tiling Wayland compositor\n- \u003ca href=\"/awesome/\" class=\"wikilink\" data-title=\"Awesome Window Manager\" data-description=\"Awesome WM - a highly configurable X11 window manager\" data-date=\"2026-02-07\"\u003eAwesome Window Manager\u003c/a\u003e - Highly configurable X11 window manager\n\n### Development Tools\n\n- \u003ca href=\"/mise/\" class=\"wikilink\" data-title=\"mise Tool Management\" data-description=\"mise - the universal version manager for development tools\" data-date=\"2026-02-07\"\u003emise Tool Management\u003c/a\u003e - Universal version manager for dev tools\n- \u003ca href=\"/git/\" class=\"wikilink\" data-title=\"Git Configuration\" data-description=\"Git configuration with aliases, delta for diffs, and work/personal separation\" data-date=\"2026-02-07\"\u003eGit Configuration\u003c/a\u003e - Version control configuration\n- \u003ca href=\"/gitui/\" class=\"wikilink\" data-title=\"gitui\" data-description=\"gitui - a blazing-fast terminal UI for git\" data-date=\"2026-02-07\"\u003egitui\u003c/a\u003e - Terminal UI for git (primary)\n- \u003ca href=\"/lazygit/\" class=\"wikilink\" data-title=\"Lazygit\" data-description=\"Lazygit - a simple terminal UI for git commands\" data-date=\"2026-02-07\"\u003eLazygit\u003c/a\u003e - Alternative git TUI\n\n### Status \u0026 System\n\n- \u003ca href=\"/waybar/\" class=\"wikilink\" data-title=\"Waybar\" data-description=\"Waybar - a highly customizable Wayland bar\" data-date=\"2026-02-07\"\u003eWaybar\u003c/a\u003e - Highly customizable Wayland bar\n- \u003ca href=\"/polybar/\" class=\"wikilink\" data-title=\"Polybar\" data-description=\"Polybar - a fast and easy-to-use status bar for X11\" data-date=\"2026-02-07\"\u003ePolybar\u003c/a\u003e - Fast and easy-to-use status bar\n\n### Utilities\n\n- \u003ca href=\"/atuin/\" class=\"wikilink\" data-title=\"Atuin\" data-description=\"Atuin - a magical shell history with sync\" data-date=\"2026-02-07\"\u003eAtuin\u003c/a\u003e - Magical shell history\n- \u003ca href=\"/starship/\" class=\"wikilink\" data-title=\"Starship Prompt\" data-description=\"Starship - minimal, fast, and customizable shell prompt\" data-date=\"2026-02-07\"\u003eStarship Prompt\u003c/a\u003e - Minimal, fast shell prompt\n- \u003ca href=\"/fzf/\" class=\"wikilink\" data-title=\"fzf\" data-description=\"fzf - a command-line fuzzy finder\" data-date=\"2026-02-07\"\u003efzf\u003c/a\u003e - Command-line fuzzy finder\n- \u003ca href=\"/lf/\" class=\"wikilink\" data-title=\"lf\" data-description=\"lf - a terminal file manager written in Go\" data-date=\"2026-02-07\"\u003elf\u003c/a\u003e - Terminal file manager\n- \u003ca href=\"/yazi/\" class=\"wikilink\" data-title=\"Yazi\" data-description=\"Yazi - a terminal file manager\" data-date=\"2026-02-07\"\u003eYazi\u003c/a\u003e - Alternative file manager\n- \u003ca href=\"/zellij/\" class=\"wikilink\" data-title=\"Zellij\" data-description=\"Zellij - a terminal workspace with batteries included\" data-date=\"2026-02-07\"\u003eZellij\u003c/a\u003e - Terminal workspace with batteries included\n\n## Getting Started\n\nIf you're interested in using any of these configurations, check out the\n\u003ca href=\"/getting-started/\" class=\"wikilink\" data-title=\"Getting Started\" data-description=\"Getting started with these dotfiles - installation and setup guide\" data-date=\"2026-02-07\"\u003eGetting Started\u003c/a\u003e guide for installation and setup\ninstructions.\n\n## Structure\n\nThe dotfiles are organized by application, with each directory containing the\nrelevant configuration files:\n\n```\n.\n├── zsh/           # Shell configuration\n├── tmux/          # Terminal multiplexer\n├── nvim/          # Neovim configuration\n├── hypr/          # Hyprland window manager\n├── mise/          # Dev tool management\n└── ...\n```\n\nEach tool has its own documentation page covering setup, key features, and\ncustomization options.\n\n## Contributing\n\nThese are my personal configurations, but feel free to fork and adapt them for\nyour own use. If you find bugs or have suggestions, issues and pull requests are\nwelcome.\n",
      "summary": "Overview of my personal dotfiles - a collection of configurations for a productive development environment",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/hyprland/",
      "url": "https://dots.waylonwalker.com/hyprland/",
      "title": "Hyprland Window Manager",
      "content_html": "\u003cp\u003e\u003ca href=\"https://hyprland.org/\"\u003eHyprland\u003c/a\u003e is a dynamic tiling Wayland compositor that\ndoesn't sacrifice on its looks. It provides smooth animations, great\nfunctionality, and an easy-to-use configuration.\u003c/p\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDynamic tiling\u003c/strong\u003e - Windows tile automatically with no manual layouts\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWayland native\u003c/strong\u003e - Modern protocol, better performance\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSmooth animations\u003c/strong\u003e - Beautiful window transitions\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eLayer shell\u003c/strong\u003e - Status bars and notifications work properly\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eXWayland\u003c/strong\u003e - Run X11 applications seamlessly\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"installation\"\u003eInstallation \u003ca href=\"#installation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eOn Arch Linux:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S hyprland\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOn other distributions, see the \u003ca href=\"https://wiki.hyprland.org/Getting-Started/Installation/\"\u003eofficial installation\nguide\u003c/a\u003e.\u003c/p\u003e\n\u003ch3 id=\"configuration\"\u003eConfiguration \u003ca href=\"#configuration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eConfig files live in \u003ccode\u003e~/.config/hypr/\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ehyprland.conf\u003c/code\u003e - Main configuration\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emonitors.conf\u003c/code\u003e - Monitor layouts and resolutions\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ebindings.conf\u003c/code\u003e - Key bindings\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eautostart.conf\u003c/code\u003e - Applications to start on launch\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"window-rules\"\u003eWindow Rules \u003ca href=\"#window-rules\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eApplications automatically go to specific workspaces:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Workspace assignments\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003ewindowrule\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e workspace 1, match:class ^\u003cspan class=\"o\"\u003e(\u003c/span\u003esteam\u003cspan class=\"o\"\u003e)\u003c/span\u003e$\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003ewindowrule\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e workspace 4, match:class ^\u003cspan class=\"o\"\u003e(\u003c/span\u003ekitty\u003cspan class=\"o\"\u003e)\u003c/span\u003e$\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003ewindowrule\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e workspace 5, match:class ^\u003cspan class=\"o\"\u003e(\u003c/span\u003efirefox\u003cspan class=\"o\"\u003e)\u003c/span\u003e$\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003ewindowrule\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e workspace 5, match:class ^\u003cspan class=\"o\"\u003e(\u003c/span\u003ebrave-browser\u003cspan class=\"o\"\u003e)\u003c/span\u003e$\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003ewindowrule\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e workspace 6, match:class ^\u003cspan class=\"o\"\u003e(\u003c/span\u003esignal\u003cspan class=\"o\"\u003e)\u003c/span\u003e$\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003ewindowrule\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e workspace 8, match:class ^\u003cspan class=\"o\"\u003e(\u003c/span\u003ebrave-chat.openai.com__-Default\u003cspan class=\"o\"\u003e)\u003c/span\u003e$\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003ewindowrule\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e workspace 9, match:class ^\u003cspan class=\"o\"\u003e(\u003c/span\u003eorg.prismlauncher.PrismLauncher\u003cspan class=\"o\"\u003e)\u003c/span\u003e$\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Float certain windows\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003ewindowrule\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e float on, match:class ^\u003cspan class=\"o\"\u003e(\u003c/span\u003eorg.pulseaudio.pavucontrol\u003cspan class=\"o\"\u003e)\u003c/span\u003e$\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003ewindowrule\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e float on, match:class ^\u003cspan class=\"o\"\u003e(\u003c/span\u003exdg-desktop-portal-gtk\u003cspan class=\"o\"\u003e)\u003c/span\u003e$\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"workspaces\"\u003eWorkspaces \u003ca href=\"#workspaces\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWorkspaces are organized by function:\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eWorkspace\u003c/th\u003e\n\u003cth\u003ePurpose\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e1\u003c/td\u003e\n\u003ctd\u003eSteam/Games\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e2\u003c/td\u003e\n\u003ctd\u003eGraphics (Krita)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e3\u003c/td\u003e\n\u003ctd\u003eGeneral\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e4\u003c/td\u003e\n\u003ctd\u003eTerminals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5\u003c/td\u003e\n\u003ctd\u003eWeb Browsers\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e6\u003c/td\u003e\n\u003ctd\u003eChat (Signal)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e7\u003c/td\u003e\n\u003ctd\u003eMedia\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e8\u003c/td\u003e\n\u003ctd\u003eWeb Apps (ChatGPT, YouTube)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e9\u003c/td\u003e\n\u003ctd\u003eMinecraft\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e10\u003c/td\u003e\n\u003ctd\u003eSystem\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"default-key-bindings\"\u003eDefault Key Bindings \u003ca href=\"#default-key-bindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHyprland uses a \u003ccode\u003eSUPER\u003c/code\u003e (Windows/Super) key modifier:\u003c/p\u003e\n\u003ch3 id=\"window-management\"\u003eWindow Management \u003ca href=\"#window-management\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSUPER+Q\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eClose window\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSUPER+Shift+Q\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eForce kill window\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSUPER+T\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle floating\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSUPER+F\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle fullscreen\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSUPER+J\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle split direction\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"navigation\"\u003eNavigation \u003ca href=\"#navigation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSUPER+arrow keys\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eChange window focus\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSUPER+Shift+arrow keys\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMove window\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSUPER+1-0\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSwitch to workspace\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSUPER+Shift+1-0\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMove window to workspace\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"mouse\"\u003eMouse \u003ca href=\"#mouse\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eSUPER+LMB\u003c/code\u003e - Move window\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSUPER+RMB\u003c/code\u003e - Resize window\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"scripts\"\u003eScripts \u003ca href=\"#scripts\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eCustom scripts in \u003ccode\u003e~/.config/hypr/scripts/\u003c/code\u003e:\u003c/p\u003e\n\u003ch3 id=\"terminalsh\"\u003eterminal.sh \u003ca href=\"#terminalsh\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eLaunch terminal with specific rules:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/usr/bin/env bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e\u003c/span\u003ekitty --class\u003cspan class=\"o\"\u003e=\u003c/span\u003ekitty\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"focus-or-launchsh\"\u003efocus_or_launch.sh \u003ca href=\"#focus-or-launchsh\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eFocus a window if it exists, otherwise launch it:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/usr/bin/env bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e\u003c/span\u003e\u003cspan class=\"c1\"\u003e# Usage: focus_or_launch \u0026lt;class\u0026gt; \u0026lt;command\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"toggle-waybarsh\"\u003etoggle_waybar.sh \u003ca href=\"#toggle-waybarsh\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eToggle the status bar visibility:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/usr/bin/env bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e\u003c/span\u003ekillall -SIGUSR1 waybar\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"autostart\"\u003eAutostart \u003ca href=\"#autostart\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eApplications started automatically:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# From autostart.conf\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eexec-once \u003cspan class=\"o\"\u003e=\u003c/span\u003e waybar\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eexec-once \u003cspan class=\"o\"\u003e=\u003c/span\u003e hyprpaper\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eexec-once \u003cspan class=\"o\"\u003e=\u003c/span\u003e mako  \u003cspan class=\"c1\"\u003e# Notification daemon\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"environment-variables\"\u003eEnvironment Variables \u003ca href=\"#environment-variables\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWayland-specific settings:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eenv\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e XDG_CURRENT_DESKTOP,Hyprland\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eenv\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e XDG_SESSION_TYPE,wayland\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eenv\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e XDG_SESSION_DESKTOP,Hyprland\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"troubleshooting\"\u003eTroubleshooting \u003ca href=\"#troubleshooting\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"applications-wont-launch\"\u003eApplications won't launch \u003ca href=\"#applications-wont-launch\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eCheck if they're trying to use X11:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Force XWayland for problematic apps\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003ewindowrule\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e xwayland, match:class ^\u003cspan class=\"o\"\u003e(\u003c/span\u003eapp-name\u003cspan class=\"o\"\u003e)\u003c/span\u003e$\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"screen-sharing-not-working\"\u003eScreen sharing not working \u003ca href=\"#screen-sharing-not-working\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eEnsure xdg-desktop-portal-hyprland is installed:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S xdg-desktop-portal-hyprland\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/awesome/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAwesome Window Manager\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAwesome WM - a highly configurable X11 window manager\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/waybar/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWaybar\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWaybar - a highly customizable Wayland bar\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://wiki.hyprland.org/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHyprland Wiki\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe documentation for Hyprland.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ewiki.hyprland.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\n[Hyprland](https://hyprland.org/) is a dynamic tiling Wayland compositor that\ndoesn't sacrifice on its looks. It provides smooth animations, great\nfunctionality, and an easy-to-use configuration.\n\n## Features\n\n- **Dynamic tiling** - Windows tile automatically with no manual layouts\n- **Wayland native** - Modern protocol, better performance\n- **Smooth animations** - Beautiful window transitions\n- **Layer shell** - Status bars and notifications work properly\n- **XWayland** - Run X11 applications seamlessly\n\n## Setup\n\n### Installation\n\nOn Arch Linux:\n\n```bash\nsudo pacman -S hyprland\n```\n\nOn other distributions, see the [official installation\nguide](https://wiki.hyprland.org/Getting-Started/Installation/).\n\n### Configuration\n\nConfig files live in `~/.config/hypr/`:\n\n- `hyprland.conf` - Main configuration\n- `monitors.conf` - Monitor layouts and resolutions\n- `bindings.conf` - Key bindings\n- `autostart.conf` - Applications to start on launch\n\n## Window Rules\n\nApplications automatically go to specific workspaces:\n\n```bash\n# Workspace assignments\nwindowrule = workspace 1, match:class ^(steam)$\nwindowrule = workspace 4, match:class ^(kitty)$\nwindowrule = workspace 5, match:class ^(firefox)$\nwindowrule = workspace 5, match:class ^(brave-browser)$\nwindowrule = workspace 6, match:class ^(signal)$\nwindowrule = workspace 8, match:class ^(brave-chat.openai.com__-Default)$\nwindowrule = workspace 9, match:class ^(org.prismlauncher.PrismLauncher)$\n\n# Float certain windows\nwindowrule = float on, match:class ^(org.pulseaudio.pavucontrol)$\nwindowrule = float on, match:class ^(xdg-desktop-portal-gtk)$\n```\n\n## Workspaces\n\nWorkspaces are organized by function:\n\n| Workspace | Purpose |\n|-----------|---------|\n| 1 | Steam/Games |\n| 2 | Graphics (Krita) |\n| 3 | General |\n| 4 | Terminals |\n| 5 | Web Browsers |\n| 6 | Chat (Signal) |\n| 7 | Media |\n| 8 | Web Apps (ChatGPT, YouTube) |\n| 9 | Minecraft |\n| 10 | System |\n\n## Default Key Bindings\n\nHyprland uses a `SUPER` (Windows/Super) key modifier:\n\n### Window Management\n\n| Key | Action |\n|-----|--------|\n| `SUPER+Q` | Close window |\n| `SUPER+Shift+Q` | Force kill window |\n| `SUPER+T` | Toggle floating |\n| `SUPER+F` | Toggle fullscreen |\n| `SUPER+J` | Toggle split direction |\n\n### Navigation\n\n| Key | Action |\n|-----|--------|\n| `SUPER+arrow keys` | Change window focus |\n| `SUPER+Shift+arrow keys` | Move window |\n| `SUPER+1-0` | Switch to workspace |\n| `SUPER+Shift+1-0` | Move window to workspace |\n\n### Mouse\n\n- `SUPER+LMB` - Move window\n- `SUPER+RMB` - Resize window\n\n## Scripts\n\nCustom scripts in `~/.config/hypr/scripts/`:\n\n### terminal.sh\n\nLaunch terminal with specific rules:\n\n```bash\n#!/usr/bin/env bash\nkitty --class=kitty\n```\n\n### focus_or_launch.sh\n\nFocus a window if it exists, otherwise launch it:\n\n```bash\n#!/usr/bin/env bash\n# Usage: focus_or_launch \u003cclass\u003e \u003ccommand\u003e\n```\n\n### toggle_waybar.sh\n\nToggle the status bar visibility:\n\n```bash\n#!/usr/bin/env bash\nkillall -SIGUSR1 waybar\n```\n\n## Autostart\n\nApplications started automatically:\n\n```bash\n# From autostart.conf\nexec-once = waybar\nexec-once = hyprpaper\nexec-once = mako  # Notification daemon\n```\n\n## Environment Variables\n\nWayland-specific settings:\n\n```bash\nenv = XDG_CURRENT_DESKTOP,Hyprland\nenv = XDG_SESSION_TYPE,wayland\nenv = XDG_SESSION_DESKTOP,Hyprland\n```\n\n## Troubleshooting\n\n### Applications won't launch\n\nCheck if they're trying to use X11:\n\n```bash\n# Force XWayland for problematic apps\nwindowrule = xwayland, match:class ^(app-name)$\n```\n\n### Screen sharing not working\n\nEnsure xdg-desktop-portal-hyprland is installed:\n\n```bash\nsudo pacman -S xdg-desktop-portal-hyprland\n```\n\n## See Also\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/awesome/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eAwesome Window Manager\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eAwesome WM - a highly configurable X11 window manager\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/waybar/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eWaybar\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eWaybar - a highly customizable Wayland bar\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://wiki.hyprland.org/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHyprland Wiki\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe documentation for Hyprland.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003ewiki.hyprland.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Hyprland - a dynamic tiling Wayland compositor",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/helix/",
      "url": "https://dots.waylonwalker.com/helix/",
      "title": "Helix Editor",
      "content_html": "\u003cp\u003eHelix is a post-modern modal text editor inspired by Kakoune. It features multiple cursors, tree-sitter integration, and a clean design.\u003c/p\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eModal editing\u003c/strong\u003e - Vim-like modal interface with improvements\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMultiple cursors\u003c/strong\u003e - Kakoune-style multiple selections\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTree-sitter\u003c/strong\u003e - Built-in syntax highlighting and parsing\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eLSP support\u003c/strong\u003e - Language Server Protocol integration\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNo plugins needed\u003c/strong\u003e - Batteries included philosophy\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstall via package manager:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Ubuntu/Debian\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo add-apt-repository ppa:maveonair/helix-editor\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install helix\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Arch Linux\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S helix\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# macOS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebrew install helix\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Via mise\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise install helix\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"configuration\"\u003eConfiguration \u003ca href=\"#configuration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eConfig file: \u003ccode\u003e~/.config/helix/config.toml\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eExample configuration:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003etheme\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;dracula\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eeditor\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eline-number\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;relative\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003emouse\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003efalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ecursorline\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eauto-save\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eeditor\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ecursor-shape\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003enormal\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;block\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003einsert\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;bar\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eselect\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;underline\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eeditor\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003efile-picker\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ehidden\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003efalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"key-differences-from-vimneovim\"\u003eKey Differences from Vim/Neovim \u003ca href=\"#key-differences-from-vimneovim\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHelix uses a selection-first approach:\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003cth\u003eVim\u003c/th\u003e\n\u003cth\u003eHelix\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSelect word\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eviw\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ew\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eDelete word\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ediw\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ewd\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eChange word\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eciw\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ewc\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eYank word\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eyiw\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ewy\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eGo to line\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eG\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003egh\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"key-bindings\"\u003eKey Bindings \u003ca href=\"#key-bindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eMode\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSpace\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003eCommand palette\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSpace+f\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003eFile picker\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSpace+b\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003eBuffer picker\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSpace+g\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003eGit picker\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSpace+s\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003eSymbol picker\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSpace+?\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003eCommand picker\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+s\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAny\u003c/td\u003e\n\u003ctd\u003eSave\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+c\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003eComment line\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+w\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNormal\u003c/td\u003e\n\u003ctd\u003eWindow commands\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"multiple-cursors\"\u003eMultiple Cursors \u003ca href=\"#multiple-cursors\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHelix excels at multiple selections:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e%\u003c/code\u003e - Select all occurrences in file\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003es\u003c/code\u003e - Select matches in selection\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eC\u003c/code\u003e - Copy selection to next line\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eA-C\u003c/code\u003e - Copy selection to previous line\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e;\u003c/code\u003e - Collapse selection to cursor\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eAlt-;\u003c/code\u003e - Flip cursor and selection\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/neovim/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNeovim Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNeovim configuration with lazy.nvim for plugin management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.helix-editor.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHelix\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocs.helix-editor.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nHelix is a post-modern modal text editor inspired by Kakoune. It features multiple cursors, tree-sitter integration, and a clean design.\n\n## Features\n\n- **Modal editing** - Vim-like modal interface with improvements\n- **Multiple cursors** - Kakoune-style multiple selections\n- **Tree-sitter** - Built-in syntax highlighting and parsing\n- **LSP support** - Language Server Protocol integration\n- **No plugins needed** - Batteries included philosophy\n\n## Setup\n\nInstall via package manager:\n\n```bash\n# Ubuntu/Debian\nsudo add-apt-repository ppa:maveonair/helix-editor\nsudo apt update\nsudo apt install helix\n\n# Arch Linux\nsudo pacman -S helix\n\n# macOS\nbrew install helix\n\n# Via mise\nmise install helix\n```\n\n## Configuration\n\nConfig file: `~/.config/helix/config.toml`\n\nExample configuration:\n\n```toml\ntheme = \"dracula\"\n\n[editor]\nline-number = \"relative\"\nmouse = false\ncursorline = true\nauto-save = true\n\n[editor.cursor-shape]\nnormal = \"block\"\ninsert = \"bar\"\nselect = \"underline\"\n\n[editor.file-picker]\nhidden = false\n```\n\n## Key Differences from Vim/Neovim\n\nHelix uses a selection-first approach:\n\n| Action | Vim | Helix |\n|--------|-----|-------|\n| Select word | `viw` | `w` |\n| Delete word | `diw` | `wd` |\n| Change word | `ciw` | `wc` |\n| Yank word | `yiw` | `wy` |\n| Go to line | `G` | `gh` |\n\n## Key Bindings\n\n| Key | Mode | Action |\n|-----|------|--------|\n| `Space` | Normal | Command palette |\n| `Space+f` | Normal | File picker |\n| `Space+b` | Normal | Buffer picker |\n| `Space+g` | Normal | Git picker |\n| `Space+s` | Normal | Symbol picker |\n| `Space+?` | Normal | Command picker |\n| `Ctrl+s` | Any | Save |\n| `Ctrl+c` | Normal | Comment line |\n| `Ctrl+w` | Normal | Window commands |\n\n## Multiple Cursors\n\nHelix excels at multiple selections:\n\n- `%` - Select all occurrences in file\n- `s` - Select matches in selection\n- `C` - Copy selection to next line\n- `A-C` - Copy selection to previous line\n- `;` - Collapse selection to cursor\n- `Alt-;` - Flip cursor and selection\n\n## See Also\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/neovim/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNeovim Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNeovim configuration with lazy.nvim for plugin management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.helix-editor.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHelix\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocs.helix-editor.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Helix - a post-modern modal text editor",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/gitui/",
      "url": "https://dots.waylonwalker.com/gitui/",
      "title": "gitui",
      "content_html": "\u003cp\u003egitui is a blazing-fast terminal UI for git written in Rust. It provides a keyboard-driven interface for common git operations with minimal dependencies and excellent performance.\u003c/p\u003e\n\u003cp\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\"\u003e\u003csource src=\"/tapes/gitui-intro.mp4\" type=\"video/mp4\"\u003egitui staging workflow\u003c/video\u003e\u003c/p\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFast\u003c/strong\u003e - Written in Rust, starts instantly\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eKeyboard-driven\u003c/strong\u003e - No mouse required\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMinimal dependencies\u003c/strong\u003e - Single binary\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAsync operations\u003c/strong\u003e - Non-blocking UI\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePopup friendly\u003c/strong\u003e - Works great in tmux popups\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstall via package manager:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Via mise (recommended)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise install gitui\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Arch Linux\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S gitui\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# macOS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebrew install gitui\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Cargo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecargo install gitui\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"launching\"\u003eLaunching \u003ca href=\"#launching\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egitui\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOr from within a git repo with \u003ccode\u003eCtrl+G\u003c/code\u003e (from zsh config).\u003c/p\u003e\n\u003ch2 id=\"key-bindings\"\u003eKey Bindings \u003ca href=\"#key-bindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"global\"\u003eGlobal \u003ca href=\"#global\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e?\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eHelp\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eq\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eQuit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eTab\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSwitch panel (Status, Log, Diff)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e1-3\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eJump to panel\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"status-panel\"\u003eStatus Panel \u003ca href=\"#status-panel\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e↑/↓\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNavigate files\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSpace\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStage/unstage file\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEnter\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eView diff\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStage all\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003er\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRevert changes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ec\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCommit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ep\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePush\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ef\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePull/Fetch\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eb\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eBranch\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eh\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStash\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"commit\"\u003eCommit \u003ca href=\"#commit\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ec\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOpen commit dialog\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+s\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSubmit commit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEsc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCancel\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"log-panel\"\u003eLog Panel \u003ca href=\"#log-panel\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e↑/↓\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNavigate commits\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEnter\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eView commit details\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003er\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRevert commit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ee\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEdit past commit (rebase)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"branch\"\u003eBranch \u003ca href=\"#branch\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eb\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOpen branch list\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ec\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCreate branch\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ed\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDelete branch\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003em\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMerge branch\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEnter\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCheckout branch\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"tmux-integration\"\u003etmux Integration \u003ca href=\"#tmux-integration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eFrom \u003ccode\u003e.tmux.conf\u003c/code\u003e:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ebind\u003c/span\u003e -n M-F display-popup -h 95% -w 95% -d \u003cspan class=\"s1\"\u003e\u0026#39;#{pane_current_path}\u0026#39;\u003c/span\u003e -E \u003cspan class=\"s1\"\u003e\u0026#39;gitui\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOpens gitui in a popup with \u003ccode\u003eAlt+Shift+F\u003c/code\u003e for full-screen git operations.\u003c/p\u003e\n\u003cp\u003eFrom \u003ccode\u003e.zshrc\u003c/code\u003e:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebindkey -s \u003cspan class=\"s1\"\u003e\u0026#39;^g\u0026#39;\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;gitui\\n\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOpens gitui with \u003ccode\u003eCtrl+G\u003c/code\u003e in current shell.\u003c/p\u003e\n\u003ch2 id=\"workflow\"\u003eWorkflow \u003ca href=\"#workflow\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTypical git workflow with gitui:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eEdit files\u003c/strong\u003e in neovim\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStage changes\u003c/strong\u003e with \u003ccode\u003eSpace\u003c/code\u003e in gitui\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eReview diff\u003c/strong\u003e with \u003ccode\u003eEnter\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCommit\u003c/strong\u003e with \u003ccode\u003ec\u003c/code\u003e and write message\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePush\u003c/strong\u003e with \u003ccode\u003ep\u003c/code\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eAll without leaving the terminal or using a mouse.\u003c/p\u003e\n\u003ch2 id=\"comparison-with-lazygit\"\u003eComparison with lazygit \u003ca href=\"#comparison-with-lazygit\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003egitui is my primary git TUI because:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSimpler\u003c/strong\u003e - Less configuration needed\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFaster\u003c/strong\u003e - Smaller binary, quicker startup\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePopup-friendly\u003c/strong\u003e - Works great in tmux popups\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRust\u003c/strong\u003e - Aligns with my other Rust tools\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eI keep lazygit installed as an alternative when I need more advanced features.\u003c/p\u003e\n\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/git/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGit Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGit configuration with aliases, delta for diffs, and work/personal separation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/lazygit/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLazygit\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLazygit - a simple terminal UI for git commands\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/tmux/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etmux Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux configuration for persistent terminal sessions with popup windows and session management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/extrawurst/gitui\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://repository-images.githubusercontent.com/247725846/86707e00-e9f5-11ea-92b0-b7d526afa90f\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - gitui-org/gitui: Blazing 💥 fast terminal-ui for git written in rust 🦀\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBlazing 💥 fast terminal-ui for git written in rust 🦀 - gitui-org/gitui\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\ngitui is a blazing-fast terminal UI for git written in Rust. It provides a keyboard-driven interface for common git operations with minimal dependencies and excellent performance.\n\n![gitui staging workflow](/tapes/gitui-intro.mp4)\n\n## Features\n\n- **Fast** - Written in Rust, starts instantly\n- **Keyboard-driven** - No mouse required\n- **Minimal dependencies** - Single binary\n- **Async operations** - Non-blocking UI\n- **Popup friendly** - Works great in tmux popups\n\n## Setup\n\nInstall via package manager:\n\n```bash\n# Via mise (recommended)\nmise install gitui\n\n# Arch Linux\nsudo pacman -S gitui\n\n# macOS\nbrew install gitui\n\n# Cargo\ncargo install gitui\n```\n\n## Launching\n\n```bash\ngitui\n```\n\nOr from within a git repo with `Ctrl+G` (from zsh config).\n\n## Key Bindings\n\n### Global\n\n| Key | Action |\n|-----|--------|\n| `?` | Help |\n| `q` | Quit |\n| `Tab` | Switch panel (Status, Log, Diff) |\n| `1-3` | Jump to panel |\n\n### Status Panel\n\n| Key | Action |\n|-----|--------|\n| `↑/↓` | Navigate files |\n| `Space` | Stage/unstage file |\n| `Enter` | View diff |\n| `a` | Stage all |\n| `r` | Revert changes |\n| `c` | Commit |\n| `p` | Push |\n| `f` | Pull/Fetch |\n| `b` | Branch |\n| `h` | Stash |\n\n### Commit\n\n| Key | Action |\n|-----|--------|\n| `c` | Open commit dialog |\n| `Ctrl+s` | Submit commit |\n| `Esc` | Cancel |\n\n### Log Panel\n\n| Key | Action |\n|-----|--------|\n| `↑/↓` | Navigate commits |\n| `Enter` | View commit details |\n| `r` | Revert commit |\n| `e` | Edit past commit (rebase) |\n\n### Branch\n\n| Key | Action |\n|-----|--------|\n| `b` | Open branch list |\n| `c` | Create branch |\n| `d` | Delete branch |\n| `m` | Merge branch |\n| `Enter` | Checkout branch |\n\n## tmux Integration\n\nFrom `.tmux.conf`:\n\n```bash\nbind -n M-F display-popup -h 95% -w 95% -d '#{pane_current_path}' -E 'gitui'\n```\n\nOpens gitui in a popup with `Alt+Shift+F` for full-screen git operations.\n\nFrom `.zshrc`:\n\n```bash\nbindkey -s '^g' 'gitui\\n'\n```\n\nOpens gitui with `Ctrl+G` in current shell.\n\n## Workflow\n\nTypical git workflow with gitui:\n\n1. **Edit files** in neovim\n2. **Stage changes** with `Space` in gitui\n3. **Review diff** with `Enter`\n4. **Commit** with `c` and write message\n5. **Push** with `p`\n\nAll without leaving the terminal or using a mouse.\n\n## Comparison with lazygit\n\ngitui is my primary git TUI because:\n\n- **Simpler** - Less configuration needed\n- **Faster** - Smaller binary, quicker startup\n- **Popup-friendly** - Works great in tmux popups\n- **Rust** - Aligns with my other Rust tools\n\nI keep lazygit installed as an alternative when I need more advanced features.\n\n## See Also\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/git/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGit Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGit configuration with aliases, delta for diffs, and work/personal separation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/lazygit/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLazygit\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLazygit - a simple terminal UI for git commands\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/tmux/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003etmux Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003etmux configuration for persistent terminal sessions with popup windows and session management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/extrawurst/gitui\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://repository-images.githubusercontent.com/247725846/86707e00-e9f5-11ea-92b0-b7d526afa90f\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - gitui-org/gitui: Blazing 💥 fast terminal-ui for git written in rust 🦀\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eBlazing 💥 fast terminal-ui for git written in rust 🦀 - gitui-org/gitui\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "gitui - a blazing-fast terminal UI for git",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/git/",
      "url": "https://dots.waylonwalker.com/git/",
      "title": "Git Configuration",
      "content_html": "\u003cp\u003eGit configuration optimized for daily development with useful aliases, improved\ndiff viewing, and separate configs for work and personal projects.\u003c/p\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDelta\u003c/strong\u003e - Syntax-highlighted diffs and pager\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eConditional includes\u003c/strong\u003e - Different configs for work vs personal\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eUseful aliases\u003c/strong\u003e - Shortcuts for common operations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBat integration\u003c/strong\u003e - Better file viewing\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"installation\"\u003eInstallation \u003ca href=\"#installation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eGit is typically pre-installed. For latest version:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Ubuntu/Debian\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install git\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Arch Linux\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S git\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Via mise\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise install git\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"configuration\"\u003eConfiguration \u003ca href=\"#configuration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eMain config at \u003ccode\u003e~/.gitconfig\u003c/code\u003e:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003euser\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003ename\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e Waylon S. Walker\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eemail\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e waylon@waylonwalker.com\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003esigningkey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e 66E2BF2B4190EFE4\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003ecore\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eeditor\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e nvim -c startinsert\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eexcludesfile\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e ~/.global-gitignore\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003epager\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e bat --style\u003cspan class=\"o\"\u003e=\u003c/span\u003eplain\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"conditional-includes\"\u003eConditional Includes \u003ca href=\"#conditional-includes\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eDifferent configurations for different directories:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003eincludeIf \u003cspan class=\"s2\"\u003e\u0026#34;gitdir:~/work/\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003epath\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e ~/.gitconfig-work\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003eincludeIf \u003cspan class=\"s2\"\u003e\u0026#34;gitdir:~/git/\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003epath\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e ~/.gitconfig-git\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eExample \u003ccode\u003e~/.gitconfig-work\u003c/code\u003e:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003euser\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eemail\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e waylon@company.com\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003ename\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e Waylon Walker\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"key-settings\"\u003eKey Settings \u003ca href=\"#key-settings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"editor\"\u003eEditor \u003ca href=\"#editor\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eOpens nvim in insert mode for commit messages:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eeditor\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e nvim -c startinsert\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"pager\"\u003ePager \u003ca href=\"#pager\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eUses bat for better output:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003epager\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e bat --style\u003cspan class=\"o\"\u003e=\u003c/span\u003eplain\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003ediff\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e bat --plain\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"autocorrect\"\u003eAutocorrect \u003ca href=\"#autocorrect\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eAutomatically fix typos after 1 second:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003ehelp\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eautocorrect\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e10\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"aliases\"\u003eAliases \u003ca href=\"#aliases\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"squash-all\"\u003esquash-all \u003ca href=\"#squash-all\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eSquash entire branch history into single commit:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit squash-all \u003cspan class=\"s2\"\u003e\u0026#34;Initial commit\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eImplementation:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esquash-all \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;!f(){ git reset \u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003egit commit-tree HEAD^\u003cspan class=\"o\"\u003e{\u003c/span\u003etree\u003cspan class=\"o\"\u003e}\u003c/span\u003e -m \u003cspan class=\"se\"\u003e\\\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003e1\u003c/span\u003e\u003cspan class=\"k\"\u003e:-\u003c/span\u003e\u003cspan class=\"nv\"\u003eA\u003c/span\u003e\u003cspan class=\"p\"\u003e new start\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"se\"\u003e\\\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e;};f\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"restage\"\u003erestage \u003ca href=\"#restage\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eRestage already-staged files:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003erestage\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e !git diff --name-only --cached \u003cspan class=\"p\"\u003e|\u003c/span\u003e xargs git add\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"credentials\"\u003eCredentials \u003ca href=\"#credentials\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eUses GitHub CLI for authentication:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003ecredential \u003cspan class=\"s2\"\u003e\u0026#34;https://github.com\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003ehelper\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003ehelper\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e !gh auth git-credential\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003ecredential\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003ehelper\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e store\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"delta-integration\"\u003eDelta Integration \u003ca href=\"#delta-integration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eDelta provides syntax highlighting for diffs:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003epager\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003ediff\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e delta\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003elog\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e delta\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003ereflog\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e delta\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eshow\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e delta\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003edelta\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003efeatures\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e side-by-side line-numbers decorations\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    syntax-theme \u003cspan class=\"o\"\u003e=\u003c/span\u003e Dracula\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"default-behaviors\"\u003eDefault Behaviors \u003ca href=\"#default-behaviors\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003einit\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003edefaultBranch\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e main\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003epush\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003edefault\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e current\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003epull\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003erebase\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003erebase\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eautoStash\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003ecommit\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003egpgsign\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003efalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"global-gitignore\"\u003eGlobal Gitignore \u003ca href=\"#global-gitignore\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eA \u003ccode\u003e~/.global-gitignore\u003c/code\u003e file excludes files across all repos:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# IDE\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e.idea/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e.vscode/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e*.swp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e*~\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# OS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e.DS_Store\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThumbs.db\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Temporary\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e*.log\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e*.tmp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e.env.local\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"workflows\"\u003eWorkflows \u003ca href=\"#workflows\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"starting-a-new-project\"\u003eStarting a New Project \u003ca href=\"#starting-a-new-project\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Personal project\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e ~/git/new-project\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit init\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit add .\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit commit -m \u003cspan class=\"s2\"\u003e\u0026#34;Initial commit\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Work project (uses work email automatically)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e ~/work/company-project\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit init\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit add .\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit commit -m \u003cspan class=\"s2\"\u003e\u0026#34;Initial commit\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"cleaning-up-history\"\u003eCleaning Up History \u003ca href=\"#cleaning-up-history\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Squash everything to one commit\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit squash-all \u003cspan class=\"s2\"\u003e\u0026#34;Clean history\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Push with force\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit push --force-with-lease\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/lazygit/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLazygit\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLazygit - a simple terminal UI for git commands\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/gitui/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003egitui\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003egitui - a blazing-fast terminal UI for git\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/delta/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDelta\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDelta - syntax-highlighting pager for git and diff output\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/gh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub CLI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGitHub CLI - a command-line tool for GitHub\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://git-scm.com/doc\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRedirecting…\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003egit-scm.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/dandavison/delta\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/06ca61f976050db0d8f65c6c003945e879c93aad4d3cf1f1f691a45ab4e4a3c1/dandavison/delta\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - dandavison/delta: A syntax-highlighting pager for git, diff, grep, and blame output\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA syntax-highlighting pager for git, diff, grep, and blame output - dandavison/delta\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nGit configuration optimized for daily development with useful aliases, improved\ndiff viewing, and separate configs for work and personal projects.\n\n## Features\n\n- **Delta** - Syntax-highlighted diffs and pager\n- **Conditional includes** - Different configs for work vs personal\n- **Useful aliases** - Shortcuts for common operations\n- **Bat integration** - Better file viewing\n\n## Setup\n\n### Installation\n\nGit is typically pre-installed. For latest version:\n\n```bash\n# Ubuntu/Debian\nsudo apt install git\n\n# Arch Linux\nsudo pacman -S git\n\n# Via mise\nmise install git\n```\n\n### Configuration\n\nMain config at `~/.gitconfig`:\n\n```bash\n[user]\n    name = Waylon S. Walker\n    email = waylon@waylonwalker.com\n    signingkey = 66E2BF2B4190EFE4\n\n[core]\n    editor = nvim -c startinsert\n    excludesfile = ~/.global-gitignore\n    pager = bat --style=plain\n```\n\n## Conditional Includes\n\nDifferent configurations for different directories:\n\n```bash\n[includeIf \"gitdir:~/work/\"]\n    path = ~/.gitconfig-work\n\n[includeIf \"gitdir:~/git/\"]\n    path = ~/.gitconfig-git\n```\n\nExample `~/.gitconfig-work`:\n\n```bash\n[user]\n    email = waylon@company.com\n    name = Waylon Walker\n```\n\n## Key Settings\n\n### Editor\n\nOpens nvim in insert mode for commit messages:\n\n```bash\neditor = nvim -c startinsert\n```\n\n### Pager\n\nUses bat for better output:\n\n```bash\npager = bat --style=plain\ndiff = bat --plain\n```\n\n### Autocorrect\n\nAutomatically fix typos after 1 second:\n\n```bash\n[help]\n    autocorrect = 10\n```\n\n## Aliases\n\n### squash-all\n\nSquash entire branch history into single commit:\n\n```bash\ngit squash-all \"Initial commit\"\n```\n\nImplementation:\n\n```bash\nsquash-all = \"!f(){ git reset $(git commit-tree HEAD^{tree} -m \\\"${1:-A new start}\\\");};f\"\n```\n\n### restage\n\nRestage already-staged files:\n\n```bash\nrestage = !git diff --name-only --cached | xargs git add\n```\n\n## Credentials\n\nUses GitHub CLI for authentication:\n\n```bash\n[credential \"https://github.com\"]\n    helper =\n    helper = !gh auth git-credential\n\n[credential]\n    helper = store\n```\n\n## Delta Integration\n\nDelta provides syntax highlighting for diffs:\n\n```bash\n[pager]\n    diff = delta\n    log = delta\n    reflog = delta\n    show = delta\n\n[delta]\n    features = side-by-side line-numbers decorations\n    syntax-theme = Dracula\n```\n\n## Default Behaviors\n\n```bash\n[init]\n    defaultBranch = main\n\n[push]\n    default = current\n\n[pull]\n    rebase = true\n\n[rebase]\n    autoStash = true\n\n[commit]\n    gpgsign = false\n```\n\n## Global Gitignore\n\nA `~/.global-gitignore` file excludes files across all repos:\n\n```bash\n# IDE\n.idea/\n.vscode/\n*.swp\n*~\n\n# OS\n.DS_Store\nThumbs.db\n\n# Temporary\n*.log\n*.tmp\n.env.local\n```\n\n## Workflows\n\n### Starting a New Project\n\n```bash\n# Personal project\ncd ~/git/new-project\ngit init\ngit add .\ngit commit -m \"Initial commit\"\n\n# Work project (uses work email automatically)\ncd ~/work/company-project\ngit init\ngit add .\ngit commit -m \"Initial commit\"\n```\n\n### Cleaning Up History\n\n```bash\n# Squash everything to one commit\ngit squash-all \"Clean history\"\n\n# Push with force\ngit push --force-with-lease\n```\n\n## See Also\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/lazygit/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLazygit\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLazygit - a simple terminal UI for git commands\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/gitui/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003egitui\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003egitui - a blazing-fast terminal UI for git\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/delta/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDelta\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eDelta - syntax-highlighting pager for git and diff output\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/gh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub CLI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGitHub CLI - a command-line tool for GitHub\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://git-scm.com/doc\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRedirecting…\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003egit-scm.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/dandavison/delta\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/06ca61f976050db0d8f65c6c003945e879c93aad4d3cf1f1f691a45ab4e4a3c1/dandavison/delta\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - dandavison/delta: A syntax-highlighting pager for git, diff, grep, and blame output\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA syntax-highlighting pager for git, diff, grep, and blame output - dandavison/delta\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Git configuration with aliases, delta for diffs, and work/personal separation",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/gh/",
      "url": "https://dots.waylonwalker.com/gh/",
      "title": "GitHub CLI",
      "content_html": "\u003cp\u003eGitHub CLI (\u003ccode\u003egh\u003c/code\u003e) is GitHub's official command-line tool that brings pull requests, issues, and other GitHub concepts to your terminal.\u003c/p\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePull requests\u003c/strong\u003e - Create, view, checkout, and merge PRs\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eIssues\u003c/strong\u003e - List, view, create, and close issues\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRepositories\u003c/strong\u003e - Clone, create, fork repos\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eActions\u003c/strong\u003e - View and monitor workflow runs\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCodespaces\u003c/strong\u003e - Manage cloud development environments\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGists\u003c/strong\u003e - Create and manage gists\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstall via package manager:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Via mise (recommended)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise install github-cli\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Ubuntu/Debian\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Download from GitHub releases\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Arch Linux\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S github-cli\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# macOS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebrew install gh\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"authentication\"\u003eAuthentication \u003ca href=\"#authentication\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Login to GitHub\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh auth login\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Verify status\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh auth status\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Logout\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh auth \u003cspan class=\"nb\"\u003elogout\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"repository-operations\"\u003eRepository Operations \u003ca href=\"#repository-operations\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Clone repository\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh repo clone owner/repo\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create new repository\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh repo create my-project --public\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Fork repository\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh repo fork owner/repo\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# View repository\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh repo view owner/repo --web\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"pull-requests\"\u003ePull Requests \u003ca href=\"#pull-requests\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create PR\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit push origin feature-branch\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh pr create --title \u003cspan class=\"s2\"\u003e\u0026#34;Add feature\u0026#34;\u003c/span\u003e --body \u003cspan class=\"s2\"\u003e\u0026#34;Description\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# List PRs\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh pr list\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh pr list --state merged\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# View PR\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh pr view \u003cspan class=\"m\"\u003e123\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh pr view \u003cspan class=\"m\"\u003e123\u003c/span\u003e --web\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Checkout PR locally\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh pr checkout \u003cspan class=\"m\"\u003e123\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Check PR status\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh pr status\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Merge PR\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh pr merge \u003cspan class=\"m\"\u003e123\u003c/span\u003e --squash\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"issues\"\u003eIssues \u003ca href=\"#issues\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# List issues\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh issue list\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh issue list --state closed\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create issue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh issue create --title \u003cspan class=\"s2\"\u003e\u0026#34;Bug report\u0026#34;\u003c/span\u003e --body \u003cspan class=\"s2\"\u003e\u0026#34;Description\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# View issue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh issue view \u003cspan class=\"m\"\u003e123\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh issue view \u003cspan class=\"m\"\u003e123\u003c/span\u003e --web\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Close issue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh issue close \u003cspan class=\"m\"\u003e123\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Comment on issue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh issue comment \u003cspan class=\"m\"\u003e123\u003c/span\u003e --body \u003cspan class=\"s2\"\u003e\u0026#34;Thanks for reporting\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"workflows\"\u003eWorkflows \u003ca href=\"#workflows\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# List workflow runs\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh run list\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# View workflow run\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh run view \u003cspan class=\"m\"\u003e123456789\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Watch workflow run\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh run watch \u003cspan class=\"m\"\u003e123456789\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Re-run failed jobs\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh run rerun \u003cspan class=\"m\"\u003e123456789\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"aliases\"\u003eAliases \u003ca href=\"#aliases\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eCreate shortcuts for common commands:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create alias\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh \u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nb\"\u003eset\u003c/span\u003e pv \u003cspan class=\"s1\"\u003e\u0026#39;pr view\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh \u003cspan class=\"nb\"\u003ealias\u003c/span\u003e \u003cspan class=\"nb\"\u003eset\u003c/span\u003e co \u003cspan class=\"s1\"\u003e\u0026#39;pr checkout\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Use alias\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh pv \u003cspan class=\"m\"\u003e123\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh co \u003cspan class=\"m\"\u003e123\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# List aliases\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh \u003cspan class=\"nb\"\u003ealias\u003c/span\u003e list\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"configuration\"\u003eConfiguration \u003ca href=\"#configuration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eConfig file: \u003ccode\u003e~/.config/gh/config.yml\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003egit_protocol\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003essh\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eeditor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003envim\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eprompt\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eenabled\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003epager\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003edelta\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ealiases\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eco\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003epr checkout\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003epv\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003epr view\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/git/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGit Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGit configuration with aliases, delta for diffs, and work/personal separation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/lazygit/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLazygit\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLazygit - a simple terminal UI for git commands\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cli.github.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"/assets/images/social-card.png\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub CLI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTake GitHub to the command line\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub CLI \u0026middot; cli.github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nGitHub CLI (`gh`) is GitHub's official command-line tool that brings pull requests, issues, and other GitHub concepts to your terminal.\n\n## Features\n\n- **Pull requests** - Create, view, checkout, and merge PRs\n- **Issues** - List, view, create, and close issues\n- **Repositories** - Clone, create, fork repos\n- **Actions** - View and monitor workflow runs\n- **Codespaces** - Manage cloud development environments\n- **Gists** - Create and manage gists\n\n## Setup\n\nInstall via package manager:\n\n```bash\n# Via mise (recommended)\nmise install github-cli\n\n# Ubuntu/Debian\n# Download from GitHub releases\n\n# Arch Linux\nsudo pacman -S github-cli\n\n# macOS\nbrew install gh\n```\n\n## Authentication\n\n```bash\n# Login to GitHub\ngh auth login\n\n# Verify status\ngh auth status\n\n# Logout\ngh auth logout\n```\n\n## Repository Operations\n\n```bash\n# Clone repository\ngh repo clone owner/repo\n\n# Create new repository\ngh repo create my-project --public\n\n# Fork repository\ngh repo fork owner/repo\n\n# View repository\ngh repo view owner/repo --web\n```\n\n## Pull Requests\n\n```bash\n# Create PR\ngit push origin feature-branch\ngh pr create --title \"Add feature\" --body \"Description\"\n\n# List PRs\ngh pr list\ngh pr list --state merged\n\n# View PR\ngh pr view 123\ngh pr view 123 --web\n\n# Checkout PR locally\ngh pr checkout 123\n\n# Check PR status\ngh pr status\n\n# Merge PR\ngh pr merge 123 --squash\n```\n\n## Issues\n\n```bash\n# List issues\ngh issue list\ngh issue list --state closed\n\n# Create issue\ngh issue create --title \"Bug report\" --body \"Description\"\n\n# View issue\ngh issue view 123\ngh issue view 123 --web\n\n# Close issue\ngh issue close 123\n\n# Comment on issue\ngh issue comment 123 --body \"Thanks for reporting\"\n```\n\n## Workflows\n\n```bash\n# List workflow runs\ngh run list\n\n# View workflow run\ngh run view 123456789\n\n# Watch workflow run\ngh run watch 123456789\n\n# Re-run failed jobs\ngh run rerun 123456789\n```\n\n## Aliases\n\nCreate shortcuts for common commands:\n\n```bash\n# Create alias\ngh alias set pv 'pr view'\ngh alias set co 'pr checkout'\n\n# Use alias\ngh pv 123\ngh co 123\n\n# List aliases\ngh alias list\n```\n\n## Configuration\n\nConfig file: `~/.config/gh/config.yml`\n\nExample:\n\n```yaml\ngit_protocol: ssh\neditor: nvim\nprompt: enabled\npager: delta\naliases:\n    co: pr checkout\n    pv: pr view\n```\n\n## See Also\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/git/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGit Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGit configuration with aliases, delta for diffs, and work/personal separation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/lazygit/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLazygit\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLazygit - a simple terminal UI for git commands\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://cli.github.com/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"/assets/images/social-card.png\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub CLI\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eTake GitHub to the command line\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub CLI \u0026middot; cli.github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "GitHub CLI - a command-line tool for GitHub",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/getting-started/",
      "url": "https://dots.waylonwalker.com/getting-started/",
      "title": "Getting Started",
      "content_html": "\u003cp\u003eThis guide will help you set up these dotfiles on your own machine.\u003c/p\u003e\n\u003ch2 id=\"prerequisites\"\u003ePrerequisites \u003ca href=\"#prerequisites\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eYou'll need the following installed:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eGit\u003c/li\u003e\n\u003cli\u003eA terminal emulator (kitty, wezterm, or alacritty recommended)\u003c/li\u003e\n\u003cli\u003ezsh shell\u003c/li\u003e\n\u003cli\u003ecurl or wget\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"quick-setup\"\u003eQuick Setup \u003ca href=\"#quick-setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"1-clone-the-repository\"\u003e1. Clone the Repository \u003ca href=\"#1-clone-the-repository\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit clone https://github.com/waylonwalker/devtainer.git ~/devtainer\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e ~/devtainer\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"2-install-tools\"\u003e2. Install Tools \u003ca href=\"#2-install-tools\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eThe recommended way to install development tools is using \u003ca href=\"/mise/\" class=\"wikilink\" data-title=\"mise Tool Management\" data-description=\"mise - the universal version manager for development tools\" data-date=\"2026-02-07\"\u003emise Tool Management\u003c/a\u003e:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Install mise\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl https://mise.run \u003cspan class=\"p\"\u003e|\u003c/span\u003e sh\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Activate mise in your shell\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;eval \u0026#34;$(~/.local/bin/mise activate zsh)\u0026#34;\u0026#39;\u003c/span\u003e \u0026gt;\u0026gt; ~/.zshrc\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Install all tools from the config\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise install\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"3-symlink-configurations\"\u003e3. Symlink Configurations \u003ca href=\"#3-symlink-configurations\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eUse \u003ca href=\"https://www.gnu.org/software/stow/\"\u003estow\u003c/a\u003e or manual symlinks to install\nconfigs:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Using stow (if available)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003estow zsh starship tmux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Or manually\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eln -sf ~/devtainer/zsh/.zshrc ~/.zshrc\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eln -sf ~/devtainer/tmux/.tmux.conf ~/.tmux.conf\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"recommended-order\"\u003eRecommended Order \u003ca href=\"#recommended-order\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eShell\u003c/strong\u003e - Start with zsh for a better shell experience\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTerminal\u003c/strong\u003e - Install kitty or wezterm\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eEditor\u003c/strong\u003e - Set up neovim with your preferred config\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMultiplexer\u003c/strong\u003e - Add tmux for session management\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWindow Manager\u003c/strong\u003e - Hyprland (Wayland) or Awesome (X11)\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"tool-specific-setup\"\u003eTool-Specific Setup \u003ca href=\"#tool-specific-setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eEach tool has its own setup page:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e[[zsh#setup|zsh Setup]]\u003c/li\u003e\n\u003cli\u003e[[tmux#setup|tmux Setup]]\u003c/li\u003e\n\u003cli\u003e[[neovim#setup|neovim Setup]]\u003c/li\u003e\n\u003cli\u003e[[hyprland#setup|hyprland Setup]]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"troubleshooting\"\u003eTroubleshooting \u003ca href=\"#troubleshooting\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"config-not-loading\"\u003eConfig not loading \u003ca href=\"#config-not-loading\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eEnsure symlinks are correct:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003els -la ~ \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep zshrc\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"tool-not-found\"\u003eTool not found \u003ca href=\"#tool-not-found\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eCheck that mise is activated and tools are installed:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise list\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewhich zsh\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"permission-issues\"\u003ePermission issues \u003ca href=\"#permission-issues\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eSome scripts may need executable permissions:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echmod +x ~/devtainer/scripts/*\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"next-steps\"\u003eNext Steps \u003ca href=\"#next-steps\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eOnce you have the basics set up, explore the individual tool documentation to\nlearn about features and customization options.\u003c/p\u003e\n",
      "content_text": "\nThis guide will help you set up these dotfiles on your own machine.\n\n## Prerequisites\n\nYou'll need the following installed:\n\n- Git\n- A terminal emulator (kitty, wezterm, or alacritty recommended)\n- zsh shell\n- curl or wget\n\n## Quick Setup\n\n### 1. Clone the Repository\n\n```bash\ngit clone https://github.com/waylonwalker/devtainer.git ~/devtainer\ncd ~/devtainer\n```\n\n### 2. Install Tools\n\nThe recommended way to install development tools is using \u003ca href=\"/mise/\" class=\"wikilink\" data-title=\"mise Tool Management\" data-description=\"mise - the universal version manager for development tools\" data-date=\"2026-02-07\"\u003emise Tool Management\u003c/a\u003e:\n\n```bash\n# Install mise\ncurl https://mise.run | sh\n\n# Activate mise in your shell\necho 'eval \"$(~/.local/bin/mise activate zsh)\"' \u003e\u003e ~/.zshrc\n\n# Install all tools from the config\nmise install\n```\n\n### 3. Symlink Configurations\n\nUse [stow](https://www.gnu.org/software/stow/) or manual symlinks to install\nconfigs:\n\n```bash\n# Using stow (if available)\nstow zsh starship tmux\n\n# Or manually\nln -sf ~/devtainer/zsh/.zshrc ~/.zshrc\nln -sf ~/devtainer/tmux/.tmux.conf ~/.tmux.conf\n```\n\n## Recommended Order\n\n1. **Shell** - Start with zsh for a better shell experience\n2. **Terminal** - Install kitty or wezterm\n3. **Editor** - Set up neovim with your preferred config\n4. **Multiplexer** - Add tmux for session management\n5. **Window Manager** - Hyprland (Wayland) or Awesome (X11)\n\n## Tool-Specific Setup\n\nEach tool has its own setup page:\n\n- [[zsh#setup|zsh Setup]]\n- [[tmux#setup|tmux Setup]]\n- [[neovim#setup|neovim Setup]]\n- [[hyprland#setup|hyprland Setup]]\n\n## Troubleshooting\n\n### Config not loading\n\nEnsure symlinks are correct:\n\n```bash\nls -la ~ | grep zshrc\n```\n\n### Tool not found\n\nCheck that mise is activated and tools are installed:\n\n```bash\nmise list\nwhich zsh\n```\n\n### Permission issues\n\nSome scripts may need executable permissions:\n\n```bash\nchmod +x ~/devtainer/scripts/*\n```\n\n## Next Steps\n\nOnce you have the basics set up, explore the individual tool documentation to\nlearn about features and customization options.\n",
      "summary": "Getting started with these dotfiles - installation and setup guide",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/fzf/",
      "url": "https://dots.waylonwalker.com/fzf/",
      "title": "fzf",
      "content_html": "\u003cp\u003efzf is a general-purpose command-line fuzzy finder that integrates with shells and tools for fast file and command searching.\u003c/p\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFuzzy matching\u003c/strong\u003e - Find items with approximate search\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFast\u003c/strong\u003e - Written in Go, handles large lists\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFlexible\u003c/strong\u003e - Works with any list of text\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePreview\u003c/strong\u003e - Show previews of files and results\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eScriptable\u003c/strong\u003e - Easy to integrate in scripts\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstall via package manager:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Via mise (recommended)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise install fzf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Ubuntu/Debian\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install fzf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Arch Linux\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S fzf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# macOS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebrew install fzf\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"shell-integration\"\u003eShell Integration \u003ca href=\"#shell-integration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAdd to \u003ccode\u003e~/.zshrc\u003c/code\u003e:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003esource\u003c/span\u003e \u0026lt;\u003cspan class=\"o\"\u003e(\u003c/span\u003efzf --zsh\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eFor bash:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eeval\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003efzf --bash\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"key-bindings\"\u003eKey Bindings \u003ca href=\"#key-bindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"shell-integration-1\"\u003eShell Integration \u003ca href=\"#shell-integration-1\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+T\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFind files and insert path\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+R\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSearch command history\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+C\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFind directories and cd\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eTab\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eComplete paths with fzf\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"fzf-interface\"\u003efzf Interface \u003ca href=\"#fzf-interface\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+J/K\u003c/code\u003e or \u003ccode\u003eCtrl+N/P\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNavigate up/down\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+H/L\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMove cursor left/right in query\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEnter\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSelect item\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEsc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCancel\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+U\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eClear query\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eTab\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMulti-select\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eShift+Tab\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDeselect\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e?\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eToggle preview\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"usage-examples\"\u003eUsage Examples \u003ca href=\"#usage-examples\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"basic-usage\"\u003eBasic Usage \u003ca href=\"#basic-usage\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Find files\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecat file_list.txt \u003cspan class=\"p\"\u003e|\u003c/span\u003e fzf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Find processes\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eps aux \u003cspan class=\"p\"\u003e|\u003c/span\u003e fzf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Find git branches\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit branch \u003cspan class=\"p\"\u003e|\u003c/span\u003e fzf\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"with-preview\"\u003eWith Preview \u003ca href=\"#with-preview\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Preview files\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efzf --preview \u003cspan class=\"s1\"\u003e\u0026#39;cat {}\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Preview with bat\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efzf --preview \u003cspan class=\"s1\"\u003e\u0026#39;bat --style=numbers --color=always {}\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Preview directories\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etree -C \u003cspan class=\"o\"\u003e{}\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e head -200\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"integration-examples\"\u003eIntegration Examples \u003ca href=\"#integration-examples\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Edit file with neovim\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003envim \u003cspan class=\"k\"\u003e$(\u003c/span\u003efzf\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Kill process\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ekill\u003c/span\u003e -9 \u003cspan class=\"k\"\u003e$(\u003c/span\u003eps aux \u003cspan class=\"p\"\u003e|\u003c/span\u003e fzf \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{print $2}\u0026#39;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Checkout git branch\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout \u003cspan class=\"k\"\u003e$(\u003c/span\u003egit branch \u003cspan class=\"p\"\u003e|\u003c/span\u003e fzf \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed \u003cspan class=\"s1\"\u003e\u0026#39;s/* //\u0026#39;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# cd into directory\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e \u003cspan class=\"k\"\u003e$(\u003c/span\u003efind . -type d \u003cspan class=\"p\"\u003e|\u003c/span\u003e fzf\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"environment-variables\"\u003eEnvironment Variables \u003ca href=\"#environment-variables\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Default options\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eFZF_DEFAULT_OPTS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;--height 40% --layout=reverse --border\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Default command\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eFZF_DEFAULT_COMMAND\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;fd --type f --hidden --follow --exclude .git\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Ctrl+T command\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eFZF_CTRL_T_COMMAND\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$FZF_DEFAULT_COMMAND\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Alt+C command\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eFZF_ALT_C_COMMAND\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;fd --type d --hidden --follow --exclude .git\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ezsh Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/neovim/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNeovim Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNeovim configuration with lazy.nvim for plugin management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/junegunn/fzf\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://repository-images.githubusercontent.com/13807606/b261cfc9-ec9c-4842-a7dd-366e6674cb50\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - junegunn/fzf: :cherry_blossom: A command-line fuzzy finder\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e:cherry_blossom: A command-line fuzzy finder. Contribute to junegunn/fzf development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nfzf is a general-purpose command-line fuzzy finder that integrates with shells and tools for fast file and command searching.\n\n## Features\n\n- **Fuzzy matching** - Find items with approximate search\n- **Fast** - Written in Go, handles large lists\n- **Flexible** - Works with any list of text\n- **Preview** - Show previews of files and results\n- **Scriptable** - Easy to integrate in scripts\n\n## Setup\n\nInstall via package manager:\n\n```bash\n# Via mise (recommended)\nmise install fzf\n\n# Ubuntu/Debian\nsudo apt install fzf\n\n# Arch Linux\nsudo pacman -S fzf\n\n# macOS\nbrew install fzf\n```\n\n## Shell Integration\n\nAdd to `~/.zshrc`:\n\n```bash\nsource \u003c(fzf --zsh)\n```\n\nFor bash:\n\n```bash\neval \"$(fzf --bash)\"\n```\n\n## Key Bindings\n\n### Shell Integration\n\n| Key | Action |\n|-----|--------|\n| `Ctrl+T` | Find files and insert path |\n| `Ctrl+R` | Search command history |\n| `Alt+C` | Find directories and cd |\n| `Tab` | Complete paths with fzf |\n\n### fzf Interface\n\n| Key | Action |\n|-----|--------|\n| `Ctrl+J/K` or `Ctrl+N/P` | Navigate up/down |\n| `Ctrl+H/L` | Move cursor left/right in query |\n| `Enter` | Select item |\n| `Esc` | Cancel |\n| `Ctrl+U` | Clear query |\n| `Tab` | Multi-select |\n| `Shift+Tab` | Deselect |\n| `?` | Toggle preview |\n\n## Usage Examples\n\n### Basic Usage\n\n```bash\n# Find files\ncat file_list.txt | fzf\n\n# Find processes\nps aux | fzf\n\n# Find git branches\ngit branch | fzf\n```\n\n### With Preview\n\n```bash\n# Preview files\nfzf --preview 'cat {}'\n\n# Preview with bat\nfzf --preview 'bat --style=numbers --color=always {}'\n\n# Preview directories\ntree -C {} | head -200\n```\n\n### Integration Examples\n\n```bash\n# Edit file with neovim\nnvim $(fzf)\n\n# Kill process\nkill -9 $(ps aux | fzf | awk '{print $2}')\n\n# Checkout git branch\ngit checkout $(git branch | fzf | sed 's/* //')\n\n# cd into directory\ncd $(find . -type d | fzf)\n```\n\n## Environment Variables\n\n```bash\n# Default options\nexport FZF_DEFAULT_OPTS=\"--height 40% --layout=reverse --border\"\n\n# Default command\nexport FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'\n\n# Ctrl+T command\nexport FZF_CTRL_T_COMMAND=\"$FZF_DEFAULT_COMMAND\"\n\n# Alt+C command\nexport FZF_ALT_C_COMMAND='fd --type d --hidden --follow --exclude .git'\n```\n\n## See Also\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ezsh Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/neovim/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eNeovim Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eNeovim configuration with lazy.nvim for plugin management\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/junegunn/fzf\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://repository-images.githubusercontent.com/13807606/b261cfc9-ec9c-4842-a7dd-366e6674cb50\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - junegunn/fzf: :cherry_blossom: A command-line fuzzy finder\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003e:cherry_blossom: A command-line fuzzy finder. Contribute to junegunn/fzf development by creating an account on GitHub.\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "fzf - a command-line fuzzy finder",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/delta/",
      "url": "https://dots.waylonwalker.com/delta/",
      "title": "Delta",
      "content_html": "\u003cp\u003eDelta is a syntax-highlighting pager for git and diff output that makes code reviews more pleasant.\u003c/p\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSyntax highlighting\u003c/strong\u003e - Language-aware highlighting of diffs\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSide-by-side view\u003c/strong\u003e - Compare old and new versions\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGit integration\u003c/strong\u003e - Works as git pager\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCustomizable\u003c/strong\u003e - Themes, colors, and layout options\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFast\u003c/strong\u003e - Written in Rust\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstall via package manager:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Via mise (recommended)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise install delta\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Ubuntu/Debian\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Download .deb from GitHub releases\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Arch Linux\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S git-delta\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# macOS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebrew install git-delta\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"git-integration\"\u003eGit Integration \u003ca href=\"#git-integration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAdd to \u003ccode\u003e~/.gitconfig\u003c/code\u003e:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003ecore\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003epager\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e delta\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003einteractive\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003ediffFilter\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e delta --color-only\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003edelta\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003efeatures\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e side-by-side line-numbers decorations\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    syntax-theme \u003cspan class=\"o\"\u003e=\u003c/span\u003e Dracula\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    plus-style \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;syntax #003800\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    minus-style \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;syntax #3f0001\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003edelta \u003cspan class=\"s2\"\u003e\u0026#34;decorations\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    commit-decoration-style \u003cspan class=\"o\"\u003e=\u003c/span\u003e bold yellow box ul\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    file-style \u003cspan class=\"o\"\u003e=\u003c/span\u003e bold yellow ul\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    file-decoration-style \u003cspan class=\"o\"\u003e=\u003c/span\u003e none\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    hunk-header-decoration-style \u003cspan class=\"o\"\u003e=\u003c/span\u003e cyan box ul\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003edelta \u003cspan class=\"s2\"\u003e\u0026#34;line-numbers\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    line-numbers-left-style \u003cspan class=\"o\"\u003e=\u003c/span\u003e cyan\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    line-numbers-right-style \u003cspan class=\"o\"\u003e=\u003c/span\u003e cyan\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    line-numbers-minus-style \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e124\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    line-numbers-plus-style \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e28\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"usage\"\u003eUsage \u003ca href=\"#usage\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eOnce configured, Delta works automatically:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Any git diff command\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit diff\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit show\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit log -p\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit stash show -p\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"standalone\"\u003eStandalone \u003ca href=\"#standalone\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eUse Delta with any diff:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ediff -u file1 file2 \u003cspan class=\"p\"\u003e|\u003c/span\u003e delta\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"key-bindings-in-less\"\u003eKey Bindings (in less) \u003ca href=\"#key-bindings-in-less\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSince Delta uses less as the pager:\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eq\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eQuit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSpace\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePage down\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eb\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePage up\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e/\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSearch\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003en/N\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNext/previous match\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eg\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo to top\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eG\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGo to bottom\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"themes\"\u003eThemes \u003ca href=\"#themes\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eDelta supports bat themes:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# List available themes\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edelta --list-themes\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Use specific theme\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edelta --syntax-theme\u003cspan class=\"o\"\u003e=\u003c/span\u003eOneHalfDark\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"features-options\"\u003eFeatures Options \u003ca href=\"#features-options\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Side-by-side vs unified\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edelta --side-by-side\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edelta --no-side-by-side\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Show/hide line numbers\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edelta --line-numbers\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edelta --no-line-numbers\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Navigate with n/N\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edelta --navigate\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/git/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGit Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGit configuration with aliases, delta for diffs, and work/personal separation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/lazygit/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLazygit\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLazygit - a simple terminal UI for git commands\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/dandavison/delta\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/06ca61f976050db0d8f65c6c003945e879c93aad4d3cf1f1f691a45ab4e4a3c1/dandavison/delta\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - dandavison/delta: A syntax-highlighting pager for git, diff, grep, and blame output\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA syntax-highlighting pager for git, diff, grep, and blame output - dandavison/delta\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nDelta is a syntax-highlighting pager for git and diff output that makes code reviews more pleasant.\n\n## Features\n\n- **Syntax highlighting** - Language-aware highlighting of diffs\n- **Side-by-side view** - Compare old and new versions\n- **Git integration** - Works as git pager\n- **Customizable** - Themes, colors, and layout options\n- **Fast** - Written in Rust\n\n## Setup\n\nInstall via package manager:\n\n```bash\n# Via mise (recommended)\nmise install delta\n\n# Ubuntu/Debian\n# Download .deb from GitHub releases\n\n# Arch Linux\nsudo pacman -S git-delta\n\n# macOS\nbrew install git-delta\n```\n\n## Git Integration\n\nAdd to `~/.gitconfig`:\n\n```bash\n[core]\n    pager = delta\n\n[interactive]\n    diffFilter = delta --color-only\n\n[delta]\n    features = side-by-side line-numbers decorations\n    syntax-theme = Dracula\n    plus-style = \"syntax #003800\"\n    minus-style = \"syntax #3f0001\"\n\n[delta \"decorations\"]\n    commit-decoration-style = bold yellow box ul\n    file-style = bold yellow ul\n    file-decoration-style = none\n    hunk-header-decoration-style = cyan box ul\n\n[delta \"line-numbers\"]\n    line-numbers-left-style = cyan\n    line-numbers-right-style = cyan\n    line-numbers-minus-style = 124\n    line-numbers-plus-style = 28\n```\n\n## Usage\n\nOnce configured, Delta works automatically:\n\n```bash\n# Any git diff command\ngit diff\ngit show\ngit log -p\ngit stash show -p\n```\n\n### Standalone\n\nUse Delta with any diff:\n\n```bash\ndiff -u file1 file2 | delta\n```\n\n## Key Bindings (in less)\n\nSince Delta uses less as the pager:\n\n| Key | Action |\n|-----|--------|\n| `q` | Quit |\n| `Space` | Page down |\n| `b` | Page up |\n| `/` | Search |\n| `n/N` | Next/previous match |\n| `g` | Go to top |\n| `G` | Go to bottom |\n\n## Themes\n\nDelta supports bat themes:\n\n```bash\n# List available themes\ndelta --list-themes\n\n# Use specific theme\ndelta --syntax-theme=OneHalfDark\n```\n\n## Features Options\n\n```bash\n# Side-by-side vs unified\ndelta --side-by-side\ndelta --no-side-by-side\n\n# Show/hide line numbers\ndelta --line-numbers\ndelta --no-line-numbers\n\n# Navigate with n/N\ndelta --navigate\n```\n\n## See Also\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/git/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGit Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eGit configuration with aliases, delta for diffs, and work/personal separation\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/lazygit/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eLazygit\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eLazygit - a simple terminal UI for git commands\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://github.com/dandavison/delta\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-image\"\u003e\n      \u003cimg src=\"https://opengraph.githubassets.com/06ca61f976050db0d8f65c6c003945e879c93aad4d3cf1f1f691a45ab4e4a3c1/dandavison/delta\" alt=\"\" loading=\"lazy\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eGitHub - dandavison/delta: A syntax-highlighting pager for git, diff, grep, and blame output\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eA syntax-highlighting pager for git, diff, grep, and blame output - dandavison/delta\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eGitHub \u0026middot; github.com\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Delta - syntax-highlighting pager for git and diff output",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/defaults/",
      "url": "https://dots.waylonwalker.com/defaults/",
      "title": "Defaults",
      "content_html": "\u003cp\u003eWhen I need a tool for a task, these are my default choices.\u003c/p\u003e\n\u003ch2 id=\"editor\"\u003eEditor \u003ca href=\"#editor\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eNeovim\u003c/strong\u003e - For everything text-related. See \u003ca href=\"/neovim/\" class=\"wikilink\" data-title=\"Neovim Configuration\" data-description=\"Neovim configuration with lazy.nvim for plugin management\" data-date=\"2026-02-07\"\u003eNeovim Configuration\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eFallback: \u003ca href=\"/helix/\" class=\"wikilink\" data-title=\"Helix Editor\" data-description=\"Helix - a post-modern modal text editor\" data-date=\"2026-02-07\"\u003eHelix Editor\u003c/a\u003e for quick edits when neovim config is broken.\u003c/p\u003e\n\u003ch2 id=\"terminal\"\u003eTerminal \u003ca href=\"#terminal\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ekitty\u003c/strong\u003e - Primary terminal. See \u003ca href=\"/kitty/\" class=\"wikilink\" data-title=\"kitty Terminal\" data-description=\"kitty - a fast, feature-rich, GPU-based terminal emulator\" data-date=\"2026-02-07\"\u003ekitty Terminal\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eFallback: \u003ca href=\"/wezterm/\" class=\"wikilink\" data-title=\"WezTerm\" data-description=\"WezTerm - a GPU-accelerated cross-platform terminal emulator\" data-date=\"2026-02-07\"\u003eWezTerm\u003c/a\u003e when I need better cross-platform consistency.\u003c/p\u003e\n\u003ch2 id=\"shell\"\u003eShell \u003ca href=\"#shell\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ezsh\u003c/strong\u003e - With autosuggestions, syntax highlighting, and starship prompt. See \u003ca href=\"/zsh/\" class=\"wikilink\" data-title=\"zsh Configuration\" data-description=\"zsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\" data-date=\"2026-02-07\"\u003ezsh Configuration\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"multiplexer\"\u003eMultiplexer \u003ca href=\"#multiplexer\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003etmux\u003c/strong\u003e - For persistent sessions and popup workflows. See \u003ca href=\"/tmux/\" class=\"wikilink\" data-title=\"tmux Configuration\" data-description=\"tmux configuration for persistent terminal sessions with popup windows and session management\" data-date=\"2026-02-07\"\u003etmux Configuration\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eFallback: \u003ca href=\"/zellij/\" class=\"wikilink\" data-title=\"Zellij\" data-description=\"Zellij - a terminal workspace with batteries included\" data-date=\"2026-02-07\"\u003eZellij\u003c/a\u003e when I want built-in multiplexer without external tool.\u003c/p\u003e\n\u003ch2 id=\"version-control\"\u003eVersion Control \u003ca href=\"#version-control\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003egit\u003c/strong\u003e - With delta for diffs and gitui for UI. See \u003ca href=\"/git/\" class=\"wikilink\" data-title=\"Git Configuration\" data-description=\"Git configuration with aliases, delta for diffs, and work/personal separation\" data-date=\"2026-02-07\"\u003eGit Configuration\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"tool-management\"\u003eTool Management \u003ca href=\"#tool-management\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003emise\u003c/strong\u003e - For all language runtimes and dev tools. See \u003ca href=\"/mise/\" class=\"wikilink\" data-title=\"mise Tool Management\" data-description=\"mise - the universal version manager for development tools\" data-date=\"2026-02-07\"\u003emise Tool Management\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eReplaced: pyenv, nvm, rbenv, and friends.\u003c/p\u003e\n\u003ch2 id=\"fuzzy-finder\"\u003eFuzzy Finder \u003ca href=\"#fuzzy-finder\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003efzf\u003c/strong\u003e - Integrated with shell and editor. See \u003ca href=\"/fzf/\" class=\"wikilink\" data-title=\"fzf\" data-description=\"fzf - a command-line fuzzy finder\" data-date=\"2026-02-07\"\u003efzf\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"file-manager\"\u003eFile Manager \u003ca href=\"#file-manager\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003elf\u003c/strong\u003e - Fast terminal file manager. See \u003ca href=\"/lf/\" class=\"wikilink\" data-title=\"lf\" data-description=\"lf - a terminal file manager written in Go\" data-date=\"2026-02-07\"\u003elf\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eyazi\u003c/strong\u003e - Alternative with async I/O. See \u003ca href=\"/yazi/\" class=\"wikilink\" data-title=\"Yazi\" data-description=\"Yazi - a terminal file manager\" data-date=\"2026-02-07\"\u003eYazi\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eFallback: Standard shell commands for simple operations.\u003c/p\u003e\n\u003ch2 id=\"window-manager\"\u003eWindow Manager \u003ca href=\"#window-manager\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eHyprland\u003c/strong\u003e - Wayland compositor on main machine. See \u003ca href=\"/hyprland/\" class=\"wikilink\" data-title=\"Hyprland Window Manager\" data-description=\"Hyprland - a dynamic tiling Wayland compositor\" data-date=\"2026-02-07\"\u003eHyprland Window Manager\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eFallback: \u003ca href=\"/awesome/\" class=\"wikilink\" data-title=\"Awesome Window Manager\" data-description=\"Awesome WM - a highly configurable X11 window manager\" data-date=\"2026-02-07\"\u003eAwesome Window Manager\u003c/a\u003e when I need X11.\u003c/p\u003e\n\u003ch2 id=\"browser\"\u003eBrowser \u003ca href=\"#browser\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBrave\u003c/strong\u003e - Primary browser with good privacy defaults.\u003c/p\u003e\n\u003cp\u003eFallback: Firefox for testing and sites that break on Brave.\u003c/p\u003e\n\u003ch2 id=\"search\"\u003eSearch \u003ca href=\"#search\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eripgrep (rg)\u003c/strong\u003e - For code search\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003efd\u003c/strong\u003e - For file finding\u003c/p\u003e\n\u003cp\u003eBoth integrated with \u003ca href=\"/fzf/\" class=\"wikilink\" data-title=\"fzf\" data-description=\"fzf - a command-line fuzzy finder\" data-date=\"2026-02-07\"\u003efzf\u003c/a\u003e.\u003c/p\u003e\n\u003ch2 id=\"notes\"\u003eNotes \u003ca href=\"#notes\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003ePlain markdown files in git repos.\u003c/p\u003e\n\u003cp\u003eTodo: \u003ca href=\"/tmux/\" class=\"wikilink\" data-title=\"tmux Configuration\" data-description=\"tmux configuration for persistent terminal sessions with popup windows and session management\" data-date=\"2026-02-07\"\u003etmux Configuration\u003c/a\u003e todo session with backlog/doing/done files.\u003c/p\u003e\n\u003ch2 id=\"communication\"\u003eCommunication \u003ca href=\"#communication\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eEmail\u003c/strong\u003e: Fastmail\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eChat\u003c/strong\u003e: Signal, occasionally Discord\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eVideo\u003c/strong\u003e: Jitsi, Zoom when required\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"operating-system\"\u003eOperating System \u003ca href=\"#operating-system\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eArch Linux\u003c/strong\u003e - Main development machine\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eUbuntu\u003c/strong\u003e - For servers and containers\u003c/p\u003e\n\u003ch2 id=\"why-defaults-matter\"\u003eWhy Defaults Matter \u003ca href=\"#why-defaults-matter\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eHaving defaults reduces decision fatigue. When I reach for a tool, I already know what to use. This lets me focus on the actual problem instead of evaluating options.\u003c/p\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/uses/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eUses\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHardware and software I use daily\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nWhen I need a tool for a task, these are my default choices.\n\n## Editor\n\n**Neovim** - For everything text-related. See \u003ca href=\"/neovim/\" class=\"wikilink\" data-title=\"Neovim Configuration\" data-description=\"Neovim configuration with lazy.nvim for plugin management\" data-date=\"2026-02-07\"\u003eNeovim Configuration\u003c/a\u003e\n\nFallback: \u003ca href=\"/helix/\" class=\"wikilink\" data-title=\"Helix Editor\" data-description=\"Helix - a post-modern modal text editor\" data-date=\"2026-02-07\"\u003eHelix Editor\u003c/a\u003e for quick edits when neovim config is broken.\n\n## Terminal\n\n**kitty** - Primary terminal. See \u003ca href=\"/kitty/\" class=\"wikilink\" data-title=\"kitty Terminal\" data-description=\"kitty - a fast, feature-rich, GPU-based terminal emulator\" data-date=\"2026-02-07\"\u003ekitty Terminal\u003c/a\u003e\n\nFallback: \u003ca href=\"/wezterm/\" class=\"wikilink\" data-title=\"WezTerm\" data-description=\"WezTerm - a GPU-accelerated cross-platform terminal emulator\" data-date=\"2026-02-07\"\u003eWezTerm\u003c/a\u003e when I need better cross-platform consistency.\n\n## Shell\n\n**zsh** - With autosuggestions, syntax highlighting, and starship prompt. See \u003ca href=\"/zsh/\" class=\"wikilink\" data-title=\"zsh Configuration\" data-description=\"zsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\" data-date=\"2026-02-07\"\u003ezsh Configuration\u003c/a\u003e\n\n## Multiplexer\n\n**tmux** - For persistent sessions and popup workflows. See \u003ca href=\"/tmux/\" class=\"wikilink\" data-title=\"tmux Configuration\" data-description=\"tmux configuration for persistent terminal sessions with popup windows and session management\" data-date=\"2026-02-07\"\u003etmux Configuration\u003c/a\u003e\n\nFallback: \u003ca href=\"/zellij/\" class=\"wikilink\" data-title=\"Zellij\" data-description=\"Zellij - a terminal workspace with batteries included\" data-date=\"2026-02-07\"\u003eZellij\u003c/a\u003e when I want built-in multiplexer without external tool.\n\n## Version Control\n\n**git** - With delta for diffs and gitui for UI. See \u003ca href=\"/git/\" class=\"wikilink\" data-title=\"Git Configuration\" data-description=\"Git configuration with aliases, delta for diffs, and work/personal separation\" data-date=\"2026-02-07\"\u003eGit Configuration\u003c/a\u003e\n\n## Tool Management\n\n**mise** - For all language runtimes and dev tools. See \u003ca href=\"/mise/\" class=\"wikilink\" data-title=\"mise Tool Management\" data-description=\"mise - the universal version manager for development tools\" data-date=\"2026-02-07\"\u003emise Tool Management\u003c/a\u003e\n\nReplaced: pyenv, nvm, rbenv, and friends.\n\n## Fuzzy Finder\n\n**fzf** - Integrated with shell and editor. See \u003ca href=\"/fzf/\" class=\"wikilink\" data-title=\"fzf\" data-description=\"fzf - a command-line fuzzy finder\" data-date=\"2026-02-07\"\u003efzf\u003c/a\u003e\n\n## File Manager\n\n**lf** - Fast terminal file manager. See \u003ca href=\"/lf/\" class=\"wikilink\" data-title=\"lf\" data-description=\"lf - a terminal file manager written in Go\" data-date=\"2026-02-07\"\u003elf\u003c/a\u003e\n\n**yazi** - Alternative with async I/O. See \u003ca href=\"/yazi/\" class=\"wikilink\" data-title=\"Yazi\" data-description=\"Yazi - a terminal file manager\" data-date=\"2026-02-07\"\u003eYazi\u003c/a\u003e\n\nFallback: Standard shell commands for simple operations.\n\n## Window Manager\n\n**Hyprland** - Wayland compositor on main machine. See \u003ca href=\"/hyprland/\" class=\"wikilink\" data-title=\"Hyprland Window Manager\" data-description=\"Hyprland - a dynamic tiling Wayland compositor\" data-date=\"2026-02-07\"\u003eHyprland Window Manager\u003c/a\u003e\n\nFallback: \u003ca href=\"/awesome/\" class=\"wikilink\" data-title=\"Awesome Window Manager\" data-description=\"Awesome WM - a highly configurable X11 window manager\" data-date=\"2026-02-07\"\u003eAwesome Window Manager\u003c/a\u003e when I need X11.\n\n## Browser\n\n**Brave** - Primary browser with good privacy defaults.\n\nFallback: Firefox for testing and sites that break on Brave.\n\n## Search\n\n**ripgrep (rg)** - For code search\n\n**fd** - For file finding\n\nBoth integrated with \u003ca href=\"/fzf/\" class=\"wikilink\" data-title=\"fzf\" data-description=\"fzf - a command-line fuzzy finder\" data-date=\"2026-02-07\"\u003efzf\u003c/a\u003e.\n\n## Notes\n\nPlain markdown files in git repos.\n\nTodo: \u003ca href=\"/tmux/\" class=\"wikilink\" data-title=\"tmux Configuration\" data-description=\"tmux configuration for persistent terminal sessions with popup windows and session management\" data-date=\"2026-02-07\"\u003etmux Configuration\u003c/a\u003e todo session with backlog/doing/done files.\n\n## Communication\n\n- **Email**: Fastmail\n- **Chat**: Signal, occasionally Discord\n- **Video**: Jitsi, Zoom when required\n\n## Operating System\n\n**Arch Linux** - Main development machine\n\n**Ubuntu** - For servers and containers\n\n## Why Defaults Matter\n\nHaving defaults reduces decision fatigue. When I reach for a tool, I already know what to use. This lets me focus on the actual problem instead of evaluating options.\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/uses/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eUses\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHardware and software I use daily\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "My default choices for tools and technologies",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "slash"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/colophon/",
      "url": "https://dots.waylonwalker.com/colophon/",
      "title": "Colophon",
      "content_html": "\u003cp\u003eThis site is built with modern, open-source tools. Here is what powers it.\u003c/p\u003e\n\u003ch2 id=\"site-generator\"\u003eSite Generator \u003ca href=\"#site-generator\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://markata.dev/\"\u003emarkata\u003c/a\u003e\u003c/strong\u003e - A Python-based static site generator that processes markdown files with customizable hooks and plugins.\u003c/p\u003e\n\u003ch2 id=\"hosting\"\u003eHosting \u003ca href=\"#hosting\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eStatic files served via \u003ca href=\"https://pages.cloudflare.com/\"\u003eCloudflare Pages\u003c/a\u003e or similar CDN-based hosting.\u003c/p\u003e\n\u003ch2 id=\"styling\"\u003eStyling \u003ca href=\"#styling\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eCustom CSS with a focus on readability and clean typography. No heavy frameworks - just semantic HTML and minimal styling.\u003c/p\u003e\n\u003ch2 id=\"content-format\"\u003eContent Format \u003ca href=\"#content-format\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAll content is written in Markdown with YAML frontmatter:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nn\"\u003e---\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003edate\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;2026-02-07\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003edescription\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;Page description\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003epublished\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003etitle\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;Page Title\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nn\"\u003e---\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"fonts\"\u003eFonts \u003ca href=\"#fonts\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBody: System font stack (native performance)\u003c/li\u003e\n\u003cli\u003eCode: JetBrains Mono or system monospace\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"syntax-highlighting\"\u003eSyntax Highlighting \u003ca href=\"#syntax-highlighting\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eCode blocks are syntax-highlighted at build time using Pygments or similar.\u003c/p\u003e\n\u003ch2 id=\"build-process\"\u003eBuild Process \u003ca href=\"#build-process\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003eMarkdown files are processed by markata\u003c/li\u003e\n\u003cli\u003eWikilinks are converted to internal links\u003c/li\u003e\n\u003cli\u003eStatic HTML is generated\u003c/li\u003e\n\u003cli\u003eDeployed to CDN\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"source\"\u003eSource \u003ca href=\"#source\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe content and build configuration is available in the devtainer repository:\n\u003ca href=\"https://github.com/waylonwalker/devtainer\"\u003egithub.com/waylonwalker/devtainer\u003c/a\u003e\u003c/p\u003e\n",
      "content_text": "\nThis site is built with modern, open-source tools. Here is what powers it.\n\n## Site Generator\n\n**[markata](https://markata.dev/)** - A Python-based static site generator that processes markdown files with customizable hooks and plugins.\n\n## Hosting\n\nStatic files served via [Cloudflare Pages](https://pages.cloudflare.com/) or similar CDN-based hosting.\n\n## Styling\n\nCustom CSS with a focus on readability and clean typography. No heavy frameworks - just semantic HTML and minimal styling.\n\n## Content Format\n\nAll content is written in Markdown with YAML frontmatter:\n\n```yaml\n---\ndate: '2026-02-07'\ndescription: 'Page description'\npublished: true\ntitle: 'Page Title'\n---\n```\n\n## Fonts\n\n- Body: System font stack (native performance)\n- Code: JetBrains Mono or system monospace\n\n## Syntax Highlighting\n\nCode blocks are syntax-highlighted at build time using Pygments or similar.\n\n## Build Process\n\n1. Markdown files are processed by markata\n2. Wikilinks are converted to internal links\n3. Static HTML is generated\n4. Deployed to CDN\n\n## Source\n\nThe content and build configuration is available in the devtainer repository:\n[github.com/waylonwalker/devtainer](https://github.com/waylonwalker/devtainer)\n",
      "summary": "How this site is built - colophon",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "slash"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/changelog/",
      "url": "https://dots.waylonwalker.com/changelog/",
      "title": "Changelog",
      "content_html": "\u003cp\u003eRecent changes to my dotfiles and this documentation site.\u003c/p\u003e\n\u003ch2 id=\"2026-02-07\"\u003e2026-02-07 \u003ca href=\"#2026-02-07\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"added\"\u003eAdded \u003ca href=\"#added\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCreated initial documentation site with markata\u003c/li\u003e\n\u003cli\u003eAdded pages for all major tools (zsh, tmux, neovim, mise, git, etc.)\u003c/li\u003e\n\u003cli\u003eGenerated keybinding references from actual configs\u003c/li\u003e\n\u003cli\u003eCreated llms.txt for AI context\u003c/li\u003e\n\u003cli\u003eAdded slash pages: /about, /colophon, /ai, /links, /yep, /nope, /uses, /defaults\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"changed\"\u003eChanged \u003ca href=\"#changed\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated from scattered README files to structured documentation\u003c/li\u003e\n\u003cli\u003eUpdated all internal links to use wikilink format\u003c/li\u003e\n\u003cli\u003eImproved keybinding descriptions to be benefit-focused\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"2025-01\"\u003e2025-01 \u003ca href=\"#2025-01\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"added-1\"\u003eAdded \u003ca href=\"#added-1\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIntegrated atuin for shell history sync\u003c/li\u003e\n\u003cli\u003eAdded gitui as primary git TUI\u003c/li\u003e\n\u003cli\u003eAdded lf file manager configuration (primary)\u003c/li\u003e\n\u003cli\u003eAdded yazi as alternative file manager\u003c/li\u003e\n\u003cli\u003eSwitched to mise for tool management\u003c/li\u003e\n\u003cli\u003eAdded zellij as alternative to tmux\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"changed-1\"\u003eChanged \u003ca href=\"#changed-1\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMoved from pyenv/nvm/rbenv to mise\u003c/li\u003e\n\u003cli\u003eUpdated neovim config to use lazy.nvim\u003c/li\u003e\n\u003cli\u003eRefactored zsh configuration for faster startup\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"2024-12\"\u003e2024-12 \u003ca href=\"#2024-12\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"added-2\"\u003eAdded \u003ca href=\"#added-2\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHyprland configuration for Wayland\u003c/li\u003e\n\u003cli\u003eWaybar configuration\u003c/li\u003e\n\u003cli\u003eStarship prompt configuration\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"changed-2\"\u003eChanged \u003ca href=\"#changed-2\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated from X11/Awesome WM to Wayland/Hyprland on main machine\u003c/li\u003e\n\u003cli\u003eUpdated terminal configuration for Wayland compatibility\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"2024-11\"\u003e2024-11 \u003ca href=\"#2024-11\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"added-3\"\u003eAdded \u003ca href=\"#added-3\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDelta integration for git diffs\u003c/li\u003e\n\u003cli\u003eLazygit configuration\u003c/li\u003e\n\u003cli\u003eCustom workspace management scripts\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"fixed\"\u003eFixed \u003ca href=\"#fixed\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed tmux clipboard integration for Wayland\u003c/li\u003e\n\u003cli\u003eResolved neovim LSP configuration issues\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003cp\u003eOlder changes are tracked in the repository's git history.\u003c/p\u003e\n",
      "content_text": "\nRecent changes to my dotfiles and this documentation site.\n\n## 2026-02-07\n\n### Added\n\n- Created initial documentation site with markata\n- Added pages for all major tools (zsh, tmux, neovim, mise, git, etc.)\n- Generated keybinding references from actual configs\n- Created llms.txt for AI context\n- Added slash pages: /about, /colophon, /ai, /links, /yep, /nope, /uses, /defaults\n\n### Changed\n\n- Migrated from scattered README files to structured documentation\n- Updated all internal links to use wikilink format\n- Improved keybinding descriptions to be benefit-focused\n\n## 2025-01\n\n### Added\n\n- Integrated atuin for shell history sync\n- Added gitui as primary git TUI\n- Added lf file manager configuration (primary)\n- Added yazi as alternative file manager\n- Switched to mise for tool management\n- Added zellij as alternative to tmux\n\n### Changed\n\n- Moved from pyenv/nvm/rbenv to mise\n- Updated neovim config to use lazy.nvim\n- Refactored zsh configuration for faster startup\n\n## 2024-12\n\n### Added\n\n- Hyprland configuration for Wayland\n- Waybar configuration\n- Starship prompt configuration\n\n### Changed\n\n- Migrated from X11/Awesome WM to Wayland/Hyprland on main machine\n- Updated terminal configuration for Wayland compatibility\n\n## 2024-11\n\n### Added\n\n- Delta integration for git diffs\n- Lazygit configuration\n- Custom workspace management scripts\n\n### Fixed\n\n- Fixed tmux clipboard integration for Wayland\n- Resolved neovim LSP configuration issues\n\n---\n\nOlder changes are tracked in the repository's git history.\n",
      "summary": "Recent changes to this site and my dotfiles",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "slash"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/awesome/",
      "url": "https://dots.waylonwalker.com/awesome/",
      "title": "Awesome Window Manager",
      "content_html": "\u003cp\u003eAwesome is a highly configurable, next-generation window manager for X11 written in Lua.\u003c/p\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDynamic tiling\u003c/strong\u003e - Automatic window tiling with multiple layouts\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTag-based workspaces\u003c/strong\u003e - Up to 9 virtual tags per screen\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eLua configuration\u003c/strong\u003e - Fully programmable in Lua\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eLow resource usage\u003c/strong\u003e - Minimal memory and CPU footprint\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eExtensible\u003c/strong\u003e - Widgets, menus, and themes via Lua\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstall via package manager:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Ubuntu/Debian\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install awesome\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Arch Linux\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S awesome\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Fedora\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo dnf install awesome\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"configuration\"\u003eConfiguration \u003ca href=\"#configuration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eConfig file: \u003ccode\u003e~/.config/awesome/rc.lua\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eKey sections:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eTags\u003c/strong\u003e - Virtual workspaces\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eLayouts\u003c/strong\u003e - How windows are arranged\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eKey bindings\u003c/strong\u003e - Keyboard shortcuts\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRules\u003c/strong\u003e - Window behavior by application\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWidgets\u003c/strong\u003e - Status bar elements\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"default-key-bindings\"\u003eDefault Key Bindings \u003ca href=\"#default-key-bindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAwesome uses \u003ccode\u003eMod4\u003c/code\u003e (Windows/Super key) as modifier:\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eMod4+Enter\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOpen terminal\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eMod4+r\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRun prompt\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eMod4+Shift+q\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eQuit Awesome\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eMod4+Ctrl+r\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRestart Awesome\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eMod4+j/k\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFocus next/previous window\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eMod4+Shift+j/k\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSwap with next/previous window\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eMod4+h/l\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eChange master width\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eMod4+Space\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNext layout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eMod4+Shift+Space\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePrevious layout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eMod4+1-9\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSwitch to tag\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eMod4+Shift+1-9\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMove window to tag\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"layouts\"\u003eLayouts \u003ca href=\"#layouts\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eBuilt-in layouts include:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003etile\u003c/strong\u003e - Master and stack layout\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etile.left\u003c/strong\u003e - Master on right\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etile.bottom\u003c/strong\u003e - Master on top\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etile.top\u003c/strong\u003e - Master on bottom\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003efair\u003c/strong\u003e - Equal window sizes\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003emax\u003c/strong\u003e - Fullscreen\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003emagnifier\u003c/strong\u003e - Master magnified\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003efloating\u003c/strong\u003e - Free-form windows\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"widgets\"\u003eWidgets \u003ca href=\"#widgets\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eCreate custom widgets in Lua:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e-- Clock widget\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emytextclock\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ewibox.widget\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etextclock\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e-- Battery widget\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebattery\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eawful.widget\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewatch\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;acpi -b\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"mi\"\u003e30\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ewidget\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003estdout\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"kd\"\u003elocal\u003c/span\u003e \u003cspan class=\"n\"\u003estatus\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003estdout\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003ematch\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Battery %d: (%a+), (%d+)%%\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ewidget\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003eset_text\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34; BAT: \u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e..\u003c/span\u003e \u003cspan class=\"n\"\u003estatus\u003c/span\u003e \u003cspan class=\"o\"\u003e..\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34; \u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kr\"\u003eend\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/hyprland/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHyprland Window Manager\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHyprland - a dynamic tiling Wayland compositor\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/polybar/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePolybar\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePolybar - a fast and easy-to-use status bar for X11\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://awesomewm.org/doc/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ehome\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe awesomewm.org website\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eawesome window manager \u0026middot; awesomewm.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nAwesome is a highly configurable, next-generation window manager for X11 written in Lua.\n\n## Features\n\n- **Dynamic tiling** - Automatic window tiling with multiple layouts\n- **Tag-based workspaces** - Up to 9 virtual tags per screen\n- **Lua configuration** - Fully programmable in Lua\n- **Low resource usage** - Minimal memory and CPU footprint\n- **Extensible** - Widgets, menus, and themes via Lua\n\n## Setup\n\nInstall via package manager:\n\n```bash\n# Ubuntu/Debian\nsudo apt install awesome\n\n# Arch Linux\nsudo pacman -S awesome\n\n# Fedora\nsudo dnf install awesome\n```\n\n## Configuration\n\nConfig file: `~/.config/awesome/rc.lua`\n\nKey sections:\n\n- **Tags** - Virtual workspaces\n- **Layouts** - How windows are arranged\n- **Key bindings** - Keyboard shortcuts\n- **Rules** - Window behavior by application\n- **Widgets** - Status bar elements\n\n## Default Key Bindings\n\nAwesome uses `Mod4` (Windows/Super key) as modifier:\n\n| Key | Action |\n|-----|--------|\n| `Mod4+Enter` | Open terminal |\n| `Mod4+r` | Run prompt |\n| `Mod4+Shift+q` | Quit Awesome |\n| `Mod4+Ctrl+r` | Restart Awesome |\n| `Mod4+j/k` | Focus next/previous window |\n| `Mod4+Shift+j/k` | Swap with next/previous window |\n| `Mod4+h/l` | Change master width |\n| `Mod4+Space` | Next layout |\n| `Mod4+Shift+Space` | Previous layout |\n| `Mod4+1-9` | Switch to tag |\n| `Mod4+Shift+1-9` | Move window to tag |\n\n## Layouts\n\nBuilt-in layouts include:\n\n- **tile** - Master and stack layout\n- **tile.left** - Master on right\n- **tile.bottom** - Master on top\n- **tile.top** - Master on bottom\n- **fair** - Equal window sizes\n- **max** - Fullscreen\n- **magnifier** - Master magnified\n- **floating** - Free-form windows\n\n## Widgets\n\nCreate custom widgets in Lua:\n\n```lua\n-- Clock widget\nmytextclock = wibox.widget.textclock()\n\n-- Battery widget\nbattery = awful.widget.watch(\n    \"acpi -b\",\n    30,\n    function(widget, stdout)\n        local status = stdout:match(\"Battery %d: (%a+), (%d+)%%\")\n        widget:set_text(\" BAT: \" .. status .. \" \")\n    end\n)\n```\n\n## See Also\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/hyprland/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eHyprland Window Manager\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eHyprland - a dynamic tiling Wayland compositor\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/polybar/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ePolybar\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ePolybar - a fast and easy-to-use status bar for X11\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://awesomewm.org/doc/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ehome\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eThe awesomewm.org website\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eawesome window manager \u0026middot; awesomewm.org\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Awesome WM - a highly configurable X11 window manager",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/atuin/",
      "url": "https://dots.waylonwalker.com/atuin/",
      "title": "Atuin",
      "content_html": "\u003cp\u003eAtuin replaces your existing shell history with a SQLite database and records additional context for better search and sync.\u003c/p\u003e\n\u003ch2 id=\"features\"\u003eFeatures \u003ca href=\"#features\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSQLite database\u003c/strong\u003e - Fast, searchable history\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eContext\u003c/strong\u003e - Records directory, exit code, duration\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSync\u003c/strong\u003e - Encrypted sync across machines\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFuzzy search\u003c/strong\u003e - Find commands easily\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStats\u003c/strong\u003e - View command usage statistics\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"setup\"\u003eSetup \u003ca href=\"#setup\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInstall via package manager:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Via mise (recommended)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emise install atuin\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Or install script\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl --proto \u003cspan class=\"s1\"\u003e\u0026#39;=https\u0026#39;\u003c/span\u003e --tlsv1.2 -sSf https://setup.atuin.sh \u003cspan class=\"p\"\u003e|\u003c/span\u003e sh\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Arch Linux\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pacman -S atuin\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# macOS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebrew install atuin\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"shell-integration\"\u003eShell Integration \u003ca href=\"#shell-integration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAdd to \u003ccode\u003e~/.zshrc\u003c/code\u003e:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eeval\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003eatuin init zsh\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eFor bash, add to \u003ccode\u003e~/.bashrc\u003c/code\u003e:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eeval\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003eatuin init bash\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"key-bindings\"\u003eKey Bindings \u003ca href=\"#key-bindings\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eKey\u003c/th\u003e\n\u003cth\u003eAction\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCtrl+R\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOpen Atuin history search\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eUp\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSearch history by prefix\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eDown\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNavigate results\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEnter\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eExecute command\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eTab\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEdit command\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eAlt+Enter\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eExecute and keep open\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"search\"\u003eSearch \u003ca href=\"#search\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAtuin provides powerful search:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Fuzzy search\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eatuin search --interactive\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Search by directory\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eatuin search --cwd /path/to/project\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Search by exit code\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eatuin search --exit \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Search by time range\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eatuin search --after \u003cspan class=\"s2\"\u003e\u0026#34;2024-01-01\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"sync\"\u003eSync \u003ca href=\"#sync\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSync history across machines:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Register account\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eatuin register -u username -e email@example.com -p password\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Login\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eatuin login -u username -p password\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Sync\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eatuin sync\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"stats\"\u003eStats \u003ca href=\"#stats\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eView command statistics:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Overall stats\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eatuin stats\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Stats for specific command\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eatuin stats --cmd git\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Daily stats\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eatuin stats -d\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"configuration\"\u003eConfiguration \u003ca href=\"#configuration\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eConfig file: \u003ccode\u003e~/.config/atuin/config.toml\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esync_address\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://api.atuin.sh\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esync_frequency\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;10m\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003esearch_mode\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;fuzzy\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003estyle\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;compact\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003einline_height\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e10\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eshow_preview\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"see-also\"\u003eSee Also \u003ca href=\"#see-also\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ezsh Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.atuin.sh/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRedirecting...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocs.atuin.sh\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nAtuin replaces your existing shell history with a SQLite database and records additional context for better search and sync.\n\n## Features\n\n- **SQLite database** - Fast, searchable history\n- **Context** - Records directory, exit code, duration\n- **Sync** - Encrypted sync across machines\n- **Fuzzy search** - Find commands easily\n- **Stats** - View command usage statistics\n\n## Setup\n\nInstall via package manager:\n\n```bash\n# Via mise (recommended)\nmise install atuin\n\n# Or install script\ncurl --proto '=https' --tlsv1.2 -sSf https://setup.atuin.sh | sh\n\n# Arch Linux\nsudo pacman -S atuin\n\n# macOS\nbrew install atuin\n```\n\n## Shell Integration\n\nAdd to `~/.zshrc`:\n\n```bash\neval \"$(atuin init zsh)\"\n```\n\nFor bash, add to `~/.bashrc`:\n\n```bash\neval \"$(atuin init bash)\"\n```\n\n## Key Bindings\n\n| Key | Action |\n|-----|--------|\n| `Ctrl+R` | Open Atuin history search |\n| `Up` | Search history by prefix |\n| `Down` | Navigate results |\n| `Enter` | Execute command |\n| `Tab` | Edit command |\n| `Alt+Enter` | Execute and keep open |\n\n## Search\n\nAtuin provides powerful search:\n\n```bash\n# Fuzzy search\natuin search --interactive\n\n# Search by directory\natuin search --cwd /path/to/project\n\n# Search by exit code\natuin search --exit 0\n\n# Search by time range\natuin search --after \"2024-01-01\"\n```\n\n## Sync\n\nSync history across machines:\n\n```bash\n# Register account\natuin register -u username -e email@example.com -p password\n\n# Login\natuin login -u username -p password\n\n# Sync\natuin sync\n```\n\n## Stats\n\nView command statistics:\n\n```bash\n# Overall stats\natuin stats\n\n# Stats for specific command\natuin stats --cmd git\n\n# Daily stats\natuin stats -d\n```\n\n## Configuration\n\nConfig file: `~/.config/atuin/config.toml`\n\nExample:\n\n```toml\nsync_address = \"https://api.atuin.sh\"\nsync_frequency = \"10m\"\nsearch_mode = \"fuzzy\"\nstyle = \"compact\"\ninline_height = 10\nshow_preview = true\n```\n\n## See Also\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/zsh/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003ezsh Configuration\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003ezsh shell configuration - my primary shell with autosuggestions, syntax highlighting, and custom functions\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003cdiv class=\"embed-card embed-card-external\"\u003e\n  \u003ca href=\"https://docs.atuin.sh/\" class=\"embed-card-link\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eRedirecting...\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003edocs.atuin.sh\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "Atuin - a magical shell history with sync",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/ai/",
      "url": "https://dots.waylonwalker.com/ai/",
      "title": "AI",
      "content_html": "\u003cp\u003eThe content on this site is primarily AI-generated, but it documents dotfiles I've spent over a decade hand-curating. I've always wanted to create this documentation site but never took the time until AI made it possible.\u003c/p\u003e\n\u003ch2 id=\"my-approach\"\u003eMy Approach \u003ca href=\"#my-approach\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAI as a multiplier, not a replacement.\u003c/strong\u003e These dotfiles represent years of careful tuning and personal preference. AI helps me document them, but the configurations themselves are the result of a decade of refinement.\u003c/p\u003e\n\u003ch2 id=\"tools-i-use\"\u003eTools I Use \u003ca href=\"#tools-i-use\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"code-assistants\"\u003eCode Assistants \u003ca href=\"#code-assistants\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eopencode\u003c/strong\u003e - AI agent in my terminal for development tasks\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGitHub Copilot\u003c/strong\u003e - Inline code suggestions in my editor\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eChatGPT\u003c/strong\u003e - For brainstorming, debugging, and research\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"writing\"\u003eWriting \u003ca href=\"#writing\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eAI assistance\u003c/strong\u003e - For generating documentation from my configs\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGrammar/spell check\u003c/strong\u003e - AI-enhanced proofreading\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"image-generation\"\u003eImage Generation \u003ca href=\"#image-generation\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOccasionally for diagrams and illustrations when needed\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"principles\"\u003ePrinciples \u003ca href=\"#principles\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eHand-curated configs\u003c/strong\u003e - The dotfiles are mine, refined over 10+ years\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAI for documentation\u003c/strong\u003e - AI helps explain and organize what I've built\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eReview all AI output\u003c/strong\u003e - I verify everything before publishing\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eUse AI for tedious tasks\u003c/strong\u003e - Documentation, formatting, and organization\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"on-this-site\"\u003eOn This Site \u003ca href=\"#on-this-site\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eMost content on this site is AI-generated:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDocumentation written from my configuration files\u003c/li\u003e\n\u003cli\u003eKeybinding references extracted from my configs\u003c/li\u003e\n\u003cli\u003eExplanations of how tools work together\u003c/li\u003e\n\u003cli\u003eOrganization and structure of the site\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eAll content is based on my actual dotfiles and reviewed by me before publishing.\u003c/p\u003e\n\u003ch2 id=\"ai-and-my-dotfiles\"\u003eAI and My Dotfiles \u003ca href=\"#ai-and-my-dotfiles\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAI now heavily helps me:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eCreate\u003c/strong\u003e documentation I never had time to write\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDebug\u003c/strong\u003e configuration issues faster\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDevelop\u003c/strong\u003e new features and improvements\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eOrganize\u003c/strong\u003e years of accumulated configuration\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWithout AI assistance, this site would not exist. The configurations themselves are the product of years of personal refinement, but the documentation that makes them accessible is AI-enabled.\u003c/p\u003e\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/defaults/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDefaults\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eMy default choices for tools and technologies\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n",
      "content_text": "\nThe content on this site is primarily AI-generated, but it documents dotfiles I've spent over a decade hand-curating. I've always wanted to create this documentation site but never took the time until AI made it possible.\n\n## My Approach\n\n**AI as a multiplier, not a replacement.** These dotfiles represent years of careful tuning and personal preference. AI helps me document them, but the configurations themselves are the result of a decade of refinement.\n\n## Tools I Use\n\n### Code Assistants\n\n- **opencode** - AI agent in my terminal for development tasks\n- **GitHub Copilot** - Inline code suggestions in my editor\n- **ChatGPT** - For brainstorming, debugging, and research\n\n### Writing\n\n- **AI assistance** - For generating documentation from my configs\n- **Grammar/spell check** - AI-enhanced proofreading\n\n### Image Generation\n\n- Occasionally for diagrams and illustrations when needed\n\n## Principles\n\n1. **Hand-curated configs** - The dotfiles are mine, refined over 10+ years\n2. **AI for documentation** - AI helps explain and organize what I've built\n3. **Review all AI output** - I verify everything before publishing\n4. **Use AI for tedious tasks** - Documentation, formatting, and organization\n\n## On This Site\n\nMost content on this site is AI-generated:\n\n- Documentation written from my configuration files\n- Keybinding references extracted from my configs\n- Explanations of how tools work together\n- Organization and structure of the site\n\nAll content is based on my actual dotfiles and reviewed by me before publishing.\n\n## AI and My Dotfiles\n\nAI now heavily helps me:\n\n- **Create** documentation I never had time to write\n- **Debug** configuration issues faster\n- **Develop** new features and improvements\n- **Organize** years of accumulated configuration\n\nWithout AI assistance, this site would not exist. The configurations themselves are the product of years of personal refinement, but the documentation that makes them accessible is AI-enabled.\n\n\u003cdiv class=\"embed-card\"\u003e\n  \u003ca href=\"/defaults/\" class=\"embed-card-link\"\u003e\n    \u003cdiv class=\"embed-card-content\"\u003e\n      \u003cdiv class=\"embed-card-title\"\u003eDefaults\u003c/div\u003e\n      \u003cdiv class=\"embed-card-description\"\u003eMy default choices for tools and technologies\u003c/div\u003e\n      \u003cdiv class=\"embed-card-meta\"\u003eFeb 7, 2026\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n",
      "summary": "How I use AI tools in my workflow",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "slash"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/about/",
      "url": "https://dots.waylonwalker.com/about/",
      "title": "About",
      "content_html": "\u003cp\u003eI am Waylon Walker, a software developer who spends way too much time optimizing my development environment. This site documents my dotfiles, tools, and workflows.\u003c/p\u003e\n\u003ch2 id=\"what-i-do\"\u003eWhat I Do \u003ca href=\"#what-i-do\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eI build software, write about my setups, and share what I learn along the way. Most of my work involves Python, Kubernetes, and cloud infrastructure, but I'm always exploring new tools and techniques.\u003c/p\u003e\n\u003ch2 id=\"this-site\"\u003eThis Site \u003ca href=\"#this-site\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThis documentation site is built with \u003ca href=\"https://markata.dev/\"\u003emarkata\u003c/a\u003e and serves as a living reference for my dotfiles. It includes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTool documentation and setup guides\u003c/li\u003e\n\u003cli\u003eKeybinding references for keyboard-driven workflows\u003c/li\u003e\n\u003cli\u003eConfiguration examples and explanations\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"connect\"\u003eConnect \u003ca href=\"#connect\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eGitHub: \u003ca href=\"https://github.com/waylonwalker\"\u003e@waylonwalker\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWebsite: \u003ca href=\"https://waylonwalker.com\"\u003ewaylonwalker.com\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRepository: \u003ca href=\"https://github.com/waylonwalker/devtainer\"\u003egithub.com/waylonwalker/devtainer\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"colophon\"\u003eColophon \u003ca href=\"#colophon\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"/colophon/\" class=\"wikilink\" data-title=\"Colophon\" data-description=\"How this site is built - colophon\" data-date=\"2026-02-07\"\u003eColophon\u003c/a\u003e for details about how this site is built.\u003c/p\u003e\n",
      "content_text": "\nI am Waylon Walker, a software developer who spends way too much time optimizing my development environment. This site documents my dotfiles, tools, and workflows.\n\n## What I Do\n\nI build software, write about my setups, and share what I learn along the way. Most of my work involves Python, Kubernetes, and cloud infrastructure, but I'm always exploring new tools and techniques.\n\n## This Site\n\nThis documentation site is built with [markata](https://markata.dev/) and serves as a living reference for my dotfiles. It includes:\n\n- Tool documentation and setup guides\n- Keybinding references for keyboard-driven workflows\n- Configuration examples and explanations\n\n## Connect\n\n- GitHub: [@waylonwalker](https://github.com/waylonwalker)\n- Website: [waylonwalker.com](https://waylonwalker.com)\n- Repository: [github.com/waylonwalker/devtainer](https://github.com/waylonwalker/devtainer)\n\n## Colophon\n\nSee \u003ca href=\"/colophon/\" class=\"wikilink\" data-title=\"Colophon\" data-description=\"How this site is built - colophon\" data-date=\"2026-02-07\"\u003eColophon\u003c/a\u003e for details about how this site is built.\n",
      "summary": "About Waylon Walker and this site",
      "date_published": "2026-02-07T00:00:00Z",
      "date_modified": "2026-02-07T00:00:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ],
      "tags": [
        "slash"
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/authors/waylon/",
      "url": "https://dots.waylonwalker.com/authors/waylon/",
      "title": "Waylon Walker",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/authors/",
      "url": "https://dots.waylonwalker.com/authors/",
      "title": "Authors",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/atuin/",
      "url": "https://dots.waylonwalker.com/tags/atuin/",
      "title": "Posts tagged: atuin",
      "summary": "All posts with the tag \"atuin\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/awesome/",
      "url": "https://dots.waylonwalker.com/tags/awesome/",
      "title": "Posts tagged: awesome",
      "summary": "All posts with the tag \"awesome\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/client/",
      "url": "https://dots.waylonwalker.com/tags/client/",
      "title": "Posts tagged: client",
      "summary": "All posts with the tag \"client\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/complete/",
      "url": "https://dots.waylonwalker.com/tags/complete/",
      "title": "Posts tagged: complete",
      "summary": "All posts with the tag \"complete\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/demo/",
      "url": "https://dots.waylonwalker.com/tags/demo/",
      "title": "Posts tagged: demo",
      "summary": "All posts with the tag \"demo\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/docker/",
      "url": "https://dots.waylonwalker.com/tags/docker/",
      "title": "Posts tagged: docker",
      "summary": "All posts with the tag \"docker\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/editing/",
      "url": "https://dots.waylonwalker.com/tags/editing/",
      "title": "Posts tagged: editing",
      "summary": "All posts with the tag \"editing\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/files/",
      "url": "https://dots.waylonwalker.com/tags/files/",
      "title": "Posts tagged: files",
      "summary": "All posts with the tag \"files\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/fzf/",
      "url": "https://dots.waylonwalker.com/tags/fzf/",
      "title": "Posts tagged: fzf",
      "summary": "All posts with the tag \"fzf\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/git/",
      "url": "https://dots.waylonwalker.com/tags/git/",
      "title": "Posts tagged: git",
      "summary": "All posts with the tag \"git\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/gitui/",
      "url": "https://dots.waylonwalker.com/tags/gitui/",
      "title": "Posts tagged: gitui",
      "summary": "All posts with the tag \"gitui\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/keybindings/",
      "url": "https://dots.waylonwalker.com/tags/keybindings/",
      "title": "Posts tagged: keybindings",
      "summary": "All posts with the tag \"keybindings\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/layout/",
      "url": "https://dots.waylonwalker.com/tags/layout/",
      "title": "Posts tagged: layout",
      "summary": "All posts with the tag \"layout\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/lazydocker/",
      "url": "https://dots.waylonwalker.com/tags/lazydocker/",
      "title": "Posts tagged: lazydocker",
      "summary": "All posts with the tag \"lazydocker\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/lazygit/",
      "url": "https://dots.waylonwalker.com/tags/lazygit/",
      "title": "Posts tagged: lazygit",
      "summary": "All posts with the tag \"lazygit\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/lf/",
      "url": "https://dots.waylonwalker.com/tags/lf/",
      "title": "Posts tagged: lf",
      "summary": "All posts with the tag \"lf\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/lsp/",
      "url": "https://dots.waylonwalker.com/tags/lsp/",
      "title": "Posts tagged: lsp",
      "summary": "All posts with the tag \"lsp\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/media/",
      "url": "https://dots.waylonwalker.com/tags/media/",
      "title": "Posts tagged: media",
      "summary": "All posts with the tag \"media\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/navigation/",
      "url": "https://dots.waylonwalker.com/tags/navigation/",
      "title": "Posts tagged: navigation",
      "summary": "All posts with the tag \"navigation\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/neovim/",
      "url": "https://dots.waylonwalker.com/tags/neovim/",
      "title": "Posts tagged: neovim",
      "summary": "All posts with the tag \"neovim\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/other/",
      "url": "https://dots.waylonwalker.com/tags/other/",
      "title": "Posts tagged: other",
      "summary": "All posts with the tag \"other\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/reference/",
      "url": "https://dots.waylonwalker.com/tags/reference/",
      "title": "Posts tagged: reference",
      "summary": "All posts with the tag \"reference\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/search/",
      "url": "https://dots.waylonwalker.com/tags/search/",
      "title": "Posts tagged: search",
      "summary": "All posts with the tag \"search\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/slash/",
      "url": "https://dots.waylonwalker.com/tags/slash/",
      "title": "Posts tagged: slash",
      "summary": "All posts with the tag \"slash\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/tag/",
      "url": "https://dots.waylonwalker.com/tags/tag/",
      "title": "Posts tagged: tag",
      "summary": "All posts with the tag \"tag\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/telescope/",
      "url": "https://dots.waylonwalker.com/tags/telescope/",
      "title": "Posts tagged: telescope",
      "summary": "All posts with the tag \"telescope\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/terminal/",
      "url": "https://dots.waylonwalker.com/tags/terminal/",
      "title": "Posts tagged: terminal",
      "summary": "All posts with the tag \"terminal\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/tmux/",
      "url": "https://dots.waylonwalker.com/tags/tmux/",
      "title": "Posts tagged: tmux",
      "summary": "All posts with the tag \"tmux\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/vhs/",
      "url": "https://dots.waylonwalker.com/tags/vhs/",
      "title": "Posts tagged: vhs",
      "summary": "All posts with the tag \"vhs\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    },
    {
      "id": "https://dots.waylonwalker.com/tags/window-management/",
      "url": "https://dots.waylonwalker.com/tags/window-management/",
      "title": "Posts tagged: window-management",
      "summary": "All posts with the tag \"window-management\"",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/waylon.svg"
        }
      ]
    }
  ]
}