diff options
Diffstat (limited to 'scripts/whispers.in')
-rw-r--r-- | scripts/whispers.in | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/scripts/whispers.in b/scripts/whispers.in new file mode 100644 index 0000000..f6f3a9a --- /dev/null +++ b/scripts/whispers.in @@ -0,0 +1,108 @@ +#!@GUILE@ \ +--no-auto-compile -e main -s +!# + +;;; Whispers --- Stealth VPN and ssh tunneler +;;; Copyright © 2024 Runciter <runciter@whispers-vpn.org> +;;; +;;; This file is part of Whispers. +;;; +;;; Whispers is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; Whispers is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with Whispers. If not, see <http://www.gnu.org/licenses/>. + +(use-modules (config)) +(use-modules (whispers)) + +(define herd-path "/run/current-system/profile/bin/herd") + +(define config + (configuration + (name 'whispers) + (version "0.1") + (keywords + (list + (switch + (name 'lieutenant) + (character #\l) + (default "/") + (example "LIEUTENANT-PATH ACTION [SERVICE [ARG...]]") + (test (lambda (lieutenant-path) + (equal? "/" (substring lieutenant-path 0 1)))) + (synopsis "Absolute lieutenant path, and arguments passed to herd.")) + (switch + (name 'vers-herd) + (test boolean?) + (default #f) + (character #f) + (synopsis "Display the herd version.")) + (switch + (name 'help-herd) + (test boolean?) + (character #f) + (default #f) + (synopsis "Display the help message of herd.")) + (switch + (name 'usage-herd) + (test boolean?) + (character #f) + (default #f) + (synopsis "Display the short usage message of herd.")))) + (synopsis "Send commands to shepherd lieutenants of the whispers tree.") + (description "The whispers command is a simple convenience wrapper + around the herd program. Instead of specifying a file path +to the listening socket of a running shepherd in the whispers tree, the +user simply provides its absolute whispers tree path as an +argument to the --lieutenant option of this command. + +LIEUTENANT-PATH: absolute path to a shepherd lieutenant in the whispers +tree. Must start with a slash character. + +ACTION: the shepherd service action to perform. + +SERVICE: the shepherd service of which the ACTION is to be performed. + +ARG...: arguments passed to the procedure of the shepherd action. + +If the --lieutenant switch and its LIEUTENANT-PATH argument are omitted, +an action is performed on a service of the shepherd at the root of the +whispers tree, which is itself a child process of the root shepher PID 1 +handled as one of its services. As such, using +'whispers -l / ACTION [SERVICE [ARG...]]' +or +'whispers ACTION [SERVICE [ARG...]]' +have exactly the same effect."))) + +(define (main cmd-line) + (let ((options (getopt-config-auto cmd-line config))) + (cond ((option-ref options 'help-herd) + (system* herd-path + "--help")) + ((option-ref options 'vers-herd) + (system* herd-path + "--version")) + ((option-ref options 'usage-herd) + (system* herd-path + "--usage")) + (else (whispers #:lieutenant + (option-ref options 'lieutenant) + #:act + (cond ((or (equal? "-l" + (cadr (command-line))) + (equal? "--lieutenant" + (cadr (command-line)))) + (cdddr (command-line))) + (else (cdr (command-line))))))))) + +;;; Local Variables: +;;; mode: scheme +;;; End: |