(use-modules (gnu packages) (gnu packages autotools) (gnu packages guile) (gnu packages guile-xyz) (gnu packages pkg-config) (gnu packages texinfo) (gnu packages tree-sitter) (guix build-system gnu) (guix download) (guix gexp) (guix git-download) (guix transformations) ((guix licenses) #:prefix license:) (guix packages) (srfi srfi-1)) (define guile-ts-next (let ((commit "266453a")) (package (inherit guile-ts) (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/Z572/guile-ts") (commit commit))) (file-name (git-file-name (package-name guile-ts) commit)) (sha256 (base32 "1s65kpwhsphbjlggpc6gy1wbap85yjzdb69xfvs8j204w24smjps"))))))) (package (name "sloth") (version "0.1-dev") (source (local-file (dirname (current-filename)) #:recursive? #t #:select? (λ (file stat) (not (any (λ (my-string) (string-contains file my-string)) (list ".git" ".dir-locals.el" "guix.scm")))))) (build-system gnu-build-system) (arguments (list #:make-flags #~(list "GUILE_AUTO_COMPILE=0") #:phases #~(modify-phases %standard-phases (delete 'strip) (add-before 'configure 'hall-build (λ _ (system* "hall" "build" "-x"))) (add-after 'hall-build 'autoreconf (λ _ (system* "autoreconf" "-vif"))) (add-after 'install 'hall-wrap-binaries (λ _ (use-modules (ice-9 ftw)) (define (guile-compiled-dir out version) (string-append out "/lib/guile/" version "/site-ccache")) (define (guile-uncompiled-dir out version) (string-append out "/share/guile/site" (if (string-null? version) "" "/") version)) (define (guile-dep-path env modules path) (list env ":" 'prefix (cons modules (map (λ (input) (string-append input path)) ;; TODO: figure out how to put these in a list shared ;; with inputs because DRY (list #$guile-config #$guile-ncurses #$guile-ts-next))))) (define bin (string-append #$output "/bin/")) (define site (guile-uncompiled-dir #$output "")) (define version (caddr (scandir site))) (wrap-program (string-append bin "sloth") (guile-dep-path "GUILE_LOAD_PATH" (guile-uncompiled-dir #$output version) (guile-uncompiled-dir "" version)) (guile-dep-path "GUILE_LOAD_COMPILED_PATH" (guile-compiled-dir #$output version) (guile-compiled-dir "" version)) (list "TREE_SITTER_GRAMMAR_PATH" ":" '= (map (λ (input) (string-append input "/lib/tree-sitter")) ;; TODO: figure out how to put these in a list shared ;; with inputs because DRY (list #$tree-sitter-bash #$tree-sitter-bibtex #$tree-sitter-c #$tree-sitter-c-sharp #$tree-sitter-clojure #$tree-sitter-cmake #$tree-sitter-cpp #$tree-sitter-css #$tree-sitter-dockerfile #$tree-sitter-elixir #$tree-sitter-elm #$tree-sitter-go #$tree-sitter-gomod #$tree-sitter-haskell #$tree-sitter-heex #$tree-sitter-html #$tree-sitter-java #$tree-sitter-javascript #$tree-sitter-json #$tree-sitter-julia #$tree-sitter-lua #$tree-sitter-markdown #$tree-sitter-markdown-gfm #$tree-sitter-meson #$tree-sitter-ocaml #$tree-sitter-org #$tree-sitter-php #$tree-sitter-plantuml #$tree-sitter-python #$tree-sitter-r #$tree-sitter-racket #$tree-sitter-ruby #$tree-sitter-rust #$tree-sitter-scala #$tree-sitter-scheme #$tree-sitter-typescript))))))))) (native-inputs (list autoconf automake guile-hall pkg-config texinfo)) (inputs (list guile-3.0 guile-config guile-ncurses guile-ts-next tree-sitter-bash tree-sitter-bibtex tree-sitter-c tree-sitter-c-sharp tree-sitter-clojure tree-sitter-cmake tree-sitter-cpp tree-sitter-css tree-sitter-dockerfile tree-sitter-elixir tree-sitter-elm tree-sitter-go tree-sitter-gomod tree-sitter-haskell tree-sitter-heex tree-sitter-html tree-sitter-java tree-sitter-javascript tree-sitter-json tree-sitter-julia tree-sitter-lua tree-sitter-markdown tree-sitter-markdown-gfm tree-sitter-meson tree-sitter-ocaml tree-sitter-org tree-sitter-php tree-sitter-plantuml tree-sitter-python tree-sitter-r tree-sitter-racket tree-sitter-ruby tree-sitter-rust tree-sitter-scala tree-sitter-scheme tree-sitter-typescript)) (synopsis "Text editor based on tree-sitter") (description "TODO") (home-page "https://git.solarpunk.moe/Sloth/sloth") (license license:gpl3+))