(define-module (blue-recorder)
               #:use-module (guix packages)
               #:use-module (guix download)
               #:use-module (guix git-download)
               #:use-module (guix build-system cargo)
               #:use-module (guix build-system gnu)
               #:use-module (gnu packages crates-graphics)
               #:use-module (gnu packages crates-io)
               #:use-module (gnu packages crates-gtk)
               #:use-module (guix build-system copy)
               #:use-module (gnu packages freedesktop)
               #:use-module ((guix licenses) #:prefix license:)
               #:use-module (gnu packages llvm)
               #:use-module (gnu packages game-development)
               #:use-module (gnu packages gettext)
               #:use-module (gnu packages glib)
               #:use-module (gnu packages gtk)
               #:use-module (gnu packages pkg-config)
               #:use-module (gnu packages pulseaudio)
               #:use-module (gnu packages video)
               #:use-module (gnu packages xorg))

(define-public rust-rust-ini-0.16
  (package
    (name "rust-rust-ini")
    (version "0.16.0")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "rust-ini" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "0qnyp96kslw5ivcf5a7dhiwbqpb72sh8rq40m81vbkiim54z5nyw"))))
    (build-system cargo-build-system)
    (arguments 
     `(#:skip-build? #t
       #:cargo-inputs
       (("rust-ordered-multimap" ,rust-ordered-multimap-0.3))))
    (home-page "https://github.com/zonyitoo/rust-ini")
    (synopsis "INI configuration file parsing library in Rust")
    (description
     "This package is an INI configuration file parsing library in Rust.")
    (license license:expat)))

(define-public rust-subprocess-0.2
  (package
    (name "rust-subprocess")
    (version "0.2.7")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "subprocess" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "1i6kbwggg36fwspybkyn9kwsy5azhg9g22aic2lrnlm2khgq0jrk"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
       (("rust-libc" ,rust-libc-0.2)
        ("rust-winapi" ,rust-winapi-0.3))
       #:cargo-development-inputs
       (("rust-tempdir" ,rust-tempdir-0.3)
        ("rust-lazy-static" ,rust-lazy-static-1))))
    (home-page "https://github.com/hniksic/rust-subprocess")
    (synopsis "Execution of child processes and pipelines.")
    (description
     "Execution of child processes and pipelines, inspired by Python's subprocess
module, with Rust-specific extensions.")
    (license (list license:asl2.0 license:expat))))

(define-public rust-enumflags2-derive-0.6
  (package
    (name "rust-enumflags2-derive")
    (version "0.6.4")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "enumflags2-derive" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "1kkcwi4n76bi1c16ms00dyk4d393gdf29kpr4k9zsn5z7m7fjvll"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
       (("rust-syn" ,rust-syn-1)
        ("rust-quote" ,rust-quote-1)
        ("rust-proc-macro2" ,rust-proc-macro2-1))))
    (home-page "https://github.com/NieDzejkob/enumflags2")
    (synopsis "Implements the classic bitflags datastructure.")
    (description
     "Enumflags2 implements the classic bitflags datastructure.")
    (license (list license:asl2.0 license:expat))))

(define-public rust-enumflags2-0.6
  (package
    (name "rust-enumflags2")
    (version "0.6.4")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "enumflags2" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "182xd6cxxmadx1axnz6x73d12pzgwkc712zq2lxd4z1k48lxij43"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
       (("rust-enumflags2-derive" ,rust-enumflags2-derive-0.6)
        ("rust-serde" ,rust-serde-1))))
    (home-page "https://github.com/NieDzejkob/enumflags2")
    (synopsis "Implements the classic bitflags datastructure.")
    (description
     "Enumflags2 implements the classic bitflags datastructure.")
    (license (list license:asl2.0 license:expat))))

(define-public rust-simple-logger-1
  (package
    (name "rust-simple-logger")
    (version "1.11.0")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "simple-logger" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "166iy6lxkf23am37aiyn104j8wfxmz59mp4r2i51vb9y15yg2myd"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
       (("rust-chrono" ,rust-chrono-0.4)
        ("rust-colored" ,rust-colored-1)
        ("rust-log" ,rust-log-0.4))))
    (home-page "https://github.com/borntyping/rust-simple-logger")
    (synopsis "A logger that prints all messages with a readable output format.")
    (description
     "A logger that prints all messages with a readable output format.")
    (license license:expat)))

(define-public rust-serde-xml-rs-0.4
  (package
    (name "rust-serde-xml-rs")
    (version "0.4.1")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "serde-xml-rs" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "1ykx1xkfd59gf0ijnp93xhpd457xy4zi8xv2hrr0ikvcd6h1pgzh"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-test-flags '("--release" "--" "--skip=doctype")
       #:cargo-inputs
       (("rust-log" ,rust-log-0.4)
        ("rust-serde" ,rust-serde-1)
        ("rust-xml-rs" ,rust-xml-rs-0.8)
        ("rust-thiserror" ,rust-thiserror-1))
       #:cargo-development-inputs
       (("rust-simple-logger" ,rust-simple-logger-1)
        ("rust-serde-derive" ,rust-serde-derive-1)
        ("rust-docmatic" ,rust-docmatic-0.1))))
    (home-page "https://github.com/RReverser/serde-xml-rs")
    (synopsis "Deserializer for Serde")
    (description
     "xml-rs based deserializer for Serde (compatible with 0.9+)")
    (license license:expat)))

(define-public rust-zvariant-derive-2
  (package
    (name "rust-zvariant-derive")
    (version "2.3.0")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "zvariant-derive" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "1kba1ynzcfch41wnvyn7y53rq6h8f7k6mwhwkdqra9m2yxk7qclg"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
       (("rust-proc-macro2" ,rust-proc-macro2-1)
        ("rust-syn" ,rust-syn-1)
        ("rust-quote" ,rust-quote-1)
        ("rust-proc-macro-crate" ,rust-proc-macro-crate-0.1))
       #:cargo-development-inputs
       (("rust-zvariant" ,rust-zvariant-2)
        ("rust-enumflags2" ,rust-enumflags2-0.6)
        ("rust-serde" ,rust-serde-1)
        ("rust-serde-repr" ,rust-serde-repr-0.1))))
    (home-page "https://gitlab.freedesktop.org/levans/zbus")
    (synopsis "A Rust API for D-Bus communication.")
    (description
     "A Rust API for D-Bus communication. The aim is to provide a safe and simple high- and low-level API akin to
GDBus, that doesn't depend on C libraries.")
    (license license:expat)))

(define-public rust-zvariant-2
  (package
    (name "rust-zvariant")
    (version "2.3.0")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "zvariant" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "19014ayd9k151zhxxm0sjqp5psjrjcmd2qb01narmmpgv5wbb2yc"))))
    (build-system cargo-build-system)
    (arguments
     `(#:tests? #f
       #:cargo-inputs
       (("rust-byteorder" ,rust-byteorder-1)
        ("rust-serde" ,rust-serde-1)
        ("rust-criterion" ,rust-criterion-0.3)
        ("rust-enumflags2" ,rust-enumflags2-0.6)
        ("rust-zvariant-derive" ,rust-zvariant-derive-2))
       #:cargo-development-inputs
       (("rust-serde-json" ,rust-serde-json-1)
        ("rust-serde-repr" ,rust-serde-repr-0.1)
        ("rust-glib" ,rust-glib-0.10)
        ("rust-rand" ,rust-rand-0.7))))
    (home-page "https://gitlab.freedesktop.org/levans/zbus")
    (synopsis "A Rust API for D-Bus communication.")
    (description
     "A Rust API for D-Bus communication. The aim is to provide a safe and simple high- and low-level API akin to
GDBus, that doesn't depend on C libraries.")
    (license license:expat)))

(define-public rust-ntest-0.7
  (package
    (name "rust-ntest")
    (version "0.7.1")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "ntest" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32
         "0kkk30ixlvfc97gpdjfv5584qmkhgx3mnphqf6rl2sxfckzxrg5k"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
       (("rust-ntest-test-cases" ,rust-ntest-test-cases-0.7)
        ("rust-ntest-timeout" ,rust-ntest-timeout-0.7)
        ("rust-ntest-proc-macro-helper" ,rust-ntest-proc-macro-helper-0.7)
        ("rust-timebomb" ,rust-timebomb-0.1))
       #:cargo-development-inputs
       (("rust-ntest-test-cases" ,rust-ntest-test-cases-0.7)
        ("rust-ntest-timeout" ,rust-ntest-timeout-0.7)
        ("rust-timebomb" ,rust-timebomb-0.1))))
    (home-page "https://github.com/becheran/ntest")
    (synopsis "Testing framework for Rust")
    (description "This package provides a testing framework for Rust which
enhances the built-in library with some useful features.")
    (license license:expat)))

(define-public rust-ntest-proc-macro-helper-0.7
  (package
    (name "rust-ntest-proc-macro-helper")
    (version "0.7.1")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "ntest-proc-macro-helper" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32
         "0xkyp5yc91bc3bc8441sjgdia3l6g7nclhy53nq5zw2fk3q6ww3y"))))
    (build-system cargo-build-system)
    (home-page "https://github.com/becheran/ntest")
    (synopsis "Testing framework for Rust")
    (description "This package provides a testing framework for Rust which
enhances the built-in library with some useful features.")
    (license license:expat)))

(define-public rust-ntest-test-cases-0.7
  (package
    (name "rust-ntest-test-cases")
    (version "0.7.1")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "ntest_test_cases" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32
         "0d1h1w33sznc1y3l0ka5xa1mpznn8qqxjv3s5qi9y2fs7091fcvz"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
       (("rust-proc-macro2" ,rust-proc-macro2-1)
        ("rust-quote" ,rust-quote-1)
        ("rust-syn" ,rust-syn-1))))
    (home-page "https://github.com/becheran/ntest")
    (synopsis "Test cases for ntest framework")
    (description "This package provides test cases for ntest framework.")
    (license license:expat)))

(define-public rust-ntest-timeout-0.7
  (package
    (name "rust-ntest-timeout")
    (version "0.7.1")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "ntest_timeout" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32
         "026isn882xadp9c0pcfzhiz01zj7qn31mkmgcbmy8x3gd4dqx7rr"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
       (("rust-proc-macro2" ,rust-proc-macro2-1)
        ("rust-quote" ,rust-quote-1)
        ("rust-syn" ,rust-syn-1)
        ("rust-timebomb" ,rust-timebomb-0.1))))
    (home-page "https://github.com/becheran/ntest")
    (synopsis "Timeout attribute for the ntest framework")
    (description "This package provides a timeout attribute for the ntest
framework.")
    (license license:expat)))

(define-public rust-doc-comment-0.3
  (package
    (name "rust-doc-comment")
    (version "0.3.3")
    (source
      (origin
        (method url-fetch)
        (uri (crate-uri "doc-comment" version))
        (file-name (string-append name "-" version ".crate"))
        (sha256
         (base32
          "043sprsf3wl926zmck1bm7gw0jq50mb76lkpk49vasfr6ax1p97y"))))
    (build-system cargo-build-system)
    (arguments '(#:skip-build? #t))
    (home-page "https://github.com/GuillaumeGomez/doc-comment")
    (synopsis "Macro to generate doc comments")
    (description "This package provides a way to generate doc comments
from macros.")
    (license license:expat)))

(define-public rust-zbus-macros-1
  (package
    (name "rust-zbus-macros")
    (version "1.8.0")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "zbus-macros" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "0c093vxdly5v7hy8z7i9z5l3j79ris0g3bcv6pplnf3jv8f19k47"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
       (("rust-proc-macro2" ,rust-proc-macro2-1)
        ("rust-syn" ,rust-syn-1)
        ("rust-proc-macro-crate" ,rust-proc-macro-crate-0.1))
       #:cargo-development-inputs
       (("rust-zvariant" ,rust-zvariant-2)
        ("rust-zbus" ,rust-zbus-1)
        ("rust-serde" ,rust-serde-1)
        ("rust-trybuild" ,rust-trybuild-1))))
    (home-page "https://gitlab.freedesktop.org/levans/zbus")
    (synopsis "A Rust API for D-Bus communication.")
    (description
     "A Rust API for D-Bus communication. The aim is to provide a safe and simple high- and low-level API akin to
GDBus, that doesn't depend on C libraries.")
    (license license:expat)))

(define-public rust-zbus-polkit-1
  (package
    (name "rust-zbus-polkit")
    (version "1.0.1")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "zbus-polkit" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "09nvf1mgdpbj27cnwbjrj1pajmxbp11gh4j4s3k0p7iaa23ab1ns"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
       (("rust-zvariant" ,rust-zvariant-2)
        ("rust-zbus" ,rust-zbus-1)
        ("rust-serde-repr" ,rust-serde-repr-0.1)
        ("rust-enumflags2" ,rust-enumflags2-0.6))))
    (home-page "https://gitlab.freedesktop.org/levans/zbus")
    (synopsis "A Rust API for D-Bus communication.")
    (description
     "A Rust API for D-Bus communication. The aim is to provide a safe and simple high- and low-level API akin to
GDBus, that doesn't depend on C libraries.")
    (license license:expat)))

(define-public rust-zbus-1
  (package
    (name "rust-zbus")
    (version "1.8.0")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "zbus" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "1a023ykgvavp28p5zzgxl14lj639p4vhqpypmqr4xvfs76md9d20"))))
    (build-system cargo-build-system)
    (arguments
     `(#:tests? #false
       #:cargo-inputs
       (("rust-byteorder" ,rust-byteorder-1)
        ("rust-nix" ,rust-nix-0.17)
        ("rust-serde" ,rust-serde-1)
        ("rust-serde-repr" ,rust-serde-repr-0.1)
        ("rust-serde-xml-rs" ,rust-serde-xml-rs-0.4)
        ("rust-zvariant" ,rust-zvariant-2)
        ("rust-zbus-macros" ,rust-zbus-macros-1)
        ("rust-enumflags2" ,rust-enumflags2-0.6)
        ("rust-derivative" ,rust-derivative-2)
        ("rust-scoped-tls" ,rust-scoped-tls-1)
        ("rust-fastrand" ,rust-fastrand-1)
        ("rust-once-cell" ,rust-once-cell-1)
        ("rust-async-io" ,rust-async-io-1)
        ("rust-proc-macro-crate" ,rust-proc-macro-crate-0.1))
       #:cargo-development-inputs
       (("rust-zbus-polkit" ,rust-zbus-polkit-1)
        ("rust-doc-comment" ,rust-doc-comment-0.3)
        ("rust-ntest" ,rust-ntest-0.7))))
    (home-page "https://gitlab.freedesktop.org/levans/zbus")
    (synopsis "A Rust API for D-Bus communication.")
    (description
     "A Rust API for D-Bus communication. The aim is to provide a safe and simple high- and low-level API akin to
GDBus, that doesn't depend on C libraries.")
    (license license:expat)))

(define-public rust-gtk-0.9
  (package
    (name "rust-gtk")
    (version "0.9.0")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "gtk" version))
       (file-name
        (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "17gab15byxfhmzq2ax7nd6aay611l7gjxqysykjdb1m6gggnmprs"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
       (("rust-atk" ,rust-atk-0.9)
        ("rust-bitflags" ,rust-bitflags-1)
        ("rust-cairo-rs" ,rust-cairo-rs-0.9)
        ("rust-cairo-sys-rs" ,rust-cairo-sys-rs-0.9)
        ("rust-cc" ,rust-cc-1)
        ("rust-gdk" ,rust-gdk-0.13)
        ("rust-gdk-pixbuf" ,rust-gdk-pixbuf-0.8)
        ("rust-gdk-pixbuf-sys" ,rust-gdk-pixbuf-sys-0.9)
        ("rust-gdk-sys" ,rust-gdk-sys-0.9)
        ("rust-gio" ,rust-gio-0.8)
        ("rust-gio-sys" ,rust-gio-sys-0.9)
        ("rust-glib" ,rust-glib-0.9)
        ("rust-glib-sys" ,rust-glib-sys-0.9)
        ("rust-gobject-sys" ,rust-gobject-sys-0.9)
        ("rust-gtk-rs-lgpl-docs" ,rust-gtk-rs-lgpl-docs-0.1)
        ("rust-gtk-sys" ,rust-gtk-sys-0.10)
        ("rust-lazy-static" ,rust-lazy-static-1)
        ("rust-libc" ,rust-libc-0.2)
        ("rust-pango" ,rust-pango-0.8)
        ("rust-pango-sys" ,rust-pango-sys-0.9))
       #:cargo-development-inputs
       (("rust-gir-format-check" ,rust-gir-format-check-0.1))))
    (inputs
     `(("atk" ,atk)
       ("cairo" ,cairo)
       ("glib" ,glib)
       ("gtk+" ,gtk+)
       ("pango" ,pango)))
    (home-page "https://gtk-rs.org/")
    (synopsis "Rust bindings for the GTK+ 3 library")
    (description "This package provides Rust bindings for the GTK+ 3 library.")
    (license license:expat)))

(define-public rust-atk-0.9
  (package
    (name "rust-atk")
    (version "0.9.0")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "atk" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "09n46zp8jgxspdzhmi93cag79jjnr0ila94n8nr53g8hw88ljaw1"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
       (("rust-atk-sys" ,rust-atk-sys-0.10)
        ("rust-bitflags" ,rust-bitflags-1)
        ("rust-glib" ,rust-glib-0.9)
        ("rust-glib-sys" ,rust-glib-sys-0.9)
        ("rust-gobject-sys" ,rust-gobject-sys-0.9)
        ("rust-gtk-rs-lgpl-docs" ,rust-gtk-rs-lgpl-docs-0.1)
        ("rust-libc" ,rust-libc-0.2))
       #:cargo-development-inputs
       (("rust-gir-format-check" ,rust-gir-format-check-0.1))))
    (inputs
     `(("atk" ,atk)
       ("glib" ,glib)))
    (home-page "https://gtk-rs.org/")
    (synopsis "Rust bindings for the ATK library")
    (description "Rust bindings for the ATK library")
    (license license:expat)))

(define-public rust-gtk-sys-0.10
  (package
    (name "rust-gtk-sys")
    (version "0.10.0")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "gtk-sys" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "0mq4i161kk6dwiz19ayxgm9fhx7n3r5lm9lbjiyk0qs811pxmb49"))))
    (build-system cargo-build-system)
    (arguments
     `(#:tests? #f                      ;missing files
       #:cargo-inputs
       (("rust-atk-sys" ,rust-atk-sys-0.10)
        ("rust-cairo-sys-rs" ,rust-cairo-sys-rs-0.9)
        ("rust-gdk-pixbuf-sys" ,rust-gdk-pixbuf-sys-0.9)
        ("rust-gdk-sys" ,rust-gdk-sys-0.9)
        ("rust-gio-sys" ,rust-gio-sys-0.9)
        ("rust-glib-sys" ,rust-glib-sys-0.9)
        ("rust-gobject-sys" ,rust-gobject-sys-0.9)
        ("rust-libc" ,rust-libc-0.2)
        ("rust-pango-sys" ,rust-pango-sys-0.9)
        ("rust-pkg-config" ,rust-pkg-config-0.3))
       #:cargo-development-inputs
       (("rust-shell-words" ,rust-shell-words-0.1)
        ("rust-tempfile" ,rust-tempfile-3))))
    (inputs
     `(("gtk+" ,gtk+)))
    (home-page "https://gtk-rs.org/")
    (synopsis "FFI bindings to libgtk-3")
    (description "This package provides FFI bindings to libgtk-3.")
    (license license:expat)))

(define-public rust-gtk-sys-0.10
  (package
    (name "rust-gtk-sys")
    (version "0.10.0")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "gtk-sys" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "0mq4i161kk6dwiz19ayxgm9fhx7n3r5lm9lbjiyk0qs811pxmb49"))))
    (build-system cargo-build-system)
    (arguments
     `(#:tests? #f                      ;missing files
       #:cargo-inputs
       (("rust-atk-sys" ,rust-atk-sys-0.10)
        ("rust-cairo-sys-rs" ,rust-cairo-sys-rs-0.9)
        ("rust-gdk-pixbuf-sys" ,rust-gdk-pixbuf-sys-0.9)
        ("rust-gdk-sys" ,rust-gdk-sys-0.9)
        ("rust-gio-sys" ,rust-gio-sys-0.9)
        ("rust-glib-sys" ,rust-glib-sys-0.9)
        ("rust-gobject-sys" ,rust-gobject-sys-0.9)
        ("rust-libc" ,rust-libc-0.2)
        ("rust-pango-sys" ,rust-pango-sys-0.9)
        ("rust-pkg-config" ,rust-pkg-config-0.3))
       #:cargo-development-inputs
       (("rust-shell-words" ,rust-shell-words-0.1)
        ("rust-tempfile" ,rust-tempfile-3))))
    (inputs
     `(("gtk+" ,gtk+)))
    (home-page "https://gtk-rs.org/")
    (synopsis "FFI bindings to libgtk-3")
    (description "This package provides FFI bindings to libgtk-3.")
    (license license:expat)))

(define-public rust-atk-sys-0.10
  (package
    (name "rust-atk-sys")
    (version "0.10.0")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "atk-sys" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "1knzvq2jdkx1nav619jbqsx2ivzh901rsp2wl57wr50x2fpy8c7m"))))
    (build-system cargo-build-system)
    (arguments
     `(#:tests? #f                      ;missing files
       #:cargo-inputs
       (("rust-glib-sys" ,rust-glib-sys-0.9)
        ("rust-gobject-sys" ,rust-gobject-sys-0.9)
        ("rust-libc" ,rust-libc-0.2)
        ("rust-pkg-config" ,rust-pkg-config-0.3))
       #:cargo-development-inputs
       (("rust-shell-words" ,rust-shell-words-0.1)
        ("rust-tempfile" ,rust-tempfile-3))))
    (inputs
     `(("atk" ,atk)
       ("glib" ,glib)))
    (home-page "https://gtk-rs.org/")
    (synopsis "FFI bindings to libatk-1")
    (description "FFI bindings to libatk-1")
    (license license:expat)))

(define-public rust-gtk-0.9
  (package
    (name "rust-gtk")
    (version "0.9.0")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "gtk" version))
       (file-name
        (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "17gab15byxfhmzq2ax7nd6aay611l7gjxqysykjdb1m6gggnmprs"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
       (("rust-atk" ,rust-atk-0.9)
        ("rust-bitflags" ,rust-bitflags-1)
        ("rust-cairo-rs" ,rust-cairo-rs-0.9)
        ("rust-cairo-sys-rs" ,rust-cairo-sys-rs-0.9)
        ("rust-cc" ,rust-cc-1)
        ("rust-gdk" ,rust-gdk-0.13)
        ("rust-gdk-pixbuf" ,rust-gdk-pixbuf-0.8)
        ("rust-gdk-pixbuf-sys" ,rust-gdk-pixbuf-sys-0.9)
        ("rust-gdk-sys" ,rust-gdk-sys-0.9)
        ("rust-gio" ,rust-gio-0.8)
        ("rust-gio-sys" ,rust-gio-sys-0.9)
        ("rust-glib" ,rust-glib-0.9)
        ("rust-glib-sys" ,rust-glib-sys-0.9)
        ("rust-gobject-sys" ,rust-gobject-sys-0.9)
        ("rust-gtk-rs-lgpl-docs" ,rust-gtk-rs-lgpl-docs-0.1)
        ("rust-gtk-sys" ,rust-gtk-sys-0.10)
        ("rust-lazy-static" ,rust-lazy-static-1)
        ("rust-libc" ,rust-libc-0.2)
        ("rust-pango" ,rust-pango-0.8)
        ("rust-pango-sys" ,rust-pango-sys-0.9))
       #:cargo-development-inputs
       (("rust-gir-format-check" ,rust-gir-format-check-0.1))))
    (inputs
     `(("atk" ,atk)
       ("cairo" ,cairo)
       ("glib" ,glib)
       ("gtk+" ,gtk+)
       ("pango" ,pango)))
    (home-page "https://gtk-rs.org/")
    (synopsis "Rust bindings for the GTK+ 3 library")
    (description "This package provides Rust bindings for the GTK+ 3 library.")
    (license license:expat)))

(define-public rust-libappindicator-sys-0.5
  (package
    (name "rust-libappindicator-sys")
    (version "0.5.0")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "libappindicator-sys" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32
         "07b5r3wy5kq4x3zsmgbgmz2645yr5fyy1finkbsj3cbc38hbl6cp"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
       (("rust-gtk-sys" ,rust-gtk-sys-0.10)
        ("rust-bindgen" ,rust-bindgen-0.52)
        ("rust-pkg-config" ,rust-pkg-config-0.3))))
    (home-page "https://github.com/qdot/libappindicator-sys")
    (synopsis "Bindings for the libappindicator library.")
    (description "Bindings for the libappindicator library. libappindicator provides 
cross-distribution/window system functions for creating systray icons and menus.")
    (license license:lgpl3+)))

(define-public rust-libappindicator-0.5
  (package
    (name "rust-libappindicator")
    (version "0.5.2")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "libappindicator" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32
         "0dyhb5gh2srhaq8v6nrcds4qsqibkpgkh53lypxf4l1z6mbzrlsj"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
       (("rust-gtk" ,rust-gtk-0.9)
        ("rust-glib" ,rust-glib-0.10)
        ("rust-log" ,rust-log-0.4)
        ("rust-gtk-sys" ,rust-gtk-sys-0.10)
        ("rust-libappindicator-sys" ,rust-libappindicator-sys-0.5))))
    (home-page "https://github.com/qdot/libappindicator-rs")
    (synopsis "Bindings for the libappindicator library.")
    (description "Bindings for the libappindicator library. libappindicator provides 
cross-distribution/window system functions for creating systray icons and menus.")
    (license license:lgpl3+)))

(define-public rust-dlv-list-0.2
  (package
    (name "rus-dlv-list")
    (version "0.2.2")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "dlv-list" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32
         "0v42n28mx9r6vr43dsqkh5dgvb9m0wyjp7fb20m331m7p48ijf8v"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
       ;;unable to build rust-rand-0.7
       ;;(("rust-rand" ,rust-rand-0.7))))
       (("rust-rand" ,rust-my-rand-0.7))))
    (home-page "https://github.com/sgodwincs/dlv-list-rs")
    (synopsis "Semi-doubly linked list implemented using a vector.")
    (description "Semi-doubly linked list implemented using a vector.")
    (license license:expat)))

(define-public rust-ordered-multimap-0.3
  (package
    (name "rust-ordered-multimap")
    (version "0.3.1")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "ordered-multimap" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32
         "1194q7sb2d6chbllsn7237dhhvx04iqr3sq0ii16w1pcv5x2qrqw"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
       (("rust-dlv-list" ,rust-dlv-list-0.2)
        ("rust-hashbrown" ,rust-hashbrown-0.9)
        ("rust-serde" ,rust-serde-1))))
    (home-page "https://github.com/sgodwincs/ordered-multimap-rs")
    (synopsis "This is a multimap meaning that multiple values can be associated with a given key")
    (description "Currently, this crate contains a single type ListOrderedMultimap. This is a multimap
 meaning that multiple values can be associated with a given key,
 but it also maintains insertion order across all keys and values.")
    (license license:expat)))

;;unable to build rust-gdk-0.13 from crates-gtk.scm
(define-public rust-my-gdk-0.13
  (package
    (name "rust-gdk")
    (version "0.13.2")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "gdk" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "0zbb9bwg2z9vlcjj9b59qch3mfmszsrxya7syc5a39v85adq606v"))))
    (build-system cargo-build-system)
    (arguments
     `(#:skip-build? #t
       #:cargo-inputs
       (("rust-bitflags" ,rust-bitflags-1)
        ;;unable to build rust-cairo-rs-0.9
        ;;("rust-cairo-rs" ,rust-cairo-rs-0.9)
        ("rust-cairo-rs" ,rust-my-cairo-rs-0.9)
        ("rust-cairo-sys-rs" ,rust-cairo-sys-rs-0.10)
        ("rust-gdk-pixbuf" ,rust-gdk-pixbuf-0.9)
        ("rust-gdk-sys" ,rust-gdk-sys-0.10)
        ("rust-gio" ,rust-gio-0.9)
        ("rust-gio-sys" ,rust-gio-sys-0.10)
        ("rust-glib" ,rust-glib-0.10)
        ("rust-glib-sys" ,rust-glib-sys-0.10)
        ("rust-gobject-sys" ,rust-gobject-sys-0.10)
        ("rust-gtk-rs-lgpl-docs" ,rust-gtk-rs-lgpl-docs-0.1)
        ("rust-libc" ,rust-libc-0.2)
        ("rust-pango" ,rust-pango-0.9))
       #:cargo-development-inputs
       (("rust-gir-format-check" ,rust-gir-format-check-0.1))))
    (inputs
     `(("cairo" ,cairo)
       ("gdk-pixbuf" ,gdk-pixbuf)
       ("glib" ,glib)
       ("gtk+" ,gtk+)
       ("pango" ,pango)))
    (home-page "https://gtk-rs.org/")
    (synopsis "Rust bindings for the GDK 3 library")
    (description "This package provides Rust bindings for the GDK 3 library.")
    (license license:expat)))

;;unable to build rust-cairo-rs-0.9
(define-public rust-my-cairo-rs-0.9
  (package
    (name "rust-cairo-rs")
    (version "0.9.1")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "cairo-rs" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "1f5x6ipfpzz0ffph0pg0xfkdfcbr0jp59714zz857jp88zhg5h65"))))
    (build-system cargo-build-system)
    (arguments
     `(#:skip-build? #t
       #:cargo-inputs
       (("rust-bitflags" ,rust-bitflags-1)
        ;;unable to build rust-cairo-sys-rs-0.10
        ;;("rust-cairo-sys-rs" ,rust-cairo-sys-rs-0.10)
        ("rust-cairo-sys-rs" ,rust-my-cairo-sys-rs-0.10)
        ("rust-glib" ,rust-glib-0.10)
        ("rust-glib-sys" ,rust-glib-sys-0.10)
        ("rust-gobject-sys" ,rust-gobject-sys-0.10)
        ("rust-gtk-rs-lgpl-docs" ,rust-gtk-rs-lgpl-docs-0.1)
        ("rust-libc" ,rust-libc-0.2)
        ("rust-thiserror" ,rust-thiserror-1))
       #:cargo-development-inputs
       (("rust-tempfile" ,rust-tempfile-3))))
    (inputs
     `(("cairo" ,cairo)))
    (home-page "https://gtk-rs.org/")
    (synopsis "Rust bindings for the Cairo library")
    (description "Rust bindings for the Cairo library")
    (license license:expat)))

;;unable to build rust-cairo-sys-rs-0.10
(define-public rust-my-cairo-sys-rs-0.10
  (package
    (name "rust-cairo-sys-rs")
    (version "0.10.0")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "cairo-sys-rs" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "19wch8zc11hbi724mn16hhqyff8kw5c5bsbdlzpxdwfmkadn7lif"))))
    (build-system cargo-build-system)
    (arguments
     `(#:skip-build? #t
       #:cargo-inputs
       (("rust-glib-sys" ,rust-glib-sys-0.10)
        ("rust-libc" ,rust-libc-0.2)
        ;;unable to build rust-system-deps-1
        ;;("rust-system-deps" ,rust-system-deps-1)
        ("rust-system-deps" ,rust-my-system-deps-1)
        ("rust-winapi" ,rust-winapi-0.3)
        ("rust-x11" ,rust-x11-2))))
    (inputs
     `(("cairo" ,cairo)))
    (home-page "https://gtk-rs.org/")
    (synopsis "FFI bindings to libcairo")
    (description "This package provides FFI bindings to libcairo.")
    (license license:expat)))

;;unable to build rust-system-deps-1
(define-public rust-my-system-deps-1
  (package
    (name "rust-system-deps")
    (version "1.3.2")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "system-deps" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "16v4ljmj8sj030mdcc1yk615vciqlyxi7csq6lxka6cs4qbwqghg"))))
    (build-system cargo-build-system)
    (arguments
     `(#:tests? #f                      ;source is missing some test files
       #:cargo-inputs
       (("rust-heck" ,rust-heck-0.3)
        ("rust-pkg-config" ,rust-pkg-config-0.3)
        ("rust-strum" ,rust-strum-0.18)
        ("rust-strum-macros" ,rust-strum-macros-0.18)
        ("rust-thiserror" ,rust-thiserror-1)
        ("rust-toml" ,rust-toml-0.5)
        ;;unable to build rust-version-compare-0.0
        ;;("rust-version-compare" ,rust-version-compare-0.0))
        ("rust-version-compare" ,rust-my-version-compare-0.0))
       #:cargo-development-inputs
       (("rust-itertools" ,rust-itertools-0.9))))
    (home-page "https://github.com/gdesmott/system-deps")
    (synopsis "Define system dependencies in @file{Cargo.toml}")
    (description
     "This crate lets you write system dependencies in @file{Cargo.toml}
metadata, rather than programmatically in @file{build.rs}.  This makes those
dependencies declarative, so other tools can read them as well.")
    (license (list license:expat license:asl2.0))))

;;unable to build rust-version-compare-0.0
(define-public rust-my-version-compare-0.0
  (package
    (name "rust-version-compare")
    (version "0.0.10")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "version-compare" version))
       (file-name
        (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "18ack6rx18rp700h1dncljmpzchs3p2dfh76a8ds6vmfbfi5cdfn"))))
    (build-system cargo-build-system)
    (home-page "https://github.com/timvisee/version-compare")
    (synopsis "Rust library to easily compare version numbers")
    (description
     "This package provides a Rust library to easily compare version
numbers, and test them against various comparison operators.")
    (license license:expat)))

;;unable to build rust-rand-0.7
(define-public rust-my-rand-0.7
  (package
    (name "rust-rand")
    (version "0.7.3")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "rand" version))
       (file-name
        (string-append name "-" version ".tar.gz"))
       (sha256
        (base32
         "00sdaimkbz491qgi6qxkv582yivl32m2jd401kzbn94vsiwicsva"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
       (("rust-getrandom" ,rust-getrandom-0.1)
        ("rust-libc" ,rust-libc-0.2)
        ("rust-log" ,rust-log-0.4)
        ("rust-packed-simd" ,rust-packed-simd-0.3)
        ("rust-rand-chacha" ,rust-rand-chacha-0.2)
        ("rust-rand-core" ,rust-rand-core-0.5)
        ("rust-rand-hc" ,rust-rand-hc-0.2)
        ("rust-rand-pcg" ,rust-rand-pcg-0.2))
       #:cargo-development-inputs
       (("rust-rand-hc" ,rust-rand-hc-0.2)
        ("rust-rand-pcg" ,rust-rand-pcg-0.2))))
    (home-page "https://crates.io/crates/rand")
    (synopsis "Random number generators and other randomness functionality")
    (description
     "Rand provides utilities to generate random numbers, to convert them to
useful types and distributions, and some randomness-related algorithms.")
    (license (list license:expat license:asl2.0))))

(define-public rust-gettext-rs-0.7
  (package
    (name "rust-gettext-rs")
    (version "0.7.0")
    (source
      (origin
        (method url-fetch)
        (uri (crate-uri "gettext-rs" version))
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "0r7kahqcjrkm83d3gzzkn83fnw2bnqj2ank5z6hsm66izalai7p4"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
       (("rust-gettext-sys" ,rust-gettext-sys-0.21)
        ("rust-locale-config" ,rust-locale-config-0.3))))
    (inputs
     `(("gettext" ,gettext-minimal)))
    (home-page "https://github.com/Koka/gettext-rs")
    (synopsis "GNU Gettext FFI binding for Rust")
    (description "This package provides GNU Gettext FFI bindings for Rust.")
    (license license:expat)))

(define-public rust-gettext-sys-0.21
  (package
    (name "rust-gettext-sys")
    (version "0.21.0")
    (source
      (origin
        (method url-fetch)
        (uri (crate-uri "gettext-sys" version))
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
          "105d5zh67yc5vyzmqxdw7hx82h606ca6rzhsfjgzjczn2s012pc8"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
       (("rust-cc" ,rust-cc-1)
        ("rust-tempfile" ,rust-tempfile-3))))
    (inputs
     `(("gettext" ,gettext-minimal)))
    (home-page "https://github.com/Koka/gettext-rs")
    (synopsis "Gettext raw FFI bindings")
    (description "This package provides raw FFI bindings for GNU Gettext.")
    (license license:expat)))

(define-public blue-recorder
 (let ((version "1.3.2")
       (commit "d67dc8882ae446feca9cc44076f0839a0aeb845c"))
  (package
   (name "blue-recorder")
   (version (git-version version "+4commits" commit))
   (source (origin
            (method git-fetch)
            (uri (git-reference
                  (url "https://github.com/xlmnxp/blue-recorder/")
                  (commit commit)
                  (recursive? #t)))
            (file-name (git-file-name name version))
            (sha256
             (base32
              "0q6af66bw6qqrr99gw09750hmd63d1d5zaalrmbk3jqf8kmyzkaa"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
       (("rust-chrono" ,rust-chrono-0.4)
        ("rust-regex" ,rust-regex-1)
        ("rust-libappindicator" ,rust-libappindicator-0.5)
        ("rust-rust-ini" ,rust-rust-ini-0.16)
        ("rust-subprocess" ,rust-subprocess-0.2)
        ;;("rust-gdk" ,rust-gdk-0.13)
        ;;unable to build rust-gdk-0.13 from crates-gtk.scm
        ("rust-gdk" ,rust-my-gdk-0.13)
        ("rust-gdk-pixbuf" ,rust-gdk-pixbuf-0.9)
        ("rust-gettext-rs" ,rust-gettext-rs-0.7)
        ("rust-gio" ,rust-gio-0.9)
        ("rust-glib" ,rust-glib-0.10)
        ("rust-gtk" ,rust-gtk-0.9)
        ("rust-zbus" ,rust-zbus-1)
        ("rust-zvariant" ,rust-zvariant-2))
       #:phases
       (modify-phases %standard-phases
         (replace 'install
           (lambda* (#:key inputs outputs #:allow-other-keys)
             (let* ((out   (assoc-ref outputs "out"))
                    (bin   (string-append out "/bin"))
                    (share (string-append out "/share"))
                    (icons (string-append share "/icons/hicolor/scalable/apps"))
                    (blue-recorder "target/release/blue-recorder"))
               ;; Install the executable.
               (install-file blue-recorder bin)
               ;; Install desktop file.
               (install-file "data/blue-recorder.desktop"
                             (string-append share "/applications"))
               ;; Install interfaces file.
               (install-file "interfaces/main.ui"
                             (string-append bin "/interfaces"))
               ;; Install icon.
               (mkdir-p icons)
               (copy-file "data/blue-recorder.svg"
                          (string-append icons "/blue-recorder.svg"))
               ;; Install po.
               (copy-recursively "po"
                          (string-append bin "/po"))
               ;; Install data.
               (copy-recursively "data"
                          (string-append bin "/data"))
               #t))))))
    (native-inputs
     `(("clang" ,clang)
       ("gettext" ,gettext-minimal)
       ("pkg-config" ,pkg-config)))
    (inputs
     `(("ffmpeg" ,ffmpeg)
       ("libappindicator" ,libappindicator)
       ("gtk+" ,gtk+)
       ("xwininfo" ,xwininfo)
       ("pulseaudio" ,pulseaudio)))
   (synopsis "A simple screen recorder for Linux desktop.")
   (description "A simple desktop recorder for Linux systems. Built using Rust, GTK+ 3 and ffmpeg. It supports
 recording audio and video on almost all Linux interfaces with support for Wayland display server on GNOME session.")
   (home-page "https://github.com/xlmnxp/blue-recorder")
   (license license:gpl3+))))

blue-recorder