diff --git a/rekahsoft-gnu/packages/perl.scm b/rekahsoft-gnu/packages/perl.scm
new file mode 100644
index 0000000..833603f
--- /dev/null
+++ b/rekahsoft-gnu/packages/perl.scm
@@ -0,0 +1,539 @@
+;; (C) Copyright Collin J. Doering 2022
+;;
+;; This program is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see .
+
+;; File: perl.scm
+;; Author: Collin J. Doering
+;; Date: Jan 16, 2022
+
+(define-module (rekahsoft-gnu packages perl)
+ #:use-module (srfi srfi-1)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix packages)
+ #:use-module (guix download)
+ #:use-module (guix git-download)
+ #:use-module (gnu packages version-control)
+ #:use-module (gnu packages admin)
+ #:use-module (gnu packages web)
+ #:use-module (gnu packages tls)
+ #:use-module (gnu packages networking)
+ #:use-module (gnu packages perl)
+ #:use-module (gnu packages perl-check)
+ #:use-module (gnu packages perl-compression)
+ #:use-module (gnu packages tcl)
+ #:use-module (guix build-system perl)
+ #:use-module (guix build-system gnu))
+
+(define-public perl-ntlm
+ (package
+ (name "perl-ntlm")
+ (version "1.09")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://cpan/authors/id/N/NB/NBEBOUT/NTLM-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32 "118z2n9qhjalfj7l9hhpjppyxdg2c34h4hsqdriibg3nv86f68y8"))))
+ (build-system perl-build-system)
+ (propagated-inputs `(("perl-digest-hmac" ,perl-digest-hmac)))
+ (home-page "https://metacpan.org/release/NTLM")
+ (synopsis "An NTLM authentication module")
+ (description "An NTLM authentication module.")
+ (license license:perl-license)))
+
+(define-public perl-encode-imaputf7
+ (package
+ (name "perl-encode-imaputf7")
+ (version "1.05")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://cpan/authors/id/P/PM/PMAKHOLM/Encode-IMAPUTF7-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32 "1q9pgjckjxz0qfwaqmzm1dh1y09819vi6vf1sglcz0vlqgfha0s7"))))
+ (build-system perl-build-system)
+ (propagated-inputs `(("perl-test-nowarnings" ,perl-test-nowarnings)))
+ (home-page "https://metacpan.org/release/Encode-IMAPUTF7")
+ (synopsis "Modification of UTF-7 encoding for IMAP")
+ (description "Modification of UTF-7 encoding for IMAP")
+ (license #f)))
+
+(define-public perl-file-tail
+ (package
+ (name "perl-file-tail")
+ (version "1.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://cpan/authors/id/M/MG/MGRABNAR/File-Tail-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32 "1ixg6kn4h330xfw3xgvqcbzfc3v2wlzjim9803jflhvfhf0rzl16"))))
+ (build-system perl-build-system)
+ (home-page "https://metacpan.org/release/File-Tail")
+ (synopsis "Perl extension for reading from continously updated files")
+ (description "Perl extension for reading from continously updated files.")
+ (license license:perl-license)))
+
+(define-public perl-io-socket-ssl
+ (package
+ (name "perl-io-socket-ssl")
+ (version "2.073")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://cpan/authors/id/S/SU/SULLR/IO-Socket-SSL-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32 "1j2prw40s3m3i41q3nnbdjw8kz8y992y5ki1ca0smcbwz56v7h5j"))))
+ (build-system perl-build-system)
+ (native-inputs `(("perl-net-ssleay" ,perl-net-ssleay)))
+ (propagated-inputs
+ `(("perl-mozilla-ca" ,perl-mozilla-ca)
+ ("perl-net-ssleay" ,perl-net-ssleay)))
+ (home-page "https://metacpan.org/release/IO-Socket-SSL")
+ (synopsis "Nearly transparent SSL encapsulation for IO::Socket::INET.")
+ (description "Nearly transparent SSL encapsulation for IO::Socket::INET.")
+ (license license:perl-license)))
+
+(define-public perl-io-tee
+ (package
+ (name "perl-io-tee")
+ (version "0.66")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://cpan/authors/id/N/NE/NEILB/IO-Tee-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32 "1q2jhp02rywrbyhvl2lv6qp70dcv5cfalrx3cc4c7y8nclhfg71d"))))
+ (build-system perl-build-system)
+ (home-page "https://metacpan.org/release/IO-Tee")
+ (synopsis "Multiplex output to multiple output handles")
+ (description "Multiplex output to multiple output handles")
+ (license license:perl-license)))
+
+(define-public perl-json-webtoken
+ (package
+ (name "perl-json-webtoken")
+ (version "0.10")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://cpan/authors/id/X/XA/XAICRON/JSON-WebToken-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32 "12r40z7j8gs1p6wqn4k9f3k97p5lngaliidgh96p3w98hnlq5hbp"))))
+ (build-system perl-build-system)
+ (native-inputs
+ `(("perl-module-build" ,perl-module-build)
+ ("perl-test-mock-guard" ,perl-test-mock-guard)
+ ("perl-test-requires" ,perl-test-requires)))
+ (propagated-inputs
+ `(("perl-json" ,perl-json) ("perl-module-runtime" ,perl-module-runtime)))
+ (home-page "https://metacpan.org/release/JSON-WebToken")
+ (synopsis "JSON Web Token (JWT) implementation")
+ (description "JSON Web Token (JWT) implementation")
+ (license license:perl-license)))
+
+(define-public perl-mail-imapclient
+ (package
+ (name "perl-mail-imapclient")
+ (version "3.43")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://cpan/authors/id/P/PL/PLOBBES/Mail-IMAPClient-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32 "0vxl3xfr9fr844nhjx5br1yggavpycnyydi99pzahisvq7x9fg09"))))
+ (build-system perl-build-system)
+ (propagated-inputs `(("perl-parse-recdescent" ,perl-parse-recdescent)))
+ (home-page "https://metacpan.org/release/Mail-IMAPClient")
+ (synopsis "IMAP4 client library")
+ (description "IMAP4 client library.")
+ (license license:perl-license)))
+
+(define-public perl-getopt-argvfile
+ (package
+ (name "perl-getopt-argvfile")
+ (version "1.11")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://cpan/authors/id/J/JS/JSTENZEL/Getopt-ArgvFile-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32 "08jvhfqcjlsn013x96qa6paif0095x6y60jslp8p3zg67i8sl29p"))))
+ (build-system perl-build-system)
+ (home-page "https://metacpan.org/release/Getopt-ArgvFile")
+ (synopsis
+ "Interpolates script options from files into @ARGV or another array")
+ (description "Interpolates script options from files into @ARGV or another array.")
+ (license #f)))
+
+(define-public perl-module-signature
+ (package
+ (name "perl-module-signature")
+ (version "0.88")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://cpan/authors/id/A/AU/AUDREYT/Module-Signature-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32 "14i6yg7z4shsmzzdjzamcyjxpci8jxr0z336a3iy7n9plmss2z3p"))))
+ (build-system perl-build-system)
+ (native-inputs (list perl-ipc-run))
+ (home-page "https://metacpan.org/release/Module-Signature")
+ (synopsis "Module signature file manipulation")
+ (description "Module signature file manipulation.")
+ (license #f)))
+
+(define-public perl-par
+ (package
+ (name "perl-par")
+ (version "1.017")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://cpan/authors/id/R/RS/RSCHUPP/PAR-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32 "0l4nfab7sh7452wgfnn0gdlh8pnrlnvim8njrfgkhk3miqjmnzf3"))))
+ (build-system perl-build-system)
+ (propagated-inputs
+ `(("perl-archive-zip" ,perl-archive-zip) ("perl-par-dist" ,perl-par-dist)))
+ (home-page "https://metacpan.org/release/PAR")
+ (synopsis "Perl Archive Toolkit")
+ (description "Perl Archive Toolkit.")
+ (license license:perl-license)))
+
+(define-public perl-tk-canvas-gradientcolor
+ (package
+ (name "perl-tk-canvas-gradientcolor")
+ (version "1.06")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://cpan/authors/id/D/DJ/DJIBEL/Tk-Canvas-GradientColor-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32 "07nw0xm30kb6mxjxgla2m28npnmrxz46xmvi9n2rhr5fv99jfymj"))))
+ (build-system perl-build-system)
+ (native-inputs
+ `(("perl-module-build" ,perl-module-build) ("perl-tk" ,perl-tk)))
+ (home-page "https://metacpan.org/release/Tk-Canvas-GradientColor")
+ (synopsis "To create a Canvas widget with background gradient color")
+ (description "To create a Canvas widget with background gradient color.")
+ (license license:perl-license)))
+
+(define-public perl-tk-coloredbutton
+ (package
+ (name "perl-tk-coloredbutton")
+ (version "1.05")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://cpan/authors/id/D/DJ/DJIBEL/Tk-ColoredButton-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32 "0hngxviz5jbqchicjdqgby2ibwgr1glyimf88bfmbwk0i4x7h5zj"))))
+ (build-system perl-build-system)
+ (native-inputs
+ (list perl-module-build
+ perl-tk
+ perl-tk-canvas-gradientcolor))
+ (home-page "https://metacpan.org/release/Tk-ColoredButton")
+ (synopsis "Button widget with background gradient color")
+ (description "Button widget with background gradient color.")
+ (license license:perl-license)))
+
+(define-public perl-tk-entrycheck
+ (package
+ (name "perl-tk-entrycheck")
+ (version "0.04")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://cpan/authors/id/S/ST/STRAT/Tk-EntryCheck-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32 "0phx2ppgf8flcv7ap2zx705glz97mnc0cyp0pfibbwqlj3a4hcg8"))))
+ (build-system perl-build-system)
+; (native-inputs (list perl-tk)) ; TODO: needed for tests, but tests fail to open display :0 (depend on xorg)
+ (arguments `(#:tests? #f))
+ (home-page "https://metacpan.org/release/Tk-EntryCheck")
+ (synopsis
+ "Interface to Tk::Entry for controlling its maximum length and content in an easy way")
+ (description "Interface to Tk::Entry for controlling its maximum length and content in an easy way.")
+ (license license:perl-license)))
+
+(define-public perl-tk-fontdialog
+ (package
+ (name "perl-tk-fontdialog")
+ (version "0.18")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://cpan/authors/id/S/SR/SREZIC/Tk-FontDialog-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32 "0ck3h2ssiisbk46l66shzpj7n06pjilx8h007appz2ry46vyh03w"))))
+ (build-system perl-build-system)
+ (propagated-inputs `(("perl-tk" ,perl-tk)))
+ (home-page "https://metacpan.org/release/Tk-FontDialog")
+ (synopsis "A font dialog widget for perl/Tk")
+ (description "A font dialog widget for perl/Tk.")
+ (license #f)))
+
+(define-public perl-tk-getopt
+ (package
+ (name "perl-tk-getopt")
+ (version "0.51")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://cpan/authors/id/S/SR/SREZIC/Tk-Getopt-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32 "0b7kln2614a9sycbbfjj23vpfn3r5rbshi0571wbcrmkjjpm90kg"))))
+ (build-system perl-build-system)
+ (propagated-inputs
+ (list perl-tk perl-tk-fontdialog))
+ (home-page "https://metacpan.org/release/Tk-Getopt")
+ (synopsis "User configuration window for Tk with interface to Getopt::Long")
+ (description "User configuration window for Tk with interface to Getopt::Long.")
+ (license license:perl-license)))
+
+(define-public perl-par-packer
+ (package
+ (name "perl-par-packer")
+ (version "1.052")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://cpan/authors/id/R/RS/RSCHUPP/PAR-Packer-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32 "16il9sgcnjg9w07grwrxagvk30bfn0hhrqa9f5z606k7yhvdbypz"))))
+ (build-system perl-build-system)
+ (native-inputs (list perl-ipc-run3))
+ (propagated-inputs
+ (list perl-archive-zip
+ perl-getopt-argvfile
+ perl-module-scandeps
+; perl-module-signature ;; TODO: this dep fails to build currently
+ perl-par
+ perl-par-dist
+ perl-tk
+ perl-tk-coloredbutton
+ perl-tk-entrycheck
+ perl-tk-getopt))
+ (home-page "https://metacpan.org/release/PAR-Packer")
+ (synopsis "PAR Packager")
+ (description "PAR Packager.")
+ (license license:perl-license)))
+
+(define-public perl-sys-meminfo
+ (package
+ (name "perl-sys-meminfo")
+ (version "0.99")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://cpan/authors/id/S/SC/SCRESTO/Sys-MemInfo-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32 "0fryrzj06wk2kxg4swsj9xqhn53yy55j8fbrf9fsx2rs7afk31h7"))))
+ (build-system perl-build-system)
+ (home-page "https://metacpan.org/release/Sys-MemInfo")
+ (synopsis "Query the total free and used physical memory")
+ (description "Query the total free and used physical memory.")
+ (license #f)))
+
+(define-public perl-test-mock-guard
+ (package
+ (name "perl-test-mock-guard")
+ (version "0.10")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://cpan/authors/id/X/XA/XAICRON/Test-Mock-Guard-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32 "0gdx1nahk5sgg5ns1v1m50di4wshx09hl244lwmbkknnz1iql8kz"))))
+ (build-system perl-build-system)
+ (native-inputs `(("perl-module-build" ,perl-module-build)))
+ (propagated-inputs `(("perl-class-load" ,perl-class-load)))
+ (home-page "https://metacpan.org/release/Test-Mock-Guard")
+ (synopsis "Simple mock test library using RAII")
+ (description "Simple mock test library using RAII.")
+ (license license:perl-license)))
+
+(define-public perl-unicode-string
+ (package
+ (name "perl-unicode-string")
+ (version "2.10")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://cpan/authors/id/G/GA/GAAS/GAAS/Unicode-String-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32 "0s4vp8k7ag7z9lsnnkpa9mnch83kxhp9gh7yiapld5a7rq712jl9"))))
+ (build-system perl-build-system)
+ (home-page "https://metacpan.org/release/Unicode-String")
+ (synopsis "String of Unicode characters (UTF-16BE)")
+ (description "String of Unicode characters (UTF-16BE).")
+ (license #f)))
+
+(define-public perl-app-cpanminus
+ (package
+ (name "perl-app-cpanminus")
+ (version "1.7044")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://cpan/authors/id/M/MI/MIYAGAWA/App-cpanminus-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32 "1ww11x87b6z14yc3xk1sqajqjcx6c28g24rzkmxfylh7wizpcq4v"))))
+ (build-system perl-build-system)
+ (home-page "https://metacpan.org/release/App-cpanminus")
+ (synopsis "Get, unpack, build and install modules from CPAN")
+ (description "Get, unpack, build and install modules from CPAN.")
+ (license license:perl-license)))
+
+(define-public imapsync
+ (package
+ (name "imapsync")
+ (version "2.140")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/imapsync/imapsync")
+ (commit (string-append "imapsync-" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1k4rf582c3434yxj9brsjz0awakd84xwikghyq0h54darqwfm23j"))))
+ (build-system gnu-build-system)
+ (native-inputs (list inetutils perl))
+ ;; TODO: these should be normal inputs, but currently the executable produced is not wrapped, so it fails to load the required libs
+ (propagated-inputs
+ (list perl-cgi
+ perl-app-cpanminus
+ perl-crypt-openssl-rsa
+ perl-data-uniqid
+ perl-digest-hmac
+ perl-dist-checkconflicts
+ perl-encode
+ perl-encode-imaputf7
+ perl-file-copy-recursive
+ perl-file-tail
+ perl-io-socket-inet6
+ perl-io-socket-ssl
+ perl-io-tee
+ perl-json
+ perl-json-webtoken
+ perl-libwww
+ perl-mail-imapclient
+ perl-module-implementation
+ perl-module-scandeps
+ perl-net-ssleay
+ perl-ntlm
+ perl-package-stash
+ perl-par-packer
+ perl-parse-recdescent
+ perl-readonly
+ perl-regexp-common
+ perl-sys-meminfo
+ perl-term-readkey
+ perl-test-deep
+ perl-test-fatal
+ perl-test-mock-guard
+ perl-test-mockobject
+ perl-test-pod
+ perl-test-requires
+ perl-unicode-string
+ perl-uri
+ perl-try-tiny))
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (delete 'configure)
+ (replace 'build
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (bin (string-append out "/bin")))
+ (invoke "make")
+ #t)))
+ (delete 'check)
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out")))
+ (mkdir-p "./W") ;; make install fails unless a W directory exists
+ (invoke "make" "install" "PREFIX=/" (string-append "DESTDIR=" out))
+ #t))))))
+ (synopsis "Imapsync is an IMAP transfers tool")
+ (description
+ "Imapsync is an IMAP transfers tool. The purpose of imapsync is to
+migrate IMAP accounts or to backup IMAP accounts. IMAP is one of the three
+current standard protocols to access mailboxes, the two others are POP3 and HTTP
+with webmails, webmails are often tied to an IMAP server.")
+ (home-page "https://imapsync.lamiral.info/")
+ (license license:public-domain)))