diff options
| author | Danilo M. <danix@danix.xyz> | 2026-10-18 11:42:52 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-10-18 11:42:52 +0200 |
| commit | 1d527c4e47514540541abf57aa1adb6a14ae5b54 (patch) | |
| tree | dde8c34cd5e7f25291962d5a6e1bca5ac6631b5d /bin/blackpearl-sshmenu.sh | |
| download | rofi-scripts-1d527c4e47514540541abf57aa1adb6a14ae5b54.tar.gz rofi-scripts-1d527c4e47514540541abf57aa1adb6a14ae5b54.zip | |
Initial commit: rofi-scripts, the scripts behind the rofi menus
Power menu, launcher, screenshot picker, SSH host cards, pass browser,
emoji picker, Firefox profile picker, notification actions and an
sd-server model picker. install.sh symlinks them into ~/bin; their
layouts come from unified-desktop-theme.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'bin/blackpearl-sshmenu.sh')
| -rwxr-xr-x | bin/blackpearl-sshmenu.sh | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/bin/blackpearl-sshmenu.sh b/bin/blackpearl-sshmenu.sh new file mode 100755 index 0000000..b0a0fc1 --- /dev/null +++ b/bin/blackpearl-sshmenu.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# blackpearl-sshmenu.sh - the hosts in ~/.ssh/config as rofi cards +# Copyright (C) 2026 Danilo M. <danix@danix.xyz> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +# rofi's own ssh mode shows the alias only, so the config is read here. +# ponytail: plain "Keyword value" lines in ~/.ssh/config only; Include and +# Match are not followed, wildcard Host patterns are skipped. +mapfile -t hosts < <(awk ' + function flush() { if (name != "") print name "\t" user "\t" addr } + tolower($1) == "host" { flush(); name = ($2 ~ /[*?]/) ? "" : $2; user = ""; addr = $2 } + tolower($1) == "hostname" { addr = $2 } + tolower($1) == "user" { user = $2 } + END { flush() }' ~/.ssh/config) + +# Two lines a card: the alias, then "user · address" with the user only where +# the config sets one. Entries are joined on "|" so each can hold a newline. +entries=() +for h in "${hosts[@]}"; do + IFS=$'\t' read -r name user addr <<< "$h" + entries+=("<b>$name</b> +<span size='small' fgalpha='65%'>${user:+$user · }$addr</span>") +done + +i=$(IFS='|'; printf '%s' "${entries[*]}" | rofi -dmenu -i -markup-rows \ + -sep '|' -eh 2 -format i -p ' SSH:' -theme ~/.config/rofi/udt/ssh.rasi) || exit +name=${hosts[i]%%$'\t'*} +exec rofi-sensible-terminal -e ssh "$name" |
