From 316a3ff9e43358ee957ca0ea4fe5cbf7ad9d8b60 Mon Sep 17 00:00:00 2001 From: Yuri Zamyatin Date: Thu, 2 Oct 2025 07:46:48 +0000 Subject: [PATCH] uncommited --- arch-user/bin/wssh | 9 -- arch-user/bin/wsudo | 117 ++++++++++++++++++ arch-user/config/aichat/roles/sonnet.md | 2 +- .../{alacritty.toml => alacritty.toml.tmpl} | 0 arch-user/config/bash/bashrc | 4 +- .../{fonts.conf => fonts.conf.tmpl} | 0 arch-user/config/git/{config => config.tmpl} | 0 .../config/i3blocks/{config => config.tmpl} | 0 arch-user/config/vim/{vimrc => vimrc.tmpl} | 0 .../config/workspace-compat/profile.tmpl | 15 ++- arch-user/install.sh | 7 +- 11 files changed, 132 insertions(+), 22 deletions(-) create mode 100755 arch-user/bin/wsudo rename arch-user/config/alacritty/{alacritty.toml => alacritty.toml.tmpl} (100%) rename arch-user/config/fontconfig/{fonts.conf => fonts.conf.tmpl} (100%) rename arch-user/config/git/{config => config.tmpl} (100%) rename arch-user/config/i3blocks/{config => config.tmpl} (100%) rename arch-user/config/vim/{vimrc => vimrc.tmpl} (100%) diff --git a/arch-user/bin/wssh b/arch-user/bin/wssh index ceb437e..dc86a6a 100755 --- a/arch-user/bin/wssh +++ b/arch-user/bin/wssh @@ -1,10 +1,6 @@ #!/bin/bash set -e -if [ ! -t 0 ]; then - exec /bin/ssh "$@" -fi - if [ $# -lt 1 ]; then echo "Usage: $0 [ssh-options]" exit 1 @@ -15,11 +11,7 @@ read -r -d '' init_cmd << WSCOMPAT_EOF_9oqn7IVF || true export WS_IS_COMPAT=1 export WSCOMPAT_MASTER="$WSCOMPAT_MASTER" export WSCOMPAT_DIR="/tmp/wscompat_${WSCOMPAT_MASTER}_\$(whoami)" - - ws_cleanup() { rm -rf "\$WSCOMPAT_DIR"; } - trap ws_cleanup EXIT rm -rf "\$WSCOMPAT_DIR" && mkdir -p "\$WSCOMPAT_DIR" && chmod 700 "\$WSCOMPAT_DIR" - cat << 'WSCOMPAT_EOF_84EbM3la' > "\$WSCOMPAT_DIR/profile" $( sed 's/WSCOMPAT_EOF_/WSCOMPAT_EOF__/g' "$WSCOMPAT_DIR/profile" @@ -31,7 +23,6 @@ $( ) WSCOMPAT_EOF_84EbM3la . \$WSCOMPAT_DIR/profile - # pam, systemd - wrap in login shell exec /bin/bash --login --norc --noprofile -c "exec /bin/bash --rcfile \"\$WSCOMPAT_DIR/bashrc\"" WSCOMPAT_EOF_9oqn7IVF diff --git a/arch-user/bin/wsudo b/arch-user/bin/wsudo new file mode 100755 index 0000000..c2c9ad7 --- /dev/null +++ b/arch-user/bin/wsudo @@ -0,0 +1,117 @@ +#!/bin/bash + +parse() { + sudo_user="root" + sudo_command="" + sudo_login_shell="" + local args=("$@") + local i=0 + local arg_count=${#args[@]} + while [[ $i -lt $arg_count ]]; do + case "${args[$i]}" in + -u|--user) + ((i++)) + if [[ $i -lt $arg_count ]]; then + sudo_user="${args[$i]}" + fi + ((i++)) + ;; + -i|--login) + sudo_login_shell=true + ((i++)) + ;; + -s|--shell) + ((i++)) + ;; + --) + ((i++)) + sudo_command="${args[*]:$i}" + break + ;; + -*) + ((i++)) + ;; + su) + ((i++)) + local su_user="" + while [[ $i -lt $arg_count ]]; do + case "${args[$i]}" in + -|-l|--login) + sudo_login_shell=true + ((i++)) + ;; + -c|--command) + ((i++)) + if [[ $i -lt $arg_count ]]; then + sudo_command="${args[$i]}" + ((i++)) + fi + ;; + --session-command=*) + sudo_command="${args[$i]#*=}" + ((i++)) + ;; + -m|-p|--preserve-environment) + ((i++)) + ;; + -s|--shell) + ((i++)) + if [[ $i -lt $arg_count && "${args[$i]}" != -* ]]; then + ((i++)) + fi + ;; + -*) + ((i++)) + ;; + *) + if [[ -z "$su_user" ]]; then + su_user="${args[$i]}" + ((i++)) + else + ((i++)) + fi + ;; + esac + done + if [[ -n "$su_user" ]]; then + sudo_user="$su_user" + fi + break + ;; + *) + sudo_command="${args[*]:$i}" + break + ;; + esac + done +} +parse "$@" + +[ -z "$WSCOMPAT_MASTER" ] && WSCOMPAT_MASTER="$(whoami)" +read -r -d '' init_cmd << WSCOMPAT_EOF_9oqn7IVF || true + export WS_IS_COMPAT=1 + export WSCOMPAT_MASTER="$WSCOMPAT_MASTER" + export WSCOMPAT_DIR="/tmp/wscompat_${WSCOMPAT_MASTER}_\$(whoami)" + rm -rf "\$WSCOMPAT_DIR" && mkdir -p "\$WSCOMPAT_DIR" && chmod 700 "\$WSCOMPAT_DIR" + cat << 'WSCOMPAT_EOF_84EbM3la' > "\$WSCOMPAT_DIR/profile" +$( + sed 's/WSCOMPAT_EOF_/WSCOMPAT_EOF__/g' "$WSCOMPAT_DIR/profile" + for file in "$WSCOMPAT_DIR.profile"*.sh; do + if [ -f "$file" ]; then + sed 's/WSCOMPAT_EOF_/WSCOMPAT_EOF__/g' "$file" + fi + done +) +WSCOMPAT_EOF_84EbM3la + . \$WSCOMPAT_DIR/profile +WSCOMPAT_EOF_9oqn7IVF + +if [ -z "$sudo_command" ]; then + sudo_command="exec /bin/bash --rcfile \"\$WSCOMPAT_DIR/bashrc\"" +fi +if [ "$sudo_login_shell" ]; then + bash_flags="--login --noprofile --norc"; +else + bash_flags="--noprofile --norc"; +fi +exec /bin/sudo -u "$sudo_user" /bin/bash $bash_flags -c "$init_cmd; $sudo_command" diff --git a/arch-user/config/aichat/roles/sonnet.md b/arch-user/config/aichat/roles/sonnet.md index 6e864a5..fafa472 100644 --- a/arch-user/config/aichat/roles/sonnet.md +++ b/arch-user/config/aichat/roles/sonnet.md @@ -1,3 +1,3 @@ --- -model: openrouter:anthropic/claude-sonnet-4 +model: openrouter:anthropic/claude-sonnet-4.5 --- diff --git a/arch-user/config/alacritty/alacritty.toml b/arch-user/config/alacritty/alacritty.toml.tmpl similarity index 100% rename from arch-user/config/alacritty/alacritty.toml rename to arch-user/config/alacritty/alacritty.toml.tmpl diff --git a/arch-user/config/bash/bashrc b/arch-user/config/bash/bashrc index d9c6e09..76154cf 100644 --- a/arch-user/config/bash/bashrc +++ b/arch-user/config/bash/bashrc @@ -4,10 +4,12 @@ stty intr ^K +alias ssh='wssh' +alias sudo='wsudo' + alias ls='ls --color=auto' alias grep='grep --color=auto' alias node='NODE_NO_READLINE=1 rlwrap node' -alias ssh='wssh' export EDITOR=vim diff --git a/arch-user/config/fontconfig/fonts.conf b/arch-user/config/fontconfig/fonts.conf.tmpl similarity index 100% rename from arch-user/config/fontconfig/fonts.conf rename to arch-user/config/fontconfig/fonts.conf.tmpl diff --git a/arch-user/config/git/config b/arch-user/config/git/config.tmpl similarity index 100% rename from arch-user/config/git/config rename to arch-user/config/git/config.tmpl diff --git a/arch-user/config/i3blocks/config b/arch-user/config/i3blocks/config.tmpl similarity index 100% rename from arch-user/config/i3blocks/config rename to arch-user/config/i3blocks/config.tmpl diff --git a/arch-user/config/vim/vimrc b/arch-user/config/vim/vimrc.tmpl similarity index 100% rename from arch-user/config/vim/vimrc rename to arch-user/config/vim/vimrc.tmpl diff --git a/arch-user/config/workspace-compat/profile.tmpl b/arch-user/config/workspace-compat/profile.tmpl index 37c2a8e..4ae538e 100644 --- a/arch-user/config/workspace-compat/profile.tmpl +++ b/arch-user/config/workspace-compat/profile.tmpl @@ -16,25 +16,30 @@ cat << 'WSCOMPAT_EOF_04tcIQE7' > "$WSCOMPAT_DIR/bashrc" [ -f ~/.bashrc ] && . ~/.bashrc stty intr ^K alias ssh='wssh' - +alias sudo='wsudo' WSCOMPAT_EOF_04tcIQE7 export VIMINIT="source $WSCOMPAT_DIR/vimrc" cat << 'WSCOMPAT_EOF_04tcIQE7' > "$WSCOMPAT_DIR/vimrc" -{{ template "vimrc" . }} +{{ tmpl.Inline (file.Read "config/vim/vimrc.tmpl") . }} WSCOMPAT_EOF_04tcIQE7 export INPUTRC="$WSCOMPAT_DIR/inputrc" cat << 'WSCOMPAT_EOF_04tcIQE7' > "$WSCOMPAT_DIR/inputrc" -{{ template "inputrc" . }} +{{ tmpl.Inline (file.Read "config/readline/inputrc") . }} WSCOMPAT_EOF_04tcIQE7 export LESSKEYIN="$WSCOMPAT_DIR/lesskey" cat << 'WSCOMPAT_EOF_04tcIQE7' > "$WSCOMPAT_DIR/lesskey" -{{ template "lesskey" . }} +{{ tmpl.Inline (file.Read "config/less/lesskey") . }} WSCOMPAT_EOF_04tcIQE7 cat << 'WSCOMPAT_EOF_04tcIQE7' > "$WSCOMPAT_DIR/wssh" -{{ template "wssh" . }} +{{ tmpl.Inline (file.Read "bin/wssh") . }} WSCOMPAT_EOF_04tcIQE7 chmod +x "$WSCOMPAT_DIR/wssh" + +cat << 'WSCOMPAT_EOF_04tcIQE7' > "$WSCOMPAT_DIR/wsudo" +{{ tmpl.Inline (file.Read "bin/wsudo") . }} +WSCOMPAT_EOF_04tcIQE7 +chmod +x "$WSCOMPAT_DIR/wsudo" diff --git a/arch-user/install.sh b/arch-user/install.sh index 6d80a82..983905b 100755 --- a/arch-user/install.sh +++ b/arch-user/install.sh @@ -85,12 +85,7 @@ cp -rf data/* ~/.local/share ########### compat ############ export IS_COMPAT=1 -gomplate --file config/workspace-compat/profile.tmpl \ - -t vimrc=config/vim/vimrc \ - -t inputrc=config/readline/inputrc \ - -t lesskey=config/less/lesskey \ - -t wssh=bin/wssh \ - --out ~/.config/workspace-compat/profile +gomplate --file config/workspace-compat/profile.tmpl --out ~/.config/workspace-compat/profile export IS_COMPAT=0 ###############################