diff options
Diffstat (limited to 'src/jd/features/networking.scm')
| -rw-r--r-- | src/jd/features/networking.scm | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/src/jd/features/networking.scm b/src/jd/features/networking.scm new file mode 100644 index 0000000..74f8085 --- /dev/null +++ b/src/jd/features/networking.scm | |||
| @@ -0,0 +1,95 @@ | |||
| 1 | (define-module (jd features networking) | ||
| 2 | #:use-module (rde features) | ||
| 3 | #:use-module (rde predicates) | ||
| 4 | |||
| 5 | #:use-module (gnu services) | ||
| 6 | #:use-module (gnu home services) | ||
| 7 | #:use-module (gnu home services shepherd) | ||
| 8 | #:use-module (rde home services i2p) | ||
| 9 | #:use-module (gnu services networking) | ||
| 10 | #:use-module (gnu services dbus) | ||
| 11 | #:use-module (gnu system nss) | ||
| 12 | ;; #:use-module (rde system services networking) | ||
| 13 | #:use-module (rde system services accounts) | ||
| 14 | |||
| 15 | #:use-module (gnu packages i2p) | ||
| 16 | #:use-module (gnu packages networking) | ||
| 17 | #:use-module (gnu packages ssh) | ||
| 18 | #:use-module (gnu packages gnome) | ||
| 19 | #:use-module (rde packages) | ||
| 20 | |||
| 21 | #:use-module (guix gexp) | ||
| 22 | |||
| 23 | #:export (feature-networking*)) | ||
| 24 | |||
| 25 | (define* (feature-networking* | ||
| 26 | #:key | ||
| 27 | (iwd-autoconnect? #t) | ||
| 28 | (network-manager network-manager) | ||
| 29 | (network-manager-applet network-manager-applet) | ||
| 30 | (network-manager-vpn-plugins '()) | ||
| 31 | mdns?) | ||
| 32 | "Configure iwd and everything." | ||
| 33 | (ensure-pred file-like? network-manager) | ||
| 34 | (ensure-pred file-like? network-manager-applet) | ||
| 35 | |||
| 36 | (define f-name 'networking) | ||
| 37 | (define (get-home-services config) | ||
| 38 | |||
| 39 | (list | ||
| 40 | (simple-service 'network-manager-applet-package | ||
| 41 | home-profile-service-type | ||
| 42 | (list network-manager-applet)) | ||
| 43 | ;; TODO: Disable nm-applet notification by default | ||
| 44 | ;; gsettings set org.gnome.nm-applet disable-connected-notifications true | ||
| 45 | (simple-service | ||
| 46 | 'networking-nm-applet-shepherd-service | ||
| 47 | home-shepherd-service-type | ||
| 48 | (list | ||
| 49 | (shepherd-service | ||
| 50 | (provision '(nm-applet)) | ||
| 51 | (requirement '(dbus)) | ||
| 52 | (stop #~(make-kill-destructor)) | ||
| 53 | (start #~(make-forkexec-constructor | ||
| 54 | (list #$(file-append network-manager-applet "/bin/nm-applet") | ||
| 55 | "--indicator") | ||
| 56 | #:log-file (string-append | ||
| 57 | (getenv "XDG_STATE_HOME") "/log" | ||
| 58 | "/nm-applet.log")))))))) | ||
| 59 | (define polkit-network-manager | ||
| 60 | (file-union | ||
| 61 | "polkit-network-manager" | ||
| 62 | `(("share/polkit-1/rules.d/50-org.freedesktop.NetworkManager.rules" | ||
| 63 | ,(plain-file | ||
| 64 | "wheel.rules" | ||
| 65 | "polkit.addRule(function(action, subject) { | ||
| 66 | if (action.id.indexOf(\"org.freedesktop.NetworkManager.\") == 0 && subject.isInGroup(\"plugdev\")) { | ||
| 67 | return polkit.Result.YES; | ||
| 68 | } | ||
| 69 | }); | ||
| 70 | "))))) | ||
| 71 | |||
| 72 | (define (get-system-services config) | ||
| 73 | (list | ||
| 74 | (service network-manager-service-type | ||
| 75 | (network-manager-configuration | ||
| 76 | (network-manager network-manager) | ||
| 77 | (vpn-plugins network-manager-vpn-plugins) | ||
| 78 | (shepherd-requirement '(iwd)))) | ||
| 79 | (service (@@ (rde system services networking) iwd-service-type) | ||
| 80 | ((@@ (rde system services networking) iwd-configuration) | ||
| 81 | (main-conf | ||
| 82 | `((Settings ((AutoConnect . ,iwd-autoconnect?))))))) | ||
| 83 | (service modem-manager-service-type) | ||
| 84 | (service usb-modeswitch-service-type) | ||
| 85 | (simple-service 'polkit-network-manager polkit-service-type (list polkit-network-manager)))) | ||
| 86 | |||
| 87 | (feature | ||
| 88 | (name f-name) | ||
| 89 | (values `((,f-name . #t) | ||
| 90 | ,@(if mdns? | ||
| 91 | `((name-service . ,%mdns-host-lookup-nss) | ||
| 92 | (mdns . #t)) | ||
| 93 | '()))) | ||
| 94 | (home-services-getter get-home-services) | ||
| 95 | (system-services-getter get-system-services))) | ||
