+
+(define-public xwallpaper
+ (package
+ (name "xwallpaper")
+ (version "0.6.4")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/stoeckmann/xwallpaper")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "175fzifvia58vah2x7509drvfn3xfv5d9szgh9x1w1a1w8rcs2hx"))))
+ (build-system gnu-build-system)
+ (native-inputs
+ `(("autoconf" ,autoconf)
+ ("automake" ,automake)
+ ("pkg-config" ,pkg-config)))
+ (inputs
+ `(("libjpeg-turbo" ,libjpeg-turbo)
+ ("libpng" ,libpng)
+ ("libxpm" ,libxpm)
+ ("pixman" ,pixman)
+ ("xcb-util" ,xcb-util)
+ ("xcb-util-image" ,xcb-util-image)))
+ (home-page "https://github.com/stoeckmann/xwallpaper")
+ (synopsis "Wallpaper setting utility for X")
+ (description
+ "The xwallpaper utility allows you to set image files as your X
+wallpaper. JPEG, PNG, and XPM file formats are supported.
+
+The wallpaper is also advertised to programs which support semi-transparent
+backgrounds.")
+ (license license:isc)))
+
+(define-public xwrits
+ (package
+ (name "xwrits")
+ (version "2.26")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://www.lcdf.org/~eddietwo/xwrits/"
+ "xwrits-" version ".tar.gz"))
+ (sha256
+ (base32 "1n7y0fqpcvmzznvbsn14hzy5ddaa3lilm8aw6ckscqndnh4lijma"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'install 'install-docs
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (doc (string-append out "/share/doc/xwrits")))
+ (install-file "GESTURES" doc)
+ (install-file "README" doc)
+ #t))))))
+ (inputs
+ `(("libx11" ,libx11)
+ ("libxinerama" ,libxinerama)))
+ (home-page "https://www.lcdf.org/~eddietwo/xwrits/")
+ (synopsis "Reminds you to take wrist breaks")
+ (description "Xwrits reminds you to take wrist breaks for prevention or
+management of repetitive stress injuries. When you should take a break, it
+pops up an X window, the warning window. You click on the warning window,
+then take a break. The window changes appearance while you take the break.
+It changes again when your break is over. Then you just resume typing.
+Xwrits hides itself until you should take another break.")
+ (license license:gpl2)))
+
+(define-public xsettingsd
+ (package
+ (name "xsettingsd")
+ (version "1.0.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/derat/xsettingsd.git")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "05m4jlw0mgwp24cvyklncpziq1prr2lg0cq9c055sh4n9d93d07v"))))
+ (build-system scons-build-system)
+ (inputs
+ `(("libx11" ,libx11)))
+ (native-inputs
+ `(("pkg-config" ,pkg-config)
+ ("googletest" ,googletest)
+ ("googletest-source" ,(package-source googletest))))
+ (arguments
+ `(#:scons ,scons-python2
+ #:scons-flags
+ (list "CC=gcc")
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'build 'patch-sconstruct
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "SConstruct"
+ ;; scons doesn't pick up environment variables automatically
+ ;; so it needs help to find path variables
+ (("env = Environment\\(")
+ "env = Environment(
+ ENV = {
+ 'PATH': os.environ['PATH'],
+ 'CPATH': os.environ['C_INCLUDE_PATH'],
+ 'LIBRARY_PATH': os.environ['LIBRARY_PATH'],
+ 'PKG_CONFIG_PATH': os.environ['PKG_CONFIG_PATH']
+ },")
+ ;; Update path to gtest source files used in tests
+ (("/usr/src/gtest") (string-append
+ (assoc-ref inputs "googletest-source")
+ "/googletest"))
+ ;; Exclude one warning that causes a build error
+ (("-Werror") "-Werror -Wno-error=sign-compare"))
+ #t))
+ ;; The SConstruct script doesn't configure installation so
+ ;; binaries must be copied to the output path directly
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (bin (string-append out "/bin")))
+ (mkdir-p bin)
+ (install-file "xsettingsd" bin)
+ (install-file "dump_xsettings" bin)
+ #t))))))
+ (home-page "https://github.com/derat/xsettingsd")
+ (synopsis "Xorg settings daemon")
+ (description "@command{xsettingsd} is a lightweight daemon that provides settings to
+Xorg applications via the XSETTINGS specification. It is used for defining
+font and theme settings when a complete desktop environment (GNOME, KDE) is
+not running. With a simple @file{.xsettingsd} configuration file one can avoid
+configuring visual settings in different UI toolkits separately.")
+ (license license:bsd-3)))
+
+(define-public clipnotify
+ (package
+ (name "clipnotify")
+ (version "1.0.2")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/cdown/clipnotify.git")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1v3ydm5ljy8z1savmdxrjyx7a5bm5013rzw80frp3qbbjaci0wbg"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (delete 'configure)
+ (replace 'install
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (bin (string-append out "/bin"))
+ (doc (string-append %output "/share/doc/" ,name "-" ,version)))
+ (install-file "clipnotify" bin)
+ (install-file "README.md" doc)
+ #t))))
+ #:make-flags (list "CC=gcc")
+ ;; the package provides no test suite:
+ #:tests? #f))
+ (inputs
+ `(("libx11" ,libx11)
+ ("libXfixes" ,libxfixes)))
+ (home-page "https://github.com/cdown/clipnotify")
+ (synopsis "Notify on new X clipboard events")
+ (description "@command{clipnotify} is a simple program that, using the
+XFIXES extension to X11, waits until a new selection is available and then
+exits.
+
+It was primarily designed for clipmenu, to avoid polling for new selections.
+
+@command{clipnotify} doesn't try to print anything about the contents of the
+selection, it just exits when it changes. This is intentional -- X11's
+selection API is verging on the insane, and there are plenty of others who
+have already lost their sanity to bring us xclip/xsel/etc. Use one of those
+tools to complement clipnotify.")
+ (license license:public-domain)))
+
+(define-public clipmenu
+ (let ((commit "bcbe7b144598db4a103f14e8408c4b7327d6d5e1")
+ (revision "1"))
+ (package
+ (name "clipmenu")
+ (version (string-append "6.0.1-"
+ revision "." (string-take commit 7)))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/cdown/clipmenu.git")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0053j4i14lz5m2bzc5sch5id5ilr1bl196mp8fp0q8x74w3vavs9"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (delete 'configure)
+ (delete 'build)
+ (replace 'install
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (bin (string-append out "/bin"))
+ (doc (string-append %output "/share/doc/"
+ ,name "-" ,version)))
+ (install-file "clipdel" bin)
+ (install-file "clipmenu" bin)
+ (install-file "clipmenud" bin)
+ (install-file "README.md" doc)
+ #t)))
+ (add-after 'install 'wrap-script
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (clipnotify (assoc-ref inputs "clipnotify"))
+ (coreutils-minimal (assoc-ref inputs "coreutils-minimal"))
+ (gawk (assoc-ref inputs "gawk"))
+ (util-linux (assoc-ref inputs "util-linux"))
+ (xdotool (assoc-ref inputs "xdotool"))
+ (xsel (assoc-ref inputs "xsel")))
+ (for-each
+ (lambda (prog)
+ (wrap-script (string-append out "/bin/" prog)
+ `("PATH" ":" prefix
+ ,(map (lambda (dir)
+ (string-append dir "/bin"))
+ (list clipnotify coreutils-minimal
+ gawk util-linux xdotool xsel)))))
+ '("clipmenu" "clipmenud" "clipdel")))
+ #t))
+ (replace 'check
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ ;; substitute a shebang appearing inside a string (the test
+ ;; file writes this string to a temporary file):
+ (substitute* "tests/test-clipmenu"
+ (("#!/usr/bin/env bash")
+ (string-append "#!" (which "bash"))))
+ (invoke "tests/test-clipmenu")
+ #t)))))
+ (inputs
+ `(("clipnotify" ,clipnotify)
+ ("coreutils-minimal" ,coreutils-minimal)
+ ("gawk" ,gawk)
+ ("guile" ,guile-3.0) ; for wrap-script
+ ("util-linux" ,util-linux)
+ ("xdotool" ,xdotool)
+ ("xsel" ,xsel)))
+ (home-page "https://github.com/cdown/clipmenu")
+ (synopsis "Simple clipboard manager using dmenu or rofi and xsel")
+ (description "Start @command{clipmenud}, then run @command{clipmenu} to
+select something to put on the clipboard.
+
+When @command{clipmenud} detects changes to the clipboard contents, it writes
+them out to the cache directory. @command{clipmenu} reads the cache directory
+to find all available clips and launches @command{dmenu} (or @command{rofi},
+depending on the value of @code{CM_LAUNCHER}) to let the user select a clip.
+After selection, the clip is put onto the PRIMARY and CLIPBOARD X selections.")
+ (license license:public-domain))))
+
+(define-public kbdd
+ (package
+ (name "kbdd")
+ (version "0.7.1")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/qnikst/kbdd.git")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0qkq75grbd4wkx4nlvswgavpijk9ad0pzqyj89a0ayjsbsn36pqy"))))
+ (build-system gnu-build-system)
+ (native-inputs
+ `(("autoconf" ,autoconf)
+ ("automake" ,automake)
+ ("glib" ,glib "bin")
+ ("pkg-config" ,pkg-config)))
+ (inputs
+ `(("dbus-glib", dbus-glib)
+ ("glib" ,glib)
+ ("libx11" ,libx11)))
+ (home-page "https://github.com/qnikst/kbdd")
+ (synopsis "Per-window keyboard layout switching daemon for X")
+ (description "@command{kbdd} is a simple keyboard layout switching
+program, which is designed to run in an X11 session and remember
+keyboard layouts on a per-window basis. That can be very handy for a
+user of a non-US keyboard who does not want to jump through layouts back
+and forth while typing in terminals (mostly in a latin alphabet) and
+some kind of chat (in native language).
+
+@command{kbdd} also supports D-Bus signals, which makes it possible to
+create layout indicator widgets.")
+ (license license:bsd-2)))
+
+(define-public j4-dmenu-desktop
+ (package
+ (name "j4-dmenu-desktop")
+ (version "2.17")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/enkore/j4-dmenu-desktop.git")
+ (commit (string-append "r" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0v23fimkn83dcm5p53y2ymhklff3kwppxhf75sm8xmswrzkixpgc"))))
+ (build-system cmake-build-system)
+ (native-inputs
+ `(("catch2" ,catch-framework2)))
+ (arguments
+ `(#:configure-flags '("-DWITH_GIT_CATCH=off")
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda _
+ (invoke "./j4-dmenu-tests" "exclude:SearchPath/XDG_DATA_HOME"))))))
+ (synopsis "Fast desktop menu")
+ (description
+ "j4-dmenu-desktop is a replacement for i3-dmenu-desktop. Its purpose
+is to find @file{.desktop} files and offer you a menu to start an application
+using @command{dmenu}.")
+ (home-page "https://github.com/enkore/j4-dmenu-desktop")
+ (license license:gpl3+)))
+
+(define-public wofi
+ (package
+ (name "wofi")
+ (version "1.1.2")
+ (source (origin
+ (method hg-fetch)
+ (uri (hg-reference
+ (url "https://hg.sr.ht/~scoopta/wofi")
+ (changeset (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "086j5wshawjbwdmmmldivfagc2rr7g5a2gk11l0snqqslm294xsn"))))
+ (build-system meson-build-system)
+ (arguments
+ `(#:glib-or-gtk? #t))
+ (native-inputs
+ `(("pkg-config" ,pkg-config)))
+ (inputs
+ `(("gtk3" ,gtk+)
+ ("wayland" ,wayland)))
+ (synopsis "Launcher/menu program for wayland")
+ (description
+ "Wofi is a launcher/menu program for wlroots based wayland compositors
+such as sway, similar to @command{rofi}.")
+ (home-page "https://hg.sr.ht/~scoopta/wofi")
+ (license license:gpl3+)))