guix_mirror_bot pushed a commit to branch master
in repository guix.

commit 06412fbe5367ed412816d8fa30d7b8b593a9616d
Author: Nicolas Graves <[email protected]>
AuthorDate: Sun Dec 21 16:24:34 2025 +0100

    gnu: Add python-proton-vpn-local-agent.
    
    * gnu/packages/vpn.scm (python-proton-vpn-local-agent): New variable.
    * gnu/packages/rust-crates.scm: Add python-proton-vpn-local-agent
    crate list.
    
    Change-Id: Ife3ec38218a916eea083d1e7f2f9fffa9679b7a7
    Signed-off-by: Sharlatan Hellseher <[email protected]>
---
 gnu/packages/rust-crates.scm | 366 +++++++++++++++++++++++++++++++++++++++++++
 gnu/packages/vpn.scm         | 124 +++++++++++++++
 2 files changed, 490 insertions(+)

diff --git a/gnu/packages/rust-crates.scm b/gnu/packages/rust-crates.scm
index 6db5134609..2939cae2b9 100644
--- a/gnu/packages/rust-crates.scm
+++ b/gnu/packages/rust-crates.scm
@@ -382,6 +382,10 @@
   (crate-source "anstream" "0.6.14"
                 "0nx1vnfs2lil1sl14l49i6jvp6zpjczn85wxx4xw1ycafvx7b321"))
 
+(define rust-anstream-0.6.15
+  (crate-source "anstream" "0.6.15"
+                "09nm4qj34kiwgzczdvj14x7hgsb235g4sqsay3xsz7zqn4d5rqb4"))
+
 (define rust-anstream-0.6.18
   (crate-source "anstream" "0.6.18"
                 "16sjk4x3ns2c3ya1x28a44kh6p47c7vhk27251i015hik1lm7k4a"))
@@ -430,6 +434,10 @@
   (crate-source "anstyle-parse" "0.2.4"
                 "1m121pa4plpcb4g7xali2kv9njmgb3713q3fxf60b4jd0fli2fn0"))
 
+(define rust-anstyle-parse-0.2.5
+  (crate-source "anstyle-parse" "0.2.5"
+                "1jy12rvgbldflnb2x7mcww9dcffw1mx22nyv6p3n7d62h0gdwizb"))
+
 (define rust-anstyle-parse-0.2.6
   (crate-source "anstyle-parse" "0.2.6"
                 "1acqayy22fwzsrvr6n0lz6a4zvjjcvgr5sm941m7m0b2fr81cb9v"))
@@ -446,6 +454,10 @@
   (crate-source "anstyle-query" "1.0.3"
                 "1x9pyl231rry5g45dvkdb2sfnl2dx2f4qd9a5v3ml8kr9ryr0k56"))
 
+(define rust-anstyle-query-1.1.1
+  (crate-source "anstyle-query" "1.1.1"
+                "0aj22iy4pzk6mz745sfrm1ym14r0y892jhcrbs8nkj7nqx9gqdkd"))
+
 (define rust-anstyle-query-1.1.2
   (crate-source "anstyle-query" "1.1.2"
                 "036nm3lkyk43xbps1yql3583fp4hg3b1600is7mcyxs1gzrpm53r"))
@@ -482,6 +494,10 @@
   (crate-source "anstyle-wincon" "3.0.3"
                 "06gv2vbj4hvwb8fxqjmvabp5kx2w01cjgh86pd98y1mpzr4q98v1"))
 
+(define rust-anstyle-wincon-3.0.4
+  (crate-source "anstyle-wincon" "3.0.4"
+                "1y2pkvsrdxbcwircahb4wimans2pzmwwxad7ikdhj5lpdqdlxxsv"))
+
 (define rust-anstyle-wincon-3.0.7
   (crate-source "anstyle-wincon" "3.0.7"
                 "0kmf0fq4c8yribdpdpylzz1zccpy84hizmcsac3wrac1f7kk8dfa"))
@@ -1018,6 +1034,10 @@
   (crate-source "async-task" "4.7.1"
                 "1pp3avr4ri2nbh7s6y9ws0397nkx1zymmcr14sq761ljarh3axcb"))
 
+(define rust-async-trait-0.1.81
+  (crate-source "async-trait" "0.1.81"
+                "01w10ad3984czxrmc8ckdrabhmsv80aynfxibjnqwz1dr3f2h33f"))
+
 (define rust-async-trait-0.1.88
   (crate-source "async-trait" "0.1.88"
                 "1dgxvz7g75cmz6vqqz0mri4xazc6a8xfj1db6r9fxz29lzyd6fg5"))
@@ -1218,6 +1238,15 @@
   (crate-source "aws-lc-rs" "1.14.0"
                 "11i7l7pddlw808xidvm5fb0qi2qnc2lclh9nlmnv2myd15ngzf4l"))
 
+(define rust-aws-lc-rs-1.8.1
+  (crate-source "aws-lc-rs" "1.8.1"
+                "0xxdyn1zcc4jiy0n3bfn56486djbsfd76w0pzn50wlx7s2dlvrsa"))
+
+(define rust-aws-lc-sys-0.20.1
+  ;; TODO: Check bundled sources.
+  (crate-source "aws-lc-sys" "0.20.1"
+                "00q73wwzbcp9v1sn155d5gajj5ki9mqlpj9d1hj2vbf6529283hg"))
+
 (define rust-aws-lc-sys-0.28.0
   ;; TODO: Unbundle aws-lc.
   (crate-source "aws-lc-sys" "0.28.0"
@@ -1445,6 +1474,10 @@
   (crate-source "bindgen" "0.66.1"
                 "19yj6fsb08x0l1pg871vvfvlx1mglamz8hyjpazhfc90zh34xf7j"))
 
+(define rust-bindgen-0.69.4
+  (crate-source "bindgen" "0.69.4"
+                "18194611hn3k1dkxlha7a52sr8vmfhl9blc54xhj08cahd8wh3d0"))
+
 (define rust-bindgen-0.69.5
   (crate-source "bindgen" "0.69.5"
                 "1240snlcfj663k04bjsg629g4wx6f83flgbjh5rzpgyagk3864r7"))
@@ -1553,6 +1586,10 @@
   (crate-source "bitflags" "2.5.0"
                 "1h91vdx1il069vdiiissj8ymzj130rbiic0dbs77yxjgjim9sjyg"))
 
+(define rust-bitflags-2.6.0
+  (crate-source "bitflags" "2.6.0"
+                "1pkidwzn3hnxlsl8zizh0bncgbjnw7c41cx7bby26ncbzmiznj5h"))
+
 (define rust-bitflags-2.9.0
   (crate-source "bitflags" "2.9.0"
                 "1gb5w7pxnmx8l2bjz1i6rkbwbm2167k294rhy6cl1y3vbc8i90jw"))
@@ -2450,6 +2487,10 @@
   (crate-source "cc" "1.1.30"
                 "0icr3vn2r5scpgylbplffd5mh7jcdivqh9dfgsxymnc13fk06s5i"))
 
+(define rust-cc-1.1.8
+  (crate-source "cc" "1.1.8"
+                "0jbmjhn4y94l2cjcpmbsnrkcqix1v0gl1nbynp417k7j8z0xwjsh"))
+
 (define rust-cc-1.2.1
   (crate-source "cc" "1.2.1"
                 "0izavwg0w3ahhp8jhajy97adv53r6ggv11g6czyz6pjx43rfk7gx"))
@@ -3131,6 +3172,10 @@
                 "1an1vcala24grlyhvk71ikxk2kmgcbal9kgrzzpjcl9z7i74ahw5"
                 #:snippet '(delete-file-recursively "tests")))
 
+(define rust-cmake-0.1.50
+  (crate-source "cmake" "0.1.50"
+                "0c3i3548mqbizpgbff94jjgkcd2p6q9fxjjh89zzf5dqcfaph753"))
+
 (define rust-cmake-0.1.54
   (crate-source "cmake" "0.1.54"
                 "1w41ma28yzad9x757s9sfq1wigjs9j902hbzc0nbxpc9vvws7jp7"))
@@ -3238,6 +3283,10 @@
   (crate-source "colorchoice" "1.0.0"
                 "1ix7w85kwvyybwi2jdkl3yva2r2bvdcc3ka2grjfzfgrapqimgxc"))
 
+(define rust-colorchoice-1.0.2
+  (crate-source "colorchoice" "1.0.2"
+                "1h18ph538y8yjmbpaf8li98l0ifms2xmh3rax9666c5qfjfi3zfk"))
+
 (define rust-colorchoice-1.0.3
   (crate-source "colorchoice" "1.0.3"
                 "1439m3r3jy3xqck8aa13q658visn71ki76qa93cy55wkmalwlqsv"))
@@ -5221,6 +5270,10 @@
   (crate-source "env_filter" "0.1.0"
                 "1spp4jx0fissi0bg00d8nn4vnjwf6y3hr7d0vmcq65gb214al2d0"))
 
+(define rust-env-filter-0.1.2
+  (crate-source "env_filter" "0.1.2"
+                "1avnnd60ig6q5ixxxbwicwkxpqjg8bl9x7qn8c7wbvkcvb794b2g"))
+
 (define rust-env-filter-0.1.3
   (crate-source "env_filter" "0.1.3"
                 "1l4p6f845cylripc3zkxa0lklk8rn2q86fqm522p6l2cknjhavhq"))
@@ -5237,6 +5290,10 @@
   (crate-source "env_logger" "0.10.2"
                 "1005v71kay9kbz1d5907l0y7vh9qn2fqsp2yfgb8bjvin6m0bm2c"))
 
+(define rust-env-logger-0.11.5
+  (crate-source "env_logger" "0.11.5"
+                "13812wq68kybv2vj6rpnhbl7ammlhggcb7vq68bkichzp4cscgz1"))
+
 (define rust-env-logger-0.11.8
   (crate-source "env_logger" "0.11.8"
                 "17q6zbjam4wq75fa3m4gvvmv3rj3ch25abwbm84b28a0j3q67j0k"))
@@ -5322,6 +5379,10 @@
   (crate-source "errno" "0.3.2"
                 "0kqg5zahxlyz1pzd8m7kgr7xcligr5n7dlkk2riz27lnlxlzcc3b"))
 
+(define rust-errno-0.3.9
+  (crate-source "errno" "0.3.9"
+                "1fi0m0493maq1jygcf1bya9cymz2pc1mqxj26bdv7yjd37v5qk2k"))
+
 (define rust-errno-dragonfly-0.1.2
   (crate-source "errno-dragonfly" "0.1.2"
                 "1grrmcm6q8512hkq5yzch3yv8wafflc2apbmsaabiyk44yqz2s5a"))
@@ -8684,6 +8745,10 @@
   (crate-source "humantime" "1.3.0"
                 "0krwgbf35pd46xvkqg14j070vircsndabahahlv3rwhflpy4q06z"))
 
+(define rust-humantime-2.1.0
+  (crate-source "humantime" "2.1.0"
+                "1r55pfkkf5v0ji1x6izrjwdq9v6sc7bv99xj6srywcar37xmnfls"))
+
 (define rust-humantime-2.2.0
   (crate-source "humantime" "2.2.0"
                 "17rz8jhh1mcv4b03wnknhv1shwq2v9vhkhlfg884pprsig62l4cv"))
@@ -10242,6 +10307,10 @@
   (crate-source "libc" "0.2.148"
                 "16rn9l8s5sj9n2jb2pw13ghqwa5nvjggkh9q3lp6vs1jfghp3p4w"))
 
+(define rust-libc-0.2.155
+  (crate-source "libc" "0.2.155"
+                "0z44c53z54znna8n322k5iwg80arxxpdzjj5260pxxzc9a58icwp"))
+
 (define rust-libc-0.2.169
   (crate-source "libc" "0.2.169"
                 "02m253hs8gw0m1n8iyrsc4n15yzbqwhddi7w1l0ds7i92kdsiaxm"))
@@ -10393,6 +10462,10 @@
                 "17wbccnjvhjd9ibh019xcd8kjvqws8lqgq86lqkpbgig7gyq0wxn"
                 #:snippet '(delete-file-recursively "tests")))
 
+(define rust-libloading-0.8.5
+  (crate-source "libloading" "0.8.5"
+                "194dvczq4sifwkzllfmw0qkgvilpha7m5xy90gd6i446vcpz4ya9"))
+
 (define rust-libloading-0.8.6
   (crate-source "libloading" "0.8.6"
                 "0d2ccr88f8kv3x7va2ccjxalcjnhrci4j2kwxp7lfmbkpjs4wbzw"
@@ -11567,6 +11640,10 @@
   (crate-source "mio" "0.6.23"
                 "1i2c1vl8lr45apkh8xbh9k56ihfsmqff5l7s2fya7whvp7sndzaa"))
 
+(define rust-mio-1.0.1
+  (crate-source "mio" "1.0.1"
+                "1r5g65s5acsx440m0a3pylclbrd0dqz93hg15k9crpllsdbf8sa5"))
+
 (define rust-mio-1.0.2
   (crate-source "mio" "1.0.2"
                 "1v1cnnn44awxbcfm4zlavwgkvbyg7gp5zzjm8mqf1apkrwflvq40"))
@@ -11587,6 +11664,10 @@
   (crate-source "miow" "0.6.1"
                 "023g6jamln6hmspcllgrm99ri38ypbm8w945jh36579hgb9zlssk"))
 
+(define rust-mirai-annotations-1.12.0
+  (crate-source "mirai-annotations" "1.12.0"
+                "1lfkgarmzd7mdr739s9yidh0xhc9d3g4jjiwh246mwmkq5i0ign9"))
+
 (define rust-mockall-0.9.1
   (crate-source "mockall" "0.9.1"
                 "1m9kpv4523503v48ahyzk9g2rabvbjl70mlbkc8mkfzr4fni9mhq"))
@@ -12857,6 +12938,10 @@
   (crate-source "object" "0.35.0"
                 "0pnv84mx3f3p847hfnsp4znivnwkc1x53maq459a92w42fw7mv5q"))
 
+(define rust-object-0.36.3
+  (crate-source "object" "0.36.3"
+                "1nggchwvjgilrxarwcmfcisa9fq1phg382y672aa6lb86ir4kdi7"))
+
 (define rust-object-0.36.4
   (crate-source "object" "0.36.4"
                 "02h7k38dwi8rndc3y81n6yjxijbss99p2jm9c0b6ak5c45c1lkq8"))
@@ -14156,6 +14241,10 @@
   (crate-source "portable-atomic" "1.11.1"
                 "10s4cx9y3jvw0idip09ar52s2kymq8rq9a668f793shn1ar6fhpq"))
 
+(define rust-portable-atomic-1.7.0
+  (crate-source "portable-atomic" "1.7.0"
+                "0rbjqv7lw120k6avb3fbsg58zg69m0wrmjg926lqglph33i4wm6s"))
+
 (define rust-portable-atomic-1.9.0
   (crate-source "portable-atomic" "1.9.0"
                 "1cmd87qj90panwsi350djb8lsxdryqkkxmimjcz7a1nsysini76c"))
@@ -14296,6 +14385,10 @@
   (crate-source "prettyplease" "0.1.25"
                 "11lskniv8pf8y8bn4dc3nmjapfhnibxbm5gamp2ad9qna3lld1kc"))
 
+(define rust-prettyplease-0.2.20
+  (crate-source "prettyplease" "0.2.20"
+                "0pk4vm9fir1p0bl11p9fkgl9r1x9vi4avv8l7flb1wx2i1a364jz"))
+
 (define rust-prettyplease-0.2.32
   (crate-source "prettyplease" "0.2.32"
                 "1xmdmwhsvqc8l5ns029vzjida4k3lp5ynin0xra43qsiki0wakk6"))
@@ -14752,6 +14845,10 @@
                 "0wm8z6jgg18z2cgr99wc34mbkffhcnb50igmq5d1ff6ghpyvyy3p"
                 #:snippet '(delete-file-recursively "branding")))
 
+(define rust-pyo3-0.24.0
+  (crate-source "pyo3" "0.24.0"
+                "11jyd625m0r2kjdq9vqxy1af82libzn1n9mj9pb6818jj4snq73z"))
+
 (define rust-pyo3-0.24.1
   (crate-source "pyo3" "0.24.1"
                 "0abjav5868avfgb8fjfvz2dbpm916zmhm8xvxzfgns5hhq033nhp"
@@ -14765,6 +14862,14 @@
   (crate-source "pyo3" "0.25.1"
                 "0ak85gkxs2ylrpbgyq1ksk24asvbsxgzqxh38gis6a06zs5afw49"))
 
+(define rust-pyo3-async-runtimes-0.24.0
+  (crate-source "pyo3-async-runtimes" "0.24.0"
+                "1gzq3mdd679mpy0jmzx3clxpd68cbzbdm041sd81zm7r8bf862yx"))
+
+(define rust-pyo3-async-runtimes-macros-0.24.0
+  (crate-source "pyo3-async-runtimes-macros" "0.24.0"
+                "1k8b6gs64np4g1n4k85h5m5hgazv62c9pvfr4a01xfrg0sj3n46g"))
+
 (define rust-pyo3-build-config-0.15.2
   (crate-source "pyo3-build-config" "0.15.2"
                 "0414biclhrxv6y0bjm6s9fq9z6yah393ffkd8748pqdq83y3k4kp"))
@@ -14793,6 +14898,10 @@
   (crate-source "pyo3-build-config" "0.23.5"
                 "1yqhw1k466k65rqvy2d4xz2shl0hzkry1xlxinciigzkdvlcpxll"))
 
+(define rust-pyo3-build-config-0.24.0
+  (crate-source "pyo3-build-config" "0.24.0"
+                "0yhacb3yqnhz2rgy75a70xm8i1gbpbpil0676zm2f57p9jrw5dp9"))
+
 (define rust-pyo3-build-config-0.24.1
   (crate-source "pyo3-build-config" "0.24.1"
                 "1hazmb2hm7qad5xcy9gajwj3231hqjnndfcb145014ypkf46awg2"))
@@ -14829,6 +14938,10 @@
   (crate-source "pyo3-ffi" "0.23.5"
                 "13fxvxijl59vilv39akdzwqd1l7fb6c70f53n27irfy0672b9wg9"))
 
+(define rust-pyo3-ffi-0.24.0
+  (crate-source "pyo3-ffi" "0.24.0"
+                "171s5hfn4y5r8my19jbl2d7hdxhr0gfh5k82vb6k4r540qcna1sm"))
+
 (define rust-pyo3-ffi-0.24.1
   (crate-source "pyo3-ffi" "0.24.1"
                 "1g5a5w7rsq2afb5zamz1jjx5834cnwlg4gig0qhb9xnvw4k0aa05"))
@@ -14873,6 +14986,10 @@
   (crate-source "pyo3-macros" "0.23.5"
                 "1nm9i19aff7zn245v35qb0lbr3cxr19zdgcayq84fg7n509j1hpv"))
 
+(define rust-pyo3-macros-0.24.0
+  (crate-source "pyo3-macros" "0.24.0"
+                "0hkgzvpg5k1crmmxski93ngx7fmsmv90vfrnhga9g3gxnjsr9lxh"))
+
 (define rust-pyo3-macros-0.24.1
   (crate-source "pyo3-macros" "0.24.1"
                 "0i2zrpazxwgfbpmzvrcqhdgg3j97l5i0q455b4rzdlx4d9lfag2w"))
@@ -14913,6 +15030,10 @@
   (crate-source "pyo3-macros-backend" "0.23.5"
                 "0a10yxj41kvjhh9vywzd2zj3h6iwm4bg3mlkw2frrnpks1m759pw"))
 
+(define rust-pyo3-macros-backend-0.24.0
+  (crate-source "pyo3-macros-backend" "0.24.0"
+                "13kwma61zgm262m53pdsywypgqpp5r6h47v21w4b2hx9rw4xlwpx"))
+
 (define rust-pyo3-macros-backend-0.24.1
   (crate-source "pyo3-macros-backend" "0.24.1"
                 "0m9q9zlwn5s0pa2819z3a13yn94pmq1q3swvx04fvc5z1jm6zkzl"))
@@ -15129,6 +15250,10 @@
   (crate-source "quote" "1.0.33"
                 "1biw54hbbr12wdwjac55z1m2x2rylciw83qnjn564a3096jgqrsj"))
 
+(define rust-quote-1.0.36
+  (crate-source "quote" "1.0.36"
+                "19xcmh445bg6simirnnd4fvkmp6v2qiwxh5f6rw4a70h76pnm9qg"))
+
 (define rust-quote-1.0.37
   (crate-source "quote" "1.0.37"
                 "1brklraw2g34bxy9y4q1nbrccn7bv36ylihv12c9vlcii55x7fdm"))
@@ -15568,6 +15693,10 @@
   (crate-source "regalloc2" "0.11.2"
                 "16k30jbh1ag5vb4l6p43jik1dzq8pymjbiwblkj189hl32ryc1nw"))
 
+(define rust-regex-1.10.6
+  (crate-source "regex" "1.10.6"
+                "06cnlxwzyqfbw1za1i7ks89ns4i2kr0lpg5ykx56b8v7dd6df6a2"))
+
 (define rust-regex-1.11.1
   (crate-source "regex" "1.11.1"
                 "148i41mzbx8bmq32hsj1q4karkzzx5m60qza6gdw4pdc9qdyyi5m"
@@ -15605,6 +15734,10 @@
   (crate-source "regex-automata" "0.3.8"
                 "1587iyw9x0r33b23vwn4s7cgzavqkkp6dv7qaqxnj82jjps03x62"))
 
+(define rust-regex-automata-0.4.7
+  (crate-source "regex-automata" "0.4.7"
+                "1pwjdi4jckpbaivpl6x4v5g4crb37zr2wac93wlfsbzgqn6gbjiq"))
+
 (define rust-regex-automata-0.4.8
   (crate-source "regex-automata" "0.4.8"
                 "18wd530ndrmygi6xnz3sp345qi0hy2kdbsa89182nwbl6br5i1rn"
@@ -15647,6 +15780,10 @@
   (crate-source "regex-syntax" "0.7.5"
                 "1nhjmqdlakfi4yb8lh7vbbh71dsy90jjvrjvvnrih6larldgpdfv"))
 
+(define rust-regex-syntax-0.8.4
+  (crate-source "regex-syntax" "0.8.4"
+                "16r0kjy20vx33dr4mhasj5l1f87czas714x2fz6zl0f8wwxa0rks"))
+
 (define rust-regex-syntax-0.8.5
   (crate-source "regex-syntax" "0.8.5"
                 "0p41p3hj9ww7blnbwbj9h7rwxzxg0c1hvrdycgys8rxyhqqw859b"))
@@ -16284,6 +16421,10 @@
                       (string-append "//" all)))
                    (copy-file "Cargo.toml.orig" "Cargo.toml"))))
 
+(define rust-rustix-0.38.34
+  (crate-source "rustix" "0.38.34"
+                "03vkqa2ism7q56rkifyy8mns0wwqrk70f4i4fd53r97p8b05xp3h"))
+
 (define rust-rustix-0.38.42
   (crate-source "rustix" "0.38.42"
                 "11fvprv3p450ggyqacp7sdpjbbsgm5zvfjwnzy8bfbmbrf7c6ggr"))
@@ -16417,6 +16558,10 @@
                 "1324n5bcns0rnw6vywr5agff3rwfvzphi7rmbyzwnv6glkhclx0w"
                 #:snippet '(delete-file-recursively "tests")))
 
+(define rust-rustls-pemfile-2.1.3
+  (crate-source "rustls-pemfile" "2.1.3"
+                "09bl873pkibmb2da49kkbm9jlagscjvzrv257q6k01p101my2vqr"))
+
 (define rust-rustls-pemfile-2.2.0
   (crate-source "rustls-pemfile" "2.2.0"
                 "0l3f3mrfkgdjrava7ibwzgwc4h3dljw3pdkbsi9rkwz3zvji9qyw"
@@ -16437,6 +16582,10 @@
                 "0yjzsnpv1sjbnfxbbmrnyimd23jip48nav6l9hr1rjd06vcjl64l"
                 #:snippet '(delete-file-recursively "tests")))
 
+(define rust-rustls-pki-types-1.8.0
+  (crate-source "rustls-pki-types" "1.8.0"
+                "1w6a1x8h61p5ddlnijfvj5fvs516h5xr5rw1pc0m8rgq8vk2q2pw"))
+
 (define rust-rustls-platform-verifier-0.3.4
   (crate-source "rustls-platform-verifier" "0.3.4"
                 "145lhjn9w5khp0fn4lagaa8qqyjyhfqn2dg6llva6qyzvy5qgfxg"
@@ -16911,10 +17060,22 @@
   (crate-source "send_wrapper" "0.6.0"
                 "0wrxzsh9fzgkkkms621ydnz8mj30ilyq299a8cf65jn1y72hw2yd"))
 
+(define rust-serde-1.0.204
+  (crate-source "serde" "1.0.204"
+                "04kwpwqz559xlhxkggmm8rjxqgywy5swam3kscwsicnbw1cgaxmw"))
+
 (define rust-serde-bytes-0.11.19
   (crate-source "serde_bytes" "0.11.19"
                 "1a1y1v0r9akqyvprxnmpgc0i8wybqqpvgi01mi8qxn3rkrq41m55"))
 
+(define rust-serde-derive-1.0.204
+  (crate-source "serde_derive" "1.0.204"
+                "08p25262mbmhsr2cg0508d5b1wvljj956rvpg0v3qgg6gc8pxkg0"))
+
+(define rust-serde-json-1.0.122
+  (crate-source "serde_json" "1.0.122"
+                "1nk8phyvwmhrmcbwdr8rbjd9bqp8np62dcbnhisgymqwjl1n4jvq"))
+
 (define rust-serde-spanned-1.0.0
   (crate-source "serde_spanned" "1.0.0"
                 "10rv91337k8x8zmfir4h8aiwmwgkq07gdv7h0jxhcwwgk10lqws0"))
@@ -18991,6 +19152,10 @@
   (crate-source "test-case-macros" "3.3.1"
                 "1yvgky3qax73bic6m368q04xc955p4a91mddd6b5fk7d04mfg2aw"))
 
+(define rust-test-log-0.2.16
+  (crate-source "test-log" "0.2.16"
+                "14xv5d7b3w072hh78xafsc795ygrg6s7ck8mg3i7np1b7kbcxzrx"))
+
 (define rust-test-log-0.2.17
   (crate-source "test-log" "0.2.17"
                 "03ydax0mamyhn5n6x0l8d2kz76fly7jv3xmnwmk12611sa1n1x77"))
@@ -18999,6 +19164,10 @@
   (crate-source "test-log" "0.2.18"
                 "0yxywma018rfr4mb409b1yz4ppg8ir9rg87bd08vx81fb25bjcqy"))
 
+(define rust-test-log-macros-0.2.16
+  (crate-source "test-log-macros" "0.2.16"
+                "1xd3490hvpa6fk5sqnmyzbz5xwndfpmmshjfpa8k221jm97f56ar"))
+
 (define rust-test-log-macros-0.2.17
   (crate-source "test-log-macros" "0.2.17"
                 "0gsmmdsi8aqgxbr16n78sf1m6x5s29gfvlk0n7d0yg5mdly0r3c8"))
@@ -19059,6 +19228,10 @@
   (crate-source "thiserror" "1.0.49"
                 "1m3yalbcx89bx397igc1ckypw8hiwq9jbzc56pgazrzdsz3fhxqi"))
 
+(define rust-thiserror-1.0.63
+  (crate-source "thiserror" "1.0.63"
+                "092p83mf4p1vkjb2j6h6z96dan4raq2simhirjv12slbndq26d60"))
+
 (define rust-thiserror-1.0.69
   (crate-source "thiserror" "1.0.69"
                 "0lizjay08agcr5hs9yfzzj6axs53a2rgx070a1dsi3jpkcrzbamn"))
@@ -19091,6 +19264,10 @@
   (crate-source "thiserror-impl" "1.0.49"
                 "1k643ga9sbqpcb873n299n3zjzc4srfakyv98xwqi4ly0412yw8h"))
 
+(define rust-thiserror-impl-1.0.63
+  (crate-source "thiserror-impl" "1.0.63"
+                "0qd21l2jjrkvnpr5da3l3b58v4wmrkn6aa0h1z5dg6kb8rc8nmd4"))
+
 (define rust-thiserror-impl-1.0.69
   (crate-source "thiserror-impl" "1.0.69"
                 "1h84fmn2nai41cxbhk6pqf46bxqq1b344v8yz089w1chzi76rvjg"))
@@ -19348,6 +19525,10 @@
   (crate-source "tokenizers" "0.19.1"
                 "1zg6ffpllygijb5bh227m9p4lrhf0pjkysky68kddwrsvp8zl075"))
 
+(define rust-tokio-1.39.2
+  (crate-source "tokio" "1.39.2"
+                "1cb7yhba7nnf00cylcywk7rai5kkdb8b4jzwrc26zgbqqwdzp96s"))
+
 (define rust-tokio-1.44.1
   (crate-source "tokio" "1.44.1"
                 "06n90q5hh1yd844s6nf4j3fwbrkm2bnq533kp3a488l4bdhxm0pk"))
@@ -19380,6 +19561,10 @@
   (crate-source "tokio-graceful" "0.1.6"
                 "1rqd6klnc4l4y3iih2k9hv6pxm3jbs4iqh030rs19knblkda8yv2"))
 
+(define rust-tokio-macros-2.4.0
+  (crate-source "tokio-macros" "2.4.0"
+                "0lnpg14h1v3fh2jvnc8cz7cjf0m7z1xgkwfpcyy632g829imjgb9"))
+
 (define rust-tokio-macros-2.5.0
   (crate-source "tokio-macros" "2.5.0"
                 "1f6az2xbvqp7am417b78d1za8axbvjvxnmkakz9vr8s52czx81kf"))
@@ -20806,6 +20991,10 @@
   (crate-source "validator" "0.15.0"
                 "1mgfpwry40fcsfabx7vziy0a7j9kxn6b49mvbv1hy770j09hlyzh"))
 
+(define rust-valuable-0.1.0
+  (crate-source "valuable" "0.1.0"
+                "0v9gp3nkjbl30z0fd56d8mx7w1csk86wwjhfjhr400wh9mfpw2w3"))
+
 (define rust-valuable-0.1.1
   (crate-source "valuable" "0.1.1"
                 "0r9srp55v7g27s5bg7a2m095fzckrcdca5maih6dy9bay6fflwxs"))
@@ -21792,6 +21981,10 @@
                 "1agpayg5zzf7m1a01q30jahlgmn5nwggbabdhq0in008pf5c66sj"
                 #:snippet '(delete-file-recursively "tests")))
 
+(define rust-webpki-roots-0.26.6
+  (crate-source "webpki-roots" "0.26.6"
+                "0n5985cgqrzm2a1si6rii5jrp3z7y3cfizgy9lfqywbpy6znf744"))
+
 (define rust-webpki-roots-0.26.8
   (crate-source "webpki-roots" "0.26.8"
                 "1jf54brni9lk4ak5pkma2pn18hli22gr7i7wp9zn2lzayy8v4412"
@@ -44326,6 +44519,179 @@
                                           rust-target-lexicon-0.12.11
                                           rust-unicode-ident-1.0.11
                                           rust-version-check-0.9.4))
+                     (python-proton-vpn-local-agent =>
+                                                    (list
+                                                     rust-addr2line-0.22.0
+                                                     rust-adler-1.0.2
+                                                     rust-aho-corasick-1.1.3
+                                                     rust-anstream-0.6.15
+                                                     rust-anstyle-1.0.8
+                                                     rust-anstyle-parse-0.2.5
+                                                     rust-anstyle-query-1.1.1
+                                                     rust-anstyle-wincon-3.0.4
+                                                     rust-asn1-rs-0.6.2
+                                                     rust-asn1-rs-derive-0.5.1
+                                                     rust-asn1-rs-impl-0.2.0
+                                                     rust-async-trait-0.1.81
+                                                     rust-autocfg-1.3.0
+                                                     rust-aws-lc-rs-1.8.1
+                                                     rust-aws-lc-sys-0.20.1
+                                                     rust-backtrace-0.3.73
+                                                     rust-base64-0.22.1
+                                                     rust-bincode-1.3.3
+                                                     rust-bindgen-0.69.4
+                                                     rust-bitflags-2.6.0
+                                                     rust-bytes-1.7.1
+                                                     rust-cc-1.1.8
+                                                     rust-cexpr-0.6.0
+                                                     rust-cfg-if-1.0.0
+                                                     rust-clang-sys-1.8.1
+                                                     rust-cmake-0.1.50
+                                                     rust-colorchoice-1.0.2
+                                                     rust-data-encoding-2.9.0
+                                                     rust-der-parser-9.0.0
+                                                     rust-deranged-0.5.3
+                                                     rust-displaydoc-0.2.5
+                                                     rust-dunce-1.0.5
+                                                     rust-either-1.13.0
+                                                     rust-env-filter-0.1.2
+                                                     rust-env-logger-0.11.5
+                                                     rust-errno-0.3.9
+                                                     rust-fs-extra-1.3.0
+                                                     rust-futures-0.3.31
+                                                     
rust-futures-channel-0.3.31
+                                                     rust-futures-core-0.3.31
+                                                     
rust-futures-executor-0.3.31
+                                                     rust-futures-io-0.3.31
+                                                     rust-futures-macro-0.3.31
+                                                     rust-futures-sink-0.3.31
+                                                     rust-futures-task-0.3.31
+                                                     rust-futures-util-0.3.31
+                                                     rust-getrandom-0.2.15
+                                                     rust-gimli-0.29.0
+                                                     rust-glob-0.3.1
+                                                     rust-heck-0.5.0
+                                                     rust-hermit-abi-0.3.9
+                                                     rust-home-0.5.9
+                                                     rust-humantime-2.1.0
+                                                     rust-indoc-2.0.5
+                                                     
rust-is-terminal-polyfill-1.70.1
+                                                     rust-itertools-0.12.1
+                                                     rust-itoa-1.0.11
+                                                     rust-jobserver-0.1.32
+                                                     rust-lazy-static-1.5.0
+                                                     rust-lazycell-1.3.0
+                                                     rust-libc-0.2.155
+                                                     rust-libloading-0.8.5
+                                                     rust-linux-raw-sys-0.4.14
+                                                     rust-lock-api-0.4.12
+                                                     rust-log-0.4.22
+                                                     rust-matchers-0.1.0
+                                                     rust-memchr-2.7.4
+                                                     rust-memoffset-0.9.1
+                                                     rust-minimal-lexical-0.2.1
+                                                     rust-miniz-oxide-0.7.4
+                                                     rust-mio-1.0.1
+                                                     
rust-mirai-annotations-1.12.0
+                                                     rust-nom-7.1.3
+                                                     rust-nu-ansi-term-0.46.0
+                                                     rust-num-bigint-0.4.6
+                                                     rust-num-conv-0.1.0
+                                                     rust-num-integer-0.1.46
+                                                     rust-num-traits-0.2.19
+                                                     rust-object-0.36.3
+                                                     rust-oid-registry-0.7.1
+                                                     rust-once-cell-1.19.0
+                                                     rust-overload-0.1.1
+                                                     rust-parking-lot-0.12.3
+                                                     
rust-parking-lot-core-0.9.10
+                                                     rust-paste-1.0.15
+                                                     
rust-pin-project-lite-0.2.14
+                                                     rust-pin-utils-0.1.0
+                                                     rust-portable-atomic-1.7.0
+                                                     rust-powerfmt-0.2.0
+                                                     rust-prettyplease-0.2.20
+                                                     rust-proc-macro2-1.0.94
+                                                     rust-pyo3-0.24.0
+                                                     
rust-pyo3-async-runtimes-0.24.0
+                                                     
rust-pyo3-async-runtimes-macros-0.24.0
+                                                     
rust-pyo3-build-config-0.24.0
+                                                     rust-pyo3-ffi-0.24.0
+                                                     rust-pyo3-macros-0.24.0
+                                                     
rust-pyo3-macros-backend-0.24.0
+                                                     rust-quote-1.0.36
+                                                     rust-redox-syscall-0.5.3
+                                                     rust-regex-1.10.6
+                                                     rust-regex-automata-0.1.10
+                                                     rust-regex-automata-0.4.7
+                                                     rust-regex-syntax-0.6.29
+                                                     rust-regex-syntax-0.8.4
+                                                     rust-ring-0.17.8
+                                                     rust-rustc-demangle-0.1.24
+                                                     rust-rustc-hash-1.1.0
+                                                     
rust-rusticata-macros-4.1.0
+                                                     rust-rustix-0.38.34
+                                                     rust-rustls-0.23.12
+                                                     rust-rustls-pemfile-2.1.3
+                                                     
rust-rustls-pki-types-1.8.0
+                                                     rust-rustls-webpki-0.102.6
+                                                     rust-ryu-1.0.18
+                                                     rust-scopeguard-1.2.0
+                                                     rust-serde-1.0.204
+                                                     rust-serde-derive-1.0.204
+                                                     rust-serde-json-1.0.122
+                                                     rust-sharded-slab-0.1.7
+                                                     rust-shlex-1.3.0
+                                                     
rust-signal-hook-registry-1.4.2
+                                                     rust-slab-0.4.9
+                                                     rust-smallvec-1.13.2
+                                                     rust-socket2-0.5.7
+                                                     rust-spin-0.9.8
+                                                     
rust-static-assertions-1.1.0
+                                                     rust-subtle-2.6.1
+                                                     rust-syn-2.0.100
+                                                     rust-synstructure-0.13.2
+                                                     rust-target-lexicon-0.13.2
+                                                     rust-test-log-0.2.16
+                                                     
rust-test-log-macros-0.2.16
+                                                     rust-thiserror-1.0.63
+                                                     rust-thiserror-impl-1.0.63
+                                                     rust-thread-local-1.1.8
+                                                     rust-time-0.3.43
+                                                     rust-time-core-0.1.6
+                                                     rust-time-macros-0.2.24
+                                                     rust-tokio-1.39.2
+                                                     rust-tokio-macros-2.4.0
+                                                     rust-tokio-rustls-0.26.0
+                                                     rust-tracing-0.1.41
+                                                     rust-tracing-core-0.1.33
+                                                     rust-tracing-log-0.2.0
+                                                     
rust-tracing-subscriber-0.3.19
+                                                     rust-unicode-ident-1.0.12
+                                                     rust-unindent-0.2.3
+                                                     rust-untrusted-0.9.0
+                                                     rust-utf8parse-0.2.2
+                                                     rust-valuable-0.1.0
+                                                     
rust-wasi-0.11.0+wasi-snapshot-preview1
+                                                     rust-webpki-0.22.4
+                                                     rust-webpki-roots-0.26.6
+                                                     rust-which-4.4.2
+                                                     rust-winapi-0.3.9
+                                                     
rust-winapi-i686-pc-windows-gnu-0.4.0
+                                                     
rust-winapi-x86-64-pc-windows-gnu-0.4.0
+                                                     rust-windows-sys-0.52.0
+                                                     
rust-windows-targets-0.52.6
+                                                     
rust-windows-aarch64-gnullvm-0.52.6
+                                                     
rust-windows-aarch64-msvc-0.52.6
+                                                     
rust-windows-i686-gnu-0.52.6
+                                                     
rust-windows-i686-gnullvm-0.52.6
+                                                     
rust-windows-i686-msvc-0.52.6
+                                                     
rust-windows-x86-64-gnu-0.52.6
+                                                     
rust-windows-x86-64-gnullvm-0.52.6
+                                                     
rust-windows-x86-64-msvc-0.52.6
+                                                     rust-x509-parser-0.16.0
+                                                     rust-zeroize-1.8.1
+                                                     
rust-zeroize-derive-1.4.2))
                      (python-pydantic-core =>
                                            (list rust-ahash-0.8.11
                                             rust-aho-corasick-1.1.3
diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm
index a16b8fb8b6..51b5f0f9e6 100644
--- a/gnu/packages/vpn.scm
+++ b/gnu/packages/vpn.scm
@@ -47,6 +47,7 @@
   #:use-module (guix download)
   #:use-module (guix gexp)
   #:use-module (guix git-download)
+  #:use-module (guix build-system cargo)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
@@ -77,6 +78,8 @@
   #:use-module (gnu packages golang-crypto)
   #:use-module (gnu packages golang-web)
   #:use-module (gnu packages golang-xyz)
+  #:use-module (gnu packages groff)
+  #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages linux)
@@ -976,6 +979,127 @@ packages.")
      "This package provides a keyring plugin for Proton technologies.")
     (license license:gpl3+)))
 
+(define-public python-proton-vpn-local-agent
+  (let* ((name "python-proton-vpn-local-agent")
+         (version "1.6.0")
+         (local-agent-version "0.10.1")
+         (home-page "https://github.com/ProtonVPN/local-agent-rs";)
+         (base-origin
+          (origin
+            (method git-fetch)
+            (uri (git-reference
+                   (url home-page)
+                   (commit version)))
+            (file-name (git-file-name name version))
+            (sha256
+             (base32 
"13ym2hhb5ndiffc8z551bb2hk2rdkld2r8cwhyq3nl5lma5z0kdf")))))
+    (package
+      (name name)
+      (version version)
+      (home-page home-page)
+      (source base-origin)
+      (build-system cargo-build-system)
+      (arguments
+       (list
+        #:install-source? #false
+        #:imported-modules `(,@%cargo-build-system-modules
+                             ,@%pyproject-build-system-modules)
+        #:modules '((guix build cargo-build-system)
+                    ((guix build pyproject-build-system) #:prefix py:)
+                    (guix build utils))
+        #:phases
+        (with-extensions (list (pyproject-guile-json))
+          #~(modify-phases %standard-phases
+              (add-after 'unpack 'chdir
+                (lambda _
+                  (chdir "python-proton-vpn-local-agent")))
+              ;; XXX: Inject the local_agent_rs crate as a vendored dependency
+              ;; instead of using path=. Otherwise the 'package phase is 
broken.
+              (add-after 'chdir 'patch-local-agent-rs-version
+                (lambda _
+                  (substitute* "Cargo.toml"
+                    (("\\{ (path = \"\\.\\./local_agent_rs\") \\}")
+                     (format #f "{ version = ~s }" #$local-agent-version)))))
+              ;; XXX: There is currently no proper way to install a wheel.
+              (add-after 'install 'prepare-python-module-with-flit
+                (lambda _
+                  (define (touch file)
+                    (call-with-output-file file (const #t)))
+                  (mkdir-p "python/proton/vpn/")
+                  (for-each touch '("python/proton/__init__.py"
+                                    "python/proton/vpn/__init__.py"))
+                  (copy-file 
"target/release/libpython_proton_vpn_local_agent.so"
+                             ;; XXX: Install as .py or flit fails to do so.
+                             "python/proton/vpn/local_agent.py")
+                  (call-with-output-file "python/pyproject.toml"
+                    (lambda (port)
+                      (format port "\
+[build-system]
+requires = [\"flit_core\"]
+build-backend = \"flit_core.buildapi\"
+
+[project]
+name = ~s
+version = ~s
+description = ~s
+
+[tool.flit.module]
+name = ~s~%"
+                              "proton_vpn_local_agent"
+                              #$version
+                              #$(package-description this-package)
+                              "proton.vpn.local_agent")))
+                  (chdir "python")))
+              (add-after 'prepare-python-module-with-flit 'build-python-module
+                (assoc-ref py:%standard-phases 'build))
+              (add-after 'build-python-module 'install-python-module
+                (assoc-ref py:%standard-phases 'install))
+              (add-after 'install-python-module 'fix-python-installation
+                (lambda* (#:key inputs outputs #:allow-other-keys)
+                  (with-directory-excursion (py:site-packages inputs outputs)
+                    (rename-file "proton/vpn/local_agent.py"
+                                 "proton/vpn/local_agent.so")
+                    (substitute* (find-files "." "RECORD")
+                      (("proton/vpn/local_agent\\.py")
+                       "proton/vpn/local_agent.so")))))
+              (add-after 'fix-python-installation 'add-install-to-pythonpath
+                (assoc-ref py:%standard-phases 'add-install-to-pythonpath))
+              (add-after 'add-install-to-pythonpath 'python-check
+                (lambda args
+                  (chdir "..")
+                  (apply (assoc-ref py:%standard-phases 'check)
+                         (cons* #:test-flags (list) args))))))))
+      (native-inputs
+       (list python-flit-core
+             python-pytest
+             python-pytest-asyncio))
+      (inputs
+       (cons*
+        (origin
+          (inherit base-origin)
+          (file-name (git-file-name "local_agent_rs" local-agent-version))
+          (modules '((guix build utils)
+                     (ice-9 ftw)))
+          (snippet
+           #~(begin
+               ;; Delete everything except for local_agent_rs itself:
+               (for-each (lambda (file)
+                           (unless (member file '("." ".." "local_agent_rs"))
+                             (delete-file-recursively file)))
+                         (scandir "."))
+               (for-each
+                (lambda (file)
+                  (unless (member file '("." ".."))
+                    (rename-file (string-append "local_agent_rs/" file) file)))
+                (scandir "local_agent_rs")))))
+        python-wrapper
+        (cargo-inputs 'python-proton-vpn-local-agent)))
+      (synopsis "Communicate with a Proton LocalAgent")
+      (description
+       "This package contains a rust crate for communicating with a Proton
+LocalAgent, server, and python-bindings for that crate.")
+      (license license:gpl3+))))
+
 (define-public tinc
   (package
     (name "tinc")


Reply via email to