Add btop, overclock wizard option, click-to-copy decode UI
- setup.sh: Add btop to apt install for temp monitoring - first-boot-wizard: Add Step 4 for overclock configuration - Detects Pi 4/5 model - Asks about active cooling - Offers appropriate overclock settings (2.0GHz Pi4, 2.8GHz Pi5) - Prompts for restart if enabled - decode.html: Make message box click-to-copy, remove separate button - Shows "(click to copy)" hint - Visual feedback on hover and copy 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -120,13 +120,11 @@
|
|||||||
<h6><i class="bi bi-check-circle me-2"></i>Message Decrypted Successfully!</h6>
|
<h6><i class="bi bi-check-circle me-2"></i>Message Decrypted Successfully!</h6>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<label class="form-label text-muted">Decoded Message:</label>
|
<label class="form-label text-muted">Decoded Message: <small class="text-secondary">(click to copy)</small></label>
|
||||||
<div class="alert-message p-3 rounded bg-dark border border-secondary mb-2" id="decodedContent" style="white-space: pre-wrap;">{{ decoded_message }}</div>
|
<div class="alert-message p-3 rounded bg-dark border border-secondary mb-3" id="decodedContent" style="white-space: pre-wrap; cursor: pointer; transition: border-color 0.2s;"
|
||||||
<div class="d-flex justify-content-end mb-3">
|
onclick="navigator.clipboard.writeText(this.innerText).then(() => { this.style.borderColor = '#198754'; this.dataset.origText = this.innerHTML; this.innerHTML = '<i class=\'bi bi-check-circle text-success\'></i> Copied to clipboard!'; setTimeout(() => { this.innerHTML = this.dataset.origText; this.style.borderColor = ''; }, 1500); }).catch(() => alert('Failed to copy'))"
|
||||||
<button class="btn btn-sm btn-outline-light" onclick="navigator.clipboard.writeText(document.getElementById('decodedContent').innerText).then(() => { this.innerHTML = '<i class=\'bi bi-check\'></i> Copied!'; setTimeout(() => this.innerHTML = '<i class=\'bi bi-clipboard\'></i> Copy', 2000); }).catch(() => alert('Failed to copy'))">
|
onmouseover="this.style.borderColor = '#6c757d'"
|
||||||
<i class="bi bi-clipboard"></i> Copy
|
onmouseout="this.style.borderColor = ''">{{ decoded_message }}</div>
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<a href="/decode" class="btn btn-outline-light w-100">
|
<a href="/decode" class="btn btn-outline-light w-100">
|
||||||
<i class="bi bi-arrow-repeat me-2"></i>Decode Another
|
<i class="bi bi-arrow-repeat me-2"></i>Decode Another
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ CHANNEL_KEY=""
|
|||||||
clear
|
clear
|
||||||
gum style \
|
gum style \
|
||||||
--foreground 212 --bold \
|
--foreground 212 --bold \
|
||||||
"Step 1 of 3: HTTPS Configuration"
|
"Step 1 of 4: HTTPS Configuration"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
gum style --foreground 245 "\
|
gum style --foreground 245 "\
|
||||||
@@ -104,7 +104,7 @@ if [ "$ENABLE_HTTPS" = "true" ]; then
|
|||||||
clear
|
clear
|
||||||
gum style \
|
gum style \
|
||||||
--foreground 212 --bold \
|
--foreground 212 --bold \
|
||||||
"Step 2 of 3: Port Configuration"
|
"Step 2 of 4: Port Configuration"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
gum style --foreground 245 "\
|
gum style --foreground 245 "\
|
||||||
@@ -133,7 +133,7 @@ fi
|
|||||||
clear
|
clear
|
||||||
gum style \
|
gum style \
|
||||||
--foreground 212 --bold \
|
--foreground 212 --bold \
|
||||||
"Step 3 of 3: Channel Key Configuration"
|
"Step 3 of 4: Channel Key Configuration"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
gum style --foreground 245 "\
|
gum style --foreground 245 "\
|
||||||
@@ -193,6 +193,58 @@ else
|
|||||||
sleep 0.5
|
sleep 0.5
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# Step 4: Overclock Configuration
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
ENABLE_OVERCLOCK="false"
|
||||||
|
NEEDS_RESTART="false"
|
||||||
|
|
||||||
|
# Detect Pi model
|
||||||
|
PI_MODEL=$(cat /proc/device-tree/model 2>/dev/null | tr -d '\0')
|
||||||
|
|
||||||
|
if [[ "$PI_MODEL" == *"Raspberry Pi 4"* ]] || [[ "$PI_MODEL" == *"Raspberry Pi 5"* ]]; then
|
||||||
|
clear
|
||||||
|
gum style \
|
||||||
|
--foreground 212 --bold \
|
||||||
|
"Step 4 of 4: Performance Tuning"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
gum style --foreground 245 "\
|
||||||
|
Detected: $PI_MODEL
|
||||||
|
|
||||||
|
Overclocking can improve DCT encode/decode performance.
|
||||||
|
This is ONLY recommended if you have active cooling:
|
||||||
|
• Heatsink + Fan
|
||||||
|
• Active cooler case
|
||||||
|
|
||||||
|
Without cooling, the Pi may throttle or become unstable."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if gum confirm "Do you have active cooling (heatsink + fan)?" --default=false; then
|
||||||
|
echo ""
|
||||||
|
gum style --foreground 245 "\
|
||||||
|
Recommended overclock settings:
|
||||||
|
• Pi 4: 2.0 GHz (stock 1.5 GHz) - ~33% faster
|
||||||
|
• Pi 5: 2.8 GHz (stock 2.4 GHz) - ~17% faster"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if gum confirm "Enable overclock?" --default=true; then
|
||||||
|
ENABLE_OVERCLOCK="true"
|
||||||
|
NEEDS_RESTART="true"
|
||||||
|
gum style --foreground 82 "✓ Overclock will be enabled (restart required)"
|
||||||
|
else
|
||||||
|
gum style --foreground 214 "→ Running at stock speed"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
gum style --foreground 214 "→ Skipping overclock (no active cooling)"
|
||||||
|
fi
|
||||||
|
sleep 0.5
|
||||||
|
else
|
||||||
|
# Not a Pi 4/5, skip overclock
|
||||||
|
:
|
||||||
|
fi
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# Apply Configuration
|
# Apply Configuration
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
@@ -261,6 +313,38 @@ fi
|
|||||||
gum spin --spinner dot --title "Reloading systemd..." -- sudo systemctl daemon-reload
|
gum spin --spinner dot --title "Reloading systemd..." -- sudo systemctl daemon-reload
|
||||||
gum style --foreground 82 "✓ Systemd reloaded"
|
gum style --foreground 82 "✓ Systemd reloaded"
|
||||||
|
|
||||||
|
# Apply overclock if requested
|
||||||
|
if [ "$ENABLE_OVERCLOCK" = "true" ]; then
|
||||||
|
gum spin --spinner dot --title "Configuring overclock..." -- bash -c "
|
||||||
|
CONFIG_FILE='/boot/firmware/config.txt'
|
||||||
|
# Fallback for older Pi OS
|
||||||
|
if [ ! -f \"\$CONFIG_FILE\" ]; then
|
||||||
|
CONFIG_FILE='/boot/config.txt'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if overclock already configured
|
||||||
|
if ! grep -q '^over_voltage=' \"\$CONFIG_FILE\" 2>/dev/null; then
|
||||||
|
# Detect Pi model for appropriate settings
|
||||||
|
PI_MODEL=\$(cat /proc/device-tree/model 2>/dev/null | tr -d '\0')
|
||||||
|
|
||||||
|
echo '' | sudo tee -a \"\$CONFIG_FILE\" >/dev/null
|
||||||
|
echo '# Overclock (configured by Stegasoo wizard)' | sudo tee -a \"\$CONFIG_FILE\" >/dev/null
|
||||||
|
|
||||||
|
if [[ \"\$PI_MODEL\" == *'Raspberry Pi 5'* ]]; then
|
||||||
|
# Pi 5 overclock
|
||||||
|
echo 'over_voltage=4' | sudo tee -a \"\$CONFIG_FILE\" >/dev/null
|
||||||
|
echo 'arm_freq=2800' | sudo tee -a \"\$CONFIG_FILE\" >/dev/null
|
||||||
|
else
|
||||||
|
# Pi 4 overclock
|
||||||
|
echo 'over_voltage=6' | sudo tee -a \"\$CONFIG_FILE\" >/dev/null
|
||||||
|
echo 'arm_freq=2000' | sudo tee -a \"\$CONFIG_FILE\" >/dev/null
|
||||||
|
echo 'gpu_freq=700' | sudo tee -a \"\$CONFIG_FILE\" >/dev/null
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
"
|
||||||
|
gum style --foreground 82 "✓ Overclock configured"
|
||||||
|
fi
|
||||||
|
|
||||||
gum spin --spinner dot --title "Starting Stegasoo..." -- bash -c "sudo systemctl restart stegasoo && sleep 2"
|
gum spin --spinner dot --title "Starting Stegasoo..." -- bash -c "sudo systemctl restart stegasoo && sleep 2"
|
||||||
|
|
||||||
if systemctl is-active --quiet stegasoo; then
|
if systemctl is-active --quiet stegasoo; then
|
||||||
@@ -345,3 +429,27 @@ echo ""
|
|||||||
|
|
||||||
gum style --foreground 212 --bold "Enjoy Stegasoo!"
|
gum style --foreground 212 --bold "Enjoy Stegasoo!"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
|
# Prompt for restart if overclock was enabled
|
||||||
|
if [ "$NEEDS_RESTART" = "true" ]; then
|
||||||
|
echo ""
|
||||||
|
gum style \
|
||||||
|
--border rounded \
|
||||||
|
--border-foreground 226 \
|
||||||
|
--padding "1 2" \
|
||||||
|
--foreground 226 \
|
||||||
|
"Restart Required" \
|
||||||
|
"" \
|
||||||
|
"Overclock settings require a restart to take effect."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if gum confirm "Restart now?" --default=true; then
|
||||||
|
gum style --foreground 82 "Restarting in 3 seconds..."
|
||||||
|
sleep 3
|
||||||
|
sudo reboot
|
||||||
|
else
|
||||||
|
gum style --foreground 214 "Remember to restart later for overclock to take effect:"
|
||||||
|
gum style --foreground 245 " sudo reboot"
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|||||||
@@ -148,7 +148,8 @@ sudo apt-get install -y \
|
|||||||
liblzma-dev \
|
liblzma-dev \
|
||||||
libzbar0 \
|
libzbar0 \
|
||||||
libjpeg-dev \
|
libjpeg-dev \
|
||||||
python3-dev
|
python3-dev \
|
||||||
|
btop
|
||||||
|
|
||||||
echo -e "${GREEN}[3/11]${NC} Installing gum (TUI toolkit)..."
|
echo -e "${GREEN}[3/11]${NC} Installing gum (TUI toolkit)..."
|
||||||
# Add Charm repo for gum
|
# Add Charm repo for gum
|
||||||
|
|||||||
Reference in New Issue
Block a user