6 Commits
Author SHA1 Message Date
lyrathorpe 955b6640c3 Merge pull request 'fix(darwin): disable hot-corners' (#109) from fix/disable-hot-corners into main
CI / flake (push) Successful in 4m32s
Reviewed-on: #109
2026-08-28 14:51:27 +01:00
lyrathorpe ea791df4aa fix(darwin): disable hot-corners
CI / flake (push) Skipped
CI / flake (pull_request) Successful in 4m29s
I hate them and I need to ensure they never come back
2026-08-28 14:46:40 +01:00
lyrathorpe a587f0ab71 Merge pull request 'fix(wsl): provide xdg-open so browser-based logins work' (#108) from fix/wsl-xdg-open into main
CI / flake (push) Successful in 4m27s
Reviewed-on: #108
2026-08-28 13:53:39 +01:00
lyrathorpe 93f1b191c8 Merge pull request 'feat(tmux): show window names in the status bar and pane titles on the border' (#107) from feat/tmux-window-and-pane-titles into main
CI / flake (push) Successful in 5m23s
Reviewed-on: #107
2026-08-28 13:49:32 +01:00
Emma Thorpe a51ed76119 fix(wsl): provide xdg-open so browser-based logins work
CI / flake (push) Skipped
CI / flake (pull_request) Successful in 4m30s
WSL has no xdg-open and no Linux browser, so anything that shells out to one
fails with:

  exec: "xdg-open,x-www-browser,www-browser": executable file not found in $PATH

kubelogin's interactive login hits this, which matters because interactive is
the mode the shared cluster kubeconfig uses and the mode documented for
re-authenticating after a PIM activation.

Ships an xdg-open on PATH that hands the URL to Windows via powershell.exe,
falling back to explorer.exe, and points $BROWSER at it for tools that read the
variable instead of calling xdg-open. wslu would be the conventional answer but
has been removed from nixpkgs after upstream archived the project.
2026-08-28 13:48:52 +01:00
Emma Thorpe 5bca7e176a feat(tmux): show window names in the status bar and pane titles on the border
CI / flake (push) Skipped
CI / flake (pull_request) Successful in 4m9s
Catppuccin renders #T, the pane title, in the window list. Any program in the
pane can overwrite that with an OSC escape -- the shell writes the hostname and
Claude Code writes its current task -- so a window renamed with prefix+, never
appeared anywhere.

The status bar now shows the window name, falling back to the pane title while a
window holds a single pane. Once a window is split, pane titles appear on the
pane borders instead; pane-border-status takes no format, so a
window-layout-changed hook recomputes it on both split and close. Adds a binding
for select-pane -T, which has no default.
2026-08-28 12:22:37 +01:00
3 changed files with 40 additions and 0 deletions
+19
View File
@@ -313,6 +313,14 @@ in
extraConfig = ''
set -g @catppuccin_flavor 'mocha'
set -g @catppuccin_window_status_style 'rounded'
# Catppuccin's default window text is #T, the pane title, which every
# program in the pane is free to overwrite -- the shell writes the
# hostname, Claude Code writes its current task, and a hand-set window
# name never appears. Show the window name instead, falling back to the
# pane title when the window holds a single pane and the two carry the
# same information anyway.
set -g @catppuccin_window_text ' #{?#{==:#{window_panes},1},#T,#W}'
set -g @catppuccin_window_current_text ' #{?#{==:#{window_panes},1},#T,#W}'
'';
}
resurrect # save/restore sessions
@@ -357,6 +365,17 @@ in
set -g renumber-windows on
set -g set-clipboard on
# Pane titles on the border, but only once a window is split -- a single
# pane's title is already in the status bar. pane-border-status takes no
# format, so the hook recomputes it whenever the layout changes, which
# covers both splitting and closing a pane.
set -g pane-border-format " #P #{pane_title} "
set -g pane-border-status off
set-hook -g window-layout-changed 'set -Fw pane-border-status "#{?#{>:#{window_panes},1},top,off}"'
# Pane titles have no default binding.
bind T command-prompt -p "pane title:" "select-pane -T '%%'"
# Catppuccin v2 statusline. Must run after the plugin has loaded;
# home-manager appends this extraConfig after the whole plugin list.
set -g status-left-length 100
+5
View File
@@ -161,6 +161,11 @@
dock = {
show-recents = false;
mru-spaces = false; # don't reorder spaces by use
# Disable hot-corners
wvous-tr-corner = 1;
wvous-tl-corner = 1;
wvous-bl-corner = 1;
wvous-br-corner = 1;
};
finder = {
AppleShowAllExtensions = true;
+16
View File
@@ -47,7 +47,23 @@
pkgs.terraform-docs # generate Terraform module docs
pkgs.yq-go # jq for YAML
pkgs.gcx # Grafana Cloud CLI (dashboards, SLOs, synthetics, alerts)
# WSL ships no xdg-open, so anything that shells out to a browser dies with
# `exec: "xdg-open,x-www-browser,www-browser": executable file not found`.
# kubelogin's interactive login is the one that bites: it is the login mode
# the shared cluster kubeconfig uses. Hand the URL to Windows instead.
# (wslu, the usual answer, is gone from nixpkgs -- upstream archived it.)
(pkgs.writeShellScriptBin "xdg-open" ''
url="$1"
if command -v powershell.exe >/dev/null 2>&1; then
exec powershell.exe -NoProfile -Command "Start-Process '$url'"
fi
exec explorer.exe "$url"
'')
];
# Honoured by tools that read $BROWSER rather than calling xdg-open.
home.sessionVariables.BROWSER = "xdg-open";
services.ssh-agent.enable = true;
# Colourised kubectl. enableAlias points `kubectl` at kubecolor, which parses