;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013 Andreas Enge ;;; Copyright © 2014 Mark H Weaver ;;; Copyright © 2016 Ricardo Wurmus ;;; Copyright © 2017 Ludovic Courtès ;;; Copyright © 2019, 2020 Efraim Flashner ;;; Copyright © 2019 Eric Bavier ;;; Copyright © 2019 Mathieu Othacehe ;;; Copyright © 2020 Michael Rohleder ;;; Copyright © 2020 Prafulla Giri ;;; ;;; This file is part of GNU Guix. ;;; ;;; GNU Guix 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. ;;; ;;; GNU Guix 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 ;;
aboutsummaryrefslogtreecommitdiff
blob: d75a640519232218088352032fabfce31ed09e6d (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix 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.
;;;
;;; GNU Guix 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 GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu installer newt ethernet)
  #:use-module (gnu installer connman)
  #:use-module (gnu installer steps)
  #:use-module (gnu installer newt utils)
  #:use-module (gnu installer newt page)
  #:use-module (guix i18n)
  #:use-module (ice-9 format)
  #:use-module (ice-9 match)
  #:use-module (srfi srfi-34)
  #:use-module (srfi srfi-35)
  #:use-module (newt)
  #:export (run-ethernet-page))

(define (ethernet-services)
  "Return all the connman services of ethernet type."
  (let ((services (connman-services)))
    (filter (lambda (service)
              (and (string=? (service-type service) "ethernet")
                   (not (string-null? (service-name service)))))
            services)))

(define (ethernet-service->text service)
  "Return a string describing the given ethernet SERVICE."
  (let* ((name (service-name service))
         (path (service-path service))
         (full-name (string-append name "-" path))
         (state (service-state service))
         (connected? (or (string=? state "online")
                         (string=? state "ready"))))
    (format #f "~c ~a~%"
            (if connected? #\* #\ )
            full-name)))

(define (connect-ethernet-service service)
  "Connect to the given ethernet SERVICE. Display a connecting page while the
connection is pending."
  (let* ((service-name (service-name service))
         (form (draw-connecting-page service-name)))
    (connman-connect service)
    (destroy-form-and-pop form)
    service))

(define (run-ethernet-page)
  (match (ethernet-services)
    (()
     (run-error-page
      (G_ "No ethernet service available, please try again.")
      (G_ "No service"))
     (abort-to-prompt 'installer-step 'abort))
    ((service)
     ;; Only one service is available so return it directly.
     service)
    ((services ...)
     (run-listbox-selection-page
      #:info-text (G_ "Please select an ethernet network.")
      #:title (G_ "Ethernet connection")
      #:listbox-items services
      #:listbox-item->text ethernet-service->text
      #:listbox-height (min (+ (length services) 2) 5)
      #:button-text (G_ "Exit")
      #:button-callback-procedure
      (lambda _
        (abort-to-prompt 'installer-step 'abort))
      #:listbox-callback-procedure connect-ethernet-service))))
(wrap-program (string-append out "/bin/roffit") `("PERL5LIB" ":" prefix (,(getenv "PERL5LIB")))))))))) (native-inputs (list perl-html-tree)) ; for test (inputs (list bash-minimal perl)) (home-page "https://daniel.haxx.se/projects/roffit/") (synopsis "Convert nroff files to HTML") (description "Roffit is a program that reads an nroff file and outputs an HTML file. It is typically used to display man pages on a web site.") (license expat)))) (define-public ronn-ng (package (name "ronn-ng") (version "0.9.1") (source (origin (method url-fetch) (uri (rubygems-uri "ronn-ng" version)) (sha256 (base32 "1slxfg57cabmh98fw507z4ka6lwq1pvbrqwppflxw6700pi8ykfh")))) (build-system ruby-build-system) (arguments (list #:phases #~(modify-phases %standard-phases (add-after 'unpack 'patch-test (lambda _ ;; TODO This should be removed once the upstream fix is released ;; https://github.com/apjanke/ronn-ng/commit/e194bf62b1d0c0828cc83405e60dc5ece829e62f (substitute* "test/test_ronn_document.rb" (("YAML\\.load\\(@doc\\.to_yaml\\)") "YAML.load(@doc.to_yaml, permitted_classes: [Time])")))) (add-after 'extract-gemspec 'fix-gemspec-mustache (lambda _ (substitute* "ronn-ng.gemspec" (("(.freeze.*~>).*(\".*$)" all start end) (string-append start " 1.0" end))))) (add-after 'wrap 'wrap-program (lambda* (#:key outputs #:allow-other-keys) (let ((prog (string-append (assoc-ref %outputs "out") "/bin/ronn"))) (wrap-program prog `("PATH" ":" suffix ,(map (lambda (exp_inpt) (string-append (assoc-ref %build-inputs exp_inpt) "/bin")) '("ruby-kramdown" "ruby-mustache" "ruby-nokogiri")))))))))) (inputs (list bash-minimal ruby-kramdown ruby-mustache ruby-nokogiri)) (synopsis "Build manuals in HTML and Unix man page format from Markdown") (description "Ronn-NG is an updated fork of ronn. It builds manuals in HTML and Unix man page format from Markdown.") (home-page "https://github.com/apjanke/ronn-ng") (license expat))) (define-public grap (package (name "grap") (version "1.46") (source (origin (method url-fetch) (uri (string-append "https://www.lunabase.org/~faber/Vault/software/grap/grap-" version ".tar.gz")) (sha256 (base32 "1d4bhhgi64x4cjww7fj0lqgr20w7lqnl2aizj6cndsgyxkywx3ks")))) (build-system gnu-build-system) (native-inputs (list flex bison)) (synopsis "Tool for creating graphs with troff") (description "Grap is a language for typesetting graphs specified and first implemented by Brian Kernighan and Jon Bentley at Bell Labs. It is an expressive language for describing graphs and incorporating them in typeset documents. It is implemented as a preprocessor to Kernigan's pic language for describing languages, so any system that can use pic can use grap. For sure, TeX and groff can use it.") (home-page "https://github.com/snorerot13/grap") (license bsd-3)))