diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
index 0a2289d..0a8e9d7 100644
--- a/.github/copilot-instructions.md
+++ b/.github/copilot-instructions.md
@@ -1,10 +1,10 @@
-# Copilot Instructions — Nexus Terminal
+# Copilot Instructions — Alchementary Link
## Build & Test
```bash
make deps # go mod download + npm install
-make build # production build → build/bin/nexus-terminal.app
+make build # production build → build/bin/alchementary-link.app
make dev # wails dev with hot reload
make test # go test ./... -v -count=1
make lint # golangci-lint run ./...
@@ -31,7 +31,7 @@ Wails v2 desktop app: Go backend + HTML/CSS/JS frontend rendered in a native web
- `sftpclient/` — SFTP file operations (browse, upload, download, rename, delete)
- `sshconfig/` — OpenSSH `~/.ssh/config` parser and importer
- `recording/` — asciicast v2 session recording and playback
-- `exportimport/` — encrypted profile bundles (.nexus format)
+- `exportimport/` — encrypted profile bundles (.link format)
- `updater/` — GitHub Releases update checker
- `knownhosts/` — SSH host key management
- `validation/` — profile and protocol validation
@@ -40,7 +40,7 @@ Wails v2 desktop app: Go backend + HTML/CSS/JS frontend rendered in a native web
**Frontend** (`frontend/`):
- Plain HTML/CSS/JS — no framework, no bundler, no ES modules
- `index.html` is the app shell; loads CSS then JS in strict order
-- `src/js/` — 18 modules, each IIFE-wrapped, exporting to `window.NexusTerminal`
+- `src/js/` — 18 modules, each IIFE-wrapped, exporting to `window.AlchementaryLink`
- `src/css/` — modular stylesheets; `tokens.css` defines all design tokens
- Vendor libs (xterm.js, addons) live in `src/js/lib/` and `src/css/lib/` — auto-copied, gitignored
@@ -77,7 +77,7 @@ The macOS webview silently blocks or breaks several standard web APIs. These con
- Tests use `t.TempDir()` for isolation, `t.Fatalf()` for setup failures
**Frontend patterns:**
-- Every JS file is IIFE-wrapped and exports to `window.NexusTerminal` namespace
+- Every JS file is IIFE-wrapped and exports to `window.AlchementaryLink` namespace
- Script load order matters (defined in `index.html`) — utils → state → notifications → sidebar → tabs → themes → terminal → profiles → raw → github → settings → commands → secrets → recordings → sftp → splitpane → snippets → app
- DOM helpers: `createElement(tag, className, attrs)` from utils.js (supports `textContent`, `innerHTML`, `dataset`, `on*` event handlers)
- Profile editor uses `_renderSection(title, fields)` pattern with `_field(type, name, label, value, opts)` helper for form generation
diff --git a/.github/workflows/release-builds.yml b/.github/workflows/release-builds.yml
index 66316d5..57a1c7d 100644
--- a/.github/workflows/release-builds.yml
+++ b/.github/workflows/release-builds.yml
@@ -100,35 +100,35 @@ jobs:
- name: Package (zip)
if: matrix.archive_type == 'zip' && matrix.runner != 'windows-latest'
run: |
- archive="nexus-terminal-${{ matrix.platform }}.zip"
+ archive="alchementary-link-${{ matrix.platform }}.zip"
cd build/bin
zip -r "../../${archive}" .
- name: Package (tar)
if: matrix.archive_type == 'tar'
run: |
- archive="nexus-terminal-${{ matrix.platform }}.tar.gz"
+ archive="alchementary-link-${{ matrix.platform }}.tar.gz"
tar -czf "${archive}" -C build/bin .
- name: Package (Windows zip)
if: matrix.archive_type == 'zip' && matrix.runner == 'windows-latest'
shell: pwsh
run: |
- $archive = "nexus-terminal-${{ matrix.platform }}.zip"
+ $archive = "alchementary-link-${{ matrix.platform }}.zip"
Compress-Archive -Path "build/bin/*" -DestinationPath $archive
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
- name: nexus-terminal-${{ matrix.platform }}
+ name: alchementary-link-${{ matrix.platform }}
path: |
- nexus-terminal-${{ matrix.platform }}.zip
- nexus-terminal-${{ matrix.platform }}.tar.gz
+ alchementary-link-${{ matrix.platform }}.zip
+ alchementary-link-${{ matrix.platform }}.tar.gz
- name: Attach to GitHub Release
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
files: |
- nexus-terminal-${{ matrix.platform }}.zip
- nexus-terminal-${{ matrix.platform }}.tar.gz
+ alchementary-link-${{ matrix.platform }}.zip
+ alchementary-link-${{ matrix.platform }}.tar.gz
diff --git a/.gitignore b/.gitignore
index e7ce2ea..39f702f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,5 @@
# ==========================================================================
-# Nexus Terminal — .gitignore
+# Alchementary Link — .gitignore
# ==========================================================================
# ── Build output ──────────────────────────────────────────────────────────
diff --git a/Makefile b/Makefile
index 15c3268..9f6b1ba 100644
--- a/Makefile
+++ b/Makefile
@@ -3,9 +3,9 @@
# Resolve the Wails binary. Prefer wails on PATH; fall back to GOPATH/bin.
WAILS := $(or $(shell which wails 2>/dev/null),$(shell go env GOPATH)/bin/wails)
VERSION := $(shell git describe --tags --abbrev=0 2>/dev/null || echo dev)-$(shell git rev-parse --short HEAD 2>/dev/null || echo unknown)
-LD_UPDATE_URL := $(if $(NEXUS_UPDATE_URL),-X github.com/andydixon/nexus/internal/api.appUpdateURL=$(NEXUS_UPDATE_URL),)
+LD_UPDATE_URL := $(if $(LINK_UPDATE_URL),-X github.com/andydixon/link/internal/api.appUpdateURL=$(LINK_UPDATE_URL),)
UPX_FLAGS ?=
-NEXUS_FORCE_MACOS_UPX ?= 0
+LINK_FORCE_MACOS_UPX ?= 0
GOBIN_DIR := $(shell go env GOPATH)/bin
export PATH := $(GOBIN_DIR):$(PATH)
@@ -18,11 +18,11 @@ deps: frontend-deps
upx-check:
@command -v upx >/dev/null 2>&1 || { echo "UPX is required for compressed builds. Install it first, for example: brew install upx"; exit 1; }
- @if [ "$$(uname -s)" = "Darwin" ] && [ "$(NEXUS_FORCE_MACOS_UPX)" != "1" ]; then \
- echo "UPX compression is disabled for macOS by default. Use ./release.sh for a zipped .app, or run NEXUS_FORCE_MACOS_UPX=1 UPX_FLAGS='--force-macos --best --no-color --no-progress' make build-compressed."; \
+ @if [ "$$(uname -s)" = "Darwin" ] && [ "$(LINK_FORCE_MACOS_UPX)" != "1" ]; then \
+ echo "UPX compression is disabled for macOS by default. Use ./release.sh for a zipped .app, or run LINK_FORCE_MACOS_UPX=1 UPX_FLAGS='--force-macos --best --no-color --no-progress' make build-compressed."; \
exit 1; \
fi
- @if [ "$$(uname -s)" = "Darwin" ] && [ "$(NEXUS_FORCE_MACOS_UPX)" = "1" ] && ! printf '%s\n' "$(UPX_FLAGS)" | grep -q -- '--force-macos'; then \
+ @if [ "$$(uname -s)" = "Darwin" ] && [ "$(LINK_FORCE_MACOS_UPX)" = "1" ] && ! printf '%s\n' "$(UPX_FLAGS)" | grep -q -- '--force-macos'; then \
echo "macOS UPX builds must pass --force-macos in UPX_FLAGS."; \
exit 1; \
fi
@@ -37,11 +37,11 @@ dev: deps
# Production build
build: deps
- CGO_ENABLED=0 $(WAILS) build -trimpath -ldflags "-s -w -buildid= -X github.com/andydixon/nexus/internal/api.appVersion=$(VERSION) $(LD_UPDATE_URL)"
+ CGO_ENABLED=0 $(WAILS) build -trimpath -ldflags "-s -w -buildid= -X github.com/andydixon/link/internal/api.appVersion=$(VERSION) $(LD_UPDATE_URL)"
# Production build with UPX compression
build-compressed: deps upx-check
- CGO_ENABLED=0 $(WAILS) build -trimpath -upx $(if $(UPX_FLAGS),-upxflags "$(UPX_FLAGS)",) -ldflags "-s -w -buildid= -X github.com/andydixon/nexus/internal/api.appVersion=$(VERSION) $(LD_UPDATE_URL)"
+ CGO_ENABLED=0 $(WAILS) build -trimpath -upx $(if $(UPX_FLAGS),-upxflags "$(UPX_FLAGS)",) -ldflags "-s -w -buildid= -X github.com/andydixon/link/internal/api.appVersion=$(VERSION) $(LD_UPDATE_URL)"
# Run tests
test:
@@ -74,7 +74,7 @@ release:
# Help
help:
- @echo "Nexus Terminal — Build Targets"
+ @echo "Alchementary Link — Build Targets"
@echo ""
@echo " make deps — Install all dependencies"
@echo " make dev — Run in development mode with hot reload"
diff --git a/README.md b/README.md
index e988308..72c35d8 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,8 @@
-# Nexus Terminal
+# Alchementary Link
**A desktop client for SSH, Telnet, RAW TCP, VNC, GitHub, local terminals, and Leviathan binary analysis — with secure credential handling and a focused, multi-session workflow.**
-Nexus Terminal helps you manage many connections at once, keep terminal work organised, and move files with confidence.
+Alchementary Link helps you manage many connections at once, keep terminal work organised, and move files with confidence.
## Highlights
@@ -17,7 +17,7 @@ Nexus Terminal helps you manage many connections at once, keep terminal work org
## Quick start
-1. Launch Nexus Terminal.
+1. Launch Alchementary Link.
2. Click **New** in the sidebar and create a connection profile.
3. Click **Connect** to open a session in a new tab.
diff --git a/build-all.sh b/build-all.sh
index d937401..9bdbe57 100755
--- a/build-all.sh
+++ b/build-all.sh
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
-# build-all.sh — Cross-build helper for Nexus Terminal (macOS/Linux hosts)
+# build-all.sh — Cross-build helper for Alchementary Link (macOS/Linux hosts)
# Builds all supported targets where the required toolchains are installed.
# Usage: ./build-all.sh
set -euo pipefail
@@ -13,9 +13,9 @@ YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
-log() { echo -e "${GREEN}[nexus]${NC} $1"; }
-warn() { echo -e "${YELLOW}[nexus]${NC} $1"; }
-err() { echo -e "${RED}[nexus]${NC} $1" >&2; }
+log() { echo -e "${GREEN}[link]${NC} $1"; }
+warn() { echo -e "${YELLOW}[link]${NC} $1"; }
+err() { echo -e "${RED}[link]${NC} $1" >&2; }
MIN_GO_VERSION="1.25.12"
WAILS_VERSION="$(awk '$1 == "github.com/wailsapp/wails/v2" { print $2; exit }' go.mod)"
@@ -94,7 +94,7 @@ wails_cmd() {
}
ensure_upx() {
- if ! nexus_bool_enabled "${NEXUS_COMPRESS:-0}"; then
+ if ! link_bool_enabled "${LINK_COMPRESS:-0}"; then
return
fi
if command -v upx >/dev/null 2>&1; then
@@ -132,9 +132,9 @@ build_version() {
build_ldflags() {
local version="$1"
- local flags="-s -w -X github.com/andydixon/nexus/internal/api.appVersion=${version}"
- if [ -n "${NEXUS_UPDATE_URL:-}" ]; then
- flags="${flags} -X github.com/andydixon/nexus/internal/api.appUpdateURL=${NEXUS_UPDATE_URL}"
+ local flags="-s -w -X github.com/andydixon/link/internal/api.appVersion=${version}"
+ if [ -n "${LINK_UPDATE_URL:-}" ]; then
+ flags="${flags} -X github.com/andydixon/link/internal/api.appUpdateURL=${LINK_UPDATE_URL}"
fi
echo "${flags}"
}
@@ -186,24 +186,24 @@ build_target() {
local host_arch_value="$4"
local version="$5"
local platform="${target_os}/${target_arch}"
- nexus_configure_pure_go_build
+ link_configure_pure_go_build
local ldflags
ldflags="$(build_ldflags "${version}")"
local tags
tags="$(build_tags)"
local build_args=("-platform" "$target_os/$target_arch" "-trimpath")
- if nexus_use_upx_for_target "$target_os"; then
+ if link_use_upx_for_target "$target_os"; then
if ! command -v upx >/dev/null 2>&1; then
- warn "Skipping ${platform} (NEXUS_COMPRESS=1 requires UPX)"
+ warn "Skipping ${platform} (LINK_COMPRESS=1 requires UPX)"
((SKIPPED_TARGETS += 1))
return 0
fi
build_args+=("-upx")
- if [ -n "${NEXUS_UPX_FLAGS:-}" ]; then
- build_args+=("-upxflags" "$NEXUS_UPX_FLAGS")
+ if [ -n "${LINK_UPX_FLAGS:-}" ]; then
+ build_args+=("-upxflags" "$LINK_UPX_FLAGS")
fi
- elif nexus_skips_upx_for_target "$target_os"; then
- warn "Skipping UPX compression for ${platform}; distribute the zipped .app instead, or set NEXUS_FORCE_MACOS_UPX=1 with suitable NEXUS_UPX_FLAGS."
+ elif link_skips_upx_for_target "$target_os"; then
+ warn "Skipping UPX compression for ${platform}; distribute the zipped .app instead, or set LINK_FORCE_MACOS_UPX=1 with suitable LINK_UPX_FLAGS."
fi
if [ -n "$tags" ]; then
build_args+=("-tags" "$tags")
diff --git a/build.ps1 b/build.ps1
index 5d8a84b..8c62969 100644
--- a/build.ps1
+++ b/build.ps1
@@ -1,11 +1,11 @@
-# build.ps1 — Windows build script for Nexus Terminal
+# build.ps1 — Windows build script for Alchementary Link
# Usage: .\build.ps1 [dev|build|test|clean|deps]
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
-function Write-Info($Message) { Write-Host "[nexus] $Message" -ForegroundColor Green }
-function Write-Warn($Message) { Write-Host "[nexus] $Message" -ForegroundColor Yellow }
-function Write-Err($Message) { Write-Host "[nexus] $Message" -ForegroundColor Red }
+function Write-Info($Message) { Write-Host "[link] $Message" -ForegroundColor Green }
+function Write-Warn($Message) { Write-Host "[link] $Message" -ForegroundColor Yellow }
+function Write-Err($Message) { Write-Host "[link] $Message" -ForegroundColor Red }
function Test-BoolEnabled([string]$Value) {
return $Value -match '^(1|true|TRUE|yes|YES|on|ON)$'
@@ -67,9 +67,9 @@ function Get-BuildVersion {
}
function Get-Ldflags([string]$Version) {
- $flags = "-s -w -buildid= -X github.com/andydixon/nexus/internal/api.appVersion=$Version"
- if ($env:NEXUS_UPDATE_URL) {
- $flags += " -X github.com/andydixon/nexus/internal/api.appUpdateURL=$($env:NEXUS_UPDATE_URL)"
+ $flags = "-s -w -buildid= -X github.com/andydixon/link/internal/api.appVersion=$Version"
+ if ($env:LINK_UPDATE_URL) {
+ $flags += " -X github.com/andydixon/link/internal/api.appUpdateURL=$($env:LINK_UPDATE_URL)"
}
return $flags
}
@@ -92,13 +92,13 @@ function Build {
Remove-Item Env:CGO_CXXFLAGS -ErrorAction SilentlyContinue
$buildArgs = @('build', '-trimpath')
- if (Test-BoolEnabled $env:NEXUS_COMPRESS) {
+ if (Test-BoolEnabled $env:LINK_COMPRESS) {
if (-not (Get-Command upx -ErrorAction SilentlyContinue)) {
- throw 'NEXUS_COMPRESS=1 requires UPX. Install it first.'
+ throw 'LINK_COMPRESS=1 requires UPX. Install it first.'
}
$buildArgs += '-upx'
- if ($env:NEXUS_UPX_FLAGS) {
- $buildArgs += @('-upxflags', $env:NEXUS_UPX_FLAGS)
+ if ($env:LINK_UPX_FLAGS) {
+ $buildArgs += @('-upxflags', $env:LINK_UPX_FLAGS)
}
}
$buildArgs += @('-ldflags', $ldflags)
diff --git a/build.sh b/build.sh
index e79f261..a7eb273 100755
--- a/build.sh
+++ b/build.sh
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
-# build.sh — Build script for Nexus Terminal
+# build.sh — Build script for Alchementary Link
# Provides a reproducible build process for CI and local builds.
# Usage: ./build.sh [dev|build|test|clean|deps]
set -euo pipefail
@@ -14,12 +14,12 @@ GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
-log() { echo -e "${GREEN}[nexus]${NC} $1"; }
-warn() { echo -e "${YELLOW}[nexus]${NC} $1"; }
-err() { echo -e "${RED}[nexus]${NC} $1" >&2; }
+log() { echo -e "${GREEN}[link]${NC} $1"; }
+warn() { echo -e "${YELLOW}[link]${NC} $1"; }
+err() { echo -e "${RED}[link]${NC} $1" >&2; }
MIN_GO_VERSION="1.25.12"
-WAILS_VERSION="$(nexus_wails_version go.mod)"
+WAILS_VERSION="$(link_wails_version go.mod)"
WAILS_BIN=""
WAILS_USE_GO_RUN=0
@@ -93,16 +93,16 @@ wails_cmd() {
}
ensure_upx() {
- if ! nexus_bool_enabled "${NEXUS_COMPRESS:-0}"; then
+ if ! link_bool_enabled "${LINK_COMPRESS:-0}"; then
return
fi
- if nexus_skips_upx_for_target "$(host_os)"; then
+ if link_skips_upx_for_target "$(host_os)"; then
return
fi
if command -v upx >/dev/null 2>&1; then
return
fi
- err "NEXUS_COMPRESS=1 requires UPX. Install it first, for example: brew install upx"
+ err "LINK_COMPRESS=1 requires UPX. Install it first, for example: brew install upx"
exit 1
}
@@ -134,7 +134,7 @@ check_linux_deps() {
}
build_tags() {
- nexus_build_tags
+ link_build_tags
}
host_os() {
@@ -146,11 +146,11 @@ host_os() {
}
build_version() {
- nexus_build_version
+ link_build_version
}
build_ldflags() {
- nexus_build_ldflags "$1"
+ link_build_ldflags "$1"
}
# Check prerequisites
@@ -200,16 +200,16 @@ build() {
version="$(build_version)"
local tags
tags="$(build_tags)"
- nexus_configure_pure_go_build
+ link_configure_pure_go_build
local build_args=("-trimpath")
- if nexus_bool_enabled "${NEXUS_COMPRESS:-0}"; then
- if nexus_skips_upx_for_target "$(host_os)"; then
- warn "Skipping UPX compression on macOS; distribute the zipped .app instead, or set NEXUS_FORCE_MACOS_UPX=1 with suitable NEXUS_UPX_FLAGS."
+ if link_bool_enabled "${LINK_COMPRESS:-0}"; then
+ if link_skips_upx_for_target "$(host_os)"; then
+ warn "Skipping UPX compression on macOS; distribute the zipped .app instead, or set LINK_FORCE_MACOS_UPX=1 with suitable LINK_UPX_FLAGS."
else
log "Using UPX compression"
build_args+=("-upx")
- if [ -n "${NEXUS_UPX_FLAGS:-}" ]; then
- build_args+=("-upxflags" "$NEXUS_UPX_FLAGS")
+ if [ -n "${LINK_UPX_FLAGS:-}" ]; then
+ build_args+=("-upxflags" "$LINK_UPX_FLAGS")
fi
fi
fi
@@ -222,7 +222,7 @@ build() {
# Replace Wails-generated icon with custom app icon on macOS.
if [[ "$OSTYPE" == darwin* ]]; then
- local app_bundle="build/bin/nexus-terminal.app"
+ local app_bundle="build/bin/alchementary-link.app"
local custom_icns="build/darwin/AppIcon.icns"
if [ -d "$app_bundle" ] && [ -f "$custom_icns" ]; then
cp "$custom_icns" "$app_bundle/Contents/Resources/iconfile.icns"
diff --git a/build/nexus-ssh-icon.svg b/build/alchementary-link-ssh-icon.svg
similarity index 97%
rename from build/nexus-ssh-icon.svg
rename to build/alchementary-link-ssh-icon.svg
index 00c16bf..cded489 100644
--- a/build/nexus-ssh-icon.svg
+++ b/build/alchementary-link-ssh-icon.svg
@@ -100,10 +100,10 @@
-
+
nexus — ssh
+ letter-spacing="3">link — ssh
@@ -111,7 +111,7 @@
user@nexus:~$
+ font-size="38" fill="#8892A4" filter="url(#softGlow)">user@link:~$
CFBundleExecutable
{{.OutputFilename}}CFBundleIdentifier
- com.andydixon.nexusterminal
+ com.alchementary.linkCFBundleVersion{{.Info.ProductVersion}}CFBundleGetInfoString
diff --git a/build/linux/icons/nexus-terminal-128.png b/build/linux/icons/alchementary-link-128.png
similarity index 100%
rename from build/linux/icons/nexus-terminal-128.png
rename to build/linux/icons/alchementary-link-128.png
diff --git a/build/linux/icons/nexus-terminal-16.png b/build/linux/icons/alchementary-link-16.png
similarity index 100%
rename from build/linux/icons/nexus-terminal-16.png
rename to build/linux/icons/alchementary-link-16.png
diff --git a/build/linux/icons/nexus-terminal-256.png b/build/linux/icons/alchementary-link-256.png
similarity index 100%
rename from build/linux/icons/nexus-terminal-256.png
rename to build/linux/icons/alchementary-link-256.png
diff --git a/build/linux/icons/nexus-terminal-32.png b/build/linux/icons/alchementary-link-32.png
similarity index 100%
rename from build/linux/icons/nexus-terminal-32.png
rename to build/linux/icons/alchementary-link-32.png
diff --git a/build/linux/icons/nexus-terminal-48.png b/build/linux/icons/alchementary-link-48.png
similarity index 100%
rename from build/linux/icons/nexus-terminal-48.png
rename to build/linux/icons/alchementary-link-48.png
diff --git a/build/linux/icons/nexus-terminal-512.png b/build/linux/icons/alchementary-link-512.png
similarity index 100%
rename from build/linux/icons/nexus-terminal-512.png
rename to build/linux/icons/alchementary-link-512.png
diff --git a/build/linux/icons/nexus-terminal-64.png b/build/linux/icons/alchementary-link-64.png
similarity index 100%
rename from build/linux/icons/nexus-terminal-64.png
rename to build/linux/icons/alchementary-link-64.png
diff --git a/cmd/vscode-bridge/main.go b/cmd/vscode-bridge/main.go
index af219e3..bb3bec8 100644
--- a/cmd/vscode-bridge/main.go
+++ b/cmd/vscode-bridge/main.go
@@ -1,4 +1,4 @@
-// Command vscode-bridge exposes the Nexus backend to VS Code extensions over a
+// Command vscode-bridge exposes the Link backend to VS Code extensions over a
// localhost-only JSON-RPC and event stream.
package main
@@ -22,14 +22,14 @@ import (
"syscall"
"time"
- "github.com/andydixon/nexus/internal/api"
- "github.com/andydixon/nexus/internal/audit"
- "github.com/andydixon/nexus/internal/config"
- "github.com/andydixon/nexus/internal/preferences"
- "github.com/andydixon/nexus/internal/recording"
- "github.com/andydixon/nexus/internal/secrets"
- "github.com/andydixon/nexus/internal/sessions"
- "github.com/andydixon/nexus/internal/storage"
+ "github.com/andydixon/link/internal/api"
+ "github.com/andydixon/link/internal/audit"
+ "github.com/andydixon/link/internal/config"
+ "github.com/andydixon/link/internal/preferences"
+ "github.com/andydixon/link/internal/recording"
+ "github.com/andydixon/link/internal/secrets"
+ "github.com/andydixon/link/internal/sessions"
+ "github.com/andydixon/link/internal/storage"
)
type rpcRequest struct {
@@ -160,7 +160,7 @@ func newBridgeApp() (*bridgeApp, error) {
}
secretStore := secrets.NewSecretStore(cfg.SecretPath)
- keychainStore := secrets.NewKeychainStore("NexusTerminal")
+ keychainStore := secrets.NewKeychainStore("AlchementaryLink")
auditLog := audit.NewLogger(store)
prefs := preferences.NewManager(store)
if err := prefs.Load(); err != nil {
diff --git a/docs/build-and-release.md b/docs/build-and-release.md
index 1b00eaa..f9fba19 100644
--- a/docs/build-and-release.md
+++ b/docs/build-and-release.md
@@ -69,7 +69,7 @@ checkout.
The release scripts disable CGO and use a pure-Go SQLite driver, so Linux and Windows cross-targets do not need C cross-compilers for the application backend. To build a smaller set, override the default targets:
```bash
-NEXUS_RELEASE_TARGETS=linux/amd64,windows/amd64 ./release.sh
+LINK_RELEASE_TARGETS=linux/amd64,windows/amd64 ./release.sh
```
## Platform caveats
diff --git a/docs/overview.md b/docs/overview.md
index 62260ac..51e55de 100644
--- a/docs/overview.md
+++ b/docs/overview.md
@@ -1,12 +1,12 @@
-# Nexus Terminal Overview
+# Alchementary Link Overview
-Nexus Terminal is a desktop connection and analysis workspace for people who manage servers, network services, remote desktops, repositories, and binary artefacts every day. It brings SSH, Telnet, RAW TCP, VNC, GitHub, local shell, and Leviathan binary-analysis workflows into one focused app with secure credential handling, multi-session organisation, file transfer, automation, recording, and inspection tooling built in.
+Alchementary Link is a desktop connection and analysis workspace for people who manage servers, network services, remote desktops, repositories, and binary artefacts every day. It brings SSH, Telnet, RAW TCP, VNC, GitHub, local shell, and Leviathan binary-analysis workflows into one focused app with secure credential handling, multi-session organisation, file transfer, automation, recording, and inspection tooling built in.
## Product positioning
-Nexus is more than an SSH client. It is a single command centre for remote access, terminal operations, file movement, raw socket inspection, GitHub repository visibility, binary triage, and repeatable operational workflows.
+Link is more than an SSH client. It is a single command centre for remote access, terminal operations, file movement, raw socket inspection, GitHub repository visibility, binary triage, and repeatable operational workflows.
-Use Nexus when you need to:
+Use Link when you need to:
- Connect quickly to many systems without re-entering credentials.
- Keep multiple live sessions organised with tabs, pinned tabs, split panes, and status indicators.
@@ -37,7 +37,7 @@ Use Nexus when you need to:
- Filter profiles by protocol, group, tag, and favourite status.
- Test basic host and port reachability before connecting.
- Import existing OpenSSH config entries from `~/.ssh/config`, including hostnames, usernames, ports, identity files, and jump hosts.
-- Export and import profiles using encrypted `.nexus` bundles.
+- Export and import profiles using encrypted `.link` bundles.
- Choose import behaviour for duplicates: skip, overwrite, or duplicate.
### Multi-session workspace
@@ -149,7 +149,7 @@ Use Nexus when you need to:
### VNC capabilities
- VNC remote desktop sessions.
-- noVNC-based viewer inside the Nexus workspace.
+- noVNC-based viewer inside the Link workspace.
- Password prompt and password storage modes.
- View-only mode.
- Scale-to-fit display.
@@ -173,7 +173,7 @@ Use Nexus when you need to:
### Leviathan binary workbench
-- Switch from **Nexus Terminal** to **Leviathan** from the sidebar header.
+- Switch from **Alchementary Link** to **Leviathan** from the sidebar header.
- Load a local file into a working document, inspect it with multiple tools, then save the patched working copy.
- Tools open as normal tabs beside connection sessions.
- Leviathan tabs close immediately without connection-disconnect confirmation.
@@ -271,7 +271,7 @@ Use Nexus when you need to:
### Suggested headline
-Nexus Terminal: one desktop workspace for SSH, files, sockets, remote desktops, repositories, and binary artefacts.
+Alchementary Link: one desktop workspace for SSH, files, sockets, remote desktops, repositories, and binary artefacts.
### Suggested subheadline
@@ -279,7 +279,7 @@ Manage SSH, Telnet, RAW TCP, VNC, GitHub, local shell, and Leviathan binary-anal
### Short product description
-Nexus Terminal helps developers, operators, support engineers, reverse engineers, firmware analysts, and homelab users manage many connections and artefacts without juggling separate tools. Save profiles, organise them with groups and tags, connect in tabs or split panes, move files over SFTP, inspect raw TCP traffic, open VNC desktops, browse GitHub repositories, triage binaries with Leviathan, and keep credentials protected with keychain and encrypted-vault storage.
+Alchementary Link helps developers, operators, support engineers, reverse engineers, firmware analysts, and homelab users manage many connections and artefacts without juggling separate tools. Save profiles, organise them with groups and tags, connect in tabs or split panes, move files over SFTP, inspect raw TCP traffic, open VNC desktops, browse GitHub repositories, triage binaries with Leviathan, and keep credentials protected with keychain and encrypted-vault storage.
### Product page feature bullets
diff --git a/docs/quick-start.md b/docs/quick-start.md
index a041b2c..0a366ea 100644
--- a/docs/quick-start.md
+++ b/docs/quick-start.md
@@ -1,10 +1,10 @@
-# Nexus Terminal Quick Start
+# Alchementary Link Quick Start
-Nexus Terminal is a desktop client for SSH, Telnet, RAW TCP, VNC, GitHub, local terminal sessions, and Leviathan binary analysis. This page is a shareable quick start for everyday use.
+Alchementary Link is a desktop client for SSH, Telnet, RAW TCP, VNC, GitHub, local terminal sessions, and Leviathan binary analysis. This page is a shareable quick start for everyday use.
## Get connected in minutes
-1. Open Nexus Terminal.
+1. Open Alchementary Link.
2. Click **New** in the sidebar.
3. Choose a protocol and enter the connection details.
4. Click **Connect** to open the session in a new tab.
@@ -26,7 +26,7 @@ Create a **VNC** profile for remote desktop sessions. Use SSH tunnelling when po
## Leviathan binary tools
-Click **Leviathan** beside **Nexus Terminal** in the sidebar header to switch from connection profiles to binary-analysis tools. Use **Load** to choose a file, then open tools such as Hex Editor, Overview, Hashes, Entropy, Strings, Carve, BinSnoop, Structures, PDF, SquashFS, Transforms, and Spectrogram tools. Tools open in normal tabs and can be closed without a disconnect confirmation.
+Click **Leviathan** beside **Alchementary Link** in the sidebar header to switch from connection profiles to binary-analysis tools. Use **Load** to choose a file, then open tools such as Hex Editor, Overview, Hashes, Entropy, Strings, Carve, BinSnoop, Structures, PDF, SquashFS, Transforms, and Spectrogram tools. Tools open in normal tabs and can be closed without a disconnect confirmation.
## File transfers on SSH
diff --git a/docs/user-manual.md b/docs/user-manual.md
index 5599da0..628fd19 100644
--- a/docs/user-manual.md
+++ b/docs/user-manual.md
@@ -1,4 +1,4 @@
-# Nexus Terminal User Manual
+# Alchementary Link User Manual
## Contents
@@ -23,7 +23,7 @@
### Launch and connect
-- Start Nexus Terminal.
+- Start Alchementary Link.
- Click **New** in the sidebar, choose a protocol, and fill in the profile details.
- Click **Connect** to open a session in a new tab.
@@ -89,7 +89,7 @@ Tip: Use the search box to filter profiles by name, host, or tag.
### VNC
-- Remote desktop viewer embedded in the Nexus workspace.
+- Remote desktop viewer embedded in the Link workspace.
- Password prompt and saved-password modes.
- View-only mode, scale-to-fit, shared sessions, and quality controls.
- Optional SSH tunnel for safer VNC transport.
@@ -169,7 +169,7 @@ Screenshot: SFTP browser open alongside the terminal.
## 9. Drag-and-drop uploads and paste
-When you drop file(s) into an active terminal, Nexus Terminal asks whether to:
+When you drop file(s) into an active terminal, Alchementary Link asks whether to:
- **Upload** to a chosen remote directory, or
- **Paste contents** into the terminal as if typed.
@@ -205,11 +205,11 @@ Screenshot: Recordings list with playback controls.
## 11. Leviathan binary workbench
-Leviathan is the integrated binary-analysis and editing workspace inside Nexus Terminal. It is useful for firmware images, unknown binaries, archives, captures, embedded files, suspicious documents, and audio spectrogram experiments.
+Leviathan is the integrated binary-analysis and editing workspace inside Alchementary Link. It is useful for firmware images, unknown binaries, archives, captures, embedded files, suspicious documents, and audio spectrogram experiments.
### Switching to Leviathan
-Click **Leviathan** in the top-left sidebar header. The normal connection list changes into a tool list. Click **Nexus Terminal** to return to saved servers and groups.
+Click **Leviathan** in the top-left sidebar header. The normal connection list changes into a tool list. Click **Alchementary Link** to return to saved servers and groups.
Use **Load** to select a local file. The selected file becomes the current Leviathan working document. Use **Save** to write the patched working copy to a chosen destination.
@@ -267,7 +267,7 @@ Leviathan keeps loaded files file-backed where possible and writes patched worki
## 12. Security and credentials
-Nexus Terminal stores credentials securely:
+Alchementary Link stores credentials securely:
- **OS keychain first** (Keychain, Secret Service, or Credential Manager).
- **Encrypted vault** fallback using AES-256-GCM with Argon2id.
diff --git a/frontend/index.html b/frontend/index.html
index 9772dfc..23a4494 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -3,7 +3,7 @@
- Nexus Terminal
+ Alchementary Link
@@ -52,10 +52,10 @@