license: release Nexus Terminal under the GNU AGPL v3
- LICENSE: the GNU Affero General Public License, version 3 (verbatim from gnu.org). - SPDX-License-Identifier: AGPL-3.0-only plus a copyright line on every first-party source file (Rust, shell, Python, PHP); vendored crates keep their own licenses. - Cargo manifests carry license/authors/repository; the macOS bundle copyright and the About page state the license and link the source. - Release zips (and the macOS app bundle) include LICENSE. - README: License section.
This commit is contained in:
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! The main window: title bar, connection sidebar, tab strip and workspace (terminals, split
|
||||
//! panes, protocol viewers), right dock (SFTP or the profile editor), status bar, command
|
||||
//! palette, prompts and toasts. Session events from nexus-core are drained here every frame.
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! Window chrome: custom title bar, status bar, command palette, credential and host-key
|
||||
//! prompts, the main window's modal dialogs, toasts and resize edges.
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! Remote desktop viewer for VNC and RDP: the remote framebuffer as a texture, with mouse,
|
||||
//! keyboard and clipboard input. Input is expressed in X keysyms and VNC pointer masks (VNC's own
|
||||
//! terms); `Remote` translates them for RDP. Toolbar after the web build's `vnc.js` (status,
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! Port forwards dialog for a live SSH session: list, stop, add.
|
||||
|
||||
use crate::chrome::modal;
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! GitHub repository browser: owner groups of repo cards with ZIP download and Visit. Port of
|
||||
//! `github.js`.
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! IRC client view: room tabs, message log, composer and room/user lists. Port of `irc.js`;
|
||||
//! lines are `ircformat::format_event` spans drawn in the terminal theme's colours.
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! Nexus Terminal: SSH, Telnet, RAW TCP, Serial, VNC, IRC, GitHub and local terminals in one
|
||||
//! native window. `nexus-terminal [--theme pro|midnight|light] [--screenshot out.png] [--size WxH]`.
|
||||
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! Finds the OSC sequences the VT parser ignores but Nexus uses: OSC 133 (shell integration
|
||||
//! marks: prompt, command, output, finished with exit status) and OSC 7 (the shell's working
|
||||
//! directory). Sequences may be split across reads, so the scanner keeps state between chunks.
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! Profile editor (right dock): create and edit every protocol's settings. A port of the
|
||||
//! `profiles.js` drawer plus the Serial protocol. Switching protocol keeps the common fields
|
||||
//! (including the group), and list editors keep unsaved edits.
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! Quick Connect dialog: an ad-hoc session without saving a profile.
|
||||
|
||||
use crate::chrome::modal;
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! RAW TCP viewer: text / hex / split views of the capture, pause, clear, save, and a send bar.
|
||||
//! Port of the web build's `raw.js`. Sent data comes back through `Event::RawData` ("send"), so
|
||||
//! the echo of a sent entry needs no local bookkeeping.
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! Recordings browser and playback window (port of the RecordingManager in recordings.js).
|
||||
|
||||
use crate::state::Shared;
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! Reopens the previous run's tabs and splits at launch: saved profiles reconnect, local shells
|
||||
//! start again in the directory they were in. The layout is saved whenever it changes (not only on
|
||||
//! exit), so it survives a crash. Quick Connect tabs aren't restored (they have no saved profile).
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! Settings window: General, Terminal, Security, Known Hosts, Help, About. Also the
|
||||
//! master-password dialog (strength meter + confirm) used to create or unlock the vault.
|
||||
|
||||
@@ -781,14 +784,21 @@ impl Settings {
|
||||
// --- About ----------------------------------------------------------------------------
|
||||
|
||||
fn about(&mut self, ui: &mut Ui, s: &mut Shared) {
|
||||
const SOURCE_URL: &str = "https://github.com/andydixon/nexus";
|
||||
let t = Tokens::get(ui.ctx());
|
||||
ui.add_space(8.0);
|
||||
ui.label(RichText::new("Nexus Terminal").font(theme::semibold(22.0)));
|
||||
ui.label(RichText::new(format!("Version {}", nexus_core::service::VERSION)).color(t.text_dim));
|
||||
ui.label(RichText::new("Developed by Andy Dixon - dixon.cx/nexus").color(t.text_faint));
|
||||
ui.horizontal(|ui| {
|
||||
ui.label(RichText::new("Free software under the GNU Affero General Public License v3. Source:").color(t.text_faint));
|
||||
if ui.link("github.com/andydixon/nexus").clicked() {
|
||||
widgets::open_web_url(ui.ctx(), SOURCE_URL);
|
||||
}
|
||||
});
|
||||
ui.add_space(8.0);
|
||||
for f in [
|
||||
"SSH, Telnet, RAW TCP, Serial, VNC, IRC, GitHub and local terminals",
|
||||
"SSH, Telnet, RAW TCP, Serial, VNC, RDP, IRC, GitHub and local terminals",
|
||||
"AES-256-GCM encrypted credential vault",
|
||||
"Platform-native keychain integration",
|
||||
"SFTP file browser and transfer",
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! SFTP browser (right dock), the file-drop dialog and the remote directory picker.
|
||||
//! Every SFTP call blocks on the network, so it runs on a worker thread; results come back
|
||||
//! through `inbox` and are applied on the UI thread at the start of the next frame.
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! The connection sidebar: Local Machine, Favourites, Recent, folders, Ungrouped; fuzzy search;
|
||||
//! click to connect, Ctrl/Cmd-click to multi-select, double-click to edit; bulk actions.
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! Snippet library window and the {{variable}} prompt (port of snippets.js).
|
||||
|
||||
use crate::state::{Request, Shared};
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! Split panes: a binary tree of sessions inside one tab. A new split starts as a placeholder
|
||||
//! pane offering Local Machine and the saved connections; ✕ on a pane promotes its sibling.
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! SSH Key Manager window: key pairs in ~/.ssh — copy public key, delete, generate (in-process, OpenSSH format).
|
||||
|
||||
use crate::settings::{Job, poll};
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! State shared by the main window and every feature module: the service, cached profiles and
|
||||
//! preferences, open tabs, toasts, and a request queue features use to ask the app to act.
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! The tab strip and the workspace under it: the active tab's session (or its split panes),
|
||||
//! terminal find bar and connection overlays.
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! TermView: an alacritty_terminal grid drawn with egui's painter. Bytes from a session go
|
||||
//! straight into the VT parser; keystrokes, paste, mouse reports and terminal replies come back
|
||||
//! out through `TermResponse` for the app to send to the session (and broadcast targets).
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! The 11 terminal colour schemes, generated from the web build's themes.js.
|
||||
|
||||
pub struct TermTheme {
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! Design system: colour tokens, radii and typography (Inter for UI, JetBrains Mono for bytes).
|
||||
//! Widgets read `Tokens::get(ctx)` instead of hard-coding colours, so every theme applies
|
||||
//! everywhere. Copied from Leviathan Desktop so both apps share one look.
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! Profile export/import: encrypted `.nexus` and plain JSON.
|
||||
|
||||
use crate::settings::{Job, poll};
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! Trigger rules: match terminal output lines and notify / highlight / beep (port of triggers.js).
|
||||
//! Rules live in `triggers.json` in the data directory (the web build's localStorage rules are
|
||||
//! not migrated).
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! How a session is drawn. Terminal-style protocols share `TermView`; the rest have their own.
|
||||
|
||||
use crate::desktop_view::DesktopView;
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Copyright (C) 2026 Andy Dixon
|
||||
|
||||
//! Shared widgets: section headers, buttons, chips, key/value grids, virtual lists, empty states.
|
||||
//! Colours always come from `Tokens`.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user