Commit | Line | Data |
---|---|---|
b2e93b9e | 1 | ;;; GNU Guix --- Functional package management for GNU |
a69f0715 | 2 | ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il> |
7ee557a7 | 3 | ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net> |
36384fd2 | 4 | ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr> |
fe84a00f | 5 | ;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org> |
ab7011f8 | 6 | ;;; Copyright © 2018, 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr> |
809b3963 | 7 | ;;; Copyright © 2019 Clément Lassieur <clement@lassieur.org> |
1b029025 | 8 | ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net> |
b2e93b9e EF |
9 | ;;; |
10 | ;;; This file is part of GNU Guix. | |
11 | ;;; | |
12 | ;;; GNU Guix is free software; you can redistribute it and/or modify it | |
13 | ;;; under the terms of the GNU General Public License as published by | |
14 | ;;; the Free Software Foundation; either version 3 of the License, or (at | |
15 | ;;; your option) any later version. | |
16 | ;;; | |
17 | ;;; GNU Guix is distributed in the hope that it will be useful, but | |
18 | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 | ;;; GNU General Public License for more details. | |
21 | ;;; | |
22 | ;;; You should have received a copy of the GNU General Public License | |
23 | ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. | |
24 | ||
760d6066 | 25 | (define-module (gnu packages sync) |
b2e93b9e EF |
26 | #:use-module ((guix licenses) #:prefix license:) |
27 | #:use-module (guix build-system cmake) | |
1b029025 | 28 | #:use-module (guix build-system gnu) |
47f92fbb | 29 | #:use-module (guix build-system go) |
fe84a00f | 30 | #:use-module (guix build-system meson) |
b2e93b9e | 31 | #:use-module (guix download) |
fe84a00f | 32 | #:use-module (guix git-download) |
b2e93b9e | 33 | #:use-module (guix packages) |
6563d58c | 34 | #:use-module (gnu packages) |
fe84a00f | 35 | #:use-module (gnu packages acl) |
1b029025 JK |
36 | #:use-module (gnu packages adns) |
37 | #:use-module (gnu packages autotools) | |
2523691a | 38 | #:use-module (gnu packages check) |
b2e93b9e | 39 | #:use-module (gnu packages compression) |
1b029025 | 40 | #:use-module (gnu packages crypto) |
fe84a00f | 41 | #:use-module (gnu packages curl) |
3e67182f JK |
42 | #:use-module (gnu packages documentation) |
43 | #:use-module (gnu packages glib) | |
47f92fbb | 44 | #:use-module (gnu packages golang) |
1b029025 | 45 | #:use-module (gnu packages image) |
b2e93b9e | 46 | #:use-module (gnu packages linux) |
7ee557a7 | 47 | #:use-module (gnu packages lua) |
1b029025 | 48 | #:use-module (gnu packages pcre) |
b2e93b9e EF |
49 | #:use-module (gnu packages perl) |
50 | #:use-module (gnu packages pkg-config) | |
b2e93b9e | 51 | #:use-module (gnu packages qt) |
1b029025 | 52 | #:use-module (gnu packages readline) |
fe84a00f LC |
53 | #:use-module (gnu packages rsync) |
54 | #:use-module (gnu packages selinux) | |
9d0c291e | 55 | #:use-module (gnu packages sphinx) |
cd0322a3 | 56 | #:use-module (gnu packages sqlite) |
b2e93b9e EF |
57 | #:use-module (gnu packages tls)) |
58 | ||
1b029025 JK |
59 | (define-public megacmd |
60 | (package | |
61 | (name "megacmd") | |
62 | (version "1.1.0") | |
63 | (source | |
64 | (origin | |
65 | (method git-fetch) | |
66 | (uri (git-reference | |
b0e7b699 | 67 | (url "https://github.com/meganz/MEGAcmd") |
1b029025 JK |
68 | (commit (string-append version "_Linux")) |
69 | (recursive? #t))) | |
70 | (sha256 | |
71 | (base32 | |
72 | "004j8m3xs6slx03g2g6wzr97myl2v3zc09wxnfar5c62a625pd53")) | |
73 | (file-name (git-file-name name version)))) | |
74 | (build-system gnu-build-system) | |
75 | ;; XXX: Disabling tests because they depend on libgtest.la from googletest, | |
76 | ;; which is not installed for unclear reasons. | |
77 | (arguments | |
78 | `(#:tests? #f | |
79 | #:configure-flags '("--with-pcre"))) | |
80 | (native-inputs | |
81 | `(("autoconf" ,autoconf) | |
82 | ("automake" ,automake) | |
83 | ("libtool" ,libtool))) | |
84 | (inputs | |
85 | `(("c-ares" ,c-ares) | |
86 | ("crypto++" ,crypto++) | |
87 | ("curl" ,curl) | |
88 | ("freeimage" ,freeimage) | |
89 | ("gtest" ,googletest) | |
90 | ("openssl" ,openssl) | |
91 | ("pcre" ,pcre) | |
92 | ("readline" ,readline) | |
93 | ("sodium" ,libsodium) | |
94 | ("sqlite3" ,sqlite) | |
95 | ("zlib" ,zlib))) | |
96 | (home-page "https://mega.nz/cmd") | |
97 | (synopsis | |
98 | "Command Line Interactive and Scriptable Application to access mega.nz") | |
99 | (description "MEGAcmd provides non UI access to MEGA services. It intends | |
100 | to offer all the functionality of a MEGA account via commands. It features | |
101 | synchronization, backup of local folders into a MEGA account and a | |
3e67182f JK |
102 | webdav/streaming server. |
103 | ||
104 | See also: megatools, a third-party alternative more commonly packaged in other | |
105 | distributions.") | |
1b029025 JK |
106 | (license (list license:bsd-2 license:gpl3+)))) |
107 | ||
3e67182f JK |
108 | (define-public megatools |
109 | (package | |
110 | (name "megatools") | |
111 | (version "1.10.2") | |
112 | (source | |
113 | (origin | |
114 | (method url-fetch) | |
115 | (uri (string-append "https://megatools.megous.com/builds/megatools-" | |
116 | version ".tar.gz")) | |
117 | (sha256 | |
118 | (base32 | |
119 | "12n32w5mqvpk0hvh9yg9qkj9i0g2wp7jp9rq28bnqs94iv3897hp")))) | |
120 | (build-system gnu-build-system) | |
121 | (native-inputs | |
122 | `(("pkg-config" ,pkg-config) | |
123 | ;; For documentation | |
124 | ("asciidoc" ,asciidoc))) | |
125 | (inputs | |
126 | `(("curl" ,curl) | |
127 | ("glib" ,glib) | |
128 | ("openssl" ,openssl))) | |
129 | (home-page "https://megatools.megous.com/") | |
130 | (synopsis "Command line client application for mega.nz") | |
131 | (description "Megatools is a collection of programs for accessing the mega.nz service | |
132 | from the command line. | |
133 | ||
134 | Megatools allow you to copy individual files as well as entire directory trees to and from | |
135 | the cloud. You can also perform streaming downloads for example to preview videos and | |
136 | audio files, without needing to download the entire file first. | |
137 | ||
138 | Megatools are robust and optimized for fast operation - as fast as Mega servers allow. | |
139 | Memory requirements and CPU utilization are kept at minimum. | |
140 | ||
141 | See also: megacmd, the official tool set by MEGA.") | |
142 | (license license:gpl2))) | |
143 | ||
b2e93b9e EF |
144 | (define-public owncloud-client |
145 | (package | |
146 | (name "owncloud-client") | |
b6f69340 | 147 | (version "2.5.3.11470") |
b2e93b9e EF |
148 | (source |
149 | (origin | |
150 | (method url-fetch) | |
151 | (uri (string-append "https://download.owncloud.com/desktop/stable/" | |
152 | "owncloudclient-" version ".tar.xz")) | |
153 | (sha256 | |
b6f69340 | 154 | (base32 "0cznis8qadsnlgm046lxn8vmbxli6zp4b8nk93n53mkfxlcw355n")) |
6563d58c | 155 | (patches (search-patches "owncloud-disable-updatecheck.patch")) |
5fc4df0c EF |
156 | (modules '((guix build utils))) |
157 | (snippet | |
158 | '(begin | |
e718ce14 | 159 | ;; libcrashreporter-qt has its own bundled dependencies |
5fc4df0c | 160 | (delete-file-recursively "src/3rdparty/libcrashreporter-qt") |
5fc4df0c | 161 | (delete-file-recursively "src/3rdparty/sqlite3") |
e718ce14 | 162 | ;; qprogessindicator, qlockedfile, qtokenizer and |
5fc4df0c EF |
163 | ;; qtsingleapplication have not yet been packaged, but all are |
164 | ;; explicitly used from the 3rdparty folder during build. | |
165 | ;; We can also remove the macgoodies folder | |
6cbee49d MW |
166 | (delete-file-recursively "src/3rdparty/qtmacgoodies") |
167 | #t)))) | |
b2e93b9e EF |
168 | (build-system cmake-build-system) |
169 | (arguments | |
170 | `(#:phases | |
171 | (modify-phases %standard-phases | |
2523691a | 172 | (add-after 'unpack 'delete-failing-tests |
be58ffa4 | 173 | ;; "Could not create autostart folder" |
2523691a EF |
174 | (lambda _ |
175 | (substitute* "test/CMakeLists.txt" | |
2523691a EF |
176 | (("owncloud_add_test\\(Utility \"\"\\)" test) |
177 | (string-append "#" test))) | |
2b371f4d EF |
178 | #t)) |
179 | (add-after 'unpack 'dont-embed-store-path | |
180 | (lambda _ | |
181 | (substitute* "src/common/utility_unix.cpp" | |
182 | (("QCoreApplication::applicationFilePath\\()") "\"owncloud\"")) | |
183 | #t)) | |
184 | (delete 'patch-dot-desktop-files)) | |
e718ce14 EF |
185 | #:configure-flags '("-DUNIT_TESTING=ON" |
186 | ;; build without qtwebkit, which causes the | |
187 | ;; package to FTBFS while looking for QWebView. | |
188 | "-DNO_SHIBBOLETH=1"))) | |
2523691a EF |
189 | (native-inputs |
190 | `(("cmocka" ,cmocka) | |
191 | ("perl" ,perl) | |
192 | ("pkg-config" ,pkg-config) | |
193 | ("qtlinguist" ,qttools))) | |
b2e93b9e | 194 | (inputs |
e718ce14 | 195 | `(("qtbase" ,qtbase) |
b2e93b9e | 196 | ("qtkeychain" ,qtkeychain) |
b2e93b9e EF |
197 | ("sqlite" ,sqlite) |
198 | ("zlib" ,zlib))) | |
199 | (home-page "https://owncloud.org") | |
200 | (synopsis "Folder synchronization with an ownCloud server") | |
201 | (description "The ownCloudSync system lets you always have your latest | |
202 | files wherever you are. Just specify one or more folders on the local machine | |
203 | to and a server to synchronize to. You can configure more computers to | |
204 | synchronize to the same server and any change to the files on one computer will | |
205 | silently and reliably flow across to every other.") | |
206 | (license license:gpl2+))) | |
cf3504c6 EF |
207 | |
208 | (define-public qsyncthingtray | |
209 | (package | |
210 | (name "qsyncthingtray") | |
dc05f652 | 211 | (version "0.5.8") |
cf3504c6 EF |
212 | (source |
213 | (origin | |
afbf9763 EF |
214 | (method git-fetch) |
215 | (uri (git-reference | |
216 | (url "https://github.com/sieren/QSyncthingTray") | |
217 | (commit version))) | |
218 | (file-name (git-file-name name version)) | |
cf3504c6 EF |
219 | (sha256 |
220 | (base32 | |
afbf9763 | 221 | "1n9g4j7qznvg9zl6x163pi9f7wsc3x6q76i33psnm7x2v1i22x5w")))) |
cf3504c6 EF |
222 | (build-system cmake-build-system) |
223 | (arguments | |
224 | `(#:configure-flags '("-DQST_BUILD_WEBKIT=1") | |
225 | #:phases | |
226 | (modify-phases %standard-phases | |
227 | ;; The program is meant to be run from the git repo or source tarball. | |
228 | (replace 'install | |
229 | (lambda* (#:key outputs #:allow-other-keys) | |
230 | (let* ((out (assoc-ref outputs "out")) | |
231 | (bin (string-append out "/bin"))) | |
232 | (install-file "QSyncthingTray" bin) | |
afbf9763 EF |
233 | (mkdir-p (string-append out "/share/pixmaps")) |
234 | (copy-file "../source/resources/images/Icon1024.png" | |
235 | (string-append | |
236 | out "/share/pixmaps/QSyncthingTray.png")) | |
cf3504c6 EF |
237 | #t)))) |
238 | #:tests? #f)) ; no test target | |
239 | (inputs | |
240 | `(("qtbase" ,qtbase) | |
241 | ("qtwebkit" ,qtwebkit))) | |
242 | (home-page "https://github.com/sieren/QSyncthingTray") | |
243 | (synopsis "Traybar Application for Syncthing") | |
244 | (description | |
245 | "A traybar application for syncthing. | |
246 | @enumerate | |
247 | @item Shows number of connections at a glance. | |
248 | @item Traffic statistics about incoming, outgoing and total throughput. | |
249 | @item Launches Syncthing and Syncthing-iNotifier if specified. | |
250 | @item Quickly pause Syncthing with one click. | |
251 | @item Last Synced Files - Quickly see the recently synchronised files and open | |
252 | their folder. | |
253 | @item Quick Access to all shared folders. | |
254 | @item Presents Syncthing UI in a separate view instead of using the browser. | |
255 | @item Supports authenticated HTTPS connections. | |
256 | @item Uses System Notifications about current connection status. | |
257 | @item Toggle for monochrome icon. | |
258 | @end enumerate\n") | |
259 | (license license:lgpl3+))) | |
7ee557a7 RW |
260 | |
261 | (define-public lsyncd | |
262 | (package | |
263 | (name "lsyncd") | |
9358ae8a | 264 | (version "2.2.2") |
7ee557a7 RW |
265 | (source |
266 | (origin | |
836931a5 TGR |
267 | (method git-fetch) |
268 | (uri (git-reference | |
b0e7b699 | 269 | (url "https://github.com/axkibe/lsyncd") |
836931a5 TGR |
270 | (commit (string-append "release-" version)))) |
271 | (file-name (git-file-name name version)) | |
7ee557a7 | 272 | (sha256 |
836931a5 | 273 | (base32 "1q2ixp52r96ckghgmxdbms6xrq8dbziimp8gmgzqfq4lk1v1w80y")))) |
7ee557a7 RW |
274 | (build-system cmake-build-system) |
275 | (arguments | |
276 | `(;; The "tests" target is broken and assumes that tests are run in the | |
277 | ;; root directory. | |
278 | #:tests? #f | |
279 | #:test-target "tests" | |
280 | #:phases | |
281 | (modify-phases %standard-phases | |
d0d54a61 TGR |
282 | (add-after 'unpack 'search-$PATH-for-binaries |
283 | ;; lsyncd requires and hard-codes absolute file names to binaries. | |
284 | ;; Make it fall back to searching $PATH for relative file names. | |
285 | (lambda _ | |
286 | (substitute* "lsyncd.c" | |
287 | (("execv\\(") "execvp(")) | |
288 | (substitute* (list "lsyncd.lua" | |
289 | "default-direct.lua" | |
290 | "default-rsync.lua" | |
291 | "default-rsyncssh.lua") | |
292 | (("(|/usr)/bin/") "")) | |
293 | #t)) | |
7ee557a7 | 294 | (replace 'install |
d0d54a61 | 295 | ;; No install target. |
7ee557a7 RW |
296 | (lambda* (#:key outputs #:allow-other-keys) |
297 | (let* ((out (assoc-ref outputs "out")) | |
298 | (bin (string-append out "/bin")) | |
299 | (man (string-append out "/share/man/man1"))) | |
300 | (install-file "lsyncd" bin) | |
836931a5 | 301 | (install-file "../source/doc/manpage/lsyncd.1" man) |
7ee557a7 RW |
302 | #t)))))) |
303 | (native-inputs | |
304 | `(("lua" ,lua-5.2))) | |
305 | (home-page "https://github.com/axkibe/lsyncd") | |
306 | (synopsis "Synchronize local directories with remote targets") | |
307 | (description "Lsyncd watches a local directory trees event monitor | |
308 | interface (inotify or fsevents). It aggregates and combines events for a few | |
309 | seconds and then spawns one (or more) process(es) to synchronize the changes. | |
310 | By default this is rsync, which must be installed on all source and target | |
311 | machines. Lsyncd is thus a light-weight live mirror solution that is | |
162a1374 TGR |
312 | comparatively easy to install not requiring new file systems or block devices |
313 | and does not hamper local file system performance.") | |
7ee557a7 | 314 | (license license:gpl2+))) |
fe84a00f LC |
315 | |
316 | (define-public casync | |
317 | (package | |
318 | (name "casync") | |
319 | (version "2") | |
320 | (home-page "https://github.com/systemd/casync/") | |
321 | (source (origin | |
322 | (method git-fetch) | |
323 | (uri (git-reference | |
324 | (url home-page) | |
325 | (commit (string-append "v" version)))) | |
326 | (sha256 | |
327 | (base32 | |
328 | "0znkp3fcksrykcsv06y2mjvf2lbwmin25snmvfa8i5qfm3f4rm88")) | |
e1f79127 LC |
329 | (file-name (string-append name "-" version "-checkout")) |
330 | (patches (search-patches "casync-renameat2-declaration.patch")))) | |
fe84a00f LC |
331 | (build-system meson-build-system) |
332 | (native-inputs | |
333 | `(("pkg-config" ,pkg-config) | |
334 | ("python-sphinx" ,python-sphinx) | |
335 | ("rsync" ,rsync))) ;for tests | |
336 | (inputs | |
337 | `(("xz" ,xz) ;for liblzma | |
ec0de9d8 | 338 | ("zstd" ,zstd "lib") |
fe84a00f LC |
339 | ("curl" ,curl) |
340 | ("acl" ,acl) | |
341 | ("libselinux" ,libselinux) | |
342 | ("fuse" ,fuse) | |
343 | ("openssl" ,openssl) | |
344 | ("zlib" ,zlib))) | |
345 | (synopsis "File synchronization and backup system") | |
346 | (description | |
347 | "casync is a @dfn{content-addressable data synchronizer} that can be used | |
348 | as the basis of a backup system. It is: | |
349 | ||
350 | @itemize | |
351 | @item A combination of the rsync algorithm and content-addressable storage; | |
352 | @item An efficient way to store and retrieve multiple related versions of | |
353 | large file systems or directory trees; | |
354 | @item An efficient way to deliver and update OS, VM, IoT and container images | |
355 | over the Internet in an HTTP and CDN friendly way; | |
356 | @item An efficient backup system. | |
357 | @end itemize\n") | |
358 | (license license:lgpl2.1+))) | |
47f92fbb NG |
359 | |
360 | (define-public rclone | |
361 | (package | |
362 | (name "rclone") | |
ccbf5f62 | 363 | (version "1.52.2") |
dcdc3315 TGR |
364 | (source |
365 | (origin | |
366 | (method url-fetch) | |
d3a8dd2d NG |
367 | (uri (string-append "https://github.com/rclone/rclone/releases/download/" |
368 | "v" version "/rclone-v" version ".tar.gz")) | |
dcdc3315 | 369 | (sha256 |
ccbf5f62 | 370 | (base32 "1y0ysdbqqb1dj8daziwwhz531c7kfr7f9fsvc7xyg4ysppz1qxfq")))) |
47f92fbb NG |
371 | ;; FIXME: Rclone bundles some libraries Guix already provides. Need to |
372 | ;; un-bundle them. | |
373 | (build-system go-build-system) | |
374 | (arguments | |
d3a8dd2d | 375 | '(#:import-path "github.com/rclone/rclone" |
811b907d | 376 | #:install-source? #f)) |
47f92fbb NG |
377 | (synopsis "@code{rsync} for cloud storage") |
378 | (description "@code{Rclone} is a command line program to sync files and | |
379 | directories to and from different cloud storage providers. | |
380 | ||
381 | Features include: | |
382 | @itemize | |
383 | @item MD5/SHA1 hashes checked at all times for file integrity | |
384 | @item Timestamps preserved on files | |
385 | @item Partial syncs supported on a whole file basis | |
386 | @item Copy mode to just copy new/changed files | |
387 | @item Sync (one way) mode to make a directory identical | |
388 | @item Check mode to check for file hash equality | |
389 | @item Can sync to and from network, e.g., two different cloud accounts | |
390 | @item Optional encryption (Crypt) | |
391 | @item Optional cache (Cache) | |
392 | @item Optional FUSE mount (rclone mount) | |
393 | @end itemize") | |
394 | (home-page "https://rclone.org/") | |
395 | (license license:expat))) |