(define-module (xyz euandreh queue) #:use-module ((guix licenses) #:prefix license:) ;; #:use-module ((nonguix licenses) #:prefix ng-license:) #:use-module ((srfi srfi-1) #:prefix srfi-1:) #:use-module (guix build-system gnu) #:use-module (guix build-system python) #:use-module (guix build-system trivial) #:use-module (guix download) #:use-module (guix gexp) #:use-module (guix git-download) #:use-module (guix packages) #:use-module (guix records) #:use-module (guix utils) #:use-module (gnu) #:use-module (gnu packages admin) #:use-module (gnu packages check) #:use-module (gnu packages cpio) #:use-module (gnu packages cups) #:use-module (gnu packages cyrus-sasl) #:use-module (gnu packages dbm) #:use-module (gnu packages image) #:use-module (gnu packages glib) #:use-module (gnu packages gnome) #:use-module (gnu packages mail) #:use-module (gnu packages m4) #:use-module (gnu packages onc-rpc) #:use-module (gnu packages package-management) #:use-module (gnu packages perl) #:use-module (gnu packages python-build) #:use-module (gnu packages python-crypto) #:use-module (gnu packages python-web) #:use-module (gnu packages python-xyz) #:use-module (gnu packages time) #:use-module (gnu packages tls) #:use-module (gnu packages xml) #:use-module (gnu services shepherd) #:export ( shadow-group-configuration shadow-group-configuration-group shadow-group-activation shadow-group-accounts shadow-group-service-type cyrus-service-configuration cyrus-service-configuration-name cyrus-service-configuration-authmech cyrus-service-configuration-log-level cyrus-sasl-configuration cyrus-sasl-configuration-cyrus-sasl cyrus-sasl-configuration-authmech cyrus-sasl-configuration-services cyrus-sasl-configuration-state-dir cyrus-sasl-etc-files cyrus-sasl-activation cyrus-sasl-shepherd-service cyrus-sasl-service-type dkimproxyout-configuration dkimproxyout-configuration-dkimproxy dkimproxyout-configuration-user dkimproxyout-configuration-group dkimproxyout-configuration-listen dkimproxyout-configuration-relay dkimproxyout-configuration-domains dkimproxyout-configuration-selector dkimproxyout-configuration-key-size dkimproxyout-configuration-data-directory dkimproxyout-etc-files dkimproxyout-accounts dkimproxyout-activation dkimproxyout-shepherd-service dkimproxyout-service-type)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; packages ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-public epson-L365 (package (name "epson-L365") (version "1.0.0") (source (origin (method url-fetch) (uri (string-append "https://download3.ebz.epson.net/dsc/f/03/00/03/45/41/92e9c9254f0ee4230a069545ba27ec2858a2c457/epson-inkjet-printer-201401w-" version "-1lsb3.2.src.rpm")) (sha256 (base32 "0c60m1sd59s4sda38dc5nniwa7dh1b0kv1maajr0x9d38gqlyk3x")))) (build-system gnu-build-system) (arguments (list #:phases #~(modify-phases %standard-phases (replace 'unpack (lambda* (#:key outputs #:allow-other-keys) (mkdir "source") (chdir "source") (system (string-append "rpm2cpio " #$source " | cpio -idv")) (invoke "tar" "-xvf" (string-append "epson-inkjet-printer-201401w-" #$version ".tar.gz")) (invoke "tar" "-xvf" (string-append "epson-inkjet-printer-filter-" #$version ".tar.gz")) (substitute* (find-files (string-append "epson-inkjet-printer-201401w-" #$version "/ppds/")) (("/opt/epson-inkjet-printer-201401w/cups/lib") (string-append (assoc-ref outputs "out") "/lib/cups"))) (chdir (string-append "epson-inkjet-printer-filter-" #$version)))) (add-after 'install 'install-extra-files (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (model-dir (string-append out "/share/cups/model/epson-inkjet-printer-201401w"))) (chdir (string-append "../epson-inkjet-printer-201401w-" #$version)) (mkdir-p model-dir) (invoke "cp" "-a" "ppds" model-dir) (invoke "cp" "-a" "lib64" "resource" "watermark" out))))))) (native-inputs (list cpio cups-minimal libjpeg-turbo rpm)) (synopsis "Epson printer driver (L456, L455, L366, L365, L362, L360, L312, L310, L222, L220, L132, L130)") (description "This software is a filter program used with the Common UNIX Printing System (CUPS) under Linux. It supplies high quality printing with Seiko Epson Color Ink Jet Printers.") (home-page "https://www.openprinting.org/driver/epson-201401w") (license ;; SEIKO EPSON CORPORATION SOFTWARE LICENSE AGREEMENT (list #; (ng-license:nonfree "https://epson.com/SoftwareLicenseAgreement") license:lgpl2.1)))) (define-public python-docx (package (name "python-docx") (version "0.8.11") (source (origin (method url-fetch) (uri (pypi-uri "python-docx" version)) (sha256 (base32 "1i7bxghb7knlyjain101qg1jmmz2b6qj03bi3vfxhvcml0rx418i")))) (build-system python-build-system) (arguments `(#:tests? #f)) (propagated-inputs (list python-lxml)) (native-inputs (list python-pytest ;; python-behave python-mock)) (home-page "https://github.com/python-openxml/python-docx") (synopsis "Create and update Microsoft Word .docx files.") (description "Create and update Microsoft Word .docx files.") (license #f))) (define-public python-pytest-tornado5 (package (name "python-pytest-tornado5") (version "2.0.0") (source (origin (method url-fetch) (uri (pypi-uri "pytest-tornado5" version)) (sha256 (base32 "0qb62jw2w0xr6y942yp0qxiy755bismjfpnxaxjjm05gy2pymr8d")))) (build-system python-build-system) (propagated-inputs (list python-pytest python-tornado)) (home-page "https://github.com/vidartf/pytest-tornado") (synopsis "A py.test plugin providing fixtures and markers to simplify testing of asynchronous tornado applications.") (description "This package provides a py.test plugin providing fixtures and markers to simplify testing of asynchronous tornado applications.") (license license:asl2.0))) ;; FIXME #; (define-public python-futures (package (name "python-futures") (version "3.3.0") (source (origin (method url-fetch) (uri (pypi-uri "futures" version)) (sha256 (base32 "154pvaybk9ncyb1wpcnzgd7ayvvhhzk92ynsas7gadaydbvkl0vy")))) (build-system python-build-system) (home-page "https://github.com/agronholm/pythonfutures") (synopsis "Backport of the concurrent.futures package from Python 3") (description "Backport of the concurrent.futures package from Python 3") (license #f))) (define-public python-ordereddict (package (name "python-ordereddict") (version "1.1") (source (origin (method url-fetch) (uri (pypi-uri "ordereddict" version)) (sha256 (base32 "07qvy11nvgxpzarrni3wrww3vpc9yafgi2bch4j2vvvc42nb8d8w")))) (build-system python-build-system) (arguments `(#:phases (modify-phases %standard-phases (delete 'sanity-check)))) (home-page "UNKNOWN") (synopsis "A drop-in substitute for Py2.7's new collections.OrderedDict that works in Python 2.4-2.6.") (description "This package provides a drop-in substitute for Py2.7's new collections.OrderedDict that works in Python 2.4-2.6.") (license #f))) (define-public python-funcsigs (package (name "python-funcsigs") (version "1.0.2") (source (origin (method url-fetch) (uri (pypi-uri "funcsigs" version)) (sha256 (base32 "0l4g5818ffyfmfs1a924811azhjj8ax9xd1cffr1mzd3ycn0zfx7")))) (build-system python-build-system) (propagated-inputs (list python-ordereddict)) (native-inputs (list python-unittest2)) (home-page "http://funcsigs.readthedocs.org") (synopsis "Python function signatures from PEP362 for Python 2.6, 2.7 and 3.2+") (description "Python function signatures from PEP362 for Python 2.6, 2.7 and 3.2+") (license #f))) (define-public python-apscheduler (package (name "python-apscheduler") (version "3.9.1") (source (origin (method url-fetch) (uri (pypi-uri "APScheduler" version)) (sha256 (base32 "1qzi1pr7q72vs49p7vr1mp350zaggs52lpq43lvqsjcmcd5mgrk5")))) (build-system python-build-system) (arguments `(#:tests? #f)) (propagated-inputs (list python-funcsigs ; python-futures python-pytz python-setuptools python-six python-tzlocal)) (native-inputs (list python-mock python-pytest python-pytest-asyncio python-pytest-cov python-pytest-tornado5 python-setuptools-scm)) (home-page "https://github.com/agronholm/apscheduler") (synopsis "In-process task scheduler with Cron-like capabilities") (description "In-process task scheduler with Cron-like capabilities") (license license:expat))) (define-public python-telegram-bot (package (name "python-telegram-bot") (version "13.12") (source (origin (method url-fetch) (uri (pypi-uri "python-telegram-bot" version)) (sha256 (base32 "1rbdyr1f9mndlh83in47k8if65yp9n1dy4px2wipbf0qyjv5zxfs")))) (build-system python-build-system) (arguments `(#:tests? #f #:phases (modify-phases %standard-phases (delete 'sanity-check)))) (native-inputs (list python-apscheduler)) (propagated-inputs (list python-apscheduler python-cachetools python-certifi python-pytz python-tornado)) (home-page "https://python-telegram-bot.org/") (synopsis "We have made you a wrapper you can't refuse") (description "We have made you a wrapper you can't refuse") (license #f))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; services ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-record-type* shadow-group-configuration make-shadow-group-configuration shadow-group-configuration? (group shadow-group-configuration-group (default "etc-shadow"))) (define (shadow-group-activation config) (match-record config (group) #~(begin (use-modules (guix build utils)) (format (current-error-port) "Setting ownership and permission for \"/etc/passwd\".~%") (chown "/etc/shadow" (passwd:uid (getpwnam "root")) (group:gid (getgrnam #$group))) (chmod "/etc/shadow" #o640)))) (define (shadow-group-accounts config) (match-record config (group) (list (user-group (name group) (system? #t))))) (define shadow-group-service-type (service-type (name 'shadow-group) (extensions (list (service-extension activation-service-type shadow-group-activation) (service-extension account-service-type shadow-group-accounts))) (default-value (shadow-group-configuration)) (description "FIXME:DOCUMENTATION: heredoc syntax?"))) (define-record-type* cyrus-service-configuration make-cyrus-service-configuration cyrus-service-configuration? (name cyrus-service-configuration-name) (authmech cyrus-service-configuration-authmech (default "saslauthd")) (log-level cyrus-service-configuration-log-level (default 7))) (define-record-type* cyrus-sasl-configuration make-cyrus-sasl-configuration cyrus-sasl-configuration? (cyrus-sasl cyrus-sasl-configuration-cyrus-sasl (default cyrus-sasl)) (user cyrus-sasl-configuration-user (default "cyrus-sasl")) (group cyrus-sasl-configuration-group (default "cyrus-sasl")) (supplementary-groups cyrus-sasl-configuration-supplementary-groups (default '("etc-shadow"))) (authmech cyrus-sasl-configuration-authmech (default "shadow")) (services cyrus-sasl-configuration-services (default '())) (state-dir cyrus-sasl-configuration-state-dir (default "/var/lib/saslauthd"))) (define (cyrus-sasl-etc-files config) (match-record config (services state-dir) `(("sasl2" ,(file-union "cyrus-sasl" (map (lambda (service-config) (match-record service-config (name authmech log-level) `(,name ,(plain-file name (format #f "pwcheck_method: ~a~%saslauthd_path: ~a/mux~%log_level: ~a~%" authmech state-dir log-level))))) services)))))) (define (cyrus-sasl-activation config) (match-record config (user state-dir) #~(begin (use-modules (guix build utils)) (let ((user (getpwnam #$user))) (format (current-error-port) "Creating Cyrus SASL socket directory: \"~a\".~%" #$state-dir) (mkdir-p #$state-dir) (chown #$state-dir (passwd:uid user) (passwd:gid user)) (chmod #$state-dir #o755))))) (define (cyrus-sasl-accounts config) (match-record config (user group supplementary-groups) (list (user-account (name user) (group group) (supplementary-groups supplementary-groups) (comment "Cyrus SASL system user") (home-directory "/var/empty") (shell (file-append shadow "/sbin/nologin")) (system? #t)) (user-group (name group) (system? #t))))) (define (cyrus-sasl-shepherd-service config) (match-record config (cyrus-sasl user group supplementary-groups authmech state-dir) (list (shepherd-service (provision '(cyrus-sasl)) (documentation "FIXME:DOCUMENTATION: heredoc syntax?") (start #~(make-forkexec-constructor (list #$(file-append cyrus-sasl "/sbin/saslauthd") "-a" #$authmech "-d" "-m" #$state-dir) #:user #$user #:group #$group #:supplementary-groups #$supplementary-groups)) (stop #~(make-kill-destructor)))))) (define cyrus-sasl-service-type (service-type (name 'cyrus-sasl) (extensions (list (service-extension etc-service-type cyrus-sasl-etc-files) (service-extension activation-service-type cyrus-sasl-activation) (service-extension profile-service-type (compose list cyrus-sasl-configuration-cyrus-sasl)) (service-extension account-service-type cyrus-sasl-accounts) (service-extension shepherd-root-service-type cyrus-sasl-shepherd-service))) (compose srfi-1:concatenate) (extend (lambda (config services) (cyrus-sasl-configuration (inherit config) (services (append (cyrus-sasl-configuration-services config) services))))) (default-value (cyrus-sasl-configuration)) (description "FIXME:DOCUMENTATION: heredoc syntax?"))) (define-record-type* dkimproxyout-configuration make-dkimproxyout-configuration dkimproxyout-configuration? (dkimproxy dkimproxyout-configuration-dkimproxy (default dkimproxy)) (user dkimproxyout-configuration-user (default "dkimproxyout")) (group dkimproxyout-configuration-group (default "dkimproxyout")) (config-name dkimproxyout-configuration-config-name (default "dkimproxyout.conf")) (listen dkimproxyout-configuration-listen (default "127.0.0.1:10027")) (relay dkimproxyout-configuration-relay (default "127.0.0.1:10028")) (domains dkimproxyout-configuration-domains (default (list (gethostname)))) (selector dkimproxyout-configuration-selector (default "dkimproxy")) (key-size dkimproxyout-configuration-key-size (default 2048)) (data-directory dkimproxyout-configuration-data-directory (default "/var/lib/dkimproxyout"))) (define (generate-out.cf config) (match-record config (listen relay domains selector data-directory) (format #f " listen ~a relay ~a domain ~a selector ~a signature dkim(c=relaxed/relaxed) # FIXME:DOCUMENTATION add this to the service documentation # the corresponding public key is available at: # ~a/public.key keyfile ~a/private.key " listen relay (string-join domains ",") selector data-directory data-directory))) (define (dkimproxyout-etc-files config) (match-record config (config-name) `((,config-name ,(plain-file ,config-name (generate-out.cf config)))))) (define (dkimproxyout-accounts config) (match-record config (user group) (list (user-account (name user) (group group) (comment "DKIMproxy-out signing system user") (home-directory "/var/empty") (shell (file-append shadow "/sbin/nologin")) (system? #t)) (user-group (name group) (system? #t))))) (define (dkimproxyout-activation config) (match-record config (user group data-directory key-size) #~(begin (use-modules (guix build utils)) (let ((uid (passwd:uid (getpwnam #$user))) (gid (group:gid (getgrnam #$group)))) (format (current-error-port) "Creating DKIMproxy-out data directory: \"~a\".~%" #$data-directory) (mkdir-p #$data-directory) (chown #$data-directory uid gid) (chmod #$data-directory #o755) (let ((private-key (string-append #$data-directory "/private.key")) (public-key (string-append #$data-directory "/public.key"))) (unless (file-exists? private-key) (cond ((zero? (system* #$(file-append openssl "/bin/openssl") "genrsa" "-out" private-key (number->string #$key-size))) (format (current-error-port) "DKIMproxy private key file created: \"~a\".~%" private-key)) (else (format (current-error-port) "Failed to create DKIMproxy private key file: \"~a\".~%" private-key)))) (invoke #$(file-append openssl "/bin/openssl") "rsa" "-in" private-key "-pubout" "-out" public-key) (format (current-error-port) "Setting permissions for the public/private DKIMproxy keypair: \"~a/{public,private}.key\".~%" #$data-directory) (chown private-key uid gid) (chown public-key uid gid) (chmod private-key #o400) (chmod public-key #o644)))))) (define (dkimproxyout-shepherd-service config) (match-record config (dkimproxy user group config-name) (let ((config-file (string-append "/etc/" config-file))) (list (shepherd-service (provision '(dkimproxy)) (documentation "FIXME:DOCUMENTATION: heredoc syntax?") (start #~(make-forkexec-constructor (list #$(file-append dkimproxy "/bin/dkimproxy.out") "--conf_file" #$config-file) #:user #$user #:group #$group)) (stop #~(make-kill-destructor)) (actions (list (shepherd-action (name 'configuration) (documentation "FIXME:DOCUMENTATION: heredoc syntax?") (procedure #~(lambda _ (format #t "~a~%" #$config-file))))))))))) (define-public dkimproxyout-service-type (service-type (name 'dkimproxy) (extensions (list (service-extension etc-service-type dkimproxyout-etc-files) (service-extension account-service-type dkimproxyout-accounts) (service-extension activation-service-type dkimproxyout-activation) (service-extension profile-service-type (compose list dkimproxyout-configuration-dkimproxy)) (service-extension shepherd-root-service-type dkimproxyout-shepherd-service))) (default-value (dkimproxyout-configuration)) (description "FIXME:DOCUMENTATION: heredoc syntax?"))) (list epson-L365 python-docx python-telegram-bot)