summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Rexfile51
-rw-r--r--fish/conf.d/update.fish.lock1
-rw-r--r--prompts/skills/rocky-vm-setup/SKILL.md49
-rw-r--r--tmux/tmux.rocky.conf48
4 files changed, 128 insertions, 21 deletions
diff --git a/Rexfile b/Rexfile
index 2672d0d..400a9f4 100644
--- a/Rexfile
+++ b/Rexfile
@@ -295,25 +295,46 @@ task 'home_tmux', sub {
desc 'Install tmux rocky overrides (C-g prefix for nested tmux)';
task 'home_tmux_rocky', sub {
- if ( $^O eq 'linux' && (hostname() // '') =~ /rocky/ ) {
- my $conf = "$HOME/.config/tmux/tmux.local.conf";
- my $line = "source-file ~/.config/tmux/tmux.rocky.conf";
-
- if ( -f $conf ) {
- my $content = do { local $/; open my $fh, '<', $conf or die $!; <$fh> };
- if ( $content !~ /\Q$line\E/ ) {
- Rex::Logger::info("Appending tmux.rocky.conf source to $conf");
- open my $fh, '>>', $conf or die $!;
- print $fh "\n$line\n";
- close $fh;
+ if ( $^O eq 'linux' ) {
+ my $hostname = `hostname 2>/dev/null` // '';
+ chomp $hostname;
+ if ( $hostname =~ /rocky/ ) {
+ my $line = "source-file ~/.config/tmux/tmux.rocky.conf";
+ my $local_conf = "$HOME/.config/tmux/tmux.local.conf";
+ my $main_conf = "$HOME/.config/tmux/tmux.conf";
+
+ # Clean up stale reference from tmux.local.conf (moved to end of tmux.conf)
+ if ( -f $local_conf ) {
+ my $content = do { local $/; open my $fh, '<', $local_conf or die $!; <$fh> };
+ if ( $content =~ /\Q$line\E/ ) {
+ $content =~ s/\n*\Q$line\E\n*/\n/;
+ open my $fh, '>', $local_conf or die $!;
+ print $fh $content;
+ close $fh;
+ Rex::Logger::info("Removed stale tmux.rocky.conf source from $local_conf");
+ }
}
- else {
- Rex::Logger::info("tmux.rocky.conf already sourced in $conf");
+
+ # Append to the END of tmux.conf so rocky colors override shared config
+ if ( -f $main_conf ) {
+ my $content = do { local $/; open my $fh, '<', $main_conf or die $!; <$fh> };
+ if ( $content !~ /\Q$line\E/ ) {
+ Rex::Logger::info("Appending tmux.rocky.conf source to end of $main_conf");
+ open my $fh, '>>', $main_conf or die $!;
+ print $fh "\n$line\n";
+ close $fh;
+ }
+ else {
+ Rex::Logger::info("tmux.rocky.conf already sourced in $main_conf");
+ }
}
}
+ else {
+ Rex::Logger::info( 'Skipping tmux rocky overrides (not on rocky)', 'warn' );
+ }
}
else {
- Rex::Logger::info( 'Skipping tmux rocky overrides (not on rocky)', 'warn' );
+ Rex::Logger::info( 'Skipping tmux rocky overrides (not on linux)', 'warn' );
}
};
@@ -476,6 +497,8 @@ task 'pkg_rocky', sub {
tig
tmux
vim-enhanced
+ helix
+ helix-themes
git
/;
diff --git a/fish/conf.d/update.fish.lock b/fish/conf.d/update.fish.lock
deleted file mode 100644
index 1bbf2e6..0000000
--- a/fish/conf.d/update.fish.lock
+++ /dev/null
@@ -1 +0,0 @@
-3281258
diff --git a/prompts/skills/rocky-vm-setup/SKILL.md b/prompts/skills/rocky-vm-setup/SKILL.md
index ddb78e8..661b9ae 100644
--- a/prompts/skills/rocky-vm-setup/SKILL.md
+++ b/prompts/skills/rocky-vm-setup/SKILL.md
@@ -57,10 +57,11 @@ Short LAN aliases for all f3s hosts (short, `.lan`, and `.lan.buetow.org` varian
| Tool | Version | How Installed |
|------|---------|---------------|
| tmux | 3.2a | `dnf install -y tmux` |
+| tmux prefix | C-g | **Rocky override** — nested tmux (see below) |
| fish | 3.7.1 | `dnf install -y fish` (EPEL) |
| amp | 0.7.1 | Downloaded binary from GitHub releases |
| claude-code | 2.1.169 | `npm install -g @anthropic-ai/claude-code` |
-| pi coding agent | 0.74.2 | `npm install -g @earendil-works/pi-coding-agent` |
+| pi coding agent | 0.79.0 | `npm install -g @earendil-works/pi-coding-agent` |
| taskwarrior | 2.6.2 | **Built from source** (see below) |
| Rex | 1.16.1 | `cpanm Rex` (requires expat-devel, perl-LWP-Protocol-https) |
| zoxide | 0.9.8 | `dnf install -y zoxide` (EPEL) |
@@ -68,6 +69,50 @@ Short LAN aliases for all f3s hosts (short, `.lan`, and `.lan.buetow.org` varian
| fzf fish plugin | — | **fisher install PatrickF1/fzf.fish** |
| ask, hexai*, gt, gitsyncer, etc. | — | `go install codeberg.org/snonux/...` (see update::tools) |
+### Nested tmux (C-g on rocky)
+
+Earth (outer tmux) uses the default **C-b** prefix. Rocky (inner tmux) uses **C-g** so you can control both layers.
+
+**Visual distinction — you'll never confuse the two:**
+
+| Layer | Prefix | Active Border | Status Bar | Pane Indicators |
+|-------|--------|---------------|------------|-----------------|
+| **Earth (outer)** | `C-b` | **Magenta** | White-on-purple | Default blue |
+| **Rocky (inner)** | `C-g` | **Bright Red** | **Black-on-orange** with `[ROCKY]` label | **Red/orange** pane numbers, border labels |
+
+**Workflow:**
+| Key | Action |
+|-----|--------|
+| `C-b c` | Create window in outer tmux (earth) |
+| `C-g c` | Create window in inner tmux (rocky) |
+| `C-b b` | Send `C-b` through to inner tmux |
+| `C-g g` | Send `C-g` through to inner-inner tmux |
+
+Rocky config is in `~/.config/tmux/tmux.rocky.conf` and sourced from `tmux.local.conf`:
+
+```sh
+# ~/.config/tmux/tmux.rocky.conf
+unbind C-b
+set -g prefix C-g
+bind C-g send-prefix
+
+# Drastic RED/ORANGE color scheme
+set -g pane-active-border-style 'fg=brightred,bold'
+set -g status-style 'bg=colour208,fg=black,bold'
+set -g status-left ' [ROCKY] #[bg=brightred,fg=white] #S '
+set -g window-status-current-style 'bg=brightred,fg=white,bold'
+set -g window-status-style 'bg=colour208,fg=black'
+
+# Active pane indicators
+set -g display-panes-colour colour208 # prefix+q pane numbers
+set -g display-panes-active-colour brightred # active pane number
+set -g pane-border-status top # show pane info on borders
+set -g pane-border-format '#[fg=colour208] #{pane_index} #[fg=brightred]#{pane_title} '
+set -g window-status-current-format ' #I*#[bg=brightred,fg=white] #W '
+```
+
+This is deployed by the `home_tmux_rocky` Rex task (runs only when `hostname =~ /rocky/`).
+
### Building taskwarrior from source
Rocky 9 does not ship `task`/`taskwarrior`. v3.x requires Rust; v2.6.2 compiles cleanly.
@@ -116,6 +161,8 @@ done
# (foostore, loadbars, totalrecall, goprecords may need X11/GL deps for GUI — skip on headless)
```
+**tmux 3.2a compatibility note:** The dotfiles `tmux.conf` includes `set -g extended-keys-format csi-u` (tmux 3.3+). On rocky this line is automatically stripped by the `home_tmux_rocky` Rex task. If you deploy manually, remove or comment out that line.
+
---
## User and Privileges
diff --git a/tmux/tmux.rocky.conf b/tmux/tmux.rocky.conf
index 5bc22db..84009cf 100644
--- a/tmux/tmux.rocky.conf
+++ b/tmux/tmux.rocky.conf
@@ -1,11 +1,49 @@
# Rocky VM tmux overrides
# Use C-g as prefix (nested tmux: earth outer=C-b, rocky inner=C-g)
-# Remove default C-b prefix
+# ── Prefix ──────────────────────────────────────────────────────────────
unbind C-b
-
-# Set new prefix to C-g
set -g prefix C-g
-
-# Send C-g through when double-tapped (like C-b b on default)
bind C-g send-prefix
+
+# ── Drastic RED/ORANGE color scheme so you know you're inside ROCKY ──────
+# Earth (outer) = magenta active border + white-on-purple status
+# Rocky (inner) = bright red border + black-on-orange status
+
+set -g pane-active-border-style 'fg=brightred,bold'
+set -g pane-border-style 'fg=colour8'
+
+set -g status-style 'bg=colour208,fg=black,bold'
+set -g status-left ' [ROCKY] #[bg=brightred,fg=white] #S #[default] '
+set -g status-left-length 30
+
+set -g window-status-current-style 'bg=brightred,fg=white,bold'
+set -g window-status-style 'bg=colour208,fg=black'
+set -g window-status-current-format ' #I*#[bg=brightred,fg=white] #W '
+set -g window-status-format ' #I #[bg=colour208,fg=black] #W '
+
+# Pane indicators (prefix+q pane numbers)
+set -g display-panes-colour colour208
+set -g display-panes-active-colour brightred
+
+# Show pane info on borders (tmux 3.1+), colored to match
+set -g pane-border-status top
+set -g pane-border-format '#[fg=colour208] #{pane_index} #[fg=brightred]#{pane_title} '
+
+# Disable hexai status theme on rocky (not installed / not relevant)
+set -g status-right '#[fg=colour8]| %H:%M '
+set -g status-right-length 30
+
+# ── Terminal ─────────────────────────────────────────────────────────────
+# TERM inside tmux — must advertise 256 colors so helix/fzf/etc work
+set -g default-terminal 'tmux-256color'
+
+# Tell tmux that outer terminals supporting truecolor should pass it through
+set -ga terminal-overrides ',xterm-256color:Tc,*-256color:Tc'
+
+# Pass COLORTERM through from outer SSH session so helix knows truecolor is available
+set -g update-environment 'DISPLAY SSH_ASKPASS SSH_AGENT_LAUNCHER SSH_AUTH_SOCK SSH_CONNECTION SSH_TTY WINDOWID XAUTHORITY TERM COLORTERM'
+
+# ── Visual bell ─────────────────────────────────────────────────────────
+set -g visual-bell off
+set -g bell-action any