summaryrefslogtreecommitdiffstats
path: root/src/jd/features
diff options
context:
space:
mode:
authorjdlugosz963 <jdlugosz963@gmail.com>2025-08-11 17:36:57 +0200
committerjdlugosz963 <jdlugosz963@gmail.com>2025-08-11 17:40:12 +0200
commitbc591dcedf45b80f70661f33c42c68dbd581e901 (patch)
tree4a3cbd7831d8e0d8ce12f318d64e06848c9ea3ab /src/jd/features
parent1ebb0e267b40d86386b66b7b81686461446e39f8 (diff)
downloaddotfiles-master.tar.gz
dotfiles-master.zip
Migrate to RDEHEADmaster
Diffstat (limited to 'src/jd/features')
-rw-r--r--src/jd/features/mail.scm115
-rw-r--r--src/jd/features/networking.scm81
2 files changed, 196 insertions, 0 deletions
diff --git a/src/jd/features/mail.scm b/src/jd/features/mail.scm
new file mode 100644
index 0000000..f5c3536
--- /dev/null
+++ b/src/jd/features/mail.scm
@@ -0,0 +1,115 @@
1(define-module (jd features mail)
2 #:use-module (rde packages)
3 #:use-module (rde exceptions)
4 #:use-module (rde features)
5 #:use-module (rde predicates)
6 #:use-module (rde features emacs)
7 #:use-module (rde features mail)
8 #:use-module ((rde features mail providers) #:prefix mail-providers:)
9 #:use-module (gnu packages mail)
10 #:use-module (gnu packages emacs-xyz)
11 #:use-module (rde packages emacs-xyz)
12 #:use-module (rde packages mail)
13 #:use-module (rde serializers elisp)
14 #:use-module (rde home services mail)
15 #:use-module (gnu services)
16 #:use-module (gnu services configuration)
17 #:use-module (gnu home services)
18 #:use-module (gnu home-services mail)
19 #:use-module (gnu home services mcron)
20 #:use-module (gnu home-services version-control)
21 #:use-module (gnu home services xdg)
22
23 #:use-module (ice-9 match)
24 #:use-module (srfi srfi-1)
25 #:use-module (guix gexp)
26 #:use-module (guix deprecation)
27 #:use-module (guix diagnostics)
28 #:use-module (guix i18n)
29
30 #:export (feature-l2md* feature-mail-mcron))
31
32(define* (feature-l2md*
33 #:key
34 (l2md l2md))
35 "Configure l2md MDA."
36 (ensure-pred file-like? l2md)
37
38 (define (get-home-services config)
39 (require-value 'mail-directory-fn config)
40 (require-value 'mailing-lists config)
41 (define mail-dir ((get-value 'mail-directory-fn config) config))
42 (define mls (filter (lambda (x) (eq? (mailing-list-synchronizer x) 'l2md))
43 (get-value 'mailing-lists config)))
44 (define (get-repo-config ml)
45 (let ((repo-config (mailing-list-config ml)))
46 (if (eq? %unset-value (l2md-repo-maildir repo-config))
47 (l2md-repo
48 (inherit repo-config)
49 (maildir (string-append
50 mail-dir "/lists/" (mailing-list-fqda ml) "/archive")))
51 repo-config)))
52 ;; <https://git.kernel.org/pub/scm/linux/kernel/git/dborkman/l2md.git/about/>
53 ;; Applying patches <https://git.kyleam.com/piem/about/>
54
55 (define add-ml-tag
56 (map (lambda (x)
57 (format
58 #f "notmuch tag +~a -- path:lists/~a/**"
59 ;; TODO: Use new tag not to retag already existing entities.
60 ;; Do it before new tag will be romved
61 ;; TODO: Fix order of items in post-new hook
62 (mailing-list-id x) (mailing-list-fqda x)))
63 mls))
64
65 (list
66 (simple-service
67 'l2md-add-tags-to-mailing-list
68 home-notmuch-service-type
69 (home-notmuch-extension
70 (post-new
71 (list
72 #~(begin (for-each system '#$add-ml-tag))))))
73
74 (service
75 home-l2md-service-type
76 (home-l2md-configuration
77 (l2md l2md)
78 (oneshot 1)
79 (repos (map get-repo-config mls))))))
80
81 (feature
82 (name 'l2md)
83 (home-services-getter get-home-services)
84 (values `((l2md . ,l2md)))))
85
86(define* (feature-mail-mcron
87 #:key
88 (time-spec '(next-minute
89 (range 0 60 20))))
90 "Configure mcron to invoke other email commands based on the other
91features that have been enabled."
92 (define (get-home-services config)
93 (list
94 (when (get-value 'isync config)
95 (let* ((sync-cmd (list `(,((get-value 'mbsync config) config) "-a")))
96 (notmuch-cmd (if (get-value 'notmuch config)
97 (list `(,(file-append (get-value 'notmuch config) "/bin/notmuch")
98 "new"))
99 (list)))
100 (l2md-cmd (if (get-value 'l2md config)
101 (list `(,(file-append (get-value 'l2md config) "/bin/l2md")))
102 (list))))
103 (simple-service
104 'isync-mcron-job
105 home-mcron-service-type
106 (list
107 #~(job '#$time-spec
108 (lambda ()
109 (setenv "DISPLAY" ":0")
110 #$@(map (lambda (x) `(system* ,@x))
111 (append sync-cmd l2md-cmd notmuch-cmd))))))))))
112
113 (feature
114 (name 'mail-mcron)
115 (home-services-getter get-home-services)))
diff --git a/src/jd/features/networking.scm b/src/jd/features/networking.scm
new file mode 100644
index 0000000..59eeb90
--- /dev/null
+++ b/src/jd/features/networking.scm
@@ -0,0 +1,81 @@
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 system nss)
11 ;; #:use-module (rde system services networking)
12 #:use-module (rde system services accounts)
13
14 #:use-module (gnu packages i2p)
15 #:use-module (gnu packages networking)
16 #:use-module (gnu packages ssh)
17 #:use-module (gnu packages gnome)
18 #:use-module (rde packages)
19
20 #:use-module (guix gexp)
21
22 #:export (feature-networking*))
23
24(define* (feature-networking*
25 #:key
26 (iwd-autoconnect? #t)
27 (network-manager network-manager)
28 (network-manager-applet network-manager-applet)
29 (network-manager-vpn-plugins '())
30 mdns?)
31 "Configure iwd and everything."
32 (ensure-pred file-like? network-manager)
33 (ensure-pred file-like? network-manager-applet)
34
35 (define f-name 'networking)
36 (define (get-home-services config)
37
38 (list
39 (simple-service 'network-manager-applet-package
40 home-profile-service-type
41 (list network-manager-applet))
42 ;; TODO: Disable nm-applet notification by default
43 ;; gsettings set org.gnome.nm-applet disable-connected-notifications true
44 (simple-service
45 'networking-nm-applet-shepherd-service
46 home-shepherd-service-type
47 (list
48 (shepherd-service
49 (provision '(nm-applet))
50 (requirement '(dbus))
51 (stop #~(make-kill-destructor))
52 (start #~(make-forkexec-constructor
53 (list #$(file-append network-manager-applet "/bin/nm-applet")
54 "--indicator")
55 #:log-file (string-append
56 (getenv "XDG_STATE_HOME") "/log"
57 "/nm-applet.log"))))))))
58
59 (define (get-system-services config)
60 (list
61 (service network-manager-service-type
62 (network-manager-configuration
63 (network-manager network-manager)
64 (vpn-plugins network-manager-vpn-plugins)
65 (shepherd-requirement '(iwd))))
66 (service (@@ (rde system services networking) iwd-service-type)
67 ((@@ (rde system services networking) iwd-configuration)
68 (main-conf
69 `((Settings ((AutoConnect . ,iwd-autoconnect?)))))))
70 (service modem-manager-service-type)
71 (service usb-modeswitch-service-type)))
72
73 (feature
74 (name f-name)
75 (values `((,f-name . #t)
76 ,@(if mdns?
77 `((name-service . ,%mdns-host-lookup-nss)
78 (mdns . #t))
79 '())))
80 (home-services-getter get-home-services)
81 (system-services-getter get-system-services)))