Rebrand: Nexus Terminal → Alchementary Link

Renames the product across the codebase: Go module path, config/data
paths, keychain service name, export file extension, build tooling,
docs, and UI text. Sidebar brand mark now reads ">_ AlchementaryLink"
with "Alchementary" in the connection-group gold accent colour, and
the window title is "Alchementary Link".

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019T8bJS8BCtY5GeSG2HBj1n
This commit is contained in:
Andy Dixon
2026-09-03 16:41:23 +01:00
co-authored by Claude Sonnet 5
parent 114060127f
commit 1a380a0e99
135 changed files with 678 additions and 674 deletions
+1 -1
View File
@@ -18,7 +18,7 @@ import (
"golang.org/x/crypto/argon2"
"github.com/andydixon/nexus/internal/models"
"github.com/andydixon/link/internal/models"
)
const (
+8 -8
View File
@@ -6,12 +6,12 @@ import (
"runtime"
"testing"
"github.com/andydixon/nexus/internal/models"
"github.com/andydixon/link/internal/models"
)
func TestEncryptDecryptRoundTrip(t *testing.T) {
dir := t.TempDir()
path := filepath.Join(dir, "test-export.nexus")
path := filepath.Join(dir, "test-export.link")
profiles := []models.Profile{
{
@@ -73,7 +73,7 @@ func TestEncryptDecryptRoundTrip(t *testing.T) {
func TestDecryptWrongPassword(t *testing.T) {
dir := t.TempDir()
path := filepath.Join(dir, "test-export.nexus")
path := filepath.Join(dir, "test-export.link")
profiles := []models.Profile{
{
@@ -97,7 +97,7 @@ func TestDecryptWrongPassword(t *testing.T) {
func TestEncryptEmptyProfiles(t *testing.T) {
dir := t.TempDir()
path := filepath.Join(dir, "test.nexus")
path := filepath.Join(dir, "test.link")
err := EncryptAndExport(nil, "password", path)
if err == nil {
@@ -109,7 +109,7 @@ func TestEncryptAndExportRestrictsExistingFilePermissions(t *testing.T) {
if runtime.GOOS == "windows" {
t.Skip("POSIX permission bits are not enforced on Windows")
}
path := filepath.Join(t.TempDir(), "profiles.nexus")
path := filepath.Join(t.TempDir(), "profiles.link")
if err := os.WriteFile(path, []byte("old"), 0644); err != nil {
t.Fatal(err)
}
@@ -127,7 +127,7 @@ func TestEncryptAndExportRestrictsExistingFilePermissions(t *testing.T) {
func TestEncryptEmptyPassword(t *testing.T) {
dir := t.TempDir()
path := filepath.Join(dir, "test.nexus")
path := filepath.Join(dir, "test.link")
profiles := []models.Profile{{ID: "1"}}
err := EncryptAndExport(profiles, "", path)
@@ -138,7 +138,7 @@ func TestEncryptEmptyPassword(t *testing.T) {
func TestDecryptCorruptFile(t *testing.T) {
dir := t.TempDir()
path := filepath.Join(dir, "corrupt.nexus")
path := filepath.Join(dir, "corrupt.link")
// Write garbage data.
if err := os.WriteFile(path, []byte("corrupt"), 0600); err != nil {
@@ -153,7 +153,7 @@ func TestDecryptCorruptFile(t *testing.T) {
func TestDecryptRejectsOversizedFile(t *testing.T) {
dir := t.TempDir()
path := filepath.Join(dir, "huge.nexus")
path := filepath.Join(dir, "huge.link")
f, err := os.Create(path)
if err != nil {
t.Fatal(err)