From 0d4ddc3451127a6238d6c63b77b14a2866a1426c Mon Sep 17 00:00:00 2001 From: Aiden McClelland Date: Fri, 16 Jan 2026 19:09:41 -0700 Subject: [PATCH] help text for args --- core/locales/i18n.yaml | 1204 ++++++++++++++++- core/src/action.rs | 9 +- core/src/auth.rs | 3 + core/src/backup/backup_bulk.rs | 6 +- core/src/backup/restore.rs | 3 + core/src/backup/target/cifs.rs | 10 + core/src/backup/target/mod.rs | 10 +- core/src/bins/mod.rs | 30 +- core/src/context/config.rs | 28 +- core/src/control.rs | 1 + core/src/db/mod.rs | 10 +- core/src/install/mod.rs | 9 +- core/src/lib.rs | 1 + core/src/logs.rs | 11 +- core/src/net/acme.rs | 6 +- core/src/net/dns.rs | 2 + core/src/net/gateway.rs | 6 + core/src/net/host/address.rs | 7 +- core/src/net/host/binding.rs | 4 +- core/src/net/host/mod.rs | 2 + core/src/net/tor/arti.rs | 3 +- core/src/net/tor/ctor.rs | 4 +- core/src/net/tunnel.rs | 4 + core/src/net/wifi.rs | 6 +- core/src/notifications.rs | 8 + core/src/os_install/mod.rs | 11 +- core/src/registry/admin.rs | 21 +- core/src/registry/context.rs | 13 +- core/src/registry/db.rs | 9 +- core/src/registry/info.rs | 2 + core/src/registry/os/asset/add.rs | 6 +- core/src/registry/os/asset/get.rs | 6 +- core/src/registry/os/asset/sign.rs | 5 +- core/src/registry/os/version/mod.rs | 13 +- core/src/registry/package/add.rs | 16 +- core/src/registry/package/get.rs | 12 +- core/src/registry/package/signer.rs | 7 +- core/src/s9pk/rpc.rs | 4 + core/src/s9pk/v1/mod.rs | 1 + core/src/s9pk/v2/pack.rs | 29 +- core/src/service/cli.rs | 2 +- core/src/service/effects/action.rs | 11 +- core/src/service/effects/callbacks.rs | 4 +- core/src/service/effects/prelude.rs | 2 +- core/src/service/effects/subcontainer/sync.rs | 17 +- core/src/service/mod.rs | 14 +- core/src/ssh.rs | 2 + core/src/system.rs | 30 +- core/src/tunnel/context.rs | 8 +- core/src/tunnel/db.rs | 9 +- core/src/tunnel/web.rs | 3 +- core/src/update/mod.rs | 5 +- core/src/util/rpc.rs | 2 +- 53 files changed, 1497 insertions(+), 154 deletions(-) diff --git a/core/locales/i18n.yaml b/core/locales/i18n.yaml index 7bad1b9d8..32c49d203 100644 --- a/core/locales/i18n.yaml +++ b/core/locales/i18n.yaml @@ -1122,18 +1122,18 @@ init.error-running-script: pl_PL: "Błąd uruchamiania %{script}: %{error}" init.cpu-governor-not-available: - en_US: "CPU Governor \"%{governor}\" Not Available" - de_DE: "CPU-Governor \"%{governor}\" nicht verfügbar" - es_ES: "CPU Governor \"%{governor}\" no disponible" - fr_FR: "Gouverneur CPU \"%{governor}\" non disponible" - pl_PL: "Governor CPU \"%{governor}\" niedostępny" + en_US: 'CPU Governor "%{governor}" Not Available' + de_DE: 'CPU-Governor "%{governor}" nicht verfügbar' + es_ES: 'CPU Governor "%{governor}" no disponible' + fr_FR: 'Gouverneur CPU "%{governor}" non disponible' + pl_PL: 'Governor CPU "%{governor}" niedostępny' init.setting-cpu-governor: - en_US: "Setting CPU Governor to \"%{governor}\"" - de_DE: "Setze CPU-Governor auf \"%{governor}\"" - es_ES: "Configurando CPU Governor a \"%{governor}\"" - fr_FR: "Configuration du gouverneur CPU à \"%{governor}\"" - pl_PL: "Ustawianie governora CPU na \"%{governor}\"" + en_US: 'Setting CPU Governor to "%{governor}"' + de_DE: 'Setze CPU-Governor auf "%{governor}"' + es_ES: 'Configurando CPU Governor a "%{governor}"' + fr_FR: 'Configuration du gouverneur CPU à "%{governor}"' + pl_PL: 'Ustawianie governora CPU na "%{governor}"' init.clock-sync-timeout: en_US: "Timed out waiting for system time to synchronize" @@ -2519,6 +2519,1190 @@ util.net.websocket-ping-timeout: fr_FR: "Délai d'attente : le WebSocket n'a pas répondu au ping dans les %{timeout}" pl_PL: "Przekroczono limit czasu: WebSocket nie odpowiedział na ping w ciągu %{timeout}" +# CLI argument help text (help.arg.*) +help.arg.acme-contact: + en_US: "Contact email for ACME certificate authority" + de_DE: "Kontakt-E-Mail für ACME-Zertifizierungsstelle" + es_ES: "Correo electrónico de contacto para la autoridad de certificación ACME" + fr_FR: "Email de contact pour l'autorité de certification ACME" + pl_PL: "Adres e-mail kontaktowy dla urzędu certyfikacji ACME" + +help.arg.acme-provider: + en_US: "ACME provider identifier or url" + de_DE: "ACME-Anbieter-Kennung oder URL" + es_ES: "Identificador o URL del proveedor ACME" + fr_FR: "Identifiant ou URL du fournisseur ACME" + pl_PL: "Identyfikator lub URL dostawcy ACME" + +help.arg.add-signer-contact: + en_US: "Add contact information to signer" + de_DE: "Kontaktinformationen zum Unterzeichner hinzufügen" + es_ES: "Agregar información de contacto al firmante" + fr_FR: "Ajouter des informations de contact au signataire" + pl_PL: "Dodaj informacje kontaktowe do sygnatariusza" + +help.arg.add-signer-key: + en_US: "Add a public key to signer" + de_DE: "Öffentlichen Schlüssel zum Unterzeichner hinzufügen" + es_ES: "Agregar una clave pública al firmante" + fr_FR: "Ajouter une clé publique au signataire" + pl_PL: "Dodaj klucz publiczny do sygnatariusza" + +help.arg.allow-model-mismatch: + en_US: "Allow database model mismatch" + de_DE: "Datenbankmodell-Abweichung erlauben" + es_ES: "Permitir discrepancia en el modelo de base de datos" + fr_FR: "Autoriser la non-concordance du modèle de base de données" + pl_PL: "Zezwól na niezgodność modelu bazy danych" + +help.arg.allow-partial-backup: + en_US: "Leave media mounted even if backupfs fails to mount" + de_DE: "Medium eingehängt lassen, auch wenn backupfs nicht eingehängt werden kann" + es_ES: "Dejar el medio montado incluso si backupfs falla al montar" + fr_FR: "Laisser le média monté même si backupfs échoue à monter" + pl_PL: "Pozostaw nośnik zamontowany nawet jeśli backupfs nie może się zamontować" + +help.arg.architecture-mask: + en_US: "Filter by CPU architecture" + de_DE: "Nach CPU-Architektur filtern" + es_ES: "Filtrar por arquitectura de CPU" + fr_FR: "Filtrer par architecture CPU" + pl_PL: "Filtruj według architektury CPU" + +help.arg.assets-path: + en_US: "Path to assets directory" + de_DE: "Pfad zum Assets-Verzeichnis" + es_ES: "Ruta al directorio de recursos" + fr_FR: "Chemin vers le répertoire des ressources" + pl_PL: "Ścieżka do katalogu zasobów" + +help.arg.binding-enabled: + en_US: "Enable or disable this binding" + de_DE: "Diese Bindung aktivieren oder deaktivieren" + es_ES: "Habilitar o deshabilitar este enlace" + fr_FR: "Activer ou désactiver cette liaison" + pl_PL: "Włącz lub wyłącz to powiązanie" + +help.arg.cert-subject-alt-names: + en_US: "Subject Alternative Name(s) for certificate" + de_DE: "Alternative Subjektnamen für das Zertifikat" + es_ES: "Nombre(s) alternativo(s) del sujeto para el certificado" + fr_FR: "Nom(s) alternatif(s) du sujet pour le certificat" + pl_PL: "Alternatywna nazwa podmiotu dla certyfikatu" + +help.arg.command-to-execute: + en_US: "Command to execute in the container" + de_DE: "Befehl, der im Container ausgeführt werden soll" + es_ES: "Comando a ejecutar en el contenedor" + fr_FR: "Commande à exécuter dans le conteneur" + pl_PL: "Polecenie do wykonania w kontenerze" + +help.arg.config-file-path: + en_US: "Path to configuration file" + de_DE: "Pfad zur Konfigurationsdatei" + es_ES: "Ruta al archivo de configuración" + fr_FR: "Chemin vers le fichier de configuration" + pl_PL: "Ścieżka do pliku konfiguracyjnego" + +help.arg.container-name: + en_US: "Name of the container" + de_DE: "Name des Containers" + es_ES: "Nombre del contenedor" + fr_FR: "Nom du conteneur" + pl_PL: "Nazwa kontenera" + +help.arg.cookie-path: + en_US: "Path to cookie file" + de_DE: "Pfad zur Cookie-Datei" + es_ES: "Ruta al archivo de cookies" + fr_FR: "Chemin vers le fichier de cookies" + pl_PL: "Ścieżka do pliku cookie" + +help.arg.data-directory: + en_US: "Path to data directory" + de_DE: "Pfad zum Datenverzeichnis" + es_ES: "Ruta al directorio de datos" + fr_FR: "Chemin vers le répertoire de données" + pl_PL: "Ścieżka do katalogu danych" + +help.arg.data-drive-path: + en_US: "Path to the data drive" + de_DE: "Pfad zum Datenlaufwerk" + es_ES: "Ruta a la unidad de datos" + fr_FR: "Chemin vers le disque de données" + pl_PL: "Ścieżka do dysku danych" + +help.arg.db-pointer: + en_US: "JSON pointer to object in database to dump" + de_DE: "JSON-Zeiger auf Objekt in der Datenbank zum Ausgeben" + es_ES: "Puntero JSON al objeto en la base de datos a exportar" + fr_FR: "Pointeur JSON vers l'objet dans la base de données à exporter" + pl_PL: "Wskaźnik JSON do obiektu w bazie danych do wyeksportowania" + +help.arg.destination-path: + en_US: "Destination path for download" + de_DE: "Zielpfad für den Download" + es_ES: "Ruta de destino para la descarga" + fr_FR: "Chemin de destination pour le téléchargement" + pl_PL: "Ścieżka docelowa do pobrania" + +help.arg.developer-key-path: + en_US: "Path to developer signing key" + de_DE: "Pfad zum Entwickler-Signaturschlüssel" + es_ES: "Ruta a la clave de firma del desarrollador" + fr_FR: "Chemin vers la clé de signature du développeur" + pl_PL: "Ścieżka do klucza podpisu dewelopera" + +help.arg.disable-encryption: + en_US: "Disable trivial LUKS encryption" + de_DE: "Triviale LUKS-Verschlüsselung deaktivieren" + es_ES: "Deshabilitar cifrado LUKS trivial" + fr_FR: "Désactiver le chiffrement LUKS trivial" + pl_PL: "Wyłącz trywialne szyfrowanie LUKS" + +help.arg.docker-build: + en_US: "Build Docker image from Dockerfile" + de_DE: "Docker-Image aus Dockerfile erstellen" + es_ES: "Construir imagen Docker desde Dockerfile" + fr_FR: "Construire l'image Docker à partir du Dockerfile" + pl_PL: "Zbuduj obraz Docker z pliku Dockerfile" + +help.arg.docker-tag: + en_US: "Docker image tag to use" + de_DE: "Zu verwendender Docker-Image-Tag" + es_ES: "Etiqueta de imagen Docker a usar" + fr_FR: "Tag d'image Docker à utiliser" + pl_PL: "Tag obrazu Docker do użycia" + +help.arg.dockerfile-path: + en_US: "Path to Dockerfile" + de_DE: "Pfad zum Dockerfile" + es_ES: "Ruta al Dockerfile" + fr_FR: "Chemin vers le Dockerfile" + pl_PL: "Ścieżka do pliku Dockerfile" + +help.arg.download-directory: + en_US: "Directory path to download to" + de_DE: "Verzeichnispfad für den Download" + es_ES: "Ruta del directorio de descarga" + fr_FR: "Chemin du répertoire de téléchargement" + pl_PL: "Ścieżka katalogu do pobrania" + +help.arg.emulate-missing-arch: + en_US: "Emulate missing architecture using this one" + de_DE: "Fehlende Architektur mit dieser emulieren" + es_ES: "Emular arquitectura faltante usando esta" + fr_FR: "Émuler l'architecture manquante avec celle-ci" + pl_PL: "Emuluj brakującą architekturę używając tej" + +help.arg.env-file-path: + en_US: "Path to environment file" + de_DE: "Pfad zur Umgebungsdatei" + es_ES: "Ruta al archivo de entorno" + fr_FR: "Chemin vers le fichier d'environnement" + pl_PL: "Ścieżka do pliku środowiskowego" + +help.arg.env-variable: + en_US: "Environment variable (KEY=VALUE)" + de_DE: "Umgebungsvariable (SCHLÜSSEL=WERT)" + es_ES: "Variable de entorno (CLAVE=VALOR)" + fr_FR: "Variable d'environnement (CLÉ=VALEUR)" + pl_PL: "Zmienna środowiskowa (KLUCZ=WARTOŚĆ)" + +help.arg.event-id: + en_US: "Unique event identifier" + de_DE: "Eindeutige Ereignis-Kennung" + es_ES: "Identificador único de evento" + fr_FR: "Identifiant unique de l'événement" + pl_PL: "Unikalny identyfikator zdarzenia" + +help.arg.except-actions: + en_US: "Action IDs to exclude" + de_DE: "Auszuschließende Aktions-IDs" + es_ES: "IDs de acciones a excluir" + fr_FR: "IDs d'actions à exclure" + pl_PL: "Identyfikatory akcji do wykluczenia" + +help.arg.except-callbacks: + en_US: "Callback IDs to exclude" + de_DE: "Auszuschließende Callback-IDs" + es_ES: "IDs de callbacks a excluir" + fr_FR: "IDs de callbacks à exclure" + pl_PL: "Identyfikatory callbacków do wykluczenia" + +help.arg.except-tasks: + en_US: "Task IDs to exclude" + de_DE: "Auszuschließende Aufgaben-IDs" + es_ES: "IDs de tareas a excluir" + fr_FR: "IDs de tâches à exclure" + pl_PL: "Identyfikatory zadań do wykluczenia" + +help.arg.force-clear-task: + en_US: "Force clear the task even if running" + de_DE: "Aufgabe erzwungen löschen, auch wenn sie läuft" + es_ES: "Forzar la limpieza de la tarea aunque esté ejecutándose" + fr_FR: "Forcer la suppression de la tâche même si elle est en cours" + pl_PL: "Wymuś wyczyszczenie zadania nawet jeśli jest uruchomione" + +help.arg.force-stderr-tty: + en_US: "Force stderr to be treated as a TTY" + de_DE: "stderr als TTY behandeln erzwingen" + es_ES: "Forzar que stderr sea tratado como TTY" + fr_FR: "Forcer stderr à être traité comme un TTY" + pl_PL: "Wymuś traktowanie stderr jako TTY" + +help.arg.force-tty: + en_US: "Force TTY mode for I/O" + de_DE: "TTY-Modus für E/A erzwingen" + es_ES: "Forzar modo TTY para E/S" + fr_FR: "Forcer le mode TTY pour les E/S" + pl_PL: "Wymuś tryb TTY dla I/O" + +help.arg.force-uninstall: + en_US: "Ignore errors in service uninit script" + de_DE: "Fehler im Service-Uninit-Skript ignorieren" + es_ES: "Ignorar errores en el script de desinicialización del servicio" + fr_FR: "Ignorer les erreurs dans le script de désinitialisation du service" + pl_PL: "Ignoruj błędy w skrypcie deinicjalizacji usługi" + +help.arg.host-url: + en_US: "URL of the StartOS server" + de_DE: "URL des StartOS-Servers" + es_ES: "URL del servidor StartOS" + fr_FR: "URL du serveur StartOS" + pl_PL: "URL serwera StartOS" + +help.arg.icon-path: + en_US: "Path to service icon file" + de_DE: "Pfad zur Service-Icon-Datei" + es_ES: "Ruta al archivo de icono del servicio" + fr_FR: "Chemin vers le fichier d'icône du service" + pl_PL: "Ścieżka do pliku ikony usługi" + +help.arg.image-id: + en_US: "Docker image identifier" + de_DE: "Docker-Image-Kennung" + es_ES: "Identificador de imagen Docker" + fr_FR: "Identifiant de l'image Docker" + pl_PL: "Identyfikator obrazu Docker" + +help.arg.include-private-data: + en_US: "Include private data in output" + de_DE: "Private Daten in der Ausgabe einschließen" + es_ES: "Incluir datos privados en la salida" + fr_FR: "Inclure les données privées dans la sortie" + pl_PL: "Uwzględnij dane prywatne w wynikach" + +help.arg.javascript-path: + en_US: "Path to JavaScript file" + de_DE: "Pfad zur JavaScript-Datei" + es_ES: "Ruta al archivo JavaScript" + fr_FR: "Chemin vers le fichier JavaScript" + pl_PL: "Ścieżka do pliku JavaScript" + +help.arg.json-pointer: + en_US: "JSON pointer to specific value" + de_DE: "JSON-Zeiger auf spezifischen Wert" + es_ES: "Puntero JSON a un valor específico" + fr_FR: "Pointeur JSON vers une valeur spécifique" + pl_PL: "Wskaźnik JSON do konkretnej wartości" + +help.arg.keyboard-option: + en_US: "Additional keyboard option" + de_DE: "Zusätzliche Tastaturoption" + es_ES: "Opción adicional de teclado" + fr_FR: "Option de clavier supplémentaire" + pl_PL: "Dodatkowa opcja klawiatury" + +help.arg.license-path: + en_US: "Path to license file" + de_DE: "Pfad zur Lizenzdatei" + es_ES: "Ruta al archivo de licencia" + fr_FR: "Chemin vers le fichier de licence" + pl_PL: "Ścieżka do pliku licencji" + +help.arg.log-before: + en_US: "Show logs before the cursor position" + de_DE: "Logs vor der Cursorposition anzeigen" + es_ES: "Mostrar registros antes de la posición del cursor" + fr_FR: "Afficher les journaux avant la position du curseur" + pl_PL: "Pokaż logi przed pozycją kursora" + +help.arg.log-boot: + en_US: "Filter logs by boot ID" + de_DE: "Logs nach Boot-ID filtern" + es_ES: "Filtrar registros por ID de arranque" + fr_FR: "Filtrer les journaux par ID de démarrage" + pl_PL: "Filtruj logi według ID rozruchu" + +help.arg.log-cursor: + en_US: "Start from this cursor position" + de_DE: "Von dieser Cursorposition starten" + es_ES: "Comenzar desde esta posición del cursor" + fr_FR: "Commencer à partir de cette position du curseur" + pl_PL: "Rozpocznij od tej pozycji kursora" + +help.arg.log-follow: + en_US: "Follow log output in real-time" + de_DE: "Log-Ausgabe in Echtzeit verfolgen" + es_ES: "Seguir la salida del registro en tiempo real" + fr_FR: "Suivre la sortie des journaux en temps réel" + pl_PL: "Śledź wyjście logów w czasie rzeczywistym" + +help.arg.log-limit: + en_US: "Maximum number of log entries" + de_DE: "Maximale Anzahl von Log-Einträgen" + es_ES: "Número máximo de entradas de registro" + fr_FR: "Nombre maximum d'entrées de journal" + pl_PL: "Maksymalna liczba wpisów logu" + +help.arg.mirror-url: + en_US: "URL of the mirror" + de_DE: "URL des Spiegels" + es_ES: "URL del espejo" + fr_FR: "URL du miroir" + pl_PL: "URL serwera lustrzanego" + +help.arg.multi-arch-s9pks: + en_US: "Enable multi-architecture s9pk support" + de_DE: "Multi-Architektur-s9pk-Unterstützung aktivieren" + es_ES: "Habilitar soporte s9pk multi-arquitectura" + fr_FR: "Activer le support s9pk multi-architecture" + pl_PL: "Włącz obsługę s9pk wieloarchitekturowego" + +help.arg.no-assets: + en_US: "Build without assets directory" + de_DE: "Ohne Assets-Verzeichnis erstellen" + es_ES: "Construir sin directorio de recursos" + fr_FR: "Construire sans répertoire de ressources" + pl_PL: "Zbuduj bez katalogu zasobów" + +help.arg.no-mmap: + en_US: "Disable memory-mapped file I/O" + de_DE: "Memory-Mapped-Datei-E/A deaktivieren" + es_ES: "Deshabilitar E/S de archivos mapeados en memoria" + fr_FR: "Désactiver les E/S de fichiers mappés en mémoire" + pl_PL: "Wyłącz operacje I/O plików mapowanych w pamięci" + +help.arg.no-progress: + en_US: "Disable progress display" + de_DE: "Fortschrittsanzeige deaktivieren" + es_ES: "Deshabilitar visualización de progreso" + fr_FR: "Désactiver l'affichage de la progression" + pl_PL: "Wyłącz wyświetlanie postępu" + +help.arg.no-verify: + en_US: "Skip signature verification" + de_DE: "Signaturprüfung überspringen" + es_ES: "Omitir verificación de firma" + fr_FR: "Ignorer la vérification de signature" + pl_PL: "Pomiń weryfikację podpisu" + +help.arg.nvidia-container: + en_US: "Enable NVIDIA container support" + de_DE: "NVIDIA-Container-Unterstützung aktivieren" + es_ES: "Habilitar soporte de contenedor NVIDIA" + fr_FR: "Activer le support des conteneurs NVIDIA" + pl_PL: "Włącz obsługę kontenerów NVIDIA" + +help.arg.old-backup-password: + en_US: "Previous backup password" + de_DE: "Vorheriges Backup-Passwort" + es_ES: "Contraseña de respaldo anterior" + fr_FR: "Ancien mot de passe de sauvegarde" + pl_PL: "Poprzednie hasło kopii zapasowej" + +help.arg.only-callbacks: + en_US: "Only clear these callback IDs" + de_DE: "Nur diese Callback-IDs löschen" + es_ES: "Solo borrar estos IDs de callback" + fr_FR: "Ne supprimer que ces IDs de callback" + pl_PL: "Wyczyść tylko te identyfikatory callback" + +help.arg.only-tasks: + en_US: "Only clear these task IDs" + de_DE: "Nur diese Aufgaben-IDs löschen" + es_ES: "Solo borrar estos IDs de tarea" + fr_FR: "Ne supprimer que ces IDs de tâche" + pl_PL: "Wyczyść tylko te identyfikatory zadań" + +help.arg.os-version: + en_US: "StartOS version number" + de_DE: "StartOS-Versionsnummer" + es_ES: "Número de versión de StartOS" + fr_FR: "Numéro de version de StartOS" + pl_PL: "Numer wersji StartOS" + +help.arg.other-versions-detail: + en_US: "Detail level for other versions" + de_DE: "Detailgrad für andere Versionen" + es_ES: "Nivel de detalle para otras versiones" + fr_FR: "Niveau de détail pour les autres versions" + pl_PL: "Poziom szczegółowości dla innych wersji" + +help.arg.output-path: + en_US: "Output file path" + de_DE: "Ausgabedateipfad" + es_ES: "Ruta del archivo de salida" + fr_FR: "Chemin du fichier de sortie" + pl_PL: "Ścieżka pliku wyjściowego" + +help.arg.package-ids-to-backup: + en_US: "Package IDs to include in backup" + de_DE: "Paket-IDs für das Backup einschließen" + es_ES: "IDs de paquetes a incluir en el respaldo" + fr_FR: "IDs de paquets à inclure dans la sauvegarde" + pl_PL: "Identyfikatory pakietów do uwzględnienia w kopii zapasowej" + +help.arg.package-url: + en_US: "URL of the package" + de_DE: "URL des Pakets" + es_ES: "URL del paquete" + fr_FR: "URL du paquet" + pl_PL: "URL pakietu" + +help.arg.platform: + en_US: "Target platform identifier" + de_DE: "Zielplattform-Kennung" + es_ES: "Identificador de plataforma objetivo" + fr_FR: "Identifiant de la plateforme cible" + pl_PL: "Identyfikator platformy docelowej" + +help.arg.postgres-connection-url: + en_US: "PostgreSQL connection URL" + de_DE: "PostgreSQL-Verbindungs-URL" + es_ES: "URL de conexión PostgreSQL" + fr_FR: "URL de connexion PostgreSQL" + pl_PL: "URL połączenia PostgreSQL" + +help.arg.proxy-url: + en_US: "HTTP/SOCKS proxy URL" + de_DE: "HTTP/SOCKS-Proxy-URL" + es_ES: "URL del proxy HTTP/SOCKS" + fr_FR: "URL du proxy HTTP/SOCKS" + pl_PL: "URL proxy HTTP/SOCKS" + +help.arg.pty-size: + en_US: "PTY terminal size (:[::])" + de_DE: "PTY-Terminalgröße (:[::])" + es_ES: "Tamaño del terminal PTY (:[::])" + fr_FR: "Taille du terminal PTY (:[::])" + pl_PL: "Rozmiar terminala PTY (:[::])" + +help.arg.registry-hostname: + en_US: "Registry server hostname" + de_DE: "Registry-Server-Hostname" + es_ES: "Nombre de host del servidor de registro" + fr_FR: "Nom d'hôte du serveur de registre" + pl_PL: "Nazwa hosta serwera rejestru" + +help.arg.registry-listen-address: + en_US: "Address for registry to listen on" + de_DE: "Adresse, auf der das Registry lauscht" + es_ES: "Dirección en la que escucha el registro" + fr_FR: "Adresse d'écoute du registre" + pl_PL: "Adres nasłuchiwania rejestru" + +help.arg.registry-name: + en_US: "Name of the registry" + de_DE: "Name des Registrys" + es_ES: "Nombre del registro" + fr_FR: "Nom du registre" + pl_PL: "Nazwa rejestru" + +help.arg.registry-url: + en_US: "URL of the registry" + de_DE: "URL des Registrys" + es_ES: "URL del registro" + fr_FR: "URL du registre" + pl_PL: "URL rejestru" + +help.arg.remove-signer-contact: + en_US: "Remove contact from signer" + de_DE: "Kontakt vom Unterzeichner entfernen" + es_ES: "Eliminar contacto del firmante" + fr_FR: "Supprimer le contact du signataire" + pl_PL: "Usuń kontakt z sygnatariusza" + +help.arg.remove-signer-key: + en_US: "Remove public key from signer" + de_DE: "Öffentlichen Schlüssel vom Unterzeichner entfernen" + es_ES: "Eliminar clave pública del firmante" + fr_FR: "Supprimer la clé publique du signataire" + pl_PL: "Usuń klucz publiczny z sygnatariusza" + +help.arg.reverify-hash: + en_US: "Verify hash after download completes" + de_DE: "Hash nach Abschluss des Downloads überprüfen" + es_ES: "Verificar hash después de completar la descarga" + fr_FR: "Vérifier le hash après le téléchargement" + pl_PL: "Zweryfikuj hash po zakończeniu pobierania" + +help.arg.revision-cache-size: + en_US: "Maximum number of cached revisions" + de_DE: "Maximale Anzahl zwischengespeicherter Revisionen" + es_ES: "Número máximo de revisiones en caché" + fr_FR: "Nombre maximum de révisions en cache" + pl_PL: "Maksymalna liczba rewizji w pamięci podręcznej" + +help.arg.server-id: + en_US: "Unique server identifier" + de_DE: "Eindeutige Server-Kennung" + es_ES: "Identificador único del servidor" + fr_FR: "Identifiant unique du serveur" + pl_PL: "Unikalny identyfikator serwera" + +help.arg.set-signer-name: + en_US: "Set the signer name" + de_DE: "Unterzeichnernamen festlegen" + es_ES: "Establecer el nombre del firmante" + fr_FR: "Définir le nom du signataire" + pl_PL: "Ustaw nazwę sygnatariusza" + +help.arg.signature-hash: + en_US: "Hash for signature verification" + de_DE: "Hash für Signaturüberprüfung" + es_ES: "Hash para verificación de firma" + fr_FR: "Hash pour la vérification de signature" + pl_PL: "Hash do weryfikacji podpisu" + +help.arg.signer-contact: + en_US: "Contact information for signer" + de_DE: "Kontaktinformationen für Unterzeichner" + es_ES: "Información de contacto del firmante" + fr_FR: "Informations de contact du signataire" + pl_PL: "Informacje kontaktowe sygnatariusza" + +help.arg.signer-key: + en_US: "Public key for signer" + de_DE: "Öffentlicher Schlüssel für Unterzeichner" + es_ES: "Clave pública del firmante" + fr_FR: "Clé publique du signataire" + pl_PL: "Klucz publiczny sygnatariusza" + +help.arg.signer-name: + en_US: "Name of the signer" + de_DE: "Name des Unterzeichners" + es_ES: "Nombre del firmante" + fr_FR: "Nom du signataire" + pl_PL: "Nazwa sygnatariusza" + +help.arg.smtp-from: + en_US: "Email sender address" + de_DE: "E-Mail-Absenderadresse" + es_ES: "Dirección del remitente de correo" + fr_FR: "Adresse de l'expéditeur" + pl_PL: "Adres nadawcy e-mail" + +help.arg.smtp-login: + en_US: "SMTP authentication username" + de_DE: "SMTP-Authentifizierungsbenutzername" + es_ES: "Nombre de usuario de autenticación SMTP" + fr_FR: "Nom d'utilisateur d'authentification SMTP" + pl_PL: "Nazwa użytkownika uwierzytelniania SMTP" + +help.arg.smtp-password: + en_US: "SMTP authentication password" + de_DE: "SMTP-Authentifizierungspasswort" + es_ES: "Contraseña de autenticación SMTP" + fr_FR: "Mot de passe d'authentification SMTP" + pl_PL: "Hasło uwierzytelniania SMTP" + +help.arg.smtp-port: + en_US: "SMTP server port" + de_DE: "SMTP-Server-Port" + es_ES: "Puerto del servidor SMTP" + fr_FR: "Port du serveur SMTP" + pl_PL: "Port serwera SMTP" + +help.arg.smtp-server: + en_US: "SMTP server hostname" + de_DE: "SMTP-Server-Hostname" + es_ES: "Nombre de host del servidor SMTP" + fr_FR: "Nom d'hôte du serveur SMTP" + pl_PL: "Nazwa hosta serwera SMTP" + +help.arg.smtp-to: + en_US: "Email recipient address" + de_DE: "E-Mail-Empfängeradresse" + es_ES: "Dirección del destinatario de correo" + fr_FR: "Adresse du destinataire" + pl_PL: "Adres odbiorcy e-mail" + +help.arg.socket-path: + en_US: "Path to Unix socket" + de_DE: "Pfad zum Unix-Socket" + es_ES: "Ruta al socket Unix" + fr_FR: "Chemin vers le socket Unix" + pl_PL: "Ścieżka do gniazda Unix" + +help.arg.socks-listen-address: + en_US: "SOCKS proxy listen address" + de_DE: "SOCKS-Proxy-Lausch-Adresse" + es_ES: "Dirección de escucha del proxy SOCKS" + fr_FR: "Adresse d'écoute du proxy SOCKS" + pl_PL: "Adres nasłuchiwania proxy SOCKS" + +help.arg.soft-uninstall: + en_US: "Uninstall without deleting service data" + de_DE: "Deinstallieren ohne Service-Daten zu löschen" + es_ES: "Desinstalar sin eliminar datos del servicio" + fr_FR: "Désinstaller sans supprimer les données du service" + pl_PL: "Odinstaluj bez usuwania danych usługi" + +help.arg.source-version: + en_US: "Source version to upgrade from" + de_DE: "Quellversion für das Upgrade" + es_ES: "Versión de origen para actualizar" + fr_FR: "Version source pour la mise à niveau" + pl_PL: "Wersja źródłowa do aktualizacji" + +help.arg.squashfs-image-path: + en_US: "Path to squashfs image file" + de_DE: "Pfad zur SquashFS-Image-Datei" + es_ES: "Ruta al archivo de imagen squashfs" + fr_FR: "Chemin vers le fichier image squashfs" + pl_PL: "Ścieżka do pliku obrazu squashfs" + +help.arg.subcontainer-name: + en_US: "Name of the subcontainer" + de_DE: "Name des Subcontainers" + es_ES: "Nombre del subcontenedor" + fr_FR: "Nom du sous-conteneur" + pl_PL: "Nazwa podkontenera" + +help.arg.target-disk: + en_US: "Target disk for installation" + de_DE: "Zieldatenträger für die Installation" + es_ES: "Disco de destino para la instalación" + fr_FR: "Disque cible pour l'installation" + pl_PL: "Dysk docelowy do instalacji" + +help.arg.target-version-range: + en_US: "Target version range constraint" + de_DE: "Ziel-Versionsbereichs-Einschränkung" + es_ES: "Restricción de rango de versión objetivo" + fr_FR: "Contrainte de plage de version cible" + pl_PL: "Ograniczenie zakresu wersji docelowej" + +help.arg.tor-proxy-url: + en_US: "Tor SOCKS proxy URL" + de_DE: "Tor-SOCKS-Proxy-URL" + es_ES: "URL del proxy SOCKS de Tor" + fr_FR: "URL du proxy SOCKS Tor" + pl_PL: "URL proxy SOCKS Tor" + +help.arg.tunnel-address: + en_US: "Tunnel server address" + de_DE: "Tunnel-Server-Adresse" + es_ES: "Dirección del servidor de túnel" + fr_FR: "Adresse du serveur tunnel" + pl_PL: "Adres serwera tunelu" + +help.arg.tunnel-listen-address: + en_US: "Address for tunnel to listen on" + de_DE: "Adresse, auf der der Tunnel lauscht" + es_ES: "Dirección en la que escucha el túnel" + fr_FR: "Adresse d'écoute du tunnel" + pl_PL: "Adres nasłuchiwania tunelu" + +help.arg.update-target-version: + en_US: "Target version for update" + de_DE: "Zielversion für das Update" + es_ES: "Versión objetivo para la actualización" + fr_FR: "Version cible pour la mise à jour" + pl_PL: "Wersja docelowa aktualizacji" + +help.arg.use-efi-boot: + en_US: "Use EFI boot mode" + de_DE: "EFI-Boot-Modus verwenden" + es_ES: "Usar modo de arranque EFI" + fr_FR: "Utiliser le mode de démarrage EFI" + pl_PL: "Użyj trybu rozruchu EFI" + +help.arg.user-name: + en_US: "User name to run as" + de_DE: "Benutzername für die Ausführung" + es_ES: "Nombre de usuario para ejecutar" + fr_FR: "Nom d'utilisateur pour l'exécution" + pl_PL: "Nazwa użytkownika do uruchomienia" + +help.arg.version-range: + en_US: "Version range constraint" + de_DE: "Versionsbereichs-Einschränkung" + es_ES: "Restricción de rango de versión" + fr_FR: "Contrainte de plage de version" + pl_PL: "Ograniczenie zakresu wersji" + +help.arg.wifi-country-code: + en_US: "ISO 3166-1 alpha-2 WiFi country code" + de_DE: "ISO 3166-1 Alpha-2 WLAN-Ländercode" + es_ES: "Código de país WiFi ISO 3166-1 alpha-2" + fr_FR: "Code pays WiFi ISO 3166-1 alpha-2" + pl_PL: "Kod kraju WiFi ISO 3166-1 alpha-2" + +help.arg.wipe-drive: + en_US: "Wipe the drive before use" + de_DE: "Laufwerk vor Verwendung löschen" + es_ES: "Borrar la unidad antes de usar" + fr_FR: "Effacer le disque avant utilisation" + pl_PL: "Wyczyść dysk przed użyciem" + +help.arg.wipe-tor-state: + en_US: "Wipe Tor state" + de_DE: "Tor-Zustand löschen" + es_ES: "Borrar estado de Tor" + fr_FR: "Effacer l'état de Tor" + pl_PL: "Wyczyść stan Tora" + +help.arg.workdir-path: + en_US: "Working directory path" + de_DE: "Arbeitsverzeichnispfad" + es_ES: "Ruta del directorio de trabajo" + fr_FR: "Chemin du répertoire de travail" + pl_PL: "Ścieżka katalogu roboczego" + +help.arg.action-id: + en_US: "Action identifier" + de_DE: "Aktions-Kennung" + es_ES: "Identificador de acción" + fr_FR: "Identifiant de l'action" + pl_PL: "Identyfikator akcji" + +help.arg.action-input: + en_US: "Input data for the action" + de_DE: "Eingabedaten für die Aktion" + es_ES: "Datos de entrada para la acción" + fr_FR: "Données d'entrée pour l'action" + pl_PL: "Dane wejściowe dla akcji" + +help.arg.asset-file-path: + en_US: "Path to the asset file" + de_DE: "Pfad zur Asset-Datei" + es_ES: "Ruta al archivo de recursos" + fr_FR: "Chemin vers le fichier de ressources" + pl_PL: "Ścieżka do pliku zasobów" + +help.arg.asset-url: + en_US: "URL of the asset" + de_DE: "URL des Assets" + es_ES: "URL del recurso" + fr_FR: "URL de la ressource" + pl_PL: "URL zasobu" + +help.arg.backup-password: + en_US: "Password for backup encryption" + de_DE: "Passwort für Backup-Verschlüsselung" + es_ES: "Contraseña para cifrado de copia de seguridad" + fr_FR: "Mot de passe pour le chiffrement de la sauvegarde" + pl_PL: "Hasło do szyfrowania kopii zapasowej" + +help.arg.backup-target-id: + en_US: "Backup target identifier" + de_DE: "Backup-Ziel-Kennung" + es_ES: "Identificador de destino de copia de seguridad" + fr_FR: "Identifiant de la cible de sauvegarde" + pl_PL: "Identyfikator celu kopii zapasowej" + +help.arg.chroot-path: + en_US: "Path for chroot environment" + de_DE: "Pfad für Chroot-Umgebung" + es_ES: "Ruta para el entorno chroot" + fr_FR: "Chemin pour l'environnement chroot" + pl_PL: "Ścieżka środowiska chroot" + +help.arg.cifs-hostname: + en_US: "CIFS server hostname" + de_DE: "CIFS-Server-Hostname" + es_ES: "Nombre de host del servidor CIFS" + fr_FR: "Nom d'hôte du serveur CIFS" + pl_PL: "Nazwa hosta serwera CIFS" + +help.arg.cifs-password: + en_US: "CIFS authentication password" + de_DE: "CIFS-Authentifizierungspasswort" + es_ES: "Contraseña de autenticación CIFS" + fr_FR: "Mot de passe d'authentification CIFS" + pl_PL: "Hasło uwierzytelniania CIFS" + +help.arg.cifs-path: + en_US: "Path on the CIFS share" + de_DE: "Pfad auf der CIFS-Freigabe" + es_ES: "Ruta en el recurso compartido CIFS" + fr_FR: "Chemin sur le partage CIFS" + pl_PL: "Ścieżka na udziale CIFS" + +help.arg.cifs-username: + en_US: "CIFS authentication username" + de_DE: "CIFS-Authentifizierungsbenutzername" + es_ES: "Nombre de usuario de autenticación CIFS" + fr_FR: "Nom d'utilisateur d'authentification CIFS" + pl_PL: "Nazwa użytkownika uwierzytelniania CIFS" + +help.arg.database-path: + en_US: "Path to the database file" + de_DE: "Pfad zur Datenbankdatei" + es_ES: "Ruta al archivo de base de datos" + fr_FR: "Chemin vers le fichier de base de données" + pl_PL: "Ścieżka do pliku bazy danych" + +help.arg.db-apply-expr: + en_US: "Database patch expression to apply" + de_DE: "Datenbank-Patch-Ausdruck zum Anwenden" + es_ES: "Expresión de parche de base de datos a aplicar" + fr_FR: "Expression de patch de base de données à appliquer" + pl_PL: "Wyrażenie łatki bazy danych do zastosowania" + +help.arg.db-path: + en_US: "Path to the database" + de_DE: "Pfad zur Datenbank" + es_ES: "Ruta a la base de datos" + fr_FR: "Chemin vers la base de données" + pl_PL: "Ścieżka do bazy danych" + +help.arg.dns-servers: + en_US: "DNS servers to use" + de_DE: "Zu verwendende DNS-Server" + es_ES: "Servidores DNS a utilizar" + fr_FR: "Serveurs DNS à utiliser" + pl_PL: "Serwery DNS do użycia" + +help.arg.echo-message: + en_US: "Message to echo back" + de_DE: "Nachricht zum Zurücksenden" + es_ES: "Mensaje para devolver" + fr_FR: "Message à renvoyer" + pl_PL: "Wiadomość do odesłania" + +help.arg.enable-zram: + en_US: "Enable zram" + de_DE: "Zram aktivieren" + es_ES: "Habilitar zram" + fr_FR: "Activer zram" + pl_PL: "Włącz zram" + +help.arg.file-path: + en_US: "Path to the file" + de_DE: "Pfad zur Datei" + es_ES: "Ruta al archivo" + fr_FR: "Chemin vers le fichier" + pl_PL: "Ścieżka do pliku" + +help.arg.fqdn: + en_US: "Fully qualified domain name" + de_DE: "Vollständig qualifizierter Domainname" + es_ES: "Nombre de dominio completo" + fr_FR: "Nom de domaine entièrement qualifié" + pl_PL: "W pełni kwalifikowana nazwa domeny" + +help.arg.gateway-id: + en_US: "Gateway identifier" + de_DE: "Gateway-Kennung" + es_ES: "Identificador de puerta de enlace" + fr_FR: "Identifiant de la passerelle" + pl_PL: "Identyfikator bramy" + +help.arg.gateway-name: + en_US: "Name of the gateway" + de_DE: "Name des Gateways" + es_ES: "Nombre de la puerta de enlace" + fr_FR: "Nom de la passerelle" + pl_PL: "Nazwa bramy" + +help.arg.governor-name: + en_US: "CPU governor name" + de_DE: "CPU-Governor-Name" + es_ES: "Nombre del gobernador de CPU" + fr_FR: "Nom du gouverneur CPU" + pl_PL: "Nazwa regulatora CPU" + +help.arg.host-id: + en_US: "Host identifier" + de_DE: "Host-Kennung" + es_ES: "Identificador de host" + fr_FR: "Identifiant de l'hôte" + pl_PL: "Identyfikator hosta" + +help.arg.input-path: + en_US: "Path to input file or directory" + de_DE: "Pfad zur Eingabedatei oder zum Verzeichnis" + es_ES: "Ruta al archivo o directorio de entrada" + fr_FR: "Chemin vers le fichier ou répertoire d'entrée" + pl_PL: "Ścieżka do pliku lub katalogu wejściowego" + +help.arg.internal-port: + en_US: "Internal port number" + de_DE: "Interne Portnummer" + es_ES: "Número de puerto interno" + fr_FR: "Numéro de port interne" + pl_PL: "Numer portu wewnętrznego" + +help.arg.is-public: + en_US: "Whether the interface is publicly addressable" + de_DE: "Ob die Schnittstelle öffentlich erreichbar ist" + es_ES: "Si la interfaz es accesible públicamente" + fr_FR: "Si l'interface est accessible publiquement" + pl_PL: "Czy interfejs jest publicznie adresowalny" + +help.arg.json-value: + en_US: "JSON value to set" + de_DE: "JSON-Wert zum Setzen" + es_ES: "Valor JSON a establecer" + fr_FR: "Valeur JSON à définir" + pl_PL: "Wartość JSON do ustawienia" + +help.arg.keyboard-layout: + en_US: "Keyboard layout code" + de_DE: "Tastaturbelegungscode" + es_ES: "Código de distribución de teclado" + fr_FR: "Code de disposition du clavier" + pl_PL: "Kod układu klawiatury" + +help.arg.keyboard-model: + en_US: "Keyboard model" + de_DE: "Tastaturmodell" + es_ES: "Modelo de teclado" + fr_FR: "Modèle de clavier" + pl_PL: "Model klawiatury" + +help.arg.keyboard-variant: + en_US: "Keyboard layout variant" + de_DE: "Tastaturbelegungsvariante" + es_ES: "Variante de distribución de teclado" + fr_FR: "Variante de disposition du clavier" + pl_PL: "Wariant układu klawiatury" + +help.arg.language-code: + en_US: "Language code" + de_DE: "Sprachcode" + es_ES: "Código de idioma" + fr_FR: "Code de langue" + pl_PL: "Kod języka" + +help.arg.listen-address: + en_US: "Address to listen on" + de_DE: "Adresse zum Lauschen" + es_ES: "Dirección para escuchar" + fr_FR: "Adresse d'écoute" + pl_PL: "Adres nasłuchiwania" + +help.arg.new-password: + en_US: "New password" + de_DE: "Neues Passwort" + es_ES: "Nueva contraseña" + fr_FR: "Nouveau mot de passe" + pl_PL: "Nowe hasło" + +help.arg.notification-before-id: + en_US: "Get notifications before this ID" + de_DE: "Benachrichtigungen vor dieser ID abrufen" + es_ES: "Obtener notificaciones antes de este ID" + fr_FR: "Obtenir les notifications avant cet ID" + pl_PL: "Pobierz powiadomienia przed tym ID" + +help.arg.notification-ids: + en_US: "Notification IDs" + de_DE: "Benachrichtigungs-IDs" + es_ES: "IDs de notificación" + fr_FR: "IDs de notification" + pl_PL: "ID powiadomień" + +help.arg.notification-level: + en_US: "Notification severity level" + de_DE: "Benachrichtigungsschweregrad" + es_ES: "Nivel de gravedad de notificación" + fr_FR: "Niveau de gravité de la notification" + pl_PL: "Poziom ważności powiadomienia" + +help.arg.notification-limit: + en_US: "Maximum number of notifications to return" + de_DE: "Maximale Anzahl zurückzugebender Benachrichtigungen" + es_ES: "Número máximo de notificaciones a devolver" + fr_FR: "Nombre maximum de notifications à retourner" + pl_PL: "Maksymalna liczba powiadomień do zwrócenia" + +help.arg.notification-message: + en_US: "Notification message content" + de_DE: "Inhalt der Benachrichtigung" + es_ES: "Contenido del mensaje de notificación" + fr_FR: "Contenu du message de notification" + pl_PL: "Treść powiadomienia" + +help.arg.notification-title: + en_US: "Notification title" + de_DE: "Benachrichtigungstitel" + es_ES: "Título de notificación" + fr_FR: "Titre de la notification" + pl_PL: "Tytuł powiadomienia" + +help.arg.old-password: + en_US: "Current password" + de_DE: "Aktuelles Passwort" + es_ES: "Contraseña actual" + fr_FR: "Mot de passe actuel" + pl_PL: "Aktualne hasło" + +help.arg.onion-address: + en_US: "Tor onion address" + de_DE: "Tor-Onion-Adresse" + es_ES: "Dirección onion de Tor" + fr_FR: "Adresse onion Tor" + pl_PL: "Adres onion Tor" + +help.arg.onion-secret-key: + en_US: "Tor onion secret key" + de_DE: "Geheimer Tor-Onion-Schlüssel" + es_ES: "Clave secreta onion de Tor" + fr_FR: "Clé secrète onion Tor" + pl_PL: "Tajny klucz onion Tor" + +help.arg.os-drive-path: + en_US: "Path to OS drive" + de_DE: "Pfad zum Betriebssystemlaufwerk" + es_ES: "Ruta a la unidad del sistema operativo" + fr_FR: "Chemin vers le disque du système d'exploitation" + pl_PL: "Ścieżka do dysku systemu operacyjnego" + +help.arg.package-id: + en_US: "Package identifier" + de_DE: "Paket-Kennung" + es_ES: "Identificador de paquete" + fr_FR: "Identifiant du paquet" + pl_PL: "Identyfikator pakietu" + +help.arg.package-ids: + en_US: "Package identifiers" + de_DE: "Paket-Kennungen" + es_ES: "Identificadores de paquete" + fr_FR: "Identifiants de paquets" + pl_PL: "Identyfikatory pakietów" + +help.arg.package-version: + en_US: "Package version" + de_DE: "Paketversion" + es_ES: "Versión del paquete" + fr_FR: "Version du paquet" + pl_PL: "Wersja pakietu" + +help.arg.release-notes: + en_US: "Release notes for this version" + de_DE: "Versionshinweise für diese Version" + es_ES: "Notas de lanzamiento para esta versión" + fr_FR: "Notes de version pour cette version" + pl_PL: "Informacje o wydaniu dla tej wersji" + +help.arg.replay-id: + en_US: "Replay identifier for task" + de_DE: "Wiederholungskennung für Aufgabe" + es_ES: "Identificador de repetición para tarea" + fr_FR: "Identifiant de relecture pour la tâche" + pl_PL: "Identyfikator powtórzenia dla zadania" + +help.arg.reset-reason: + en_US: "Reason for the reset" + de_DE: "Grund für das Zurücksetzen" + es_ES: "Razón del restablecimiento" + fr_FR: "Raison de la réinitialisation" + pl_PL: "Powód resetowania" + +help.arg.s9pk-file-path: + en_US: "Path to s9pk package file" + de_DE: "Pfad zur s9pk-Paketdatei" + es_ES: "Ruta al archivo de paquete s9pk" + fr_FR: "Chemin vers le fichier de paquet s9pk" + pl_PL: "Ścieżka do pliku pakietu s9pk" + +help.arg.session-ids: + en_US: "Session identifiers" + de_DE: "Sitzungskennungen" + es_ES: "Identificadores de sesión" + fr_FR: "Identifiants de session" + pl_PL: "Identyfikatory sesji" + +help.arg.signer-id: + en_US: "Signer identifier" + de_DE: "Unterzeichner-Kennung" + es_ES: "Identificador de firmante" + fr_FR: "Identifiant du signataire" + pl_PL: "Identyfikator sygnatariusza" + +help.arg.source-version-range: + en_US: "Source version range for migration" + de_DE: "Quellversionsbereich für Migration" + es_ES: "Rango de versión de origen para migración" + fr_FR: "Plage de version source pour la migration" + pl_PL: "Zakres wersji źródłowej dla migracji" + +help.arg.ssh-fingerprint: + en_US: "SSH key fingerprint" + de_DE: "SSH-Schlüsselfingerabdruck" + es_ES: "Huella digital de clave SSH" + fr_FR: "Empreinte de clé SSH" + pl_PL: "Odcisk palca klucza SSH" + +help.arg.ssh-public-key: + en_US: "SSH public key" + de_DE: "Öffentlicher SSH-Schlüssel" + es_ES: "Clave pública SSH" + fr_FR: "Clé publique SSH" + pl_PL: "Klucz publiczny SSH" + +help.arg.tunnel-ip-address: + en_US: "Tunnel server IP address" + de_DE: "Tunnel-Server-IP-Adresse" + es_ES: "Dirección IP del servidor de túnel" + fr_FR: "Adresse IP du serveur tunnel" + pl_PL: "Adres IP serwera tunelu" + +help.arg.tunnel-name: + en_US: "Tunnel name" + de_DE: "Tunnelname" + es_ES: "Nombre del túnel" + fr_FR: "Nom du tunnel" + pl_PL: "Nazwa tunelu" + +help.arg.tunnel-url: + en_US: "Tunnel server URL" + de_DE: "Tunnel-Server-URL" + es_ES: "URL del servidor de túnel" + fr_FR: "URL du serveur tunnel" + pl_PL: "URL serwera tunelu" + +help.arg.version-headline: + en_US: "Short headline for the version" + de_DE: "Kurze Überschrift für die Version" + es_ES: "Título corto para la versión" + fr_FR: "Titre court pour la version" + pl_PL: "Krótki nagłówek dla wersji" + +help.arg.wifi-enabled: + en_US: "Enable or disable WiFi" + de_DE: "WLAN aktivieren oder deaktivieren" + es_ES: "Habilitar o deshabilitar WiFi" + fr_FR: "Activer ou désactiver le WiFi" + pl_PL: "Włącz lub wyłącz WiFi" + +help.arg.wifi-password: + en_US: "WiFi network password" + de_DE: "WLAN-Netzwerk-Passwort" + es_ES: "Contraseña de red WiFi" + fr_FR: "Mot de passe du réseau WiFi" + pl_PL: "Hasło sieci WiFi" + +help.arg.wifi-ssid: + en_US: "WiFi network SSID" + de_DE: "WLAN-Netzwerk-SSID" + es_ES: "SSID de red WiFi" + fr_FR: "SSID du réseau WiFi" + pl_PL: "SSID sieci WiFi" + +help.arg.wireguard-config: + en_US: "WireGuard configuration" + de_DE: "WireGuard-Konfiguration" + es_ES: "Configuración de WireGuard" + fr_FR: "Configuration WireGuard" + pl_PL: "Konfiguracja WireGuard" + # CLI command descriptions (about.*) about.add-address-to-host: en_US: "Add an address to this host" diff --git a/core/src/action.rs b/core/src/action.rs index 27ccdaf77..1bd1986a2 100644 --- a/core/src/action.rs +++ b/core/src/action.rs @@ -63,7 +63,9 @@ pub struct ActionInput { #[derive(Deserialize, Serialize, TS, Parser)] #[serde(rename_all = "camelCase")] pub struct GetActionInputParams { + #[arg(help = "help.arg.package-id")] pub package_id: PackageId, + #[arg(help = "help.arg.action-id")] pub action_id: ActionId, } @@ -280,8 +282,11 @@ pub struct RunActionParams { #[derive(Parser)] struct CliRunActionParams { + #[arg(help = "help.arg.package-id")] pub package_id: PackageId, + #[arg(help = "help.arg.event-id")] pub event_id: Option, + #[arg(help = "help.arg.action-id")] pub action_id: ActionId, #[command(flatten)] pub input: StdinDeserializable>, @@ -360,9 +365,11 @@ pub async fn run_action( #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct ClearTaskParams { + #[arg(help = "help.arg.package-id")] pub package_id: PackageId, + #[arg(help = "help.arg.replay-id")] pub replay_id: ReplayId, - #[arg(long)] + #[arg(long, help = "help.arg.force-clear-task")] #[serde(default)] pub force: bool, } diff --git a/core/src/auth.rs b/core/src/auth.rs index c0fa18fc7..f145149a8 100644 --- a/core/src/auth.rs +++ b/core/src/auth.rs @@ -421,6 +421,7 @@ impl AsLogoutSessionId for KillSessionId { #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct KillParams { + #[arg(help = "help.arg.session-ids")] ids: Vec, } @@ -437,7 +438,9 @@ pub async fn kill( #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct ResetPasswordParams { + #[arg(help = "help.arg.old-password")] old_password: Option, + #[arg(help = "help.arg.new-password")] new_password: Option, } diff --git a/core/src/backup/backup_bulk.rs b/core/src/backup/backup_bulk.rs index 6affe1dfd..6a2d10dfd 100644 --- a/core/src/backup/backup_bulk.rs +++ b/core/src/backup/backup_bulk.rs @@ -33,11 +33,13 @@ use crate::version::VersionT; #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct BackupParams { + #[arg(help = "help.arg.backup-target-id")] target_id: BackupTargetId, - #[arg(long = "old-password")] + #[arg(long = "old-password", help = "help.arg.old-backup-password")] old_password: Option, - #[arg(long = "package-ids")] + #[arg(long = "package-ids", help = "help.arg.package-ids-to-backup")] package_ids: Option>, + #[arg(help = "help.arg.backup-password")] password: crate::auth::PasswordType, } diff --git a/core/src/backup/restore.rs b/core/src/backup/restore.rs index f6c23cb06..d1d48092e 100644 --- a/core/src/backup/restore.rs +++ b/core/src/backup/restore.rs @@ -31,8 +31,11 @@ use crate::{PLATFORM, PackageId}; #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct RestorePackageParams { + #[arg(help = "help.arg.package-ids")] pub ids: Vec, + #[arg(help = "help.arg.backup-target-id")] pub target_id: BackupTargetId, + #[arg(help = "help.arg.backup-password")] pub password: String, } diff --git a/core/src/backup/target/cifs.rs b/core/src/backup/target/cifs.rs index f365229a4..e19020c54 100644 --- a/core/src/backup/target/cifs.rs +++ b/core/src/backup/target/cifs.rs @@ -75,9 +75,13 @@ pub fn cifs() -> ParentHandler { #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct AddParams { + #[arg(help = "help.arg.cifs-hostname")] pub hostname: String, + #[arg(help = "help.arg.cifs-path")] pub path: PathBuf, + #[arg(help = "help.arg.cifs-username")] pub username: String, + #[arg(help = "help.arg.cifs-password")] pub password: Option, } @@ -130,10 +134,15 @@ pub async fn add( #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct UpdateParams { + #[arg(help = "help.arg.backup-target-id")] pub id: BackupTargetId, + #[arg(help = "help.arg.cifs-hostname")] pub hostname: String, + #[arg(help = "help.arg.cifs-path")] pub path: PathBuf, + #[arg(help = "help.arg.cifs-username")] pub username: String, + #[arg(help = "help.arg.cifs-password")] pub password: Option, } @@ -195,6 +204,7 @@ pub async fn update( #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct RemoveParams { + #[arg(help = "help.arg.backup-target-id")] pub id: BackupTargetId, } diff --git a/core/src/backup/target/mod.rs b/core/src/backup/target/mod.rs index 4c8f7095a..a5956eb65 100644 --- a/core/src/backup/target/mod.rs +++ b/core/src/backup/target/mod.rs @@ -268,8 +268,11 @@ fn display_backup_info(params: WithIoFormat, info: BackupInfo) -> Re #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct InfoParams { + #[arg(help = "help.arg.backup-target-id")] target_id: BackupTargetId, + #[arg(help = "help.arg.server-id")] server_id: String, + #[arg(help = "help.arg.backup-password")] password: String, } @@ -305,11 +308,13 @@ lazy_static::lazy_static! { #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct MountParams { + #[arg(help = "help.arg.backup-target-id")] target_id: BackupTargetId, - #[arg(long)] + #[arg(long, help = "help.arg.server-id")] server_id: Option, + #[arg(help = "help.arg.backup-password")] password: String, // TODO: rpassword - #[arg(long)] + #[arg(long, help = "help.arg.allow-partial-backup")] allow_partial: bool, } @@ -385,6 +390,7 @@ pub async fn mount( #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct UmountParams { + #[arg(help = "help.arg.backup-target-id")] target_id: Option, } diff --git a/core/src/bins/mod.rs b/core/src/bins/mod.rs index dd61ee2b9..234818d35 100644 --- a/core/src/bins/mod.rs +++ b/core/src/bins/mod.rs @@ -59,17 +59,25 @@ pub fn translate_cli(mut cmd: clap::Command) -> clap::Command { cmd = cmd.after_long_help(s); } - let args = cmd.get_arguments().cloned().collect::>(); - for mut arg in args { - if let Some(s) = arg.get_help() { - let s = translate(s); - arg = arg.help(s); - } - if let Some(s) = arg.get_long_help() { - let s = translate(s); - arg = arg.long_help(s); - } - cmd = cmd.arg(arg); + let arg_ids = cmd + .get_arguments() + .map(|a| a.get_id().clone()) + .collect::>(); + for id in arg_ids { + cmd = cmd.mut_arg(id, |arg| { + let arg = if let Some(s) = arg.get_help() { + let s = translate(s); + arg.help(s) + } else { + arg + }; + if let Some(s) = arg.get_long_help() { + let s = translate(s); + arg.long_help(s) + } else { + arg + } + }); } for cmd in cmd.get_subcommands_mut() { *cmd = translate_cli(cmd.clone()); diff --git a/core/src/context/config.rs b/core/src/context/config.rs index a92fcaa05..755837c42 100644 --- a/core/src/context/config.rs +++ b/core/src/context/config.rs @@ -58,27 +58,27 @@ pub trait ContextConfig: DeserializeOwned + Default { #[command(rename_all = "kebab-case")] #[command(version = crate::version::Current::default().semver().to_string())] pub struct ClientConfig { - #[arg(short = 'c', long)] + #[arg(short = 'c', long, help = "help.arg.config-file-path")] pub config: Option, - #[arg(short = 'H', long)] + #[arg(short = 'H', long, help = "help.arg.host-url")] pub host: Option, - #[arg(short = 'r', long)] + #[arg(short = 'r', long, help = "help.arg.registry-url")] pub registry: Option, - #[arg(long)] + #[arg(long, help = "help.arg.registry-hostname")] pub registry_hostname: Option>, #[arg(skip)] pub registry_listen: Option, - #[arg(short = 't', long)] + #[arg(short = 't', long, help = "help.arg.tunnel-address")] pub tunnel: Option, #[arg(skip)] pub tunnel_listen: Option, - #[arg(short = 'p', long)] + #[arg(short = 'p', long, help = "help.arg.proxy-url")] pub proxy: Option, #[arg(skip)] pub socks_listen: Option, - #[arg(long)] + #[arg(long, help = "help.arg.cookie-path")] pub cookie_path: Option, - #[arg(long)] + #[arg(long, help = "help.arg.developer-key-path")] pub developer_key_path: Option, } impl ContextConfig for ClientConfig { @@ -109,19 +109,19 @@ impl ClientConfig { #[serde(rename_all = "kebab-case")] #[command(rename_all = "kebab-case")] pub struct ServerConfig { - #[arg(short, long)] + #[arg(short, long, help = "help.arg.config-file-path")] pub config: Option, #[arg(skip)] pub os_partitions: Option, - #[arg(long)] + #[arg(long, help = "help.arg.socks-listen-address")] pub socks_listen: Option, - #[arg(long)] + #[arg(long, help = "help.arg.revision-cache-size")] pub revision_cache_size: Option, - #[arg(long)] + #[arg(long, help = "help.arg.disable-encryption")] pub disable_encryption: Option, - #[arg(long)] + #[arg(long, help = "help.arg.multi-arch-s9pks")] pub multi_arch_s9pks: Option, - #[arg(long)] + #[arg(long, help = "help.arg.developer-key-path")] pub developer_key_path: Option, } impl ContextConfig for ServerConfig { diff --git a/core/src/control.rs b/core/src/control.rs index 565bfd529..f5d39d288 100644 --- a/core/src/control.rs +++ b/core/src/control.rs @@ -11,6 +11,7 @@ use crate::{Error, PackageId}; #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct ControlParams { + #[arg(help = "help.arg.package-id")] pub id: PackageId, } diff --git a/core/src/db/mod.rs b/core/src/db/mod.rs index e2a7b7875..2661b7ea3 100644 --- a/core/src/db/mod.rs +++ b/core/src/db/mod.rs @@ -87,9 +87,10 @@ pub enum RevisionsRes { #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct CliDumpParams { - #[arg(long = "include-private", short = 'p')] + #[arg(long = "include-private", short = 'p', help = "help.arg.include-private-data")] #[serde(default)] include_private: bool, + #[arg(help = "help.arg.db-path")] path: Option, } @@ -258,9 +259,11 @@ pub async fn subscribe( #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct CliApplyParams { - #[arg(long)] + #[arg(long, help = "help.arg.allow-model-mismatch")] allow_model_mismatch: bool, + #[arg(help = "help.arg.db-apply-expr")] expr: String, + #[arg(help = "help.arg.db-path")] path: Option, } @@ -327,6 +330,7 @@ async fn cli_apply( #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct ApplyParams { + #[arg(help = "help.arg.db-apply-expr")] expr: String, } @@ -366,8 +370,10 @@ pub fn put() -> ParentHandler { #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct UiParams { + #[arg(help = "help.arg.json-pointer")] #[ts(type = "string")] pointer: JsonPointer, + #[arg(help = "help.arg.json-value")] #[ts(type = "any")] value: Value, } diff --git a/core/src/install/mod.rs b/core/src/install/mod.rs index 261bafeb4..c610505d9 100644 --- a/core/src/install/mod.rs +++ b/core/src/install/mod.rs @@ -283,6 +283,7 @@ pub async fn sideload( #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct CancelInstallParams { + #[arg(help = "help.arg.package-id")] pub id: PackageId, } @@ -299,7 +300,9 @@ pub fn cancel_install( #[derive(Deserialize, Serialize, Parser)] pub struct QueryPackageParams { + #[arg(help = "help.arg.package-id")] id: PackageId, + #[arg(help = "help.arg.version-range")] version: Option, } @@ -357,6 +360,7 @@ impl FromArgMatches for CliInstallParams { #[derive(Deserialize, Serialize, Parser, TS)] #[ts(export)] pub struct InstalledVersionParams { + #[arg(help = "help.arg.package-id")] id: PackageId, } @@ -516,11 +520,12 @@ pub async fn cli_install( #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct UninstallParams { + #[arg(help = "help.arg.package-id")] id: PackageId, - #[arg(long, help = "Do not delete the service data")] + #[arg(long, help = "help.arg.soft-uninstall")] #[serde(default)] soft: bool, - #[arg(long, help = "Ignore errors in service uninit script")] + #[arg(long, help = "help.arg.force-uninstall")] #[serde(default)] force: bool, } diff --git a/core/src/lib.rs b/core/src/lib.rs index 71ca49248..6f3304ed6 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -110,6 +110,7 @@ use crate::util::serde::{HandlerExtSerde, WithIoFormat, display_serializable}; #[command(rename_all = "kebab-case")] #[ts(export)] pub struct EchoParams { + #[arg(help = "help.arg.echo-message")] message: String, } diff --git a/core/src/logs.rs b/core/src/logs.rs index 2367dc522..752950911 100644 --- a/core/src/logs.rs +++ b/core/src/logs.rs @@ -232,6 +232,7 @@ pub const SYSTEM_UNIT: &str = "startd"; #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct PackageIdParams { + #[arg(help = "help.arg.package-id")] id: PackageId, } @@ -327,14 +328,14 @@ pub struct LogsParams { #[command(flatten)] #[serde(flatten)] extra: Extra, - #[arg(short = 'l', long = "limit")] + #[arg(short = 'l', long = "limit", help = "help.arg.log-limit")] limit: Option, - #[arg(short = 'c', long = "cursor", conflicts_with = "follow")] + #[arg(short = 'c', long = "cursor", conflicts_with = "follow", help = "help.arg.log-cursor")] cursor: Option, - #[arg(short = 'b', long = "boot")] + #[arg(short = 'b', long = "boot", help = "help.arg.log-boot")] #[serde(default)] boot: Option, - #[arg(short = 'B', long = "before", conflicts_with = "follow")] + #[arg(short = 'B', long = "before", conflicts_with = "follow", help = "help.arg.log-before")] #[serde(default)] before: bool, } @@ -346,7 +347,7 @@ pub struct CliLogsParams { #[command(flatten)] #[serde(flatten)] rpc_params: LogsParams, - #[arg(short = 'f', long = "follow")] + #[arg(short = 'f', long = "follow", help = "help.arg.log-follow")] #[serde(default)] follow: bool, } diff --git a/core/src/net/acme.rs b/core/src/net/acme.rs index 28ba68d96..8054715af 100644 --- a/core/src/net/acme.rs +++ b/core/src/net/acme.rs @@ -463,9 +463,9 @@ impl ValueParserFactory for AcmeProvider { #[derive(Deserialize, Serialize, Parser)] pub struct InitAcmeParams { - #[arg(long)] + #[arg(long, help = "help.arg.acme-provider")] pub provider: AcmeProvider, - #[arg(long)] + #[arg(long, help = "help.arg.acme-contact")] pub contact: Vec, } @@ -488,7 +488,7 @@ pub async fn init( #[derive(Deserialize, Serialize, Parser)] pub struct RemoveAcmeParams { - #[arg(long)] + #[arg(long, help = "help.arg.acme-provider")] pub provider: AcmeProvider, } diff --git a/core/src/net/dns.rs b/core/src/net/dns.rs index 0d78ca472..84c5cb3a4 100644 --- a/core/src/net/dns.rs +++ b/core/src/net/dns.rs @@ -95,6 +95,7 @@ pub fn dns_api() -> ParentHandler { #[derive(Deserialize, Serialize, Parser)] pub struct QueryDnsParams { + #[arg(help = "help.arg.fqdn")] pub fqdn: InternedString, } @@ -134,6 +135,7 @@ pub fn query_dns( #[derive(Deserialize, Serialize, Parser)] pub struct SetStaticDnsParams { + #[arg(help = "help.arg.dns-servers")] pub servers: Option>, } diff --git a/core/src/net/gateway.rs b/core/src/net/gateway.rs index 68d6835e0..6079efd76 100644 --- a/core/src/net/gateway.rs +++ b/core/src/net/gateway.rs @@ -140,7 +140,9 @@ async fn list_interfaces( #[derive(Debug, Clone, Deserialize, Serialize, Parser, TS)] struct NetworkInterfaceSetPublicParams { + #[arg(help = "help.arg.gateway-id")] gateway: GatewayId, + #[arg(help = "help.arg.is-public")] public: Option, } @@ -156,6 +158,7 @@ async fn set_public( #[derive(Debug, Clone, Deserialize, Serialize, Parser, TS)] struct UnsetPublicParams { + #[arg(help = "help.arg.gateway-id")] gateway: GatewayId, } @@ -171,6 +174,7 @@ async fn unset_public( #[derive(Debug, Clone, Deserialize, Serialize, Parser, TS)] struct ForgetGatewayParams { + #[arg(help = "help.arg.gateway-id")] gateway: GatewayId, } @@ -183,7 +187,9 @@ async fn forget_iface( #[derive(Debug, Clone, Deserialize, Serialize, Parser, TS)] struct RenameGatewayParams { + #[arg(help = "help.arg.gateway-id")] id: GatewayId, + #[arg(help = "help.arg.gateway-name")] name: InternedString, } diff --git a/core/src/net/host/address.rs b/core/src/net/host/address.rs index 5f358a920..9c60ababe 100644 --- a/core/src/net/host/address.rs +++ b/core/src/net/host/address.rs @@ -237,9 +237,11 @@ pub fn address_api() #[derive(Deserialize, Serialize, Parser)] pub struct AddPublicDomainParams { + #[arg(help = "help.arg.fqdn")] pub fqdn: InternedString, - #[arg(long)] + #[arg(long, help = "help.arg.acme-provider")] pub acme: Option, + #[arg(help = "help.arg.gateway-id")] pub gateway: GatewayId, } @@ -284,6 +286,7 @@ pub async fn add_public_domain( #[derive(Deserialize, Serialize, Parser)] pub struct RemoveDomainParams { + #[arg(help = "help.arg.fqdn")] pub fqdn: InternedString, } @@ -307,6 +310,7 @@ pub async fn remove_public_domain( #[derive(Deserialize, Serialize, Parser)] pub struct AddPrivateDomainParams { + #[arg(help = "help.arg.fqdn")] pub fqdn: InternedString, } @@ -349,6 +353,7 @@ pub async fn remove_private_domain( #[derive(Deserialize, Serialize, Parser)] pub struct OnionParams { + #[arg(help = "help.arg.onion-address")] pub onion: String, } diff --git a/core/src/net/host/binding.rs b/core/src/net/host/binding.rs index 9012ac272..8862e2bda 100644 --- a/core/src/net/host/binding.rs +++ b/core/src/net/host/binding.rs @@ -237,9 +237,11 @@ pub async fn list_bindings( #[serde(rename_all = "camelCase")] #[ts(export)] pub struct BindingGatewaySetEnabledParams { + #[arg(help = "help.arg.internal-port")] internal_port: u16, + #[arg(help = "help.arg.gateway-id")] gateway: GatewayId, - #[arg(long)] + #[arg(long, help = "help.arg.binding-enabled")] enabled: Option, } diff --git a/core/src/net/host/mod.rs b/core/src/net/host/mod.rs index 555cdb825..620991ca7 100644 --- a/core/src/net/host/mod.rs +++ b/core/src/net/host/mod.rs @@ -166,11 +166,13 @@ impl Model { #[derive(Deserialize, Serialize, Parser)] pub struct RequiresPackageId { + #[arg(help = "help.arg.package-id")] package: PackageId, } #[derive(Deserialize, Serialize, Parser)] pub struct RequiresHostId { + #[arg(help = "help.arg.host-id")] host: HostId, } diff --git a/core/src/net/tor/arti.rs b/core/src/net/tor/arti.rs index d3919c3c6..e521b8795 100644 --- a/core/src/net/tor/arti.rs +++ b/core/src/net/tor/arti.rs @@ -289,6 +289,7 @@ pub async fn generate_key(ctx: RpcContext) -> Result { #[derive(Deserialize, Serialize, Parser)] pub struct AddKeyParams { + #[arg(help = "help.arg.onion-secret-key")] pub key: Base64<[u8; 64]>, } @@ -323,7 +324,7 @@ pub async fn list_keys(ctx: RpcContext) -> Result, Error> #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct ResetParams { - #[arg(name = "wipe-state", short = 'w', long = "wipe-state")] + #[arg(name = "wipe-state", short = 'w', long = "wipe-state", help = "help.arg.wipe-tor-state")] wipe_state: bool, } diff --git a/core/src/net/tor/ctor.rs b/core/src/net/tor/ctor.rs index f6c34305d..91539fe62 100644 --- a/core/src/net/tor/ctor.rs +++ b/core/src/net/tor/ctor.rs @@ -316,6 +316,7 @@ pub async fn generate_key(ctx: RpcContext) -> Result { #[derive(Deserialize, Serialize, Parser)] pub struct AddKeyParams { + #[arg(help = "help.arg.onion-secret-key")] pub key: Base64<[u8; 64]>, } @@ -350,8 +351,9 @@ pub async fn list_keys(ctx: RpcContext) -> Result, Error> #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct ResetParams { - #[arg(name = "wipe-state", short = 'w', long = "wipe-state")] + #[arg(name = "wipe-state", short = 'w', long = "wipe-state", help = "help.arg.wipe-tor-state")] wipe_state: bool, + #[arg(help = "help.arg.reset-reason")] reason: String, } diff --git a/core/src/net/tunnel.rs b/core/src/net/tunnel.rs index 6a9c864e1..f3b505850 100644 --- a/core/src/net/tunnel.rs +++ b/core/src/net/tunnel.rs @@ -34,8 +34,11 @@ pub fn tunnel_api() -> ParentHandler { #[derive(Debug, Clone, Deserialize, Serialize, Parser, TS)] #[ts(export)] pub struct AddTunnelParams { + #[arg(help = "help.arg.tunnel-name")] name: InternedString, + #[arg(help = "help.arg.wireguard-config")] config: String, + #[arg(help = "help.arg.is-public")] public: bool, } @@ -123,6 +126,7 @@ pub async fn add_tunnel( #[derive(Debug, Clone, Deserialize, Serialize, Parser, TS)] #[ts(export)] pub struct RemoveTunnelParams { + #[arg(help = "help.arg.gateway-id")] id: GatewayId, } pub async fn remove_tunnel( diff --git a/core/src/net/wifi.rs b/core/src/net/wifi.rs index 47b02ed35..046ad612f 100644 --- a/core/src/net/wifi.rs +++ b/core/src/net/wifi.rs @@ -88,6 +88,7 @@ pub fn wifi() -> ParentHandler { #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct SetWifiEnabledParams { + #[arg(help = "help.arg.wifi-enabled")] pub enabled: bool, } @@ -152,7 +153,9 @@ pub fn country() -> ParentHandler { #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct AddParams { + #[arg(help = "help.arg.wifi-ssid")] ssid: String, + #[arg(help = "help.arg.wifi-password")] password: String, } #[instrument(skip_all)] @@ -229,6 +232,7 @@ pub async fn add(ctx: RpcContext, AddParams { ssid, password }: AddParams) -> Re #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct SsidParams { + #[arg(help = "help.arg.wifi-ssid")] ssid: String, } @@ -559,7 +563,7 @@ pub async fn get_available(ctx: RpcContext, _: Empty) -> Result #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct SetCountryParams { - #[arg(value_parser = CountryCodeParser)] + #[arg(value_parser = CountryCodeParser, help = "help.arg.wifi-country-code")] #[ts(type = "string")] country: CountryCode, } diff --git a/core/src/notifications.rs b/core/src/notifications.rs index 291259b58..1d6c147ba 100644 --- a/core/src/notifications.rs +++ b/core/src/notifications.rs @@ -78,8 +78,10 @@ pub fn notification() -> ParentHandler { #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct ListNotificationParams { + #[arg(help = "help.arg.notification-before-id")] #[ts(type = "number | null")] before: Option, + #[arg(help = "help.arg.notification-limit")] #[ts(type = "number | null")] limit: Option, } @@ -141,6 +143,7 @@ pub async fn list( #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct ModifyNotificationParams { + #[arg(help = "help.arg.notification-ids")] #[ts(type = "number[]")] ids: Vec, } @@ -175,6 +178,7 @@ pub async fn remove( #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct ModifyNotificationBeforeParams { + #[arg(help = "help.arg.notification-before-id")] #[ts(type = "number")] before: u32, } @@ -296,9 +300,13 @@ pub async fn mark_unseen( #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct CreateParams { + #[arg(help = "help.arg.package-id")] package: Option, + #[arg(help = "help.arg.notification-level")] level: NotificationLevel, + #[arg(help = "help.arg.notification-title")] title: String, + #[arg(help = "help.arg.notification-message")] message: String, } diff --git a/core/src/os_install/mod.rs b/core/src/os_install/mod.rs index 3f0fec743..79f02e6e2 100644 --- a/core/src/os_install/mod.rs +++ b/core/src/os_install/mod.rs @@ -106,6 +106,7 @@ async fn get_block_device_size(path: impl AsRef) -> Result { #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct InstallOsParams { + #[arg(help = "help.arg.os-drive-path")] os_drive: PathBuf, #[command(flatten)] data_drive: Option, @@ -115,9 +116,9 @@ pub struct InstallOsParams { #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] struct DataDrive { - #[arg(long = "data-drive")] + #[arg(long = "data-drive", help = "help.arg.data-drive-path")] logicalname: PathBuf, - #[arg(long)] + #[arg(long, help = "help.arg.wipe-drive")] wipe: bool, } @@ -490,11 +491,11 @@ pub async fn install_os( #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct CliInstallOsParams { - #[arg(help = "Path to the squashfs image to install")] + #[arg(help = "help.arg.squashfs-image-path")] squashfs: PathBuf, - #[arg(help = "Target disk to install to (e.g., /dev/sda or /dev/loop0)")] + #[arg(help = "help.arg.target-disk")] disk: PathBuf, - #[arg(long, help = "Use EFI boot (default: true for GPT disks)")] + #[arg(long, help = "help.arg.use-efi-boot")] efi: Option, } diff --git a/core/src/registry/admin.rs b/core/src/registry/admin.rs index a14603fb0..a9ed78c66 100644 --- a/core/src/registry/admin.rs +++ b/core/src/registry/admin.rs @@ -206,16 +206,17 @@ pub async fn add_signer(ctx: RegistryContext, signer: SignerInfo) -> Result, - #[arg(short = 'c', long)] + #[arg(short = 'c', long, help = "help.arg.add-signer-contact")] pub add_contact: Vec, - #[arg(short = 'k', long)] + #[arg(short = 'k', long, help = "help.arg.add-signer-key")] pub add_key: Vec, - #[arg(short = 'C', long)] + #[arg(short = 'C', long, help = "help.arg.remove-signer-contact")] pub remove_contact: Vec, - #[arg(short = 'K', long)] + #[arg(short = 'K', long, help = "help.arg.remove-signer-key")] pub remove_key: Vec, } @@ -264,12 +265,13 @@ pub async fn edit_signer( #[command(rename_all = "kebab-case")] #[serde(rename_all = "camelCase")] pub struct CliAddSignerParams { - #[arg(long = "name", short = 'n')] + #[arg(long = "name", short = 'n', help = "help.arg.signer-name")] pub name: String, - #[arg(long = "contact", short = 'c')] + #[arg(long = "contact", short = 'c', help = "help.arg.signer-contact")] pub contact: Vec, - #[arg(long = "key")] + #[arg(long = "key", help = "help.arg.signer-key")] pub keys: Vec, + #[arg(help = "help.arg.database-path")] pub database: Option, } @@ -339,6 +341,7 @@ pub async fn add_admin( #[serde(rename_all = "camelCase")] #[ts(export)] pub struct RemoveAdminParams { + #[arg(help = "help.arg.signer-id")] pub signer: Guid, } @@ -360,7 +363,9 @@ pub async fn remove_admin( #[command(rename_all = "kebab-case")] #[serde(rename_all = "camelCase")] pub struct CliAddAdminParams { + #[arg(help = "help.arg.signer-id")] pub signer: Guid, + #[arg(help = "help.arg.database-path")] pub database: Option, } diff --git a/core/src/registry/context.rs b/core/src/registry/context.rs index cbd974e0d..033abe9a9 100644 --- a/core/src/registry/context.rs +++ b/core/src/registry/context.rs @@ -42,17 +42,17 @@ const DEFAULT_REGISTRY_LISTEN: SocketAddr = #[serde(rename_all = "kebab-case")] #[command(rename_all = "kebab-case")] pub struct RegistryConfig { - #[arg(short = 'c', long = "config")] + #[arg(short = 'c', long = "config", help = "help.arg.config-file-path")] pub config: Option, - #[arg(short = 'l', long = "listen")] + #[arg(short = 'l', long = "listen", help = "help.arg.registry-listen-address")] pub registry_listen: Option, - #[arg(short = 'H', long = "hostname")] + #[arg(short = 'H', long = "hostname", help = "help.arg.registry-hostname")] pub registry_hostname: Vec, - #[arg(short = 'p', long = "tor-proxy")] + #[arg(short = 'p', long = "tor-proxy", help = "help.arg.tor-proxy-url")] pub tor_proxy: Option, - #[arg(short = 'd', long = "datadir")] + #[arg(short = 'd', long = "datadir", help = "help.arg.data-directory")] pub datadir: Option, - #[arg(short = 'u', long = "pg-connection-url")] + #[arg(short = 'u', long = "pg-connection-url", help = "help.arg.postgres-connection-url")] pub pg_connection_url: Option, } impl ContextConfig for RegistryConfig { @@ -165,6 +165,7 @@ impl Deref for RegistryContext { #[derive(Debug, Deserialize, Serialize, Parser)] pub struct RegistryUrlParams { + #[arg(help = "help.arg.registry-url")] pub registry: Url, } diff --git a/core/src/registry/db.rs b/core/src/registry/db.rs index 4a507bba0..2d3498cac 100644 --- a/core/src/registry/db.rs +++ b/core/src/registry/db.rs @@ -48,8 +48,9 @@ pub fn db_api() -> ParentHandler { #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct CliDumpParams { - #[arg(long = "pointer", short = 'p')] + #[arg(long = "pointer", short = 'p', help = "help.arg.db-pointer")] pointer: Option, + #[arg(help = "help.arg.database-path")] path: Option, } @@ -81,7 +82,7 @@ async fn cli_dump( #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct DumpParams { - #[arg(long = "pointer", short = 'p')] + #[arg(long = "pointer", short = 'p', help = "help.arg.db-pointer")] #[ts(type = "string | null")] pointer: Option, } @@ -97,7 +98,9 @@ pub async fn dump(ctx: RegistryContext, DumpParams { pointer }: DumpParams) -> R #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct CliApplyParams { + #[arg(help = "help.arg.db-apply-expr")] expr: String, + #[arg(help = "help.arg.database-path")] path: Option, } @@ -152,7 +155,9 @@ async fn cli_apply( #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct ApplyParams { + #[arg(help = "help.arg.db-apply-expr")] expr: String, + #[arg(help = "help.arg.database-path")] path: Option, } diff --git a/core/src/registry/info.rs b/core/src/registry/info.rs index 296397478..83742fa0c 100644 --- a/core/src/registry/info.rs +++ b/core/src/registry/info.rs @@ -69,6 +69,7 @@ pub async fn get_info(ctx: RegistryContext) -> Result { #[serde(rename_all = "camelCase")] #[ts(export)] pub struct SetNameParams { + #[arg(help = "help.arg.registry-name")] pub name: String, } @@ -104,6 +105,7 @@ pub async fn set_icon( #[serde(rename_all = "camelCase")] #[ts(export)] pub struct CliSetIconParams { + #[arg(help = "help.arg.icon-path")] pub icon: PathBuf, } diff --git a/core/src/registry/os/asset/add.rs b/core/src/registry/os/asset/add.rs index 2aa5cdb4b..37d78b8bb 100644 --- a/core/src/registry/os/asset/add.rs +++ b/core/src/registry/os/asset/add.rs @@ -179,11 +179,13 @@ pub async fn add_squashfs(ctx: RegistryContext, params: AddAssetParams) -> Resul #[command(rename_all = "kebab-case")] #[serde(rename_all = "camelCase")] pub struct CliAddAssetParams { - #[arg(short = 'p', long = "platform")] + #[arg(short = 'p', long = "platform", help = "help.arg.platform")] pub platform: InternedString, - #[arg(short = 'v', long = "version")] + #[arg(short = 'v', long = "version", help = "help.arg.os-version")] pub version: Version, + #[arg(help = "help.arg.asset-file-path")] pub file: PathBuf, + #[arg(help = "help.arg.asset-url")] pub url: Url, } diff --git a/core/src/registry/os/asset/get.rs b/core/src/registry/os/asset/get.rs index 15d41e93c..d48bbd7ef 100644 --- a/core/src/registry/os/asset/get.rs +++ b/core/src/registry/os/asset/get.rs @@ -121,18 +121,20 @@ pub async fn get_squashfs( #[command(rename_all = "kebab-case")] #[serde(rename_all = "camelCase")] pub struct CliGetOsAssetParams { + #[arg(help = "help.arg.os-version")] pub version: Version, + #[arg(help = "help.arg.platform")] pub platform: InternedString, #[arg( long = "download", short = 'd', - help = "The path of the directory to download to" + help = "help.arg.download-directory" )] pub download: Option, #[arg( long = "reverify", short = 'r', - help = "verify the hash of the file a second time after download" + help = "help.arg.reverify-hash" )] pub reverify: bool, } diff --git a/core/src/registry/os/asset/sign.rs b/core/src/registry/os/asset/sign.rs index 91d9ecf40..c71759470 100644 --- a/core/src/registry/os/asset/sign.rs +++ b/core/src/registry/os/asset/sign.rs @@ -136,10 +136,11 @@ pub async fn sign_squashfs(ctx: RegistryContext, params: SignAssetParams) -> Res #[command(rename_all = "kebab-case")] #[serde(rename_all = "camelCase")] pub struct CliSignAssetParams { - #[arg(short = 'p', long = "platform")] + #[arg(short = 'p', long = "platform", help = "help.arg.platform")] pub platform: InternedString, - #[arg(short = 'v', long = "version")] + #[arg(short = 'v', long = "version", help = "help.arg.os-version")] pub version: Version, + #[arg(help = "help.arg.asset-file-path")] pub file: PathBuf, } diff --git a/core/src/registry/os/version/mod.rs b/core/src/registry/os/version/mod.rs index ce2d58c69..786d33277 100644 --- a/core/src/registry/os/version/mod.rs +++ b/core/src/registry/os/version/mod.rs @@ -62,10 +62,14 @@ pub fn version_api() -> ParentHandler { #[ts(export)] pub struct AddVersionParams { #[ts(type = "string")] + #[arg(help = "help.arg.os-version")] pub version: Version, + #[arg(help = "help.arg.version-headline")] pub headline: String, + #[arg(help = "help.arg.release-notes")] pub release_notes: String, #[ts(type = "string")] + #[arg(help = "help.arg.source-version-range")] pub source_version: VersionRange, #[arg(skip)] #[ts(skip)] @@ -110,6 +114,7 @@ pub async fn add_version( #[ts(export)] pub struct RemoveVersionParams { #[ts(type = "string")] + #[arg(help = "help.arg.os-version")] pub version: Version, } @@ -135,15 +140,15 @@ pub async fn remove_version( #[ts(export)] pub struct GetOsVersionParams { #[ts(type = "string | null")] - #[arg(long = "src")] + #[arg(long = "src", help = "help.arg.source-version")] pub source_version: Option, #[ts(type = "string | null")] - #[arg(long)] + #[arg(long, help = "help.arg.target-version-range")] pub target_version: Option, - #[arg(long = "id")] + #[arg(long = "id", help = "help.arg.server-id")] server_id: Option, #[ts(type = "string | null")] - #[arg(long)] + #[arg(long, help = "help.arg.platform")] platform: Option, #[ts(skip)] #[arg(skip)] diff --git a/core/src/registry/package/add.rs b/core/src/registry/package/add.rs index d81a415f3..2b3624d58 100644 --- a/core/src/registry/package/add.rs +++ b/core/src/registry/package/add.rs @@ -123,10 +123,11 @@ pub async fn add_package( #[command(rename_all = "kebab-case")] #[serde(rename_all = "camelCase")] pub struct CliAddPackageParams { + #[arg(help = "help.arg.s9pk-file-path")] pub file: PathBuf, - #[arg(long)] + #[arg(long, help = "help.arg.package-url")] pub url: Vec, - #[arg(long)] + #[arg(long, help = "help.arg.no-verify")] pub no_verify: bool, } @@ -205,9 +206,11 @@ pub async fn cli_add_package( #[serde(rename_all = "camelCase")] #[ts(export)] pub struct RemovePackageParams { + #[arg(help = "help.arg.package-id")] pub id: PackageId, + #[arg(help = "help.arg.package-version")] pub version: VersionString, - #[arg(long)] + #[arg(long, help = "help.arg.signature-hash")] pub sighash: Option>, #[ts(skip)] #[arg(skip)] @@ -353,8 +356,11 @@ pub async fn add_mirror( #[command(rename_all = "kebab-case")] #[serde(rename_all = "camelCase")] pub struct CliAddMirrorParams { + #[arg(help = "help.arg.s9pk-file-path")] pub file: PathBuf, + #[arg(help = "help.arg.mirror-url")] pub url: Url, + #[arg(long, help = "help.arg.no-verify")] pub no_verify: bool, } @@ -432,9 +438,11 @@ pub async fn cli_add_mirror( #[serde(rename_all = "camelCase")] #[ts(export)] pub struct RemoveMirrorParams { + #[arg(help = "help.arg.package-id")] pub id: PackageId, + #[arg(help = "help.arg.package-version")] pub version: VersionString, - #[arg(long)] + #[arg(long, help = "help.arg.mirror-url")] #[ts(type = "string")] pub url: Url, #[ts(skip)] diff --git a/core/src/registry/package/get.rs b/core/src/registry/package/get.rs index 1db56aa82..3b09588c8 100644 --- a/core/src/registry/package/get.rs +++ b/core/src/registry/package/get.rs @@ -51,17 +51,18 @@ pub struct PackageInfoShort { #[ts(export)] #[model = "Model"] pub struct GetPackageParams { + #[arg(help = "help.arg.package-id")] pub id: Option, #[ts(type = "string | null")] - #[arg(long, short = 'v')] + #[arg(long, short = 'v', help = "help.arg.target-version-range")] pub target_version: Option, - #[arg(long)] + #[arg(long, help = "help.arg.source-version")] pub source_version: Option, #[ts(skip)] #[arg(skip)] #[serde(rename = "__DeviceInfo_device_info")] pub device_info: Option, - #[arg(default_value = "none")] + #[arg(default_value = "none", help = "help.arg.other-versions-detail")] pub other_versions: Option, } @@ -401,11 +402,12 @@ pub fn display_package_info( #[derive(Debug, Deserialize, Serialize, TS, Parser)] #[serde(rename_all = "camelCase")] pub struct CliDownloadParams { + #[arg(help = "help.arg.package-id")] pub id: PackageId, - #[arg(long, short = 'v')] + #[arg(long, short = 'v', help = "help.arg.target-version-range")] #[ts(type = "string | null")] pub target_version: Option, - #[arg(short, long)] + #[arg(short, long, help = "help.arg.destination-path")] pub dest: Option, } diff --git a/core/src/registry/package/signer.rs b/core/src/registry/package/signer.rs index a95524542..deb1d5adb 100644 --- a/core/src/registry/package/signer.rs +++ b/core/src/registry/package/signer.rs @@ -51,9 +51,11 @@ pub fn signer_api() -> ParentHandler { #[serde(rename_all = "camelCase")] #[ts(export)] pub struct AddPackageSignerParams { + #[arg(help = "help.arg.package-id")] pub id: PackageId, + #[arg(help = "help.arg.signer-id")] pub signer: Guid, - #[arg(long)] + #[arg(long, help = "help.arg.version-range")] #[ts(type = "string | null")] pub versions: Option, } @@ -93,7 +95,9 @@ pub async fn add_package_signer( #[serde(rename_all = "camelCase")] #[ts(export)] pub struct RemovePackageSignerParams { + #[arg(help = "help.arg.package-id")] pub id: PackageId, + #[arg(help = "help.arg.signer-id")] pub signer: Guid, } @@ -130,6 +134,7 @@ pub async fn remove_package_signer( #[serde(rename_all = "camelCase")] #[ts(export)] pub struct ListPackageSignersParams { + #[arg(help = "help.arg.package-id")] pub id: PackageId, } diff --git a/core/src/s9pk/rpc.rs b/core/src/s9pk/rpc.rs index d648d71ae..f1cc71ecc 100644 --- a/core/src/s9pk/rpc.rs +++ b/core/src/s9pk/rpc.rs @@ -65,6 +65,7 @@ pub fn s9pk() -> ParentHandler { #[derive(Deserialize, Serialize, Parser)] struct S9pkPath { + #[arg(help = "help.arg.s9pk-file-path")] s9pk: PathBuf, } @@ -115,6 +116,7 @@ fn inspect() -> ParentHandler { #[derive(Deserialize, Serialize, Parser, TS)] struct AddImageParams { + #[arg(help = "help.arg.image-id")] id: ImageId, #[command(flatten)] config: ImageConfig, @@ -148,6 +150,7 @@ async fn add_image( #[derive(Deserialize, Serialize, Parser, TS)] struct EditManifestParams { + #[arg(help = "help.arg.db-apply-expr")] expression: String, } async fn edit_manifest( @@ -194,6 +197,7 @@ async fn file_tree( #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] struct CatParams { + #[arg(help = "help.arg.file-path")] file_path: PathBuf, } async fn cat( diff --git a/core/src/s9pk/v1/mod.rs b/core/src/s9pk/v1/mod.rs index 9910d0adb..3773bac81 100644 --- a/core/src/s9pk/v1/mod.rs +++ b/core/src/s9pk/v1/mod.rs @@ -16,5 +16,6 @@ pub const SIG_CONTEXT: &[u8] = b"s9pk"; #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct VerifyParams { + #[arg(help = "help.arg.s9pk-file-path")] pub path: PathBuf, } diff --git a/core/src/s9pk/v2/pack.rs b/core/src/s9pk/v2/pack.rs index 9deeab978..473924ce3 100644 --- a/core/src/s9pk/v2/pack.rs +++ b/core/src/s9pk/v2/pack.rs @@ -155,20 +155,21 @@ impl From for DynFileSource { #[derive(Deserialize, Serialize, Parser)] pub struct PackParams { + #[arg(help = "help.arg.input-path")] pub path: Option, - #[arg(short, long)] + #[arg(short, long, help = "help.arg.output-path")] pub output: Option, - #[arg(long)] + #[arg(long, help = "help.arg.javascript-path")] pub javascript: Option, - #[arg(long)] + #[arg(long, help = "help.arg.icon-path")] pub icon: Option, - #[arg(long)] + #[arg(long, help = "help.arg.license-path")] pub license: Option, - #[arg(long, conflicts_with = "no-assets")] + #[arg(long, conflicts_with = "no-assets", help = "help.arg.assets-path")] pub assets: Option, - #[arg(long, conflicts_with = "assets")] + #[arg(long, conflicts_with = "assets", help = "help.arg.no-assets")] pub no_assets: bool, - #[arg(long, help = "Architecture Mask")] + #[arg(long, help = "help.arg.architecture-mask")] pub arch: Vec, } impl PackParams { @@ -280,19 +281,19 @@ pub struct ImageConfig { #[derive(Parser)] struct CliImageConfig { - #[arg(long, conflicts_with("docker-tag"))] + #[arg(long, conflicts_with("docker-tag"), help = "help.arg.docker-build")] docker_build: bool, - #[arg(long, requires("docker-build"))] + #[arg(long, requires("docker-build"), help = "help.arg.dockerfile-path")] dockerfile: Option, - #[arg(long, requires("docker-build"))] + #[arg(long, requires("docker-build"), help = "help.arg.workdir-path")] workdir: Option, - #[arg(long, conflicts_with_all(["dockerfile", "workdir"]))] + #[arg(long, conflicts_with_all(["dockerfile", "workdir"]), help = "help.arg.docker-tag")] docker_tag: Option, - #[arg(long)] + #[arg(long, help = "help.arg.architecture-mask")] arch: Vec, - #[arg(long)] + #[arg(long, help = "help.arg.emulate-missing-arch")] emulate_missing_as: Option, - #[arg(long)] + #[arg(long, help = "help.arg.nvidia-container")] nvidia_container: bool, } impl TryFrom for ImageConfig { diff --git a/core/src/service/cli.rs b/core/src/service/cli.rs index 7941124a4..c2b6c2af3 100644 --- a/core/src/service/cli.rs +++ b/core/src/service/cli.rs @@ -14,7 +14,7 @@ use crate::service::effects::context::EffectContext; #[derive(Debug, Default, Parser)] pub struct ContainerClientConfig { - #[arg(long = "socket")] + #[arg(long = "socket", help = "help.arg.socket-path")] pub socket: Option, } diff --git a/core/src/service/effects/action.rs b/core/src/service/effects/action.rs index 706a27fe6..56c62896b 100644 --- a/core/src/service/effects/action.rs +++ b/core/src/service/effects/action.rs @@ -81,7 +81,7 @@ pub async fn export_action( #[ts(export)] #[serde(rename_all = "camelCase")] pub struct ClearActionsParams { - #[arg(long)] + #[arg(long, help = "help.arg.except-actions")] pub except: Vec, } @@ -118,7 +118,9 @@ pub struct GetActionInputParams { #[arg(skip)] procedure_id: Guid, #[ts(optional)] + #[arg(help = "help.arg.package-id")] package_id: Option, + #[arg(help = "help.arg.action-id")] action_id: ActionId, } async fn get_action_input( @@ -156,9 +158,12 @@ pub struct RunActionParams { #[arg(skip)] procedure_id: Guid, #[ts(optional)] + #[arg(help = "help.arg.package-id")] package_id: Option, + #[arg(help = "help.arg.action-id")] action_id: ActionId, #[ts(type = "any")] + #[arg(help = "help.arg.action-input")] input: Value, } async fn run_action( @@ -285,9 +290,9 @@ async fn create_task( #[ts(type = "{ only: string[] } | { except: string[] }")] #[ts(export)] pub struct ClearTasksParams { - #[arg(long, conflicts_with = "except")] + #[arg(long, conflicts_with = "except", help = "help.arg.only-tasks")] pub only: Option>, - #[arg(long, conflicts_with = "only")] + #[arg(long, conflicts_with = "only", help = "help.arg.except-tasks")] pub except: Option>, } diff --git a/core/src/service/effects/callbacks.rs b/core/src/service/effects/callbacks.rs index 1b928d3a1..c86773095 100644 --- a/core/src/service/effects/callbacks.rs +++ b/core/src/service/effects/callbacks.rs @@ -319,9 +319,9 @@ impl CallbackHandlers { #[ts(type = "{ only: number[] } | { except: number[] }")] #[ts(export)] pub struct ClearCallbacksParams { - #[arg(long, conflicts_with = "except")] + #[arg(long, conflicts_with = "except", help = "help.arg.only-callbacks")] pub only: Option>, - #[arg(long, conflicts_with = "only")] + #[arg(long, conflicts_with = "only", help = "help.arg.except-callbacks")] pub except: Option>, } diff --git a/core/src/service/effects/prelude.rs b/core/src/service/effects/prelude.rs index 74a3ce476..60b0ecc9d 100644 --- a/core/src/service/effects/prelude.rs +++ b/core/src/service/effects/prelude.rs @@ -11,6 +11,6 @@ pub(super) use crate::service::effects::context::EffectContext; #[ts(export)] pub struct EventId { #[serde(default)] - #[arg(default_value_t, long)] + #[arg(default_value_t, long, help = "help.arg.event-id")] pub event_id: Guid, } diff --git a/core/src/service/effects/subcontainer/sync.rs b/core/src/service/effects/subcontainer/sync.rs index dba63c1cd..176203c03 100644 --- a/core/src/service/effects/subcontainer/sync.rs +++ b/core/src/service/effects/subcontainer/sync.rs @@ -107,22 +107,23 @@ fn open_file_read(path: impl AsRef) -> Result { #[derive(Debug, Clone, Serialize, Deserialize, Parser)] pub struct ExecParams { - #[arg(long)] + #[arg(long, help = "help.arg.force-tty")] force_tty: bool, - #[arg(long)] + #[arg(long, help = "help.arg.force-stderr-tty")] force_stderr_tty: bool, - #[arg(long)] + #[arg(long, help = "help.arg.pty-size")] pty_size: Option, - #[arg(short, long)] + #[arg(short, long, help = "help.arg.env-variable")] env: Vec, - #[arg(long)] + #[arg(long, help = "help.arg.env-file-path")] env_file: Option, - #[arg(short, long)] + #[arg(short, long, help = "help.arg.workdir-path")] workdir: Option, - #[arg(short, long)] + #[arg(short, long, help = "help.arg.user-name")] user: Option, + #[arg(help = "help.arg.chroot-path")] chroot: PathBuf, - #[arg(trailing_var_arg = true)] + #[arg(trailing_var_arg = true, help = "help.arg.command-to-execute")] command: Vec, } impl ExecParams { diff --git a/core/src/service/mod.rs b/core/src/service/mod.rs index 2213f5090..b55d0665f 100644 --- a/core/src/service/mod.rs +++ b/core/src/service/mod.rs @@ -685,6 +685,7 @@ struct ServiceActorSeed { #[derive(Deserialize, Serialize, Parser, TS)] pub struct RebuildParams { + #[arg(help = "help.arg.package-id")] pub id: PackageId, } pub async fn rebuild(ctx: RpcContext, RebuildParams { id }: RebuildParams) -> Result<(), Error> { @@ -1134,18 +1135,19 @@ async fn get_passwd_command(etc_passwd_path: PathBuf, user: &str) -> RootCommand #[derive(Deserialize, Serialize, Parser)] pub struct CliAttachParams { + #[arg(help = "help.arg.package-id")] pub id: PackageId, - #[arg(long)] + #[arg(long, help = "help.arg.force-tty")] pub force_tty: bool, - #[arg(trailing_var_arg = true)] + #[arg(trailing_var_arg = true, help = "help.arg.command-to-execute")] pub command: Vec, - #[arg(long, short)] + #[arg(long, short, help = "help.arg.subcontainer-name")] subcontainer: Option, - #[arg(long, short)] + #[arg(long, short, help = "help.arg.container-name")] name: Option, - #[arg(long, short)] + #[arg(long, short, help = "help.arg.user-name")] user: Option, - #[arg(long, short)] + #[arg(long, short, help = "help.arg.image-id")] image_id: Option, } #[instrument[skip_all]] diff --git a/core/src/ssh.rs b/core/src/ssh.rs index a94a6c483..7d8b073b4 100644 --- a/core/src/ssh.rs +++ b/core/src/ssh.rs @@ -118,6 +118,7 @@ pub fn ssh() -> ParentHandler { #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct AddParams { + #[arg(help = "help.arg.ssh-public-key")] key: SshPubKey, } @@ -152,6 +153,7 @@ pub async fn add(ctx: RpcContext, AddParams { key }: AddParams) -> Result Result<(), Error> { #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct ZramParams { + #[arg(help = "help.arg.enable-zram")] enable: bool, } @@ -148,6 +149,7 @@ fn display_governor_info( #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct GovernorParams { + #[arg(help = "help.arg.governor-name")] set: Option, } @@ -1043,15 +1045,15 @@ async fn get_disk_info() -> Result { #[ts(export)] #[serde(rename_all = "camelCase")] pub struct SmtpValue { - #[arg(long)] + #[arg(long, help = "help.arg.smtp-server")] pub server: String, - #[arg(long)] + #[arg(long, help = "help.arg.smtp-port")] pub port: u16, - #[arg(long)] + #[arg(long, help = "help.arg.smtp-from")] pub from: String, - #[arg(long)] + #[arg(long, help = "help.arg.smtp-login")] pub login: String, - #[arg(long)] + #[arg(long, help = "help.arg.smtp-password")] pub password: Option, } pub async fn set_system_smtp(ctx: RpcContext, smtp: SmtpValue) -> Result<(), Error> { @@ -1089,17 +1091,17 @@ pub async fn clear_system_smtp(ctx: RpcContext) -> Result<(), Error> { #[ts(export)] #[serde(rename_all = "camelCase")] pub struct TestSmtpParams { - #[arg(long)] + #[arg(long, help = "help.arg.smtp-server")] pub server: String, - #[arg(long)] + #[arg(long, help = "help.arg.smtp-port")] pub port: u16, - #[arg(long)] + #[arg(long, help = "help.arg.smtp-from")] pub from: String, - #[arg(long)] + #[arg(long, help = "help.arg.smtp-to")] pub to: String, - #[arg(long)] + #[arg(long, help = "help.arg.smtp-login")] pub login: String, - #[arg(long)] + #[arg(long, help = "help.arg.smtp-password")] pub password: String, } pub async fn test_smtp( @@ -1136,10 +1138,13 @@ pub async fn test_smtp( #[derive(Debug, Clone, Deserialize, Serialize, TS, Parser)] #[serde(rename_all = "camelCase")] pub struct KeyboardOptions { + #[arg(help = "help.arg.keyboard-layout")] pub layout: InternedString, + #[arg(long, help = "help.arg.keyboard-model")] pub model: Option, + #[arg(long, help = "help.arg.keyboard-variant")] pub variant: Option, - #[arg(short, long = "option")] + #[arg(short, long = "option", help = "help.arg.keyboard-option")] #[serde(default)] pub options: Vec, } @@ -1194,6 +1199,7 @@ pub async fn set_keyboard(ctx: RpcContext, options: KeyboardOptions) -> Result<( #[derive(Debug, Clone, Deserialize, Serialize, TS, Parser)] #[serde(rename_all = "camelCase")] pub struct SetLanguageParams { + #[arg(help = "help.arg.language-code")] pub language: InternedString, } diff --git a/core/src/tunnel/context.rs b/core/src/tunnel/context.rs index 6de360bf5..5afac62ab 100644 --- a/core/src/tunnel/context.rs +++ b/core/src/tunnel/context.rs @@ -43,11 +43,11 @@ use crate::util::sync::{SyncMutex, Watch}; #[serde(rename_all = "kebab-case")] #[command(rename_all = "kebab-case")] pub struct TunnelConfig { - #[arg(short = 'c', long = "config")] + #[arg(short = 'c', long = "config", help = "help.arg.config-file-path")] pub config: Option, - #[arg(short = 'l', long = "listen")] + #[arg(short = 'l', long = "listen", help = "help.arg.tunnel-listen-address")] pub tunnel_listen: Option, - #[arg(short = 'd', long = "datadir")] + #[arg(short = 'd', long = "datadir", help = "help.arg.data-directory")] pub datadir: Option, } impl ContextConfig for TunnelConfig { @@ -244,6 +244,7 @@ impl Deref for TunnelContext { #[derive(Debug, Deserialize, Serialize, Parser)] pub struct TunnelAddrParams { + #[arg(help = "help.arg.tunnel-ip-address")] pub tunnel: IpAddr, } @@ -310,6 +311,7 @@ impl CallRemote for CliContext { #[derive(Debug, Deserialize, Serialize, Parser)] pub struct TunnelUrlParams { + #[arg(help = "help.arg.tunnel-url")] pub tunnel: Url, } diff --git a/core/src/tunnel/db.rs b/core/src/tunnel/db.rs index 2e96f3a39..bd83305fd 100644 --- a/core/src/tunnel/db.rs +++ b/core/src/tunnel/db.rs @@ -121,8 +121,9 @@ pub fn db_api() -> ParentHandler { #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct CliDumpParams { - #[arg(long = "pointer", short = 'p')] + #[arg(long = "pointer", short = 'p', help = "help.arg.json-pointer")] pointer: Option, + #[arg(help = "help.arg.database-path")] path: Option, } @@ -154,7 +155,7 @@ async fn cli_dump( #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct DumpParams { - #[arg(long = "pointer", short = 'p')] + #[arg(long = "pointer", short = 'p', help = "help.arg.json-pointer")] #[ts(type = "string | null")] pointer: Option, } @@ -170,7 +171,9 @@ pub async fn dump(ctx: TunnelContext, DumpParams { pointer }: DumpParams) -> Res #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct CliApplyParams { + #[arg(help = "help.arg.db-apply-expr")] expr: String, + #[arg(help = "help.arg.database-path")] path: Option, } @@ -225,7 +228,9 @@ async fn cli_apply( #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct ApplyParams { + #[arg(help = "help.arg.db-apply-expr")] expr: String, + #[arg(help = "help.arg.database-path")] path: Option, } diff --git a/core/src/tunnel/web.rs b/core/src/tunnel/web.rs index c3af02d51..ba4b5c7d4 100644 --- a/core/src/tunnel/web.rs +++ b/core/src/tunnel/web.rs @@ -279,7 +279,7 @@ pub async fn import_certificate_cli( #[derive(Debug, Deserialize, Serialize, Parser)] pub struct GenerateCertParams { - #[arg(help = "Subject Alternative Name(s)")] + #[arg(help = "help.arg.cert-subject-alt-names")] pub subject: Vec, } @@ -331,6 +331,7 @@ pub async fn get_certificate(ctx: TunnelContext) -> Result> #[derive(Debug, Deserialize, Serialize, Parser)] #[serde(rename_all = "camelCase")] pub struct SetListenParams { + #[arg(help = "help.arg.listen-address")] pub listen: SocketAddr, } diff --git a/core/src/update/mod.rs b/core/src/update/mod.rs index a05037d9a..d1f7bb217 100644 --- a/core/src/update/mod.rs +++ b/core/src/update/mod.rs @@ -42,12 +42,13 @@ use crate::util::io::AtomicFile; #[serde(rename_all = "camelCase")] #[command(rename_all = "kebab-case")] pub struct UpdateSystemParams { + #[arg(help = "help.arg.registry-url")] #[ts(type = "string")] registry: Url, #[ts(type = "string | null")] - #[arg(long = "to")] + #[arg(long = "to", help = "help.arg.update-target-version")] target: Option, - #[arg(long = "no-progress", action = ArgAction::SetFalse)] + #[arg(long = "no-progress", action = ArgAction::SetFalse, help = "help.arg.no-progress")] #[serde(default)] progress: bool, } diff --git a/core/src/util/rpc.rs b/core/src/util/rpc.rs index 6c79af572..5376dfe35 100644 --- a/core/src/util/rpc.rs +++ b/core/src/util/rpc.rs @@ -23,7 +23,7 @@ pub fn util() -> ParentHandler { #[derive(Debug, Deserialize, Serialize, Parser)] pub struct B3sumParams { - #[arg(long = "no-mmap", action = clap::ArgAction::SetFalse)] + #[arg(long = "no-mmap", action = clap::ArgAction::SetFalse, help = "help.arg.no-mmap")] allow_mmap: bool, file: String, }