gnu: emacs-consult: Fix grammar.
[jackhill/guix/guix.git] / gnu / packages / suckless.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
3 ;;; Copyright © 2015 Amirouche Boubekki <amirouche@hypermove.net>
4 ;;; Copyright © 2016 Al McElrath <hello@yrns.org>
5 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
6 ;;; Copyright © 2015 Dmitry Bogatov <KAction@gnu.org>
7 ;;; Copyright © 2015 Leo Famulari <leo@famulari.name>
8 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
9 ;;; Copyright © 2017 Alex Griffin <a@ajgrf.com>
10 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
11 ;;;
12 ;;; This file is part of GNU Guix.
13 ;;;
14 ;;; GNU Guix is free software; you can redistribute it and/or modify it
15 ;;; under the terms of the GNU General Public License as published by
16 ;;; the Free Software Foundation; either version 3 of the License, or (at
17 ;;; your option) any later version.
18 ;;;
19 ;;; GNU Guix is distributed in the hope that it will be useful, but
20 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
21 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 ;;; GNU General Public License for more details.
23 ;;;
24 ;;; You should have received a copy of the GNU General Public License
25 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
26
27 (define-module (gnu packages suckless)
28 #:use-module (gnu packages)
29 #:use-module (gnu packages base)
30 #:use-module (gnu packages compression)
31 #:use-module (gnu packages cups)
32 #:use-module (gnu packages fonts)
33 #:use-module (gnu packages fontutils)
34 #:use-module (gnu packages gawk)
35 #:use-module (gnu packages gnome)
36 #:use-module (gnu packages image)
37 #:use-module (gnu packages libbsd)
38 #:use-module (gnu packages linux)
39 #:use-module (gnu packages mpd)
40 #:use-module (gnu packages ncurses)
41 #:use-module (gnu packages pkg-config)
42 #:use-module (gnu packages webkit)
43 #:use-module (gnu packages xorg)
44 #:use-module (guix build-system glib-or-gtk)
45 #:use-module (guix build-system gnu)
46 #:use-module (guix download)
47 #:use-module (guix git-download)
48 #:use-module ((guix licenses) #:prefix license:)
49 #:use-module (guix utils)
50 #:use-module (guix packages))
51
52 (define-public blind
53 (package
54 (name "blind")
55 (version "1.1")
56 (source (origin
57 (method url-fetch)
58 (uri (string-append "https://dl.suckless.org/tools/blind-"
59 version ".tar.gz"))
60 (sha256
61 (base32
62 "0nncvzyipvkkd7zlgzwbjygp82frzs2hvbnk71gxf671np607y94"))))
63 (build-system gnu-build-system)
64 (arguments
65 `(#:tests? #f ; no check target
66 #:make-flags (list (string-append "CC=" ,(cc-for-target))
67 (string-append "PREFIX=" %output))
68 #:phases
69 (modify-phases %standard-phases
70 (delete 'configure)))) ; no configure script
71 (synopsis "Command line video editing utilities")
72 (home-page "https://tools.suckless.org/blind/")
73 (description
74 "Blind is a collection of command line video editing utilities. It uses
75 a custom raw video format with a simple container.")
76 (license license:isc)))
77
78 (define-public dwm
79 (package
80 (name "dwm")
81 (version "6.2")
82 (source (origin
83 (method url-fetch)
84 (uri (string-append "https://dl.suckless.org/dwm/dwm-"
85 version ".tar.gz"))
86 (sha256
87 (base32 "03hirnj8saxnsfqiszwl2ds7p0avg20izv9vdqyambks00p2x44p"))))
88 (build-system gnu-build-system)
89 (arguments
90 `(#:tests? #f
91 #:make-flags (list (string-append "FREETYPEINC="
92 (assoc-ref %build-inputs "freetype")
93 "/include/freetype2"))
94 #:phases
95 (modify-phases %standard-phases
96 (replace 'configure
97 (lambda _
98 (substitute* "Makefile" (("\\$\\{CC\\}") "gcc"))
99 #t))
100 (replace 'install
101 (lambda* (#:key outputs #:allow-other-keys)
102 (let ((out (assoc-ref outputs "out")))
103 (invoke "make" "install"
104 (string-append "DESTDIR=" out) "PREFIX="))))
105 (add-after 'build 'install-xsession
106 (lambda* (#:key outputs #:allow-other-keys)
107 ;; Add a .desktop file to xsessions.
108 (let* ((output (assoc-ref outputs "out"))
109 (xsessions (string-append output "/share/xsessions")))
110 (mkdir-p xsessions)
111 (with-output-to-file
112 (string-append xsessions "/dwm.desktop")
113 (lambda _
114 (format #t
115 "[Desktop Entry]~@
116 Name=dwm~@
117 Comment=Dynamic Window Manager~@
118 Exec=~a/bin/dwm~@
119 TryExec=~@*~a/bin/dwm~@
120 Icon=~@
121 Type=Application~%"
122 output)))
123 #t))))))
124 (inputs
125 `(("freetype" ,freetype)
126 ("libx11" ,libx11)
127 ("libxft" ,libxft)
128 ("libxinerama" ,libxinerama)))
129 (home-page "https://dwm.suckless.org/")
130 (synopsis "Dynamic window manager")
131 (description
132 "dwm is a dynamic window manager for X. It manages windows in tiled,
133 monocle and floating layouts. All of the layouts can be applied dynamically,
134 optimising the environment for the application in use and the task performed.")
135 (license license:x11)))
136
137 (define-public dmenu
138 (package
139 (name "dmenu")
140 (version "5.0")
141 (source (origin
142 (method url-fetch)
143 (uri (string-append "https://dl.suckless.org/tools/dmenu-"
144 version ".tar.gz"))
145 (sha256
146 (base32
147 "1lvfxzg3chsgcqbc2vr0zic7vimijgmbvnspayx73kyvqi1f267y"))))
148 (build-system gnu-build-system)
149 (arguments
150 `(#:tests? #f ; no tests
151 #:make-flags
152 (list (string-append "CC=" ,(cc-for-target))
153 (string-append "PREFIX=" %output)
154 (string-append "FREETYPEINC="
155 (assoc-ref %build-inputs "freetype")
156 "/include/freetype2"))
157 #:phases
158 (modify-phases %standard-phases (delete 'configure))))
159 (inputs
160 `(("freetype" ,freetype)
161 ("libxft" ,libxft)
162 ("libx11" ,libx11)
163 ("libxinerama" ,libxinerama)))
164 (home-page "https://tools.suckless.org/dmenu/")
165 (synopsis "Dynamic menu")
166 (description
167 "A dynamic menu for X, originally designed for dwm. It manages large
168 numbers of user-defined menu items efficiently.")
169 (license license:x11)))
170
171 (define-public spoon
172 (package
173 (name "spoon")
174 (version "0.6")
175 (source
176 (origin
177 (method url-fetch)
178 (uri (string-append "https://dl.2f30.org/releases/"
179 "spoon-" version ".tar.gz"))
180 (sha256
181 (base32
182 "1jpmg9k9f4f3lpz0k3cphqjswlyf8lz2sm8ccifiip93kd4rrdj0"))))
183 (build-system gnu-build-system)
184 (arguments
185 `(#:tests? #f ; no tests
186 #:make-flags
187 (list (string-append "CC=" ,(cc-for-target))
188 (string-append "PREFIX=" %output))))
189 (inputs
190 `(("libx11" ,libx11)
191 ("libxkbfile" ,libxkbfile)
192 ("alsa-lib" ,alsa-lib) ; tinyalsa (unpackaged) would suffice
193 ("libmpdclient" ,libmpdclient)))
194 (home-page "https://git.2f30.org/spoon/")
195 (synopsis "Set dwm status")
196 (description
197 "Spoon can be used to set the dwm status.")
198 (license license:isc)))
199
200 (define-public slock
201 (package
202 (name "slock")
203 (version "1.4")
204 (source (origin
205 (method url-fetch)
206 (uri (string-append "https://dl.suckless.org/tools/slock-"
207 version ".tar.gz"))
208 (sha256
209 (base32
210 "0sif752303dg33f14k6pgwq2jp1hjyhqv6x4sy3sj281qvdljf5m"))))
211 (build-system gnu-build-system)
212 (arguments
213 `(#:tests? #f ; no tests
214 #:make-flags
215 (list (string-append "CC=" ,(cc-for-target))
216 (string-append "PREFIX=" %output))
217 #:phases (modify-phases %standard-phases (delete 'configure))))
218 (inputs
219 `(("libx11" ,libx11)
220 ("libxext" ,libxext)
221 ("libxinerama" ,libxinerama)
222 ("libxrandr" ,libxrandr)))
223 (home-page "https://tools.suckless.org/slock/")
224 (synopsis "Simple X session lock")
225 (description
226 "Simple X session lock with trivial feedback on password entry.")
227 (license license:x11)))
228
229 (define-public st
230 (package
231 (name "st")
232 (version "0.8.4")
233 (source
234 (origin
235 (method url-fetch)
236 (uri (string-append "https://dl.suckless.org/st/st-"
237 version ".tar.gz"))
238 (sha256
239 (base32 "19j66fhckihbg30ypngvqc9bcva47mp379ch5vinasjdxgn3qbfl"))))
240 (build-system gnu-build-system)
241 (arguments
242 `(#:tests? #f ; no tests
243 #:make-flags
244 (list (string-append "CC=" ,(cc-for-target))
245 (string-append "PREFIX=" %output))
246 #:phases
247 (modify-phases %standard-phases
248 (delete 'configure)
249 (add-after 'unpack 'inhibit-terminfo-install
250 (lambda _
251 (substitute* "Makefile"
252 (("\ttic .*") ""))
253 #t)))))
254 (inputs
255 `(("libx11" ,libx11)
256 ("libxft" ,libxft)
257 ("fontconfig" ,fontconfig)
258 ("freetype" ,freetype)))
259 (native-inputs
260 `(("pkg-config" ,pkg-config)))
261 (home-page "https://st.suckless.org/")
262 (synopsis "Simple terminal emulator")
263 (description
264 "St implements a simple and lightweight terminal emulator. It
265 implements 256 colors, most VT10X escape sequences, utf8, X11 copy/paste,
266 antialiased fonts (using fontconfig), fallback fonts, resizing, and line
267 drawing.")
268 (license license:x11)))
269
270 (define-public surf
271 (package
272 (name "surf")
273 (version "2.0")
274 (source
275 (origin
276 (method url-fetch)
277 (uri (string-append "https://dl.suckless.org/surf/surf-"
278 version ".tar.gz"))
279 (sha256
280 (base32
281 "07cmajyafljigy10d21kkyvv5jf3hxkx06pz3rwwk3y3c9x4rvps"))))
282 (build-system glib-or-gtk-build-system)
283 (arguments
284 `(#:tests? #f ; no tests
285 #:make-flags
286 (list (string-append "CC=" ,(cc-for-target))
287 (string-append "PREFIX=" %output))
288 #:phases
289 (modify-phases %standard-phases
290 (delete 'configure)
291 ;; Use the right file name for dmenu and xprop.
292 (add-before 'build 'set-dmenu-and-xprop-file-name
293 (lambda* (#:key inputs #:allow-other-keys)
294 (substitute* "config.def.h"
295 (("dmenu") (string-append (assoc-ref inputs "dmenu") "/bin/dmenu"))
296 (("xprop") (string-append (assoc-ref inputs "xprop") "/bin/xprop")))
297 #t)))))
298 (inputs
299 `(("dmenu" ,dmenu)
300 ("glib-networking" ,glib-networking)
301 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
302 ("webkitgtk" ,webkitgtk)
303 ("xprop" ,xprop)))
304 (native-inputs
305 `(("pkg-config" ,pkg-config)))
306 (home-page "https://surf.suckless.org/")
307 (synopsis "Simple web browser")
308 (description
309 "Surf is a simple web browser based on WebKit/GTK+. It is able to
310 display websites and follow links. It supports the XEmbed protocol which
311 makes it possible to embed it in another application. Furthermore, one can
312 point surf to another URI by setting its XProperties.")
313 (license license:x11)))
314
315 (define-public sent
316 (package
317 (name "sent")
318 (version "1")
319 (source (origin
320 (method url-fetch/tarbomb)
321 (uri (string-append "https://dl.suckless.org/tools/sent-"
322 version ".tar.gz"))
323 (sha256
324 (base32
325 "0cxysz5lp25mgww73jl0mgip68x7iyvialyzdbriyaff269xxwvv"))))
326 (build-system gnu-build-system)
327 (arguments
328 `(#:phases (modify-phases %standard-phases
329 (delete 'configure)) ; no configuration
330 #:tests? #f ; no test suite
331 #:make-flags
332 (let ((pkg-config (lambda (flag)
333 (string-append
334 "$(shell pkg-config " flag " "
335 "xft fontconfig x11 libpng)"))))
336 (list (string-append "CC=" ,(cc-for-target))
337 (string-append "PREFIX=" %output)
338 (string-append "INCS=-I. " (pkg-config "--cflags"))
339 (string-append "LIBS=" (pkg-config "--libs") " -lm")))))
340 (native-inputs
341 `(("pkg-config" ,pkg-config)))
342 (inputs
343 `(("libpng" ,libpng)
344 ("libx11" ,libx11)
345 ("libxft" ,libxft)
346 ("fontconfig" ,fontconfig)))
347 (synopsis "Plain-text presentation tool")
348 (description "Sent uses plain-text files and PNG images to create slideshow
349 presentations. Each paragraph represents a slide in the presentation.
350 Especially for presentations using the Takahashi method this is very nice and
351 allows you to write down the presentation for a quick lightning talk within a
352 few minutes.")
353 (home-page "https://tools.suckless.org/sent")
354 (license license:x11)))
355
356 (define-public xbattmon
357 (package
358 (name "xbattmon")
359 (version "1.1")
360 (source
361 (origin
362 (method url-fetch)
363 (uri (string-append "https://dl.2f30.org/releases/"
364 "xbattmon-" version ".tar.gz"))
365 (sha256
366 (base32
367 "1zr6y8lml9xkx0a3dbbsds2qz1bjxvskp7wsckkf8mlsqrbb3xsg"))))
368 (build-system gnu-build-system)
369 (arguments
370 `(#:tests? #f ; no tests
371 #:make-flags
372 (list (string-append "CC=" ,(cc-for-target))
373 (string-append "PREFIX=" %output))))
374 (inputs
375 `(("libx11" ,libx11)))
376 (home-page "https://git.2f30.org/xbattmon/")
377 (synopsis "Simple battery monitor for X")
378 (description
379 "Xbattmon is a simple battery monitor for X.")
380 (license license:isc)))
381
382 (define-public wificurse
383 (package
384 (name "wificurse")
385 (version "0.3.9")
386 (source
387 (origin
388 (method url-fetch)
389 (uri (string-append "https://dl.2f30.org/releases/"
390 "wificurse-" version ".tar.gz"))
391 (sha256
392 (base32
393 "067ghr1xly5ca41kc83xila1p5hpq0bxfcmc8jvxi2ggm6wrhavn"))))
394 (build-system gnu-build-system)
395 (arguments
396 `(#:tests? #f ; No tests
397 #:make-flags (list
398 (string-append "PREFIX=" %output))
399 #:phases
400 (modify-phases %standard-phases
401 (delete 'configure)))) ; No configure script
402 (home-page "https://git.2f30.org/wificurse/")
403 (synopsis "Wifi DoS attack tool")
404 (description
405 "Wificurses listens for beacons sent from wireless access points
406 in the range of your wireless station. Once received the program
407 extracts the BSSID of the AP and transmits deauthentication packets
408 using the broadcast MAC address. This results to the disconnection
409 of all clients connected to the AP at the time of the attack. This
410 is essencially a WiFi DoS attack tool created for educational
411 purposes only. It works only in Linux and requires wireless card
412 drivers capable of injecting packets in wireless networks.")
413 (license license:gpl3+)))
414
415 (define-public skroll
416 (package
417 (name "skroll")
418 (version "0.6")
419 (source
420 (origin
421 (method url-fetch)
422 (uri (string-append "https://dl.2f30.org/releases/"
423 "skroll-" version ".tar.gz"))
424 (sha256
425 (base32
426 "0km6bjfz4ssb1z0xwld6iiixnn7d255ax8yjs3zkdm42z8q9yl0f"))))
427 (build-system gnu-build-system)
428 (arguments
429 `(#:tests? #f ; no tests
430 #:make-flags
431 (list (string-append "CC=" ,(cc-for-target))
432 (string-append "PREFIX=" %output))
433 #:phases
434 (modify-phases %standard-phases
435 (delete 'configure)))) ; no configure script
436 (home-page "https://2f30.org/")
437 (synopsis "Commandline utility which scrolls text")
438 (description
439 "Skroll is a small utility that you can use to make a text scroll.
440 Pipe text to it, and it will scroll a given number of letters from right to
441 left.")
442 (license license:wtfpl2)))
443
444 (define-public sbm
445 (package
446 (name "sbm")
447 (version "0.9")
448 (source
449 (origin
450 (method url-fetch)
451 (uri (string-append "https://dl.2f30.org/releases/"
452 "sbm-" version ".tar.gz"))
453 (sha256
454 (base32
455 "1nks5mkh5wn30kyjzlkjlgi31bv1wq52kbp0r6nzbyfnvfdlywik"))))
456 (build-system gnu-build-system)
457 (arguments
458 `(#:tests? #f ; no tests
459 #:make-flags
460 (list (string-append "CC=" ,(cc-for-target))
461 (string-append "PREFIX=" %output))
462 #:phases
463 (modify-phases %standard-phases
464 (delete 'configure)))) ; no configure script
465 (home-page "https://git.2f30.org/sbm/")
466 (synopsis "Simple bandwidth monitor")
467 (description
468 "Sbm is a simple bandwidth monitor.")
469 (license license:isc)))
470
471 (define-public prout
472 (package
473 (name "prout")
474 (version "0.2")
475 (source
476 (origin
477 (method url-fetch)
478 (uri (string-append "https://dl.2f30.org/releases/"
479 "prout-" version ".tar.gz"))
480 (sha256
481 (base32
482 "1s6c3ygg1h1fyxkh8gd7nzjk6qhnwsb4535d2k780kxnwns5fzas"))))
483 (build-system gnu-build-system)
484 (arguments
485 `(#:tests? #f ; no tests
486 #:make-flags
487 (list (string-append "CC=" ,(cc-for-target))
488 (string-append "PREFIX=" %output))
489 #:phases
490 (modify-phases %standard-phases
491 (delete 'configure)))) ; no configure script
492 (inputs
493 `(("cups-minimal" ,cups-minimal)
494 ("zlib" ,zlib)))
495 (home-page "https://git.2f30.org/prout/")
496 (synopsis "Smaller lp command")
497 (description
498 "Prout (PRint OUT) is a small utility one can use to send
499 documents to a printer.
500 It has no feature, and does nothing else. Just set your default
501 printer in client.conf(5) and start printing. No need for a local
502 cups server to be installed.")
503 (license license:wtfpl2)))
504
505 (define-public noice
506 (package
507 (name "noice")
508 (version "0.8")
509 (source
510 (origin
511 (method url-fetch)
512 (uri (string-append "https://dl.2f30.org/releases/"
513 "noice-" version ".tar.gz"))
514 (sha256
515 (base32 "0g01iwzscdv27c1idv93gd74kjzy3n9kazgm6qz08rygp96qx4xw"))))
516 (build-system gnu-build-system)
517 (arguments
518 `(#:tests? #f ; no tests
519 #:make-flags
520 (list (string-append "CC=" ,(cc-for-target))
521 (string-append "PREFIX=" %output))
522 #:phases
523 (modify-phases %standard-phases
524 (delete 'configure) ; no configure script
525 (add-before 'build 'curses
526 (lambda _
527 (substitute* "Makefile"
528 (("lcurses") "lncurses")))))))
529 (inputs
530 `(("ncurses" ,ncurses)))
531 (home-page "https://git.2f30.org/noice/")
532 (synopsis "Small file browser")
533 (description
534 "Noice is a small curses-based file browser.")
535 (license license:bsd-2)))
536
537 (define-public human
538 (package
539 (name "human")
540 (version "0.3")
541 (source
542 (origin
543 (method git-fetch)
544 (uri (git-reference
545 (url "git://git.2f30.org/human.git")
546 (commit version)))
547 (file-name (git-file-name name version))
548 (sha256
549 (base32
550 "0y0bsmvpwfwb2lwspi6a799y34h1faxc6yfanyw6hygxc8661mga"))))
551 (build-system gnu-build-system)
552 (arguments
553 `(#:tests? #f ; no tests
554 #:make-flags
555 (list (string-append "CC=" ,(cc-for-target))
556 (string-append "PREFIX=" %output))
557 #:phases
558 (modify-phases %standard-phases
559 (delete 'configure)))) ; no configure script
560 (home-page "https://git.2f30.org/human/")
561 (synopsis "Convert bytes to human readable formats")
562 (description
563 "Human is a small program which translate numbers into a
564 human readable format. By default, it tries to detect the best
565 factorisation, but you can force its output.
566 You can adjust the number of decimals with the @code{SCALE}
567 environment variable.")
568 (license license:wtfpl2)))
569
570 (define-public fortify-headers
571 (package
572 (name "fortify-headers")
573 (version "1.1")
574 (source
575 (origin
576 (method url-fetch)
577 (uri (string-append "https://dl.2f30.org/releases/"
578 "fortify-headers-" version ".tar.gz"))
579 (sha256
580 (base32 "1dhz41jq1azcf7rbvga8w6pnx19l1j9r6jwj8qrlrfnjl9hdi9bb"))))
581 (build-system gnu-build-system)
582 (arguments
583 `(#:tests? #f ; no tests
584 #:make-flags
585 (list (string-append "CC=" ,(cc-for-target))
586 (string-append "PREFIX=" %output))
587 #:phases
588 (modify-phases %standard-phases
589 (delete 'configure)))) ; no configure script
590 (home-page "https://git.2f30.org/fortify-headers/")
591 (synopsis "Standalone fortify-source implementation")
592 (description
593 "This is a standalone implementation of fortify source. It provides
594 compile time buffer checks. It is libc-agnostic and simply overlays the
595 system headers by using the @code{#include_next} extension found in GCC. It was
596 initially intended to be used on musl-based Linux distributions.
597
598 @itemize
599 @item It is portable, works on *BSD, Linux, Solaris and possibly others.
600 @item It will only trap non-conformant programs. This means that fortify
601 level 2 is treated in the same way as level 1.
602 @item Avoids making function calls when undefined behaviour has already been
603 invoked. This is handled by using @code{__builtin_trap()}.
604 @item Support for out-of-bounds read interfaces, such as @code{send()},
605 @code{write()}, @code{fwrite()}, etc.
606 @item No ABI is enforced. All of the fortify check functions are inlined
607 into the resulting binary.
608 @end itemize\n")
609 (license license:isc)))
610
611 (define-public colors
612 (package
613 (name "colors")
614 (version "0.3")
615 (source
616 (origin
617 (method url-fetch)
618 (uri (string-append "https://dl.2f30.org/releases/"
619 "colors-" version ".tar.gz"))
620 (sha256
621 (base32
622 "1lckmqpgj89841splng0sszbls2ag71ggkgr1wsv9y3v6y87589z"))))
623 (build-system gnu-build-system)
624 (arguments
625 `(#:tests? #f ; no tests
626 #:make-flags
627 (list (string-append "CC=" ,(cc-for-target))
628 (string-append "PREFIX=" %output))
629 #:phases
630 (modify-phases %standard-phases
631 (delete 'configure)))) ; no configure script
632 (inputs
633 `(("libpng" ,libpng)))
634 (home-page "https://git.2f30.org/colors/")
635 (synopsis "Extract colors from pictures")
636 (description
637 "Extract colors from PNG files. It is similar to
638 strings(1) but for pictures. For a given input file it outputs a
639 colormap to stdout.")
640 (license license:isc)))
641
642 ;; No new releases were made at github, this repository is more active than
643 ;; the one at http://git.suckless.org/libutf/ and it is
644 ;; done by the same developer.
645 (define-public libutf
646 (let ((revision "1")
647 (commit "ff4c60635e1f455b0a0b4200f8183fbd5a88225b"))
648 (package
649 (name "libutf")
650 (version (git-version "0.0.0" revision commit))
651 (source
652 (origin
653 (method git-fetch)
654 (uri (git-reference
655 (url "https://github.com/cls/libutf")
656 (commit commit)))
657 (file-name (git-file-name name version))
658 (sha256
659 (base32
660 "1ih5vjavilzggyr1j1z6w1z12c2fs5fg77cfnv7ami5ivsy3kg3d"))))
661 (build-system gnu-build-system)
662 (arguments
663 `(#:tests? #f ; no tests
664 #:make-flags
665 (list (string-append "CC=" ,(cc-for-target))
666 (string-append "PREFIX=" %output))
667 #:phases
668 (modify-phases %standard-phases
669 (delete 'configure)))) ; no configure script
670 (inputs
671 `(("gawk" ,gawk)))
672 (home-page "https://github.com/cls/libutf")
673 (synopsis "Plan 9 compatible UTF-8 library")
674 (description
675 "This is a C89 UTF-8 library, with an API compatible with that of
676 Plan 9's libutf, but with a number of improvements:
677
678 @itemize
679 @item Support for runes beyond the Basic Multilingual Plane.
680 @item utflen and utfnlen cannot overflow on 32- or 64-bit machines.
681 @item chartorune treats all invalid codepoints as though Runeerror.
682 @item fullrune, utfecpy, and utfnlen do not overestimate the length
683 of malformed runes.
684 @item An extra function, charntorune(p,s,n), equivalent to
685 fullrune(s,n) ? chartorune(p,s): 0.
686 @item Runeerror may be set to an alternative replacement value, such
687 as -1, to be used instead of U+FFFD.
688 @end itemize\n")
689 (license license:expat))))
690
691 ;; No release tarballs so far.
692 (define-public lchat
693 (let ((revision "4")
694 (commit "e3b64e67b9b9d832462382246474ce1e7d92217c"))
695 (package
696 (name "lchat")
697 (version (git-version "0.0.0" revision commit))
698 (source
699 (origin
700 (method git-fetch)
701 (uri (git-reference
702 (url "https://github.com/younix/lchat")
703 (commit commit)))
704 (file-name (git-file-name name version))
705 (sha256
706 (base32 "1qcjqbgmsskc04j2r6xl3amkwj05n520sq1wv2mqyqncz42qrxm0"))))
707 (build-system gnu-build-system)
708 (arguments
709 `(#:test-target "test"
710 #:make-flags
711 (list (string-append "CC=" ,(cc-for-target))
712 (string-append "PREFIX=" %output))
713 #:phases
714 (modify-phases %standard-phases
715 (delete 'configure) ; no configure script
716 (add-before 'build 'libbsd
717 (lambda _
718 (substitute* "Makefile"
719 (("-lutf") "-lutf -lbsd"))))
720 (replace 'install
721 (lambda* (#:key outputs #:allow-other-keys)
722 (let* ((out (assoc-ref outputs "out"))
723 (bin (string-append out "/bin"))
724 (man1 (string-append out "/share/man/man1")))
725 (install-file "lchat" bin)
726 (install-file "lchat.1" man1)
727 #t))))))
728 (inputs
729 `(("grep" ,grep)
730 ("ncurses" ,ncurses)
731 ("libutf" ,libutf)
732 ("libbsd" ,libbsd)))
733 (home-page "https://github.com/younix/lchat")
734 (synopsis "Line chat is a frontend for the irc client ii from suckless")
735 (description
736 "Lchat (line chat) is the little and small brother of cii.
737 It is a front end for ii-like chat programs. It uses @code{tail -f} to get the
738 chat output in the background.")
739 (license license:isc))))
740
741 (define-public scron
742 (package
743 (name "scron")
744 (version "0.4")
745 (source
746 (origin
747 (method url-fetch)
748 (uri (string-append "https://dl.2f30.org/releases/"
749 "scron-" version ".tar.gz"))
750 (sha256
751 (base32
752 "066fwa55kqcgfrsqgxh94sqbkxfsr691360xg4ljxr4i75d25s2a"))))
753 (build-system gnu-build-system)
754 (arguments
755 `(#:tests? #f ; no tests
756 #:make-flags
757 (list (string-append "CC=" ,(cc-for-target))
758 (string-append "PREFIX=" %output))
759 #:phases
760 (modify-phases %standard-phases
761 (delete 'configure)))) ; no configure script
762 (home-page "https://git.2f30.org/scron/")
763 (synopsis "Simple cron daemon")
764 (description
765 "Schedule commands to be run at specified dates and times.
766 Single daemon and configuration file. Log to stdout or syslog. No mail
767 support.")
768 (license license:expat)))