projects/guix·blob python-team · refs

2217 lines · 90.4 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2012 Nikita Karetnikov <[email protected]>
3;;; Copyright © 2013, 2014 Ludovic Courtès <[email protected]>
4;;; Copyright © 2014 Marek Benc <[email protected]>
5;;; Copyright © 2015-2022, 2025 Efraim Flashner <[email protected]>
6;;; Copyright © 2016 José Miguel Sánchez García <[email protected]>
7;;; Copyright © 2016 Carlo Zancanaro <[email protected]>
8;;; Copyright © 2016 Rene Saavedra <[email protected]>
9;;; Copyright © 2014, 2015, 2017, 2018, 2020, 2022 Eric Bavier <[email protected]>
10;;; Copyright © 2017 Feng Shu <[email protected]>
11;;; Copyright © 2017 Nikita <[email protected]>
12;;; Copyright © 2014 Taylan Ulrich Bayırlı/Kammer <[email protected]>
13;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <[email protected]>
14;;; Copyright © 2016, 2019, 2021, 2022, 2023 Efraim Flashner <[email protected]>
15;;; Copyright © 2019, 2026 Andreas Enge <[email protected]>
16;;; Copyright © 2019-2025 Nicolas Goaziou <[email protected]>
17;;; Copyright © 2020-2022 Marius Bakke <[email protected]>
18;;; Copyright © 2020 Tom Zander <[email protected]>
19;;; Copyright © 2020 Mark Meyer <[email protected]>
20;;; Copyright © 2020 Maxime Devos <[email protected]>
21;;; Copyright © 2021 aecepoglu <[email protected]>
22;;; Copyright © 2021 Leo Famulari <[email protected]>
23;;; Copyright © 2021 Pierre Langlois <[email protected]>
24;;; Copyright © 2021 Calum Irwin <[email protected]>
25;;; Copyright © 2022 Luis Henrique Gomes Higino <[email protected]>
26;;; Copyright © 2022 Foo Chuan Wei <[email protected]>
27;;; Copyright © 2022 zamfofex <[email protected]>
28;;; Copyright © 2022 Jai Vetrivelan <[email protected]>
29;;; Copyright © 2022, 2024-2025 jgart <[email protected]>
30;;; Copyright © 2022, 2024 Andy Tai <[email protected]>
31;;; Copyright © 2022 ( <[email protected]>
32;;; Copyright © 2023 Eidvilas Markevičius <[email protected]>
33;;; Copyright © 2023 Maxim Cournoyer <[email protected]>
34;;; Copyright © 2023 Jaeme Sifat <[email protected]>
35;;; Copyright © 2023 David Pflug <[email protected]>
36;;; Copyright © 2024 Herman Rimm <[email protected]>
37;;; Copyright © 2024-2026 Spencer King <[email protected]>
38;;; Copyright © 2024 Murilo <[email protected]>
39;;; Copyright © 2025 Ashvith Shetty <[email protected]>
40;;; Copyright © 2025 Sharlatan Hellseher <[email protected]>
41;;; Copyright © 2025, 2026 Ashish SHUKLA <[email protected]>
42;;; Copyright © 2025 Marc Coquand <[email protected]>
43;;; Copyright © 2025 Andrew Wong <[email protected]>
44;;; Copyright © 2025 Junker <[email protected]>
45;;; Copyright © 2025 benjamin wil <[email protected]>
46;;; Copyright © 2025 Janneke Nieuwenhuizen <[email protected]>
47;;; Copyright © 2026 Ignatius Menzies <[email protected]>
48;;;
49;;; This file is part of GNU Guix.
50;;;
51;;; GNU Guix is free software; you can redistribute it and/or modify it
52;;; under the terms of the GNU General Public License as published by
53;;; the Free Software Foundation; either version 3 of the License, or (at
54;;; your option) any later version.
55;;;
56;;; GNU Guix is distributed in the hope that it will be useful, but
57;;; WITHOUT ANY WARRANTY; without even the implied warranty of
58;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
59;;; GNU General Public License for more details.
60;;;
61;;; You should have received a copy of the GNU General Public License
62;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
63
64(define-module (gnu packages text-editors)
65 #:use-module (guix packages)
66 #:use-module (guix deprecation)
67 #:use-module (guix download)
68 #:use-module (guix gexp)
69 #:use-module (guix git-download)
70 #:use-module (guix utils)
71 #:use-module (guix build-system asdf)
72 #:use-module (guix build-system cargo)
73 #:use-module (guix build-system cmake)
74 #:use-module (guix build-system gnu)
75 #:use-module (guix build-system go)
76 #:use-module (guix build-system glib-or-gtk)
77 #:use-module (guix build-system meson)
78 #:use-module (guix build-system pyproject)
79 #:use-module (guix build-system qt)
80 #:use-module ((guix licenses) #:prefix license:)
81 #:use-module (gnu packages)
82 #:use-module (gnu packages aspell)
83 #:use-module (gnu packages assembly)
84 #:use-module (gnu packages autotools)
85 #:use-module (gnu packages bash)
86 #:use-module (gnu packages base)
87 #:use-module (gnu packages boost)
88 #:use-module (gnu packages check)
89 #:use-module (gnu packages cmake)
90 #:use-module (gnu packages code)
91 #:use-module (gnu packages compression)
92 #:use-module (gnu packages cpp)
93 #:use-module (gnu packages crypto)
94 #:use-module (gnu packages curl)
95 #:use-module (gnu packages datastructures)
96 #:use-module (gnu packages dbm)
97 #:use-module (gnu packages documentation)
98 #:use-module (gnu packages enchant)
99 #:use-module (gnu packages fontutils)
100 #:use-module (gnu packages freedesktop)
101 #:use-module (gnu packages gettext)
102 #:use-module (gnu packages glib)
103 #:use-module (gnu packages golang)
104 #:use-module (gnu packages golang-build)
105 #:use-module (gnu packages golang-check)
106 #:use-module (gnu packages golang-xyz)
107 #:use-module (gnu packages graphics)
108 #:use-module (gnu packages gnome)
109 #:use-module (gnu packages gtk)
110 #:use-module (gnu packages guile)
111 #:use-module (gnu packages haskell-xyz)
112 #:use-module (gnu packages hunspell)
113 #:use-module (gnu packages image)
114 #:use-module (gnu packages toolkits)
115 #:use-module (gnu packages libbsd)
116 #:use-module (gnu packages linux)
117 #:use-module (gnu packages lisp-check)
118 #:use-module (gnu packages lisp-xyz)
119 #:use-module (gnu packages llvm)
120 #:use-module (gnu packages lua)
121 #:use-module (gnu packages multiprecision)
122 #:use-module (gnu packages ncurses)
123 #:use-module (gnu packages pcre)
124 #:use-module (gnu packages perl)
125 #:use-module (gnu packages pkg-config)
126 #:use-module (gnu packages protobuf)
127 #:use-module (gnu packages python)
128 #:use-module (gnu packages python-build)
129 #:use-module (gnu packages python-web)
130 #:use-module (gnu packages python-xyz)
131 #:use-module (gnu packages qt)
132 #:use-module (gnu packages regex)
133 #:use-module (gnu packages rust-apps)
134 #:use-module (gnu packages sdl)
135 #:use-module (gnu packages slang)
136 #:use-module (gnu packages sqlite)
137 #:use-module (gnu packages terminals)
138 #:use-module (gnu packages texinfo)
139 #:use-module (gnu packages tls)
140 #:use-module (gnu packages version-control)
141 #:use-module (gnu packages vulkan)
142 #:use-module (gnu packages xdisorg)
143 #:use-module (gnu packages xml)
144 #:use-module (gnu packages xorg))
145
146(define-public ed
147 (package
148 (name "ed")
149 (version "1.21")
150 (source (origin
151 (method url-fetch)
152 (uri (string-append "mirror://gnu/ed/ed-"
153 version ".tar.lz"))
154 (sha256
155 (base32
156 "0xddpcdsdhf1cx7izk9l5dmf8vakjx5ncm1cy1f3libxfac4kqk0"))))
157 (build-system gnu-build-system)
158 (native-inputs (list lzip))
159 (arguments
160 `(#:configure-flags (list ,(string-append "CC=" (cc-for-target)))
161 #:phases
162 (modify-phases %standard-phases
163 (add-before 'patch-source-shebangs 'patch-test-suite
164 (lambda _
165 (substitute* "testsuite/check.sh"
166 (("/bin/sh") (which "sh"))))))))
167 (home-page "https://www.gnu.org/software/ed/")
168 (synopsis "Line-oriented text editor")
169 (description
170 "Ed is a line-oriented text editor: rather than offering an overview of
171a document, ed performs editing one line at a time. It can be executed both
172interactively and via shell scripts. Its method of command input allows
173complex tasks to be performed in an automated way. GNU ed offers several
174extensions over the standard utility.")
175 (license license:gpl3+)))
176
177(define-public micro
178 (let ((commit "04c577049ca898f097cd6a2dae69af0b4d4493e1")
179 (date "April 16, 2025"))
180 (package
181 (name "micro")
182 (version "2.0.14")
183 (source
184 (origin
185 (method git-fetch)
186 (uri (git-reference
187 (url "https://github.com/zyedidia/micro")
188 (commit (string-append "v" version))))
189 (file-name (git-file-name name version))
190 (sha256
191 (base32 "1pcfsaq7k6q59vh3xgh8gy350apkv5rkc09d4fh15lx7m6bxbwka"))))
192 (build-system go-build-system)
193 (arguments
194 (list
195 #:install-source? #f
196 #:import-path "github.com/zyedidia/micro/v2/cmd/micro"
197 #:unpack-path "github.com/zyedidia/micro/v2"
198 #:build-flags
199 ;; Set value for variables in the `--version` flag
200 #~(list (format #f "-ldflags=~a ~a ~a"
201 (string-append
202 "-X github.com/zyedidia/micro/v2/internal/util.Version="
203 #$version)
204 (string-append
205 "-X github.com/zyedidia/micro/v2/internal/util.CommitHash="
206 (string-take #$commit 7))
207 (format #f
208 "-X 'github.com/zyedidia/micro/v2/internal/util.CompileDate=~a'"
209 #$date)))
210 ;; Step away from cmd/micro to test the whole project.
211 #:test-subdirs
212 #~(list "../../...")
213 #:phases
214 #~(modify-phases %standard-phases
215 ;; Generate syntax files.
216 (add-before 'build 'go-generate
217 (lambda _
218 (invoke "go" "generate" "-v" "-x"
219 "github.com/zyedidia/micro/v2/runtime"))))
220 #:test-flags #~(list "-vet=off")))
221 (inputs (list go-github-com-blang-semver
222 go-github-com-dustin-go-humanize
223 go-github-com-go-errors-errors
224 go-github-com-layeh-gopher-luar
225 go-github-com-mattn-go-isatty
226 go-github-com-mitchellh-go-homedir
227 go-github-com-sergi-go-diff
228 go-github-com-stretchr-testify
229 go-github-com-yuin-gopher-lua
230 go-github-com-zyedidia-clipper
231 go-github-com-zyedidia-glob
232 go-github-com-zyedidia-go-runewidth
233 go-github-com-zyedidia-go-shellquote
234 go-github-com-zyedidia-json5
235 go-github-com-zyedidia-tcell-v2
236 go-github-com-zyedidia-terminal
237 go-golang-org-x-text
238 go-gopkg-in-yaml-v2))
239 (home-page "https://github.com/zyedidia/micro")
240 (synopsis "Modern and intuitive terminal-based text editor")
241 (description
242 "@code{micro} is a terminal-based text editor that aims to be easy to use and
243intuitive, while also taking advantage of the capabilities of modern terminals.")
244 ;; The project lists licenses of all used sources in LICENSE-THIRD-PARTY
245 ;; file which are already included in Guix's package definition.
246 (license license:expat))))
247
248(define-public lem
249 (package
250 (name "lem")
251 (version "2.3.0")
252 (source
253 (origin
254 (method git-fetch)
255 (uri (git-reference
256 (url "https://github.com/lem-project/lem/")
257 (commit (string-append "v" version))))
258 (sha256
259 (base32 "0qkgs6xnbbnyjh9i1zp9l5iw6zj4hlb2b42b272pbmxw6pd3zp4a"))
260 (file-name (git-file-name name version))
261 (snippet #~(begin
262 (use-modules (guix build utils))
263 (delete-file-recursively "roswell")
264 ;; Delete precompiled shared object files.
265 (delete-file-recursively "extensions/terminal/lib")))))
266 (build-system asdf-build-system/sbcl)
267 (arguments
268 (list
269 #:phases
270 #~(modify-phases %standard-phases
271 (add-after 'unpack 'patch-shared-object-files
272 (lambda* (#:key inputs outputs #:allow-other-keys)
273 (let* ((libvterm-lib (assoc-ref inputs "libvterm"))
274 (lib-dir (string-append libvterm-lib "/lib"))
275 (shared-lib-dir (string-append (assoc-ref outputs "out")
276 "/lib"))
277 (shared-lib (string-append shared-lib-dir "/terminal.so")))
278 (substitute* "extensions/terminal/ffi.lisp"
279 (("terminal.so")
280 shared-lib)))))
281 (add-after 'create-asdf-configuration 'build-program
282 (lambda* (#:key outputs #:allow-other-keys)
283 (build-program (string-append (assoc-ref outputs "out")
284 "/bin/lem")
285 outputs
286 #:dependencies '("lem-ncurses" "lem-sdl2")
287 #:entry-program '((lem:main)
288 0))))
289 (add-after 'build 'build-terminal-library
290 (lambda* (#:key inputs outputs #:allow-other-keys)
291 (let* ((libvterm-lib (assoc-ref inputs "libvterm"))
292 (lib-dir (string-append libvterm-lib "/lib"))
293 (shared-lib-dir (string-append (assoc-ref outputs "out")
294 "/lib"))
295 (shared-lib (string-append shared-lib-dir "/terminal.so")))
296 (mkdir-p shared-lib-dir)
297 (invoke #$(cc-for-target)
298 "extensions/terminal/terminal.c"
299 "-L"
300 lib-dir
301 "-lvterm"
302 "-Wl,-Bdynamic"
303 "-o"
304 shared-lib
305 "-shared"
306 "-fPIC"
307 "-lutil")))))))
308 (native-inputs (list sbcl-cl-ansi-text sbcl-rove
309 sbcl-trivial-package-local-nicknames))
310 (inputs (list libvterm
311 sbcl-alexandria
312 sbcl-trivia
313 sbcl-trivial-gray-streams
314 sbcl-trivial-types
315 sbcl-cl-ppcre
316 sbcl-closer-mop
317 sbcl-iterate
318 sbcl-lem-mailbox
319 sbcl-inquisitor
320 sbcl-babel
321 sbcl-bordeaux-threads
322 sbcl-yason
323 sbcl-log4cl
324 sbcl-split-sequence
325 sbcl-cl-str
326 sbcl-dexador
327 sbcl-3bmd
328 sbcl-micros
329 sbcl-lisp-preprocessor
330 sbcl-trivial-ws
331 sbcl-trivial-open-browser
332 sbcl-sdl2
333 sbcl-sdl2-ttf
334 sbcl-sdl2-image
335 sbcl-trivial-main-thread
336 sbcl-cffi
337 sbcl-cl-charms
338 sbcl-cl-setlocale
339 sbcl-log4cl
340 sbcl-jsonrpc
341 sbcl-usocket
342 sbcl-quri
343 sbcl-cl-change-case
344 sbcl-async-process
345 sbcl-cl-iconv
346 sbcl-esrap
347 sbcl-parse-number
348 sbcl-cl-package-locks
349 sbcl-slime-swank
350 sbcl-trivial-utf-8))
351 (home-page "http://lem-project.github.io/")
352 (synopsis "Integrated IDE/editor for Common Lisp")
353 (description "Lem is a Common Lisp editor/IDE with high expansibility.")
354 (license license:expat)))
355
356(define-public vis
357 (package
358 (name "vis")
359 (version "0.9") ; also update the vis-test input
360 (source
361 (origin
362 (method git-fetch)
363 (uri (git-reference
364 (url "https://git.sr.ht/~martanne/vis")
365 (commit (string-append "v" version))))
366 (sha256
367 (base32 "0y5b434dg7h5m1z0rz40ypirh99sm77mvvg8r1fp79z1bk73g0s9"))
368 (file-name (git-file-name name version))))
369 (build-system gnu-build-system)
370 (arguments
371 `(#:test-target "test"
372 #:phases
373 (modify-phases %standard-phases
374 (add-after 'unpack 'unpack-test-suite
375 (lambda* (#:key inputs #:allow-other-keys)
376 (let ((vis-test (assoc-ref inputs "vis-test")))
377 (copy-recursively vis-test "test")
378 #t)))
379 (delete 'check) ; the tests need a wrapped vis
380 (add-after 'install 'wrap-binary
381 (lambda* (#:key inputs outputs #:allow-other-keys)
382 (let* ((out (assoc-ref outputs "out")))
383 (wrap-program (string-append out "/bin/vis")
384 `("GUIX_LUA_PATH" ";" prefix (,(getenv "GUIX_LUA_PATH")))
385 `("GUIX_LUA_CPATH" ";" prefix (,(getenv "GUIX_LUA_CPATH"))))
386 #t)))
387 (add-after 'wrap-binary 'check
388 (assoc-ref %standard-phases 'check))
389 (add-before 'check 'set-up-tests
390 (lambda* (#:key outputs #:allow-other-keys)
391 (let ((out (assoc-ref outputs "out")))
392 ;; DEFAULT_COMPILER is hard-coded here.
393 (substitute* "test/core/ccan-config.c"
394 (("\"cc\"")
395 (format #f "\"~a\"" ,(cc-for-target))))
396 ;; Use the ‘vis’ executable that we wrapped above.
397 (install-file (string-append out "/bin/vis") ".")))))))
398 (native-inputs
399 `(("vis-test"
400 ,(origin
401 (method git-fetch)
402 (uri (git-reference
403 (url "https://git.sr.ht/~martanne/vis-test")
404 (commit "783b7ef67aa360f0b9bd44fa5ea47e644bc49d69")))
405 (sha256
406 (base32 "1lhcizf93gab4hgnpac7l9csmhhvh0i7rd71p3vfk00nrdqrqrb6"))
407 (file-name (git-file-name "vis-test" version))))))
408 (inputs (list bash-minimal lua ncurses libtermkey lua-lpeg tre))
409 (synopsis "Vim-like text editor")
410 (description
411 "Vis aims to be a modern, legacy free, simple yet efficient vim-like text
412editor. It extends vim's modal editing with built-in support for multiple
413cursors/selections and combines it with sam's structural regular expression
414based command language.")
415 (home-page "https://github.com/martanne/vis")
416 (license (list license:isc ; Main distribution.
417 license:public-domain ; map.[ch]
418 license:expat)))) ; lexers and libutf.[ch]
419
420(define-public kakoune
421 (package
422 (name "kakoune")
423 (version "2026.05.21")
424 (source
425 (origin
426 (method git-fetch)
427 (uri (git-reference
428 (url "https://github.com/mawww/kakoune/")
429 (commit (string-append "v" version))))
430 (file-name (git-file-name name version))
431 (sha256
432 (base32 "18l7lk8mqj3rfxvmp3mmlcqvwb92ch2h08d6lhdnimivmyz62y72"))))
433 (build-system gnu-build-system)
434 (arguments
435 (list
436 #:make-flags
437 #~(list (string-append "PREFIX=" #$output)
438 (string-append "CXX=" #$(cxx-for-target)))
439 #:phases
440 #~(modify-phases %standard-phases
441 (add-after 'unpack 'patch-source
442 (lambda _
443 ;; kakoune uses confstr with _CS_PATH to find out where to find
444 ;; a posix shell, but this doesn't work in the build
445 ;; environment. This substitution just replaces that result
446 ;; with the "sh" path.
447 (substitute* "src/shell_manager.cc"
448 (("if \\(m_shell.empty\\(\\)\\)" line)
449 (string-append "m_shell = \"" (which "sh")
450 "\";\n " line)))))
451 (add-after 'install 'wrap-executable
452 (lambda* (#:key inputs #:allow-other-keys)
453 (wrap-program (string-append #$output "/bin/kak")
454 `("PATH" ":" prefix
455 (,(dirname (search-input-file inputs "bin/perl")))))))
456 (delete 'configure)))) ; no configure script
457 (inputs (list bash-minimal perl))
458 (native-search-paths
459 (list (search-path-specification
460 (variable "KAKOUNE_RUNTIME")
461 (separator #f)
462 (files (list "share/kak")))))
463 (synopsis "Vim-inspired code editor")
464 (description
465 "Kakoune is a code editor heavily inspired by Vim, as such most of its
466commands are similar to Vi's ones, and it shares Vi's \"keystrokes as a text
467editing language\" model. Kakoune has a strong focus on interactivity, most
468commands provide immediate and incremental results, while still being
469competitive (as in keystroke count) with Vim.")
470 (home-page "https://kakoune.org/")
471 (license license:unlicense)))
472
473(define-public kak-lsp
474 (package
475 (name "kak-lsp")
476 (version "22.0.0")
477 (source
478 (origin
479 (method git-fetch)
480 (uri (git-reference
481 (url "https://github.com/kak-lsp/kak-lsp")
482 (commit (string-append "v" version))))
483 (file-name (git-file-name name version))
484 (sha256 "1az41gxqkx6i9q8q9xnh93nllh8p2ixlwn5slhxvbxxlwhagv0hv")))
485 (build-system cargo-build-system)
486 (arguments
487 `(#:install-source? #f
488 #:phases
489 (modify-phases %standard-phases
490 (add-after 'unpack 'disable-optional-crash-reporting
491 (lambda _
492 (substitute* "Cargo.toml"
493 ((".*sentry.*") "")))))))
494 (inputs (cargo-inputs 'kak-lsp))
495 (home-page "https://github.com/kak-lsp/kak-lsp")
496 (synopsis "Language Server Protocol (LSP) client for Kakoune")
497 (description
498 "kak-lsp is a Language Server Protocol client for Kakoune implemented in
499Rust.")
500 (license license:unlicense)))
501
502(define-public kak-tree-sitter
503 (package
504 (name "kak-tree-sitter")
505 (version "3.1.3")
506 (source
507 (origin
508 (file-name (git-file-name name version))
509 (method git-fetch)
510 (uri (git-reference
511 (url "https://git.sr.ht/~hadronized/kak-tree-sitter")
512 (commit (string-append name "-v" version))))
513 (sha256
514 (base32 "1bjq94damzfmc0i8as7fvgjavwh5snz45031b0v12rgfn4pjar1w"))))
515 (build-system cargo-build-system)
516 (inputs (cargo-inputs 'kak-tree-sitter))
517 (arguments
518 (list
519 #:install-source? #f
520 #:cargo-install-paths ''("kak-tree-sitter")))
521 (home-page "https://sr.ht/~hadronized/kak-tree-sitter/")
522 (synopsis "Server between Kakoune and Tree-sitter")
523 (description
524 "Kak-tree-sitter provides a server between Kakoune and Tree-sitter. It
525provides semantic syntax highlighting and selections in the Kakoune text editor.")
526 (license license:bsd-3)))
527
528(define-public parinfer-rust
529 (package
530 (name "parinfer-rust")
531 (version "0.4.3")
532 (source
533 (origin
534 (method git-fetch)
535 (uri (git-reference
536 (url "https://github.com/eraserhd/parinfer-rust")
537 (commit (string-append "v" version))))
538 (sha256
539 (base32 "0hj5in5h7pj72m4ag80ing513fh65q8xlsf341qzm3vmxm3y3jgd"))
540 (file-name (git-file-name name version))
541 (snippet
542 #~(begin (delete-file "dist/parinfer_rust.wasm")))))
543 (build-system cargo-build-system)
544 (arguments
545 `(#:install-source? #f
546 #:phases
547 (modify-phases %standard-phases
548 (add-after 'install 'install-plugins-and-libs
549 (lambda* (#:key outputs #:allow-other-keys)
550 (let* ((out (assoc-ref outputs "out"))
551 (lib (string-append out "/lib"))
552 (vimfiles (string-append out "/share/vim/vimfiles/"
553 "pack/guix/start/parinfer")))
554 (with-directory-excursion "target/release"
555 (install-file "libparinfer_rust.so" lib))
556 (substitute* "plugin/parinfer.vim"
557 (("(let s:libdir = ).*" all libdir)
558 (format #f "~a'~a'\n" libdir lib)))
559 (install-file "doc/parinfer.txt"
560 (string-append vimfiles "/doc"))
561 (install-file "plugin/parinfer.vim"
562 (string-append vimfiles "/plugin"))
563 (install-file "rc/parinfer.kak"
564 (string-append out "/share/kak/autoload"))))))))
565 (inputs
566 (cons clang-13 (cargo-inputs 'parinfer-rust)))
567 (home-page "https://github.com/justinbarclay/parinfer-rust")
568 (synopsis "Infer parentheses for Clojure, Lisp and Scheme")
569 (description
570 "Parinfer is a plugin for Kakoune, Vim, Neovim and Emacs that infers
571parentheses and indentation. This library can be called from other editors that
572can load dynamic libraries.")
573 (license license:expat)))
574
575(define-public parinfer-rust-emacs
576 (package
577 (name "parinfer-rust-emacs")
578 (version "0.4.7")
579 (source
580 (origin
581 (method git-fetch)
582 (uri (git-reference
583 (url "https://github.com/justinbarclay/parinfer-rust-emacs")
584 (commit (string-append "v" version))))
585 (sha256
586 (base32 "1gay4m6hd893p5m3fayfdqxncg8cg9kw60w5qm8z14p9nxyqb0i5"))
587 (file-name (git-file-name name version))
588 (snippet
589 #~(begin (delete-file "dist/parinfer_rust.wasm")))))
590 (build-system cargo-build-system)
591 (arguments
592 (list
593 #:install-source? #f
594 #:phases #~(modify-phases %standard-phases
595 (add-after 'install 'install-library
596 (lambda _
597 (let ((lib (string-append #$output "/lib")))
598 (with-directory-excursion "target/release"
599 (install-file "libparinfer_rust.so" lib))))))))
600 (inputs (cons clang-13 (cargo-inputs 'parinfer-rust-emacs)))
601 (home-page "https://github.com/justinbarclay/parinfer-rust-emacs")
602 (synopsis "Emacs-centric fork of parinfer-rust")
603 (description
604 "@command{parinfer-rust-emacs} is an Emacs-centric fork of parinfer-rust,
605itself an implementation of Shaun Lebron’s Parinfer. This builds a shared
606library intended to be loaded by the @command{emacs-parinfer-rust-mode} Emacs
607plugin, though a standalone binary is built also.")
608 (license license:isc)))
609
610(define-public rassumfrassum
611 (package
612 (name "rassumfrassum")
613 (version "0.3.4")
614 (source
615 (origin
616 (method git-fetch)
617 (uri (git-reference
618 (url "https://github.com/joaotavora/rassumfrassum")
619 (commit (string-append "v" version))))
620 (file-name (git-file-name name version))
621 (sha256
622 (base32 "0wg4vj91wjrfm5y8s8kf9lkv2bcf0s7c6hlwryvk4yll9zwfzhxb"))))
623 (build-system pyproject-build-system)
624 (arguments
625 (list
626 #:phases
627 #~(modify-phases %standard-phases
628 (replace 'check
629 (lambda* (#:key tests? #:allow-other-keys)
630 (when tests?
631 (invoke "./test/run-all.sh")))))))
632 (native-inputs
633 (list python-setuptools))
634 (home-page "https://github.com/joaotavora/rassumfrassum")
635 (synopsis "Connect an LSP client to multiple LSP servers")
636 (description
637 "Rassumfrassum is a LSP/JSONRPC multiplexer that allows one LSP client
638(Emacs' @code{eglot}, Neovim, etc.) to connect to multiple language servers
639seamlessly.")
640 (license license:gpl3+)))
641
642(define-public featherpad
643 (package
644 (name "featherpad")
645 (version "1.6.2")
646 (source (origin
647 (method git-fetch)
648 (uri (git-reference
649 (url "https://github.com/tsujan/FeatherPad")
650 (commit (string-append "V" version))))
651 (file-name (git-file-name name version))
652 (sha256
653 (base32
654 "0dg99d17hlffmpcm9l1dbwkw5ympbxxa2mmi6qzljd5jx2sfb3hv"))))
655 (build-system qt-build-system)
656 (arguments
657 (list #:tests? #f ;no tests
658 #:qtbase qtbase))
659 (inputs (list qtwayland
660 qtsvg
661 hunspell))
662 (native-inputs (list pkg-config))
663 (home-page "https://github.com/tsujan/FeatherPad")
664 (synopsis "Lightweight Qt plain-text editor")
665 (description
666 "FeatherPad is a lightweight, Qt-based text editor, offering features like
667syntax highlighting, tabbed interface, and customizable settings.")
668 (license license:gpl3+)))
669
670(define-public helix
671 (package
672 (name "helix")
673 (version "25.07.1")
674 (source
675 (origin
676 (method git-fetch)
677 (uri (git-reference
678 (url "https://github.com/helix-editor/helix")
679 (commit version)))
680 (file-name (git-file-name name version))
681 (sha256
682 (base32 "06m4zagivfa40rw25n3fn66d0z2rsf3r3cjdzwh67lh10wcb6m24"))))
683 (build-system cargo-build-system)
684 (arguments
685 (list
686 #:install-source? #f
687 #:phases
688 #~(modify-phases %standard-phases
689 (add-after 'unpack 'disable-grammar-build
690 (lambda _
691 (setenv "HELIX_DISABLE_AUTO_GRAMMAR_BUILD" "1")))
692 (replace 'install
693 (lambda _
694 (let* ((bin (string-append #$output "/bin"))
695 (hx (string-append bin "/hx"))
696 (share (string-append #$output "/share/helix"))
697 (runtime (string-append share "/runtime"))
698 (applications (string-append share "/applications")))
699 (install-file "target/release/hx" bin)
700 (install-file "contrib/Helix.desktop" applications)
701 (copy-recursively "runtime" runtime)
702 (wrap-program hx
703 `("HELIX_RUNTIME" prefix
704 (,runtime)))))))))
705 (inputs (cons bash-minimal (cargo-inputs 'helix)))
706 (home-page "https://helix-editor.com/")
707 (synopsis "Post-modern modal text editor")
708 (description "A Kakoune / Neovim inspired editor, written in Rust.")
709 (license (list license:mpl2.0))))
710
711(define-public evil-helix
712 (package
713 (name "evil-helix")
714 (version "20250915")
715 (source
716 (origin
717 (method git-fetch)
718 (uri (git-reference
719 (url "https://github.com/usagi-flow/evil-helix")
720 (commit (string-append "release-" version))))
721 (file-name (git-file-name name version))
722 (sha256
723 (base32 "117mg4mwib3v57wi8aiyqhlx9dqbmsns218pgxq1dmajjd6qljpa"))))
724 (build-system cargo-build-system)
725 (arguments
726 (list
727 #:install-source? #f
728 #:phases
729 #~(modify-phases %standard-phases
730 (add-after 'unpack 'disable-grammar-build
731 (lambda _
732 (setenv "HELIX_DISABLE_AUTO_GRAMMAR_BUILD" "1")))
733 (replace 'install
734 (lambda _
735 (let* ((bin (string-append #$output "/bin"))
736 (hx (string-append bin "/hx"))
737 (share (string-append #$output "/share/helix"))
738 (runtime (string-append share "/runtime"))
739 (applications (string-append share "/applications")))
740 (install-file "target/release/hx" bin)
741 (install-file "contrib/Helix.desktop" applications)
742 (copy-recursively "runtime" runtime)
743 (wrap-program hx
744 `("HELIX_RUNTIME" prefix
745 (,runtime)))))))))
746 (inputs (cons bash-minimal (cargo-inputs 'evil-helix)))
747 (home-page "https://github.com/usagi-flow/evil-helix")
748 (synopsis "Bringing the Helix editor to the evil side")
749 (description "A soft fork of Helix which introduces keybindings and other
750features to make it more comfortable for Vim users. Changes include:
751@itemize
752@item Vim keybindings
753@item Adjusted behaviours and defaults for Visual line mode
754@item Basic Vim modeline support
755@item Support for colored/rainbow indentation guides
756@item Minimalistic window separator
757@end itemize
758Moreover, evil-helix introduces the @code{editor.evil} option, which is true by
759default. It can be set to false to completely deactivate evil-helix behavior
760without having to use a different build.")
761 (license (list license:mpl2.0))))
762
763(define-public joe
764 (package
765 (name "joe")
766 (version "4.6")
767 (source
768 (origin
769 (method url-fetch)
770 (uri (string-append "https://sourceforge.net/projects/joe-editor/"
771 "files/JOE sources/joe-" version "/"
772 "joe-" version ".tar.gz"))
773 (sha256
774 (base32
775 "1pmr598xxxm9j9dl93kq4dv36zyw0q2dh6d7x07hf134y9hhlnj9"))))
776 (build-system gnu-build-system)
777 (inputs (list ncurses))
778 (home-page "https://joe-editor.sourceforge.net/")
779 (synopsis "Console screen editor")
780 (description
781 "JOE is a powerful console screen editor with a \"mode-less\" user
782interface similar to many user-friendly editors. JOE has some of the key
783bindings and many of the powerful features of GNU Emacs.")
784 (license license:gpl3+)))
785
786(define-public jupp
787 (package
788 (name "jupp")
789 (version "3.1jupp41")
790 (source
791 (origin
792 (method url-fetch)
793 (uri (string-append "http://www.mirbsd.org/MirOS/dist/jupp/joe-"
794 version ".tgz"))
795 (sha256
796 (base32
797 "0by8c640kxdf05xvrj8n6awg5mq847iwkhryz7zzxghryn5fmf3v"))))
798 (build-system gnu-build-system)
799 (inputs (list ncurses))
800 (home-page "http://mirbsd.de/jupp")
801 (synopsis "Portable version of JOE’s Own Editor")
802 (description
803 "Jupp is the portable version of JOE’s Own Editor. It has been
804enhanced by functions intended for programmers or other professional
805users. It comes with the editor flavors known from joe, specifically,
806jmacs, joe, jpico, jstar, and rjoe.")
807 (license license:gpl1)))
808
809(define-public leafpad
810 (package
811 (name "leafpad")
812 (version "0.8.18.1")
813 (source (origin
814 (method url-fetch)
815 (uri (string-append "mirror://savannah/"
816 "leafpad/leafpad-" version ".tar.gz"))
817 (sha256
818 (base32
819 "0b0az2wvqgvam7w0ns1j8xp2llslm1rx6h7zcsy06a7j0yp257cm"))))
820 (build-system glib-or-gtk-build-system)
821 (native-inputs
822 (list intltool pkg-config))
823 (inputs
824 (list gtk+-2))
825 (home-page "http://tarot.freeshell.org/leafpad/")
826 (synopsis "GTK+ based text editor")
827 (description "Leafpad is a GTK+ text editor that emphasizes simplicity. As
828development focuses on keeping weight down to a minimum, only the most essential
829features are implemented in the editor. Leafpad is simple to use, is easily
830compiled, requires few libraries, and starts up quickly.")
831 (license license:gpl2+)))
832
833(define-public l3afpad
834 (let ((commit "16f22222116b78b7f6a6fd83289937cdaabed624")
835 (revision "0"))
836 (package
837 (name "l3afpad")
838 (version (git-version "0.8.18.1.11" revision commit))
839 (source (origin
840 (method git-fetch)
841 (file-name (git-file-name name version))
842 (uri (git-reference
843 (url "https://github.com/stevenhoneyman/l3afpad")
844 (commit commit)))
845 (sha256
846 (base32
847 "0q55351lvvlw9bi35l49mxa43g4fv110pwprzkk9m5li77vb0bcp"))))
848 (build-system glib-or-gtk-build-system)
849 (arguments
850 (list
851 #:phases
852 #~(modify-phases %standard-phases
853 (add-after 'install 'install-documentation
854 (lambda* (#:key outputs #:allow-other-keys)
855 (let* ((out (assoc-ref outputs "out"))
856 (doc (string-append out "/share/doc/" #$name "-"
857 #$(package-version this-package)))
858 (man (string-append out "/share/man/man1")))
859 (install-file "l3afpad.1" man)
860 (install-file "README" doc)))))))
861 (native-inputs
862 (list intltool autoconf automake pkg-config))
863 (inputs
864 (list gtk+))
865 (home-page "http://tarot.freeshell.org/leafpad/")
866 (synopsis "GTK+ 3 based text editor")
867 (description "L3afpad is a GTK+ 3 text editor that emphasizes simplicity. As
868 development focuses on keeping weight down to a minimum, only the most essential
869 features are implemented in the editor. L3afpad is simple to use, is easily
870 compiled, requires few libraries, and starts up quickly. L3afpad is a
871 fork of Leafpad that uses GTK+ 3 instead of GTK+ 2.")
872 (license license:gpl2+))))
873
874(define-public e3
875 (package
876 (name "e3")
877 (version "2.82.1")
878 (source
879 (origin
880 (method git-fetch)
881 (uri (git-reference
882 (url "https://codeberg.org/museoa/e3editor")
883 (commit version)))
884 (file-name (git-file-name name version))
885 (sha256
886 (base32
887 "1l57rxin3kv6iiw91rhjzl3bpk0gkfp3nrx7wmqikk1nycmkfbhm"))))
888 (build-system gnu-build-system)
889 (arguments
890 (list
891 #:tests? #f
892 #:make-flags
893 #~(list (string-append "PREFIX=" #$output))
894 #:phases
895 #~(modify-phases %standard-phases
896 (delete 'configure))))
897 (native-inputs
898 (list nasm))
899 (supported-systems '("x86_64-linux" "i686-linux"))
900 (home-page "https://codeberg.org/museoa/e3editor")
901 (synopsis "Tiny text editor written in assembly")
902 (description
903 "e3 is a micro text editor with an executable code size between 3800 and
90435000 bytes. Except for ``syntax highlighting'', the e3 binary supports all
905of the basic functions one expects plus built in arithmetic calculations.
906UTF-8 coding of unicode characters is supported as well. e3 can use
907Wordstar-, EMACS-, Pico, Nedit or vi-like key bindings. e3 can be used on
90816, 32, and 64-bit CPUs.")
909 (license license:gpl2+)))
910
911(define-public mg
912 (package
913 (name "mg")
914 (version "20260719")
915 (source (origin
916 (method git-fetch)
917 (uri (git-reference
918 (url "https://github.com/hboetes/mg")
919 (commit version)))
920 (file-name (git-file-name name version))
921 (sha256
922 (base32
923 "0r2fgc1izh9ymz38lrp9pj3w8m06lw0lnxh7pmp43mvaxnl8qz38"))
924 (modules '((guix build utils)))
925 (snippet '(begin
926 (substitute* "GNUmakefile"
927 (("/usr/bin/") ""))))))
928 (build-system gnu-build-system)
929 (native-inputs (list pkg-config))
930 (inputs (list diffutils libbsd ncurses))
931 (arguments
932 ;; No test suite available.
933 (list #:tests? #f
934 #:make-flags
935 #~(list (string-append "prefix=" #$output)
936 (string-append "CC=" #$(cc-for-target))
937 (string-append "PKG_CONFIG=" #$(pkg-config-for-target)))
938 #:phases
939 #~(modify-phases %standard-phases
940 (delete 'configure) ;no configure script
941 (add-before 'build 'correct-location-of-diff
942 (lambda* (#:key inputs #:allow-other-keys)
943 (substitute* "buffer.c"
944 (("/usr/bin/diff")
945 (search-input-file inputs "/bin/diff")))))
946 (add-before 'install 'patch-tutorial-location
947 (lambda _
948 (substitute* "mg.1"
949 (("/usr") #$output))))
950 (add-after 'install 'install-tutorial
951 (lambda _
952 (let ((doc (string-append #$output "/share/doc/mg")))
953 (install-file "tutorial" doc)))))))
954 (home-page "https://homepage.boetes.org/software/mg/")
955 (synopsis "Microscopic GNU Emacs clone")
956 (description
957 "Mg (@command{mg}) is a GNU Emacs style editor, with which it is
958\"broadly\" compatible. This is a portable version of the mg maintained by the
959OpenBSD team.")
960 (license license:public-domain)))
961
962(define-public nano
963 (package
964 (name "nano")
965 (version "9.2")
966 (source
967 (origin
968 (method url-fetch)
969 (uri (string-append "mirror://gnu/nano/nano-" version ".tar.xz"))
970 (sha256
971 (base32 "1sgp89v72nvrr6dl9xq2d4iv0d6h3l8d8pm2nfjyi0mp8y9bkv05"))))
972 (build-system gnu-build-system)
973 (arguments
974 (if (%current-target-system)
975 ;; fix for crosscompiling; on GNU system strcasecmp always works
976 (list #:configure-flags
977 #~(list "ac_cv_func_strcasecmp=yes"
978 "gl_cv_func_strcasecmp_works=yes"))
979 '()))
980 (native-inputs
981 (list pkg-config))
982 (inputs
983 (list gettext-minimal ncurses))
984 (home-page "https://www.nano-editor.org/")
985 (synopsis "Small, user-friendly console text editor")
986 (description
987 "GNU nano is a small and simple text editor for use in a terminal. Besides
988basic editing, it supports: undo/redo, syntax highlighting, spell checking,
989justifying, auto-indentation, bracket matching, interactive search-and-replace
990(with regular expressions), and the editing of multiple files.")
991 (license license:gpl3+))) ; some files are under GPLv2+
992
993(define-public nvi
994 (package
995 (name "nvi")
996 (version "1.81.6")
997 (source
998 (origin
999 (method url-fetch)
1000 ;; The home-page does not provide the latest version.
1001 (uri (string-append "http://harrier.slackbuilds.org/misc/nvi-"
1002 version ".tar.bz2"))
1003 (sha256
1004 (base32 "0nbbs1inyrqds0ywn3ln5slv54v5zraq7lszkg8nsavv4kivhh9l"))
1005 (patches (search-patches "nvi-assume-preserve-path.patch"
1006 "nvi-dbpagesize-binpower.patch"
1007 "nvi-add-function-prototypes.patch"
1008 "nvi-db4.patch"))
1009 (modules '((guix build utils)))
1010 (snippet
1011 ;; Create a wrapper for the configure script, make it executable.
1012 #~(let ((conf-wrap (open-output-file "configure")))
1013 (display "#!/bin/sh" conf-wrap)
1014 (newline conf-wrap)
1015 (display
1016 "../nvi-1.81.6/dist/configure --srcdir=../nvi-1.81.6/dist $@"
1017 conf-wrap)
1018 (newline conf-wrap)
1019 (close-output-port conf-wrap)
1020 (chmod "configure" #o0755)
1021
1022 ;; Glibc 2.30 removed the deprecated <sys/stropts.h>, so fall back
1023 ;; to the internal PTY allocation logic.
1024 (substitute* "ex/ex_script.c"
1025 (("#ifdef HAVE_SYS5_PTY")
1026 "#if defined(HAVE_SYS5_PTY) && !defined(__GLIBC__)"))))))
1027 (build-system gnu-build-system)
1028 (arguments
1029 (list
1030 #:out-of-source? #t
1031 #:configure-flags
1032 #~'("--enable-widechar"
1033 #$@(if (%current-target-system)
1034 '("vi_cv_sprintf_count=yes")
1035 '()))
1036 #:make-flags
1037 #~(list
1038 ;; Add CFLAGS to relax gcc-14's strictness.
1039 ;; nvi's configure chokes on passing CFLAGS and ignores
1040 ;; CFLAGS set in the environment.
1041 (string-append "CFLAGS=-g -O2"
1042 " -Wno-error=incompatible-pointer-types"))
1043 #:phases
1044 #~(modify-phases %standard-phases
1045 (add-before 'configure 'fix-configure
1046 (lambda* (#:key inputs native-inputs #:allow-other-keys)
1047 ;; Replace outdated config.sub and config.guess:
1048 (with-directory-excursion "dist"
1049 (for-each
1050 (lambda (file)
1051 (chmod file #o755)
1052 (install-file
1053 (format #f "~a/share/automake-~a/~a"
1054 (assoc-ref (or native-inputs inputs)
1055 "automake")
1056 #$(version-major+minor
1057 (package-version automake))
1058 file)
1059 "."))
1060 '("config.sub" "config.guess"))))))))
1061 (inputs (list bdb ncurses))
1062 (native-inputs
1063 (list automake)) ;Up to date 'config.guess' and 'config.sub'.
1064 (synopsis "The Berkeley Vi Editor")
1065 (description
1066 "Vi is the original screen based text editor for Unix systems. It
1067is considered the standard text editor, and is available on almost all
1068Unix systems. Nvi is intended as a \"bug-for-bug compatible\" clone of
1069the original BSD vi editor. As such, it doesn't have a lot of snazzy
1070features as do some of the other vi clones such as elvis and vim.
1071However, if all you want is vi, this is the one to get.")
1072 (home-page
1073 (string-append "https://sites.google.com/a/bostic.com/keithbostic/"
1074 "the-berkeley-vi-editor-home-page"))
1075 (license license:bsd-3)))
1076
1077(define-public qemacs
1078 (package
1079 (name "qemacs")
1080 (version "0.3.3")
1081 (source
1082 (origin
1083 (method url-fetch)
1084 (uri (string-append "https://bellard.org/qemacs/"
1085 "qemacs-" version ".tar.gz"))
1086 (sha256
1087 (base32 "156z4wpj49i6j388yjird5qvrph7hz0grb4r44l4jf3q8imadyrg"))))
1088 (build-system gnu-build-system)
1089 (arguments
1090 `(#:tests? #f ;no test
1091 #:phases
1092 (modify-phases %standard-phases
1093 (add-before 'build 'build-qhtml
1094 ;; Build fails without first creating qHTML library.
1095 (lambda _ (invoke "make" "-C" "libqhtml")))
1096 (add-before 'install 'fix-man-pages-directory
1097 ;; Install in $out/share/man instead of $out/man.
1098 (lambda _
1099 (substitute* "Makefile"
1100 (("/man/man1" all) (string-append "/share" all)))
1101 #t))
1102 (add-before 'install 'create-directories
1103 ;; Ensure directories exist before installing files.
1104 (lambda* (#:key outputs #:allow-other-keys)
1105 (let ((out (assoc-ref outputs "out")))
1106 (for-each (lambda (d) (mkdir-p (string-append out d)))
1107 '("/bin" "/share/man/man1" "/share/qe"))
1108 #t)))
1109 (add-after 'install 'install-extra-documentation
1110 ;; Install sample configuration file, Info, and HTML manual.
1111 (lambda* (#:key native-inputs inputs outputs #:allow-other-keys)
1112 (let* ((share (string-append (assoc-ref outputs "out") "/share"))
1113 (doc (string-append share "/doc/" ,name "-" ,version))
1114 (html (string-append share "/html"))
1115 (info (string-append share "/info"))
1116 (makeinfo (string-append
1117 (assoc-ref (or native-inputs inputs) "texinfo")
1118 "/bin/makeinfo")))
1119 ;; First fix Texinfo documentation, create appropriate
1120 ;; directories, then generate Info and HTML files there.
1121 (substitute* "qe-doc.texi"
1122 (("^M-([{}])" _ bracket) (string-append "M-@" bracket)))
1123 (for-each (lambda (d) (mkdir-p d)) (list html info))
1124 (invoke makeinfo "qe-doc.texi" "-o" info)
1125 (invoke makeinfo "qe-doc.texi" "--html" "--no-split" "-o" html)
1126 ;; Install sample configuration file.
1127 (install-file "config.eg" doc)
1128 #t))))))
1129 (native-inputs
1130 (list texinfo))
1131 (inputs
1132 (list libx11 libxext libxv))
1133 (home-page "https://bellard.org/qemacs/")
1134 (synopsis "Small but powerful text editor")
1135 (description "QEmacs (for Quick Emacs) is a very small but
1136powerful editor. It has features that even big editors lack:
1137
1138@itemize
1139
1140@item Full screen editor with an Emacs look and feel with all Emacs
1141common features: multi-buffer, multi-window, command mode, universal
1142argument, keyboard macros, config file with C-like syntax, minibuffer
1143with completion and history.
1144
1145@item Can edit files of hundreds of Megabytes without being slow by
1146using a highly optimized internal representation and by mmaping the
1147file.
1148
1149@item Full Unicode support, including multi charset handling (8859-x,
1150UTF8, SJIS, EUC-JP, ...) and bidirectional editing respecting the
1151Unicode bidi algorithm. Arabic and Indic scripts handling (in
1152progress).
1153
1154@item WYSIWYG HTML/XML/CSS2 mode graphical editing. Also supports
1155Lynx like rendering on VT100 terminals.
1156
1157@item WYSIWYG DocBook mode based on XML/CSS2 renderer.
1158
1159@item C mode: coloring with immediate update. Emacs like auto-indent.
1160
1161@item Shell mode: colorized VT100 emulation so that your shell work
1162exactly as you expect. Compile mode with next/prev error.
1163
1164@item Input methods for most languages, including Chinese (input
1165methods come from the Yudit editor).
1166
1167@item Hexadecimal editing mode with insertion and block commands.
1168Unicode hexa editing is also supported.
1169
1170@item Works on any VT100 terminals without termcap. UTF8 VT100
1171support included with double width glyphs.
1172
1173@item X11 support. Support multiple proportional fonts at the same
1174time (as XEmacs). X Input methods supported. Xft extension supported
1175for anti aliased font display.
1176
1177@item Small! Full version (including HTML/XML/CSS2/DocBook rendering
1178and all charsets): 200KB big. Basic version (without bidir/unicode
1179scripts/input/X11/C/Shell/HTML/Dired): 49KB.
1180@end itemize")
1181 (license license:lgpl2.1+)))
1182
1183(define-public manuskript
1184 (package
1185 (name "manuskript")
1186 (version "0.17.0")
1187 (source
1188 (origin
1189 (method git-fetch)
1190 (uri (git-reference
1191 (url "https://github.com/olivierkes/manuskript")
1192 (commit version)))
1193 (file-name (git-file-name name version))
1194 (sha256
1195 (base32 "0l9ni3njbmlb2nqxgbs43zzl88wr07h59d24xcm4xiscm4vmps4c"))))
1196 (build-system pyproject-build-system)
1197 (arguments
1198 (list
1199 #:tests? #f ;no test
1200 #:phases
1201 #~(modify-phases %standard-phases
1202 (delete 'configure)
1203 (delete 'build)
1204 (replace 'install
1205 (lambda _
1206 (let ((share (string-append #$output "/share/manuskript")))
1207 ;; Install data.
1208 (mkdir-p share)
1209 (for-each
1210 (lambda (d)
1211 (let ((destination (string-append share "/" d)))
1212 (mkdir-p destination)
1213 (copy-recursively d destination)))
1214 '("bin" "i18n" "icons" "libs" "manuskript" "resources"))
1215 ;; Install documentation.
1216 (let ((doc (string-append #$output
1217 "/doc/manuskript-" #$version
1218 "/sample-projects")))
1219 (mkdir-p doc)
1220 (copy-recursively "sample-projects" doc))
1221 ;; Wrap executable in "$out/share/manuskript/bin" and
1222 ;; link to it from "$out/bin".
1223 (let ((bin (string-append #$output "/bin"))
1224 (executable (string-append share "/bin/manuskript")))
1225 (wrap-program executable
1226 (list "GUIX_PYTHONPATH" 'prefix
1227 (list (getenv "GUIX_PYTHONPATH"))))
1228 (mkdir-p bin)
1229 (with-directory-excursion bin
1230 (symlink (string-append share "/bin/manuskript")
1231 "manuskript")))
1232 ;; Install icons and create .desktop file.
1233 (let ((apps (string-append #$output "/share/applications"))
1234 (icons-dir (string-append #$output "/share/pixmaps")))
1235 (install-file "icons/Manuskript/manuskript.svg" icons-dir)
1236 (mkdir-p apps)
1237 (make-desktop-entry-file
1238 (string-append apps "/manuskript.desktop")
1239 #:name "Manuskript"
1240 #:mime-type "application/x-manuskript-book;"
1241 #:exec (string-append #$output "/bin/manuskript %f")
1242 #:comment '((#f "Tool for writers")
1243 ("es" "Herramienta para escritores/as"))
1244 #:keywords '("office" "write" "edit" "novel" "text" "msk")
1245 #:terminal #f
1246 #:type "Application"
1247 #:icon "manuskript"
1248 #:categories '("Office" "WordProcessor")))))))))
1249 (inputs
1250 (list bash-minimal
1251 pandoc
1252 python-lxml
1253 python-markdown
1254 python-pyenchant
1255 python-pyqt
1256 qtsvg-5))
1257 (home-page "http://www.theologeek.ch/manuskript/")
1258 (synopsis "Tool for writers")
1259 (description "Manuskript provides a rich environment to help
1260writers create their first draft and then further refine and edit
1261their masterpiece. With Manuskript you can:
1262
1263@itemize
1264@item Grow your premise from one sentence, to a paragraph, to a full
1265summary,
1266@item Create characters,
1267@item Conceive plots,
1268@item Construct outlines (Outline mode and/or Index cards),
1269@item Write with focus (Distraction free mode),
1270@item Build worlds,
1271@item Track items,
1272@item Edit and re-organize chapters and scenes,
1273@item View Story line,
1274@item Compose with fiction or non-fiction templates and writing modes,
1275@item Import and export document formats such as HTML, ePub,
1276OpenDocument, DocX, and more.
1277@end itemize
1278
1279Additionally Manuskript can help in many more ways with a spell
1280checker, markdown highlighter, frequency analyzer, and automatic save
1281in plain text file format.")
1282 (license license:gpl3+)))
1283
1284(define-public editorconfig-core-c
1285 (package
1286 (name "editorconfig-core-c")
1287 (version "0.12.11")
1288 (source
1289 (origin
1290 (method git-fetch)
1291 (uri (git-reference
1292 (url "https://github.com/editorconfig/editorconfig-core-c")
1293 (commit (string-append "v" version))))
1294 (file-name (git-file-name name version))
1295 (sha256
1296 (base32 "1nazzjkpjcb1npllm11zz6iijigkjb6r9b092gl7rbnbyga75k1z"))))
1297 (build-system cmake-build-system)
1298 (arguments
1299 (list
1300 #:phases
1301 #~(modify-phases %standard-phases
1302 (add-after 'unpack 'insert-tests
1303 (lambda* (#:key inputs #:allow-other-keys)
1304 (let ((tests (assoc-ref inputs "tests")))
1305 (copy-recursively tests "tests"))))
1306 (add-after 'install 'delete-static-library
1307 (lambda* (#:key outputs #:allow-other-keys)
1308 (let* ((out (assoc-ref outputs "out"))
1309 (lib (string-append out "/lib")))
1310 (with-directory-excursion lib
1311 (delete-file "libeditorconfig_static.a"))))))))
1312 (native-inputs
1313 `(("tests"
1314 ,(origin
1315 (method git-fetch)
1316 (uri (git-reference
1317 (url "https://github.com/editorconfig/editorconfig-core-test")
1318 ;; The tests submodule commit matching this package's version.
1319 (commit "d91029bdf1e3e0307714afe0d2cde7ba6fd208ab")))
1320 (file-name (git-file-name "editorconfig-core-test" version))
1321 (sha256
1322 (base32 "1nfh9xly0injyvcdmxqy7zhqp9cibvfqzj9d57yg0yaz997xbdhy"))))))
1323 (inputs
1324 (list pcre2))
1325 (home-page "https://editorconfig.org/")
1326 (synopsis "EditorConfig core library written in C")
1327 (description "EditorConfig makes it easy to maintain the correct coding
1328style when switching between different text editors and between different
1329projects. The EditorConfig project maintains a file format and plugins for
1330various text editors which allow this file format to be read and used by those
1331editors.")
1332 (license license:bsd-2)))
1333
1334(define-public editorconfig-checker
1335 (package
1336 (name "editorconfig-checker")
1337 (version "3.4.1")
1338 (source
1339 (origin
1340 (method git-fetch)
1341 (uri (git-reference
1342 (url "https://github.com/editorconfig-checker/editorconfig-checker")
1343 (commit (string-append "v" version))))
1344 (file-name (git-file-name name version))
1345 (sha256
1346 (base32 "147kykawss6ld4xcd0v3v7xibnw8mz0n5vgfa4vr9vz0dsqch1d9"))))
1347 (build-system go-build-system)
1348 (arguments
1349 (list
1350 #:install-source? #f
1351 #:unpack-path "github.com/editorconfig-checker/editorconfig-checker/v3"
1352 #:import-path (string-append "github.com/editorconfig-checker/"
1353 "editorconfig-checker/v3/"
1354 "cmd/editorconfig-checker")
1355 #:build-flags
1356 #~(list (format #f "-ldflags=~a"
1357 (string-append "-X main.version=" #$version)))))
1358 (native-inputs
1359 (list go-github-com-editorconfig-editorconfig-core-go-v2
1360 go-github-com-gabriel-vasile-mimetype
1361 go-github-com-gkampitakis-go-snaps
1362 go-github-com-baulk-chardet
1363 go-golang-org-x-text))
1364 (home-page "https://editorconfig-checker.github.io/")
1365 (synopsis "Tool to verify that project files match @code{.editorconfig}")
1366 (description
1367 "@code{editorconfig-checker} is a lint tool to verify that a project
1368matches the specifications in @{.editorconfig} file. It runs quickly,
1369providing a frequent style check and the output format can be configured to
1370interface with CI pipeline UIs.")
1371 (license license:expat)))
1372
1373(define-public texmacs
1374 (package
1375 (name "texmacs")
1376 (version "2.1.5")
1377 (source
1378 (origin
1379 (method url-fetch)
1380 (uri (string-append "https://www.texmacs.org/Download/ftp/tmftp/"
1381 "source/TeXmacs-" version "-src.tar.gz"))
1382 (sha256
1383 (base32 "0q3k0asf31mm2jl7fi7244sk6c9lprf434cj4c5h2ycfpayjg8dk"))
1384 (patches
1385 (search-patches "texmacs-fix-plugins-wrong-init.patch"))
1386 (patch-flags '("-p0"))))
1387 (build-system qt-build-system)
1388 (native-inputs
1389 (list pkg-config xdg-utils)) ;for xdg-icon-resource
1390 (inputs
1391 (list freetype
1392 gnutls
1393 guile-1.8
1394 libjpeg-turbo
1395 libxcrypt
1396 perl
1397 python-wrapper
1398 qtbase-5
1399 qtsvg-5
1400 qtwayland-5
1401 sqlite))
1402 (arguments
1403 (list
1404 #:tests? #f ; no check target
1405 #:phases
1406 #~(modify-phases %standard-phases
1407 (add-after 'unpack 'fix-icon-directory
1408 (lambda _
1409 (substitute* "packages/linux/icons.sh"
1410 (("/usr/share")
1411 (string-append #$output "/share")))
1412 (substitute* "TeXmacs/misc/mime/texmacs.desktop"
1413 (("Icon=.*$") "Icon=TeXmacs\n"))))
1414 (add-before 'configure 'gzip-flags
1415 (lambda _
1416 (substitute* "Makefile.in"
1417 (("^GZIP = gzip -f") "GZIP = gzip -f -n")))))))
1418 (synopsis "Editing platform with special features for scientists")
1419 (description
1420 "GNU TeXmacs is a text editing platform which is specialized for
1421scientists. It is ideal for editing structured documents with different types
1422of content. It has robust support for mathematical formulas and plots. It
1423can also act as an interface to external mathematical programs such as R and
1424Octave. TeXmacs is completely extensible via Guile.")
1425 (license license:gpl3+)
1426 (home-page "https://www.texmacs.org/tmweb/home/welcome.en.html")))
1427
1428(define-public moe
1429 (package
1430 (name "moe")
1431 (version "1.16")
1432 (source
1433 (origin
1434 (method url-fetch)
1435 (uri (string-append "mirror://gnu/moe/moe-"
1436 version ".tar.lz"))
1437 (sha256
1438 (base32 "0s582w56y8936ix808klv2ss9d8v04kc3y57q2zawwljj5wcs9ac"))))
1439 (build-system gnu-build-system)
1440 (native-inputs (list lzip))
1441 (inputs (list ncurses))
1442 (synopsis "Modeless, multiple-buffer, user-friendly 8-bit text editor")
1443 (description
1444 "GNU Moe is a powerful-but-simple-to-use text editor. It works in a
1445modeless manner, and features an intuitive set of key-bindings that
1446assign a degree of severity to each key; for example, key
1447combinations with the Alt key are for harmless commands like cursor
1448movements while combinations with the Control key are for commands
1449that will modify the text. Moe features multiple windows, unlimited
1450undo/redo, unlimited line length, global search and replace, and
1451more.")
1452 (home-page "https://www.gnu.org/software/moe/moe.html")
1453 (license license:gpl2+)))
1454
1455(define-public tecoc
1456 ;; No tagged releases; this is the master tip.
1457 (let ((commit "b4a96395a18c7e64ccaef0e25fdde3b7ef33ac4b")
1458 (revision "0"))
1459 (package
1460 (name "tecoc")
1461 ;; Version taken from tecoc.h
1462 (version (git-version "147" revision commit))
1463 (source
1464 (origin
1465 (method git-fetch)
1466 (uri (git-reference
1467 (url "https://github.com/blakemcbride/TECOC")
1468 (commit commit)))
1469 (file-name (git-file-name name version))
1470 (sha256
1471 (base32 "0q6kcynvrhwl0pmyvdrkdzg0nxshrn05cdp5knn1s9ki7fqqccr9"))))
1472 (build-system gnu-build-system)
1473 (arguments
1474 (list
1475 #:tests? #f ; No tests
1476 #:make-flags
1477 #~(list "-C" "src"
1478 "-f" "makefile.linux"
1479 (string-append "CC=" #$(cc-for-target)))
1480 #:phases
1481 #~(modify-phases %standard-phases
1482 (delete 'configure)
1483 (replace 'install
1484 (lambda _
1485 (let ((bin-dir (string-append #$output "/bin"))
1486 (doc-dir (string-append #$output:doc "/share/doc/"
1487 #$name "-" #$version)))
1488 (install-file "src/tecoc" bin-dir)
1489 (for-each (lambda (file)
1490 (install-file file doc-dir))
1491 (find-files "doc")))))
1492 (add-after 'install 'create-symlinks
1493 (lambda _
1494 (with-directory-excursion (string-append #$output "/bin")
1495 (for-each (lambda (link)
1496 (symlink "tecoc" link))
1497 (list "Make" "inspect" "mung" "teco"))))))))
1498 (outputs (list "out" "doc"))
1499 (inputs (list ncurses))
1500 (synopsis "@acronym{TECO, Text Editor and Corrector} written in C")
1501 (description
1502 "Tecoc is a portable version of the venerable @acronym{TECO, Text Editor
1503and Corrector} written in C that strives to keep the original behavior.")
1504 (home-page "https://github.com/blakemcbride/TECOC")
1505 (license license:bsd-3))))
1506
1507(define-deprecated/public-alias textpieces
1508 (@ (gnu packages gnome-circle) textpieces))
1509
1510(define-public typstwriter
1511 (package
1512 (name "typstwriter")
1513 (version "0.3")
1514 (source
1515 (origin
1516 (method url-fetch)
1517 (uri (pypi-uri "typstwriter" version))
1518 (sha256
1519 (base32 "0whx593xi5pv9wqzzd6xa97pln5b0j629s3qnfs80v06p2r5ghs6"))))
1520 (build-system pyproject-build-system)
1521 (arguments (list #:tests? #f))
1522 (native-inputs
1523 ;; TODO: Add the following dependencies and enable tests once this package
1524 ;; is merged into master.
1525 ;; python-fpdf python-pytest python-pytest-qt
1526 (list python-flit-core))
1527 (inputs
1528 (list python-platformdirs python-pygments python-pyside-6 python-qtpy))
1529 (propagated-inputs (list typst))
1530 (home-page "https://github.com/Bzero/typstwriter")
1531 (synopsis "Integrated editor for Typst typesetting system")
1532 (description
1533 "Typstwriter is an integrated editor for the Typst typesetting system,
1534including syntax highlighting and compiler output as well as file-system and
1535document views presented in a clean, friendly Qt graphical interface.")
1536 (license license:expat)))
1537
1538(define-public scintilla
1539 (package
1540 (name "scintilla")
1541 (version "5.5.1")
1542 (source
1543 (origin
1544 (method url-fetch)
1545 (uri (string-append "https://www.scintilla.org/scintilla"
1546 (string-delete #\. version) ".tgz"))
1547 (sha256
1548 (base32 "1rvp8aabk0m75fih7fvv6qhhc2ahf93vqbqa2zd0r8627v3llqzx"))))
1549 (build-system gnu-build-system)
1550 (arguments
1551 (list
1552 #:make-flags
1553 #~(list "GTK3=1"
1554 (string-append "CC=" #$(cc-for-target))
1555 "-Cgtk")
1556 #:tests? #f ;require un-packaged Pyside
1557 #:phases
1558 #~(modify-phases %standard-phases
1559 (delete 'configure) ;no configure script
1560 (replace 'install
1561 ;; Upstream provides no install script.
1562 (lambda _
1563 (let ((lib (string-append #$output "/lib"))
1564 (inc (string-append #$output "/include")))
1565 (for-each (lambda (f) (install-file f lib))
1566 (find-files "bin/" "\\.so$"))
1567 (for-each (lambda (f) (install-file f inc))
1568 (find-files "include/" "\\.h$"))))))))
1569 (native-inputs (list pkg-config python-wrapper))
1570 (inputs (list gtk+))
1571 (home-page "https://www.scintilla.org/")
1572 (synopsis "Code editor for GTK+")
1573 (description "Scintilla is a source code editing component for
1574GTK+. It has the usual features found in text editing components, as
1575well as some that are especially useful for editing and debugging
1576source code; these include support for syntax styling, error
1577indicators, code completion and call tips. Styling choices are more
1578open than with many editors: Scintilla lets you use proportional
1579fonts, bold and italics, multiple foreground and background colours,
1580and multiple fonts.")
1581 (license license:hpnd)))
1582
1583(define-public lexilla
1584 (package
1585 (name "lexilla")
1586 (version "5.2.5")
1587 (source
1588 (origin
1589 (method url-fetch)
1590 (uri (string-append "https://www.scintilla.org/lexilla"
1591 (string-delete #\. version) ".tgz"))
1592 (sha256
1593 (base32
1594 "0sc3z6y82h1vq8aaydp119kymzvrv0p1xvy56r5j996jl6zxikk4"))))
1595 (build-system gnu-build-system)
1596 (arguments
1597 (list
1598 #:make-flags #~(list (string-append "CXX=" #$(cxx-for-target))
1599 (string-append "SCINTILLA_INCLUDE="
1600 #$(this-package-input "scintilla")
1601 "/include"))
1602 #:test-target "test"
1603 #:phases
1604 #~(modify-phases %standard-phases
1605 (replace 'build
1606 (lambda args
1607 (with-directory-excursion "src"
1608 (apply (assoc-ref %standard-phases 'build) args))))
1609 (add-after 'build 'patch-more-shebangs
1610 (lambda _
1611 ;; Patch these bash shebangs to avoid them failing the tests.
1612 (substitute* '("test/examples/bash/x.bsh.folded"
1613 "test/examples/bash/x.bsh.styled")
1614 (("/usr/bin/env bash")
1615 (which "bash")))))
1616 (replace 'check
1617 (lambda args
1618 (with-directory-excursion "test"
1619 (apply (assoc-ref %standard-phases 'check) args))))
1620 (add-after 'unpack 'fix-deps.mak
1621 (lambda _
1622 (substitute* "src/deps.mak"
1623 (("../../scintilla")
1624 #$(this-package-input "scintilla")))))
1625 (delete 'configure) ;no configure script
1626 (replace 'install
1627 ;; Upstream provides no install script.
1628 (lambda _
1629 (let ((lib (string-append #$output "/lib"))
1630 (inc (string-append #$output "/include")))
1631 (for-each (lambda (f) (install-file f lib))
1632 (find-files "bin/" "\\.so$"))
1633 (for-each (lambda (f) (install-file f inc))
1634 (find-files "include/" "\\.h$"))))))))
1635 (native-inputs (list python))
1636 (inputs (list scintilla))
1637 (home-page "https://www.scintilla.org/Lexilla.html")
1638 (synopsis "Language lexers for Scintilla")
1639 (description "Lexilla is a library of language lexers that can be
1640used with the Scintilla editing component.")
1641 (license license:hpnd)))
1642
1643(define-public geany
1644 (package
1645 (name "geany")
1646 (version "1.38")
1647 (source
1648 (origin
1649 (method url-fetch)
1650 (uri (string-append "https://download.geany.org/"
1651 "geany-" version ".tar.bz2"))
1652 (sha256
1653 (base32 "0inmmb9wra2w99pfv6p64d66s2zrhafc8drhwmga7gj89mp1gzxb"))))
1654 (build-system gnu-build-system)
1655 (native-inputs
1656 (list autoconf
1657 automake
1658 doxygen
1659 `(,glib "bin")
1660 intltool
1661 libtool
1662 pkg-config
1663 python-docutils)) ;for rst2html
1664 (inputs
1665 (list gtk+
1666 ;; FIXME: Geany bundles a 3.X release of Scintilla. It is not
1667 ;; currently possible to replace it with our Scintilla package.
1668 ;; ("scintilla" ,scintilla)
1669 ))
1670 (arguments
1671 `(#:imported-modules ((guix build glib-or-gtk-build-system)
1672 ,@%default-gnu-imported-modules)
1673 #:modules (((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
1674 (guix build gnu-build-system)
1675 (guix build utils))
1676 #:phases
1677 (modify-phases %standard-phases
1678 (add-after 'install 'glib-or-gtk-wrap
1679 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
1680 (home-page "https://www.geany.org")
1681 (synopsis "Fast and lightweight IDE")
1682 (description "Geany is a small and fast Integrated Development
1683Environment (IDE) that only has a few dependencies on other packages and is as
1684independent as possible from special desktop environments like KDE or GNOME.
1685
1686The basic features of Geany are:
1687@itemize
1688@item syntax highlighting
1689@item code completion
1690@item auto completion of often constructed constructs like if, for and while
1691@item auto completion of XML and HTML tags
1692@item call tips
1693@item folding
1694@item many supported filetypes like C, Java, PHP, HTML, Python, Perl, Pascal
1695@item symbol lists
1696@item embedded terminal emulation
1697@item extensibility through plugins
1698@end itemize")
1699 (license license:gpl2+)))
1700
1701(define-public fe
1702 (package
1703 (name "fe")
1704 ;; Stable release is 1.9. However, this development version
1705 ;; introduces support for UTF-8.
1706 (version "2.0")
1707 (source
1708 (origin
1709 (method url-fetch)
1710 (uri (string-append "https://www.moria.de/~michael/fe/"
1711 "fe-" version ".tar.gz"))
1712 (sha256
1713 (base32 "10mk5wc3dsdp46b3hkjyd740gcdv6m1gvlr3p8xjxf55b3vfs0la"))))
1714 (build-system gnu-build-system)
1715 (arguments
1716 (list
1717 #:tests? #f ;no test
1718 ;; Sendmail is only used to send a crash log. Disable the
1719 ;; feature since it is (1) undocumented (2) not very useful.
1720 #:configure-flags #~'("--disable-sendmail")
1721 #:phases
1722 #~(modify-phases %standard-phases
1723 (add-after 'install 'install-doc
1724 (lambda _
1725 (let ((doc (string-append #$output "/share/doc/"
1726 #$name "-" #$version)))
1727 (for-each (lambda (f)
1728 (install-file f doc))
1729 '("fe.doc" "fe.html" "fe.ps"
1730 "feref.ps" "README"))))))))
1731 (native-inputs (list gettext-minimal))
1732 (inputs (list ncurses))
1733 (home-page "https://www.moria.de/~michael/fe/")
1734 (synopsis "Small folding editor")
1735 (description "Fe is a small folding editor. It folds
1736arbitrary text regions; it is not bound to syntactic units.
1737
1738Fe has no configuration or extension language and requires no setup.
1739Its user interface is emacs-like and it has menus for the very most
1740important functions to help beginners. Further there is a reference
1741card. It offers:
1742
1743@itemize
1744@item Regions and Emacs-like kill ring
1745@item Incremental search
1746@item Keyboard macros
1747@item Editing binary files
1748@item Multiple windows and views
1749@item Compose function for Latin 1 characters
1750@end itemize")
1751 (license license:gpl2+)))
1752
1753(define-public ne
1754 (package
1755 (name "ne")
1756 (version "3.3.4")
1757 (source (origin
1758 (method git-fetch)
1759 (uri (git-reference
1760 (url "https://github.com/vigna/ne")
1761 (commit version)))
1762 (file-name (git-file-name name version))
1763 (sha256
1764 (base32
1765 "0nlbfidwsjsdvb82d8cikimd5ym1qlv45bw6bgk8h6zx012w9hwz"))))
1766 (build-system gnu-build-system)
1767 (native-inputs
1768 (list perl texinfo))
1769 (inputs
1770 (list ncurses))
1771 (arguments
1772 (list #:tests? #f
1773 #:parallel-build? #f ; or enums.h may not yet be generated
1774 #:make-flags
1775 #~(list "STRIP=true" ; don't
1776 (string-append "CC=" #$(cc-for-target))
1777 (string-append "PREFIX=" #$output)
1778 (string-append "LDFLAGS=-L" #$(this-package-input "ncurses")
1779 "/lib"))
1780 #:phases
1781 #~(modify-phases %standard-phases
1782 (add-before 'configure 'patch-early-shebang
1783 (lambda _
1784 (substitute* "version.pl"
1785 (("/usr/bin/env .*perl") (which "perl")))))
1786 (replace 'configure
1787 (lambda _
1788 (substitute* "src/makefile"
1789 (("-lcurses") "-lncurses")))))))
1790 (home-page "https://ne.di.unimi.it/")
1791 (synopsis "Text editor with menu bar")
1792 (description "This package provides a modeless text editor with menu bar.
1793It supports syntax highlighting, regular expressions, configurable menus,
1794keybindings, autocomplete and unlimited undo. It can pipe a marked block
1795of text through any command line filter. It can also open very large binary
1796files. It was originally developed on the Amiga 3000T.")
1797 (license license:gpl3+)))
1798
1799(define-public hexer
1800 (package
1801 (name "hexer")
1802 (version "1.0.6")
1803 (source
1804 (origin
1805 (method url-fetch)
1806 (uri (string-append "https://devel.ringlet.net/files/editors/hexer/"
1807 "hexer-" version ".tar.xz"))
1808 (sha256
1809 (base32 "157z17z8qivdin2km2wp86x1bv1nx15frrwcz11mk0l3ab74mf76"))))
1810 (build-system gnu-build-system)
1811 (arguments
1812 `(#:tests? #f ;no upstream tests
1813 #:make-flags
1814 (list "CC=gcc"
1815 (string-append "PREFIX=" (assoc-ref %outputs "out"))
1816 (string-append "LTERMCAP=-lncurses")
1817 (string-append "LDFLAGS=-L" (assoc-ref %build-inputs "ncurses")
1818 "/lib"))
1819 #:phases
1820 (modify-phases %standard-phases
1821 (delete 'configure)))) ;no configure script
1822 (inputs
1823 (list ncurses))
1824 (home-page "https://devel.ringlet.net/editors/hexer/")
1825 (synopsis "Multi buffer editor for binary files with vi-like interface")
1826 (description "Hexer is a multi-buffer editor for binary files for Unix-like
1827systems that displays its buffer(s) as a hex dump. The user interface is kept
1828similar to vi/ex.")
1829 (license license:bsd-3)))
1830
1831(define-public edlin
1832 (package
1833 (name "edlin")
1834 (version "2.20")
1835 (source
1836 (origin
1837 (method url-fetch)
1838 (uri (string-append "mirror://sourceforge/freedos-edlin/freedos-edlin/"
1839 version "/edlin-" version ".tar.bz2"))
1840 (sha256
1841 (base32 "0cdv42ffminncwj5ph9lw0j7zpbv8l35acppy90wj7x1qm4qk6x8"))))
1842 (build-system gnu-build-system)
1843 (arguments
1844 `(#:phases
1845 (modify-phases %standard-phases
1846 (add-after 'unpack 'make-read-only
1847 (lambda _
1848 ;; Remove executable bits.
1849 (chmod "COPYING" #o444)
1850 (chmod "edlin.htm" #o444)))
1851 (add-after 'install 'install-doc
1852 (lambda* (#:key outputs #:allow-other-keys)
1853 (let ((doc-dir (string-append (assoc-ref outputs "out")
1854 "/share/doc/edlin-" ,version)))
1855 (mkdir-p doc-dir)
1856 (install-file "edlin.htm" doc-dir)))))))
1857 (home-page "https://sourceforge.net/projects/freedos-edlin/")
1858 (synopsis "The line editor of the FreeDOS operating system")
1859 (description "The @code{edlin} program is a small line editor, written for
1860FreeDOS as a functional clone of the old MS-DOS program edlin.")
1861 (license license:gpl2+)))
1862
1863(define-public mle
1864 (package
1865 (name "mle")
1866 (version "1.8.1")
1867 (source (origin
1868 (method git-fetch)
1869 (uri (git-reference
1870 (url "https://github.com/adsr/mle")
1871 (commit (string-append "v" version))))
1872 (file-name (git-file-name name version))
1873 (sha256
1874 (base32
1875 "08zp9yk13a7y5lwwl4lhx69210knvxjx722rj1k82kxahncaa9y7"))
1876 ;; Remove patch on next release
1877 ;; or when pcre2 is >= 10.44
1878 (patches
1879 (search-patches "mle-1.8.1-no-var-lookbehind.patch"))))
1880 (build-system gnu-build-system)
1881 (inputs (list lua pcre2 uthash))
1882 (arguments
1883 `(#:test-target "test"
1884 #:phases (modify-phases %standard-phases
1885 (add-after 'unpack 'fix-lua
1886 (lambda* (#:key inputs #:allow-other-keys)
1887 (substitute* "mle.h"
1888 (("<lua5.4/") "<"))
1889 (substitute* "Makefile"
1890 (("-llua5.4") "-llua")
1891 (("/bin/sh") (which "sh")))))
1892 (add-after 'unpack 'patch-test-shebangs
1893 (lambda _
1894 (substitute* (find-files "tests/func" "\\.sh$")
1895 (("/usr/bin/env bash") (which "bash")))))
1896 (delete 'configure) ;no configure script
1897 (add-after 'install 'install-man-pages
1898 (lambda* (#:key outputs #:allow-other-keys)
1899 (let* ((out (assoc-ref outputs "out"))
1900 (man (string-append out
1901 "/share/man/man1")))
1902 (install-file "mle.1"
1903 (string-append man))))))
1904 #:make-flags (list (string-append "CC="
1905 ,(cc-for-target))
1906 (string-append "prefix=" %output))))
1907 (home-page "https://github.com/adsr/mle")
1908 (synopsis "Small, flexible, terminal-based text editor")
1909 (description
1910 "mle is a small, flexible, terminal-based text editor written in C.
1911Notable features include: full Unicode support, syntax highlighting,
1912scriptable rc file, macros, search and replace (PCRE), window
1913splitting, multiple cursors, and integration with various shell
1914commands.")
1915 (license license:asl2.0)))
1916
1917(define-public lite-xl
1918 (package
1919 (name "lite-xl")
1920 (version "2.1.8")
1921 (source (origin
1922 (method git-fetch)
1923 (uri (git-reference
1924 (url "https://github.com/lite-xl/lite-xl")
1925 (commit (string-append "v" version))))
1926 (file-name (git-file-name name version))
1927 (sha256
1928 (base32
1929 "1lf6l6r02hp641n6wnfp7xmx54r32hv8whf7bd5nhf3gzvnl76pl"))))
1930 (build-system meson-build-system)
1931 (arguments (list #:configure-flags #~'("-Duse_system_lua=true")))
1932 (inputs (list lua-5.4 pcre2 freetype libdecor sdl3))
1933 (native-inputs (list pkg-config))
1934 (home-page "https://lite-xl.com")
1935 (synopsis "Lightweight text editor written in Lua")
1936 (description
1937 "Lite XL is derived from lite. It is a lightweight text editor written
1938mostly in Lua. It aims to provide something practical, pretty, small and fast
1939easy to modify and extend, or to use without doing either.
1940
1941The aim of Lite XL compared to lite is to be more user-friendly, improve the
1942quality of font rendering, and reduce CPU usage.")
1943 (license license:expat)))
1944
1945(define-public jed
1946 (package
1947 (name "jed")
1948 (version "0.99-19")
1949 (source (origin
1950 (method url-fetch)
1951 (uri (string-append "https://www.jedsoft.org/releases/jed/jed-"
1952 version ".tar.bz2"))
1953 (sha256
1954 (base32
1955 "0qspdc6wss43wh1a8fddvf62xyhld5p7hl75grv4d95h5z73k8wp"))
1956 (modules '((guix build utils)))
1957 (snippet #~(begin
1958 ;; Delete Windows binaries.
1959 (delete-file-recursively "bin/w32")
1960
1961 (substitute* "src/Makefile.in"
1962 (("/bin/cp")
1963 "cp"))
1964 (substitute* "configure"
1965 (("TERMCAP=-ltermcap")
1966 "TERMCAP="))))))
1967 (build-system gnu-build-system)
1968 (arguments
1969 (list #:configure-flags
1970 #~(list (string-append "--with-slang="
1971 #$(this-package-input "slang")))
1972 ;; jed provides no tests
1973 #:tests? #f))
1974 (inputs (list slang))
1975 (home-page "https://www.jedsoft.org/jed/")
1976 (synopsis "Programmer's editor using S-Lang scripting for configuration")
1977 (description
1978 "Jed is a powerful programmer's editor using the S-Lang scripting language
1979for configuration and extensibility. It provides emulation modes for the
1980key bindings of many editors (including Emacs and WordStar), and has syntax
1981highlighting for dozens of languages. Jed is very small and fast.")
1982 (license license:gpl2+)))
1983
1984(define-public xnedit
1985 (package
1986 (name "xnedit")
1987 (version "1.6.3")
1988 (source (origin
1989 (method url-fetch)
1990 (uri (string-append "mirror://sourceforge/xnedit/" name "-"
1991 version ".tar.gz"))
1992 (sha256
1993 (base32
1994 "0mb30xl0j27fs37hxskap50xawv7f1pb6ymp6yh8dz8j4iwrz9lb"))))
1995
1996 (build-system gnu-build-system)
1997 (arguments
1998 (list
1999 #:make-flags #~(list (string-append "PREFIX=" #$output)
2000 (string-append "CC=" #$(cc-for-target)))
2001 #:tests? #f ;no tests
2002 #:phases #~(modify-phases %standard-phases
2003 (delete 'configure)
2004 (replace 'build
2005 (lambda* (#:key make-flags #:allow-other-keys)
2006 (apply invoke "make" "linux" make-flags))))))
2007 (inputs (list motif))
2008 (native-inputs (list pkg-config))
2009 (home-page "https://sourceforge.net/projects/xnedit/")
2010 (synopsis "Fast and classic X11 text editor")
2011 (description
2012 "XNEdit is a fast and classic X11 text editor, based on NEdit,
2013with full unicode support and antialiased text rendering.")
2014 (license license:gpl2+)))
2015
2016(define-public dte
2017 (package
2018 (name "dte")
2019 (version "1.11.1")
2020 (source (origin
2021 (method git-fetch)
2022 (uri (git-reference
2023 (url "https://gitlab.com/craigbarnes/dte")
2024 (commit (string-append "v" version))))
2025 (file-name (git-file-name name version))
2026 (sha256
2027 (base32
2028 "1q43jvhj6r1ws58ngpcq8mzj4di7mj2a4bmigk9zy0f3riagnlv1"))))
2029 (build-system gnu-build-system)
2030 (native-inputs
2031 (list util-linux))
2032 (arguments
2033 (list
2034 #:make-flags
2035 #~(list (string-append "CC=" #$(cc-for-target))
2036 (string-append "prefix=" #$output))
2037 #:phases
2038 #~(modify-phases %standard-phases
2039 (delete 'configure))))
2040 (home-page "https://craigbarnes.gitlab.io/dte/")
2041 (synopsis "Small and easy to use console text editor")
2042 (description
2043 "@command{dte} is a portable console text editor with features like multiple buffers/tabs,
2044syntax highlighting, customizable color scheme (including support for 24-bit true
2045colours), kitty keyboard protocol, editorconfig support, amongst other features.")
2046 (license license:gpl2)))
2047
2048(define-public zed
2049 (package
2050 (name "zed")
2051 (version "0.225.10")
2052 (outputs '("out" ; editor, cli, icons, desktop file
2053 "remote" ; zed-remote-server for remote development
2054 "server" ; collab server daemon
2055 "tools")) ; extension_cli
2056 (source
2057 (origin
2058 (method git-fetch)
2059 (uri (git-reference
2060 (url "https://github.com/zed-industries/zed")
2061 (commit (string-append "v" version))))
2062 (file-name (git-file-name name version))
2063 (sha256
2064 (base32 "1d6zr88s4nj4fw01gw908aw2mqgjj25baj4gx7qnm6rsbxqrp500"))
2065 (patches
2066 (search-patches "zed-0.225.10-add-message-notification-action.patch"
2067 "zed-0.225.10-add-guix-container-support.patch"
2068 "zed-0.225.10-collapse-multiline-git-deps.patch"
2069 "zed-0.225.10-disable-dlopen.patch"
2070 "zed-0.225.10-exclude-libwebrtc-from-audio.patch"
2071 "zed-0.225.10-fix-sqlite-memory-mode.patch"
2072 "zed-0.225.10-fix-test-db-isolation.patch"
2073 "zed-0.225.10-fix-workspace-race.patch"
2074 "zed-0.225.10-keep-regular-file-workspaces.patch"
2075 "zed-0.225.10-remove-patch-crates-io.patch"
2076 "zed-0.225.10-use-mock-livekit-on-linux.patch"))
2077 (snippet
2078 #~(begin (delete-file
2079 "crates/zed/resources/windows/bin/x64/OpenConsole.exe")))))
2080 (build-system cargo-build-system)
2081 (arguments
2082 (list #:install-source? #f
2083 #:cargo-build-flags ''("--release" "-p" "zed")
2084 ;; Not installed:
2085 ;; auto_update_helper - Windows-only (empty main on Linux)
2086 ;; eval - internal AI agent benchmarking tool
2087 ;; edit_prediction_cli - internal edit prediction training pipeline
2088 ;; storybook - GPUI component viewer for Zed UI development
2089 ;; docs_preprocessor - mdbook preprocessor for Zed's docs website
2090 ;; zed_visual_test_runner - visual regression tests, macOS-only
2091 #:cargo-install-paths ''("crates/zed"
2092 "crates/cli" ; opens files in running Zed
2093 ;;; Install remote_server via its own cargo invocation
2094 ;;; to avoid feature unification with the zed build.
2095 "crates/remote_server" ; installs as zed-remote-server
2096 "crates/collab" ; self-hostable collaboration server
2097 "crates/extension_cli") ; builds extensions from source
2098 #:phases
2099 #~(modify-phases %standard-phases
2100 (add-after 'install 'install-extras
2101 (lambda* (#:key outputs #:allow-other-keys)
2102 (let* ((out (assoc-ref outputs "out"))
2103 (bin (string-append out "/bin"))
2104 (libexec (string-append out "/libexec"))
2105 (icons512 (string-append out "/share/icons/hicolor/512x512/apps"))
2106 (icons1024 (string-append out "/share/icons/hicolor/1024x1024/apps"))
2107 (apps (string-append out "/share/applications"))
2108 (remote-bin (string-append (assoc-ref outputs "remote") "/bin"))
2109 (server-bin (string-append (assoc-ref outputs "server") "/bin"))
2110 (tools-bin (string-append (assoc-ref outputs "tools") "/bin")))
2111 ;;; The cli binary is the user-facing launcher that finds
2112 ;;; and delegates to zed-editor via ../libexec/zed-editor.
2113 (mkdir-p libexec)
2114 (rename-file (string-append bin "/zed")
2115 (string-append libexec "/zed-editor"))
2116 (rename-file (string-append bin "/cli")
2117 (string-append bin "/zed"))
2118 ;;; Move remote_server to "remote" output as zed-remote-server.
2119 (mkdir-p remote-bin)
2120 (rename-file (string-append bin "/remote_server")
2121 (string-append remote-bin "/zed-remote-server"))
2122 ;;; Move collab to "server" output.
2123 (mkdir-p server-bin)
2124 (rename-file (string-append bin "/collab")
2125 (string-append server-bin "/collab"))
2126 (rename-file (string-append bin "/dotenv")
2127 (string-append server-bin "/dotenv"))
2128 ;;; Move zed-extension to "tools" output.
2129 (mkdir-p tools-bin)
2130 (rename-file (string-append bin "/zed-extension")
2131 (string-append tools-bin "/zed-extension"))
2132 ;;; Icons.
2133 (mkdir-p icons512)
2134 (mkdir-p icons1024)
2135 (copy-file "crates/zed/resources/app-icon.png"
2136 (string-append icons512 "/zed.png"))
2137 (copy-file "crates/zed/resources/[email protected]"
2138 (string-append icons1024 "/zed.png"))
2139 ;;; Desktop file.
2140 (mkdir-p apps)
2141 (copy-file "crates/zed/resources/zed.desktop.in"
2142 (string-append apps "/dev.zed.Zed.desktop"))
2143 (substitute* (string-append apps "/dev.zed.Zed.desktop")
2144 (("\\$APP_NAME") "Zed")
2145 (("\\$APP_CLI") "zed")
2146 (("\\$APP_ARGS") "%U")
2147 (("\\$APP_ICON") "zed")
2148 (("\\$DO_STARTUP_NOTIFY") "true")))))
2149 (add-after 'unpack 'set-env
2150 (lambda _
2151 (setenv "LIBGIT2_NO_VENDOR" "1")
2152 (setenv "LIBSQLITE3_SYS_USE_PKG_CONFIG" "1")))
2153 (add-after 'set-env 'patch-git-deps
2154 (lambda _
2155 ;; All multi-line entries are collapsed to single
2156 ;; lines by the patch. reqwest and scap already
2157 ;; carry version fields; just strip the git source.
2158 (substitute* "Cargo.toml"
2159 (("(reqwest = \\{) git = \"[^\"]+\", rev = \"[^\"]+\", " _ prefix)
2160 (string-append prefix " "))
2161 (("(scap = \\{) git = \"[^\"]+\", rev = \"[^\"]+\", " _ prefix)
2162 (string-append prefix " ")))
2163 ;; Replace all remaining git fields with version = "*"
2164 ;; and strip rev/branch.
2165 (substitute* "Cargo.toml"
2166 (("git = \"https://[^\"]+\"")
2167 "version = \"*\"")
2168 ((", rev = \"[^\"]+\"") "")
2169 ((", branch = \"[^\"]+\"") ""))
2170 ;; Sub-crate Cargo.toml files also have git deps.
2171 (for-each
2172 (lambda (file)
2173 ;; rev-before-git deps: replace pair with version = "*".
2174 (substitute* file
2175 (("rev = \"[^\"]+\", git = \"[^\"]+\"")
2176 "version = \"*\""))
2177 ;; git-before-rev deps that already carry a version
2178 ;; field: strip git+rev, keep everything else.
2179 (substitute* file
2180 (("git = \"[^\"]+\" *, rev = \"[^\"]+\" *, ") "")
2181 ((", git *= *\"[^\"]+\"") "")
2182 ((", branch = \"[^\"]+\"") "")))
2183 (find-files "crates" "^Cargo\\.toml$"))
2184 ;; nvim-rs has no version field; add one.
2185 (substitute* "crates/vim/Cargo.toml"
2186 (("(nvim-rs = \\{) " _ prefix)
2187 (string-append prefix " version = \"*\", "))))))))
2188 (native-inputs (list cmake-minimal pkg-config protobuf))
2189 (inputs
2190 (cons* alsa-lib
2191 bzip2
2192 dbus
2193 fontconfig
2194 freetype
2195 libgit2-1.9
2196 libx11
2197 libxcb
2198 libxkbcommon
2199 openssl
2200 sqlite
2201 vulkan-loader
2202 wayland
2203 wayland-protocols
2204 xcb-util-cursor
2205 zlib
2206 (list zstd "lib")
2207 (cargo-inputs 'zed)))
2208 (home-page "https://zed.dev")
2209 (synopsis "High-performance, multiplayer code editor")
2210 (description
2211 "Zed is a high-performance, multiplayer code editor written in Rust.
2212
2213Note: This build disables WebRTC (libwebrtc) support because libwebrtc is
2214not yet packaged in Guix. As a result, voice and video calls in collaborative
2215sessions are not available. Text-based collaboration, editing, and all other
2216features work normally.")
2217 (license license:gpl3+)))