summaryrefslogtreecommitdiffstats
path: root/src/jd/features/networking.scm
diff options
context:
space:
mode:
Diffstat (limited to 'src/jd/features/networking.scm')
-rw-r--r--src/jd/features/networking.scm95
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)))