3 Commits

Author SHA1 Message Date
Dict Xiong
e1aaeea93f [debug] riot: disable controlmaster when forwarding gpg (#49)
fix(riot): disable controlmaster when forwarding gpg

Signed-off-by: Dict Xiong <me@dxng.cn>
2026-08-22 00:54:52 +08:00
Dict Xiong
913032b59d [debug] fix: tmux 3.6 selection (#48)
* fix(tmux): tmux 3.6 selection

Signed-off-by: Dict Xiong <me@dxng.cn>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Signed-off-by: Dict Xiong <me@dxng.cn>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-08-20 16:37:43 +08:00
Dict Xiong
aa1df92783 [dev] feat: README.md (#47)
feat: README.md
2026-08-17 18:33:33 +08:00
4 changed files with 66 additions and 3 deletions

View File

@@ -31,8 +31,9 @@ bind r source-file ~/.tmux.conf \; display-message "tmux.conf reloaded"
bind m run 'old=$(tmux show -gv mouse); new="off"; if [ "$old" = "off" ]; then new="on"; fi; tmux set -g mouse $new && tmux display-message toggle\ mouse\ mode\ $new'
## prefix C-x: pane sync
bind C-x set-window-option synchronize-panes\; display-message "synchronize-panes is now #{?pane_synchronized,on,off}"
## prevent jumping to end after mouse selection
bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-selection -x
## tmux 3.6+: copy selection without jumping to the end
bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-selection
bind -T copy-mode MouseDragEnd1Pane send-keys -X copy-selection
## F12: passthru
bind -T root F12 set prefix None \; set key-table off \; set status-bg red \; refresh-client -S
bind -T off F12 set -u prefix \; set -u key-table \; set -u status-bg \; refresh-client -S

View File

@@ -1 +1,58 @@
# dotfiles
# dotfiles
My personal shell environment and command-line tools, mainly for Linux and
NixOS systems.
It includes configurations for zsh, tmux, Vim, Git, and SSH, together with a
few utility scripts used across my machines.
## Highlights
- `riot`: an SSH wrapper with host presets, jump hosts, port forwarding, tmux
sessions, and optional GPG agent forwarding.
- `sagt`: an SSH/GPG agent manager with support for PIV, 1Password, and
OpenPGP smart cards.
- zsh aliases and completions for the bundled tools.
- tmux and Vim configurations with plugin setup.
- automatic updates with selectable `main`, `dev`, and `latest` channels.
## Installation
Quick install:
```sh
curl -fsSL https://dotfiles.cn | bash
```
Alternatively, clone the repository so the installer can be reviewed first:
```sh
git clone https://github.com/DictXiong/dotfiles.git ~/dotfiles
~/dotfiles/install.sh -a
```
The installer adds small source/include entries to the existing zsh, tmux,
Vim, and Git configuration files instead of replacing them entirely.
## Useful commands
```sh
riot --help # show the SSH wrapper manual
sagt # start or reuse an ssh-agent
sagt gpg # use gpg-agent as SSH agent
sagt gpg-pin # cache the smart-card signature PIN
dfs update # update dotfiles from the selected channel
dfs config # edit machine-specific settings
```
## Configuration
Machine-specific settings can be placed in:
```text
~/.config/dotfiles/env
~/.config/riot-config.sh
```
This is a personal dotfiles repository. Review the configuration, SSH keys,
and installation script before using it on another machine.

View File

@@ -255,6 +255,10 @@ prepare_gpg_forwarding() {
fi
fi
# A pre-existing multiplex master cannot apply this connection's -R
# forwarding request. Put this first because OpenSSH keeps the first
# value for repeated options, and force a dedicated connection.
SSH_OPTIONS=("-o" "ControlMaster=no" "${SSH_OPTIONS[@]}")
SSH_OPTIONS+=(
# The probe already removed the old socket. Do not let the main SSH
# connection unlink a path recreated during the gap between them.

View File

@@ -127,6 +127,7 @@ grep -Fq 'ARG=-T' "$MOCK_SSH_LOG"
! grep -Fq 'ARG=RequestTTY=' "$MOCK_SSH_LOG"
grep -Fq 'ARG=StreamLocalBindUnlink=no' "$MOCK_SSH_LOG"
grep -Fq "ARG=$MOCK_REMOTE_SOCKET:$MOCK_LOCAL_SOCKET" "$MOCK_SSH_LOG"
grep -Fq 'ARG=ControlMaster=no' "$MOCK_SSH_LOG"
[[ ! -e "$MOCK_REMOTE_SOCKET" ]]
echo 'riot gpg forwarding tests passed'