From 8ffad17883833f6357d36de6f644c13d1f2fb25d Mon Sep 17 00:00:00 2001 From: Phillip Davis Date: Mon, 8 Dec 2025 13:55:54 -0500 Subject: [PATCH] guixify --- guix.scm | 616 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 616 insertions(+) create mode 100644 guix.scm diff --git a/guix.scm b/guix.scm new file mode 100644 index 0000000000000000000000000000000000000000..bd1e639efddd1407109a124f623908c018fd99c9 --- /dev/null +++ b/guix.scm @@ -0,0 +1,616 @@ +(use-modules + ((guix licenses) #:prefix license:) + (guix packages) + (guix download) + (guix gexp) + (guix git-download) + (guix build-system ruby) + (guix build-system copy) + (gnu packages databases) + (gnu packages rails) + (gnu packages ruby) + (gnu packages tls) + (ice-9 rdelim) + (ice-9 popen)) + +(define-public ruby-guard-compat + (package + (name "ruby-guard-compat") + (version "1.2.1") + (source (origin + (method url-fetch) + (uri (rubygems-uri "guard-compat" version)) + (sha256 + (base32 + "1zj6sr1k8w59mmi27rsii0v8xyy2rnsi09nqvwpgj1q10yq1mlis")))) + (build-system ruby-build-system) + (native-inputs (list ruby-rspec ruby-rubocop)) + (synopsis "Helps creating valid Guard plugins and testing them") + (description "Helps creating valid Guard plugins and testing them") + (home-page "") + (license license:expat))) + +(define-public ruby-guard-rspec + (package + (name "ruby-guard-rspec") + (version "4.7.3") + (source (origin + (method url-fetch) + (uri (rubygems-uri "guard-rspec" version)) + (sha256 + (base32 + "1jkm5xp90gm4c5s51pmf92i9hc10gslwwic6mvk72g0yplya0yx4")))) + (build-system ruby-build-system) + (propagated-inputs (list ruby-guard ruby-guard-compat ruby-rspec)) + (synopsis + "Guard::RSpec automatically run your specs (much like autotest).") + (description + "Guard::RSpec automatically run your specs (much like autotest).") + (home-page "https://github.com/guard/guard-rspec") + (license license:expat))) + +(define-public ruby-blather + (package + (name "ruby-blather") + (version "03f9cda14ed3f93a80504c2538cd514d6b025d04") + (source + (origin + (method git-fetch) + ;; Download from GitHub because the rubygems version requires old + ;; version of bundler Rakefile. + (uri (git-reference + (url "https://github.com/adhearsion/blather") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0r098lx4av8qywb521ilin8j4lvrb0pmcdb2l0dkljmzkb6lxa3i")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f #:phases + (modify-phases %standard-phases + (add-after 'extract-gemspec 'less-strict-dependencies + (lambda _ + (substitute* "blather.gemspec" + ((".*guard-rspec.*") "\n") + ((".*bluecloth.*") "\n")) + #t))))) + (propagated-inputs + (list ruby-activesupport + ruby-eventmachine + ruby-niceogiri + ruby-nokogiri + ruby-sucker-punch)) + (native-inputs + (list ruby-rspec + ruby-yard + ruby-countdownlatch + ruby-rb-fsevent + ruby-mocha)) + (synopsis + "An XMPP DSL for Ruby written on top of EventMachine and Nokogiri") + (description + "An XMPP DSL for Ruby written on top of EventMachine and Nokogiri") + (home-page "http://adhearsion.com/blather") + (license license:expat))) + +(define-public ruby-hiredis + (package + (name "ruby-hiredis") + (version "0.6.3") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "hiredis" version)) + (sha256 + (base32 "04jj8k7lxqxw24sp0jiravigdkgsyrpprxpxm71ba93x1wr2w1bz")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f + #:phases + (modify-phases %standard-phases + (add-after 'extract-gemspec 'set-cc + (lambda _ + (putenv "CC=gcc")))))) + (native-inputs (list ruby-rake-compiler)) + (synopsis + "Ruby wrapper for hiredis (protocol serialization/deserialization and blocking I/O)") + (description + "Ruby wrapper for hiredis (protocol serialization/deserialization and blocking +I/O)") + (home-page "http://github.com/redis/hiredis-rb") + (license #f))) + +(define-public ruby-base64 + (package + (name "ruby-base64") + (version "0.3.0") + (source (origin + (method url-fetch) + (uri (rubygems-uri "base64" version)) + (sha256 + (base32 + "0yx9yn47a8lkfcjmigk79fykxvr80r4m1i35q82sxzynpbm7lcr7")))) + (build-system ruby-build-system) + (arguments + ;; No Rakefile + `(#:tests? #f)) + (synopsis + "Support for encoding and decoding binary data using a Base64 representation.") + (description + "Support for encoding and decoding binary data using a Base64 representation.") + (home-page "https://github.com/ruby/base64") + (license #f))) + +(define-public ruby-mutex-m + (package + (name "ruby-mutex-m") + (version "0.3.0") + (source (origin + (method url-fetch) + (uri (rubygems-uri "mutex_m" version)) + (sha256 + (base32 + "0l875dw0lk7b2ywa54l0wjcggs94vb7gs8khfw9li75n2sn09jyg")))) + (build-system ruby-build-system) + (arguments + ;; No Rakefile + `(#:tests? #f)) + (synopsis "Mixin to extend objects to be handled like a Mutex.") + (description "Mixin to extend objects to be handled like a Mutex.") + (home-page "https://github.com/ruby/mutex_m") + (license #f))) + +(define-public ruby-eventmachine-openssl + (package + (inherit ruby-eventmachine) + (inputs `(("openssl" ,openssl))))) + +(define-public ruby-dhall + (package + (name "ruby-dhall") + (version "0.5.7") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "dhall" version)) + (sha256 + (base32 + "1fmd4jfd66sdyihqigc2vgdjzjy7gi513gjmwz07rds7f7x70fsq")))) + (build-system ruby-build-system) + (arguments + ;; No test in gem archive + `(#:tests? #f)) + (propagated-inputs + `(("ruby-base32" ,ruby-base32) + ("ruby-cbor" ,ruby-cbor) + ("ruby-citrus" ,ruby-citrus) + ("ruby-lazy-object" ,ruby-lazy-object) + ("ruby-multihashes" ,ruby-multihashes) + ("ruby-promise.rb" ,ruby-promise-rb) + ("ruby-value-semantics" ,ruby-value-semantics))) + (synopsis + "This is a Ruby implementation of the Dhall configuration language. Dhall is a powerful, but safe and non-Turing-complete configuration language. For more information, see: https://dhall-lang.org") + (description + "This is a Ruby implementation of the Dhall configuration language. Dhall is a powerful, but safe and non-Turing-complete configuration language. For more information, see: https://dhall-lang.org") + (home-page + "https://git.sr.ht/~singpolyma/dhall-ruby") + (license license:gpl3))) + +(define-public ruby-socksify + (package + (name "ruby-socksify") + (version "1.8.1") + (source (origin + (method url-fetch) + (uri (rubygems-uri "socksify" version)) + (sha256 + (base32 + "0mm8m7zfvszbf9l750c2x693p8100rrk6ckvcp6909631ir02ang")))) + (build-system ruby-build-system) + (arguments + ;; No rakefile + `(#:tests? #f)) + (synopsis "Redirect all TCPSockets through a SOCKS5 proxy") + (description "Redirect all TCPSockets through a SOCKS5 proxy") + (home-page "https://github.com/astro/socksify-ruby") + (license #f))) + +(define-public ruby-wasabi + (package + (name "ruby-wasabi") + (version "3.7.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "wasabi" version)) + (sha256 + (base32 "1mffdf7z1rmcs0k678vhzgnb080zcwhkk94hvj3hxjakys339ndb")))) + (build-system ruby-build-system) + (arguments + ;; No Rakefile + `(#:tests? #f)) + (propagated-inputs (list ruby-addressable ruby-httpi ruby-nokogiri)) + (synopsis "A simple WSDL parser") + (description "This package provides a simple WSDL parser.") + (home-page "https://github.com/savonrb/wasabi") + (license license:expat))) + +(define-public ruby-nkf + (package + (name "ruby-nkf") + (version "0.2.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "nkf" version)) + (sha256 + (base32 "09piyp2pd74klb9wcn0zw4mb5l0k9wzwppxggxi1yi95l2ym3hgv")))) + (build-system ruby-build-system) + (native-inputs (list ruby-rake-compiler)) + (synopsis "Ruby extension for Network Kanji Filter") + (description "Ruby extension for Network Kanji Filter.") + (home-page "https://github.com/ruby/nkf") + (license license:bsd-2))) + +(define-public ruby-httpi + (package + (name "ruby-httpi") + (version "2.5.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "httpi" version)) + (sha256 + (base32 "0v8ah9indflp0w6jdzkzgs72xiwbam5v1c58migj0dkavkrai45h")))) + (build-system ruby-build-system) + (arguments ;; No Rakefile + `(#:tests? #f)) + (propagated-inputs (list ruby-base64 ruby-mutex-m ruby-nkf ruby-rack)) + (synopsis "Common interface for Ruby's HTTP libraries") + (description "Common interface for Ruby's HTTP libraries.") + (home-page "http://github.com/savonrb/httpi") + (license license:expat))) + +(define-public ruby-gyoku + (package + (name "ruby-gyoku") + (version "1.4.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "gyoku" version)) + (sha256 + (base32 "1kd2q59xpm39hpvmmvyi6g3f1fr05xjbnxwkrdqz4xy7hirqi79q")))) + (build-system ruby-build-system) + (arguments + ;; Tests need a whole other set of dependencies + `(#:tests? #f)) + (propagated-inputs (list ruby-builder ruby-rexml)) + (synopsis "Gyoku translates Ruby Hashes to XML") + (description "Gyoku translates Ruby Hashes to XML.") + (home-page "https://github.com/savonrb/gyoku") + (license license:expat))) + +(define-public ruby-akami + (package + (name "ruby-akami") + (version "1.3.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "akami" version)) + (sha256 + (base32 "168y57kd9wshzqqk127w7lknd8lr0b9k50wazw4c92zshq3sw2jd")))) + (build-system ruby-build-system) + (arguments + ;; No Rakefile + `(#:tests? #f)) + (propagated-inputs (list ruby-base64 ruby-gyoku ruby-nokogiri)) + (synopsis "Building Web Service Security") + (description "Building Web Service Security.") + (home-page "https://github.com/savonrb/akami") + (license license:expat))) + +(define-public ruby-savon + (package + (name "ruby-savon") + (version "2.14.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "savon" version)) + (sha256 + (base32 "17fgsaprz5ihngmncl6f6qzja97rmfavmhhwhdspi7ql9hix5wyr")))) + (build-system ruby-build-system) + (native-inputs (list ruby-rspec)) + (propagated-inputs (list ruby-akami + ruby-builder + ruby-gyoku + ruby-httpi + ruby-mail + ruby-nokogiri + ruby-nori + ruby-socksify + ruby-wasabi)) + (synopsis "Heavy metal SOAP client") + (description "Heavy metal SOAP client.") + (home-page "http://savonrb.com") + (license license:expat))) + +(define-public ruby-em-hiredis + (package + (name "ruby-em-hiredis") + (version "0.3.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "em-hiredis" version)) + (sha256 + (base32 "0lh276x6wngq9xy75fzzvciinmdlys93db7chy968i18japghk6z")))) + (build-system ruby-build-system) + (arguments '(#:tests? #f)) + (propagated-inputs (list ruby-eventmachine ruby-hiredis)) + (synopsis "Eventmachine redis client using hiredis native parser") + (description "Eventmachine redis client using hiredis native parser.") + (home-page "http://github.com/mloughran/em-hiredis") + (license #f))) + + +(define-public ruby-amazing-print + (package + (name "ruby-amazing-print") + (version "1.5.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "amazing_print" version)) + (sha256 + (base32 "0qik1igcs0ylw5b5dwx9npqac5r21d9fcv611h7klcspfari3x7r")))) + (build-system ruby-build-system) + (arguments '(#:tests? #f)) + (synopsis + "Great Ruby debugging companion: pretty print Ruby objects to visualize their structure. Supports custom object formatting via plugins") + (description + "Great Ruby debugging companion: pretty print Ruby objects to visualize their +structure. Supports custom object formatting via plugins.") + (home-page "https://github.com/amazing-print/amazing_print") + (license license:expat))) + +(define-public ruby-em-socksify + (package + (name "ruby-em-socksify") + (version "0.3.2") + (source (origin + (method url-fetch) + (uri (rubygems-uri "em-socksify" version)) + (sha256 + (base32 + "0rk43ywaanfrd8180d98287xv2pxyl7llj291cwy87g1s735d5nk")))) + (build-system ruby-build-system) + (arguments + ;; Tests are broken + `(#:tests? #f)) + (propagated-inputs (list ruby-eventmachine)) + (synopsis "Transparent proxy support for any EventMachine protocol") + (description "Transparent proxy support for any EventMachine protocol") + (home-page "https://github.com/igrigorik/em-socksify") + (license license:expat))) + +(define-public ruby-cookiejar + (package + (name "ruby-cookiejar") + (version "0.3.3") + (source (origin + (method url-fetch) + (uri (rubygems-uri "cookiejar" version)) + (sha256 + (base32 + "0q0kmbks9l3hl0wdq744hzy97ssq9dvlzywyqv9k9y1p3qc9va2a")))) + (build-system ruby-build-system) + (native-inputs + `(("ruby-rspec" ,ruby-rspec) + ("ruby-rspec-collection-matchers" ,ruby-rspec-collection-matchers) + ("ruby-yard" ,ruby-yard))) + (synopsis + "Allows for parsing and returning cookies in Ruby HTTP client code") + (description + "Allows for parsing and returning cookies in Ruby HTTP client code") + (home-page "http://alkaline-solutions.com") + (license #f))) + +(define-public ruby-em-http-request + (package + (name "ruby-em-http-request") + (version "b51f48fafa6443ad48c89930716c5c427561abd8") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/singpolyma/em-http-request") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1kbaghj1gqz1dpl2hikpa4xggfmavma2y442yzsgqk27gmfp9iqq")))) + (build-system ruby-build-system) + (arguments + ;; Tests need a whole other set of dependencies + `(#:tests? #f)) + (propagated-inputs (list ruby-addressable ruby-cookiejar ruby-em-socksify + ruby-eventmachine ruby-http-parser.rb)) + (synopsis "EventMachine based, async HTTP Request client") + (description "EventMachine based, async HTTP Request client") + (home-page "http://github.com/igrigorik/em-http-request") + (license license:expat))) + +(define-public ruby-promise-rb + (package + (name "ruby-promise-rb") + (version "0.7.4") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "promise.rb" version)) + (sha256 + (base32 "0a819sikcqvhi8hck1y10d1nv2qkjvmmm553626fmrh51h2i089d")))) + (build-system ruby-build-system) + (arguments + ;; Depends on devtools, which has a crazy long dependency chain. + `(#:tests? #f)) + (synopsis "Promises/A+ for Ruby") + (description "Promises/A+ for Ruby.") + (home-page "https://github.com/lgierth/promise") + (license license:unlicense))) + +(define-public ruby-em-promise-rb + (package + (name "ruby-em-promise-rb") + (version "0.0.5") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "em_promise.rb" version)) + (sha256 + (base32 "00rkmacyf6i2gq0giaxzwr24ygrwwzndrq7kkbpqcq9glk01w692")))) + (build-system ruby-build-system) + (arguments + ;; No Rakefile + `(#:tests? #f)) + (propagated-inputs (list ruby-eventmachine ruby-promise-rb)) + (synopsis "A subclass of promise.rb Promise for EventMachine.") + (description + "This package provides a subclass of promise.rb Promise for @code{EventMachine}.") + (home-page "https://git.singpolyma.net/em_promise.rb") + (license license:agpl3))) +(define-public ruby-ougai + (package + (name "ruby-ougai") + (version "2.0.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "ougai" version)) + (sha256 + (base32 "0zmngsm3lrliscry7ljw7x5gnf3m4cn4kdgnxccaidhwj0mm539f")))) + (build-system ruby-build-system) + ;; Tests broken + (arguments + `(#:tests? #f)) + (propagated-inputs (list ruby-oj)) + (synopsis + " A structured logging system is capable of handling a message, custom data or an exception easily. + It has JSON formatters compatible with Bunyan or pino for Node.js and human readable formatter with Amazing Print for console. +") + (description + "This package provides a structured logging system is capable of handling a +message, custom data or an exception easily. It has JSON formatters compatible +with Bunyan or pino for Node.js and human readable formatter with Amazing Print +for console.") + (home-page "https://github.com/tilfin/ougai") + (license license:expat))) + +(define-public ruby-rspec-collection-matchers + (package + (name "ruby-rspec-collection-matchers") + (version "1.2.0") + (source (origin + (method url-fetch) + (uri (rubygems-uri "rspec-collection_matchers" version)) + (sha256 + (base32 + "1864xlxl7mi6mvjyp85a0gc10cyvpf6bj8lc86sf8737wlzn12ks")))) + (build-system ruby-build-system) + (arguments + ;; No rakefile + `(#:tests? #f)) + (propagated-inputs (list ruby-rspec-expectations)) + (synopsis + "Collection cardinality matchers, extracted from rspec-expectations") + (description + "Collection cardinality matchers, extracted from rspec-expectations") + (home-page "https://github.com/rspec/rspec-collection_matchers") + (license license:expat))) + +;;;; + +(define %source-dir (dirname (current-filename))) +(define %git-dir (string-append %source-dir "/.git")) + +; Bake a template by eval'ing the leaves +(define-public (bake tmpl) + (list + (car tmpl) + (cons (caadr tmpl) (map + (lambda (x) (list (car x) (eval (cadr x) (current-module)))) + (cdadr tmpl))))) + +; double-escaped template of the sgx-endstream sexp +(define-public sgx-endstream-template + '((package-input-rewriting `((,ruby-eventmachine . ,ruby-eventmachine-openssl))) + (package + (name "sgx-endstream") + (version (read-line (open-pipe* OPEN_READ "git" "--git-dir" %git-dir "describe" "--always" "--dirty"))) + (source + `(origin + (method git-fetch) + (uri (git-reference + (recursive? #t) + (url "https://git.singpolyma.net/sgx-endstream") + (commit ,(read-line (open-pipe* OPEN_READ "git" "--git-dir" %git-dir "rev-parse" "HEAD"))))) + (file-name (git-file-name name version)) + (sha256 + (base32 + ,(read-line (open-pipe* OPEN_READ "guix" "hash" "-rx" %source-dir)))))) + (build-system 'copy-build-system) + (arguments + ''(#:install-plan '(("." "share/sgx-endstream")) + #:phases + (modify-phases %standard-phases + (add-after 'install 'wrap + (lambda* (#:key outputs #:allow-other-keys) + (use-modules (ice-9 ftw)) + (let* ((out (assoc-ref outputs "out")) + (appdir (string-append out "/share/sgx-endstream/")) + (bindir (string-append out "/bin/"))) + (mkdir-p bindir) + (let ((binstub (string-append bindir "sgx_endstream"))) + (call-with-output-file binstub + (lambda (port) + (format port + "#!~a~%ENV['GEM_PATH'] = ['~a', ENV['GEM_PATH']].compact.join(':')~%Gem.clear_paths~%load '~a~a'~%" + (which "ruby") + (getenv "GEM_PATH") + appdir + "sgx_endstream.rb"))) + (chmod binstub #o755))) + #t))))) + (propagated-inputs + '(list + ruby + ruby-amazing-print + ruby-blather + ruby-dhall + ruby-em-hiredis + ruby-em-http-request + ruby-em-promise-rb + ruby-eventmachine + ruby-ougai + ruby-savon + ruby-sentry)) + (synopsis + "Endstream gateway component") + (description + "") + (home-page + "https://git.singpolyma.net/sgx-endstream") + (license 'license:agpl3)))) + +; Baked version of sgx-endstream-template with leaves eval'd +(define-public sgx-endstream-baked + (bake sgx-endstream-template)) + +; Build clean from git the version from a local clone +; To build whatever is sitting in local use: +; guix build --with-source=$PWD -f guix.scm +(eval sgx-endstream-baked (current-module))