Commit | Line | Data |
---|---|---|
b2e93b9e | 1 | ;;; GNU Guix --- Functional package management for GNU |
9f170682 | 2 | ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 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> |
8784b52a | 5 | ;;; Copyright © 2018, 2021 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> |
061256da | 9 | ;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at> |
b2e93b9e EF |
10 | ;;; |
11 | ;;; This file is part of GNU Guix. | |
12 | ;;; | |
13 | ;;; GNU Guix is free software; you can redistribute it and/or modify it | |
14 | ;;; under the terms of the GNU General Public License as published by | |
15 | ;;; the Free Software Foundation; either version 3 of the License, or (at | |
16 | ;;; your option) any later version. | |
17 | ;;; | |
18 | ;;; GNU Guix is distributed in the hope that it will be useful, but | |
19 | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
20 | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
21 | ;;; GNU General Public License for more details. | |
22 | ;;; | |
23 | ;;; You should have received a copy of the GNU General Public License | |
24 | ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. | |
25 | ||
760d6066 | 26 | (define-module (gnu packages sync) |
b2e93b9e EF |
27 | #:use-module ((guix licenses) #:prefix license:) |
28 | #:use-module (guix build-system cmake) | |
061256da | 29 | #:use-module (guix build-system copy) |
1b029025 | 30 | #:use-module (guix build-system gnu) |
47f92fbb | 31 | #:use-module (guix build-system go) |
fe84a00f | 32 | #:use-module (guix build-system meson) |
82a2f182 | 33 | #:use-module (guix build-system qt) |
b2e93b9e | 34 | #:use-module (guix download) |
fe84a00f | 35 | #:use-module (guix git-download) |
b2e93b9e | 36 | #:use-module (guix packages) |
6563d58c | 37 | #:use-module (gnu packages) |
fe84a00f | 38 | #:use-module (gnu packages acl) |
1b029025 JK |
39 | #:use-module (gnu packages adns) |
40 | #:use-module (gnu packages autotools) | |
2523691a | 41 | #:use-module (gnu packages check) |
b2e93b9e | 42 | #:use-module (gnu packages compression) |
1b029025 | 43 | #:use-module (gnu packages crypto) |
fe84a00f | 44 | #:use-module (gnu packages curl) |
3e67182f | 45 | #:use-module (gnu packages documentation) |
82a2f182 | 46 | #:use-module (gnu packages freedesktop) |
3e67182f | 47 | #:use-module (gnu packages glib) |
82a2f182 | 48 | #:use-module (gnu packages gnome) |
47f92fbb | 49 | #:use-module (gnu packages golang) |
82a2f182 | 50 | #:use-module (gnu packages graphviz) |
1b029025 | 51 | #:use-module (gnu packages image) |
bf645c7f | 52 | #:use-module (gnu packages kde-frameworks) |
b2e93b9e | 53 | #:use-module (gnu packages linux) |
7ee557a7 | 54 | #:use-module (gnu packages lua) |
061256da | 55 | #:use-module (gnu packages ocaml) |
1b029025 | 56 | #:use-module (gnu packages pcre) |
b2e93b9e EF |
57 | #:use-module (gnu packages perl) |
58 | #:use-module (gnu packages pkg-config) | |
82a2f182 RG |
59 | #:use-module (gnu packages python) |
60 | #:use-module (gnu packages python-xyz) | |
b2e93b9e | 61 | #:use-module (gnu packages qt) |
1b029025 | 62 | #:use-module (gnu packages readline) |
fe84a00f | 63 | #:use-module (gnu packages rsync) |
82a2f182 | 64 | #:use-module (gnu packages ruby) |
fe84a00f | 65 | #:use-module (gnu packages selinux) |
061256da | 66 | #:use-module (gnu packages shells) |
9d0c291e | 67 | #:use-module (gnu packages sphinx) |
cd0322a3 | 68 | #:use-module (gnu packages sqlite) |
b2e93b9e EF |
69 | #:use-module (gnu packages tls)) |
70 | ||
82a2f182 RG |
71 | (define-public nextcloud-client |
72 | (package | |
73 | (name "nextcloud-client") | |
74 | (version "3.1.3") | |
75 | (source | |
76 | (origin | |
77 | (method git-fetch) | |
78 | (uri | |
79 | (git-reference | |
80 | (url "https://github.com/nextcloud/desktop") | |
81 | (commit (string-append "v" version)))) | |
82 | (file-name | |
83 | (git-file-name name version)) | |
84 | (sha256 | |
85 | (base32 "15ymk3gvfmgwzmqbhlw7jjy9y65ib3391h1dlmpll65iaj2miajk")) | |
86 | (modules '((guix build utils) | |
87 | (ice-9 ftw) | |
88 | (srfi srfi-1))) | |
89 | (snippet | |
90 | '(begin | |
91 | ;; Not available in Guix. | |
92 | (let* ((keep '("QProgressIndicator" "qtokenizer"))) | |
93 | (with-directory-excursion "src/3rdparty" | |
94 | (for-each delete-file-recursively | |
95 | (lset-difference string=? | |
96 | (scandir ".") | |
97 | (cons* "." ".." keep))))) | |
98 | (with-directory-excursion "src/gui" | |
99 | (substitute* "CMakeLists.txt" | |
100 | ;; Remove references of deleted 3rdparties. | |
101 | (("[ \t]*\\.\\./3rdparty/qtlockedfile/?.*\\.cpp") | |
102 | "") | |
103 | (("[ \t]*\\.\\./3rdparty/qtsingleapplication/?.*\\.cpp") | |
104 | "") | |
105 | (("[ \t]*\\.\\./3rdparty/kmessagewidget/?.*\\.cpp") | |
106 | "") | |
107 | (("[ \t]*list\\(APPEND 3rdparty_SRC \\.\\./3rdparty/?.*\\)") | |
108 | "") | |
109 | (("\\$\\{CMAKE_SOURCE_DIR\\}/src/3rdparty/qtlockedfile") | |
110 | "") | |
111 | (("\\$\\{CMAKE_SOURCE_DIR\\}/src/3rdparty/qtsingleapplication") | |
112 | "") | |
113 | (("\\$\\{CMAKE_SOURCE_DIR\\}/src/3rdparty/kmessagewidget") | |
114 | ;; For this, we rely on build inputs, so let's just replace | |
115 | ;; them by an autoconf-style variable. | |
116 | "@kwidgetsaddons@") | |
117 | ;; Expand libraries, that used to be statically linked, but | |
118 | ;; no longer are post-vendoring. | |
119 | (("\\$\\{synclib_NAME\\}") | |
120 | (string-append "${synclib_NAME} " | |
121 | "QtSolutions_LockedFile " | |
122 | "QtSolutions_SingleApplication " | |
123 | "KF5WidgetsAddons"))) | |
124 | ;; Fix compatibility with QtSingleApplication from QtSolutions. | |
125 | (substitute* '("application.h" "application.cpp") | |
126 | (("SharedTools::QtSingleApplication") | |
127 | "QtSingleApplication") | |
128 | (("slotParseMessage\\(const QString &(msg)?.*\\)") | |
129 | "slotParseMessage(const QString &msg)"))) | |
130 | #t)))) | |
131 | (build-system qt-build-system) | |
132 | (arguments | |
133 | `(#:configure-flags | |
134 | (list | |
135 | "-DUNIT_TESTING=ON" | |
136 | ;; Upstream Bug: https://github.com/nextcloud/desktop/issues/2885 | |
137 | "-DNO_SHIBBOLETH=ON") | |
138 | #:imported-modules | |
139 | ((guix build glib-or-gtk-build-system) | |
140 | ,@%qt-build-system-modules) | |
141 | #:modules | |
142 | (((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:) | |
143 | (guix build qt-build-system) | |
144 | (guix build utils)) | |
145 | #:phases | |
146 | (modify-phases %standard-phases | |
147 | (add-after 'unpack 'patch-cmake | |
148 | (lambda* (#:key inputs #:allow-other-keys) | |
149 | ;; Patch install directory for dbus service files. | |
150 | (substitute* "shell_integration/libcloudproviders/CMakeLists.txt" | |
151 | (("PKGCONFIG_GETVAR\\(.+ _install_dir\\)") | |
152 | (string-append "set(_install_dir \"${CMAKE_INSTALL_PREFIX}" | |
153 | "/share/dbus-1/services\")"))) | |
154 | (substitute* "shell_integration/dolphin/CMakeLists.txt" | |
155 | ;; Make sure, that Qt modules are installed under $prefix. | |
156 | (("ON CACHE") "OFF CACHE")) | |
157 | (substitute* "src/gui/CMakeLists.txt" | |
158 | (("@kwidgetsaddons@") | |
159 | (string-append (assoc-ref inputs "kwidgetsaddons") | |
160 | "/include/KF5/KWidgetsAddons/"))) | |
161 | #t)) | |
162 | (add-before 'check 'pre-check | |
163 | (lambda _ | |
164 | ;; Tests write to $HOME. | |
165 | (setenv "HOME" (getcwd)) | |
166 | #t)) | |
167 | (add-after 'install 'glib-or-gtk-compile-schemas | |
168 | (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas)) | |
169 | (add-after 'glib-or-gtk-compile-schemas 'glib-or-gtk-wrap | |
170 | (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))))) | |
171 | (native-inputs | |
172 | `(("cmocka" ,cmocka) | |
173 | ("dot" ,graphviz) | |
174 | ("doxygen" ,doxygen) | |
175 | ("extra-cmake-modules" ,extra-cmake-modules) | |
176 | ("glib:bin" ,glib "bin") | |
177 | ("perl" ,perl) | |
178 | ("pkg-config" ,pkg-config) | |
179 | ("python" ,python-wrapper) | |
180 | ("qttools" ,qttools) | |
181 | ("ruby" ,ruby))) | |
182 | (inputs | |
183 | `(("appstream" ,appstream) | |
184 | ("desktop-file-utils" ,desktop-file-utils) | |
185 | ("glib" ,glib) | |
186 | ("kconfig" ,kconfig) | |
187 | ("kcoreaddons" ,kcoreaddons) | |
188 | ("kio" ,kio) | |
189 | ("kjs" ,kjs) | |
190 | ("kwidgetsaddons" ,kwidgetsaddons) | |
191 | ("libcloudproviders" ,libcloudproviders) | |
192 | ("libzip" ,libzip) | |
193 | ("openssl" ,openssl) | |
194 | ("python-nautilus" ,python-nautilus) | |
195 | ("qtbase" ,qtbase) | |
196 | ("qtdeclarative" ,qtdeclarative) | |
197 | ("qtgraphicaleffects" ,qtgraphicaleffects) | |
198 | ("qtkeychain" ,qtkeychain) | |
199 | ("qtquickcontrols2" ,qtquickcontrols2) | |
200 | ("qtsolutions" ,qtsolutions) | |
201 | ("qtsvg" ,qtsvg) | |
202 | ("qtwebchannel" ,qtwebchannel) | |
203 | ("qtwebsockets" ,qtwebsockets) | |
204 | ("qtwebkit" ,qtwebkit) | |
205 | ("sqlite" ,sqlite) | |
206 | ("xdg-utils" ,xdg-utils) | |
207 | ("zlib" ,zlib))) | |
208 | (propagated-inputs | |
209 | `(("qtwebengine" ,qtwebengine))) | |
210 | (synopsis "Desktop sync client for Nextcloud") | |
211 | (description "Nextcloud-Desktop is a tool to synchronize files from | |
212 | Nextcloud Server with your computer.") | |
213 | (home-page "https://nextcloud.com") | |
214 | (license (list license:expat ; QProgressIndicator | |
215 | license:lgpl2.1+ ; qtokenizer | |
216 | license:gpl2+)))) | |
217 | ||
1b029025 JK |
218 | (define-public megacmd |
219 | (package | |
220 | (name "megacmd") | |
221 | (version "1.1.0") | |
222 | (source | |
223 | (origin | |
224 | (method git-fetch) | |
225 | (uri (git-reference | |
b0e7b699 | 226 | (url "https://github.com/meganz/MEGAcmd") |
1b029025 JK |
227 | (commit (string-append version "_Linux")) |
228 | (recursive? #t))) | |
229 | (sha256 | |
230 | (base32 | |
231 | "004j8m3xs6slx03g2g6wzr97myl2v3zc09wxnfar5c62a625pd53")) | |
232 | (file-name (git-file-name name version)))) | |
233 | (build-system gnu-build-system) | |
234 | ;; XXX: Disabling tests because they depend on libgtest.la from googletest, | |
235 | ;; which is not installed for unclear reasons. | |
236 | (arguments | |
237 | `(#:tests? #f | |
238 | #:configure-flags '("--with-pcre"))) | |
239 | (native-inputs | |
240 | `(("autoconf" ,autoconf) | |
241 | ("automake" ,automake) | |
242 | ("libtool" ,libtool))) | |
243 | (inputs | |
244 | `(("c-ares" ,c-ares) | |
245 | ("crypto++" ,crypto++) | |
246 | ("curl" ,curl) | |
247 | ("freeimage" ,freeimage) | |
248 | ("gtest" ,googletest) | |
249 | ("openssl" ,openssl) | |
250 | ("pcre" ,pcre) | |
251 | ("readline" ,readline) | |
252 | ("sodium" ,libsodium) | |
253 | ("sqlite3" ,sqlite) | |
254 | ("zlib" ,zlib))) | |
255 | (home-page "https://mega.nz/cmd") | |
256 | (synopsis | |
257 | "Command Line Interactive and Scriptable Application to access mega.nz") | |
258 | (description "MEGAcmd provides non UI access to MEGA services. It intends | |
259 | to offer all the functionality of a MEGA account via commands. It features | |
260 | synchronization, backup of local folders into a MEGA account and a | |
3e67182f JK |
261 | webdav/streaming server. |
262 | ||
263 | See also: megatools, a third-party alternative more commonly packaged in other | |
264 | distributions.") | |
1b029025 JK |
265 | (license (list license:bsd-2 license:gpl3+)))) |
266 | ||
3e67182f JK |
267 | (define-public megatools |
268 | (package | |
269 | (name "megatools") | |
9f170682 | 270 | (version "1.10.3") |
3e67182f JK |
271 | (source |
272 | (origin | |
273 | (method url-fetch) | |
274 | (uri (string-append "https://megatools.megous.com/builds/megatools-" | |
275 | version ".tar.gz")) | |
276 | (sha256 | |
277 | (base32 | |
9f170682 | 278 | "1nwbalc54iz6616liyxfalf5yafwx0iv6cmqgvg4kz9khqscmhcd")))) |
3e67182f | 279 | (build-system gnu-build-system) |
773ba8ae EF |
280 | (arguments |
281 | '(#:phases | |
282 | (modify-phases %standard-phases | |
283 | (add-after 'install 'install-completions | |
284 | (lambda* (#:key outputs #:allow-other-keys) | |
285 | (install-file "contrib/bash-completion/megatools" | |
286 | (string-append (assoc-ref outputs "out") | |
287 | "/etc/bash_completion.d")) | |
288 | #t))))) | |
3e67182f JK |
289 | (native-inputs |
290 | `(("pkg-config" ,pkg-config) | |
291 | ;; For documentation | |
292 | ("asciidoc" ,asciidoc))) | |
293 | (inputs | |
294 | `(("curl" ,curl) | |
295 | ("glib" ,glib) | |
296 | ("openssl" ,openssl))) | |
297 | (home-page "https://megatools.megous.com/") | |
298 | (synopsis "Command line client application for mega.nz") | |
299 | (description "Megatools is a collection of programs for accessing the mega.nz service | |
300 | from the command line. | |
301 | ||
302 | Megatools allow you to copy individual files as well as entire directory trees to and from | |
303 | the cloud. You can also perform streaming downloads for example to preview videos and | |
304 | audio files, without needing to download the entire file first. | |
305 | ||
306 | Megatools are robust and optimized for fast operation - as fast as Mega servers allow. | |
307 | Memory requirements and CPU utilization are kept at minimum. | |
308 | ||
309 | See also: megacmd, the official tool set by MEGA.") | |
310 | (license license:gpl2))) | |
311 | ||
b2e93b9e EF |
312 | (define-public owncloud-client |
313 | (package | |
314 | (name "owncloud-client") | |
8eb9e759 | 315 | (version "2.7.6.3261") |
b2e93b9e EF |
316 | (source |
317 | (origin | |
318 | (method url-fetch) | |
bf645c7f JL |
319 | (uri (string-append "https://download.owncloud.com/desktop/ownCloud/stable/" |
320 | version "/source/ownCloud-" version ".tar.xz")) | |
b2e93b9e | 321 | (sha256 |
8eb9e759 | 322 | (base32 "19jjlhbzhy4v5h1wj5a87ismxq2p7avb2bb4lfbh2rvl01r432vy")) |
bf645c7f JL |
323 | (patches (search-patches "owncloud-disable-updatecheck.patch")))) |
324 | ;; TODO: unbundle qprogessindicator, qlockedfile, qtokenizer and | |
325 | ;; qtsingleapplication which have not yet been packaged, but all are | |
326 | ;; explicitly used from the 3rdparty folder during build. | |
b2e93b9e EF |
327 | (build-system cmake-build-system) |
328 | (arguments | |
329 | `(#:phases | |
330 | (modify-phases %standard-phases | |
2523691a | 331 | (add-after 'unpack 'delete-failing-tests |
be58ffa4 | 332 | ;; "Could not create autostart folder" |
2523691a EF |
333 | (lambda _ |
334 | (substitute* "test/CMakeLists.txt" | |
bf645c7f | 335 | (("owncloud_add_test\\(Utility\\)" test) |
2523691a | 336 | (string-append "#" test))) |
2b371f4d EF |
337 | #t)) |
338 | (add-after 'unpack 'dont-embed-store-path | |
339 | (lambda _ | |
340 | (substitute* "src/common/utility_unix.cpp" | |
341 | (("QCoreApplication::applicationFilePath\\()") "\"owncloud\"")) | |
342 | #t)) | |
343 | (delete 'patch-dot-desktop-files)) | |
e718ce14 EF |
344 | #:configure-flags '("-DUNIT_TESTING=ON" |
345 | ;; build without qtwebkit, which causes the | |
346 | ;; package to FTBFS while looking for QWebView. | |
347 | "-DNO_SHIBBOLETH=1"))) | |
2523691a EF |
348 | (native-inputs |
349 | `(("cmocka" ,cmocka) | |
bf645c7f | 350 | ("extra-cmake-modules" ,extra-cmake-modules) |
2523691a EF |
351 | ("perl" ,perl) |
352 | ("pkg-config" ,pkg-config) | |
353 | ("qtlinguist" ,qttools))) | |
b2e93b9e | 354 | (inputs |
e718ce14 | 355 | `(("qtbase" ,qtbase) |
b2e93b9e | 356 | ("qtkeychain" ,qtkeychain) |
b2e93b9e EF |
357 | ("sqlite" ,sqlite) |
358 | ("zlib" ,zlib))) | |
359 | (home-page "https://owncloud.org") | |
360 | (synopsis "Folder synchronization with an ownCloud server") | |
361 | (description "The ownCloudSync system lets you always have your latest | |
362 | files wherever you are. Just specify one or more folders on the local machine | |
363 | to and a server to synchronize to. You can configure more computers to | |
364 | synchronize to the same server and any change to the files on one computer will | |
365 | silently and reliably flow across to every other.") | |
366 | (license license:gpl2+))) | |
cf3504c6 EF |
367 | |
368 | (define-public qsyncthingtray | |
369 | (package | |
370 | (name "qsyncthingtray") | |
dc05f652 | 371 | (version "0.5.8") |
cf3504c6 EF |
372 | (source |
373 | (origin | |
afbf9763 EF |
374 | (method git-fetch) |
375 | (uri (git-reference | |
376 | (url "https://github.com/sieren/QSyncthingTray") | |
377 | (commit version))) | |
378 | (file-name (git-file-name name version)) | |
cf3504c6 EF |
379 | (sha256 |
380 | (base32 | |
afbf9763 | 381 | "1n9g4j7qznvg9zl6x163pi9f7wsc3x6q76i33psnm7x2v1i22x5w")))) |
cf3504c6 EF |
382 | (build-system cmake-build-system) |
383 | (arguments | |
384 | `(#:configure-flags '("-DQST_BUILD_WEBKIT=1") | |
385 | #:phases | |
386 | (modify-phases %standard-phases | |
387 | ;; The program is meant to be run from the git repo or source tarball. | |
388 | (replace 'install | |
389 | (lambda* (#:key outputs #:allow-other-keys) | |
390 | (let* ((out (assoc-ref outputs "out")) | |
391 | (bin (string-append out "/bin"))) | |
392 | (install-file "QSyncthingTray" bin) | |
afbf9763 EF |
393 | (mkdir-p (string-append out "/share/pixmaps")) |
394 | (copy-file "../source/resources/images/Icon1024.png" | |
395 | (string-append | |
396 | out "/share/pixmaps/QSyncthingTray.png")) | |
cf3504c6 EF |
397 | #t)))) |
398 | #:tests? #f)) ; no test target | |
399 | (inputs | |
400 | `(("qtbase" ,qtbase) | |
401 | ("qtwebkit" ,qtwebkit))) | |
402 | (home-page "https://github.com/sieren/QSyncthingTray") | |
403 | (synopsis "Traybar Application for Syncthing") | |
404 | (description | |
405 | "A traybar application for syncthing. | |
406 | @enumerate | |
407 | @item Shows number of connections at a glance. | |
408 | @item Traffic statistics about incoming, outgoing and total throughput. | |
409 | @item Launches Syncthing and Syncthing-iNotifier if specified. | |
410 | @item Quickly pause Syncthing with one click. | |
411 | @item Last Synced Files - Quickly see the recently synchronised files and open | |
412 | their folder. | |
413 | @item Quick Access to all shared folders. | |
414 | @item Presents Syncthing UI in a separate view instead of using the browser. | |
415 | @item Supports authenticated HTTPS connections. | |
416 | @item Uses System Notifications about current connection status. | |
417 | @item Toggle for monochrome icon. | |
418 | @end enumerate\n") | |
419 | (license license:lgpl3+))) | |
7ee557a7 RW |
420 | |
421 | (define-public lsyncd | |
422 | (package | |
423 | (name "lsyncd") | |
9358ae8a | 424 | (version "2.2.2") |
7ee557a7 RW |
425 | (source |
426 | (origin | |
836931a5 TGR |
427 | (method git-fetch) |
428 | (uri (git-reference | |
b0e7b699 | 429 | (url "https://github.com/axkibe/lsyncd") |
836931a5 TGR |
430 | (commit (string-append "release-" version)))) |
431 | (file-name (git-file-name name version)) | |
7ee557a7 | 432 | (sha256 |
836931a5 | 433 | (base32 "1q2ixp52r96ckghgmxdbms6xrq8dbziimp8gmgzqfq4lk1v1w80y")))) |
7ee557a7 RW |
434 | (build-system cmake-build-system) |
435 | (arguments | |
436 | `(;; The "tests" target is broken and assumes that tests are run in the | |
437 | ;; root directory. | |
438 | #:tests? #f | |
439 | #:test-target "tests" | |
440 | #:phases | |
441 | (modify-phases %standard-phases | |
d0d54a61 TGR |
442 | (add-after 'unpack 'search-$PATH-for-binaries |
443 | ;; lsyncd requires and hard-codes absolute file names to binaries. | |
444 | ;; Make it fall back to searching $PATH for relative file names. | |
445 | (lambda _ | |
446 | (substitute* "lsyncd.c" | |
447 | (("execv\\(") "execvp(")) | |
448 | (substitute* (list "lsyncd.lua" | |
449 | "default-direct.lua" | |
450 | "default-rsync.lua" | |
451 | "default-rsyncssh.lua") | |
452 | (("(|/usr)/bin/") "")) | |
453 | #t)) | |
7ee557a7 | 454 | (replace 'install |
d0d54a61 | 455 | ;; No install target. |
7ee557a7 RW |
456 | (lambda* (#:key outputs #:allow-other-keys) |
457 | (let* ((out (assoc-ref outputs "out")) | |
458 | (bin (string-append out "/bin")) | |
459 | (man (string-append out "/share/man/man1"))) | |
460 | (install-file "lsyncd" bin) | |
836931a5 | 461 | (install-file "../source/doc/manpage/lsyncd.1" man) |
7ee557a7 RW |
462 | #t)))))) |
463 | (native-inputs | |
464 | `(("lua" ,lua-5.2))) | |
465 | (home-page "https://github.com/axkibe/lsyncd") | |
466 | (synopsis "Synchronize local directories with remote targets") | |
467 | (description "Lsyncd watches a local directory trees event monitor | |
468 | interface (inotify or fsevents). It aggregates and combines events for a few | |
469 | seconds and then spawns one (or more) process(es) to synchronize the changes. | |
470 | By default this is rsync, which must be installed on all source and target | |
471 | machines. Lsyncd is thus a light-weight live mirror solution that is | |
162a1374 TGR |
472 | comparatively easy to install not requiring new file systems or block devices |
473 | and does not hamper local file system performance.") | |
7ee557a7 | 474 | (license license:gpl2+))) |
fe84a00f | 475 | |
061256da SR |
476 | (define-public usync |
477 | (let ((revision "1") | |
478 | (commit "09a8059a1adc22666d3ecf7872e22e6846c3ac9e")) | |
479 | (package | |
480 | (name "usync") | |
481 | (version (git-version "0" revision commit)) | |
482 | (source | |
483 | (origin | |
484 | (method git-fetch) | |
485 | (uri (git-reference | |
486 | (url "https://github.com/ebzzry/usync") | |
487 | (commit commit))) | |
488 | (file-name (git-file-name name version)) | |
489 | (sha256 | |
490 | (base32 "16i1q8f0jmfd43rb8d70l2b383vr5ib4kh7iq3yd345q7xjz9c2j")))) | |
491 | (build-system copy-build-system) | |
8784b52a LC |
492 | (inputs |
493 | `(("scsh" ,scsh))) | |
061256da | 494 | (propagated-inputs |
8784b52a | 495 | `(("rsync" ,rsync) |
061256da SR |
496 | ("unison" ,unison))) |
497 | (arguments | |
8784b52a LC |
498 | `(#:install-plan '(("usync" "bin/usync")) |
499 | #:phases (modify-phases %standard-phases | |
500 | (add-before 'install 'patch-usync-shebang | |
501 | (lambda _ | |
502 | (substitute* "usync" | |
503 | (("/usr/bin/env scsh") | |
504 | (which "scsh")))))))) | |
061256da SR |
505 | (home-page "https://github.com/ebzzry/usync") |
506 | (synopsis "Command line site-to-site synchronization tool") | |
507 | (description | |
508 | "@command{usync} is a simple site-to-site synchronization program | |
509 | written in @command{scsh}. It makes use of @command{unison} and | |
510 | @command{rsync} for bi- and uni-directional synchronizations.") | |
511 | (license license:expat)))) | |
512 | ||
fe84a00f LC |
513 | (define-public casync |
514 | (package | |
515 | (name "casync") | |
516 | (version "2") | |
517 | (home-page "https://github.com/systemd/casync/") | |
518 | (source (origin | |
519 | (method git-fetch) | |
520 | (uri (git-reference | |
521 | (url home-page) | |
522 | (commit (string-append "v" version)))) | |
523 | (sha256 | |
524 | (base32 | |
525 | "0znkp3fcksrykcsv06y2mjvf2lbwmin25snmvfa8i5qfm3f4rm88")) | |
e1f79127 LC |
526 | (file-name (string-append name "-" version "-checkout")) |
527 | (patches (search-patches "casync-renameat2-declaration.patch")))) | |
fe84a00f LC |
528 | (build-system meson-build-system) |
529 | (native-inputs | |
530 | `(("pkg-config" ,pkg-config) | |
531 | ("python-sphinx" ,python-sphinx) | |
532 | ("rsync" ,rsync))) ;for tests | |
533 | (inputs | |
534 | `(("xz" ,xz) ;for liblzma | |
ec0de9d8 | 535 | ("zstd" ,zstd "lib") |
fe84a00f LC |
536 | ("curl" ,curl) |
537 | ("acl" ,acl) | |
538 | ("libselinux" ,libselinux) | |
539 | ("fuse" ,fuse) | |
540 | ("openssl" ,openssl) | |
541 | ("zlib" ,zlib))) | |
542 | (synopsis "File synchronization and backup system") | |
543 | (description | |
544 | "casync is a @dfn{content-addressable data synchronizer} that can be used | |
545 | as the basis of a backup system. It is: | |
546 | ||
547 | @itemize | |
548 | @item A combination of the rsync algorithm and content-addressable storage; | |
549 | @item An efficient way to store and retrieve multiple related versions of | |
550 | large file systems or directory trees; | |
551 | @item An efficient way to deliver and update OS, VM, IoT and container images | |
552 | over the Internet in an HTTP and CDN friendly way; | |
553 | @item An efficient backup system. | |
554 | @end itemize\n") | |
555 | (license license:lgpl2.1+))) | |
47f92fbb NG |
556 | |
557 | (define-public rclone | |
558 | (package | |
559 | (name "rclone") | |
1a9ebe3b | 560 | (version "1.52.3") |
dcdc3315 TGR |
561 | (source |
562 | (origin | |
563 | (method url-fetch) | |
d3a8dd2d NG |
564 | (uri (string-append "https://github.com/rclone/rclone/releases/download/" |
565 | "v" version "/rclone-v" version ".tar.gz")) | |
dcdc3315 | 566 | (sha256 |
1a9ebe3b | 567 | (base32 "1pdhsxzc5ch2brfylghc602h9ba3x5dshxm3vcaldrgfac0rx0zl")))) |
47f92fbb NG |
568 | ;; FIXME: Rclone bundles some libraries Guix already provides. Need to |
569 | ;; un-bundle them. | |
570 | (build-system go-build-system) | |
571 | (arguments | |
d3a8dd2d | 572 | '(#:import-path "github.com/rclone/rclone" |
811b907d | 573 | #:install-source? #f)) |
47f92fbb NG |
574 | (synopsis "@code{rsync} for cloud storage") |
575 | (description "@code{Rclone} is a command line program to sync files and | |
576 | directories to and from different cloud storage providers. | |
577 | ||
578 | Features include: | |
579 | @itemize | |
580 | @item MD5/SHA1 hashes checked at all times for file integrity | |
581 | @item Timestamps preserved on files | |
582 | @item Partial syncs supported on a whole file basis | |
583 | @item Copy mode to just copy new/changed files | |
584 | @item Sync (one way) mode to make a directory identical | |
585 | @item Check mode to check for file hash equality | |
586 | @item Can sync to and from network, e.g., two different cloud accounts | |
587 | @item Optional encryption (Crypt) | |
588 | @item Optional cache (Cache) | |
589 | @item Optional FUSE mount (rclone mount) | |
590 | @end itemize") | |
591 | (home-page "https://rclone.org/") | |
592 | (license license:expat))) |