Commit 2417b81e8317
Changed files (8)
android
android/suzu/bin/sp
@@ -0,0 +1,41 @@
+#!/data/data/com.termux/files/usr/bin/bash
+# sp - shpool session wrapper for Boox (uses mosh for resilience)
+# Usage: sp <host> [session] — attach to shpool session via mosh
+# sp -s <host> [session] — use plain SSH instead of mosh
+# sp <host> — attach to 'default' session
+# sp — show usage
+set -euo pipefail
+
+USE_SSH=0
+if [ "${1:-}" = "-s" ]; then
+ USE_SSH=1
+ shift
+fi
+
+if [ $# -eq 0 ]; then
+ echo "Usage: sp [-s] <host> [session]"
+ echo ""
+ echo "Options:"
+ echo " -s Use SSH instead of mosh"
+ echo ""
+ echo "Examples:"
+ echo " sp rhea # mosh to 'default' session on rhea.vpn"
+ echo " sp rhea dev # mosh to 'dev' session on rhea.vpn"
+ echo " sp -s rhea dev # SSH to 'dev' session on rhea.vpn"
+ exit 0
+fi
+
+HOST="$1"
+SESSION="${2:-default}"
+
+# Append .vpn if not already qualified
+case "$HOST" in
+ *.vpn|*.home|*.sbr.pm) ;;
+ *) HOST="${HOST}.vpn" ;;
+esac
+
+if [ "$USE_SSH" -eq 1 ]; then
+ exec ssh -t "$HOST" "shpool-ssh-wrapper ${SESSION}"
+else
+ exec mosh "$HOST" -- shpool-ssh-wrapper "${SESSION}"
+fi
android/suzu/generate-ssh-config.nix
@@ -0,0 +1,1 @@
+../boox/generate-ssh-config.nix
\ No newline at end of file
android/suzu/ssh_config
@@ -0,0 +1,218 @@
+# Boox (osaka) SSH config — auto-generated from globals.nix
+# Do not edit manually! Regenerate with: make boox/ssh-config
+#
+# Generated entries: VPN, LAN, and .sbr.pm hosts
+
+Host *
+ ServerAliveInterval 60
+ AddKeysToAgent yes
+ IdentityFile ~/.ssh/id_ed25519
+ StrictHostKeyChecking accept-new
+
+# === Homelab ===
+
+Host aion.vpn
+ HostName 10.100.0.49
+ User vincent
+
+Host aion.sbr.pm
+ HostName aion.sbr.pm
+ User vincent
+
+Host aion.home
+ HostName 192.168.1.49
+ User vincent
+
+Host aix.vpn
+ HostName 10.100.0.89
+ User vincent
+
+Host aix.sbr.pm
+ HostName aix.sbr.pm
+ User vincent
+
+Host aomi.vpn
+ HostName 10.100.0.17
+ User vincent
+
+Host aomi.sbr.pm
+ HostName aomi.sbr.pm
+ User vincent
+
+Host aomi.home
+ HostName 192.168.1.23
+ User vincent
+
+Host athena.vpn
+ HostName 10.100.0.83
+ User vincent
+
+Host athena.sbr.pm
+ HostName athena.sbr.pm
+ User vincent
+
+Host athena.home
+ HostName 192.168.1.183
+ User vincent
+
+Host carthage.vpn
+ HostName 10.100.0.1
+ User vincent
+
+Host carthage.sbr.pm
+ HostName carthage.sbr.pm
+ User vincent
+
+Host demeter.vpn
+ HostName 10.100.0.82
+ User vincent
+
+Host demeter.sbr.pm
+ HostName demeter.sbr.pm
+ User vincent
+
+Host demeter.home
+ HostName 192.168.1.182
+ User vincent
+
+Host hass.vpn
+ HostName 10.100.0.81
+ User vincent
+
+Host hass.sbr.pm
+ HostName hass.sbr.pm
+ User vincent
+
+Host hass.home
+ HostName 192.168.1.181
+ User vincent
+
+Host hokkaido.vpn
+ HostName 10.100.0.5
+ User vincent
+
+Host hokkaido.sbr.pm
+ HostName hokkaido.sbr.pm
+ User vincent
+
+Host hokkaido.home
+ HostName 192.168.1.115
+ User vincent
+
+Host kerkouane.vpn
+ HostName 10.100.0.1
+ User vincent
+
+Host kerkouane.sbr.pm
+ HostName kerkouane.sbr.pm
+ User vincent
+
+Host kyushu.vpn
+ HostName 10.100.0.19
+ User vincent
+
+Host kyushu.sbr.pm
+ HostName kyushu.sbr.pm
+ User vincent
+
+Host kyushu.home
+ HostName 192.168.1.36
+ User vincent
+
+Host nagoya.vpn
+ HostName 10.100.0.80
+ User vincent
+
+Host nagoya.sbr.pm
+ HostName nagoya.sbr.pm
+ User vincent
+
+Host nagoya.home
+ HostName 192.168.1.80
+ User vincent
+
+Host okinawa.vpn
+ HostName 10.100.0.14
+ User vincent
+
+Host okinawa.sbr.pm
+ HostName okinawa.sbr.pm
+ User vincent
+
+Host okinawa.home
+ HostName 192.168.1.42
+ User vincent
+
+Host osaka.vpn
+ HostName 10.100.0.64
+ User vincent
+
+Host osaka.sbr.pm
+ HostName osaka.sbr.pm
+ User vincent
+
+Host rhea.vpn
+ HostName 10.100.0.50
+ User vincent
+
+Host rhea.sbr.pm
+ HostName rhea.sbr.pm
+ User vincent
+
+Host rhea.home
+ HostName 192.168.1.50
+ User vincent
+
+Host sakhalin.vpn
+ HostName 10.100.0.16
+ User vincent
+
+Host sakhalin.sbr.pm
+ HostName sakhalin.sbr.pm
+ User vincent
+
+Host sakhalin.home
+ HostName 192.168.1.70
+ User vincent
+
+Host shikoku.vpn
+ HostName 10.100.0.2
+ User vincent
+
+Host shikoku.sbr.pm
+ HostName shikoku.sbr.pm
+ User vincent
+
+Host shikoku.home
+ HostName 192.168.1.24
+ User vincent
+
+Host suzu.vpn
+ HostName 10.100.0.65
+ User vincent
+
+Host suzu.sbr.pm
+ HostName suzu.sbr.pm
+ User vincent
+
+Host wakasu.vpn
+ HostName 10.100.0.8
+ User vincent
+
+Host wakasu.sbr.pm
+ HostName wakasu.sbr.pm
+ User vincent
+
+# === Git forges ===
+
+Host github.com
+ User git
+ IdentityFile ~/.ssh/id_ed25519
+
+Host gitlab.com
+ User git
+ IdentityFile ~/.ssh/id_ed25519
+
+Host codeberg.org
+ User git
+ IdentityFile ~/.ssh/id_ed25519
android/suzu/sync.sh
@@ -0,0 +1,43 @@
+#!/data/data/com.termux/files/usr/bin/bash
+# Sync Light Phone (suzu) Termux config from the home repo
+# Run after cloning: ~/src/home/android/suzu/sync.sh
+set -euo pipefail
+
+SUZU_DIR="$HOME/src/home/android/suzu"
+
+if [ ! -d "$SUZU_DIR" ]; then
+ echo "Error: home repo not found at ~/src/home"
+ echo "Clone it first: git clone <repo> ~/src/home"
+ exit 1
+fi
+
+echo "==> Installing packages..."
+pkg install -y openssh git zsh curl wget rsync jq mosh htop 2>/dev/null || true
+
+echo "==> Syncing SSH config..."
+mkdir -p ~/.ssh
+chmod 700 ~/.ssh
+ln -snf "$SUZU_DIR/ssh_config" ~/.ssh/config
+chmod 600 ~/.ssh/config 2>/dev/null || true
+
+echo "==> Syncing Termux config..."
+mkdir -p ~/.termux
+ln -snf "$SUZU_DIR/termux.properties" ~/.termux/termux.properties
+# Keep default dark colors — no colors.properties override
+
+echo "==> Syncing shell config..."
+ln -snf "$SUZU_DIR/zshrc" ~/.zshrc
+
+echo "==> Syncing bin..."
+mkdir -p ~/bin
+for f in "$SUZU_DIR"/bin/*; do
+ ln -snf "$f" ~/bin/"$(basename "$f")"
+done
+
+echo "==> Reloading Termux settings..."
+termux-reload-settings 2>/dev/null || true
+
+echo "==> Pulling latest from repo..."
+(cd ~/src/home && git pull --ff-only 2>/dev/null || echo " ⚠️ Could not fast-forward, run git pull manually")
+
+echo "✅ Sync complete!"
android/suzu/termux.properties
@@ -0,0 +1,23 @@
+# Termux properties for Light Phone (suzu)
+
+# Extra keys row — essential on a small phone screen
+extra-keys = [['ESC','/','-','HOME','UP','END','PGUP'],['TAB','CTRL','ALT','LEFT','DOWN','RIGHT','PGDN']]
+
+# Bell
+bell-character = vibrate
+
+# Terminal
+terminal-margin-horizontal = 2
+terminal-margin-vertical = 2
+
+# Keyboard
+enforce-char-based-input = true
+
+# Handle links
+terminal-onclick-url-open = true
+
+# Allow external apps
+allow-external-apps = true
+
+# Back key behavior
+back-key = escape
android/suzu/zshrc
@@ -0,0 +1,94 @@
+# Light Phone (suzu) Termux zsh config
+
+# Identity
+export USER="vincent"
+
+# PATH
+export PATH="$HOME/bin:$PATH"
+
+# Prompt — matching homelab style, compact for small screen
+_shorten_path() {
+ local p="$1" max="${2:-40}"
+ (( ${#p} <= max )) && { echo "$p"; return; }
+ local parts=("${(@s:/:)p}")
+ local len=${#parts[@]}
+ local i
+ for (( i=1; i <= len - 2; i++ )); do
+ (( ${#p} <= max )) && break
+ (( ${#parts[$i]} <= 2 )) && continue
+ if [[ "${parts[$i]}" == .* ]]; then
+ parts[$i]=".${parts[$i]:1:1}"
+ else
+ parts[$i]="${parts[$i]:0:1}"
+ fi
+ p="${(j:/:)parts}"
+ done
+ echo "$p"
+}
+
+_prompt_dir() {
+ local dir="${PWD/#$HOME/~}"
+ if (( ${#dir} > 40 )); then
+ dir=$(_shorten_path "$dir" 40)
+ fi
+ echo "$dir"
+}
+
+_prompt_git_branch() {
+ local branch
+ branch=$(git symbolic-ref --short HEAD 2>/dev/null)
+ [[ -n $branch ]] && echo " $branch"
+}
+
+setopt PROMPT_SUBST
+export PROMPT='%m:$(_prompt_dir)$(_prompt_git_branch) %(!.#.$) '
+
+# History
+HISTFILE=~/.zsh_history
+HISTSIZE=5000
+SAVEHIST=5000
+setopt SHARE_HISTORY
+setopt HIST_IGNORE_DUPS
+setopt HIST_IGNORE_SPACE
+
+# Completion
+autoload -Uz compinit && compinit -C
+zstyle ':completion:*' menu select
+
+# Key bindings
+bindkey -e
+bindkey '^[[A' up-line-or-search
+bindkey '^[[B' down-line-or-search
+
+# === Aliases ===
+
+# Homelab SSH shortcuts
+alias athena='ssh athena.vpn'
+alias demeter='ssh demeter.vpn'
+alias rhea='ssh rhea.vpn'
+alias aion='ssh aion.vpn'
+alias kerkouane='ssh kerkouane.vpn'
+alias shikoku='ssh shikoku.vpn'
+alias nagoya='ssh nagoya.vpn'
+alias kyushu='ssh kyushu.vpn'
+alias aomi='ssh aomi.vpn'
+alias sakhalin='ssh sakhalin.vpn'
+alias okinawa='ssh okinawa.vpn'
+alias wakasu='ssh wakasu.vpn'
+
+# General
+alias ll='ls -la'
+alias la='ls -A'
+alias ..='cd ..'
+alias ...='cd ../..'
+
+# Git
+alias gs='git status'
+alias gl='git log --oneline -20'
+alias gp='git pull --ff-only'
+
+# Sync config from repo
+alias suzu-sync='~/src/home/android/suzu/sync.sh'
+
+# Quick access
+alias home='cd ~/src/home'
globals.nix
@@ -18,6 +18,8 @@ _: {
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGThdcaPfIaB7d+K5uODqEusLKGI5ZCye0aNOCaMoInO Kyushu's ssh key"
# Boox (osaka) Termux
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICa0SyAspL7PBPudCjb7oCBG17WRmYnDQF7/BYkFwqDi oksaka-termux"
+ # Light Phone (suzu) Termux
+ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK0Q1oXzMMJG03n2VoxKKOGruyGBy8V8yanqgeeUYm+N suzu-termux"
];
};
syncthingFolders = {
Makefile
@@ -91,11 +91,17 @@ fmt: ## Format Nix files
dots: ## Build dotfiles
@$(MAKE) -C dots
-.PHONY: boox/ssh-config
+.PHONY: boox/ssh-config suzu/ssh-config android/ssh-config
boox/ssh-config: ## Generate Boox SSH config from globals.nix
nix eval --raw -f android/boox/generate-ssh-config.nix > android/boox/ssh_config
@echo "✅ android/boox/ssh_config regenerated"
+suzu/ssh-config: ## Generate Light Phone SSH config from globals.nix
+ nix eval --raw -f android/suzu/generate-ssh-config.nix > android/suzu/ssh_config
+ @echo "✅ android/suzu/ssh_config regenerated"
+
+android/ssh-config: boox/ssh-config suzu/ssh-config ## Regenerate all Android SSH configs
+
##@ Keyboards
.PHONY: keyboards keyboards/moonlander/build keyboards/moonlander/flash keyboards/moonlander/update keyboards/moonlander/clean