Compare commits
4 Commits
v0-m8-wip1
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c1c23d115a | ||
|
|
f54c2e9bcd | ||
|
|
ae9928782d | ||
|
|
2485ffb14f |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1 +1,3 @@
|
||||
/build/
|
||||
/dist/
|
||||
/.flatpak-builder/
|
||||
|
||||
@@ -10,6 +10,8 @@ set(CMAKE_AUTOMOC ON)
|
||||
set(CMAKE_AUTOUIC ON)
|
||||
set(CMAKE_AUTORCC ON)
|
||||
|
||||
include(GNUInstallDirs)
|
||||
|
||||
find_package(Qt6 6.2 REQUIRED COMPONENTS Widgets Sql)
|
||||
|
||||
qt_standard_project_setup()
|
||||
@@ -126,4 +128,46 @@ else()
|
||||
message(FATAL_ERROR "Vendored FreeRDP targets were not produced as expected.")
|
||||
endif()
|
||||
|
||||
install(TARGETS orbithub RUNTIME DESTINATION bin)
|
||||
set_target_properties(orbithub PROPERTIES
|
||||
BUILD_RPATH_USE_ORIGIN ON
|
||||
INSTALL_RPATH "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}/orbithub"
|
||||
INSTALL_RPATH_USE_LINK_PATH ON
|
||||
)
|
||||
|
||||
install(TARGETS orbithub
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
)
|
||||
|
||||
set(ORBITHUB_PRIVATE_LIB_DESTINATION "${CMAKE_INSTALL_LIBDIR}/orbithub")
|
||||
set(ORBITHUB_RUNTIME_TARGETS KodoTerm freerdp winpr)
|
||||
if(TARGET freerdp-client)
|
||||
list(APPEND ORBITHUB_RUNTIME_TARGETS freerdp-client)
|
||||
endif()
|
||||
foreach(runtime_target IN LISTS ORBITHUB_RUNTIME_TARGETS)
|
||||
if(TARGET ${runtime_target})
|
||||
install(TARGETS ${runtime_target}
|
||||
RUNTIME DESTINATION ${ORBITHUB_PRIVATE_LIB_DESTINATION}
|
||||
LIBRARY DESTINATION ${ORBITHUB_PRIVATE_LIB_DESTINATION}
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
install(FILES
|
||||
packaging/linux/io.orbithub.OrbitHub.desktop
|
||||
DESTINATION ${CMAKE_INSTALL_DATADIR}/applications
|
||||
)
|
||||
install(FILES
|
||||
packaging/linux/io.orbithub.OrbitHub.svg
|
||||
DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps
|
||||
)
|
||||
install(FILES
|
||||
packaging/linux/io.orbithub.OrbitHub.svg
|
||||
DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps
|
||||
RENAME orbithub.svg
|
||||
)
|
||||
install(FILES
|
||||
packaging/linux/io.orbithub.OrbitHub.metainfo.xml
|
||||
DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo
|
||||
)
|
||||
install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_DATADIR}/licenses/orbithub)
|
||||
|
||||
147
README.md
Normal file
147
README.md
Normal file
@@ -0,0 +1,147 @@
|
||||
# OrbitHub
|
||||
|
||||
OrbitHub is a cross-platform native desktop app for managing and launching remote sessions from one place.
|
||||
|
||||
It is implemented in C++17 with Qt6 Widgets and built with CMake.
|
||||
|
||||
Supported target platforms:
|
||||
- Windows
|
||||
- Linux
|
||||
- macOS
|
||||
|
||||
## Current Status
|
||||
|
||||
OrbitHub is in active development.
|
||||
|
||||
- Milestones completed: M0-M5 and M8
|
||||
- Current milestone: Milestone 9 (Packaging and Distribution)
|
||||
- Deferred milestone: Milestone 6 (VNC Fully Working)
|
||||
- Latest checkpoint tag: `v0-m8-done`
|
||||
- VNC implementation milestone (M6) is currently deferred
|
||||
|
||||
Progress and milestone details:
|
||||
- [docs/PROGRESS.md](docs/PROGRESS.md)
|
||||
|
||||
## Implemented Features
|
||||
|
||||
### Profile Management
|
||||
|
||||
- SQLite-backed profile storage
|
||||
- Create, edit, delete profiles
|
||||
- Protocol-aware profile validation (SSH/RDP/VNC)
|
||||
- Profile search and sorting
|
||||
- Tags support
|
||||
- Folder/subfolder support
|
||||
- `List` and `Folders` profile views
|
||||
- Right-click profile tree actions:
|
||||
- New Folder
|
||||
- New Connection
|
||||
- Drag-and-drop profile moves between folders with persistence
|
||||
|
||||
### Session Experience
|
||||
|
||||
- Multi-tab session window
|
||||
- Auto-connect on tab open
|
||||
- Disconnect on tab close
|
||||
- Session state indicators on tabs
|
||||
- Timestamped event log with filtering and export
|
||||
|
||||
### SSH
|
||||
|
||||
- Embedded interactive terminal (in-app typing)
|
||||
- Theme support (`Dark`, `Light`, `Solarized Dark`)
|
||||
- Password and private-key auth flows
|
||||
- Known-hosts policy support
|
||||
|
||||
### RDP
|
||||
|
||||
- Embedded in-window RDP rendering surface (no external launcher)
|
||||
- Keyboard/mouse input forwarding
|
||||
- Resize handling and resolution renegotiation
|
||||
- Domain-aware authentication support
|
||||
- RDP security/performance profile options
|
||||
|
||||
### App UX
|
||||
|
||||
- App icon and themed About dialog
|
||||
- `File` menu:
|
||||
- New Profile
|
||||
- New Folder
|
||||
- Quit
|
||||
- `Help` menu:
|
||||
- About OrbitHub
|
||||
|
||||
## Build and Run
|
||||
|
||||
Detailed platform instructions:
|
||||
- [docs/BUILDING.md](docs/BUILDING.md)
|
||||
|
||||
Quick start (Linux/macOS with Ninja):
|
||||
|
||||
```bash
|
||||
cmake -S . -B build -G Ninja
|
||||
cmake --build build
|
||||
./build/orbithub
|
||||
```
|
||||
|
||||
## Packaging (Linux)
|
||||
|
||||
```bash
|
||||
./packaging/linux/build-deb.sh
|
||||
```
|
||||
|
||||
Optional Flatpak bundle:
|
||||
|
||||
```bash
|
||||
./packaging/flatpak/build-flatpak.sh
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
Core dependencies:
|
||||
- Qt 6 (Widgets, SQL)
|
||||
- CMake 3.21+
|
||||
- C++17 toolchain
|
||||
|
||||
Protocol/runtime dependencies:
|
||||
- SSH client (`ssh`) available on `PATH` for SSH sessions
|
||||
|
||||
Bundled/vendored third-party components:
|
||||
- KodoTerm
|
||||
- libvterm
|
||||
- FreeRDP/WinPR
|
||||
|
||||
## Licensing
|
||||
|
||||
Project license:
|
||||
- MIT (see [LICENSE](LICENSE))
|
||||
|
||||
License links:
|
||||
- MIT License: <https://opensource.org/licenses/MIT>
|
||||
- GNU LGPLv3: <https://www.gnu.org/licenses/lgpl-3.0.html>
|
||||
- Apache License 2.0: <https://www.apache.org/licenses/LICENSE-2.0>
|
||||
|
||||
Important third-party license notes:
|
||||
- Qt6 is dynamically linked in this project build setup.
|
||||
- Qt6 is used under LGPLv3 terms in this project build setup.
|
||||
- KodoTerm and libvterm are MIT-licensed.
|
||||
- FreeRDP/WinPR is Apache-2.0 licensed.
|
||||
|
||||
Repository license files:
|
||||
- Project: [LICENSE](LICENSE)
|
||||
- KodoTerm: [third_party/KodoTerm/LICENSE](third_party/KodoTerm/LICENSE)
|
||||
- FreeRDP: [third_party/FreeRDP/LICENSE](third_party/FreeRDP/LICENSE)
|
||||
|
||||
See in-app `Help -> About OrbitHub` for license links and third-party inventory.
|
||||
|
||||
## Repository Structure
|
||||
|
||||
- `src/` - application source code
|
||||
- `docs/` - build guide, spec, and progress tracking
|
||||
- `third_party/` - vendored third-party dependencies
|
||||
- `build/` - local build output (generated)
|
||||
|
||||
## Notes
|
||||
|
||||
- Passwords are requested at connect time and are not stored in the profile database.
|
||||
- This repository currently prioritizes integrated SSH and RDP workflows while VNC implementation is pending.
|
||||
@@ -2,6 +2,14 @@
|
||||
|
||||
Run all commands from the repository root unless noted.
|
||||
|
||||
## Requirements
|
||||
|
||||
Minimum toolchain requirements on all platforms:
|
||||
- CMake 3.21+
|
||||
- C++17 compiler toolchain
|
||||
- Qt 6.2+ with `Widgets` and `Sql` modules (dynamic linking)
|
||||
- OpenSSH client available on `PATH` (required for SSH sessions)
|
||||
|
||||
## Linux (Ubuntu / Mint)
|
||||
|
||||
```bash
|
||||
@@ -9,9 +17,9 @@ sudo apt update
|
||||
sudo apt install -y \
|
||||
build-essential cmake ninja-build git pkg-config \
|
||||
qt6-base-dev qt6-base-dev-tools qt6-tools-dev qt6-tools-dev-tools \
|
||||
openssh-client
|
||||
openssh-client libssl-dev zlib1g-dev
|
||||
|
||||
cmake -S . -B build -G Ninja
|
||||
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
|
||||
cmake --build build
|
||||
./build/orbithub
|
||||
```
|
||||
@@ -21,39 +29,79 @@ cmake --build build
|
||||
```bash
|
||||
xcode-select --install
|
||||
brew update
|
||||
brew install cmake ninja pkg-config qt@6 openssh
|
||||
brew install cmake ninja pkg-config qt@6 openssh openssl@3
|
||||
|
||||
cmake -S . -B build -G Ninja -DCMAKE_PREFIX_PATH="$(brew --prefix qt@6)"
|
||||
cmake -S . -B build -G Ninja \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_PREFIX_PATH="$(brew --prefix qt@6);$(brew --prefix openssl@3)"
|
||||
cmake --build build
|
||||
./build/orbithub
|
||||
```
|
||||
|
||||
## Windows 11 (PowerShell + MSVC + vcpkg)
|
||||
|
||||
Install required software:
|
||||
|
||||
```powershell
|
||||
winget install -e --id Git.Git
|
||||
winget install -e --id Kitware.CMake
|
||||
winget install -e --id Ninja-build.Ninja
|
||||
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
|
||||
winget install -e --id Microsoft.VisualStudio.2022.BuildTools `
|
||||
--override "--quiet --wait --norestart --add Microsoft.VisualStudio.Workload.VCTools"
|
||||
--override "--quiet --wait --norestart --add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Component.Windows11SDK.22621"
|
||||
```
|
||||
|
||||
Open a new terminal after installs, then:
|
||||
Install dependencies via vcpkg:
|
||||
|
||||
```powershell
|
||||
git clone https://github.com/microsoft/vcpkg C:\dev\vcpkg
|
||||
C:\dev\vcpkg\bootstrap-vcpkg.bat
|
||||
C:\dev\vcpkg\vcpkg.exe install qtbase:x64-windows
|
||||
|
||||
cmake -S . -B build -G Ninja `
|
||||
-DCMAKE_TOOLCHAIN_FILE=C:/dev/vcpkg/scripts/buildsystems/vcpkg.cmake
|
||||
cmake --build build
|
||||
.\build\orbithub.exe
|
||||
C:\dev\vcpkg\vcpkg.exe install qtbase:x64-windows openssl:x64-windows zlib:x64-windows
|
||||
```
|
||||
|
||||
Open `x64 Native Tools Command Prompt for VS 2022` (or Developer PowerShell), then build:
|
||||
|
||||
```powershell
|
||||
cmake -S . -B build -G Ninja `
|
||||
-DCMAKE_BUILD_TYPE=Release `
|
||||
-DCMAKE_TOOLCHAIN_FILE=C:/dev/vcpkg/scripts/buildsystems/vcpkg.cmake `
|
||||
-DVCPKG_TARGET_TRIPLET=x64-windows
|
||||
cmake --build build
|
||||
```
|
||||
|
||||
Run (ensures DLL paths from vcpkg are present):
|
||||
|
||||
```powershell
|
||||
C:\dev\vcpkg\vcpkg.exe env --triplet x64-windows -- .\build\orbithub.exe
|
||||
```
|
||||
|
||||
If you already have `Qt 6` from the Qt installer and do not want vcpkg Qt, you can point CMake at that Qt install with `-DCMAKE_PREFIX_PATH=...`, but you still need compatible `OpenSSL` and `zlib` development libraries for the embedded FreeRDP build.
|
||||
|
||||
## Notes
|
||||
|
||||
- OrbitHub currently requires Qt6 Widgets and CMake 3.21+.
|
||||
- Milestone 3 SSH sessions require an `ssh` client available on `PATH`.
|
||||
- OrbitHub builds vendored `KodoTerm`, `libvterm`, and `FreeRDP` from `third_party/`.
|
||||
- If Qt is installed in a custom location, pass `-DCMAKE_PREFIX_PATH=/path/to/Qt/6.x.x/<toolchain>` to CMake.
|
||||
- Build output executable:
|
||||
- Linux/macOS: `build/orbithub`
|
||||
- Windows: `build\\orbithub.exe`
|
||||
|
||||
## Linux Packaging
|
||||
|
||||
Build a Debian package (`.deb`) from the current Linux build:
|
||||
|
||||
```bash
|
||||
./packaging/linux/build-deb.sh
|
||||
```
|
||||
|
||||
Output path:
|
||||
- `dist/orbithub_<version>_<arch>.deb`
|
||||
|
||||
Build a Flatpak bundle:
|
||||
|
||||
```bash
|
||||
sudo apt-get install -y flatpak flatpak-builder
|
||||
./packaging/flatpak/build-flatpak.sh
|
||||
```
|
||||
|
||||
Output path:
|
||||
- `dist/flatpak/io.orbithub.OrbitHub.flatpak`
|
||||
|
||||
@@ -124,9 +124,9 @@ Planned Scope:
|
||||
|
||||
## Milestone 8 - Profile and Session UX Completion
|
||||
|
||||
Status: In Progress
|
||||
Status: Completed
|
||||
|
||||
Started:
|
||||
Delivered:
|
||||
- Added profile `tags` field to storage + schema migration and profile editor UX
|
||||
- Added profile `folder_path` field + nested folder/subfolder profile view mode
|
||||
- Added profile tree context actions (`New Folder`, `New Connection`) and drag-to-folder profile moves with persistence
|
||||
@@ -140,10 +140,12 @@ Started:
|
||||
- Persisted session UI defaults (`terminal theme`, `events panel visibility`) for new tabs/windows
|
||||
- Added profile quick filters (`Protocol`, `Tag`) with persistence to speed profile browsing
|
||||
|
||||
Planned Scope:
|
||||
- Complete protocol-aware profile validation and UX polish
|
||||
- Add/persist session UI preferences and default behaviors
|
||||
- Improve events/diagnostics visibility for long-running session usage
|
||||
Validation:
|
||||
- Local build verification passed (`cmake --build build`)
|
||||
- No automated tests are currently configured in CTest
|
||||
|
||||
Git:
|
||||
- Tag: Pending user approval (`v0-m8-done`)
|
||||
|
||||
## Milestone 9 - Packaging and Distribution
|
||||
|
||||
|
||||
26
packaging/flatpak/build-flatpak.sh
Executable file
26
packaging/flatpak/build-flatpak.sh
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
MANIFEST="$ROOT_DIR/packaging/flatpak/io.orbithub.OrbitHub.yml"
|
||||
DIST_DIR="${1:-$ROOT_DIR/dist/flatpak}"
|
||||
BUILD_DIR="$DIST_DIR/build"
|
||||
REPO_DIR="$DIST_DIR/repo"
|
||||
BUNDLE="$DIST_DIR/io.orbithub.OrbitHub.flatpak"
|
||||
|
||||
if ! command -v flatpak-builder >/dev/null 2>&1; then
|
||||
echo "flatpak-builder is required. Install it first:" >&2
|
||||
echo " sudo apt-get install -y flatpak-builder" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$DIST_DIR"
|
||||
|
||||
flatpak-builder \
|
||||
--force-clean \
|
||||
--repo="$REPO_DIR" \
|
||||
"$BUILD_DIR" \
|
||||
"$MANIFEST"
|
||||
|
||||
flatpak build-bundle "$REPO_DIR" "$BUNDLE" io.orbithub.OrbitHub
|
||||
echo "Created $BUNDLE"
|
||||
21
packaging/flatpak/io.orbithub.OrbitHub.yml
Normal file
21
packaging/flatpak/io.orbithub.OrbitHub.yml
Normal file
@@ -0,0 +1,21 @@
|
||||
app-id: io.orbithub.OrbitHub
|
||||
runtime: org.kde.Platform
|
||||
runtime-version: "6.8"
|
||||
sdk: org.kde.Sdk
|
||||
command: orbithub
|
||||
finish-args:
|
||||
- --share=network
|
||||
- --share=ipc
|
||||
- --socket=fallback-x11
|
||||
- --socket=wayland
|
||||
- --device=dri
|
||||
- --filesystem=home
|
||||
modules:
|
||||
- name: orbithub
|
||||
buildsystem: cmake-ninja
|
||||
builddir: true
|
||||
config-opts:
|
||||
- -DCMAKE_BUILD_TYPE=Release
|
||||
sources:
|
||||
- type: dir
|
||||
path: ../..
|
||||
70
packaging/linux/build-deb.sh
Executable file
70
packaging/linux/build-deb.sh
Executable file
@@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
BUILD_DIR="${1:-$ROOT_DIR/build}"
|
||||
DIST_DIR="${2:-$ROOT_DIR/dist}"
|
||||
STAGE_DIR="$DIST_DIR/deb-staging"
|
||||
PKG_ROOT="$STAGE_DIR/orbithub"
|
||||
|
||||
if [[ ! -f "$BUILD_DIR/CMakeCache.txt" ]]; then
|
||||
echo "Build directory not configured: $BUILD_DIR" >&2
|
||||
echo "Run: cmake -S \"$ROOT_DIR\" -B \"$BUILD_DIR\" -G Ninja" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$DIST_DIR"
|
||||
rm -rf "$STAGE_DIR"
|
||||
mkdir -p "$PKG_ROOT/DEBIAN"
|
||||
|
||||
VERSION="$(sed -n 's/^CMAKE_PROJECT_VERSION:STATIC=//p' "$BUILD_DIR/CMakeCache.txt" | head -n1)"
|
||||
ARCH="$(dpkg --print-architecture)"
|
||||
|
||||
if [[ -z "$VERSION" ]]; then
|
||||
echo "Unable to determine project version from $BUILD_DIR/CMakeCache.txt" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cmake --build "$BUILD_DIR" -j
|
||||
cmake --install "$BUILD_DIR" --prefix "$PKG_ROOT/usr"
|
||||
|
||||
cat > "$PKG_ROOT/DEBIAN/control" <<EOF
|
||||
Package: orbithub
|
||||
Version: ${VERSION}
|
||||
Section: net
|
||||
Priority: optional
|
||||
Architecture: ${ARCH}
|
||||
Maintainer: OrbitHub Maintainers <maintainers@orbithub.local>
|
||||
Depends: libc6, libstdc++6, libqt6core6, libqt6gui6, libqt6widgets6, libqt6sql6, libssl3, zlib1g, openssh-client
|
||||
Description: OrbitHub remote session manager
|
||||
OrbitHub is a native desktop application for managing connection profiles
|
||||
and opening SSH and RDP sessions in a tabbed interface.
|
||||
EOF
|
||||
|
||||
cat > "$PKG_ROOT/DEBIAN/postinst" <<'EOF'
|
||||
#!/bin/sh
|
||||
set -e
|
||||
if command -v update-desktop-database >/dev/null 2>&1; then
|
||||
update-desktop-database -q /usr/share/applications || true
|
||||
fi
|
||||
if command -v gtk-update-icon-cache >/dev/null 2>&1; then
|
||||
gtk-update-icon-cache -q /usr/share/icons/hicolor || true
|
||||
fi
|
||||
EOF
|
||||
chmod 0755 "$PKG_ROOT/DEBIAN/postinst"
|
||||
|
||||
cat > "$PKG_ROOT/DEBIAN/postrm" <<'EOF'
|
||||
#!/bin/sh
|
||||
set -e
|
||||
if command -v update-desktop-database >/dev/null 2>&1; then
|
||||
update-desktop-database -q /usr/share/applications || true
|
||||
fi
|
||||
if command -v gtk-update-icon-cache >/dev/null 2>&1; then
|
||||
gtk-update-icon-cache -q /usr/share/icons/hicolor || true
|
||||
fi
|
||||
EOF
|
||||
chmod 0755 "$PKG_ROOT/DEBIAN/postrm"
|
||||
|
||||
OUTPUT_DEB="$DIST_DIR/orbithub_${VERSION}_${ARCH}.deb"
|
||||
fakeroot dpkg-deb --build "$PKG_ROOT" "$OUTPUT_DEB" >/dev/null
|
||||
echo "Created $OUTPUT_DEB"
|
||||
11
packaging/linux/io.orbithub.OrbitHub.desktop
Normal file
11
packaging/linux/io.orbithub.OrbitHub.desktop
Normal file
@@ -0,0 +1,11 @@
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Version=1.0
|
||||
Name=OrbitHub
|
||||
GenericName=Remote Session Manager
|
||||
Comment=Manage SSH and RDP sessions in one native app
|
||||
Exec=orbithub
|
||||
Icon=orbithub
|
||||
Terminal=false
|
||||
Categories=Network;RemoteAccess;Utility;
|
||||
StartupNotify=true
|
||||
16
packaging/linux/io.orbithub.OrbitHub.metainfo.xml
Normal file
16
packaging/linux/io.orbithub.OrbitHub.metainfo.xml
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<component type="desktop-application">
|
||||
<id>io.orbithub.OrbitHub</id>
|
||||
<name>OrbitHub</name>
|
||||
<summary>Unified remote session manager for SSH and RDP</summary>
|
||||
<metadata_license>MIT</metadata_license>
|
||||
<project_license>MIT</project_license>
|
||||
<description>
|
||||
<p>OrbitHub is a native desktop app for organizing connection profiles and launching SSH and RDP sessions in one tabbed interface.</p>
|
||||
</description>
|
||||
<launchable type="desktop-id">io.orbithub.OrbitHub.desktop</launchable>
|
||||
<url type="homepage">https://git.firebugit.com/ksmith/orbithub</url>
|
||||
<provides>
|
||||
<binary>orbithub</binary>
|
||||
</provides>
|
||||
</component>
|
||||
20
packaging/linux/io.orbithub.OrbitHub.svg
Normal file
20
packaging/linux/io.orbithub.OrbitHub.svg
Normal file
@@ -0,0 +1,20 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256">
|
||||
<defs>
|
||||
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" stop-color="#20354f"/>
|
||||
<stop offset="100%" stop-color="#0b1524"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="ring" x1="0%" y1="0%" x2="100%" y2="0%">
|
||||
<stop offset="0%" stop-color="#69e2ff"/>
|
||||
<stop offset="100%" stop-color="#7cf0a3"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<rect x="18" y="24" width="220" height="152" rx="16" fill="url(#bg)" stroke="#94a3b8" stroke-opacity="0.4"/>
|
||||
<rect x="32" y="38" width="192" height="112" rx="8" fill="#101b2e"/>
|
||||
<rect x="96" y="182" width="64" height="16" rx="8" fill="#3a4a63"/>
|
||||
<rect x="70" y="200" width="116" height="14" rx="7" fill="#52627c"/>
|
||||
|
||||
<ellipse cx="128" cy="98" rx="74" ry="24" fill="none" stroke="url(#ring)" stroke-width="11" transform="rotate(-14 128 98)"/>
|
||||
<circle cx="128" cy="98" r="18" fill="#8be4ff"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 958 B |
Reference in New Issue
Block a user