<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>nux</title><link>https://drew-daniels.github.io/nux/</link><description>Recent content on nux</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://drew-daniels.github.io/nux/index.xml" rel="self" type="application/rss+xml"/><item><title>Global config</title><link>https://drew-daniels.github.io/nux/docs/configuration/global-config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/configuration/global-config/</guid><description>&lt;p&gt;The global config file controls defaults, discovery, pickers, and session groups for all projects.&lt;/p&gt;
&lt;h2 id="location"&gt;Location&lt;a class="anchor" href="#location"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;nux follows the &lt;a href="https://specifications.freedesktop.org/basedir-spec/latest/"&gt;XDG Base Directory Specification&lt;/a&gt;. The config file is located at:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$XDG_CONFIG_HOME/nux/config.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On most systems this resolves to &lt;code&gt;~/.config/nux/config.yaml&lt;/code&gt;. If &lt;code&gt;$XDG_CONFIG_HOME&lt;/code&gt; is set to a custom path, nux uses that instead.&lt;/p&gt;
&lt;p&gt;You can override the config directory at runtime with &lt;code&gt;--config-dir &amp;lt;path&amp;gt;&lt;/code&gt;. This also changes where nux looks for project configs (&lt;code&gt;&amp;lt;path&amp;gt;/projects/&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;If the config file does not exist, nux applies built-in defaults silently (no error).&lt;/p&gt;</description></item><item><title>Installation</title><link>https://drew-daniels.github.io/nux/docs/getting-started/installation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/getting-started/installation/</guid><description>&lt;p&gt;Install nux using one of the methods below. You need &lt;strong&gt;tmux 3.0 or newer&lt;/strong&gt; on your PATH before using nux.&lt;/p&gt;
&lt;h2 id="homebrew"&gt;Homebrew&lt;a class="anchor" href="#homebrew"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install Drew-Daniels/tap/nux&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To upgrade later:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew upgrade nux&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="go-install"&gt;Go install&lt;a class="anchor" href="#go-install"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Requires Go 1.26 or newer:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go install github.com/Drew-Daniels/nux@latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ensure &lt;code&gt;$(go env GOPATH)/bin&lt;/code&gt; is on your &lt;code&gt;PATH&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To upgrade, run the same command again - it always installs the latest version.&lt;/p&gt;
&lt;h2 id="nix"&gt;Nix&lt;a class="anchor" href="#nix"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Install into your profile:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nix profile install github:Drew-Daniels/nux&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Try without installing:&lt;/p&gt;</description></item><item><title>Monorepo Setup</title><link>https://drew-daniels.github.io/nux/docs/guides/monorepo-setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/guides/monorepo-setup/</guid><description>&lt;p&gt;In a monorepo you often want each tmux window to start in a different subdirectory while still belonging to one nux project. Use &lt;strong&gt;per-window &lt;code&gt;root&lt;/code&gt;&lt;/strong&gt; values: they are paths &lt;strong&gt;relative to the project &lt;code&gt;root&lt;/code&gt;&lt;/strong&gt;, so one config can place windows under &lt;code&gt;apps/frontend&lt;/code&gt;, &lt;code&gt;apps/backend&lt;/code&gt;, &lt;code&gt;packages/shared&lt;/code&gt;, and so on.&lt;/p&gt;
&lt;h2 id="example-project-acme-mono"&gt;Example: project &amp;ldquo;acme-mono&amp;rdquo;&lt;a class="anchor" href="#example-project-acme-mono"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Assume the repo on disk is &lt;code&gt;~/code/acme-mono&lt;/code&gt; with sub-apps under &lt;code&gt;apps/&lt;/code&gt; and shared code under &lt;code&gt;packages/&lt;/code&gt;. A single project config can set the session &lt;code&gt;root&lt;/code&gt; to the monorepo root and give each window its own subdirectory.&lt;/p&gt;</description></item><item><title>stop</title><link>https://drew-daniels.github.io/nux/docs/commands/stop/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/commands/stop/</guid><description>&lt;h2 id="usage"&gt;Usage&lt;a class="anchor" href="#usage"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux stop &amp;lt;session&amp;gt; [session ...]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="description"&gt;Description&lt;a class="anchor" href="#description"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Stops one or more tmux sessions by name. You can pass multiple session arguments in a single invocation.&lt;/p&gt;
&lt;p&gt;Session names accept &lt;strong&gt;glob patterns&lt;/strong&gt; (for example &lt;code&gt;web+&lt;/code&gt; matches related session names) and &lt;strong&gt;group expansion&lt;/strong&gt; with the &lt;code&gt;@&lt;/code&gt; prefix (for example &lt;code&gt;@work&lt;/code&gt; expands to every session in that group).&lt;/p&gt;
&lt;h2 id="stop-all"&gt;stop-all&lt;a class="anchor" href="#stop-all"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux stop-all&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Kills &lt;strong&gt;every&lt;/strong&gt; running tmux session. This is a blunt reset when you want no sessions left running. It is separate from &lt;code&gt;nux stop&lt;/code&gt; (which requires at least one session argument).&lt;/p&gt;</description></item><item><title>Lifecycle Hooks</title><link>https://drew-daniels.github.io/nux/docs/guides/lifecycle-hooks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/guides/lifecycle-hooks/</guid><description>&lt;p&gt;Project configs can define four hooks that run shell commands at well-defined points in the session lifecycle.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Hook&lt;/th&gt;
 &lt;th&gt;When it runs&lt;/th&gt;
 &lt;th&gt;Mechanism&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;on_start&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;After the session and first window are created, before remaining windows&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;SendKeys&lt;/code&gt; to the first pane&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;on_stop&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;When the session ends&lt;/td&gt;
 &lt;td&gt;tmux hook (&lt;code&gt;session-closed&lt;/code&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;on_ready&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Once, at the end of the full session build&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;SendKeys&lt;/code&gt; to the first pane&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;on_detach&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Each time a client detaches from the session&lt;/td&gt;
 &lt;td&gt;tmux hook (&lt;code&gt;client-detached&lt;/code&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="on_start"&gt;&lt;code&gt;on_start&lt;/code&gt;&lt;a class="anchor" href="#on_start"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Runs &lt;strong&gt;once&lt;/strong&gt; after the session and its first window are created. Commands are sent as keystrokes to the first pane of the first window. Use it for one-time setup like starting background services.&lt;/p&gt;</description></item><item><title>Project config</title><link>https://drew-daniels.github.io/nux/docs/configuration/project-config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/configuration/project-config/</guid><description>&lt;p&gt;Each project is defined in a YAML file under the nux config directory:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$XDG_CONFIG_HOME/nux/projects/&amp;lt;name&amp;gt;.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On most systems this is &lt;code&gt;~/.config/nux/projects/&amp;lt;name&amp;gt;.yaml&lt;/code&gt;. The file name (without &lt;code&gt;.yaml&lt;/code&gt;) becomes the project name on the CLI.&lt;/p&gt;
&lt;h2 id="session-name-normalization"&gt;Session name normalization&lt;a class="anchor" href="#session-name-normalization"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The tmux session name is derived from the project name with these transformations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dots (&lt;code&gt;.&lt;/code&gt;), colons (&lt;code&gt;:&lt;/code&gt;), and spaces are replaced with underscores (&lt;code&gt;_&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Leading dashes are stripped&lt;/li&gt;
&lt;li&gt;Consecutive underscores are collapsed to one&lt;/li&gt;
&lt;li&gt;Trailing underscores are stripped&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, a file named &lt;code&gt;my.cool-project.yaml&lt;/code&gt; produces the session name &lt;code&gt;my_cool-project&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Quickstart</title><link>https://drew-daniels.github.io/nux/docs/getting-started/quickstart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/getting-started/quickstart/</guid><description>&lt;p&gt;This walkthrough assumes nux is installed and tmux 3.0+ is available. See &lt;a href="https://drew-daniels.github.io/nux/docs/getting-started/installation/"&gt;Installation&lt;/a&gt; if you have not set that up yet.&lt;/p&gt;
&lt;h2 id="global-config"&gt;Global config&lt;a class="anchor" href="#global-config"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Create &lt;code&gt;~/.config/nux/config.yaml&lt;/code&gt; to configure defaults:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;project_dirs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;~/projects&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;default_shell&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/bin/zsh&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pane_init&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;eval &amp;#34;$(direnv hook zsh)&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;default_session&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;windows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;panes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;dev&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;project_dirs&lt;/code&gt; - base directory or list of directories for convention-based project discovery; a string or YAML list of strings (default: &lt;code&gt;~/projects&lt;/code&gt;). When multiple paths are set, nux scans all of them; the first entry is the base for relative &lt;code&gt;root&lt;/code&gt; in project configs.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;default_shell&lt;/code&gt; - shell used for new panes (optional, tmux default if omitted)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pane_init&lt;/code&gt; - commands run in each pane before pane-specific commands (optional)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;default_session&lt;/code&gt; - template for projects without a config file; an object with a &lt;code&gt;windows&lt;/code&gt; array (same shape as project config), for example one window with a single pane command&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you skip the global config entirely, nux uses built-in defaults (&lt;code&gt;project_dirs: ~/projects&lt;/code&gt;, &lt;code&gt;picker: fzf&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>restart</title><link>https://drew-daniels.github.io/nux/docs/commands/restart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/commands/restart/</guid><description>&lt;h2 id="usage"&gt;Usage&lt;a class="anchor" href="#usage"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux restart &amp;lt;target&amp;gt; [target ...]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="description"&gt;Description&lt;a class="anchor" href="#description"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Stops each matching session, then starts it again so changes in the project config are picked up. By default, nux attaches to the &lt;strong&gt;last&lt;/strong&gt; restarted session.&lt;/p&gt;
&lt;p&gt;Targets support &lt;strong&gt;glob patterns&lt;/strong&gt; (&lt;code&gt;+&lt;/code&gt; matches any suffix, same as &lt;code&gt;nux&lt;/code&gt; and &lt;code&gt;nux stop&lt;/code&gt;), &lt;strong&gt;&lt;code&gt;@group&lt;/code&gt;&lt;/strong&gt; expansion from the global config, and multiple space-separated names.&lt;/p&gt;
&lt;p&gt;Use the &lt;strong&gt;&lt;code&gt;:window&lt;/code&gt;&lt;/strong&gt; suffix to restart one or more windows (comma-separated) inside a session without tearing down the rest.&lt;/p&gt;</description></item><item><title>Migrating from tmuxinator</title><link>https://drew-daniels.github.io/nux/docs/getting-started/migrating-from-tmuxinator/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/getting-started/migrating-from-tmuxinator/</guid><description>&lt;p&gt;nux replaces tmuxinator-style YAML with its own schema and CLI. This page maps concepts and highlights what does not carry over one-to-one.&lt;/p&gt;
&lt;h2 id="templating-and-variables"&gt;Templating and variables&lt;a class="anchor" href="#templating-and-variables"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;tmuxinator uses ERB (&lt;code&gt;&amp;lt;%= ... %&amp;gt;&lt;/code&gt;). nux does not embed Ruby.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Custom template variables&lt;/strong&gt; use &lt;code&gt;{{var}}&lt;/code&gt; syntax.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Environment variables&lt;/strong&gt; use &lt;code&gt;${VAR}&lt;/code&gt; syntax (shell-style).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="project-root"&gt;Project root&lt;a class="anchor" href="#project-root"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In tmuxinator, &lt;code&gt;root&lt;/code&gt; is often explicit. In nux, if you omit &lt;code&gt;root&lt;/code&gt;, it defaults to &lt;code&gt;&amp;lt;first_project_dirs&amp;gt;/&amp;lt;project_name&amp;gt;&lt;/code&gt;: the first &lt;code&gt;project_dirs&lt;/code&gt; entry when global config lists multiple paths, otherwise that single path (from global config and the project name).&lt;/p&gt;</description></item><item><title>Pattern Matching</title><link>https://drew-daniels.github.io/nux/docs/guides/pattern-matching/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/guides/pattern-matching/</guid><description>&lt;p&gt;Many nux commands accept a &lt;strong&gt;project pattern&lt;/strong&gt; instead of an exact name. The special character &lt;strong&gt;&lt;code&gt;+&lt;/code&gt; means &amp;ldquo;zero or more characters&amp;rdquo;&lt;/strong&gt; and can appear anywhere in the pattern.&lt;/p&gt;
&lt;h2 id="where--can-appear"&gt;Where &lt;code&gt;+&lt;/code&gt; can appear&lt;a class="anchor" href="#where--can-appear"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Suffix:&lt;/strong&gt; &lt;code&gt;web+&lt;/code&gt; matches names starting with &lt;code&gt;web&lt;/code&gt; (e.g. &lt;code&gt;web-app&lt;/code&gt;, &lt;code&gt;web-admin&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prefix:&lt;/strong&gt; &lt;code&gt;+wiki&lt;/code&gt; matches names ending with &lt;code&gt;wiki&lt;/code&gt; (e.g. &lt;code&gt;dev-wiki&lt;/code&gt;, &lt;code&gt;team-wiki&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Infix:&lt;/strong&gt; &lt;code&gt;+api+&lt;/code&gt; matches any name containing &lt;code&gt;api&lt;/code&gt; (e.g. &lt;code&gt;my-api-server&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multiple:&lt;/strong&gt; &lt;code&gt;w+a+&lt;/code&gt; matches names starting with &lt;code&gt;w&lt;/code&gt; that also contain &lt;code&gt;a&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Internally, each &lt;code&gt;+&lt;/code&gt; is translated to &lt;code&gt;.*&lt;/code&gt; and the pattern is anchored as &lt;code&gt;^...$&lt;/code&gt;, so it must match the full project name.&lt;/p&gt;</description></item><item><title>Session groups</title><link>https://drew-daniels.github.io/nux/docs/configuration/session-groups/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/configuration/session-groups/</guid><description>&lt;p&gt;Groups are named lists of project names in &lt;a href="https://drew-daniels.github.io/nux/docs/configuration/global-config/"&gt;global config&lt;/a&gt; under the &lt;code&gt;groups&lt;/code&gt; key. They let you start or stop several projects at once without typing each name.&lt;/p&gt;
&lt;h2 id="defining-groups"&gt;Defining groups&lt;a class="anchor" href="#defining-groups"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;groups&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;work&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;api&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;web&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;workers&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;personal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;blog&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;dotfiles&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Each entry is a project name - the basename of a file in &lt;code&gt;~/.config/nux/projects/&lt;/code&gt; (without &lt;code&gt;.yaml&lt;/code&gt;), or any name resolvable via &lt;code&gt;project_dirs&lt;/code&gt; or zoxide.&lt;/p&gt;
&lt;h2 id="usage"&gt;Usage&lt;a class="anchor" href="#usage"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Start every session in a group:&lt;/p&gt;</description></item><item><title>show</title><link>https://drew-daniels.github.io/nux/docs/commands/show/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/commands/show/</guid><description>&lt;h2 id="usage"&gt;Usage&lt;a class="anchor" href="#usage"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux show &amp;lt;target&amp;gt; [target ...]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="description"&gt;Description&lt;a class="anchor" href="#description"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Prints the fully resolved config for one or more projects as YAML. The output reflects the state after interpolation (&lt;code&gt;{{var}}&lt;/code&gt; substitution), environment expansion (&lt;code&gt;${VAR}&lt;/code&gt;), and root resolution - exactly what nux would use to build the session.&lt;/p&gt;
&lt;p&gt;Targets support &lt;strong&gt;glob patterns&lt;/strong&gt; (&lt;code&gt;+&lt;/code&gt;), &lt;strong&gt;&lt;code&gt;@group&lt;/code&gt;&lt;/strong&gt; expansion, and multiple space-separated names. Multiple projects are written as a &lt;strong&gt;YAML stream&lt;/strong&gt;: one document per project, separated by a &lt;code&gt;---&lt;/code&gt; line.&lt;/p&gt;</description></item><item><title>Comparison with alternatives</title><link>https://drew-daniels.github.io/nux/docs/getting-started/comparison/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/getting-started/comparison/</guid><description>&lt;p&gt;Several tools manage tmux sessions. This page compares nux with the most popular alternatives so you can decide which fits your workflow.&lt;/p&gt;
&lt;p&gt;All of these tools are good. They solve overlapping problems - starting, switching, and managing tmux sessions - and if one already works for you, there may be no reason to switch. This page focuses on where they differ.&lt;/p&gt;
&lt;h2 id="config-driven-session-managers"&gt;Config-driven session managers&lt;a class="anchor" href="#config-driven-session-managers"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;These tools build tmux sessions from declarative config files (YAML/JSON).&lt;/p&gt;</description></item><item><title>Default session</title><link>https://drew-daniels.github.io/nux/docs/configuration/default-session/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/configuration/default-session/</guid><description>&lt;p&gt;When a project has &lt;strong&gt;no&lt;/strong&gt; config file under &lt;code&gt;~/.config/nux/projects/&lt;/code&gt;, nux builds a session from &lt;code&gt;default_session&lt;/code&gt; in &lt;a href="https://drew-daniels.github.io/nux/docs/configuration/global-config/"&gt;global config&lt;/a&gt;. This is why commands like &lt;code&gt;nux blog&lt;/code&gt; can work with zero project file - the template provides the layout.&lt;/p&gt;
&lt;h2 id="no-default_session-set"&gt;No default_session set&lt;a class="anchor" href="#no-default_session-set"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If &lt;code&gt;default_session&lt;/code&gt; is omitted from global config entirely, nux still creates a session - it just gets a single empty window with no commands. This is a bare tmux session rooted at the project directory.&lt;/p&gt;</description></item><item><title>list</title><link>https://drew-daniels.github.io/nux/docs/commands/list/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/commands/list/</guid><description>&lt;h2 id="usage"&gt;Usage&lt;a class="anchor" href="#usage"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Alias:&lt;/strong&gt; &lt;code&gt;nux ls&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="description"&gt;Description&lt;a class="anchor" href="#description"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Lists all projects that have a config file under &lt;code&gt;~/.config/nux/projects/&lt;/code&gt;, along with their current status.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Column&lt;/th&gt;
 &lt;th&gt;Meaning&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;NAME&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Project name (derived from the config filename)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;STATUS&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;running&lt;/code&gt; if a tmux session is active, &lt;code&gt;-&lt;/code&gt; otherwise&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;WINDOWS&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Number of windows in the running session (blank if not running)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;UPTIME&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;How long the session has been running (blank if not running)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;CONFIG&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;project&lt;/code&gt; (all listed entries come from config files)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;ROOT&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;The &lt;code&gt;root&lt;/code&gt; value from the project config, if set&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Only projects with explicit config files appear here. Convention-based projects (discovered via &lt;code&gt;project_dirs&lt;/code&gt; or zoxide) are not included unless they also have a config file.&lt;/p&gt;</description></item><item><title>Selective Windows</title><link>https://drew-daniels.github.io/nux/docs/guides/selective-windows/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/guides/selective-windows/</guid><description>&lt;p&gt;You can target &lt;strong&gt;individual windows&lt;/strong&gt; with the &lt;code&gt;:window&lt;/code&gt; suffix on the project name, optionally with &lt;strong&gt;multiple windows&lt;/strong&gt; separated by commas. Window names match the &lt;code&gt;name&lt;/code&gt; field under &lt;code&gt;windows&lt;/code&gt; in your project config.&lt;/p&gt;
&lt;h2 id="syntax"&gt;Syntax&lt;a class="anchor" href="#syntax"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux project:window
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux project:window1,window2,...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux restart project:window
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux restart project:window1,window2,...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="starting-a-subset-root-command"&gt;Starting a subset (root command)&lt;a class="anchor" href="#starting-a-subset-root-command"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux myapp:editor
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux myapp:editor,server&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Creates the session with &lt;strong&gt;only&lt;/strong&gt; the listed windows, in &lt;strong&gt;the order you list&lt;/strong&gt; (not necessarily YAML order). Session-level options (&lt;code&gt;env&lt;/code&gt;, &lt;code&gt;on_start&lt;/code&gt;, &lt;code&gt;on_ready&lt;/code&gt;, hooks) still apply; &lt;code&gt;on_start&lt;/code&gt; and &lt;code&gt;on_ready&lt;/code&gt; run against the &lt;strong&gt;first window in your list&lt;/strong&gt; as the anchor.&lt;/p&gt;</description></item><item><title>config</title><link>https://drew-daniels.github.io/nux/docs/commands/config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/commands/config/</guid><description>&lt;h2 id="usage"&gt;Usage&lt;a class="anchor" href="#usage"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux config&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="description"&gt;Description&lt;a class="anchor" href="#description"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Opens the global nux config in &lt;code&gt;$EDITOR&lt;/code&gt;. If the config file does not exist yet, a scaffold with commented examples is created first.&lt;/p&gt;
&lt;p&gt;The generated scaffold contains all available settings with sensible defaults. Optional settings are commented out with examples so you can enable them as needed.&lt;/p&gt;
&lt;h2 id="behavior"&gt;Behavior&lt;a class="anchor" href="#behavior"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;When no config exists:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The config directory and &lt;code&gt;projects/&lt;/code&gt; subdirectory are created.&lt;/li&gt;
&lt;li&gt;A scaffold &lt;code&gt;config.yaml&lt;/code&gt; is written with default values, commented examples, and a &lt;a href="https://drew-daniels.github.io/nux/docs/configuration/editor-intellisense/"&gt;schema modeline&lt;/a&gt; for editor IntelliSense.&lt;/li&gt;
&lt;li&gt;nux prints &lt;code&gt;Created &amp;lt;path&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;$EDITOR&lt;/code&gt; is set, the file is opened in your editor. Otherwise nux prints &lt;code&gt;hint: set $EDITOR to open new configs automatically&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;When a config already exists:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Environment variables</title><link>https://drew-daniels.github.io/nux/docs/configuration/environment-variables/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/configuration/environment-variables/</guid><description>&lt;p&gt;The &lt;code&gt;env&lt;/code&gt; field in a &lt;a href="https://drew-daniels.github.io/nux/docs/configuration/project-config/"&gt;project config&lt;/a&gt; sets session-scoped environment variables using &lt;code&gt;tmux set-environment&lt;/code&gt;. Every pane in that session inherits them.&lt;/p&gt;
&lt;h2 id="syntax"&gt;Syntax&lt;a class="anchor" href="#syntax"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Values are strings. You can reference existing process environment variables with &lt;code&gt;${VAR}&lt;/code&gt; and use default fallbacks with &lt;code&gt;${VAR:-default}&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;NODE_ENV&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;development&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;3000&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DATABASE_URL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;${DATABASE_URL_DEV}&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;LOG_LEVEL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;${LOG_LEVEL:-info}&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="interpolation"&gt;Interpolation&lt;a class="anchor" href="#interpolation"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Environment variable values go through the same interpolation pipeline as other config fields:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Custom variables&lt;/strong&gt; - &lt;code&gt;{{var}}&lt;/code&gt; placeholders are resolved from the &lt;code&gt;vars&lt;/code&gt; block&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Environment expansion&lt;/strong&gt; - &lt;code&gt;${VAR}&lt;/code&gt; references are expanded using Go&amp;rsquo;s &lt;code&gt;os.ExpandEnv&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This means you can combine both:&lt;/p&gt;</description></item><item><title>ps</title><link>https://drew-daniels.github.io/nux/docs/commands/ps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/commands/ps/</guid><description>&lt;h2 id="usage"&gt;Usage&lt;a class="anchor" href="#usage"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux ps&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="description"&gt;Description&lt;a class="anchor" href="#description"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Shows currently running tmux sessions in a table.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Column&lt;/th&gt;
 &lt;th&gt;Meaning&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;NAME&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Session name&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;WINDOWS&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Number of windows in the session&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;ATTACHED&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;yes&lt;/code&gt; if a client is attached, &lt;code&gt;no&lt;/code&gt; otherwise&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;UPTIME&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;How long the session has been running (e.g. &lt;code&gt;5m&lt;/code&gt;, &lt;code&gt;1h 32m&lt;/code&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;If no sessions are running, nux prints &lt;code&gt;No running sessions.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This command shows all tmux sessions, not just those started by nux.&lt;/p&gt;
&lt;h2 id="example-output"&gt;Example output&lt;a class="anchor" href="#example-output"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME WINDOWS ATTACHED UPTIME
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;blog 2 yes 5m
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;api 3 no 1h 32m
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docs 1 no 45m&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="notes"&gt;Notes&lt;a class="anchor" href="#notes"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;For the full project catalog (including projects without a running session), use &lt;a href="https://drew-daniels.github.io/nux/docs/commands/list/"&gt;&lt;code&gt;nux list&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Uptime is rounded to the nearest minute.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Zoxide Integration</title><link>https://drew-daniels.github.io/nux/docs/guides/zoxide-integration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/guides/zoxide-integration/</guid><description>&lt;p&gt;&lt;a href="https://github.com/ajeetdsouza/zoxide"&gt;zoxide&lt;/a&gt; tracks directories you visit frequently. When zoxide integration is enabled, nux can resolve a project by name even when there is no matching config file, by running &lt;code&gt;zoxide query &amp;lt;name&amp;gt;&lt;/code&gt; as a fallback.&lt;/p&gt;
&lt;h2 id="behavior"&gt;Behavior&lt;a class="anchor" href="#behavior"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you have visited a directory before, &lt;code&gt;nux my-obscure-project&lt;/code&gt; can succeed when that name resolves via zoxide - even without a config file at &lt;code&gt;~/.config/nux/projects/my-obscure-project.yaml&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;When a project resolves through zoxide, no project config is loaded. The session is built using the &lt;code&gt;default_session&lt;/code&gt; template (if configured) or as a bare session with a single window.&lt;/p&gt;</description></item><item><title>Custom variables</title><link>https://drew-daniels.github.io/nux/docs/configuration/custom-variables/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/configuration/custom-variables/</guid><description>&lt;p&gt;The &lt;code&gt;vars&lt;/code&gt; field in &lt;a href="https://drew-daniels.github.io/nux/docs/configuration/project-config/"&gt;project config&lt;/a&gt; defines named values you can reuse across the file.&lt;/p&gt;
&lt;h2 id="var-interpolation"&gt;&lt;code&gt;{{var}}&lt;/code&gt; interpolation&lt;a class="anchor" href="#var-interpolation"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Use double-brace names in any string field - &lt;code&gt;root&lt;/code&gt;, hooks, &lt;code&gt;env&lt;/code&gt; values, and window or pane fields (including pane &lt;code&gt;command&lt;/code&gt; when using the object pane form):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;myapp&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;deploy_env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;staging&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;root&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;~/projects/{{app_name}}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;APP_NAME&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;{{app_name}}&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DEPLOY_ENV&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;{{deploy_env}}&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;windows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;api&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;panes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;./bin/{{app_name}}-api&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="resolution-order"&gt;Resolution order&lt;a class="anchor" href="#resolution-order"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Interpolation happens in this order:&lt;/p&gt;</description></item><item><title>Interactive Picker</title><link>https://drew-daniels.github.io/nux/docs/guides/picker/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/guides/picker/</guid><description>&lt;p&gt;When you run &lt;strong&gt;&lt;code&gt;nux&lt;/code&gt; with no arguments&lt;/strong&gt; from a directory that is not tied to a project, nux can open an interactive fuzzy finder instead of printing help.&lt;/p&gt;
&lt;h2 id="what-the-picker-shows"&gt;What the picker shows&lt;a class="anchor" href="#what-the-picker-shows"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The picker combines three sources into a single sorted list:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Configured&lt;/strong&gt; projects (files in &lt;code&gt;~/.config/nux/projects/&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Directories&lt;/strong&gt; under each &lt;code&gt;project_dirs&lt;/code&gt; entry (top-level only, hidden directories excluded)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Running&lt;/strong&gt; tmux sessions not covered by the above&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Projects that have a config file are marked with a &lt;code&gt;*&lt;/code&gt; suffix so you can tell at a glance which entries have custom configs and which use the default session template:&lt;/p&gt;</description></item><item><title>new</title><link>https://drew-daniels.github.io/nux/docs/commands/new/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/commands/new/</guid><description>&lt;h2 id="usage"&gt;Usage&lt;a class="anchor" href="#usage"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux new &amp;lt;name&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="description"&gt;Description&lt;a class="anchor" href="#description"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Creates a new project config file at &lt;code&gt;~/.config/nux/projects/&amp;lt;name&amp;gt;.yaml&lt;/code&gt; and opens it in &lt;code&gt;$EDITOR&lt;/code&gt; if set.&lt;/p&gt;
&lt;p&gt;The generated config includes a &lt;a href="https://drew-daniels.github.io/nux/docs/configuration/editor-intellisense/"&gt;schema modeline&lt;/a&gt; for editor IntelliSense and a minimal template:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# yaml-language-server: $schema=https://raw.githubusercontent.com/Drew-Daniels/nux/main/schemas/project.schema.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;windows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;editor&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Edit this file to define your windows, panes, commands, and other project settings.&lt;/p&gt;
&lt;h2 id="behavior"&gt;Behavior&lt;a class="anchor" href="#behavior"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;If a config for &lt;code&gt;&amp;lt;name&amp;gt;&lt;/code&gt; already exists, nux exits with an error (it will not overwrite).&lt;/li&gt;
&lt;li&gt;The config file is written to disk.&lt;/li&gt;
&lt;li&gt;nux prints &lt;code&gt;Created &amp;lt;path&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;$EDITOR&lt;/code&gt; is set, nux opens the new file in your editor.&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;$EDITOR&lt;/code&gt; is not set, nux prints &lt;code&gt;hint: set $EDITOR to open new configs automatically&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="errors"&gt;Errors&lt;a class="anchor" href="#errors"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;config already exists: &amp;lt;path&amp;gt;&lt;/code&gt;&lt;/strong&gt; - a file with that name already exists. Use &lt;code&gt;nux edit &amp;lt;name&amp;gt;&lt;/code&gt; to modify it, or &lt;code&gt;nux delete &amp;lt;name&amp;gt;&lt;/code&gt; to remove it first.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Create and edit a new project config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux new blog
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Create without opening an editor (when $EDITOR is unset)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;unset&lt;/span&gt; EDITOR &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; nux new api&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="post-save-validation"&gt;Post-save validation&lt;a class="anchor" href="#post-save-validation"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When the editor closes, nux re-loads and validates the config. Errors are printed as &lt;code&gt;[error]&lt;/code&gt; and a clean config prints &lt;code&gt;Config valid.&lt;/code&gt; If the YAML is unparseable, a syntax error warning is shown instead.&lt;/p&gt;</description></item><item><title>edit</title><link>https://drew-daniels.github.io/nux/docs/commands/edit/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/commands/edit/</guid><description>&lt;h2 id="usage"&gt;Usage&lt;a class="anchor" href="#usage"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux edit &amp;lt;name&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="description"&gt;Description&lt;a class="anchor" href="#description"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Opens the project config file for &lt;code&gt;&amp;lt;name&amp;gt;&lt;/code&gt; in your &lt;code&gt;$EDITOR&lt;/code&gt;. The file is located at &lt;code&gt;~/.config/nux/projects/&amp;lt;name&amp;gt;.yaml&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This is a convenience shortcut - equivalent to running &lt;code&gt;$EDITOR ~/.config/nux/projects/&amp;lt;name&amp;gt;.yaml&lt;/code&gt; yourself.&lt;/p&gt;
&lt;h2 id="errors"&gt;Errors&lt;a class="anchor" href="#errors"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;$EDITOR is not set&lt;/code&gt;&lt;/strong&gt; - set the &lt;code&gt;EDITOR&lt;/code&gt; environment variable in your shell profile (e.g. &lt;code&gt;export EDITOR=nvim&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;config not found: &amp;lt;path&amp;gt;&lt;/code&gt;&lt;/strong&gt; - no config file exists for that project name. Use &lt;code&gt;nux new &amp;lt;name&amp;gt;&lt;/code&gt; to create one first.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Edit an existing project config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux edit blog
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Common EDITOR values&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;EDITOR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nvim &lt;span class="c1"&gt;# Neovim&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;EDITOR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;vim &lt;span class="c1"&gt;# Vim&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;EDITOR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;code &lt;span class="c1"&gt;# VS Code&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;EDITOR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nano &lt;span class="c1"&gt;# Nano&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="post-save-validation"&gt;Post-save validation&lt;a class="anchor" href="#post-save-validation"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When the editor closes, nux re-loads and validates the config. Errors are printed as &lt;code&gt;[error]&lt;/code&gt; and a clean config prints &lt;code&gt;Config valid.&lt;/code&gt; If the YAML is unparseable, a syntax error warning is shown instead.&lt;/p&gt;</description></item><item><title>Editor IntelliSense</title><link>https://drew-daniels.github.io/nux/docs/configuration/editor-intellisense/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/configuration/editor-intellisense/</guid><description>&lt;p&gt;JSON Schemas ship in the nux repository for both config types:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;schemas/global.schema.json&lt;/code&gt; - global &lt;code&gt;config.yaml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;schemas/project.schema.json&lt;/code&gt; - per-project YAML under &lt;code&gt;projects/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Point your YAML language server at these schemas to get completion, validation, and hover docs in your editor.&lt;/p&gt;
&lt;p&gt;The schemas include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Required panes&lt;/strong&gt; — windows without at least one pane are flagged inline.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Layout validation&lt;/strong&gt; — named layouts (&lt;code&gt;tiled&lt;/code&gt;, &lt;code&gt;main-vertical&lt;/code&gt;, etc.) get autocomplete, and custom tmux layout strings are also accepted.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;String-or-object shorthands&lt;/strong&gt; — &lt;code&gt;panes: [nvim]&lt;/code&gt; is recognized as valid.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;nux config&lt;/code&gt; and &lt;code&gt;nux new&lt;/code&gt; automatically include the appropriate schema modeline in generated files. For existing configs or manual setup, use one of the methods below.&lt;/p&gt;</description></item><item><title>Tool Sessions</title><link>https://drew-daniels.github.io/nux/docs/guides/tool-sessions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/guides/tool-sessions/</guid><description>&lt;p&gt;&lt;strong&gt;Tool sessions&lt;/strong&gt; are nux projects that exist mainly to launch a &lt;strong&gt;single utility&lt;/strong&gt; (database TUI, log tailer, container dashboard, and so on). They are not special-cased in nux: they are normal project configs that often define &lt;strong&gt;one window&lt;/strong&gt; and sometimes omit a meaningful repo layout.&lt;/p&gt;
&lt;h2 id="typical-shape"&gt;Typical shape&lt;a class="anchor" href="#typical-shape"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;root&lt;/code&gt;&lt;/strong&gt; can be &lt;strong&gt;omitted&lt;/strong&gt; or set to any directory (home, a log path, a repo, or &lt;code&gt;/tmp&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;For a &lt;strong&gt;single command&lt;/strong&gt; and one pane, use one window with a single &lt;code&gt;panes&lt;/code&gt; entry.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="example-configs"&gt;Example configs&lt;a class="anchor" href="#example-configs"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Database client (single TUI)&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>delete</title><link>https://drew-daniels.github.io/nux/docs/commands/delete/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/commands/delete/</guid><description>&lt;h2 id="usage"&gt;Usage&lt;a class="anchor" href="#usage"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux delete &amp;lt;name&amp;gt; [name ...]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Alias:&lt;/strong&gt; &lt;code&gt;nux del&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="description"&gt;Description&lt;a class="anchor" href="#description"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Deletes one or more project config files. By default, nux prompts for confirmation before each deletion.&lt;/p&gt;
&lt;p&gt;This only removes config files at &lt;code&gt;~/.config/nux/projects/&amp;lt;name&amp;gt;.yaml&lt;/code&gt;. It does &lt;strong&gt;not&lt;/strong&gt; delete project directories, source code, or stop any running sessions.&lt;/p&gt;
&lt;p&gt;Supports &lt;a href="https://drew-daniels.github.io/nux/docs/guides/pattern-matching/"&gt;glob patterns&lt;/a&gt; with &lt;code&gt;+&lt;/code&gt; and &lt;a href="https://drew-daniels.github.io/nux/docs/configuration/session-groups/"&gt;group expansion&lt;/a&gt; with &lt;code&gt;@&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="flags"&gt;Flags&lt;a class="anchor" href="#flags"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Flag&lt;/th&gt;
 &lt;th&gt;Meaning&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--force&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Skip confirmation prompts&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="behavior"&gt;Behavior&lt;a class="anchor" href="#behavior"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Arguments are expanded (patterns and groups resolved to individual names).&lt;/li&gt;
&lt;li&gt;For each target, nux checks that the config file exists.&lt;/li&gt;
&lt;li&gt;Unless &lt;code&gt;--force&lt;/code&gt; is set, nux prompts: &lt;code&gt;Delete config for &amp;quot;&amp;lt;name&amp;gt;&amp;quot;? [y/N]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;If confirmed, the file is deleted and nux prints &lt;code&gt;Deleted config for &amp;quot;&amp;lt;name&amp;gt;&amp;quot;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If declined, nux prints &lt;code&gt;Cancelled.&lt;/code&gt; and moves on to the next target.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="errors"&gt;Errors&lt;a class="anchor" href="#errors"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;config not found: &amp;lt;path&amp;gt;&lt;/code&gt;&lt;/strong&gt; - no config file exists for that project name.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Delete with confirmation prompt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux delete old-project
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Delete without prompting&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux delete old-project --force
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Delete multiple projects&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux delete blog api docs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Delete all projects matching a pattern&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux del web+ --force
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Delete all projects in a group&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux del @deprecated --force&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="notes"&gt;Notes&lt;a class="anchor" href="#notes"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;If a session for the deleted project is still running, it continues until stopped. Use &lt;code&gt;nux stop &amp;lt;name&amp;gt;&lt;/code&gt; first if you want to tear down the session.&lt;/li&gt;
&lt;li&gt;After deletion, the project can still start via convention (directory under any configured &lt;code&gt;project_dirs&lt;/code&gt; path) or zoxide, but without any custom config.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>reset</title><link>https://drew-daniels.github.io/nux/docs/commands/reset/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/commands/reset/</guid><description>&lt;h2 id="usage"&gt;Usage&lt;a class="anchor" href="#usage"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux reset&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="description"&gt;Description&lt;a class="anchor" href="#description"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Removes the global nux config file so you can start fresh. Use &lt;code&gt;--projects&lt;/code&gt; to also remove all project config files.&lt;/p&gt;
&lt;p&gt;Before anything is deleted, a summary of what will be removed and what will be kept is printed.&lt;/p&gt;
&lt;h2 id="flags"&gt;Flags&lt;a class="anchor" href="#flags"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Flag&lt;/th&gt;
 &lt;th&gt;Meaning&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--force&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Skip the confirmation prompt&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--projects&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Also remove all project configs&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="behavior"&gt;Behavior&lt;a class="anchor" href="#behavior"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;nux checks that &lt;code&gt;config.yaml&lt;/code&gt; exists in the config directory.&lt;/li&gt;
&lt;li&gt;A preview of what will be removed and what will be kept is printed.&lt;/li&gt;
&lt;li&gt;Unless &lt;code&gt;--force&lt;/code&gt; is set, nux prompts for confirmation.&lt;/li&gt;
&lt;li&gt;The global config file is deleted.&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;--projects&lt;/code&gt; is set, the &lt;code&gt;projects/&lt;/code&gt; directory and all its contents are also deleted.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Running tmux sessions are not affected by this command.&lt;/p&gt;</description></item><item><title>validate</title><link>https://drew-daniels.github.io/nux/docs/commands/validate/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/commands/validate/</guid><description>&lt;h2 id="usage"&gt;Usage&lt;a class="anchor" href="#usage"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux validate [name ...]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="description"&gt;Description&lt;a class="anchor" href="#description"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Validates project configuration files and reports errors. Each config is printed with &lt;strong&gt;&lt;code&gt;[ok]&lt;/code&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;code&gt;[error]&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;With no arguments:&lt;/strong&gt; validates all project configs under &lt;code&gt;~/.config/nux/projects/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;With one or more targets:&lt;/strong&gt; validates each expanded project. Targets support &lt;strong&gt;glob patterns&lt;/strong&gt; (&lt;code&gt;+&lt;/code&gt;), &lt;strong&gt;&lt;code&gt;@group&lt;/code&gt;&lt;/strong&gt; expansion, and multiple space-separated names (same rules as &lt;code&gt;nux&lt;/code&gt; / &lt;code&gt;nux stop&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="what-gets-checked"&gt;What gets checked&lt;a class="anchor" href="#what-gets-checked"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Every project must have at least one window with at least one pane.&lt;/li&gt;
&lt;li&gt;Every window must have a &lt;code&gt;name&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Every window must have at least one pane.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;layout&lt;/code&gt; values must be a recognized tmux layout name or a valid custom layout string.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="example-output"&gt;Example output&lt;a class="anchor" href="#example-output"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [ok] blog
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [ok] api
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [error] workers: at least one window is required&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If any config has errors, nux exits with a non-zero status.&lt;/p&gt;</description></item><item><title>doctor</title><link>https://drew-daniels.github.io/nux/docs/commands/doctor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/commands/doctor/</guid><description>&lt;h2 id="usage"&gt;Usage&lt;a class="anchor" href="#usage"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux doctor&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="description"&gt;Description&lt;a class="anchor" href="#description"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Runs a diagnostic suite for your nux and tmux environment. Each check is reported with &lt;strong&gt;&lt;code&gt;[ok]&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;[warn]&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;[fail]&lt;/code&gt;&lt;/strong&gt;, or &lt;strong&gt;&lt;code&gt;[missing]&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Checks performed, in order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;nux version&lt;/strong&gt; - prints the running version, OS, and architecture&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;tmux binary&lt;/strong&gt; - verifies &lt;code&gt;tmux&lt;/code&gt; is on PATH and prints its version&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Global config&lt;/strong&gt; - confirms the global config loaded successfully&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zoxide binary&lt;/strong&gt; - checked only when &lt;code&gt;zoxide: true&lt;/code&gt; in global config&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Picker binary&lt;/strong&gt; - checked only when a picker is configured (fzf, gum)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Config directory&lt;/strong&gt; - verifies &lt;code&gt;~/.config/nux/projects/&lt;/code&gt; exists&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Projects directory&lt;/strong&gt; - verifies each configured &lt;code&gt;project_dirs&lt;/code&gt; path exists&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Project configs&lt;/strong&gt; - validates every project YAML file&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If any check fails, &lt;code&gt;doctor&lt;/code&gt; exits with a non-zero status and prints &amp;ldquo;some checks failed.&amp;rdquo;&lt;/p&gt;</description></item><item><title>Troubleshooting</title><link>https://drew-daniels.github.io/nux/docs/guides/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/guides/troubleshooting/</guid><description>&lt;p&gt;Common issues and how to resolve them.&lt;/p&gt;
&lt;h2 id="nux-unknown-command-or-command-not-found"&gt;&amp;ldquo;nux: unknown command&amp;rdquo; or &amp;ldquo;command not found&amp;rdquo;&lt;a class="anchor" href="#nux-unknown-command-or-command-not-found"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;nux&lt;/code&gt; binary is not on your PATH. Verify the install:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;which nux
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you installed via &lt;code&gt;go install&lt;/code&gt;, make sure &lt;code&gt;$(go env GOPATH)/bin&lt;/code&gt; is in your PATH. If you installed via Homebrew, run &lt;code&gt;brew link nux&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="cannot-start-session-from-inside-tmux"&gt;&amp;ldquo;cannot start session from inside tmux&amp;rdquo;&lt;a class="anchor" href="#cannot-start-session-from-inside-tmux"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;nux refuses to start new sessions from inside an existing tmux session to prevent nested session confusion. Options:&lt;/p&gt;</description></item><item><title>completions</title><link>https://drew-daniels.github.io/nux/docs/commands/completions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/commands/completions/</guid><description>&lt;h2 id="usage"&gt;Usage&lt;a class="anchor" href="#usage"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux completions &amp;lt;bash|zsh|fish&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="description"&gt;Description&lt;a class="anchor" href="#description"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Prints a &lt;strong&gt;shell completion script&lt;/strong&gt; to standard output for the given shell. Redirect the output to the location your shell loads for completions.&lt;/p&gt;
&lt;h2 id="install-examples"&gt;Install examples&lt;a class="anchor" href="#install-examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;bash&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux completions bash &amp;gt; /etc/bash_completion.d/nux&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;zsh&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux completions zsh &amp;gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;fpath&lt;/span&gt;&lt;span class="p"&gt;[1]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/_nux&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;fish&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux completions fish &amp;gt; ~/.config/fish/completions/nux.fish&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="notes"&gt;Notes&lt;a class="anchor" href="#notes"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;If you install nux via &lt;strong&gt;Homebrew&lt;/strong&gt; or &lt;strong&gt;Nix&lt;/strong&gt;, completions are often installed automatically; you may not need the steps above.&lt;/li&gt;
&lt;li&gt;You may need elevated permissions for system-wide paths (for example &lt;code&gt;/etc/bash_completion.d&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>version</title><link>https://drew-daniels.github.io/nux/docs/commands/version/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/commands/version/</guid><description>&lt;h2 id="usage"&gt;Usage&lt;a class="anchor" href="#usage"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="description"&gt;Description&lt;a class="anchor" href="#description"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Prints build metadata: version, git commit, and build date.&lt;/p&gt;
&lt;h2 id="example-output"&gt;Example output&lt;a class="anchor" href="#example-output"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux 0.5.0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; commit: a1b2c3d
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; built: 2026-04-01T12:00:00Z&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When running a development build (via &lt;code&gt;go install&lt;/code&gt; or &lt;code&gt;go build&lt;/code&gt; without ldflags), the output shows placeholder values:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nux dev
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; commit: none
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; built: unknown&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="changelog"&gt;Changelog&lt;a class="anchor" href="#changelog"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;See the &lt;a href="https://github.com/Drew-Daniels/nux/releases"&gt;GitHub releases page&lt;/a&gt; for release notes and changelogs.&lt;/p&gt;
&lt;h2 id="notes"&gt;Notes&lt;a class="anchor" href="#notes"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Useful when reporting bugs or verifying that your PATH points to the expected install.&lt;/li&gt;
&lt;li&gt;Release builds embed version info via &lt;code&gt;-ldflags&lt;/code&gt; at compile time.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>GitHub repository setup</title><link>https://drew-daniels.github.io/nux/docs/guides/github-repo-setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://drew-daniels.github.io/nux/docs/guides/github-repo-setup/</guid><description>&lt;p&gt;This page documents maintainer-facing GitHub settings for &lt;strong&gt;nux&lt;/strong&gt;. Most files live in the repo (templates, Dependabot, workflows); a few settings are only in the GitHub UI or API.&lt;/p&gt;
&lt;h2 id="files-in-the-repo"&gt;Files in the repo&lt;a class="anchor" href="#files-in-the-repo"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Item&lt;/th&gt;
 &lt;th&gt;Location&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Security policy&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/Drew-Daniels/nux/blob/main/SECURITY.md"&gt;SECURITY.md&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Code of Conduct&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/Drew-Daniels/nux/blob/main/CODE_OF_CONDUCT.md"&gt;CODE_OF_CONDUCT.md&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Support / where to ask&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/Drew-Daniels/nux/blob/main/SUPPORT.md"&gt;SUPPORT.md&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Issue forms&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/Drew-Daniels/nux/tree/main/.github/ISSUE_TEMPLATE"&gt;.github/ISSUE_TEMPLATE/&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;PR template&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/Drew-Daniels/nux/blob/main/.github/PULL_REQUEST_TEMPLATE.md"&gt;.github/PULL_REQUEST_TEMPLATE.md&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Dependabot&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/Drew-Daniels/nux/blob/main/.github/dependabot.yml"&gt;.github/dependabot.yml&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Sponsor button&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/Drew-Daniels/nux/blob/main/.github/FUNDING.yml"&gt;.github/FUNDING.yml&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Stale issues (optional)&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/Drew-Daniels/nux/blob/main/.github/workflows/stale.yml"&gt;.github/workflows/stale.yml&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="settings-applied-via-github-api"&gt;Settings applied via GitHub API&lt;a class="anchor" href="#settings-applied-via-github-api"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;These can be configured with &lt;code&gt;gh&lt;/code&gt; (see project history). To reproduce or audit:&lt;/p&gt;</description></item></channel></rss>