ExcludeArch: %{ix86} %bcond_without check %global url https://github.com/totoshko88 %global crate RustConn %global crateid io.github.totoshko88.%{crate} %global shortversion 0.23.15 %global commit 17c69a654f97d2c0139861ac36342e6432b2c529 #global committag 1 %global commitversion %{?committag:%{commit}}%{?!committag:%{shortversion}} %global shortcommitversion %{?committag:%(c=%{commit}; echo ${c:0:7})}%{?!committag:%{shortversion}} %global commitdatestring 2026-10-17 10:39:23 +0200 %global commitdate 20261017 %global commitgit %{?committag:^git%{commitdate}.%(c=%{commit}; echo ${c:0:7})} Name: rustconn Version: %{shortversion}%{commitgit} Release: 1%{?dist} Summary: Remote connections manager # Main sources are GPLv3+, rest are rust licenses License: GPLv3+ AND ((MIT OR Apache-2.0) AND Unicode-3.0) AND (0BSD OR MIT OR Apache-2.0) AND Apache-2.0 AND (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR MIT) AND (Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT) AND BSD-2-Clause AND BSD-3-Clause AND (BSD-3-Clause OR Apache-2.0) AND BSL-1.0 AND CC0-1.0 AND ISC AND MIT AND (MIT OR Apache-2.0 OR CC0-1.0) AND (MIT OR Apache-2.0 OR LGPL-2.1-or-later) AND (MIT OR Apache-2.0 OR Zlib) AND MPL-2.0 AND Unicode-3.0 AND (Unlicense OR MIT) AND ZLib URL: %{url}/%{crate} Source0: %{url}/%{crate}/archive/refs/tags/%{commitversion}/%{crate}-%{shortcommitversion}.tar.gz # To create the below sources: # * git clone %%{url}/%%{crate}.git at the specified commit # * cargo vendor > %%{crate}-%%{shortcommitversion}-vendor-config.toml # * tar -pczf %%{crate}-%%{shortcommitversion}-vendor.tar.xz vendor Source1: %{crate}-%{shortcommitversion}-vendor.tar.xz # * mv %%{crate}-%%{shortcommitversion}-vendor-config.toml .. Source2: %{crate}-%{shortcommitversion}-vendor-config.toml BuildRequires: cargo-rpm-macros >= 26 BuildRequires: rustc >= 1.95 BuildRequires: cargo BuildRequires: alsa-lib-devel BuildRequires: gettext-devel BuildRequires: javascriptcoregtk6.0-devel BuildRequires: libadwaita-devel BuildRequires: libsoup3-devel BuildRequires: openssl-devel BuildRequires: vte291-gtk4-devel BuildRequires: webkitgtk6.0-devel BuildRequires: xz-devel BuildRequires: desktop-file-utils %if %{with check} BuildRequires: clippy BuildRequires: openssh-clients %endif Requires: alsa-lib Requires: gtk4 >= 4.14 Requires: libadwaita Requires: vte291-gtk4 Requires: openssh-clients # Optional runtime dependencies Recommends: freerdp >= 3.0 #Recommends: tigervnc #Recommends: virt-viewer #Recommends: picocom #Recommends: kubectl %description RustConn is a modern connection manager for Linux with a GTK4/Wayland-native interface. Manage SSH, RDP, VNC, SPICE, MOSH, Telnet, Serial, Kubernetes, and Zero Trust connections from a single application. Core protocols use embedded Rust implementations — no external dependencies required. Protocols (embedded Rust implementations): - SSH with embedded VTE terminal, split view, and scrollbar - RDP via IronRDP (embedded, with FreeRDP fallback) - VNC via vnc-rs (embedded, with TigerVNC fallback) - SPICE via spice-client (embedded, with remote-viewer fallback) - MOSH with predict mode and UDP port range - Telnet via external telnet client - Serial via picocom (RS-232/USB serial consoles) - Kubernetes via kubectl exec (shell access to pods) - Zero Trust: AWS SSM, GCP IAP, Azure Bastion, OCI Bastion, Cloudflare, Teleport, Tailscale, Boundary, Hoop.dev Cloud Sync: - Synchronize connections via shared directories (Google Drive, Syncthing, Nextcloud, Dropbox, USB) - Group Sync with Master/Import access model - Simple Sync with UUID-based merge and tombstone deletion File Transfer: - SFTP file browser via Midnight Commander with split-panel navigation Organization: - Groups, tags, templates, and smart folders - Connection history and statistics - Session logging and recording - Tab Overview, Tab Pinning, and Tab Switcher Import/Export: - Asbru-CM, Remmina, SSH config, Ansible inventory, CSV - Royal TS, MobaXterm, RDP files, libvirt, native format (.rcn) Security: - KeePassXC (KDBX files and proxy) - System keyring (GNOME Keyring / KDE Wallet) - Bitwarden CLI - 1Password CLI - Passbolt CLI - Pass (passwordstore.org) Productivity: - Split terminals with multi-panel layouts - Command snippets and cluster broadcast - Custom terminal themes and per-connection color overrides - Remote host monitoring (CPU, memory, disk, network) - Wake-on-LAN with auto-connect %prep %autosetup -n %{crate}-%{commitversion} -p1 -a1 %cargo_prep -N # Check if .cargo/config.toml exists if [ -f .cargo/config.toml ]; then # If it exists, append the contents of %%{SOURCE2} to .cargo/config.toml cat %{SOURCE2} >> .cargo/config.toml echo "Appended %{SOURCE2} to .cargo/config.toml" else # If it does not exist, append the contents of %%{SOURCE2} to .cargo/config cat %{SOURCE2} >> .cargo/config echo "Appended %{SOURCE2} to .cargo/config" fi %build # Set vergen environment variables export VERGEN_GIT_COMMIT_DATE="date --utc '%{commitdatestring}'" export VERGEN_GIT_SHA="%{commit}" %cargo_build %{cargo_license_summary} %{cargo_license} > LICENSE.dependencies %{cargo_vendor_manifest} sed 's/\(.*\) (.*#\(.*\))/\1+git\2/' -i cargo-vendor.txt sed 's/^\([^+]*\)+.*+\([^+]*\)$/\1+\2/' -i cargo-vendor.txt %install # Set vergen environment variables export VERGEN_GIT_COMMIT_DATE="date --utc '%{commitdatestring}'" export VERGEN_GIT_SHA="%{commit}" install -Dpm 0755 target/release/%{name} %{buildroot}%{_bindir}/%{name} install -Dpm 0755 target/release/%{name}-cli %{buildroot}%{_bindir}/%{name}-cli install -Dpm 0644 rustconn/assets/%{crateid}.desktop \ %{buildroot}%{_datadir}/applications/%{crateid}.desktop install -Dpm 0644 rustconn/assets/icons/hicolor/scalable/apps/%{crateid}.svg \ %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/%{crateid}.svg for size in 128 256; do install -Dpm 0644 rustconn/assets/icons/hicolor/${size}x${size}/apps/%{crateid}.png \ %{buildroot}%{_datadir}/icons/hicolor/${size}x${size}/apps/%{crateid}.png done install -Dpm 0644 rustconn/assets/%{crateid}-rdp.xml \ %{buildroot}%{_datadir}/mime/packages/%{crateid}-rdp.xml install -Dpm 0644 rustconn/assets/%{crateid}-vv.xml \ %{buildroot}%{_datadir}/mime/packages/%{crateid}-vv.xml install -Dpm 0644 rustconn/assets/%{crateid}.metainfo.xml \ %{buildroot}%{_datadir}/metainfo/%{crateid}.metainfo.xml # local files for po_file in po/*.po; do lang=$(basename $po_file .po) mkdir -p %{buildroot}%{_datadir}/locale/$lang/LC_MESSAGES msgfmt -o %{buildroot}%{_datadir}/locale/$lang/LC_MESSAGES/%{name}.mo $po_file done %find_lang %{name} %check desktop-file-validate %{buildroot}%{_datadir}/applications/%{crateid}.desktop %if %{with check} # Set vergen environment variables export VERGEN_GIT_COMMIT_DATE="date --utc '%{commitdatestring}'" export VERGEN_GIT_SHA="%{commit}" %cargo_test %endif %files -f %{name}.lang %license LICENSE %license LICENSE.dependencies %license cargo-vendor.txt %doc *.md docs/*.md %{_bindir}/%{name} %{_bindir}/%{name}-cli %{_datadir}/applications/%{crateid}.desktop %{_datadir}/icons/hicolor/*/apps/%{crateid}.png %{_datadir}/icons/hicolor/scalable/apps/%{crateid}.svg %{_datadir}/mime/packages/%{crateid}-rdp.xml %{_datadir}/mime/packages/%{crateid}-vv.xml %{_metainfodir}/%{crateid}.metainfo.xml %changelog * Sun Oct 18 2026 Jean-Marc Liger - 0.23.15-1 - Update to 0.23.15 * Tue Oct 06 2026 Jean-Marc Liger - 0.23.1-1 - Update to 0.23.1 * Sat Sep 26 2026 Jean-Marc Liger - 0.22.6-1 - Update to 0.22.6 * Mon Aug 17 2026 Jean-Marc Liger - 0.20.3-1 - Update to 0.20.3 * Fri Jul 31 2026 Jean-Marc Liger - 0.19.8-1 - Update to 0.19.8 - Update BuildRequires * Sat Jul 18 2026 Jean-Marc Liger - 0.18.12-1 - Update to 0.18.12 * Sat Jul 11 2026 Jean-Marc Liger - 0.18.6-1 - Update to 0.18.6 * Sat Jul 04 2026 Jean-Marc Liger - 0.17.10-1 - Update to 0.17.10 * Sun Jun 28 2026 Jean-Marc Liger - 0.17.4-1 - Update to 0.17.4 * Sat Jun 06 2026 Jean-Marc Liger - 0.15.10-1 - Update to 0.15.10 * Tue Jun 02 2026 Jean-Marc Liger - 0.15.4-1 - Update to 0.15.4 * Thu May 28 2026 Jean-Marc Liger - 0.14.10-1 - Update to 0.14.10 * Fri May 22 2026 Jean-Marc Liger - 0.14.4-1 - Update to 0.14.4 * Wed May 20 2026 Jean-Marc Liger - 0.14.2-1 - Update to 0.14.2 * Fri May 15 2026 Jean-Marc Liger - 0.13.15-1 - Update to 0.13.15 * Sat May 09 2026 Jean-Marc Liger - 0.13.9-1 - Update to 0.13.9 * Fri May 08 2026 Jean-Marc Liger - 0.13.8-1 - Update to 0.13.8 * Mon May 04 2026 Jean-Marc Liger - 0.13.2-1 - Update to 0.13.2 * Sun May 03 2026 Jean-Marc Liger - 0.12.9-1 - Update to 0.12.9 * Fri May 01 2026 Jean-Marc Liger - 0.12.8-1 - Update to 0.12.8 * Wed Apr 22 2026 Jean-Marc Liger - 0.11.5-1 - Update to 0.11.5 * Sat Apr 18 2026 Jean-Marc Liger - 0.11.0-1 - Update to 0.11.0 * Sat Apr 11 2026 Jean-Marc Liger - 0.10.16-1 - Update to 0.10.16 * Wed Apr 08 2026 Jean-Marc Liger - 0.10.12-1 - Update to 0.10.12 * Tue Mar 10 2026 Jean-Marc Liger - 0.9.13-1 - Initial package