syndication.scm 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632
  1. ;;; GNU Guix --- Functional package management for GNU
  2. ;;; Copyright © 2016, 2017, 2019-2023 Efraim Flashner <efraim@flashner.co.il>
  3. ;;; Copyright © 2018, 2019, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
  4. ;;; Copyright © 2020, 2023 Vinicius Monego <monego@posteo.net>
  5. ;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
  6. ;;; Copyright © 2022 Luis Felipe López Acevedo <luis.felipe.la@protonmail.com>
  7. ;;; Copyright © 2022 Liliana Marie Prikler <liliana.prikler@gmail.com>
  8. ;;; Copyright © 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
  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. (define-module (gnu packages syndication)
  25. #:use-module ((guix licenses) #:prefix license:)
  26. #:use-module (guix download)
  27. #:use-module (guix git-download)
  28. #:use-module (guix packages)
  29. #:use-module (guix utils)
  30. #:use-module (guix gexp)
  31. #:use-module (guix build-system cargo)
  32. #:use-module (guix build-system glib-or-gtk)
  33. #:use-module (guix build-system gnu)
  34. #:use-module (guix build-system meson)
  35. #:use-module (guix build-system python)
  36. #:use-module (gnu packages)
  37. #:use-module (gnu packages autotools)
  38. #:use-module (gnu packages base)
  39. #:use-module (gnu packages bash)
  40. #:use-module (gnu packages build-tools)
  41. #:use-module (gnu packages check)
  42. #:use-module (gnu packages cmake)
  43. #:use-module (gnu packages crates-io)
  44. #:use-module (gnu packages curl)
  45. #:use-module (gnu packages documentation)
  46. #:use-module (gnu packages freedesktop)
  47. #:use-module (gnu packages gettext)
  48. #:use-module (gnu packages glib)
  49. #:use-module (gnu packages gnome)
  50. #:use-module (gnu packages gstreamer)
  51. #:use-module (gnu packages gtk)
  52. #:use-module (gnu packages kde-frameworks)
  53. #:use-module (gnu packages ncurses)
  54. #:use-module (gnu packages pkg-config)
  55. #:use-module (gnu packages pretty-print)
  56. #:use-module (gnu packages python)
  57. #:use-module (gnu packages python-check)
  58. #:use-module (gnu packages python-xyz)
  59. #:use-module (gnu packages python-web)
  60. #:use-module (gnu packages qt)
  61. #:use-module (gnu packages ruby)
  62. #:use-module (gnu packages rust)
  63. #:use-module (gnu packages sqlite)
  64. #:use-module (gnu packages time)
  65. #:use-module (gnu packages tls)
  66. #:use-module (gnu packages video)
  67. #:use-module (gnu packages web)
  68. #:use-module (gnu packages webkit)
  69. #:use-module (gnu packages xml)
  70. #:use-module (gnu packages xorg)
  71. #:use-module (srfi srfi-1))
  72. (define-public cawbird
  73. (package
  74. (name "cawbird")
  75. (version "1.4.2")
  76. (source
  77. (origin
  78. (method git-fetch)
  79. (uri (git-reference
  80. (url "https://github.com/IBBoard/cawbird")
  81. (commit (string-append "v"version))))
  82. (file-name (git-file-name name version))
  83. (sha256
  84. (base32 "17575cp5qcgsqf37y3xqg3vr6l2j8bbbkmy2c1l185rxghfacida"))))
  85. (build-system meson-build-system)
  86. (arguments
  87. `(#:glib-or-gtk? #t
  88. #:configure-flags
  89. ;; Cawbirds's default key and secret for OAuth process with twitter.
  90. (list
  91. "-Dconsumer_key_base64=VmY5dG9yRFcyWk93MzJEZmhVdEk5Y3NMOA=="
  92. "-Dconsumer_secret_base64=MThCRXIxbWRESDQ2Y0podzVtVU13SGUyVGlCRXhPb3BFRHhGYlB6ZkpybG5GdXZaSjI=")
  93. #:phases
  94. (modify-phases %standard-phases
  95. (add-after 'unpack 'disable-failing-tests
  96. (lambda _
  97. ;; These tests require networking.
  98. (substitute* "tests/meson.build"
  99. (("[ \t]*.*avatardownload.*$") "")
  100. (("[ \t]*.*filters.*$") "")
  101. (("[ \t]*.*friends.*$") "")
  102. (("[ \t]*.*inlinemediadownloader.*$") "")
  103. (("[ \t]*.*tweetparsing.*$") "")
  104. (("[ \t]*.*usercounter.*$") ""))))
  105. (delete 'check)
  106. (add-after 'install 'custom-check
  107. (lambda* (#:key outputs tests? #:allow-other-keys)
  108. (when tests?
  109. ;; Tests require a running X server.
  110. (system "Xvfb :1 +extension GLX &")
  111. (setenv "DISPLAY" ":1")
  112. ;; Tests write to $HOME.
  113. (setenv "HOME" (getcwd))
  114. ;; Tests look for gsettings-schemas installed by the package.
  115. (setenv "XDG_DATA_DIRS"
  116. (string-append (getenv "XDG_DATA_DIRS")
  117. ":" (assoc-ref outputs "out") "/share"))
  118. (invoke "meson" "test"))))
  119. (add-after 'glib-or-gtk-wrap 'wrap-paths
  120. (lambda* (#:key outputs #:allow-other-keys)
  121. (let* ((out (assoc-ref outputs "out"))
  122. (bin (string-append out "/bin/"))
  123. (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH"))
  124. (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
  125. (wrap-program (string-append bin "cawbird")
  126. `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
  127. `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))))))
  128. (native-inputs
  129. `(("gettext" ,gettext-minimal)
  130. ("glib:bin" ,glib "bin")
  131. ("gobject-introspection" ,gobject-introspection)
  132. ("gtk+:bin" ,gtk+ "bin")
  133. ("pkg-config" ,pkg-config)
  134. ("vala" ,vala)
  135. ("xmllint" ,libxml2)
  136. ("xorg-server" ,xorg-server-for-tests)))
  137. (inputs
  138. `(("glib" ,glib)
  139. ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
  140. ("gspell" ,gspell)
  141. ("gstreamer" ,gstreamer)
  142. ("gst-libav" ,gst-libav)
  143. ("gst-plugins-bad" ,gst-plugins-bad)
  144. ("gst-plugins-base" ,gst-plugins-base)
  145. ("gst-plugins-good" ,gst-plugins-good)
  146. ("gtk+" ,gtk+)
  147. ("json-glib" ,json-glib)
  148. ("liboauth" ,liboauth)
  149. ("libsoup" ,libsoup)
  150. ("rest" ,rest)
  151. ("sqlite" ,sqlite)
  152. ("x11" ,libx11)))
  153. (propagated-inputs
  154. (list dconf))
  155. (synopsis "Client for Twitter")
  156. (description "Cawbird is a Twitter client built with GTK and Vala.
  157. It supports all features except non-mention notifications, polls, threads and
  158. cards.")
  159. (home-page "https://ibboard.co.uk/cawbird/")
  160. (license license:gpl3+)))
  161. (define-public giara
  162. (package
  163. (name "giara")
  164. (version "1.0.1")
  165. (source
  166. (origin
  167. (method git-fetch)
  168. (uri (git-reference
  169. (url "https://gitlab.gnome.org/World/giara")
  170. (commit version)))
  171. (file-name (git-file-name name version))
  172. (sha256
  173. (base32 "00vmfghp9g8yzn2d1xjawz5a8bdwn1jl1k24mjaf4vlvdy4sg9l4"))))
  174. (build-system meson-build-system)
  175. (arguments
  176. `(#:glib-or-gtk? #t
  177. #:phases
  178. (modify-phases %standard-phases
  179. (add-after 'unpack 'skip-icon-cache
  180. (lambda _
  181. (substitute* "meson_post_install.py"
  182. (("gtk-update-icon-cache") "true"))))
  183. (add-after 'glib-or-gtk-wrap 'wrap-paths
  184. (lambda* (#:key outputs #:allow-other-keys)
  185. (let* ((out (assoc-ref outputs "out"))
  186. (bin (string-append out "/bin/"))
  187. (lib (string-append out "/lib/python"
  188. ,(version-major+minor
  189. (package-version python))
  190. "/site-packages")))
  191. (wrap-program (string-append bin "giara")
  192. `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH") ,lib))
  193. `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH"))))))))))
  194. (native-inputs
  195. (list gettext-minimal
  196. (list glib "bin")
  197. gobject-introspection
  198. (list gtk "bin")
  199. pkg-config))
  200. (inputs
  201. (list blueprint-compiler
  202. glib
  203. gtk
  204. gtksourceview
  205. libadwaita
  206. python
  207. python-beautifulsoup4
  208. python-dateutil
  209. python-mistune-next
  210. python-pillow
  211. python-praw
  212. python-pygobject
  213. python-requests))
  214. (propagated-inputs
  215. (list dconf))
  216. (synopsis "Client for Reddit")
  217. (description "Giara is a reddit app, built with Python, GTK4 and libadwaita.")
  218. (home-page "https://giara.gabmus.org/")
  219. (license license:gpl3+)))
  220. (define-public newsboat
  221. (package
  222. (name "newsboat")
  223. (version "2.31")
  224. (source
  225. (origin
  226. (method url-fetch)
  227. (uri (string-append "https://newsboat.org/releases/" version
  228. "/newsboat-" version ".tar.xz"))
  229. (sha256
  230. (base32 "1nn1akjc3l29gcr0n6g7y39qvmbw8vf5sfmnxd794sgmbki7vbsb"))))
  231. (build-system cargo-build-system)
  232. (native-inputs
  233. `(("gettext" ,gettext-minimal)
  234. ("openssl" ,openssl)
  235. ("pkg-config" ,pkg-config)
  236. ;; For building documentation.
  237. ,@(if (member (%current-system)
  238. (package-transitive-supported-systems ruby-asciidoctor))
  239. `(("asciidoctor" ,ruby-asciidoctor))
  240. `())))
  241. (inputs
  242. (list curl
  243. json-c
  244. libxml2
  245. ncurses
  246. stfl
  247. sqlite))
  248. (arguments
  249. `(#:modules ((guix build cargo-build-system)
  250. (guix build utils)
  251. ((guix build gnu-build-system) #:prefix gnu:))
  252. #:vendor-dir "vendor"
  253. #:install-source? #f
  254. #:cargo-inputs
  255. (("rust-backtrace" ,rust-backtrace-0.3)
  256. ("rust-bitflags" ,rust-bitflags-2)
  257. ("rust-chrono" ,rust-chrono-0.4)
  258. ("rust-curl-sys" ,rust-curl-sys-0.4)
  259. ("rust-cxx" ,rust-cxx-1)
  260. ("rust-cxx-build" ,rust-cxx-build-1)
  261. ("rust-fastrand" ,rust-fastrand-1)
  262. ("rust-gettext-rs" ,rust-gettext-rs-0.7)
  263. ("rust-lexopt" ,rust-lexopt-0.3)
  264. ("rust-libc" ,rust-libc-0.2)
  265. ("rust-md5" ,rust-md5-0.7)
  266. ("rust-natord" ,rust-natord-1)
  267. ("rust-nom" ,rust-nom-7)
  268. ("rust-once-cell" ,rust-once-cell-1)
  269. ("rust-percent-encoding" ,rust-percent-encoding-2)
  270. ("rust-url" ,rust-url-2)
  271. ("rust-unicode-width" ,rust-unicode-width-0.1)
  272. ("rust-xdg" ,rust-xdg-2))
  273. #:cargo-development-inputs
  274. (("rust-tempfile" ,rust-tempfile-3)
  275. ("rust-proptest" ,rust-proptest-1)
  276. ("rust-section-testing" ,rust-section-testing-0.0))
  277. #:phases
  278. (modify-phases %standard-phases
  279. ,@(if (not (assoc-ref inputs "asciidoctor"))
  280. `((add-after 'unpack 'dont-use-asciidoctor
  281. (lambda _
  282. (substitute* "config.sh"
  283. ((".*asciidoctor.*") ""))
  284. (substitute* "Makefile"
  285. (("^doc:.*") "doc:\n")
  286. (("install-podboat install-docs") "install-podboat")))))
  287. '())
  288. (add-after 'configure 'dont-vendor-self
  289. (lambda* (#:key vendor-dir #:allow-other-keys)
  290. ;; Don't keep the whole tarball in the vendor directory
  291. (delete-file-recursively
  292. (string-append vendor-dir "/" ,name "-" ,version ".tar.xz"))))
  293. (add-after 'unpack 'patch-source
  294. (lambda* (#:key outputs #:allow-other-keys)
  295. (substitute* "Makefile"
  296. (("Cargo.lock") "")
  297. ;; Replace the prefix in the Makefile.
  298. (("/usr/local") (assoc-ref outputs "out")))))
  299. (replace 'build
  300. (assoc-ref gnu:%standard-phases 'build))
  301. (replace 'check
  302. (lambda args
  303. ((assoc-ref gnu:%standard-phases 'check)
  304. #:test-target "test")))
  305. (replace 'install
  306. (assoc-ref gnu:%standard-phases 'install)))))
  307. (native-search-paths
  308. ;; Newsboat respects CURL_CA_BUNDLE.
  309. (list (search-path-specification
  310. (variable "CURL_CA_BUNDLE")
  311. (file-type 'regular)
  312. (separator #f) ;single entry
  313. (files '("etc/ssl/certs/ca-certificates.crt")))))
  314. (home-page "https://newsboat.org/")
  315. (synopsis "Text-mode RSS and Atom feed reader with podcast support")
  316. (description "Newsboat is a feed reader for @dfn{RSS} and @dfn{Atom}, XML
  317. formats widely used to transmit, publish, and syndicate news or blog articles.
  318. It's designed for use on text terminals, and to have a coherent and easy-to-use
  319. interface that might look familiar to @command{mutt} or @command{slrn} users.
  320. Newsboat supports OPML import/exports, HTML rendering, podcasts (with
  321. @command{podboat}), off-line reading, searching and storing articles to your
  322. file system, and many more features.")
  323. (properties '((release-monitoring-url . "https://newsboat.org/news.atom")))
  324. (license (list license:gpl2+ ; filter/*
  325. license:expat)))) ; everything else
  326. (define-public newsboat-2.13
  327. (package
  328. (inherit newsboat)
  329. (version "2.13")
  330. (source
  331. (origin
  332. (method url-fetch)
  333. (uri (string-append "https://newsboat.org/releases/" version
  334. "/newsboat-" version ".tar.xz"))
  335. (sha256
  336. (base32
  337. "0pik1d98ydzqi6055vdbkjg5krwifbk2hy2f5jp5p1wcy2s16dn7"))))
  338. (build-system gnu-build-system)
  339. (native-inputs
  340. `(,@(fold alist-delete (package-native-inputs newsboat)
  341. '("asciidoctor" "openssl"))
  342. ;; For building documentation.
  343. ("asciidoc" ,asciidoc)))
  344. (inputs
  345. (modify-inputs (package-inputs newsboat)
  346. (replace "json-c" json-c-0.13)))
  347. (arguments
  348. '(#:phases
  349. (modify-phases %standard-phases
  350. (delete 'configure) ; no configure script
  351. (add-after 'build 'build-documentation
  352. (lambda _
  353. (invoke "make" "doc"))))
  354. #:make-flags
  355. (list (string-append "prefix=" (assoc-ref %outputs "out")))
  356. #:test-target "test"))))
  357. (define-public liferea
  358. (package
  359. (name "liferea")
  360. (version "1.13.4")
  361. (source
  362. (origin
  363. (method git-fetch)
  364. (uri (git-reference
  365. (url "https://github.com/lwindolf/liferea/")
  366. (commit (string-append "v" version))))
  367. (file-name (git-file-name name version))
  368. (sha256
  369. (base32 "1g9463bvswsm899j6dfhslcg6np70m5wq143mjicr24zy8d17bm7"))))
  370. (build-system glib-or-gtk-build-system)
  371. (arguments
  372. `(#:configure-flags
  373. (list
  374. "--disable-static")
  375. #:phases
  376. (modify-phases %standard-phases
  377. (add-before 'configure 'prepare-build-environment
  378. (lambda* (#:key inputs #:allow-other-keys)
  379. ;; Workaround for https://github.com/lwindolf/liferea/issues/767.
  380. (setenv "WEBKIT_DISABLE_COMPOSITING_MODE" "1")))
  381. (add-after 'install 'wrap-gi-python
  382. (lambda* (#:key inputs outputs #:allow-other-keys)
  383. (let ((out (assoc-ref outputs "out"))
  384. (gi-typelib-path (getenv "GI_TYPELIB_PATH"))
  385. (python-path (getenv "GUIX_PYTHONPATH")))
  386. (wrap-program (string-append out "/bin/liferea")
  387. `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
  388. `("GUIX_PYTHONPATH" ":" prefix (,python-path))))
  389. #t)))))
  390. (native-inputs
  391. (list autoconf
  392. automake
  393. gettext-minimal
  394. `(,glib "bin")
  395. gobject-introspection
  396. intltool
  397. libtool
  398. pkg-config
  399. which))
  400. (inputs
  401. (list glib
  402. glib-networking
  403. gnome-keyring
  404. gsettings-desktop-schemas
  405. gstreamer
  406. json-glib
  407. libnotify
  408. libpeas
  409. libsecret
  410. libsoup-minimal-2
  411. libxml2
  412. libxslt
  413. pango
  414. python
  415. python-pycairo
  416. python-pygobject
  417. sqlite
  418. webkitgtk-with-libsoup2))
  419. (home-page "https://lzone.de/liferea/")
  420. (synopsis "News reader for GTK/GNOME")
  421. (description "Liferea is a desktop feed reader/news aggregator that
  422. brings together all of the content from your favorite subscriptions into
  423. a simple interface that makes it easy to organize and browse feeds.")
  424. (license license:gpl2+)))
  425. (define-public rtv
  426. (package
  427. (name "rtv")
  428. (version "1.27.0")
  429. (source
  430. (origin
  431. (method url-fetch)
  432. (uri (pypi-uri "rtv" version))
  433. (sha256
  434. (base32 "0hvw426y09l3yzwv2zkb9hifpfbg9wd1gg0y3z3pxcli6n3ii2wl"))))
  435. (build-system python-build-system)
  436. (arguments
  437. '(#:phases
  438. (modify-phases %standard-phases
  439. (add-before 'check 'set-environment-variables
  440. (lambda* (#:key inputs #:allow-other-keys)
  441. (setenv "HOME" (getcwd))
  442. (setenv "TERM" "linux")
  443. (setenv "TERMINFO"
  444. (search-input-directory inputs "share/terminfo"))))
  445. ;; Loading this as a library requires a controlling terminal, etc.
  446. (delete 'sanity-check))
  447. #:tests? #f)) ; tests fail: _curses.error: nocbreak() returned ERR
  448. (propagated-inputs
  449. (list python-beautifulsoup4 python-decorator python-kitchen
  450. python-requests python-six))
  451. (native-inputs
  452. (list ncurses
  453. python-coveralls
  454. python-coverage
  455. python-mock
  456. python-pylint
  457. python-pytest
  458. python-vcrpy))
  459. (home-page "https://github.com/michael-lazar/rtv")
  460. (synopsis "Terminal viewer for Reddit (Reddit Terminal Viewer)")
  461. (description
  462. "RTV provides a text-based interface to view and interact with Reddit.")
  463. (license (list license:expat
  464. license:gpl3+)))) ; rtv/packages/praw
  465. (define-public tuir
  466. (package
  467. (name "tuir")
  468. (version "1.29.0")
  469. (source
  470. (origin
  471. (method url-fetch)
  472. (uri (pypi-uri "tuir" version))
  473. (sha256
  474. (base32
  475. "06xb030ibphbrz4nsxm8mh3g60ld8xfp6kc3j6vi1k4ls5s4h79i"))))
  476. (build-system python-build-system)
  477. (arguments
  478. `(#:phases
  479. (modify-phases %standard-phases
  480. (delete 'sanity-check) ; Tries to read environment variables.
  481. (replace 'check
  482. (lambda* (#:key tests? inputs outputs #:allow-other-keys)
  483. (add-installed-pythonpath inputs outputs)
  484. (when tests?
  485. (invoke "pytest")))))))
  486. (inputs
  487. (list python-beautifulsoup4 python-decorator python-kitchen
  488. python-requests python-six))
  489. (native-inputs
  490. (list python-coverage
  491. python-coveralls
  492. python-mock
  493. python-pylint
  494. python-pytest
  495. python-vcrpy))
  496. (home-page "https://gitlab.com/ajak/tuir")
  497. (synopsis "Terminal viewer for Reddit (Terminal UI for Reddit)")
  498. (description
  499. "Tuir provides a simple terminal viewer for Reddit (Terminal UI for Reddit).")
  500. (license (list license:expat
  501. license:gpl3+)))) ; tuir/packages/praw
  502. (define-public morss
  503. (package
  504. (name "morss")
  505. (version "20221213.2216")
  506. (source (origin
  507. (method url-fetch)
  508. (uri (pypi-uri "morss" version))
  509. (sha256
  510. (base32
  511. "1mvxxhzmraxjnw0vz60zkl4d8xp7lw0fs0z537zfhmj1lj9ap4cp"))))
  512. (build-system python-build-system)
  513. (arguments
  514. ;; Tests are not available in the PyPI release and the Git release
  515. ;; is lagging behind. Additionally, tests use the network.
  516. (list #:tests? #f
  517. ;; Sanity check fails to find the module 'bs4', but it's available
  518. ;; in the python-beautifulsoup4 dependency.
  519. #:phases #~(modify-phases %standard-phases
  520. (delete 'sanity-check))))
  521. (propagated-inputs (list python-beautifulsoup4 python-chardet
  522. python-dateutil python-lxml))
  523. (home-page "https://morss.it/")
  524. (synopsis "Get full-text RSS feeds")
  525. (description "Morss' goal is to get full-text RSS feeds out of striped
  526. RSS feeds, commonly available on the internet. It also makes it possible
  527. to create RSS feeds for websites that don't provide any.")
  528. (license license:agpl3+)))
  529. (define-public syndication-domination
  530. (let ((revision "1")
  531. (commit "75920321062d682437f3fb0319dad227d8b18f6c"))
  532. (package
  533. (name "syndication-domination")
  534. (version (git-version "1.0" revision commit))
  535. (source (origin
  536. (method git-fetch)
  537. (uri (git-reference
  538. (url "https://gitlab.com/gabmus/syndication-domination")
  539. (commit commit)))
  540. (file-name (git-file-name name version))
  541. (sha256
  542. (base32 "1fl362920n6nz4x9wihyzbr82d9cy60sknhmajj62whd5gs49sbw"))))
  543. (build-system meson-build-system)
  544. (inputs (list fmt tidy-html pybind11 python pugixml))
  545. (native-inputs (list cmake pkg-config)) ; need cmake to find pybind11
  546. (home-page "https://gitlab.com/gabmus/syndication-domination")
  547. (synopsis "RSS/Atom feed parser")
  548. (description "This package provides an experimental RSS/Atom feed
  549. parser. It is \"not fit for use at this point\", but gfeeds uses it anyway.")
  550. (license license:agpl3))))
  551. (define-public gfeeds
  552. (package
  553. (name "gfeeds")
  554. (version "2.2.0")
  555. (source (origin
  556. (method git-fetch)
  557. (uri (git-reference
  558. (url "https://gitlab.gnome.org/World/gfeeds")
  559. (commit version)))
  560. (file-name (git-file-name name version))
  561. (sha256
  562. (base32
  563. "0p2hyjif9yhpc6r3ig7fdxpb2q8s9g42mz38svsc38gq7hb13b2w"))))
  564. (build-system meson-build-system)
  565. (arguments
  566. (list
  567. #:phases
  568. #~(modify-phases %standard-phases
  569. (add-after 'unpack 'patch-mpv-path
  570. (lambda* (#:key inputs #:allow-other-keys)
  571. (substitute* "gfeeds/confManager.py"
  572. (("mpv") (search-input-file inputs "/bin/mpv")))))
  573. (add-after 'unpack 'skip-icon-cache
  574. (lambda _
  575. (substitute* "meson.build"
  576. (("gtk_update_icon_cache: true")
  577. "gtk_update_icon_cache: false"))))
  578. (add-after 'install 'wrap-gfeeds
  579. (lambda* (#:key outputs #:allow-other-keys)
  580. (wrap-program (search-input-file outputs "/bin/gfeeds")
  581. `("PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
  582. `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH")))
  583. `("XDG_DATA_DIRS" ":" prefix (,(getenv "XDG_DATA_DIRS")))))))))
  584. (native-inputs
  585. (list `(,glib "bin")
  586. blueprint-compiler
  587. gobject-introspection
  588. gettext-minimal
  589. pkg-config))
  590. (inputs
  591. (list bash-minimal
  592. glib
  593. gsettings-desktop-schemas
  594. gtk
  595. hicolor-icon-theme
  596. libadwaita
  597. mpv
  598. python
  599. python-beautifulsoup4
  600. python-dateutil
  601. python-feedparser
  602. python-html5lib
  603. python-humanize
  604. python-listparser
  605. python-lxml
  606. python-magic
  607. python-pillow
  608. python-pygments
  609. python-pygobject
  610. python-pytz
  611. python-readability-lxml
  612. python-requests
  613. syndication-domination
  614. webkitgtk-next))
  615. (home-page "https://gfeeds.gabmus.org/")
  616. (synopsis "Easy-to-use GTK+ RSS/Atom feed reader")
  617. (description "Feeds is an RSS/Atom feed reader made with GTK+
  618. and it has an easy-to-use graphical user interface.")
  619. (license license:gpl3+)))