;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 Eric Dvorsak ;;; Copyright © 2015 Siniša Biđin ;;; Copyright © 2015, 2016, 2022 Eric Bavier ;;; Copyright © 2015 xd1le ;;; Copyright © 2015 Paul van der Walt ;;; Copyright © 2016 Danny Milosavljevic ;;; Copyright © 2016, 2019, 2020 Efraim Flashner ;;; Copyright © 2016 Al McElrath ;;; Copyright © 2016 Carlo Zancanaro ;;; Copyright © 2016 2019, 2021-2022 Ludovic Courtès ;;; Copyright © 2016, 2017, 2018, 2020 Nikita ;;; Copyright © 2016 doncatnip ;;; Copyright © 2016 Ivan Vilata i Balaguer ;;; Copyright © 2017 Mekeor Melire ;;; Copyright © 2017, 2019, 2020 Marius Bakke ;;; Copyright © 2017, 2020, 2021 Oleg Pykhalov ;;; Copyright © 201
aboutsummaryrefslogtreecommitdiff
blob: 95c00528418cd71d86ae5381a6bfe078d11f1ad0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
;;; Copyright © 2019, 2020 Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl>
;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu packages jami)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (gnu packages aidc)
  #:use-module (gnu packages audio)
  #:use-module (gnu packages autotools)
  #:use-module (gnu packages backup)
  #:use-module (gnu packages base)
  #:use-module (gnu packages check)
  #:use-module (gnu packages crypto)
  #:use-module (gnu packages documentation)
  #:use-module (gnu packages freedesktop)
  #:use-module (gnu packages gettext)
  #:use-module (gnu packages glib)
  #:use-module (gnu packages gnome)
  #:use-module (gnu packages graphviz)
  #:use-module (gnu packages gtk)
  #:use-module (gnu packages guile)
  #:use-module (gnu packages libcanberra)
  #:use-module (gnu packages linux)
  #:use-module (gnu packages networking)
  #:use-module (gnu packages perl)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages pulseaudio)
  #:use-module (gnu packages python)
  #:use-module (gnu packages qt)
  #:use-module (gnu packages serialization)
  #:use-module (gnu packages sqlite)
  #:use-module (gnu packages telephony)
  #:use-module (gnu packages tls)
  #:use-module (gnu packages upnp)
  #:use-module (gnu packages version-control)
  #:use-module (gnu packages video)
  #:use-module (gnu packages vulkan)
  #:use-module (gnu packages webkit)
  #:use-module (gnu packages xdisorg)
  #:use-module (gnu packages xiph)
  #:use-module (gnu packages xorg)
  #:use-module (gnu packages)
  #:use-module (guix build-system cmake)
  #:use-module (guix build-system gnu)
  #:use-module (guix build-system qt)
  #:use-module (guix download)
  #:use-module (guix gexp)
  #:use-module (guix git-download)
  #:use-module (guix packages)
  #:use-module (guix utils))

(define %jami-version "20220726.1515.da8d1da")

(define %jami-sources
  ;; Return an origin object of the tarball release sources archive of the
  ;; Jami project.
  (origin
    (method url-fetch)
    (uri (string-append "https://dl.jami.net/release/tarballs/jami_"
                        %jami-version
                        ".tar.gz"))
    (modules '((guix build utils)))
    (snippet
     `(begin
        ;; Delete multiple MiBs of bundled tarballs.  The contrib directory
        ;; contains the custom patches for pjproject and other libraries used
        ;; by Jami.
        (delete-file-recursively "daemon/contrib/tarballs")
        ;; Remove the git submodule directories of unused Jami clients.
        (for-each delete-file-recursively '("client-android"
                                            "client-ios"
                                            "client-macosx"
                                            "plugins"))))
    (sha256
     (base32
      "1zx0i9aw8jsba3bjc5r4pkkybm8c0lyz420ciq89vsswd48gfdhg"))
    (patches (search-patches "jami-fix-esc-bug.patch"))))

;; Jami maintains a set of patches for some key dependencies (currently
;; pjproject and ffmpeg) of Jami that haven't yet been integrated upstream.
;; This procedure simplifies the process of applying them.
(define jami-apply-custom-patches
  #~(lambda* (#:key dep-name patches)
      (let ((patches-directory "patches"))
        (mkdir-p patches-directory)
        (invoke "tar" "-xvf" #$%jami-sources
                "-C" patches-directory
                "--strip-components=5"
                (string-append "jami-project/daemon/contrib/src/"
                               dep-name))
        (for-each
         (lambda (file)
           (invoke "patch" "--force" "--ignore-whitespace" "-p1" "-i"
                   (string-append patches-directory "/"
                                  file ".patch")))
         patches))))

(define-public pjproject-jami
  (let ((commit "e1f389d0b905011e0cb62cbdf7a8b37fc1bcde1a")
        (revision "0"))
    (package
      (inherit pjproject)
      (name "pjproject-jami")
      (version (git-version "2.11" revision commit))
      (source (origin
                (inherit (package-source pjproject))
                ;; The Jami development team regularly issues patches to
                ;; pjproject to extend the its functionality and fix bugs;
                ;; they are submitted for inclusion upstream but larger
                ;; patches take time to be reviewed and merged, hence this
                ;; forked repository.
                (method git-fetch)
                (uri (git-reference
                      (url "https://github.com/savoirfairelinux/pjproject")
                      (commit commit)))
                (file-name (git-file-name name version))
                (sha256
                 (base32
                  "0inpmyb6mhrzr0g309d6clkc99lddqdvyf9xajz0igvgp9pvgpza"))))
      (arguments
       (substitute-keyword-arguments (package-arguments pjproject)
         ((#:phases phases '%standard-phases)
          #~(modify-phases #$phases
              (add-after 'unpack 'apply-patches
                (lambda _
                  (#$jami-apply-custom-patches
                   #:dep-name "pjproject"
                   #:patches
                   ;; This adds a config_site.h configuration file that sets
                   ;; constants such as PJ_ICE_MAX_CAND that cannot be
                   ;; configured at build time.
                   '("0009-add-config-site")))))))))))

;; The following variables are configure flags used by ffmpeg-jami.  They're
;; from the jami-project/daemon/contrib/src/ffmpeg/rules.mak file.  We try to
;; keep it as close to the official Jami package as possible, to provide all
;; the codecs and extra features that are expected (see:
;; https://review.jami.net/plugins/gitiles/ring-daemon/+/refs/heads/master/contrib/src/ffmpeg/rules.mak)
(define %ffmpeg-default-configure-flags
  '("--disable-everything"
    "--enable-zlib"
    "--enable-gpl"
    "--enable-swscale"
    "--enable-bsfs"
    "--disable-filters"
    "--disable-programs"
    "--disable-postproc"
    "--disable-protocols"
    "--enable-protocol=crypto"
    "--enable-protocol=file"
    "--enable-protocol=rtp"
    "--enable-protocol=srtp"
    "--enable-protocol=tcp"
    "--enable-protocol=udp"
    "--enable-protocol=unix"
    "--enable-protocol=pipe"

    ;; Enable muxers/demuxers.
    "--disable-demuxers"
    "--disable-muxers"
    "--enable-muxer=rtp"
    "--enable-muxer=g722"
    "--enable-muxer=g726"
    "--enable-muxer=g726le"
    "--enable-muxer=h263"
    "--enable-muxer=h264"
    "--enable-muxer=hevc"
    "--enable-muxer=matroska"
    "--enable-muxer=webm"
    "--enable-muxer=ogg"
    "--enable-muxer=pcm_s16be"
    "--enable-muxer=pcm_s16le"
    "--enable-demuxer=rtp"
    "--enable-demuxer=mjpeg"
    "--enable-demuxer=mjpeg_2000"
    "--enable-demuxer=mpegvideo"
    "--enable-demuxer=gif"
    "--enable-demuxer=image_jpeg_pipe"
    "--enable-demuxer=image_png_pipe"
    "--enable-demuxer=image_webp_pipe"
    "--enable-demuxer=matroska"
    "--enable-demuxer=m4v"
    "--enable-demuxer=mp3"
    "--enable-demuxer=ogg"
    "--enable-demuxer=flac"
    "--enable-demuxer=wav"
    "--enable-demuxer=ac3"
    "--enable-demuxer=g722"
    "--enable-demuxer=g723_1"
    "--enable-demuxer=g726"
    "--enable-demuxer=g726le"
    "--enable-demuxer=pcm_mulaw"
    "--enable-demuxer=pcm_alaw"
    "--enable-demuxer=pcm_s16be"
    "--enable-demuxer=pcm_s16le"
    "--enable-demuxer=h263"
    "--enable-demuxer=h264"
    "--enable-demuxer=hevc"

    ;; Enable parsers.
    "--enable-parser=h263"
    "--enable-parser=h264"
    "--enable-parser=hevc"
    "--enable-parser=mpeg4video"
    "--enable-parser=vp8"
    "--enable-parser=vp9"
    "--enable-parser=opus"

    ;; Encoders/decoders.
    "--enable-encoder=adpcm_g722"
    "--enable-decoder=adpcm_g722"
    "--enable-encoder=adpcm_g726"
    "--enable-decoder=adpcm_g726"
    "--enable-encoder=adpcm_g726le"
    "--enable-decoder=adpcm_g726le"
    "--enable-decoder=g729"
    "--enable-encoder=g723_1"
    "--enable-decoder=g723_1"
    "--enable-encoder=rawvideo"
    "--enable-decoder=rawvideo"
    "--enable-encoder=libx264"
    "--enable-decoder=h264"
    "--enable-encoder=pcm_alaw"
    "--enable-decoder=pcm_alaw"
    "--enable-encoder=pcm_mulaw"
    "--enable-decoder=pcm_mulaw"
    "--enable-encoder=mpeg4"
    "--enable-decoder=mpeg4"
    "--enable-encoder=libvpx_vp8"
    "--enable-decoder=vp8"
    "--enable-decoder=vp9"
    "--enable-encoder=h263"
    "--enable-encoder=h263p"
    "--enable-decoder=h263"
    "--enable-encoder=mjpeg"
    "--enable-decoder=mjpeg"
    "--enable-decoder=mjpegb"
    "--enable-libspeex"
    "--enable-libopus"
    "--enable-libvpx"
    "--enable-libx264"
    "--enable-encoder=libspeex"
    "--enable-decoder=libspeex"
    "--enable-encoder=libopus"
    "--enable-decoder=libopus"

    ;; Decoders for ringtones and audio streaming.
    "--enable-decoder=flac"
    "--enable-decoder=vorbis"
    "--enable-decoder=aac"
    "--enable-decoder=ac3"
    "--enable-decoder=eac3"
    "--enable-decoder=mp3"
    "--enable-decoder=pcm_u24be"
    "--enable-decoder=pcm_u24le"
    "--enable-decoder=pcm_u32be"
    "--enable-decoder=pcm_u32le"
    "--enable-decoder=pcm_u8"
    "--enable-decoder=pcm_f16le"
    "--enable-decoder=pcm_f24le"
    "--enable-decoder=pcm_f32be"
    "--enable-decoder=pcm_f32le"
    "--enable-decoder=pcm_f64be"
    "--enable-decoder=pcm_f64le"
    "--enable-decoder=pcm_s16be"
    "--enable-decoder=pcm_s16be_planar"
    "--enable-decoder=pcm_s16le"
    "--enable-decoder=pcm_s16le_planar"
    "--enable-decoder=pcm_s24be"
    "--enable-decoder=pcm_s24le"
    "--enable-decoder=pcm_s24le_planar"
    "--enable-decoder=pcm_s32be"
    "--enable-decoder=pcm_s32le"
    "--enable-decoder=pcm_s32le_planar"
    "--enable-decoder=pcm_s64be"
    "--enable-decoder=pcm_s64le"
    "--enable-decoder=pcm_s8"
    "--enable-decoder=pcm_s8_planar"
    "--enable-decoder=pcm_u16be"
    "--enable-decoder=pcm_u16le"

    ;; Encoders/decoders for images.
    "--enable-encoder=gif"
    "--enable-decoder=gif"
    "--enable-encoder=jpegls"
    "--enable-decoder=jpegls"
    "--enable-encoder=ljpeg"
    "--enable-decoder=jpeg2000"
    "--enable-encoder=png"
    "--enable-decoder=png"
    "--enable-encoder=bmp"
    "--enable-decoder=bmp"
    "--enable-encoder=tiff"
    "--enable-decoder=tiff"

    ;; Filters.
    "--enable-filter=scale"
    "--enable-filter=overlay"
    "--enable-filter=amix"
    "--enable-filter=amerge"
    "--enable-filter=aresample"
    "--enable-filter=format"
    "--enable-filter=aformat"
    "--enable-filter=fps"
    "--enable-filter=transpose"
    "--enable-filter=pad"))

(define %ffmpeg-linux-configure-flags
  '("--enable-pic"
    "--extra-cxxflags=-fPIC"
    "--extra-cflags=-fPIC"
    "--target-os=linux"
    "--enable-indev=v4l2"
    "--enable-indev=xcbgrab"
    "--enable-vdpau"
    "--enable-hwaccel=h264_vdpau"
    "--enable-hwaccel=mpeg4_vdpau"
    "--enable-vaapi"
    "--enable-hwaccel=h264_vaapi"
    "--enable-hwaccel=mpeg4_vaapi"
    "--enable-hwaccel=h263_vaapi"
    "--enable-hwaccel=vp8_vaapi"
    "--enable-hwaccel=mjpeg_vaapi"
    "--enable-hwaccel=hevc_vaapi"
    "--enable-encoder=h264_vaapi"
    "--enable-encoder=vp8_vaapi"
    "--enable-encoder=mjpeg_vaapi"
    "--enable-encoder=hevc_vaapi"))

;; ffnvcodec is not supported on ARM; enable it only for the i386 and x86_64
;; architectures.
(define %ffmpeg-linux-x86-configure-flags
  '("--arch=x86"
    "--enable-cuvid"
    "--enable-ffnvcodec"
    "--enable-nvdec"
    "--enable-nvenc"
    "--enable-hwaccel=h264_nvdec"
    "--enable-hwaccel=hevc_nvdec"
    "--enable-hwaccel=vp8_nvdec"
    "--enable-hwaccel=mjpeg_nvdec"
    "--enable-encoder=h264_nvenc"
    "--enable-encoder=hevc_nvenc"))

;; This procedure composes the configure flags list for ffmpeg-jami.
(define (ffmpeg-compose-configure-flags)
  (define (system=? s)
    (string-prefix? s (%current-system)))

  `(,@%ffmpeg-default-configure-flags
    ,@(if (string-contains (%current-system) "linux")
          (if (or (system=? "i686")
                  (system=? "x86_64"))
              (append %ffmpeg-linux-configure-flags
                      %ffmpeg-linux-x86-configure-flags)
              %ffmpeg-linux-configure-flags)
          '())))

(define-public ffmpeg-jami
  (package/inherit ffmpeg
    (name "ffmpeg-jami")
    (arguments
     (substitute-keyword-arguments (package-arguments ffmpeg)
       ((#:tests? _ #f)
        ;; The "rtp_ext_abs_send_time" patch causes the 'lavf-mov_rtphint'
        ;; test to fail (see:
        ;; https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/685).
        ;; TODO: Try to disable just this test.
        #f)
       ((#:configure-flags '())
        (ffmpeg-compose-configure-flags))
       ((#:phases phases)
        #~(modify-phases #$phases
            (add-after 'unpack 'apply-patches
              (lambda _
                ;; These patches come from:
                ;; "jami-project/daemon/contrib/src/ffmpeg/rules.mak".
                (#$jami-apply-custom-patches
                 #:dep-name "ffmpeg"
                 #:patches '("remove-mjpeg-log"
                             "change-RTCP-ratio"
                             "rtp_ext_abs_send_time"
                             "libopusdec-enable-FEC"
                             "libopusenc-reload-packet-loss-at-encode"
                             "screen-sharing-x11-fix"))))))))))

(define-public libjami
  (package
    (name "libjami")
    (version %jami-version)
    (source %jami-sources)
    (outputs '("out" "debug"))
    (build-system gnu-build-system)
    (arguments
     (list
      ;; The test suite fails to link when building libjami as a shared
      ;; library: "sip_account/sip_empty_offer.cpp:228:1: error: no
      ;; declaration matches ‘void
      ;; jami::test::SipEmptyOfferTest::onCallStateChange(const string&, const
      ;; string&, jami::test::CallData&)’".
      #:tests? #f
      ;; The agent links the daemon binary with libguile, which enables the
      ;; execution of test plans described in Scheme.  It may be useful in
      ;; user scripts too, until more general purpose Scheme bindings are made
      ;; available (see: test/agent/README.md).
      #:configure-flags #~(list "--enable-agent"
                                "--enable-debug"
                                ;; Disable static libraries to avoid
                                ;; installing a 98 MiB archive.
                                "--disable-static")
      #:make-flags #~(list "V=1")       ;build verbosely
      #:phases
      #~(modify-phases %standard-phases
          (add-after 'unpack 'change-directory/maybe
            (lambda _
              ;; Allow building from the tarball or a git checkout.
              (false-if-exception (chdir "daemon")))))))
    (inputs
     (list alsa-lib
           asio
           dbus-c++
           eudev
           ffmpeg-jami
           guile-3.0
           jack-1
           jsoncpp
           libarchive
           libgit2
           libnatpmp
           libsecp256k1
           libupnp
           opendht
           openssl
           pjproject-jami
           pulseaudio
           speex
           speexdsp
           webrtc-audio-processing
           yaml-cpp))
    (native-inputs
     (list autoconf
           automake
           cppunit
           libtool
           perl                         ;to generate manpages with pod2man
           pkg-config
           which))
    (synopsis "Jami core library and daemon")
    (description "This package provides a library and daemon implementing the
Jami core functionality.  Jami is a secure and distributed voice, video and
chat communication platform that requires no centralized server and leaves the
power of privacy in the hands of the user.  It supports the SIP and IAX
protocols, as well as decentralized calling using P2P-DHT.")
    (home-page "https://jami.net/")
    (license license:gpl3+)))

;;; Remove when 2023 comes.
(define-public libring
  (deprecated-package "libring" libjami))

(define-public jami
  (package
    (name "jami")
    (version %jami-version)
    (source %jami-sources)
    (build-system qt-build-system)
    (outputs '("out" "debug"))
    (arguments
     (list
      #:qtbase qtbase
      #:tests? #f                       ;see comment below
      #:configure-flags
      ;; The test suite fails to build with:
      ;; "../../../client-qt/src/app/utils.h:29:10: fatal error: QLabel: No
      ;; such file or directory".
      #~(list "-DENABLE_TESTS=OFF"
              "-DWITH_WEBENGINE=OFF" ;reduce transitive closure size by 450 MiB
              ;; Use libwrap to link directly to libjami instead of
              ;; communicating via D-Bus to jamid, the Jami daemon.
              "-DENABLE_LIBWRAP=ON"
              (string-append "-DLIBJAMI_XML_INTERFACES_DIR="
                             #$(this-package-input "libjami")
                             "/share/dbus-1/interfaces")
              (string-append "-DLIBJAMI_INCLUDE_DIR="
                             #$(this-package-input "libjami") "/include/jami"))
      #:phases
      #~(modify-phases %standard-phases
          (add-after 'unpack 'change-directory/maybe
            (lambda _
              ;; Allow building from the tarball or a git checkout.
              (false-if-exception (chdir "client-qt"))))
          (add-after 'change-directory/maybe 'fix-version-string
            (lambda _
              (substitute* "src/app/version.h"
                (("VERSION_STRING")
                 "BUILD_DATE")          ;to avoid a redefinition error
                (("// clang-format on.*" anchor)
                 (string-append "const char VERSION_STRING[] = \""
                                #$version "\";\n"
                                anchor)))))
          (add-after 'change-directory/maybe 'patch-source
            (lambda _
              (substitute* "src/libclient/CMakeLists.txt"
                ;; Fix submitted upstream (see:
                ;; https://review.jami.net/c/jami-client-qt/+/21830).
                (("target_link_libraries\\(\\$\\{LIBCLIENT_NAME} qtwrapper.*" all)
                 (string-append
                  all "  target_link_libraries(${LIBCLIENT_NAME} avutil)\n"))))))))
    (native-inputs
     (list googletest
           pkg-config
           python
           qttools
           doxygen
           graphviz
           vulkan-headers))
    (inputs
     (list ffmpeg-jami
           libjami
           libnotify
           libxkbcommon
           network-manager
           qrencode
           qt5compat
           qtdeclarative
           qtmultimedia
           qtnetworkauth
           qtpositioning
           qtsvg
           vulkan-loader))
    (home-page "https://jami.net")
    (synopsis "Qt Jami client")
    (description "This package provides the Jami Qt client.  Jami is a secure
and distributed voice, video and chat communication platform that requires no
centralized server and leaves the power of privacy in the hands of the user.
It supports the SIP and IAX protocols, as well as decentralized calling using
P2P-DHT.")
    (license license:gpl3+)))

;;; Remove when 2023 comes.
(define-public jami-gnome
  (deprecated-package "jami-gnome" jami))

;;; Remove when 2023 comes.
(define-public jami-qt
  (deprecated-package "jami-qt" jami))
hub.com/paultag/fbautostart.git") (commit version))) (file-name (string-append name "-" version "-checkout")) (sha256 (base32 "13h6j5khi5axqhflzhayzgvyhxylmk5vsgin235ji440mzd516gz")))) (build-system gnu-build-system) (native-inputs (list autoconf automake)) (synopsis "XDG autostarter for Fluxbox window manager") (description "This package provides an autostarter complaint with the XDG Autostart specification.") (home-page "https://github.com/paultag/fbautostart") (license license:expat))) (define-public fnott (package (name "fnott") (version "1.3.0") (source (origin (method git-fetch) (uri (git-reference (url "https://codeberg.org/dnkl/fnott") (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "00zg03nz79kqcsnwmm22friawhvl05f93yxpvqmy5wvggx9hrlz8")))) (build-system meson-build-system) (arguments `(#:build-type "release")) (native-inputs (list pkg-config wayland-protocols tllist scdoc)) (inputs (list wlroots wayland fcft dbus libpng)) (home-page "https://codeberg.org/dnkl/fnott") (synopsis "Keyboard driven and lightweight Wayland notification daemon") (description "Fnott is a keyboard driven and lightweight notification daemon for wlroots-based Wayland compositors.") (license license:expat))) (define-public awesome (package (name "awesome") (version "4.3") (source (origin (method url-fetch) (uri (string-append "https://github.com/awesomeWM/awesome-releases/raw/master/" "awesome-" version ".tar.xz")) (sha256 (base32 "0lqpw401mkkmp9wgbvrmm45bqq2j9357l4irwdqv6l1305pls9kq")) (modules '((guix build utils) (srfi srfi-19))) (snippet '(begin ;; Remove non-reproducible timestamp and use the date of ;; the source file instead. (substitute* "common/version.c" (("__DATE__ \" \" __TIME__") (date->string (time-utc->date (make-time time-utc 0 (stat:mtime (stat "awesome.c")))) "\"~c\""))) #t)) (patches (search-patches "awesome-reproducible-png.patch" "awesome-4.3-fno-common.patch")))) (build-system cmake-build-system) (native-inputs (list asciidoc docbook-xsl doxygen gperf imagemagick libxml2 ;for XML_CATALOG_FILES lua-ldoc pkg-config xmlto)) (inputs (list cairo dbus gdk-pixbuf glib gobject-introspection imlib2 libev libxcb libxcursor libxdg-basedir libxkbcommon lua lua-lgi pango startup-notification xcb-util xcb-util-cursor xcb-util-image xcb-util-keysyms xcb-util-renderutil xcb-util-xrm xcb-util-wm)) (arguments `(#:modules ((guix build cmake-build-system) (guix build utils) (ice-9 match)) ;; Let compression happen in our 'compress-documentation' phase ;; so that '--no-name' is used, which removes timestamps from ;; gzip output. #:configure-flags '("-DCOMPRESS_MANPAGES=off") ;; Building awesome in its source directory is no longer ;; supported. #:out-of-source? #t #:phases (modify-phases %standard-phases (add-before 'configure 'set-paths (lambda* (#:key inputs #:allow-other-keys) (substitute* "lib/awful/completion.lua" (("/usr/bin/env") "")) ;; The build process needs to load Cairo dynamically. (let* ((cairo (string-append (assoc-ref inputs "cairo") "/lib")) (lua-version ,(version-major+minor (package-version lua))) (lua-dependencies (filter (match-lambda ((label . _) (string-prefix? "lua-" label))) inputs)) (lua-path (string-join (map (match-lambda ((_ . dir) (string-append dir "/share/lua/" lua-version "/?.lua;" dir "/share/lua/" lua-version "/?/?.lua"))) lua-dependencies) ";")) (lua-cpath (string-join (map (match-lambda ((_ . dir) (string-append dir "/lib/lua/" lua-version "/?.so;" dir "/lib/lua/" lua-version "/?/?.so"))) lua-dependencies) ";"))) (setenv "LD_LIBRARY_PATH" cairo) (setenv "LUA_PATH" (string-append "?.lua;" lua-path)) (setenv "LUA_CPATH" lua-cpath) (setenv "HOME" (getcwd)) (setenv "XDG_CACHE_HOME" (getcwd))))) (replace 'check (lambda _ ;; There aren't any tests, so just make sure the binary ;; gets built and can be run successfully. (invoke "../build/awesome" "-v"))) (add-after 'install 'patch-session-file (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (awesome (string-append out "/bin/awesome"))) (substitute* (string-append out "/share/xsessions/awesome.desktop") (("Exec=awesome") (string-append "Exec=" awesome))) #t))) (add-after 'install 'wrap (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((awesome (assoc-ref outputs "out")) (cairo (string-append (assoc-ref inputs "cairo") "/lib")) (lua-version ,(version-major+minor (package-version lua))) (lua-lgi (assoc-ref inputs "lua-lgi"))) (wrap-program (string-append awesome "/bin/awesome") `("LUA_PATH" ";" suffix (,(format #f "~a/share/lua/~a/?.lua" lua-lgi lua-version))) `("LUA_CPATH" ";" suffix (,(format #f "~a/lib/lua/~a/?.so" lua-lgi lua-version))) `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH"))) `("LD_LIBRARY_PATH" suffix (,cairo))) #t)))))) (home-page "https://awesomewm.org/") (synopsis "Highly configurable window manager") (description "Awesome has been designed as a framework window manager. It is fast, small, dynamic and extensible using the Lua programming language.") (license license:gpl2+))) (define-public menumaker (package (name "menumaker") (version "0.99.14") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/menumaker/" "menumaker-" version ".tar.gz")) (sha256 (base32 "0nnnc1awvhq5pplvclap3ha61g9209bca6zqgpsm1f53fq75vs8i")))) (build-system gnu-build-system) (inputs (list python)) (synopsis "Heuristics-driven menu generator") (description "MenuMaker is a menu generation utility for a number of X window managers and desktop environments. It is capable of finding lots of installed programs and generating a root menu consistent across all supported window managers, so one will get (almost) the same menu in all of them. Currently supported window managers include: @enumerate @item BlackBox @item Deskmenu @item FluxBox @item IceWM @item OpenBox @item PekWM @item WindowMaker @item XFCE @end enumerate\n") (home-page "https://menumaker.sourceforge.net/") (license license:bsd-2))) (define-public keybinder (package (name "keybinder") (version "0.3.2") (source (origin (method url-fetch) (uri (string-append "https://github.com/kupferlauncher/keybinder" "/releases/download/" name "-3.0-v" version "/" name "-3.0-" version ".tar.gz")) (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 "0830ihwnalw59pp1xzrp37dn58n8vwb8zasnm4a1h81v3x7dxqz6")))) (build-system gnu-build-system) (inputs (list gtk+ gobject-introspection)) (native-inputs (list gtk-doc pkg-config)) (synopsis "Library for registering global keyboard shortcuts, Gtk3 version") (description "Keybinder is a library for registering global keyboard shortcuts. Keybinder works with GTK-based applications using the X Window System.") (home-page "https://github.com/kupferlauncher/keybinder") (license license:x11))) (define-public keybinder-3.0 (deprecated-package "keybinder-3.0" keybinder)) (define-public spectrwm (package (name "spectrwm") (version "3.2.0") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/conformal/spectrwm") (commit (string-append "SPECTRWM_" (string-join (string-split version #\.) "_"))))) (file-name (git-file-name name version)) (sha256 (base32 "1dfqy5f0s1nv6rqkz9lj006vypmp4rwxd5vczfk3ndzqgnh19kw6")))) (build-system gnu-build-system) (arguments `(#:make-flags (let ((pkg-config (lambda (flag) (string-append "$(shell pkg-config " flag " " "xft fontconfig x11 libpng)")))) (list "CC=gcc" (string-append "PREFIX=" %output) (string-append "INCS=-I. " (pkg-config "--cflags")) (string-append "LIBS=" (pkg-config "--libs") " -lm"))) #:tests? #f ;no test suite #:phases (modify-phases %standard-phases (add-before 'build 'change-dir (lambda _ (chdir "linux") #t)) (add-after 'change-dir 'patch-makefile (lambda _ (substitute* "Makefile" (("-g") "")))) (delete 'configure)))) ;no 'configure' exists (inputs `(("freetype" ,freetype) ("fontconfig" ,fontconfig) ("libx11" ,libx11) ("libxcursor" ,libxcursor) ("libxrandr" ,libxrandr) ("libxtst" ,libxtst) ("libxft" ,libxft) ("xcb-util" ,xcb-util) ("xcb-util-wm" ,xcb-util-wm) ("xcb-util-keysyms" ,xcb-util-keysyms))) (native-inputs (list libxt pkg-config)) (synopsis "Minimalistic automatic tiling window manager") (description "Spectrwm is a small dynamic tiling and reparenting window manager for X11. It is inspired by Xmonad and dwm. Its major features include: @itemize @item Navigation anywhere on all screens with either the keyboard or mouse @item Customizable status bar @item Restartable without losing state @item Quick launch menu @item Many screen layouts possible with a few simple key strokes @item Move/resize floating windows @item Extended Window Manager Hints (@dfn{EWMH}) support @item Configurable tiling @item Adjustable tile gap allows for a true one pixel border @item Customizable colors and border width @end itemize\n") (home-page "https://github.com/conformal/spectrwm") (license license:isc))) (define-public cwm (package (name "cwm") (version "7.1") (source (origin (method url-fetch) (uri (string-append "https://leahneukirchen.org/releases/cwm-" version ".tar.gz")) (sha256 (base32 "145xjwam11194w2irsvs4z0xgn0jdijxfmx67gqd1n0j8g5wan2a")))) (build-system gnu-build-system) (arguments (list #:tests? #f #:make-flags #~(list (string-append "CC=" #$(cc-for-target)) (string-append "PREFIX=" #$output)) #:phases #~(modify-phases %standard-phases (delete 'configure) (add-after 'build 'install-xsession (lambda _ ;; Add a .desktop file to xsessions. (let ((xsessions (string-append #$output "/share/xsessions"))) (mkdir-p xsessions) (make-desktop-entry-file (string-append xsessions "/cwm.desktop") #:name "cwm" #:exec (string-append #$output "/bin/cwm") #:try-exec (string-append #$output "/bin/cwm") #:comment '((#f "OpenBSD Calm Window Manager fork"))))))))) (native-inputs (list bison pkg-config)) (inputs (list libxrandr libxft libxinerama)) (home-page "https://github.com/leahneukirchen/cwm") (synopsis "OpenBSD fork of the Calm Window Manager") (description "Cwm is a stacking window manager for X11. It is an OpenBSD project derived from the original Calm Window Manager.") (license license:isc))) (define-public dwl (package (name "dwl") (version "0.3.1") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/djpohly/dwl") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0952kajc60ijy6qz14y6s5n7dyyf14ndzrhs4ynxj97k76742z2l")))) (build-system gnu-build-system) (arguments `(#:tests? #f ; no tests #:make-flags (list (string-append "CC=" ,(cc-for-target)) (string-append "PREFIX=" (assoc-ref %outputs "out"))) #:phases (modify-phases %standard-phases (delete 'configure)))) ; no configure (native-inputs (list pkg-config)) (inputs (list wlroots)) (home-page "https://github.com/djpohly/dwl") (synopsis "Dynamic window manager for Wayland") (description "@command{dwl} is a compact, hackable compositor for Wayland based on wlroots. It is intended to fill the same space in the Wayland world that dwm does in X11, primarily in terms of philosophy, and secondarily in terms of functionality. Like dwm, dwl is easy to understand and hack on, due to a limited size and a few external dependencies. It is configurable via @file{config.h}.") ;; LICENSE LICENSE.dwm LICENSE.tinywl (license (list license:gpl3+ license:expat license:cc0)))) (define-public nitrogen (package (name "nitrogen") (version "1.6.1") (source (origin (method url-fetch) (uri (string-append "http://github.com/l3ib/nitrogen/" "releases/download/" version "/" name "-" version ".tar.gz")) (sha256 (base32 "0zc3fl1mbhq0iyndy4ysmy8vv5c7xwf54rbgamzfhfvsgdq160pl")))) (build-system gnu-build-system) (inputs (list gtk+-2 gtkmm-2 glib glibmm)) (native-inputs (list pkg-config)) (home-page "http://projects.l3ib.org/nitrogen/") (synopsis "Background browser and setter for X windows") (description "This package is a background browser and setter for X windows. It's features are: @itemize @item Multihead and Xinerama aware @item Recall mode to used via startup script @item Uses freedesktop.org standard for thumbnails @item Can set GNOME background @item Command lie set modes for script use @item Inotify monitoring of browse directory @item Lazy loading of thumbnails - conserves memory @item \"Automatic\" set mode - determines best mode to set an image based on its size @item Display preview images in a tiled icon layout @end itemize") (license license:gpl2+))) (define-public polybar (package (name "polybar") (version "3.6.3") (source (origin (method url-fetch) (uri (string-append "https://github.com/polybar/polybar/releases/" "download/" version "/polybar-" version ".tar.gz")) (sha256 (base32 "19azx5dpfyfh0pv4q2fcrf4p7a0pc5d13m7lnv3qy8376mbmhmzj")))) (build-system cmake-build-system) (arguments ;; Test is disabled because it requires downloading googletest from the ;; Internet. (list #:tests? #f #:phases #~(modify-phases %standard-phases ;; Make polybar find its default configuration file in the ;; store. (add-after 'unpack 'patch-config-path (lambda _ (substitute* "CMakeLists.txt" (("/etc") (string-append #$output "/etc"))) (substitute* "src/utils/file.cpp" (("\"/etc\"") (string-append "\"" #$output "/etc\"")))))))) (inputs (list alsa-lib cairo i3-wm jsoncpp libmpdclient libnl libuv libxcb pulseaudio xcb-proto xcb-util xcb-util-cursor xcb-util-image xcb-util-wm xcb-util-xrm)) (native-inputs (list pkg-config python-sphinx ; for the manual python)) ; xcb-proto depends on python 3 (home-page "https://polybar.github.io/") (synopsis "Fast and easy-to-use status bar") (description "Polybar aims to help users build beautiful and highly customizable status bars for their desktop environment. It has built-in functionality to display information about the most commonly used services.") (license license:expat))) (define-public wlroots (package (name "wlroots") (version "0.16.1") (source (origin (method git-fetch) (uri (git-reference (url "https://gitlab.freedesktop.org/wlroots/wlroots") (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "11kcica9waj1a1xgbi12gif9z5z0b4xzycbcgawbgdmj77pws8sk")))) (build-system meson-build-system) (arguments `(#:phases (modify-phases %standard-phases (add-before 'configure 'hardcode-paths (lambda* (#:key inputs #:allow-other-keys) (substitute* "xwayland/server.c" (("Xwayland") (string-append (assoc-ref inputs "xorg-server-xwayland") "/bin/Xwayland"))) #t)) (add-before 'configure 'fix-meson-file (lambda* (#:key inputs #:allow-other-keys) (substitute* "backend/drm/meson.build" (("/usr/share/hwdata/pnp.ids") (string-append (assoc-ref inputs "hwdata") "/share/hwdata/pnp.ids")))))))) (propagated-inputs (list ;; As required by wlroots.pc. eudev libinput-minimal libxkbcommon mesa pixman libseat wayland wayland-protocols xcb-util-errors xcb-util-wm xorg-server-xwayland)) (native-inputs (list `(,hwdata "pnp") pkg-config)) (home-page "https://github.com/swaywm/wlroots") (synopsis "Pluggable, composable, unopinionated modules for building a Wayland compositor") (description "wlroots is a set of pluggable, composable, unopinionated modules for building a Wayland compositor.") (license license:expat))) ; MIT license (define-public sway (package (name "sway") (version "1.8") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/swaywm/sway") (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "17dqr2lkmcv2ssp7vky27zw599i77whpb1aqh1s6kl8a8vkrz6mg")))) (build-system meson-build-system) (arguments `(;; elogind is propagated by wlroots -> libseat ;; and would otherwise shadow basu. #:configure-flags '("-Dsd-bus-provider=basu") #:phases (modify-phases %standard-phases (add-before 'configure 'hardcode-paths (lambda* (#:key inputs #:allow-other-keys) ;; Hardcode path to swaybg. (substitute* "sway/config.c" (("strdup..swaybg..") (string-append "strdup(\"" (assoc-ref inputs "swaybg") "/bin/swaybg\")"))) ;; Hardcode path to scdoc. (substitute* "meson.build" (("scdoc.get_pkgconfig_variable..scdoc..") (string-append "'" (assoc-ref inputs "scdoc") "/bin/scdoc'"))) #t))))) (inputs (list basu cairo gdk-pixbuf json-c libevdev libinput-minimal libxkbcommon pango pcre2 swaybg wayland wlroots)) (native-inputs (list linux-pam mesa pkg-config scdoc wayland-protocols)) (home-page "https://github.com/swaywm/sway") (synopsis "Wayland compositor compatible with i3") (description "Sway is a i3-compatible Wayland compositor.") (license license:expat))) (define-public swayidle (package (name "swayidle") (version "1.7.1") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/swaywm/swayidle") (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "06iq12p4438d6bv3jlqsf01wjaxrzlnj1bnicn41kad563aq41xl")))) (build-system meson-build-system) (arguments `(#:configure-flags '("-Dlogind-provider=elogind"))) (inputs (list elogind wayland)) (native-inputs (list pkg-config scdoc wayland-protocols)) (home-page "https://github.com/swaywm/swayidle") (synopsis "Idle management daemon for Wayland compositors") (description "Swayidle is a idle management daemon for Wayland compositors.") (license license:expat))) ; MIT license (define-public swaylock (package (name "swaylock") (version "1.6") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/swaywm/swaylock") (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "1ihdvx6gdinzabvnazjmkk3ajrp7ngg0jzfwcjqn4hcjv64s0lam")))) (build-system meson-build-system) (inputs (list cairo gdk-pixbuf libxkbcommon ;("linux-pam" ,linux-pam) ; FIXME: Doesn't work. wayland)) (native-inputs (list pango pkg-config scdoc wayland-protocols)) (home-page "https://github.com/swaywm/sway") (synopsis "Screen locking utility for Wayland compositors") (description "Swaylock is a screen locking utility for Wayland compositors.") (license license:expat))) ; MIT license (define-public swaylock-effects (package (inherit swaylock) (name "swaylock-effects") (version "1.6.10") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/jirutka/swaylock-effects") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "1d8ri7bzwfr53ybgf23acz57wyhcl2f1nqprcda1v9bzfgsqfk2n")))) (arguments (list #:configure-flags #~'("-Dsse=false"))) (synopsis "Screen locking utility for Wayland compositors with effects") (description "@code{Swaylock-effects} is a fork of swaylock with additional features, such as the ability to take a screenshot as the background image, display a clock or apply image manipulation techniques to the background image.") (home-page "https://github.com/jirutka/swaylock-effects"))) (define-public swaybg (package (name "swaybg") (version "1.0") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/swaywm/swaybg") (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "1lmqz5bmig90gq2m7lwf02d2g7z4hzf8fhqz78c8vk92c6p4xwbc")))) (build-system meson-build-system) (inputs (list cairo gdk-pixbuf wayland)) (native-inputs (list pkg-config scdoc wayland-protocols)) (home-page "https://github.com/swaywm/sway") (synopsis "Screen wallpaper utility for Wayland compositors") (description "Swaybg is a wallpaper utility for Wayland compositors.") (license license:expat))) ; MIT license (define-public swaynotificationcenter (package (name "swaynotificationcenter") (version "0.7.3") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/ErikReider/SwayNotificationCenter") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "1xvr5m5sqznr3dd512i5pk0d56v7n0ywdcy6rnz85vbf2k7b6kj5")))) (build-system meson-build-system) (arguments (list #:configure-flags #~(list "-Dsystemd-service=false"))) (native-inputs (list `(,glib "bin") gobject-introspection pkg-config python-minimal scdoc vala)) (inputs (list json-glib glib gtk+ gtk-layer-shell libhandy wayland-protocols)) (synopsis "Notification daemon with a graphical interface") (description "This package provides a notification daemon for the Sway Wayland compository, supporting the following featuers: @itemize @item Keyboard shortcuts @item Notification body markup with image support @item A panel to view previous notifications @item Show album art for notifications like Spotify @item Do not disturb @item Click notification to execute default action @item Show alternative notification actions @item Customization through a CSS file @item Trackpad/mouse gesture to close notification @item The same features as any other basic notification daemon @item Basic configuration through a JSON config file @item Hot-reload config through swaync-client @end itemize") (home-page "https://github.com/ErikReider/SwayNotificationCenter") (license license:expat))) (define-public waybar (package (name "waybar") (version "0.9.17") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/Alexays/Waybar") (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "1709ck7931804mhirnki03cvx60c4dxg668fyz6jpzy8djg5xlxi")))) (build-system meson-build-system) (inputs (list date fmt gtk-layer-shell gtkmm-3 jsoncpp libdbusmenu libinput-minimal libmpdclient libnl libxml2 playerctl pulseaudio spdlog wayland)) (native-inputs (list `(,glib "bin") pkg-config scdoc wayland-protocols)) (home-page "https://github.com/Alexays/Waybar") (synopsis "Wayland bar for Sway and Wlroots based compositors") (description "Waybar is a highly customisable Wayland bar for Sway and Wlroots based compositors.") (license license:expat))) ; MIT license (define-public waybar-cpu-histogram (package (name "waybar-cpu-histogram") (version "0.4.2") (source (origin (method git-fetch) (uri (git-reference (url "https://git.sr.ht/~plattfot/waybar-cpu-histogram") (commit (string-append version)))) (sha256 (base32 "001pyf1jdmf2478plnggd7dkfi688qwi89db2jwfp4zza3640na6")) (file-name (git-file-name name version)))) (build-system meson-build-system) (native-inputs (list pkg-config)) (inputs (list jsoncpp fmt)) (synopsis "CPU histogram for waybar") (description "Custom module for waybar to show CPU usage as a histogram. A compact way to see how many cores are active, compared to having a bar for each core/thread.") (home-page "https://github.com/plattfot/cpu-histogram/") (license license:expat))) (define-public waybar-experimental (let ((base waybar)) (package/inherit base (name "waybar-experimental") (arguments (list #:configure-flags #~(list "-Dexperimental=true"))) (synopsis "Waybar with experimental features")))) (define-public wlr-randr (package (name "wlr-randr") (version "0.2.0") (source (origin (method git-fetch) (uri (git-reference (url "https://git.sr.ht/~emersion/wlr-randr") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0d44r4schknfc3g09y0kjbhl62zkynv6hi1z4zqc9ic5fhav3r15")))) (build-system meson-build-system) (inputs (list wayland)) (native-inputs (list pkg-config)) (home-page "https://sr.ht/~emersion/wlr-randr") (synopsis "Utility to manage Wayland compositor outputs") (description "wlr-randr is a utility to manage outputs of a Wayland compositor.") (license license:expat))) ; MIT license (define-public mako (package (name "mako") (version "1.7.1") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/emersion/mako") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0vpar1a7zafkd2plmyaackgba6fyg35s9zzyxmj8j7v2q5zxirgz")))) (build-system meson-build-system) (arguments (list #:phases #~(modify-phases %standard-phases (add-after 'unpack 'patch-makoctl (lambda* (#:key inputs #:allow-other-keys) (substitute* "makoctl" (("^BUSCTL=.*$") (string-append "BUSCTL=" (search-input-file inputs "bin/basuctl") "\n")) (("jq ") (string-append (search-input-file inputs "bin/jq") " ")))))))) (inputs (list basu cairo gdk-pixbuf jq pango wayland)) (native-inputs (list pkg-config scdoc wayland-protocols)) (home-page "https://wayland.emersion.fr/mako") (synopsis "Lightweight Wayland notification daemon") (description "Mako is a lightweight notification daemon for Wayland compositors that support the layer-shell protocol.") (license license:expat))) ; MIT license (define-public kanshi (package (name "kanshi") (version "1.3.0") (source (origin (method git-fetch) (uri (git-reference (url "https://git.sr.ht/~emersion/kanshi") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0sa8k74d24ijw6ml1yyy75dk763r2sbm7fgk033g5xnx28kd394j")))) (build-system meson-build-system) (inputs (list wayland)) (native-inputs (list pkg-config scdoc)) (home-page "https://wayland.emersion.fr/kanshi") (synopsis "Hotswappable output profiles for Wayland") (description "Kanshi allows you to define output profiles that are automatically enabled and disabled on hotplug. Kanshi can be used with Wayland compositors supporting the wlr-output-management protocol.") (license license:expat))) ; MIT license (define-public stumpwm (package (name "stumpwm") (version "22.11") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/stumpwm/stumpwm") (commit version))) (file-name (git-file-name "stumpwm" version)) (sha256 (base32 "1wxgddmkgmpml44a3m6bd8y529b13jz14apxxipmij10wzpgay6d")))) (build-system asdf-build-system/sbcl) (native-inputs (list sbcl-fiasco texinfo ;; To build the manual. autoconf automake)) (inputs (list sbcl-alexandria sbcl-cl-ppcre sbcl-clx)) (outputs '("out" "lib")) (arguments (list #:phases #~(modify-phases %standard-phases (add-after 'unpack 'fix-tests (lambda _ (substitute* "stumpwm-tests.asd" (("\"ALL-TESTS\"") "\"RUN-PACKAGE-TESTS\" :package")))) (add-after 'create-asdf-configuration 'build-program (lambda* (#:key outputs #:allow-other-keys) (build-program (string-append (assoc-ref outputs "out") "/bin/stumpwm") outputs #:entry-program '((stumpwm:stumpwm) 0)))) (add-after 'build-program 'create-desktop-file (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (xsessions (string-append out "/share/xsessions"))) (mkdir-p xsessions) (call-with-output-file (string-append xsessions "/stumpwm.desktop") (lambda (file) (format file "[Desktop Entry]~@ Name=stumpwm~@ Comment=The Stump Window Manager~@ Exec=~a/bin/stumpwm~@ TryExec=~@*~a/bin/stumpwm~@ Icon=~@ Type=Application~%" out)))))) (add-after 'install 'install-manual (lambda* (#:key (make-flags '()) outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (info (string-append out "/share/info"))) (invoke "./autogen.sh") (invoke "sh" "./configure" "SHELL=sh") (apply invoke "make" "stumpwm.info" make-flags) (install-file "stumpwm.info" info))))))) (synopsis "Window manager written in Common Lisp") (description "Stumpwm is a window manager written entirely in Common Lisp. It attempts to be highly customizable while relying entirely on the keyboard for input. These design decisions reflect the growing popularity of productive, customizable lisp based systems.") (home-page "https://github.com/stumpwm/stumpwm") (license license:gpl2+) (properties `((cl-source-variant . ,(delay cl-stumpwm)))))) (define-public cl-stumpwm (package (inherit (sbcl-package->cl-source-package stumpwm)) (name "cl-stumpwm"))) (define-public stumpwm+slynk (package (inherit stumpwm) (name "stumpwm-with-slynk") (outputs '("out")) (inputs `(("stumpwm" ,stumpwm "lib") ("slynk" ,sbcl-slynk))) (arguments (substitute-keyword-arguments (package-arguments stumpwm) ((#:phases phases) `(modify-phases ,phases (replace 'build-program (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (program (string-append out "/bin/stumpwm"))) (setenv "HOME" "/tmp") (build-program program outputs #:entry-program '((stumpwm:stumpwm) 0) #:dependencies '("stumpwm" "slynk") #:dependency-prefixes (map (lambda (input) (assoc-ref inputs input)) '("stumpwm" "slynk"))) #t))) (delete 'copy-source) (delete 'build) (delete 'check) (delete 'cleanup))))))) (define stumpwm-contrib (let ((commit "4613a956add7a17986a3b26c341229466cd13f1d") (revision "5")) (package (name "stumpwm-contrib") (version (git-version "0.0.1" revision commit)) ;no upstream release (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/stumpwm/stumpwm-contrib") (commit commit))) (file-name (git-file-name name version)) (sha256 (base32 "1g8h2vd5qsmaiz6ixlx9ykrv6a08izmkf0js18fvljvznpyhsznz")))) (build-system asdf-build-system/sbcl) (inputs `(("stumpwm" ,stumpwm "lib"))) (home-page "https://github.com/stumpwm/stumpwm-contrib") (synopsis "StumpWM extra modules") (description "This package provides extra modules for StumpWM.") (license (list license:gpl2+ license:gpl3+ license:bsd-2))))) (define-public stumpish (package (inherit stumpwm-contrib) (name "stumpish") (inputs (list bash rlwrap xprop)) (build-system trivial-build-system) (arguments '(#:modules ((guix build utils)) #:builder (begin (use-modules (guix build utils)) (copy-recursively (assoc-ref %build-inputs "source") ".") (chdir "util/stumpish") (substitute* "stumpish" (("rlwrap") (search-input-file %build-inputs "/bin/rlwrap")) (("xprop") (search-input-file %build-inputs "/bin/xprop")) (("/bin/sh") (search-input-file %build-inputs "/bin/bash"))) (install-file "stumpish" (string-append %output "/bin"))))) (home-page "https://github.com/stumpwm/stumpwm-contrib") (synopsis "StumpWM interactive shell") (description "This package provides a StumpWM interactive shell.") (license (list license:gpl2+ license:gpl3+ license:bsd-2)))) (define-public sbcl-stumpwm-pamixer (let ((commit "aa820533c80ea1af5a0e107cea25eaf34e69dc24") (revision "1")) (package (name "sbcl-stumpwm-pamixer") (version (git-version "0.1.1" revision commit)) (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/Junker/stumpwm-pamixer") (commit commit))) (file-name (git-file-name name version)) (sha256 (base32 "0djcrr16bx40l7b60d4j507vk5l42fdgmjpgrnk86z1ba8wlqim8")))) (inputs (list pamixer `(,stumpwm "lib"))) (build-system asdf-build-system/sbcl) (arguments (list #:asd-systems ''("pamixer") #:phases #~(modify-phases %standard-phases (add-after 'unpack 'patch-pamixer (lambda _ (substitute* "pamixer.lisp" (("\"pamixer \"") (string-append "\"" #$(this-package-input "pamixer") "/bin/pamixer \"")))))))) (home-page "https://github.com/Junker/stumpwm-pamixer") (synopsis "StumpWM Pamixer Module") (description "This package provides a minimalistic Pulseaudio volume and microphone control module for StumpWM.") (license license:gpl3)))) (define-public sbcl-stumpwm-ttf-fonts (package (inherit stumpwm-contrib) (name "sbcl-stumpwm-ttf-fonts") (inputs `(("stumpwm" ,stumpwm "lib") ("clx-truetype" ,sbcl-clx-truetype))) (arguments '(#:asd-systems '("ttf-fonts") #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'chdir (lambda _ (chdir "util/ttf-fonts") #t))))) (home-page "https://github.com/stumpwm/stumpwm-contrib") (synopsis "Implementation of TTF font rendering for Lisp") (description "This package provides a Lisp implementation of TTF font rendering.") (license (list license:gpl2+ license:gpl3+ license:bsd-2)))) (define-public sbcl-stumpwm-pass (package (inherit stumpwm-contrib) (name "sbcl-stumpwm-pass") (arguments '(#:asd-systems '("pass") #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'chdir (lambda _ (chdir "util/pass") #t))))) (home-page "https://github.com/stumpwm/stumpwm-contrib") (synopsis "Integrate @code{pass} with StumpWM") (description "This package provides an interface which integrates password-store into StumpWM.") (license (list license:gpl2+ license:gpl3+ license:bsd-2)))) (define-public sbcl-stumpwm-globalwindows (package (inherit stumpwm-contrib) (name "sbcl-stumpwm-globalwindows") (arguments '(#:asd-systems '("globalwindows") #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'chdir (lambda _ (chdir "util/globalwindows") #t))))) (home-page "https://github.com/stumpwm/stumpwm-contrib") (synopsis "Manipulate all windows in the current X session") (description "This package provides a StumpWM module to manipulate all windows in the current X session.") (license (list license:gpl2+ license:gpl3+ license:bsd-2)))) (define-public sbcl-stumpwm-swm-gaps (package (inherit stumpwm-contrib) (name "sbcl-stumpwm-swm-gaps") (arguments '(#:asd-systems '("swm-gaps") #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'chdir (lambda _ (chdir "util/swm-gaps") #t))))) (home-page "https://github.com/stumpwm/stumpwm-contrib") (synopsis "Gaps between windows for StumpWM") (description "This package provides a StumpWM module which adds gaps between windows.") (license (list license:gpl2+ license:gpl3+ license:bsd-2)))) (define-public sbcl-stumpwm-net (package (inherit stumpwm-contrib) (name "sbcl-stumpwm-net") (arguments '(#:asd-systems '("net") #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'chdir (lambda _ (chdir "modeline/net") #t))))) (home-page "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/net") (synopsis "Modeline support for network connectivity") (description "Modeline support for network connectivity.") (supported-systems (filter (lambda (a) (string-contains a "linux")) %supported-systems)) (license license:gpl3+))) (define-public sbcl-stumpwm-wifi (package (inherit stumpwm-contrib) (name "sbcl-stumpwm-wifi") (arguments '(#:asd-systems '("wifi") #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'chdir (lambda _ (chdir "modeline/wifi") #t))))) (home-page "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/wifi") (synopsis "Modeline support for wifi connectivity") (description "Modeline support for wifi connectivity.") (supported-systems (filter (lambda (a) (string-contains a "linux")) %supported-systems)) (license license:gpl3+))) (define-public sbcl-stumpwm-stumptray (package (inherit stumpwm-contrib) (name "sbcl-stumpwm-stumptray") (arguments '(#:asd-systems '("stumptray") #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'chdir (lambda _ (chdir "modeline/stumptray") #t))))) (inputs `(("stumpwm" ,stumpwm "lib") ("xembed" ,sbcl-clx-xembed) ("alexandria" ,sbcl-alexandria))) (home-page "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/stumptray") (synopsis "Modeline support for stumptray connectivity") (description "Modeline support for stumptray connectivity.") (supported-systems (filter (lambda (a) (string-contains a "linux")) %supported-systems)) (license license:gpl3+))) (define-public sbcl-stumpwm-kbd-layouts (package (inherit stumpwm-contrib) (name "sbcl-stumpwm-kbd-layouts") (arguments '(#:asd-systems '("kbd-layouts") #:asd-operation "compile-system" #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'chdir (lambda _ (chdir "util/kbd-layouts") #t))))) (home-page "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/kbd-layouts") (synopsis "Keyboard layout switcher for StumpWM") (description "Keyboard layout switcher for StumpWM") (license license:gpl3+))) (define-public sbcl-stumpwm-numpad-layouts (package (inherit stumpwm-contrib) (name "sbcl-stumpwm-numpad-layouts") (arguments '(#:asd-systems '("numpad-layouts") #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'chdir (lambda _ (chdir "util/numpad-layouts")))))) (home-page "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/numpad-layouts") (synopsis "Keyboard numpad layouts for StumpWM") (description "This is a module for handling different keyboards numpad layouts in StumpWM.") (license license:gpl3+))) (define-public sbcl-stumpwm-cpu (package (inherit stumpwm-contrib) (name "sbcl-stumpwm-cpu") (arguments '(#:asd-systems '("cpu") #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'chdir (lambda _ (chdir "modeline/cpu")))))) (home-page "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/cpu") (synopsis "Modeline support for CPU info") (description "Modeline support for CPU info.") (license license:gpl3+))) (define-public sbcl-stumpwm-disk (package (inherit stumpwm-contrib) (name "sbcl-stumpwm-disk") (arguments '(#:asd-systems '("disk") #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'chdir (lambda _ (chdir "modeline/disk") #t))))) (inputs `(("stumpwm" ,stumpwm "lib") ("cl-diskspace" ,sbcl-cl-diskspace) ("cl-mount-info" ,sbcl-cl-mount-info))) (home-page "https://github.com/stumpwm/stumpwm-contrib") (synopsis "StumpWM modeline support to show disk usage") (description "StumpWM modeline support to show disk usage") (license (list license:gpl2+ license:gpl3+)))) (define-public sbcl-stumpwm-mem (package (inherit stumpwm-contrib) (name "sbcl-stumpwm-mem") (arguments '(#:asd-systems '("mem") #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'chdir (lambda _ (chdir "modeline/mem")))))) (home-page "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/mem") (synopsis "Modeline support for memory info") (description "Modeline support for memory info.") (license license:gpl3+))) (define-public sbcl-stumpwm-winner-mode (package (inherit stumpwm-contrib) (name "sbcl-stumpwm-winner-mode") (arguments '(#:asd-systems '("winner-mode") #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'chdir (lambda _ (chdir "util/winner-mode")))))) (home-page "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/winner-mode") (synopsis "Emacs' winner-mode for StumpWM") (description "This module provides a winner-mode for StumpWM similar to the one in Emacs.") (license license:gpl3+))) (define-public sbcl-stumpwm-screenshot (package (inherit stumpwm-contrib) (name "sbcl-stumpwm-screenshot") (inputs `(("stumpwm" ,stumpwm "lib") ("zpng" ,sbcl-zpng))) (arguments '(#:asd-systems '("screenshot") #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'chdir (lambda _ (chdir "util/screenshot"))) (add-after 'chdir 'fix-build (lambda _ (substitute* "screenshot.asd" (("#:zpng") "#:stumpwm #:zpng"))))))) (home-page "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/screenshot") (synopsis "Screenshots for StumpWM") (description "This StumpWM module can take screenshots and store them as PNG files.") (license license:gpl3+))) (define-public sbcl-stumpwm-hostname (package (inherit stumpwm-contrib) (name "sbcl-stumpwm-hostname") (arguments '(#:asd-systems '("hostname") #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'chdir (lambda _ (chdir "modeline/hostname")))))) (home-page "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/hostname") (synopsis "Put hostname in the StumpWM modeline") (description "This StumpWM module puts the hostname in the StumpWM modeline.") (license license:gpl3+))) (define-public sbcl-stumpwm-notify (package (inherit stumpwm-contrib) (name "sbcl-stumpwm-notify") (build-system asdf-build-system/sbcl) (inputs (list sbcl-bordeaux-threads sbcl-dbus sbcl-xml-emitter (list stumpwm "lib"))) (arguments '(#:asd-systems '("notify") #:phases (modify-phases %standard-phases (add-after 'unpack 'chdir (lambda _ (chdir "util/notify")))))) (home-page "https://github.com/stumpwm/stumpwm-contrib") (synopsis "Notifications server for StumpWM") (description "This module implements org.freedesktop.Notifications interface[fn:dbus-spec]. It shows notifications using stumpwm:message by default.") (license license:gpl3+))) (define-public sbcl-stumpwm-battery-portable (package (inherit stumpwm-contrib) (name "sbcl-stumpwm-battery-portable") (build-system asdf-build-system/sbcl) (inputs (list sbcl-cl-ppcre (list stumpwm "lib"))) (arguments '(#:asd-systems '("battery-portable") #:phases (modify-phases %standard-phases (add-after 'unpack 'chdir (lambda _ (chdir "modeline/battery-portable")))))) (synopsis "Battery level indicator for StumpWM") (description "This module provides a battery level indicator for the modeline. It can be displayed in the modeline with %B.") (license (list license:expat license:gpl3+)))) (define-public lemonbar (package (name "lemonbar") (version "1.4") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/LemonBoy/bar") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0sm1lxxf0y2n87nvc8mz6i6mzb32f4qab80ppb28ibrwfir6jsln")))) (build-system gnu-build-system) (arguments (list #:tests? #f ;no test suite #:make-flags #~(list #$(string-append "CC=" (cc-for-target)) (string-append "PREFIX=" #$output)) #:phases #~(modify-phases %standard-phases (delete 'configure)))) (inputs (list libxcb)) (native-inputs (list perl)) (home-page "https://github.com/LemonBoy/bar") (synopsis "Featherweight status bar") (description "@code{lemonbar} (formerly known as @code{bar}) is a lightweight bar entirely based on XCB. Provides full UTF-8 support, basic formatting, RandR and Xinerama support and EWMH compliance without wasting your precious memory.") (license license:x11))) (define-public lemonbar-xft ;; Upstream v2.0 tag is several years behind HEAD (let ((commit "481e12363e2a0fe0ddd2176a8e003392be90ed02")) (package (inherit lemonbar) (name "lemonbar-xft") (version (string-append "2.0." (string-take commit 7))) (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/drscream/lemonbar-xft") (commit commit))) (file-name (git-file-name name version)) (sha256 (base32 "0588g37h18lv50h7w8vfbwhvc3iajh7sdr53848spaif99nh3mh4")))) (inputs (modify-inputs (package-inputs lemonbar) (prepend freetype libxft libx11))) (arguments (substitute-keyword-arguments (package-arguments lemonbar) ((#:make-flags make-flags) #~(#$@make-flags (format #f "CFLAGS=~a -DVERSION='~s'" (string-append "-I" #$(this-package-input "freetype") "/include/freetype2") #$version))))) (home-page "https://github.com/drscream/lemonbar-xft") (synopsis (string-append (package-synopsis lemonbar) " with fontconfig support")) (description (string-append (package-description lemonbar) "This is a fork of the @code{lemonbar} package that adds fontconfig support, for easier unicode usage."))))) (define-public xclickroot (package (name "xclickroot") (version "1.3") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/phillbush/xclickroot") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0wnsfxvh4v02r2jjyh2n6jfkbj2dna2hlm6anl4b36lwji749k2k")))) (build-system gnu-build-system) (inputs (list libx11)) (arguments `(#:tests? #f ;no test suite #:make-flags (list ,(string-append "CC=" (cc-for-target)) (string-append "PREFIX=" %output)) #:phases (modify-phases %standard-phases (delete 'configure)))) (home-page "https://github.com/phillbush/xclickroot") (synopsis "Run a command when a mouse button is pressed on the root window") (description "@code{xclickroot} runs a command every time a given mouse button is pressed on the root window.") (license license:public-domain))) (define-public xinitrc-xsession (let ((commit "cbfc77a1ccaf07b7d8a35f4d8007c7102f365374") (revision "0")) (package (name "xinitrc-xsession") (version (git-version "1" revision commit)) (source (origin (method git-fetch) (uri (git-reference (url "https://aur.archlinux.org/xinit-xsession.git") (commit commit))) (file-name (git-file-name name version)) (sha256 (base32 "12nv3qyjhy2l9mcb547f414d8bj79mhdhsra0g8x7x71b1xxl15b")))) (build-system copy-build-system) (arguments (list #:phases #~(modify-phases %standard-phases (add-after 'install 'patch-xsession-file (lambda _ (let* ((xinitrc-desktop (string-append #$output "/share/xsessions/xinitrc.desktop")) (xinitrc-helper (string-append #$output "/bin/xinitrcsession-helper"))) (substitute* xinitrc-desktop (("Exec=xinitrcsession-helper") (string-append "Exec=" xinitrc-helper))))))) #:install-plan #~(list '("xinitrcsession-helper" "bin/") '("xinitrc.desktop" "share/xsessions/")))) (home-page "https://aur.archlinux.org/packages/xinit-xsession/") (synopsis "Use ~/.xinitrc as an xsession from your display manager") (description "Xinitrc-xsession allows @code{~/.xinitrc} to be run as a session from your display manager. Make @code{~/.xinitrc} executable and use this package in your system configuration have this xsession available to your display manager.") (license license:gpl3)))) (define-public xmenu (package (name "xmenu") (version "4.5.5") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/phillbush/xmenu") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0qgxkrv9jnnnf3px7zh0paf8xsr4bcpf0f2nq9zy012m214223hs")))) (build-system gnu-build-system) (inputs (list libx11 libxinerama libxft freetype imlib2)) (arguments `(#:tests? #f ;no test suite #:make-flags (list (string-append "CC=" ,(cc-for-target)) (string-append "PREFIX=" %output) (string-append "CFLAGS=" "-I" (assoc-ref %build-inputs "freetype") "/include/freetype2")) #:phases (modify-phases %standard-phases (delete 'configure)))) (home-page "https://github.com/phillbush/xmenu") (synopsis "Menu utility for X") (description "@code{xmenu} receives a menu specification in stdin, shows a menu for the user to select one of the options, and outputs the option selected to stdout. It can be controlled both via mouse and via keyboard.") (license license:public-domain))) (define-public idesk (package (name "idesk") (version "0.7.5") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/idesk/idesk/idesk-" version "/idesk-" version ".tar.bz2")) (sha256 (base32 "1lxk2yvgysxwl514zc82lwr1dwc8cd62slgr5lzdhjbdrxfymdyl")) (modules '((guix build utils) (ice-9 format))) (snippet '(let* ((file "src/DesktopConfig.cpp") (template (string-append file ".XXXXXX")) (out (mkstemp! template)) (st (stat file)) (mode (stat:mode st))) (call-with-ascii-input-file file (lambda (p) (format out "~{~a~%~}" '("#include " "#include " "#include ")) (dump-port p out) (close out) (chmod template mode) (rename-file template file) #t)))))) (build-system gnu-build-system) (inputs (list libx11 libxft libxpm libpng freetype imlib2-1.7 sed)) (native-inputs (list pkg-config)) (arguments `(#:tests? #f)) ;no test suite (home-page "https://sourceforge.net/projects/idesk/") (synopsis "Add icons on X desktop and set background image for wallpaper") (description "Idesk is program that draws desktop icons. Each icon will execute a shell command on a configurable action. The icons can be moved on the desktop by dragging them, and the icons will remember their positions on start-up.") (license license:bsd-3))) (define-public xnotify (package (name "xnotify") (version "0.8.1") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/phillbush/xnotify") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "1jxms4md2mwfjgm2pgg3vakpp33800jbn9hnl0j4jyfc9f1ckbsv")))) (build-system gnu-build-system) (inputs (list libx11 libxft libxinerama imlib2)) (arguments `(#:make-flags (list (string-append "CC=" ,(cc-for-target)) (string-append "PREFIX=" %output) (string-append "CFLAGS=" "-I" (assoc-ref %build-inputs "freetype") "/include/freetype2")) #:tests? #f ;no test suite #:phases (modify-phases %standard-phases (delete 'configure)))) (home-page "https://github.com/phillbush/xnotify") (synopsis "Displays a notification on the screen") (description "XNotify receives a notification specification in stdin and shows a notification for the user on the screen.") (license license:expat))) (define-public cagebreak (package (name "cagebreak") (version "2.0.1") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/project-repo/cagebreak") (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "0fxfmxl7p63l07lqb83q5lx16hm0rixcidghx00gp08x2yrgr4x9")))) (build-system meson-build-system) (arguments `(#:configure-flags '("-Dxwayland=true") #:phases (modify-phases %standard-phases (add-after 'unpack 'fix-data-dir (lambda* (#:key outputs #:allow-other-keys) (substitute* "meson.build" (("/etc/") (string-append (assoc-ref outputs "out") "/etc")))))))) (native-inputs (list pandoc pkg-config)) (inputs (list libevdev pango wlroots)) (home-page "https://github.com/project-repo/cagebreak") (synopsis "Tiling wayland compositor inspired by ratpoison") (description "@command{cagebreak} is a slim, keyboard-controlled, tiling compositor for wayland conceptually based on the X11 window manager @command{ratpoison}.") (license license:expat))) (define-public libucl (package (name "libucl") (version "0.8.2") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/vstakhov/libucl/") (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "1j8npymjhcnzbwhx1wggr88148cga921438flf1sn7mw1b9dr55f")))) (native-inputs (list autoconf automake pkg-config libtool)) (build-system gnu-build-system) (arguments `(#:tests? #f)) ;; no tests (home-page "https://github.com/vstakhov/libucl") (synopsis "Universal configuration language (UCL) parser") (description "libucl implements a configuration language that is easy to read and write, and compatible with JSON.") (license license:bsd-2))) (define-public hikari (package (name "hikari") (version "2.3.3") (source (origin (method url-fetch) (uri (string-append "https://hikari.acmelabs.space/releases/" "hikari-" version ".tar.gz")) (sha256 (base32 "1qjd9dhpmv75idf6jjzwff8wgliad4d0af8pih9526p14vrnyws0")))) (build-system gnu-build-system) (native-inputs (list bmake pkg-config wayland-protocols)) (inputs (list cairo libinput-minimal libucl libxkbcommon linux-pam pango wayland wlroots)) (arguments `(#:tests? #f ; no tests #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")) (string-append "CC=" ,(cc-for-target)) "WITH_XWAYLAND=YES" "WITH_SCREENCOPY=YES" "WITH_LAYERSHELL=YES" "WITH_VIRTUAL_INPUT=YES") #:phases (modify-phases %standard-phases (delete 'configure) (replace 'build (lambda* (#:key inputs outputs make-flags #:allow-other-keys) (apply invoke "bmake" make-flags))) (replace 'install (lambda* (#:key inputs outputs make-flags #:allow-other-keys) (apply invoke "bmake" "install" make-flags)))))) (home-page "https://hikari.acmelabs.space/") (synopsis "Stacking Wayland compositor with tiling capabilities") (description "Hikari is a stacking Wayland compositor with additional tiling capabilities. It is heavily inspired by the Calm Window manager(cwm).") (license license:bsd-2))) (define-public jwm (package (name "jwm") (version "2.4.3") (source (origin (method url-fetch) (uri (string-append "https://github.com/joewing/jwm/releases/download/" "v" version "/jwm-" version ".tar.xz")) (sha256 (base32 "1av7r9sp26r5l74zvwdmyyyzav29mw5bafihp7y33vsjqkh4wfzf")))) (build-system gnu-build-system) (arguments (list #:tests? #f ; no check target #:phases #~(modify-phases %standard-phases (add-after 'install 'install-xsession (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (xsessions (string-append out "/share/xsessions"))) (mkdir-p xsessions) (call-with-output-file (string-append xsessions "/jwm.desktop") (lambda (port) (format port "~ [Desktop Entry]~@ Name=jwm~@ Comment=Joe's Window Manager~@ Exec=~a/bin/jwm~@ Type=XSession~%" out))))))))) (native-inputs (list pkg-config)) (inputs (list cairo libjpeg-turbo libpng librsvg libxext libxinerama libxmu libxpm libxrender libxt pango)) (home-page "http://joewing.net/projects/jwm") (synopsis "Joe's Window Manager") (description "JWM is a light-weight window manager for the X11 Window System. it is written in C and uses only Xlib at a minimum. Because of its small footprint, it makes a good window manager for older computers and less powerful systems, such as the Raspberry Pi, though it is perfectly capable of running on modern systems.") (license license:expat))) (define-public mjwm (package (name "mjwm") (version "4.1.0") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/chiku/mjwm") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0lgfp2xidhvmbj4zqvzz9g8zwbn6mz0pgacc57b43ha523vamsjq")))) (build-system gnu-build-system) (arguments (list #:tests? #f ; no check target #:phases #~(modify-phases %standard-phases (add-after 'unpack 'patch-subcategory.h (lambda* (#:key inputs #:allow-other-keys) (substitute* "include/subcategory.h" ;; icon name should be application-other instead of ;; application-others. (("applications-others") "applications-other"))))))) (home-page "https://github.com/chiku/mjwm") (synopsis "Create menu for JWM") (description "MJWM can create JWM's menu from (freedesktop) desktop files and the generated file can be include in the rootmenu section of your jwm config file.") (license license:gpl2+))) (define-public devour (package (name "devour") (version "12") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/salman-abedin/devour") (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "1qq5l6d0fn8azg7sj7a4m2jsmhlpswl5793clcxs1p34vy4wb2lp")))) (build-system gnu-build-system) (inputs (list libx11)) (arguments `(#:tests? #f ;no tests #:phases (modify-phases %standard-phases (delete 'configure)) ;no configure script #:make-flags (list (string-append "CC=" ,(cc-for-target)) (string-append "BIN_DIR=" %output "/bin")))) (home-page "https://github.com/salman-abedin/devour") (synopsis "X11 window swallower") (description "@command{devour} hides your current window before launching an external program and unhides it after quitting.") (license license:gpl2))) (define-public trayer-srg (package (name "trayer-srg") (version "1.1.8") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/sargon/trayer-srg") (commit (string-append "trayer-" version)))) (file-name (git-file-name name version)) (sha256 (base32 "1mvhwaqa9bng9wh3jg3b7y8gl7nprbydmhg963xg0r076jyzv0cg")))) (native-inputs (list libxmu pkg-config)) (inputs (list libx11 gdk-pixbuf gtk+-2)) (build-system gnu-build-system) (arguments `(#:tests? #f ; There are no tests. #:make-flags (let ((out (assoc-ref %outputs "out"))) (list (string-append "CC=" ,(cc-for-target)) (string-append "PREFIX=" %output))) #:phases (modify-phases %standard-phases (replace 'configure (lambda* (#:key configure-flags #:allow-other-keys) (apply invoke "./configure" configure-flags)))))) (home-page "https://github.com/sargon/trayer-srg") (synopsis "Minimal GTK based system tray") (description "@command{trayer} is small program designed to provide systray functionality present in GNOME/KDE desktop environments for window managers which do not support it.") (license license:expat))) (define-public wlogout (package (name "wlogout") (version "1.1.1") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/ArtsyMacaw/wlogout") (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "1swhzkqkzli59c89pvrakfvicd00x7ga860c3x2pbb4y3xziqfvi")))) (build-system meson-build-system) (native-inputs (list pkg-config scdoc)) (inputs (list gtk-layer-shell gtk+)) (arguments '(#:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'patch-source-paths (lambda* (#:key outputs #:allow-other-keys) (let ((out (assoc-ref outputs "out"))) (substitute* "main.c" (("/usr/share") (string-append out "/share")) (("/etc") (string-append out "/etc")))) #t))))) (home-page "https://github.com/ArtsyMacaw/wlogout") (synopsis "Logout menu for Wayland") (description "wlogout is a logout menu for Wayland environments.") (license license:expat))) (define-public berry (package (name "berry") (version "0.1.12") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/jlervin/berry") (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "0ygqzgi7ncc6whvwdifds2cq9cllq9fhiqnigx859hbdnf453hn4")))) (build-system gnu-build-system) (arguments `(#:tests? #f ; There are no tests. #:make-flags ,#~(list (string-append "CC=" #$(cc-for-target)) (string-append "prefix=" #$output) (string-append "CFLAGS=" "-I" (assoc-ref %build-inputs "freetype") "/include/freetype2")) #:phases (modify-phases %standard-phases (delete 'configure) (add-after 'build 'install-xsession (lambda* (#:key outputs #:allow-other-keys) (let* ((output (assoc-ref outputs "out")) (xsessions (string-append output "/share/xsessions"))) (mkdir-p xsessions) (with-output-to-file (string-append xsessions "/berry.desktop") (lambda _ (format #t "\ [Desktop Entry]~@ Name=berry~@ Comment=Berry Window Manager~@ Exec=~a/bin/berry~@ TryExec=~@*~a/bin/berry~@ Icon=~@ Type=Application~%" output))))))))) (native-inputs (list pkg-config)) (inputs (list freetype fontconfig libxext libx11 libxft libxinerama)) (home-page "https://berrywm.org/") (synopsis "Healthy, byte-sized window manager") (description "@code{berry} is a healthy, bite-sized window manager written in C using XLib.") (license license:expat))) (define-public avizo (package (name "avizo") (version "1.2.1") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/misterdanb/avizo") (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "0ddv5ssxfjbzhqskbbhi9qj1yqkraiv3r8svfmp9s5nnfpid8aba")))) (build-system meson-build-system) (inputs (list gtk+)) (native-inputs (list vala `(,glib "bin") gobject-introspection gtk-layer-shell pkg-config)) (home-page "https://github.com/misterdanb/avizo") (synopsis "Notification daemon for Sway") (description "Avizo is a simple notification daemon for Sway, mainly intended to be used for multimedia keys.") (license license:gpl3+))) (define-public grimshot (package (inherit sway) (name "grimshot") (source (origin (inherit (package-source sway)) (snippet #~(delete-file "contrib/grimshot.1")))) (build-system copy-build-system) (arguments (list #:install-plan #~`(("grimshot" "bin/") ("grimshot.1" "share/man/man1/")) #:phases #~(modify-phases %standard-phases (add-after 'unpack 'chdir (lambda _ (chdir "contrib"))) (add-after 'chdir 'patch-script-dependencies (lambda* (#:key inputs #:allow-other-keys) (substitute* "grimshot" (("\\b(date|grim|jq|notify-send|slurp|swaymsg|wl-copy)\\b" _ binary) (search-input-file inputs (string-append "bin/" binary)))))) (add-after 'patch-script-dependencies 'build-man-page (lambda _ (with-input-from-file "grimshot.1.scd" (lambda _ (with-output-to-file "grimshot.1" (lambda _ (invoke "scdoc")))))))))) (native-inputs (list scdoc)) (inputs (list coreutils grim jq libnotify slurp sway wl-clipboard)) (synopsis "Screenshot utility for the Sway window manager") (description "Grimshot is a screenshot utility for @code{sway}. It provides an interface over @code{grim}, @code{slurp} and @code{jq}, and supports storing the screenshot either directly to the clipboard using @code{wl-copy} or to a file."))) (define-public wld (let ((commit "6586736176ef50a88025abae835e29a7ca980126") (revision "1")) (package (name "wld") (version (git-version "0" revision commit)) (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/michaelforney/wld") (commit commit))) (file-name (git-file-name name version)) (sha256 (base32 "0qkd3q8p1s72x688g83fkcarrz2h20904rpd8z44ql6ksgrj9bp3")))) (build-system gnu-build-system) (arguments `(#:tests? #f ; no tests #:make-flags (list (string-append "CC=" ,(cc-for-target)) (string-append "PREFIX=" %output)) #:phases (modify-phases %standard-phases (delete 'configure)))) (inputs (list fontconfig libdrm pixman wayland)) (propagated-inputs (list fontconfig pixman)) (native-inputs (list pkg-config)) (home-page "https://github.com/michaelforney/wld") (synopsis "Primitive drawing library for Wayland") (description "wld is a drawing library that targets Wayland.") (license license:expat)))) (define-public swc (let ((commit "a7b615567f83d9e48d585251015048c441ca0239") (revision "1")) (package (name "swc") (version (git-version "0" revision commit)) (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/michaelforney/swc") (commit commit))) (sha256 (base32 "19rpbwpi81pm92fkhsmbx7pzagpah5m9ih5h5k3m8dy6r8ihdh35")) (file-name (git-file-name name version)))) (build-system gnu-build-system) (arguments `(#:tests? #f ;no tests #:make-flags (list (string-append "CC=" ,(cc-for-target)) (string-append "PREFIX=" %output)) #:phases (modify-phases %standard-phases (delete 'configure)))) (inputs (list libdrm libinput libxcb libxkbcommon wayland wayland-protocols wld xcb-util-wm)) (native-inputs (list pkg-config)) (home-page "https://github.com/michaelforney/swc") (synopsis "Library for making a simple Wayland compositor") (description "swc is a small Wayland compositor implemented as a library. It has been designed primarily with tiling window managers in mind. Additionally, notable features include: @itemize @item Easy to follow code base @item XWayland support @item Can place borders around windows @end itemize") (license license:expat)))) (define-public velox (let ((commit "fcc041265539befd907a64ee3a536cb2489ffb99") (revision "1")) (package (name "velox") (version (git-version "0" revision commit)) (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/michaelforney/velox") (commit commit))) (sha256 (base32 "0d11bmag5zwmas3rf1b7x5hjla7wpxq70nr86dz3x9r7cal04mym")) (file-name (git-file-name name version)))) (build-system gnu-build-system) (arguments `(#:tests? #f ;no tests #:make-flags (list (string-append "CC=" ,(cc-for-target)) (string-append "PREFIX=" %output)) #:phases (modify-phases %standard-phases (delete 'configure)))) (inputs (list libinput libxkbcommon wayland wld)) (propagated-inputs (list swc)) (native-inputs (list pkg-config)) (home-page "https://github.com/michaelforney/velox") (synopsis "Simple window manager based on swc") (description "velox is a simple window manager for Wayland based on swc. It is inspired by dwm and xmonad.") (license license:expat))))