Received: (at 66557) by debbugs.gnu.org; 29 Nov 2023 17:20:50 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 29 12:20:50 2023 Received: from localhost ([127.0.0.1]:50998 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1r8OF0-0002KG-7r for submit <at> debbugs.gnu.org; Wed, 29 Nov 2023 12:20:50 -0500 Received: from smtpm2.myservices.hosting ([185.26.105.233]:42252) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <mirai@HIDDEN>) id 1r8OEy-0002K6-4x for 66557 <at> debbugs.gnu.org; Wed, 29 Nov 2023 12:20:48 -0500 Received: from mail1.netim.hosting (unknown [185.26.106.173]) by smtpm2.myservices.hosting (Postfix) with ESMTP id A0E9F20A0B; Wed, 29 Nov 2023 18:20:38 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by mail1.netim.hosting (Postfix) with ESMTP id EE46380067; Wed, 29 Nov 2023 18:20:34 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at mail1.netim.hosting Received: from mail1.netim.hosting ([127.0.0.1]) by localhost (mail1-2.netim.hosting [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id fCZvE5ygXrNY; Wed, 29 Nov 2023 18:20:34 +0100 (CET) Received: from [192.168.1.116] (unknown [10.192.1.83]) (Authenticated sender: lumen@HIDDEN) by mail1.netim.hosting (Postfix) with ESMTPSA id 61FCA80060; Wed, 29 Nov 2023 18:20:34 +0100 (CET) Message-ID: <52947fbf-42c2-44e5-adf4-0b1bd66f56c0@HIDDEN> Date: Wed, 29 Nov 2023 17:20:09 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [bug#66557] [PATCH] home: services: Add goimapnotify service. Content-Language: en-US To: Nils Landt <nils@HIDDEN> References: <c9d8798670448a18779e3c24b9b8a88902942936.1697378478.git.nils@HIDDEN> <1635724009.68147.1700997260830@HIDDEN> From: Bruno Victal <mirai@HIDDEN> In-Reply-To: <1635724009.68147.1700997260830@HIDDEN> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------I9T01YonLOdKc8NXXbadyF8S" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 66557 Cc: 66557 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------I9T01YonLOdKc8NXXbadyF8S Content-Type: multipart/mixed; boundary="------------igvkadOhEDLvz9lzF4WijUYt"; protected-headers="v1" From: Bruno Victal <mirai@HIDDEN> To: Nils Landt <nils@HIDDEN> Cc: 66557 <at> debbugs.gnu.org Message-ID: <52947fbf-42c2-44e5-adf4-0b1bd66f56c0@HIDDEN> Subject: Re: [bug#66557] [PATCH] home: services: Add goimapnotify service. References: <c9d8798670448a18779e3c24b9b8a88902942936.1697378478.git.nils@HIDDEN> <1635724009.68147.1700997260830@HIDDEN> In-Reply-To: <1635724009.68147.1700997260830@HIDDEN> --------------igvkadOhEDLvz9lzF4WijUYt Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Nils, On 2023-11-26 11:14, Nils Landt wrote: > Bruno: >> This isn't needed, fields whose maybe-values are unset don't call the >> serializing procedures. >=20 > combined with >=20 >> You can use 'serialize-configuration' instead which accounts for the u= nset maybe-values. >=20 > I put some time into this, but I don't see how serialize-configuration,= which returns a gexp including string-append, could be used to turn a co= nfiguration record into the format required by guile-json. Right, I missed that you are synthesizing a list for scm->json, you will need to make use of the lower-level transducers in (gnu services configuration). The fstrim-service-type in (gnu services linux) provides a simple example of its use though for your case you might be looking at something like: --8<---------------cut here---------------start------------->8--- ;; note: untested snippet (define (goimapnotify-files config) (match-record config <home-goimapnotify-configuration> (accounts) (map (match-lambda ((path account) (list path (computed-file (string-append "mail-imapnotify-config-" (goimapnotify-account-host account)) (with-extensions (list guile-json-4) #~(begin (use-modules (json builder)) (with-output-to-file #$output (lambda () (scm->json (list #$@(list-transduce (base-transducer account) rcons goimapnotify-account-fields))) #:pretty #t)))))))) accounts))) --8<---------------cut here---------------end--------------->8--- --=20 Furthermore, I consider that nonfree software must be eradicated. Cheers, Bruno. --------------igvkadOhEDLvz9lzF4WijUYt-- --------------I9T01YonLOdKc8NXXbadyF8S Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature.asc" -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQTAPCseV0HOaN0YFheobOGDL+spVQUCZWdyywAKCRCobOGDL+sp Vc+fAQCgT2X2e25LJsMdp1B9SNr2SLSdurGU35QuEST69UsfywEAtWp6Xes5PE+h x4v92ETD+vm8kbYQpyIN6DWnaOIR1wQ= =eMJU -----END PGP SIGNATURE----- --------------I9T01YonLOdKc8NXXbadyF8S--
guix-patches@HIDDEN
:bug#66557
; Package guix-patches
.
Full text available.Received: (at 66557) by debbugs.gnu.org; 28 Nov 2023 20:38:12 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Tue Nov 28 15:38:12 2023 Received: from localhost ([127.0.0.1]:47815 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1r84qS-0003zs-Hi for submit <at> debbugs.gnu.org; Tue, 28 Nov 2023 15:38:12 -0500 Received: from smtpm2.myservices.hosting ([185.26.105.233]:35424) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <mirai@HIDDEN>) id 1r84qP-0003zh-Ur for 66557 <at> debbugs.gnu.org; Tue, 28 Nov 2023 15:38:11 -0500 Received: from mail1.netim.hosting (unknown [185.26.106.173]) by smtpm2.myservices.hosting (Postfix) with ESMTP id 0ED8920414; Tue, 28 Nov 2023 21:38:00 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by mail1.netim.hosting (Postfix) with ESMTP id 5865380067; Tue, 28 Nov 2023 21:38:00 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at mail1.netim.hosting Received: from mail1.netim.hosting ([127.0.0.1]) by localhost (mail1-2.netim.hosting [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id Qx8m3BVRBhyz; Tue, 28 Nov 2023 21:37:59 +0100 (CET) Received: from [192.168.1.116] (unknown [10.192.1.83]) (Authenticated sender: lumen@HIDDEN) by mail1.netim.hosting (Postfix) with ESMTPSA id B3E9380060; Tue, 28 Nov 2023 21:37:59 +0100 (CET) Message-ID: <d5eedb15-077d-4a67-9337-9dea96e0e46a@HIDDEN> Date: Tue, 28 Nov 2023 20:37:58 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [bug#66557] [PATCH] home: services: Add goimapnotify service. Content-Language: en-US To: Nils Landt <nils@HIDDEN> References: <c9d8798670448a18779e3c24b9b8a88902942936.1697378478.git.nils@HIDDEN> <d279a547-7f5c-4244-8f78-ad0fb98cbe2c@HIDDEN> <656336790.399020.1700580321203@HIDDEN> From: Bruno Victal <mirai@HIDDEN> In-Reply-To: <656336790.399020.1700580321203@HIDDEN> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------rc0y1AQv0xTLU6zsF5hhgLYz" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 66557 Cc: 66557 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------rc0y1AQv0xTLU6zsF5hhgLYz Content-Type: multipart/mixed; boundary="------------01gKkOXvl3LzjnTe52lX0lnS"; protected-headers="v1" From: Bruno Victal <mirai@HIDDEN> To: Nils Landt <nils@HIDDEN> Cc: 66557 <at> debbugs.gnu.org Message-ID: <d5eedb15-077d-4a67-9337-9dea96e0e46a@HIDDEN> Subject: Re: [bug#66557] [PATCH] home: services: Add goimapnotify service. References: <c9d8798670448a18779e3c24b9b8a88902942936.1697378478.git.nils@HIDDEN> <d279a547-7f5c-4244-8f78-ad0fb98cbe2c@HIDDEN> <656336790.399020.1700580321203@HIDDEN> In-Reply-To: <656336790.399020.1700580321203@HIDDEN> --------------01gKkOXvl3LzjnTe52lX0lnS Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Nils, On 2023-11-21 15:25, Nils Landt wrote: >> Bruno Victal <mirai@HIDDEN> hat am 20.11.2023 18:16 CET ls, >> On 2023-10-15 15:01, Nils Landt wrote: >>> +(define (list-of-goimapnotify-accounts? lst) >>> + "List is in the form of '((file-name file-like))" >>> + (every (lambda (element) >>> + (match element >>> + ((string ($ <goimapnotify-account>)) >>> + #t) >>> + (_ #f))) >>> + lst)) >> >> You can replace this with: >> --8<---------------cut here---------------start------------->8--- >> (define list-of-goimapnotify-accounts? >> (list-of goimapnotify-account?)) >> --8<---------------cut here---------------end--------------->8--- >=20 > Wouldn't that fail because it expects '(goimapnotify-account goimapnoti= fy-account[...])? Right, it should be something like: --8<---------------cut here---------------start------------->8--- (define list-of-goimapnotify-accounts? (list-of (match-lambda ((? string?) (? goimapnotify-account?))))) --8<---------------cut here---------------end--------------->8--- --=20 Furthermore, I consider that nonfree software must be eradicated. Cheers, Bruno. --------------01gKkOXvl3LzjnTe52lX0lnS-- --------------rc0y1AQv0xTLU6zsF5hhgLYz Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature.asc" -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQTAPCseV0HOaN0YFheobOGDL+spVQUCZWZPpwAKCRCobOGDL+sp VWzuAQDVlw9Bvl7PTOXbMPqHnpKJnI30bTUbL5Cbp8fvM0B/zwD+MtH9P8pv8Mz+ dz46ffftuIfAqhLqTFCzDaNuK8djvgE= =exvL -----END PGP SIGNATURE----- --------------rc0y1AQv0xTLU6zsF5hhgLYz--
guix-patches@HIDDEN
:bug#66557
; Package guix-patches
.
Full text available.Received: (at 66557) by debbugs.gnu.org; 26 Nov 2023 11:14:38 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sun Nov 26 06:14:38 2023 Received: from localhost ([127.0.0.1]:40785 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1r7D5y-0008GO-1B for submit <at> debbugs.gnu.org; Sun, 26 Nov 2023 06:14:38 -0500 Received: from mout-p-101.mailbox.org ([80.241.56.151]:37422) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <nils@HIDDEN>) id 1r7D5v-0008G8-7u for 66557 <at> debbugs.gnu.org; Sun, 26 Nov 2023 06:14:36 -0500 Received: from smtp1.mailbox.org (smtp1.mailbox.org [10.196.197.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-101.mailbox.org (Postfix) with ESMTPS id 4SdR1n5dsWz9sQr; Sun, 26 Nov 2023 12:14:21 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=landt.email; s=MBO0001; t=1700997261; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=XAn2LVxhRgX3Agq1Wm9pu+XR6yhVy1XLvMyQPH0ubjs=; b=U5LBIkwPFC4NC8tqehv+xvY2LewUaB82LMkZoCDVQbNdyU1LmC/iv0q+dtkl1bkGYZXd8B oVYhwudUx4smEbI8wzGSNU9+vFmh9SLc4hFW+8xJ77h2zfNA1vLkuIM+6nIdVj3HSVhKDI fwC1P3M8FfwXam3WZylRlZOidloobR6JdNcV14aJPPuEdFqcRec/5r6i1s+fs+1Q7PKxaX CvzUelUZvsSh9IlD8OyTm6GfbqNAs4iIs5HUfzHPuA1hO5cD2RFk0pSXQwbLWqmlFxgf7a hShYwff6LS3o+Y1DbtKiedton1quZbs3EhZ24nkVmGcnHb0Nf7gPWod2tz0ZRg== Date: Sun, 26 Nov 2023 12:14:20 +0100 (CET) From: Nils Landt <nils@HIDDEN> To: "66557 <at> debbugs.gnu.org" <66557 <at> debbugs.gnu.org> Message-ID: <1635724009.68147.1700997260830@HIDDEN> Subject: Re: [bug#66557] [PATCH] home: services: Add goimapnotify service. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Priority: 3 Importance: Normal X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 66557 Cc: "rekado@HIDDEN" <rekado@HIDDEN>, "mirai@HIDDEN" <mirai@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.7 (-) Hello, I have pushed a new version. Compared to the version you reviewed, I made the following changes: - docs: Stdin -> stdin - docs: use file-append for "pass" example - docs: re-add trailing whitespace - rework filter + map to use fold instead - update link to upstream config documentation from master to current commi= t - ignore first element in list-of-goimapnotify-accounts? - add question mark suffix to boolean fields (e.g. tls -> tls?) - fix "on-new-mail" option in docstring - remove parentheses around configuration field types Lastly, some comments on review requests I was unable to implement. Ricardo: > So I think it would be better to let these fields accept command lists. > FILE-APPEND should only join the package value with the file name of the > executable, but not include any arguments. I did not understand what this meant. Do you have any examples? I implement= ed your second suggestion of using file-append for pass instead. > Could this be (cons (goimapnotify-format-field field-name) value) > instead? I don=E2=80=99t think we need this wrapping and unwrapping with= G-exp > syntax. This results in e.g. ("boxes" . #("INBOX")) , leading to a syntax error in = the generated guile script. I'm open to suggestions here. Bruno: > This isn't needed, fields whose maybe-values are unset don't call the > serializing procedures. combined with > You can use 'serialize-configuration' instead which accounts for the unse= t maybe-values. I put some time into this, but I don't see how serialize-configuration, whi= ch returns a gexp including string-append, could be used to turn a configur= ation record into the format required by guile-json.
guix-patches@HIDDEN
:bug#66557
; Package guix-patches
.
Full text available.Received: (at 66557) by debbugs.gnu.org; 26 Nov 2023 10:32:14 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sun Nov 26 05:32:14 2023 Received: from localhost ([127.0.0.1]:40743 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1r7CQv-0006zx-5A for submit <at> debbugs.gnu.org; Sun, 26 Nov 2023 05:32:14 -0500 Received: from mout-p-101.mailbox.org ([2001:67c:2050:0:465::101]:36746) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <nils@HIDDEN>) id 1r7CQr-0006zc-Ns for 66557 <at> debbugs.gnu.org; Sun, 26 Nov 2023 05:32:11 -0500 Received: from smtp102.mailbox.org (smtp102.mailbox.org [10.196.197.102]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-101.mailbox.org (Postfix) with ESMTPS id 4SdQ4p20Y0z9snt; Sun, 26 Nov 2023 11:31:54 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=landt.email; s=MBO0001; t=1700994714; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=qvp3XXcVHfb3ZzxIT+1SwiBtG+XyfneT2jeYzQkOXmM=; b=FwJ0sYkysSHA9dNodhY+z75JPuAQaZHggKI+i5sUr4wydSu7J1aS4L452QkgTJyeF7DOTX MHs+gOH9XfNDeZOh1EpHn+w+XQS+T/2uM3rO1PBFe+PM4mRqmRa7iWBnJqqJ8VCzRChiZl dwOoohJV3pW1aTHGJphKVcH28kQh3l8HuN9nYAF7G1rk6yPktSjIdIobAgQb6RByACPLy0 vT/H0irsBz/A++dBw4PC55XVAA7GKnIoS2NlNytNsEAU/ZBIRVnk0ejcWNE1mpcp0BDtcl c8c6u2QcVxp/Pe9aCXNiqn8q0FDl/f36mx5PqubwrWfsLMBZ+xI8O5Jz1EsTNw== From: Nils Landt <nils@HIDDEN> To: 66557 <at> debbugs.gnu.org Subject: [PATCH] home: services: Add goimapnotify service. Date: Sun, 26 Nov 2023 11:31:03 +0100 Message-ID: <dd6cf27935471a6b96dc319fde798f97547f6fa2.1700994663.git.nils@HIDDEN> MIME-Version: 1.0 X-Debbugs-Cc: ( <paren@HIDDEN>, Andrew Tropin <andrew@HIDDEN>, Ludovic Courtès <ludo@HIDDEN> Content-Transfer-Encoding: 8bit X-MBO-RS-ID: 599fd8fb332b41b8c94 X-MBO-RS-META: 4sfnu4kc3i6y9nk47op3b9t5tjzpdnry X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 66557 Cc: Nils Landt <nils.landt@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.7 (-) From: Nils Landt <nils.landt@HIDDEN> * gnu/home/services/mail.scm: (home-goimapnotify-configuration, home-goimapnotify-service-type, goimapnotify-account, goimapnotify-tls-options): New variables. (goimapnotify-format-field, goimapnotify-serialize-field, goimapnotify-serialize-goimapnotify-tls-options): New procedures. * doc/guix.texi (Mail Home Services): New node. --- doc/guix.texi | 139 ++++++++++++++++++++++ gnu/home/services/mail.scm | 232 ++++++++++++++++++++++++++++++++++++- 2 files changed, 370 insertions(+), 1 deletion(-) diff --git a/doc/guix.texi b/doc/guix.texi index 1fd2e21608..aed15685e5 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -44996,6 +44996,145 @@ Mail Home Services The @code{(gnu home services mail)} module provides services that help you set up the tools to work with emails in your home environment. +@cindex goimapnotify +@uref{https://gitlab.com/shackra/goimapnotify, goimapnotify} watches your +mailbox(es) and executes a script on (new / deleted / updated) messages. + +Using @code{home-goimapnotify-configuration}, you can generate a config file +for each account you want to watch (file name relative to @code{$HOME}), e.g.: + +@lisp +(simple-service 'mail-imapnotify-config-examples + home-goimapnotify-service-type + (home-goimapnotify-configuration + (accounts (list + `(".config/goimapnotify/private-account.conf" + ,(goimapnotify-account + (host "imap.example.org") + (port 993) + (tls #t) + (username "example") + (password-cmd + (file-append password-store + "/bin/pass my-private-email-account") + (on-new-mail + (file-append mbsync "/bin/mbsync private-account")) + (on-new-mail-post + (file-append mu "/bin/mu index")) + (boxes '("INBOX")))) + `(".config/goimapnotify/work-account.conf" + ,(goimapnotify-account + (host "imap.work.example.org") + (port 993) + (tls #t) + (username "example") + (password "12345") + (on-new-mail + (file-append mbsync "/bin/mbsync work-account")) + (on-new-mail-post + "notify-send 'New mail'") + (boxes '("INBOX" + "On Call"))))))))) +@end lisp + +Note: to utilize the config files, you need to start a separate goimapnotify +process for each one. Continuing the example above: +@code{goimapnotify -conf "$HOME/.config/goimapnotify/private-account.conf"} and +@code{goimapnotify -conf "$HOME/.config/goimapnotify/work-account.conf"}. + +@c %start of fragment +@deftp {Data Type} home-goimapnotify-configuration +Available @code{home-goimapnotify-configuration} fields are: + +@table @asis +@item @code{accounts} (default: @code{()}) (type: list-of-goimapnotify-accounts) +List of accounts that goimapnotify should watch. For each account, a +separate configuration file will be generated. +@end table + +@end deftp +@c %end of fragment + +@c %start of fragment + +@deftp {Data Type} goimapnotify-account +Available @code{goimapnotify-account} fields are: + +@table @asis +@item @code{host} (type: maybe-string) +Address of the IMAP server to connect to. + +@item @code{host-cmd} (type: maybe-string-or-file-like) +An executable or script that retrieves your host from somewhere, we +cannot pass arguments to this command from stdin. + +@item @code{port} (type: maybe-integer) +Port of the IMAP server to connect to. + +@item @code{tls?} (type: maybe-boolean) + +Use TLS? + +@item @code{tls-options} (type: maybe-goimapnotify-tls-options) +Option(s) for the TLS connection. Currently, only one option is +supported. + +@item @code{username} (type: maybe-string) +Username for authentication. + +@item @code{username-cmd} (type: maybe-string-or-file-like) +An executable or script that retrieves your username from +somewhere, we cannot pass arguments to this command from stdin. + +@item @code{password} (type: maybe-string) +Password for authentication. + +@item @code{password-cmd} (type: + maybe-string-or-file-like) +An executable or script that retrieves your password from somewhere, we +cannot pass arguments to this command from stdin. + +@item @code{xoauth2?} +(type: maybe-boolean) +You can also use xoauth2 instead of password based authentication by +setting the xoauth2 option to true and the output of a tool which can +provide xoauth2 encoded tokens in passwordCmd. Examples: +@uref{https://github.com/google/oauth2l,Google oauth2l} or +@uref{https://github.com/harishkrupo/oauth2ms,xoauth2 fetcher for O36 +5}. + +@item @code{on-new-mail} (type: maybe-string-or-file-like) +An executable or script to run when new mail has arrived. + +@item @code{on-new-mail-post} (type: maybe-string-or-file-like) +An executable or script to run after onNewMail has ran. + +@item @code{wait} (type: maybe-integer) +The delay in seconds before the mail syncing is triggered. + +@item @code{boxes} (type: maybe-list-of-strings) +Mailboxes to watch. + +@end table + +@end deftp + +@c %end of fragment + +@c %start of fragment + +@deftp {Data Type} goimapnotify-tls-options +Available @code{goimapnotify-tls-options} fields are: + +@table @asis +@item @code{reject-unauthorized?} (type: maybe-boolean) +Skip verifying CA server identify? + +@end table + +@end deftp +@c %end of fragment + @cindex msmtp @uref{https://marlam.de/msmtp, MSMTP} is a @acronym{SMTP, Simple Mail Transfer Protocol} client. It sends mail to a predefined SMTP server diff --git a/gnu/home/services/mail.scm b/gnu/home/services/mail.scm index 5445c82c67..b86a787963 100644 --- a/gnu/home/services/mail.scm +++ b/gnu/home/services/mail.scm @@ -18,15 +18,44 @@ (define-module (gnu home services mail) #:use-module (guix gexp) + #:use-module (guix records) #:use-module (gnu services) #:use-module (gnu services configuration) #:use-module (gnu home services) #:use-module (gnu home services shepherd) + #:use-module (gnu home services utils) #:use-module (gnu packages mail) + #:use-module (gnu packages guile) + #:use-module (ice-9 match) #:use-module (ice-9 string-fun) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) - #:export (home-msmtp-configuration + #:export (home-goimapnotify-configuration + home-goimapnotify-configuration-fields + home-goimapnotify-configuration? + home-goimapnotify-configuration-accounts + home-goimapnotify-service-type + goimapnotify-account + goimapnotify-account-fields + goimapnotify-account-host + goimapnotify-account-host-cmd + goimapnotify-account-port + goimapnotify-account-tls + goimapnotify-account-tls-options + goimapnotify-account-username + goimapnotify-account-username-cmd + goimapnotify-account-password + goimapnotify-account-password-cmd + goimapnotify-account-xoauth2 + goimapnotify-account-on-new-mail + goimapnotify-account-on-new-mail-post + goimapnotify-account-wait + goimapnotify-account-boxes + goimapnotify-tls-options + goimapnotify-tls-options-fields + goimapnotify-tls-options-reject-unauthorized + + home-msmtp-configuration home-msmtp-configuration? home-msmtp-configuration-defaults home-msmtp-configuration-accounts @@ -220,3 +249,204 @@ (define home-msmtp-service-type (description "Configure msmtp, a simple @acronym{SMTP, Simple Mail Transfer Protocol} client that can relay email to SMTP servers."))) + +; Configuration for goimapnotify from (gnu packages mail) + +(define-maybe string) +(define-maybe integer) +(define-maybe boolean) +(define-maybe list-of-strings) +(define-maybe string-or-file-like) + +(define (string-or-file-like? value) + (or (string? value) + (file-like? value))) + +(define (goimapnotify-format-field field-name) + (object->camel-case-string + (string-trim-right + (object->string field-name) + #\?))) + +(define (goimapnotify-serialize-field field-name value) + "This is converted to JSON later, so we don't return a string here" + #~(#$(goimapnotify-format-field field-name) . #$value)) + +(define (goimapnotify-serialize-string-or-file-like field-name value) + (goimapnotify-serialize-string field-name value)) + +(define (goimapnotify-maybe-serialize field-name value serialization-function) + (if (maybe-value-set? value) + (serialization-function field-name value) + "")) + +(define (goimapnotify-serialize-maybe-string-or-file-like field-name value) + (goimapnotify-maybe-serialize field-name value + goimapnotify-serialize-string-or-file-like)) + +(define goimapnotify-serialize-string goimapnotify-serialize-field) +(define (goimapnotify-serialize-maybe-string field-name value) + (goimapnotify-maybe-serialize field-name value goimapnotify-serialize-string)) + +(define (goimapnotify-serialize-maybe-integer field-name value) + (goimapnotify-maybe-serialize field-name value goimapnotify-serialize-integer)) +(define goimapnotify-serialize-integer goimapnotify-serialize-field) + +(define (goimapnotify-serialize-maybe-boolean field-name value) + (goimapnotify-maybe-serialize field-name value goimapnotify-serialize-boolean)) +(define goimapnotify-serialize-boolean goimapnotify-serialize-field) + +(define (goimapnotify-serialize-maybe-list-of-strings field-name value) + (goimapnotify-maybe-serialize field-name value goimapnotify-serialize-list-of-strings)) +(define (goimapnotify-serialize-list-of-strings field-name value) + (goimapnotify-serialize-field field-name (list->array 1 value))) + +(define (goimapnotify-serialize-maybe-goimapnotify-tls-options field-name config) + (goimapnotify-maybe-serialize field-name config + goimapnotify-serialize-goimapnotify-tls-options)) + +(define (goimapnotify-serialize-goimapnotify-tls-options field-name config) + (goimapnotify-serialize-field + field-name + (prepare-configuration-for-json config goimapnotify-tls-options-fields))) + +(define (prepare-configuration-for-json config fields) + "Convert the configuration to the format expected by guile-json. + Unset maybe-values do not appear in the configuration file." + (fold + (lambda (field accu) + (let ((value ((configuration-field-getter field) config))) + (append accu + (if (maybe-value-set? value) + (list ((configuration-field-serializer field) + (configuration-field-name field) + value)) + '())))) + '() + fields)) + +(define-configuration goimapnotify-tls-options + (reject-unauthorized? + maybe-boolean + "Skip verifying CA server identify?") + (prefix goimapnotify-)) + +(define-maybe goimapnotify-tls-options) + +; See https://gitlab.com/shackra/goimapnotify/-/blob/423f0e65350f7e042edbd2c373f252c5a0d31dc2/config.go#L46-62 +(define-configuration goimapnotify-account + (host + maybe-string + "Address of the IMAP server to connect to.") + (host-cmd + maybe-string-or-file-like + "An executable or script that retrieves your host from somewhere, + we cannot pass arguments to this command from stdin.") + (port + maybe-integer + "Port of the IMAP server to connect to.") + (tls? + maybe-boolean + "Use TLS?") + (tls-options + maybe-goimapnotify-tls-options + "Option(s) for the TLS connection. Currently, only one option is + supported.") + (username + maybe-string + "Username for authentication.") + (username-cmd + maybe-string-or-file-like + "An executable or script that retrieves your username from + somewhere, we cannot pass arguments to this command from stdin.") + (password + maybe-string + "Password for authentication.") + (password-cmd + maybe-string-or-file-like + "An executable or script that retrieves your password from + somewhere, we cannot pass arguments to this command from stdin.") + (xoauth2? + maybe-boolean + "You can also use xoauth2 instead of password based authentication + by setting the xoauth2 option to true and the output of a tool + which can provide xoauth2 encoded tokens in passwordCmd. + Examples: @url{https://github.com/google/oauth2l, Google oauth2l} + or + @url{https://github.com/harishkrupo/oauth2ms, xoauth2 fetcher for O365}.") + (on-new-mail + maybe-string-or-file-like + "An executable or script to run when new mail has arrived.") + (on-new-mail-post + maybe-string-or-file-like + "An executable or script to run after on-new-mail has ran.") + (wait + maybe-integer + "The delay in seconds before the mail syncing is triggered.") + (boxes + maybe-list-of-strings + "Mailboxes to watch.") + (prefix goimapnotify-)) + +(define (list-of-goimapnotify-accounts? lst) + "List is in the form of '((file-name file-like))" + (every (compose goimapnotify-account? second) lst)) + +(define-configuration/no-serialization home-goimapnotify-configuration + (accounts + (list-of-goimapnotify-accounts '()) + "List of accounts that goimapnotify should watch. + For each account, a separate configuration file + will be generated.")) + +(define (home-goimapnotify-extension old-config extensions) + (match-record old-config <home-goimapnotify-configuration> + (accounts) + (home-goimapnotify-configuration + (inherit old-config) + (accounts (append accounts + (append-map + home-goimapnotify-configuration-accounts + extensions)))))) + +(define (goimapnotify-files config) + (define* (account->json account-config-and-path) + (match + account-config-and-path + ((path account-config) + (let ((prepared-config + (prepare-configuration-for-json + account-config + goimapnotify-account-fields))) + `((,path + ,(computed-file + (string-append + "mail-imapnotify-config-" + (goimapnotify-account-host account-config)) + (with-extensions (list guile-json-4) + #~(begin + (use-modules (json builder)) + + (with-output-to-file #$output + (lambda () + (scm->json '(#$@prepared-config) + #:pretty #t)))))))))))) + + (match-record config <home-goimapnotify-configuration> + (accounts) + (append-map + (cut account->json <>) + accounts))) + +(define home-goimapnotify-service-type + (service-type + (name 'home-goimapnotify-service) + (extensions + (list (service-extension + home-files-service-type + goimapnotify-files))) + (compose identity) + (extend home-goimapnotify-extension) + (default-value (home-goimapnotify-configuration)) + (description "Configure goimapnotify to execute scripts on IMAP + mailbox changes."))) base-commit: 513bf164592e2b44e3e556cc5099a19bd6977790 -- 2.41.0
, guix-patches@HIDDEN
:bug#66557
; Package guix-patches
.
Full text available.Received: (at 66557) by debbugs.gnu.org; 21 Nov 2023 15:30:32 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Tue Nov 21 10:30:32 2023 Received: from localhost ([127.0.0.1]:57252 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1r5Shr-00061g-V0 for submit <at> debbugs.gnu.org; Tue, 21 Nov 2023 10:30:32 -0500 Received: from mout-p-103.mailbox.org ([80.241.56.161]:56158) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <nils@HIDDEN>) id 1r5Shp-00061M-Pa for 66557 <at> debbugs.gnu.org; Tue, 21 Nov 2023 10:30:30 -0500 Received: from smtp2.mailbox.org (smtp2.mailbox.org [IPv6:2001:67c:2050:b231:465::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-103.mailbox.org (Postfix) with ESMTPS id 4SZSxR24XMz9svD; Tue, 21 Nov 2023 16:30:19 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=landt.email; s=MBO0001; t=1700580619; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Lj/X5hJmuzBgokY6V8FgRNO+E4WGrsUANe9IFM0I9GI=; b=k3OxCA5q4C78U2ykf+rVyM7nqEov1/XkA5d+HogjzCAMynPXoYCiMTbkmiWSr5Bvlc45Tq OB5nT5ujCLD2uKGpIk76pznAObuI+fAuTJbp1GCZ90jnpFUQRHwNOaTVkFj0uY42a4IIDS D1o/DhWG7wd1KJ8oSmQvAR1PC7rfZCSiDJooBpvPcTz0QbgoiXDeLF3s9Z25zEfOsQgmq7 MGRn8x57wnGlT1tyZvJjvY7EW8appb2//vUKMqA8zuztLk+jNpUHVXKPvOuhUJLnMbsYiD Jt7W6CNAuzx7+9ykReT7w2S3icK99y6ZH53THGwNACfh+sdTGc9InVObmrVxmw== Date: Tue, 21 Nov 2023 16:30:18 +0100 (CET) From: Nils Landt <nils@HIDDEN> To: "rekado@HIDDEN" <rekado@HIDDEN> Message-ID: <1205571599.400022.1700580618727@HIDDEN> Subject: Re: [bug#66557] [PATCH] home: services: Add goimapnotify service. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Priority: 3 Importance: Normal X-Rspamd-Queue-Id: 4SZSxR24XMz9svD X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 66557 Cc: "66557 <at> debbugs.gnu.org" <66557 <at> debbugs.gnu.org> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.7 (-) Thank you for your feedback Ricardo. I did not ignore you, but I did not receive a notification email, so I didn't see your message until I received a notification for Brunos reply and checked the website. I'll (try to) incorporate your feedback as well.
guix-patches@HIDDEN
:bug#66557
; Package guix-patches
.
Full text available.Received: (at 66557) by debbugs.gnu.org; 21 Nov 2023 15:25:35 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Tue Nov 21 10:25:35 2023 Received: from localhost ([127.0.0.1]:57240 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1r5Sd4-0005qX-P0 for submit <at> debbugs.gnu.org; Tue, 21 Nov 2023 10:25:35 -0500 Received: from mout-p-202.mailbox.org ([2001:67c:2050:0:465::202]:39464) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <nils@HIDDEN>) id 1r5Sd2-0005qF-P0 for 66557 <at> debbugs.gnu.org; Tue, 21 Nov 2023 10:25:34 -0500 Received: from smtp2.mailbox.org (smtp2.mailbox.org [IPv6:2001:67c:2050:b231:465::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-202.mailbox.org (Postfix) with ESMTPS id 4SZSqj4wtNz9t2C; Tue, 21 Nov 2023 16:25:21 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=landt.email; s=MBO0001; t=1700580321; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=10DNSqGfqfhZ/xNo8KQ15ThMgRfLIYsnTOdeEpoknvY=; b=Ur46iqQYiiABPZpXZi2UP8g8L6xkpPi7a7n0ZCTo7wVOCNOcK/qJ5MnB2IU6J71itEdTeH WENugjMUX96eMyNXtpnUYHy6797adZhiVSJlRhU8XHDhzzrbKnGyvQgir7iJdmOHtBTs3G qUK6zshlvpv6oZVqcnUjRIFsMxl2YAkRB+tIu3HyshoEClQuhrxTDO13bdVrrXLjMOxrkl bafLSHme6X7updy9ZhvD68qi8347eEBV5QUFdOCs99QQp5Iq9UA29qXlyE1H/xbqdz8fUj 9nBWWgHYGOekBsf5RHw0hYxREuZ8v1KZagT8Z0RQBakCxH16tj84Oer/Qg9ESA== Date: Tue, 21 Nov 2023 16:25:21 +0100 (CET) From: Nils Landt <nils@HIDDEN> To: Bruno Victal <mirai@HIDDEN> Message-ID: <656336790.399020.1700580321203@HIDDEN> In-Reply-To: <d279a547-7f5c-4244-8f78-ad0fb98cbe2c@HIDDEN> References: <c9d8798670448a18779e3c24b9b8a88902942936.1697378478.git.nils@HIDDEN> <d279a547-7f5c-4244-8f78-ad0fb98cbe2c@HIDDEN> Subject: Re: [bug#66557] [PATCH] home: services: Add goimapnotify service. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Priority: 3 Importance: Normal X-Rspamd-Queue-Id: 4SZSqj4wtNz9t2C X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 66557 Cc: 66557 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.7 (-) Thank you for the feedback, I'll work on implementing it, hopefully on the = weekend.=20 I've already added a few comments / questions below though. > Bruno Victal <mirai@HIDDEN> hat am 20.11.2023 18:16 CET ls, >=20 > On 2023-10-15 15:01, Nils Landt wrote: > > This patch adds a home service for generating goimapnotify JSON > > configuration files. >=20 > [=E2=80=A6] >=20 > Not a goimapnotify user but this looks like a daemon application. > I don't like this design much, I think goimapnotify should be launched an= d managed > using shepherd instead of simply exposing these files to the user. These options can not be given as command line options, they need to be in = a config file. Personally I don't use shepherd, so I won't be contributing shepherd servic= es :) > > +@item @code{username-cmd} (type: maybe-string-or-file-like) > > +An executable or script that retrieves your username from > > +somewhere, we cannot pass arguments to this command from Stdin. >=20 > I'd prefer to write it as =E2=80=9Cstdin=E2=80=9D (lowercase) or expand i= t to =E2=80=9Cstandard input=E2=80=9D. I think this a good change, and I'm completely fine making it. I just want = to mention that I copied these docstrings directly from the project's readm= e. But I see no reason why the author would capitalize it. > > +(define (list-of-goimapnotify-accounts? lst) > > + "List is in the form of '((file-name file-like))" > > + (every (lambda (element) > > + (match element > > + ((string ($ <goimapnotify-account>)) > > + #t) > > + (_ #f))) > > + lst)) >=20 > You can replace this with: > --8<---------------cut here---------------start------------->8--- > (define list-of-goimapnotify-accounts? > (list-of goimapnotify-account?)) > --8<---------------cut here---------------end--------------->8--- Wouldn't that fail because it expects '(goimapnotify-account goimapnotify-a= ccount[...])? > This looks misindented, the .dir-locals file automatically handles > this if you are using emacs. I'm using vim. The code is indented with autoindent, as mentioned on https:= //guix.gnu.org/manual/devel/en/html_node/Vim-and-NeoVim.html . If this does= n't match the expected indentation as implemented in Emacs, I'd be grateful= if you could indent this file before merging.
guix-patches@HIDDEN
:bug#66557
; Package guix-patches
.
Full text available.Received: (at 66557) by debbugs.gnu.org; 20 Nov 2023 17:16:39 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Mon Nov 20 12:16:38 2023 Received: from localhost ([127.0.0.1]:54360 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1r57t0-00005m-1Q for submit <at> debbugs.gnu.org; Mon, 20 Nov 2023 12:16:38 -0500 Received: from smtpm3.myservices.hosting ([185.26.105.234]:59420) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <mirai@HIDDEN>) id 1r57sx-00005Q-EX for 66557 <at> debbugs.gnu.org; Mon, 20 Nov 2023 12:16:36 -0500 Received: from mail1.netim.hosting (unknown [185.26.106.173]) by smtpm3.myservices.hosting (Postfix) with ESMTP id CB79C20FA7; Mon, 20 Nov 2023 18:16:30 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by mail1.netim.hosting (Postfix) with ESMTP id 443CF80092; Mon, 20 Nov 2023 18:16:27 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at mail1.netim.hosting Received: from mail1.netim.hosting ([127.0.0.1]) by localhost (mail1-2.netim.hosting [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id C8dHNtBGiehZ; Mon, 20 Nov 2023 18:16:26 +0100 (CET) Received: from [192.168.1.116] (unknown [10.192.1.83]) (Authenticated sender: lumen@HIDDEN) by mail1.netim.hosting (Postfix) with ESMTPSA id 5BF6780079; Mon, 20 Nov 2023 18:16:26 +0100 (CET) Message-ID: <d279a547-7f5c-4244-8f78-ad0fb98cbe2c@HIDDEN> Date: Mon, 20 Nov 2023 17:16:25 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Bruno Victal <mirai@HIDDEN> Subject: Re: [bug#66557] [PATCH] home: services: Add goimapnotify service. To: Nils Landt <nils@HIDDEN> References: <c9d8798670448a18779e3c24b9b8a88902942936.1697378478.git.nils@HIDDEN> Content-Language: en-US In-Reply-To: <c9d8798670448a18779e3c24b9b8a88902942936.1697378478.git.nils@HIDDEN> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------ktqh07dFjGbp4K27zTEBzkDk" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 66557 Cc: 66557 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------ktqh07dFjGbp4K27zTEBzkDk Content-Type: multipart/mixed; boundary="------------1nSCjVH3KzEBNhKYYg95Fy7I"; protected-headers="v1" From: Bruno Victal <mirai@HIDDEN> To: Nils Landt <nils@HIDDEN> Cc: 66557 <at> debbugs.gnu.org Message-ID: <d279a547-7f5c-4244-8f78-ad0fb98cbe2c@HIDDEN> Subject: Re: [bug#66557] [PATCH] home: services: Add goimapnotify service. References: <c9d8798670448a18779e3c24b9b8a88902942936.1697378478.git.nils@HIDDEN> In-Reply-To: <c9d8798670448a18779e3c24b9b8a88902942936.1697378478.git.nils@HIDDEN> --------------1nSCjVH3KzEBNhKYYg95Fy7I Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Nils, On 2023-10-15 15:01, Nils Landt wrote: > This patch adds a home service for generating goimapnotify JSON > configuration files. [=E2=80=A6] > +@lisp > +(simple-service 'mail-imapnotify-config-examples > + home-goimapnotify-service-type > + (home-goimapnotify-configuration > + (accounts (list > + `(".config/goimapnotify/private-account.= conf" > + ,(goimapnotify-account > + (host "imap.example.org") > + (port 993) > + (tls #t) > + (username "example") > + (password-cmd "pass my-private-ema= il-account") > + (on-new-mail > + (file-append mbsync "/bin/mbsync= private-account")) > + (on-new-mail-post > + (file-append mu "/bin/mu index")= ) > + (boxes '("INBOX")))) > + `(".config/goimapnotify/work-account.con= f" > + ,(goimapnotify-account > + (host "imap.work.example.org") > + (port 993) > + (tls #t) > + (username "example") > + (password "12345") > + (on-new-mail > + (file-append mbsync "/bin/mbsync= work-account")) > + (on-new-mail-post > + "notify-send 'New mail'") > + (boxes '("INBOX" > + "On Call"))))))))) > +@end lisp > + > +Note: to utilize the config files, you need to start a separate goimap= notify > +process for each one. Continuing the example above: > +@code{goimapnotify -conf "$HOME/.config/goimapnotify/private-account.c= onf"} and > +@code{goimapnotify -conf "$HOME/.config/goimapnotify/work-account.conf= "}. Not a goimapnotify user but this looks like a daemon application. I don't like this design much, I think goimapnotify should be launched an= d managed using shepherd instead of simply exposing these files to the user. > +@item @code{tls} (type: maybe-boolean) > + > +Use TLS? Boolean fields are generally suffixed with '?'. (e.g. tls?) > +@item @code{tls-options} (type: maybe-goimapnotify-tls-options) > +Option(s) for the TLS connection. Currently, only one option is > +supported. > + > +@item @code{username} (type: maybe-string) > +Username for authentication. > + > +@item @code{username-cmd} (type: maybe-string-or-file-like) > +An executable or script that retrieves your username from > +somewhere, we cannot pass arguments to this command from Stdin. I'd prefer to write it as =E2=80=9Cstdin=E2=80=9D (lowercase) or expand i= t to =E2=80=9Cstandard input=E2=80=9D. > +@item @code{xoauth2} > +(type: maybe-boolean) > +You can also use xoauth2 instead of password based authentication by > +setting the xoauth2 option to true and the output of a tool which can > +provide xoauth2 encoded tokens in passwordCmd. Examples: > +@uref{https://github.com/google/oauth2l,Google oauth2l} or > +@uref{https://github.com/harishkrupo/oauth2ms,xoauth2 fetcher for O36 > +5}. Same remark as 'tls' option. > +@item @code{on-new-mail} (type: maybe-string-or-file-like) > +An executable or script to run when new mail has arrived. > + > +@item @code{on-new-mail-post} (type: maybe-string-or-file-like) > +An executable or script to run after onNewMail has ran. =E2=80=9CAn executable or script to run after @code{on-new-mail} has ran.= =E2=80=9D > +@table @asis > +@item @code{reject-unauthorized} (type: maybe-boolean) > +Skip verifying CA server identify? Same remark as 'tls' option. > @cindex msmtp > @uref{https://marlam.de/msmtp, MSMTP} is a @acronym{SMTP, Simple Mail > Transfer Protocol} client. It sends mail to a predefined SMTP server > that takes care of proper delivery. > - > + > The service reference is given below. > - > + > @defvar home-msmtp-service-type > This is the service type for @command{msmtp}. Its value must be a > @code{home-msmtp-configuration}, as shown below. It provides the > @file{~/.config/msmtp/config} file. > - > + > As an example, here is how you would configure @code{msmtp} for a sing= le > account: > - > + > @lisp > (service home-msmtp-service-type > (home-msmtp-configuration > @@ -44739,101 +44876,101 @@ Mail Home Services > @end defvar >=20 > @c %start of fragment > - > + > @deftp {Data Type} home-msmtp-configuration > Available @code{home-msmtp-configuration} fields are: > - > + > @table @asis > @item @code{defaults} (type: msmtp-configuration) > The configuration that will be set as default for all accounts. > - > + > @item @code{accounts} (default: @code{'()}) (type: list-of-msmtp-accou= nts) > A list of @code{msmtp-account} records which contain information about= > all your accounts. > - > + > @item @code{default-account} (type: maybe-string) > Set the default account. > - > + > @item @code{extra-content} (default: @code{""}) (type: string) > Extra content appended as-is to the configuration file. Run > @command{man msmtp} for more information about the configuration file > format. > - > + > @end table > - > + > @end deftp > - > + > @c %end of fragment > - > + > @c %start of fragment > - > + > @deftp {Data Type} msmtp-account > Available @code{msmtp-account} fields are: > - > + > @table @asis > @item @code{name} (type: string) > The unique name of the account. > - > + > @item @code{configuration} (type: msmtp-configuration) > The configuration for this given account. > - > + > @end table > - > + > @end deftp > - > + > @c %end of fragment >=20 > @c %start of fragment > - > + > @deftp {Data Type} msmtp-configuration > Available @code{msmtp-configuration} fields are: > - > + > @table @asis > @item @code{auth?} (type: maybe-boolean) > Enable or disable authentication. > - > + > @item @code{tls?} (type: maybe-boolean) > Enable or disable TLS (also known as SSL) for secured connections. > - > + > @item @code{tls-starttls?} (type: maybe-boolean) > Choose the TLS variant: start TLS from within the session (=E2=80=98on= =E2=80=99, > default), or tunnel the session through TLS (=E2=80=98off=E2=80=99). > - > + > @item @code{tls-trust-file} (type: maybe-string) > Activate server certificate verification using a list of trusted > Certification Authorities (CAs). > - > + > @item @code{log-file} (type: maybe-string) > Enable logging to the specified file. An empty argument disables > logging. The file name =E2=80=98-=E2=80=99 directs the log informatio= n to standard > output. > - > + > @item @code{host} (type: maybe-string) > The SMTP server to send the mail to. > - > + > @item @code{port} (type: maybe-integer) > The port that the SMTP server listens on. The default is 25 ("smtp"),= > unless TLS without STARTTLS is used, in which case it is 465 ("smtps")= =2E > - > + > @item @code{user} (type: maybe-string) > Set the user name for authentication. > - > + > @item @code{from} (type: maybe-string) > Set the envelope-from address. > - > + > @item @code{password-eval} (type: maybe-string) > Set the password for authentication to the output (stdout) of the > command cmd. > - > + > @item @code{extra-content} (default: @code{""}) (type: string) > Extra content appended as-is to the configuration block. Run > @command{man msmtp} for more information about the configuration file > format. > - > + > @end table > - > + > @end deftp > - > + > @c %end of fragment These are unrelated changes, can you drop these hunks? > +(define (goimapnotify-maybe-serialize field-name value serialization-f= unction) > + (if (maybe-value-set? value) > + (serialization-function field-name value) > + "")) > + > +(define (goimapnotify-serialize-maybe-string-or-file-like field-name v= alue) > + (goimapnotify-maybe-serialize field-name value > + goimapnotify-serialize-string-or-file-l= ike)) > + > +(define goimapnotify-serialize-string goimapnotify-serialize-field) > +(define (goimapnotify-serialize-maybe-string field-name value) > + (goimapnotify-maybe-serialize field-name value goimapnotify-serialize= -string)) > + > +(define (goimapnotify-serialize-maybe-integer field-name value) > + (goimapnotify-maybe-serialize field-name value goimapnotify-serialize= -integer)) > +(define goimapnotify-serialize-integer goimapnotify-serialize-field) > + > +(define (goimapnotify-serialize-maybe-boolean field-name value) > + (goimapnotify-maybe-serialize field-name value goimapnotify-serializ= e-boolean)) > +(define goimapnotify-serialize-boolean goimapnotify-serialize-field) > + > +(define (goimapnotify-serialize-maybe-list-of-strings field-name value= ) > + (goimapnotify-maybe-serialize field-name value goimapnotify-serializ= e-list-of-strings)) > +(define (goimapnotify-serialize-list-of-strings field-name value) > + (goimapnotify-serialize-field field-name (list->array 1 value))) > + > +(define (goimapnotify-serialize-maybe-goimapnotify-tls-options field-n= ame config) > + (goimapnotify-maybe-serialize field-name config > + goimapnotify-serialize-goimapnotify-tl= s-options)) This isn't needed, fields whose maybe-values are unset don't call the serializing procedures. > +(define (goimapnotify-serialize-goimapnotify-tls-options field-name co= nfig) > + (goimapnotify-serialize-field > + field-name > + (prepare-configuration-for-json config goimapnotify-tls-options-fi= elds))) > + > +(define (prepare-configuration-for-json config fields) > + "Convert the configuration to the format expected by guile-json. > + Unset maybe-values do not appear in the configuration file." > + (filter > + (lambda (val) > + (not (unspecified? val))) > + (map > + (lambda (field) > + (let ((value ((configuration-field-getter field) config))) > + (if (maybe-value-set? value) > + ((configuration-field-serializer field) > + (configuration-field-name field) > + value) > + *unspecified*))) > + fields))) You can use 'serialize-configuration' instead which accounts for the unse= t maybe-values. > + > +(define-configuration goimapnotify-tls-options > + (reject-unauthorized > + (maybe-boolean) > + "Skip verifying CA server identify?") > + (prefix goimapnotify-)) > + > +(define-maybe goimapnotify-tls-options) > + > +; See https://gitlab.com/shackra/goimapnotify/-/blob/master/config.go?= ref_type=3Dheads#L46-62 > +(define-configuration goimapnotify-account > + (host > + (maybe-string) > + "Address of the IMAP server to connect to.") > + (host-cmd > + (maybe-string-or-file-like) > + "An executable or script that retrieves your h= ost from somewhere, > + we cannot pass arguments to this command from = Stdin.") > + (port > + (maybe-integer) > + "Port of the IMAP server to connect to.") > + (tls > + (maybe-boolean) > + "Use TLS?") > + (tls-options > + (maybe-goimapnotify-tls-options) > + "Option(s) for the TLS connection. Currently, = only one option is > + supported.") > + (username > + (maybe-string) > + "Username for authentication.") > + (username-cmd > + (maybe-string-or-file-like) > + "An executable or script that retrieves your u= sername from > + somewhere, we cannot pass arguments to this co= mmand from Stdin.") > + (password > + (maybe-string) > + "Password for authentication.") > + (password-cmd > + (maybe-string-or-file-like) > + "An executable or script that retrieves your p= assword from > + somewhere, we cannot pass arguments to this co= mmand from Stdin.") > + (xoauth2 > + (maybe-boolean) > + "You can also use xoauth2 instead of password = based authentication > + by setting the xoauth2 option to true and the = output of a tool > + which can provide xoauth2 encoded tokens in pa= sswordCmd. > + Examples: @url{https://github.com/google/oauth= 2l, Google oauth2l} > + or > + @url{https://github.com/harishkrupo/oauth2ms, = xoauth2 fetcher for O365}.") > + (on-new-mail > + (maybe-string-or-file-like) > + "An executable or script to run when new mail = has arrived.") > + (on-new-mail-post > + (maybe-string-or-file-like) > + "An executable or script to run after onNewMai= l has ran.") > + (wait > + (maybe-integer) > + "The delay in seconds before the mail syncing = is triggered.") > + (boxes > + (maybe-list-of-strings) > + "Mailboxes to watch.") > + (prefix goimapnotify-)) You can omit the parentheses around the field-type. > +(define (list-of-goimapnotify-accounts? lst) > + "List is in the form of '((file-name file-like))" > + (every (lambda (element) > + (match element > + ((string ($ <goimapnotify-account>)) > + #t) > + (_ #f))) > + lst)) You can replace this with: --8<---------------cut here---------------start------------->8--- (define list-of-goimapnotify-accounts? (list-of goimapnotify-account?)) --8<---------------cut here---------------end--------------->8--- > +(define-configuration/no-serialization home-goimapnotify-configuration= > + (accounts > + (list-of-goimapnotify-account= s '()) > + "List of accounts that goimap= notify should watch. > + For each account, a separate = configuration file > + will be generated.")) > + > +(define (home-goimapnotify-extension old-config extensions) > + (match-record old-config <home-goimapnotify-configuration> > + (accounts) > + (home-goimapnotify-configuration > + (inherit old-config) > + (accounts (append accounts > + (append-map > + home-goimapnotify-configuration-= accounts > + extensions)))))) This looks misindented, the .dir-locals file automatically handles this if you are using emacs. > + > +(define home-goimapnotify-service-type > + (service-type (name 'home-goimapnotify-service) > + (extensions > + (list (service-extension > + home-files-service-type > + goimapnotify-files))) > + (compose identity) > + (extend home-goimapnotify-extension) > + (default-value (home-goimapnotify-configuration)) > + (description "Configure goimapnotify to execute script= s on IMAP > + mailbox changes."))) Stylistically, I'd indent this as: --8<---------------cut here---------------start------------->8--- (define home-goimapnotify-service-type (service-type (name 'home-goimapnotify-service) (extensions =E2=80=A6 --8<---------------cut here---------------end--------------->8--- My 2=C2=A2! --=20 Furthermore, I consider that nonfree software must be eradicated. Cheers, Bruno. --------------1nSCjVH3KzEBNhKYYg95Fy7I-- --------------ktqh07dFjGbp4K27zTEBzkDk Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature.asc" -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQTAPCseV0HOaN0YFheobOGDL+spVQUCZVuUaQAKCRCobOGDL+sp VWwCAQD6kYQ+nXCnGPvvjLKWDmroNSYXo7bG15CuPkqIgBvs4wEAjIg+HbbC8utF Kce+ACMm6sPsUJuv+T10WJ6LF5PZpgM= =Xd5Z -----END PGP SIGNATURE----- --------------ktqh07dFjGbp4K27zTEBzkDk--
guix-patches@HIDDEN
:bug#66557
; Package guix-patches
.
Full text available.Received: (at 66557) by debbugs.gnu.org; 2 Nov 2023 09:59:50 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Nov 02 05:59:50 2023 Received: from localhost ([127.0.0.1]:53958 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1qyUUQ-0000bI-7p for submit <at> debbugs.gnu.org; Thu, 02 Nov 2023 05:59:50 -0400 Received: from sender3-of-o57.zoho.com ([136.143.184.57]:21756) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <rekado@HIDDEN>) id 1qyUUM-0000b6-Bm for 66557 <at> debbugs.gnu.org; Thu, 02 Nov 2023 05:59:49 -0400 ARC-Seal: i=1; a=rsa-sha256; t=1698919148; cv=none; d=zohomail.com; s=zohoarc; b=LztJ6BJW7uhw1ara1Zj+KV8dEH+Du0WtQ3zMvoGnHEAeQpYThLADFgn3IY0sehOt/K7hbM7Mx9HL4VWQp6KNI3ShWw2SCcQfSZvBNyCzWzrqA/hBPx7LgIpBdtojWKbWwNfC8qHUh9qUtCy8e3YC/6A4DMsiHvYpDT6p9hsKf18= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1698919148; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=am884MdGVInPKPe/eCrgs2XyfQmOe2c1fOvbiNuR+ac=; b=BaGe3pRoNfHwno99Iu1doU5QK7+5Iq90RvERS/7uZr3pT1RWjNwtiZDb5BypQsoVSSuG2ExFeZtdEX+QEh1Kfy1TIjC0JZGdIkJLPCVgbTTD9t4TorrdreSpfXobXefjhQJgO1+QWFR/loI80hsckA56m+WLTukNRw0G/7MSA8s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=elephly.net; spf=pass smtp.mailfrom=rekado@HIDDEN; dmarc=pass header.from=<rekado@HIDDEN> DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1698919148; s=zoho; d=elephly.net; i=rekado@HIDDEN; h=From:From:To:To:Subject:Subject:Date:Date:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To:Cc; bh=am884MdGVInPKPe/eCrgs2XyfQmOe2c1fOvbiNuR+ac=; b=Llo0p1yTBjBI5kS503LT+G9ocoYk/zxzPWIXn4aIrK86LfdFRXzZgUMfmxXYulfP 1sN+HTDxaaecGPQDwwWvoYGMak+nhKxrUPOtdwis9F6pB0orYhAPtjPJMmcQvoHWm4o EiLAAHOpG8W0P/h8HBcw8ccH891wXGXzesMqWVHc= Received: from localhost (215-110-142-46.pool.kielnet.net [46.142.110.215]) by mx.zohomail.com with SMTPS id 1698919145488104.9143966336178; Thu, 2 Nov 2023 02:59:05 -0700 (PDT) User-agent: mu4e 1.10.7; emacs 29.1 From: Ricardo Wurmus <rekado@HIDDEN> To: 66557 <at> debbugs.gnu.org Subject: [PATCH] home: services: Add goimapnotify service. Date: Thu, 02 Nov 2023 09:55:15 +0100 Message-ID: <87h6m4tr15.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-ZohoMailClient: External X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 66557 X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) Hi Nils, thank you for this service! I had been looking for a goimapnotify service just a few days ago, so this will definitely come in handy. I don=E2=80=99t have the time for a comprehensive review, but I=E2=80=99ll = comment on a few things that stuck out to me. > + (password-cmd "pass my-private-email= -account") > + (on-new-mail > + (file-append mbsync "/bin/mbsync p= rivate-account")) It seems wrong to me to compose a command as a single string. Usually we separate the executable from the arguments. People who want to run the command in a shell can still do that by using =E2=80=9C/bin/sh=E2=80=9D= =E2=80=9C-c=E2=80=9D =E2=80=9Ccommand string=E2=80=9D. So I think it would be better to let these fields accept command lists. FILE-APPEND should only join the package value with the file name of the executable, but not include any arguments. I suppose these values end up in the generated configuration file as plain strings anyway, so perhaps it doesn=E2=80=99t matter much. In that c= ase please also use FILE-APPEND to embed a reference to PASS. > +(define (goimapnotify-serialize-field field-name value) > + "This is converted to JSON later, so we don't return a string here" > + #~(#$(goimapnotify-format-field field-name) . #$value)) Could this be (cons (goimapnotify-format-field field-name) value) instead? I don=E2=80=99t think we need this wrapping and unwrapping with G= -exp syntax. > +(define (prepare-configuration-for-json config fields) > + "Convert the configuration to the format expected by guile-json. > + Unset maybe-values do not appear in the configuration file." > + (filter > + (lambda (val) > + (not (unspecified? val))) > + (map > + (lambda (field) > + (let ((value ((configuration-field-getter field) config))) > + (if (maybe-value-set? value) > + ((configuration-field-serializer field) > + (configuration-field-name field) > + value) > + *unspecified*))) > + fields))) This looks a little too convoluted to me. It=E2=80=99s the IF with the *UNSPECIFIED* as the second branch (followed by the filter) that doesn=E2= =80=99t strike me as nice. Perhaps you simplify this with a fold? In any case, the filter predicate could be (negate unspecified?) instead of the lambda expression. > ; See https://gitlab.com/shackra/goimapnotify/-/blob/master/config.go?ref= _type=3Dheads#L46-62 Please don=E2=80=99t use =E2=80=9Cmaster=E2=80=9D here, because it=E2=80=99= s a moving target, so the line anchors will become out of date. Please use an arbitrary recent commit instead. Since this is a line comment please use =E2=80=9C;;=E2=80= =9D instead of =E2=80=9C;=E2=80=9D (which is used for comments in the margin). > +(define (list-of-goimapnotify-accounts? lst) > + "List is in the form of '((file-name file-like))" > + (every (lambda (element) > + (match element > + ((string ($ <goimapnotify-account>)) > + #t) > + (_ #f))) > + lst)) The indentation for the MATCH clauses is too deep. There are other instances of oddly deep indentation, such as the body of =E2=80=9C(define-configuration/no-serialization home-goimapnotify-configura= tion =E2=80=A6)=E2=80=9D. Are you using Emacs? Since you=E2=80=99re throwing away the first element you can reduce this to: (every (compose goimapnotify-account? second) lst) I haven=E2=80=99t looked at the documentation much, but the capitalization = of =E2=80=9CStdin=E2=80=9D and the spurious changes to seemingly empty lines i= n existing documentation stood out to me. It would be better to undo the changes to unrelated documentation in the same file. --=20 Ricardo
guix-patches@HIDDEN
:bug#66557
; Package guix-patches
.
Full text available.Received: (at submit) by debbugs.gnu.org; 15 Oct 2023 14:02:37 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sun Oct 15 10:02:37 2023 Received: from localhost ([127.0.0.1]:53862 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1qs1hU-0004i7-Bt for submit <at> debbugs.gnu.org; Sun, 15 Oct 2023 10:02:37 -0400 Received: from lists.gnu.org ([2001:470:142::17]:51600) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <nils@HIDDEN>) id 1qs1hP-0004hr-R9 for submit <at> debbugs.gnu.org; Sun, 15 Oct 2023 10:02:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <nils@HIDDEN>) id 1qs1gv-0000TL-Uf for guix-patches@HIDDEN; Sun, 15 Oct 2023 10:02:01 -0400 Received: from mout-p-202.mailbox.org ([80.241.56.172]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_CHACHA20_POLY1305:256) (Exim 4.90_1) (envelope-from <nils@HIDDEN>) id 1qs1ge-0007b7-7T for guix-patches@HIDDEN; Sun, 15 Oct 2023 10:01:50 -0400 Received: from smtp102.mailbox.org (smtp102.mailbox.org [IPv6:2001:67c:2050:b231:465::102]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-202.mailbox.org (Postfix) with ESMTPS id 4S7hk90pr6z9sp7; Sun, 15 Oct 2023 16:01:37 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=landt.email; s=MBO0001; t=1697378497; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=P7igJAJFjkjc/e3BaAO1VNmsd+cYiDlPXeEaOTr6oCs=; b=G9NH3vc+VI1EoNPLA5h2qzcsSuOe3fre4DwzeN1i9nZX+kn6utc58xhF5DsxfmOSIm3k+Q 0/lyC54yjH7G6u49MmC3M3UKIYRqrNa8bueOjHLFcxJjJy8gow8/Pf1tifcSvFLtTPrmIN arnu3gfdn8z0hfIup07y6IQyQZCqVVew3L7ts6lY6lNeXl+3K34GE35S/mgKQmxSXU1dJL mvegeh3o0ya0ZYdXvhRZQjsR8lA375Ios1bhUre7mcLR+PKt27Tj64BQATSPPUkn+WWy8O 7ip5/LgAUHmmZ+8XcpgbzljfPuUpb/NP4LvtlbPpb4zE52gmSFpZfiiqbAndkQ== From: Nils Landt <nils@HIDDEN> To: guix-patches@HIDDEN Subject: [PATCH] home: services: Add goimapnotify service. Date: Sun, 15 Oct 2023 16:01:18 +0200 Message-ID: <c9d8798670448a18779e3c24b9b8a88902942936.1697378478.git.nils@HIDDEN> MIME-Version: 1.0 X-Debbugs-Cc: ( <paren@HIDDEN>, Andrew Tropin <andrew@HIDDEN>, Ludovic Courtès <ludo@HIDDEN> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-MBO-RS-META: jmr8w6kn99tujj9tjbk3bu65sfh5csr4 X-MBO-RS-ID: 7f8937042144065bde5 X-Rspamd-Queue-Id: 4S7hk90pr6z9sp7 Received-SPF: pass client-ip=80.241.56.172; envelope-from=nils@HIDDEN; helo=mout-p-202.mailbox.org X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: submit Cc: Nils Landt <nils.landt@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -0.0 (/) From: Nils Landt <nils.landt@HIDDEN> * gnu/home/services/mail.scm: (home-goimapnotify-configuration, home-goimapnotify-service-type, goimapnotify-account, goimapnotify-tls-options): New variables. (goimapnotify-format-field, goimapnotify-serialize-field, goimapnotify-serialize-goimapnotify-tls-options): New procedures. * doc/guix.texi (Mail Home Services): New node. --- This patch adds a home service for generating goimapnotify JSON configuration files. I was unable to get generate-documentation working with sub-documentation, so the configurations are documented separately. doc/guix.texi | 209 +++++++++++++++++++++++++++------ gnu/home/services/mail.scm | 234 ++++++++++++++++++++++++++++++++++++- 2 files changed, 406 insertions(+), 37 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 3517c95251..fba13d4a43 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -44703,25 +44703,162 @@ Sound Home Services @node Mail Home Services @subsection Mail Home Services - + The @code{(gnu home services mail)} module provides services that help you set up the tools to work with emails in your home environment. - + +@cindex goimapnotify +@uref{https://gitlab.com/shackra/goimapnotify, goimapnotify} watches your +mailbox(es) and executes a script on (new / deleted / updated) messages. + +Using @code{home-goimapnotify-configuration}, you can generate a config file +for each account you want to watch (file name relative to @code{$HOME}), e.g.: + +@lisp +(simple-service 'mail-imapnotify-config-examples + home-goimapnotify-service-type + (home-goimapnotify-configuration + (accounts (list + `(".config/goimapnotify/private-account.conf" + ,(goimapnotify-account + (host "imap.example.org") + (port 993) + (tls #t) + (username "example") + (password-cmd "pass my-private-email-account") + (on-new-mail + (file-append mbsync "/bin/mbsync private-account")) + (on-new-mail-post + (file-append mu "/bin/mu index")) + (boxes '("INBOX")))) + `(".config/goimapnotify/work-account.conf" + ,(goimapnotify-account + (host "imap.work.example.org") + (port 993) + (tls #t) + (username "example") + (password "12345") + (on-new-mail + (file-append mbsync "/bin/mbsync work-account")) + (on-new-mail-post + "notify-send 'New mail'") + (boxes '("INBOX" + "On Call"))))))))) +@end lisp + +Note: to utilize the config files, you need to start a separate goimapnotify +process for each one. Continuing the example above: +@code{goimapnotify -conf "$HOME/.config/goimapnotify/private-account.conf"} and +@code{goimapnotify -conf "$HOME/.config/goimapnotify/work-account.conf"}. + +@c %start of fragment +@deftp {Data Type} home-goimapnotify-configuration +Available @code{home-goimapnotify-configuration} fields are: + +@table @asis +@item @code{accounts} (default: @code{()}) (type: list-of-goimapnotify-accounts) +List of accounts that goimapnotify should watch. For each account, a +separate configuration file will be generated. +@end table + +@end deftp +@c %end of fragment + +@c %start of fragment + +@deftp {Data Type} goimapnotify-account +Available @code{goimapnotify-account} fields are: + +@table @asis +@item @code{host} (type: maybe-string) +Address of the IMAP server to connect to. + +@item @code{host-cmd} (type: maybe-string-or-file-like) +An executable or script that retrieves your host from somewhere, we +cannot pass arguments to this command from Stdin. + +@item @code{port} (type: maybe-integer) +Port of the IMAP server to connect to. + +@item @code{tls} (type: maybe-boolean) + +Use TLS? + +@item @code{tls-options} (type: maybe-goimapnotify-tls-options) +Option(s) for the TLS connection. Currently, only one option is +supported. + +@item @code{username} (type: maybe-string) +Username for authentication. + +@item @code{username-cmd} (type: maybe-string-or-file-like) +An executable or script that retrieves your username from +somewhere, we cannot pass arguments to this command from Stdin. + +@item @code{password} (type: maybe-string) +Password for authentication. + +@item @code{password-cmd} (type: + maybe-string-or-file-like) +An executable or script that retrieves your password from somewhere, we +cannot pass arguments to this command from Stdin. + +@item @code{xoauth2} +(type: maybe-boolean) +You can also use xoauth2 instead of password based authentication by +setting the xoauth2 option to true and the output of a tool which can +provide xoauth2 encoded tokens in passwordCmd. Examples: +@uref{https://github.com/google/oauth2l,Google oauth2l} or +@uref{https://github.com/harishkrupo/oauth2ms,xoauth2 fetcher for O36 +5}. + +@item @code{on-new-mail} (type: maybe-string-or-file-like) +An executable or script to run when new mail has arrived. + +@item @code{on-new-mail-post} (type: maybe-string-or-file-like) +An executable or script to run after onNewMail has ran. + +@item @code{wait} (type: maybe-integer) +The delay in seconds before the mail syncing is triggered. + +@item @code{boxes} (type: maybe-list-of-strings) +Mailboxes to watch. + +@end table + +@end deftp + +@c %end of fragment + +@c %start of fragment + +@deftp {Data Type} goimapnotify-tls-options +Available @code{goimapnotify-tls-options} fields are: + +@table @asis +@item @code{reject-unauthorized} (type: maybe-boolean) +Skip verifying CA server identify? + +@end table + +@end deftp +@c %end of fragment + @cindex msmtp @uref{https://marlam.de/msmtp, MSMTP} is a @acronym{SMTP, Simple Mail Transfer Protocol} client. It sends mail to a predefined SMTP server that takes care of proper delivery. - + The service reference is given below. - + @defvar home-msmtp-service-type This is the service type for @command{msmtp}. Its value must be a @code{home-msmtp-configuration}, as shown below. It provides the @file{~/.config/msmtp/config} file. - + As an example, here is how you would configure @code{msmtp} for a single account: - + @lisp (service home-msmtp-service-type (home-msmtp-configuration @@ -44739,101 +44876,101 @@ Mail Home Services @end defvar @c %start of fragment - + @deftp {Data Type} home-msmtp-configuration Available @code{home-msmtp-configuration} fields are: - + @table @asis @item @code{defaults} (type: msmtp-configuration) The configuration that will be set as default for all accounts. - + @item @code{accounts} (default: @code{'()}) (type: list-of-msmtp-accounts) A list of @code{msmtp-account} records which contain information about all your accounts. - + @item @code{default-account} (type: maybe-string) Set the default account. - + @item @code{extra-content} (default: @code{""}) (type: string) Extra content appended as-is to the configuration file. Run @command{man msmtp} for more information about the configuration file format. - + @end table - + @end deftp - + @c %end of fragment - + @c %start of fragment - + @deftp {Data Type} msmtp-account Available @code{msmtp-account} fields are: - + @table @asis @item @code{name} (type: string) The unique name of the account. - + @item @code{configuration} (type: msmtp-configuration) The configuration for this given account. - + @end table - + @end deftp - + @c %end of fragment @c %start of fragment - + @deftp {Data Type} msmtp-configuration Available @code{msmtp-configuration} fields are: - + @table @asis @item @code{auth?} (type: maybe-boolean) Enable or disable authentication. - + @item @code{tls?} (type: maybe-boolean) Enable or disable TLS (also known as SSL) for secured connections. - + @item @code{tls-starttls?} (type: maybe-boolean) Choose the TLS variant: start TLS from within the session (‘on’, default), or tunnel the session through TLS (‘off’). - + @item @code{tls-trust-file} (type: maybe-string) Activate server certificate verification using a list of trusted Certification Authorities (CAs). - + @item @code{log-file} (type: maybe-string) Enable logging to the specified file. An empty argument disables logging. The file name ‘-’ directs the log information to standard output. - + @item @code{host} (type: maybe-string) The SMTP server to send the mail to. - + @item @code{port} (type: maybe-integer) The port that the SMTP server listens on. The default is 25 ("smtp"), unless TLS without STARTTLS is used, in which case it is 465 ("smtps"). - + @item @code{user} (type: maybe-string) Set the user name for authentication. - + @item @code{from} (type: maybe-string) Set the envelope-from address. - + @item @code{password-eval} (type: maybe-string) Set the password for authentication to the output (stdout) of the command cmd. - + @item @code{extra-content} (default: @code{""}) (type: string) Extra content appended as-is to the configuration block. Run @command{man msmtp} for more information about the configuration file format. - + @end table - + @end deftp - + @c %end of fragment @node Messaging Home Services diff --git a/gnu/home/services/mail.scm b/gnu/home/services/mail.scm index 5445c82c67..923867ca66 100644 --- a/gnu/home/services/mail.scm +++ b/gnu/home/services/mail.scm @@ -18,15 +18,44 @@ (define-module (gnu home services mail) #:use-module (guix gexp) + #:use-module (guix records) #:use-module (gnu services) #:use-module (gnu services configuration) #:use-module (gnu home services) #:use-module (gnu home services shepherd) + #:use-module (gnu home services utils) #:use-module (gnu packages mail) + #:use-module (gnu packages guile) + #:use-module (ice-9 match) #:use-module (ice-9 string-fun) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) - #:export (home-msmtp-configuration + #:export (home-goimapnotify-configuration + home-goimapnotify-configuration-fields + home-goimapnotify-configuration? + home-goimapnotify-configuration-accounts + home-goimapnotify-service-type + goimapnotify-account + goimapnotify-account-fields + goimapnotify-account-host + goimapnotify-account-host-cmd + goimapnotify-account-port + goimapnotify-account-tls + goimapnotify-account-tls-options + goimapnotify-account-username + goimapnotify-account-username-cmd + goimapnotify-account-password + goimapnotify-account-password-cmd + goimapnotify-account-xoauth2 + goimapnotify-account-on-new-mail + goimapnotify-account-on-new-mail-post + goimapnotify-account-wait + goimapnotify-account-boxes + goimapnotify-tls-options + goimapnotify-tls-options-fields + goimapnotify-tls-options-reject-unauthorized + + home-msmtp-configuration home-msmtp-configuration? home-msmtp-configuration-defaults home-msmtp-configuration-accounts @@ -220,3 +249,206 @@ (define home-msmtp-service-type (description "Configure msmtp, a simple @acronym{SMTP, Simple Mail Transfer Protocol} client that can relay email to SMTP servers."))) + +; Configuration for goimapnotify from (gnu packages mail) + +(define-maybe string) +(define-maybe integer) +(define-maybe boolean) +(define-maybe list-of-strings) +(define-maybe string-or-file-like) + +(define (string-or-file-like? value) + (or (string? value) + (file-like? value))) + +(define (goimapnotify-format-field field-name) + (object->camel-case-string field-name)) + +(define (goimapnotify-serialize-field field-name value) + "This is converted to JSON later, so we don't return a string here" + #~(#$(goimapnotify-format-field field-name) . #$value)) + +(define (goimapnotify-serialize-string-or-file-like field-name value) + (goimapnotify-serialize-string field-name value)) + +(define (goimapnotify-maybe-serialize field-name value serialization-function) + (if (maybe-value-set? value) + (serialization-function field-name value) + "")) + +(define (goimapnotify-serialize-maybe-string-or-file-like field-name value) + (goimapnotify-maybe-serialize field-name value + goimapnotify-serialize-string-or-file-like)) + +(define goimapnotify-serialize-string goimapnotify-serialize-field) +(define (goimapnotify-serialize-maybe-string field-name value) + (goimapnotify-maybe-serialize field-name value goimapnotify-serialize-string)) + +(define (goimapnotify-serialize-maybe-integer field-name value) + (goimapnotify-maybe-serialize field-name value goimapnotify-serialize-integer)) +(define goimapnotify-serialize-integer goimapnotify-serialize-field) + +(define (goimapnotify-serialize-maybe-boolean field-name value) + (goimapnotify-maybe-serialize field-name value goimapnotify-serialize-boolean)) +(define goimapnotify-serialize-boolean goimapnotify-serialize-field) + +(define (goimapnotify-serialize-maybe-list-of-strings field-name value) + (goimapnotify-maybe-serialize field-name value goimapnotify-serialize-list-of-strings)) +(define (goimapnotify-serialize-list-of-strings field-name value) + (goimapnotify-serialize-field field-name (list->array 1 value))) + +(define (goimapnotify-serialize-maybe-goimapnotify-tls-options field-name config) + (goimapnotify-maybe-serialize field-name config + goimapnotify-serialize-goimapnotify-tls-options)) + +(define (goimapnotify-serialize-goimapnotify-tls-options field-name config) + (goimapnotify-serialize-field + field-name + (prepare-configuration-for-json config goimapnotify-tls-options-fields))) + +(define (prepare-configuration-for-json config fields) + "Convert the configuration to the format expected by guile-json. + Unset maybe-values do not appear in the configuration file." + (filter + (lambda (val) + (not (unspecified? val))) + (map + (lambda (field) + (let ((value ((configuration-field-getter field) config))) + (if (maybe-value-set? value) + ((configuration-field-serializer field) + (configuration-field-name field) + value) + *unspecified*))) + fields))) + +(define-configuration goimapnotify-tls-options + (reject-unauthorized + (maybe-boolean) + "Skip verifying CA server identify?") + (prefix goimapnotify-)) + +(define-maybe goimapnotify-tls-options) + +; See https://gitlab.com/shackra/goimapnotify/-/blob/master/config.go?ref_type=heads#L46-62 +(define-configuration goimapnotify-account + (host + (maybe-string) + "Address of the IMAP server to connect to.") + (host-cmd + (maybe-string-or-file-like) + "An executable or script that retrieves your host from somewhere, + we cannot pass arguments to this command from Stdin.") + (port + (maybe-integer) + "Port of the IMAP server to connect to.") + (tls + (maybe-boolean) + "Use TLS?") + (tls-options + (maybe-goimapnotify-tls-options) + "Option(s) for the TLS connection. Currently, only one option is + supported.") + (username + (maybe-string) + "Username for authentication.") + (username-cmd + (maybe-string-or-file-like) + "An executable or script that retrieves your username from + somewhere, we cannot pass arguments to this command from Stdin.") + (password + (maybe-string) + "Password for authentication.") + (password-cmd + (maybe-string-or-file-like) + "An executable or script that retrieves your password from + somewhere, we cannot pass arguments to this command from Stdin.") + (xoauth2 + (maybe-boolean) + "You can also use xoauth2 instead of password based authentication + by setting the xoauth2 option to true and the output of a tool + which can provide xoauth2 encoded tokens in passwordCmd. + Examples: @url{https://github.com/google/oauth2l, Google oauth2l} + or + @url{https://github.com/harishkrupo/oauth2ms, xoauth2 fetcher for O365}.") + (on-new-mail + (maybe-string-or-file-like) + "An executable or script to run when new mail has arrived.") + (on-new-mail-post + (maybe-string-or-file-like) + "An executable or script to run after onNewMail has ran.") + (wait + (maybe-integer) + "The delay in seconds before the mail syncing is triggered.") + (boxes + (maybe-list-of-strings) + "Mailboxes to watch.") + (prefix goimapnotify-)) + +(define (list-of-goimapnotify-accounts? lst) + "List is in the form of '((file-name file-like))" + (every (lambda (element) + (match element + ((string ($ <goimapnotify-account>)) + #t) + (_ #f))) + lst)) + +(define-configuration/no-serialization home-goimapnotify-configuration + (accounts + (list-of-goimapnotify-accounts '()) + "List of accounts that goimapnotify should watch. + For each account, a separate configuration file + will be generated.")) + +(define (home-goimapnotify-extension old-config extensions) + (match-record old-config <home-goimapnotify-configuration> + (accounts) + (home-goimapnotify-configuration + (inherit old-config) + (accounts (append accounts + (append-map + home-goimapnotify-configuration-accounts + extensions)))))) + +(define (goimapnotify-files config) + (define* (account->json account-config-and-path) + (match + account-config-and-path + ((path account-config) + (let ((prepared-config + (prepare-configuration-for-json + account-config + goimapnotify-account-fields))) + `((,path + ,(computed-file + (string-append + "mail-imapnotify-config-" + (goimapnotify-account-host account-config)) + (with-extensions (list guile-json-4) + #~(begin + (use-modules (json builder)) + + (with-output-to-file #$output + (lambda () + (scm->json '(#$@prepared-config) + #:pretty #t)))))))))))) + + (match-record config <home-goimapnotify-configuration> + (accounts) + (append-map + (cut account->json <>) + accounts))) + +(define home-goimapnotify-service-type + (service-type (name 'home-goimapnotify-service) + (extensions + (list (service-extension + home-files-service-type + goimapnotify-files))) + (compose identity) + (extend home-goimapnotify-extension) + (default-value (home-goimapnotify-configuration)) + (description "Configure goimapnotify to execute scripts on IMAP + mailbox changes."))) base-commit: d2923babf3ac44cb6faa88317f77c98f3016820d -- 2.41.0
Nils Landt <nils@HIDDEN>
:, guix-patches@HIDDEN
.
Full text available., guix-patches@HIDDEN
:bug#66557
; Package guix-patches
.
Full text available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.