diff options
-rw-r--r-- | overlays/additions.nix | 2 | ||||
-rw-r--r-- | pkgs/dwm-setstatus/default.nix | 28 | ||||
-rw-r--r-- | pkgs/dwm-setstatus/dwm-setstatus.c | 32 |
3 files changed, 62 insertions, 0 deletions
diff --git a/overlays/additions.nix b/overlays/additions.nix index fc399f2..7213251 100644 --- a/overlays/additions.nix +++ b/overlays/additions.nix @@ -30,6 +30,8 @@ final: prev: { echoargs = prev.callPackage ../pkgs/echoargs {}; + dwm-setstatus = prev.callPackage ../pkgs/dwm-setstatus {}; + vimPlugins = prev.vimPlugins.extend (final': prev': { vim-crystal = prev.callPackage ../pkgs/vim-crystal {}; vim-noweb = prev.callPackage ../pkgs/vim-noweb {}; diff --git a/pkgs/dwm-setstatus/default.nix b/pkgs/dwm-setstatus/default.nix new file mode 100644 index 0000000..cf7b261 --- /dev/null +++ b/pkgs/dwm-setstatus/default.nix @@ -0,0 +1,28 @@ +{ + stdenv, + lib, + libX11, +}: +stdenv.mkDerivation { + pname = "human-sleep"; + version = "16-11-2024"; # Date of last change + + src = ./.; + nativeBuildInputs = [ libX11 ]; + buildPhase = '' + cc dwm-setstatus.c -lX11 -o dwm-setstatus + ''; + + # TODO: Run check phase: `cscript -DTEST human-sleep.c` + + installPhase = '' + mkdir -p $out/bin + mv dwm-setstatus $out/bin + ''; + + meta = with lib; { + homepage = "https://wiki.archlinux.org/title/Dwm#Conky_statusbar"; + description = "Updates DWM status bar for every line on stdin"; + mainProgram = "dwm-setstatus"; + }; +} diff --git a/pkgs/dwm-setstatus/dwm-setstatus.c b/pkgs/dwm-setstatus/dwm-setstatus.c new file mode 100644 index 0000000..0abdcd0 --- /dev/null +++ b/pkgs/dwm-setstatus/dwm-setstatus.c @@ -0,0 +1,32 @@ +#include <string.h> +#include <stdlib.h> +#include <stdio.h> +#include <X11/Xlib.h> + +int main(int argc, char * argv[]) +{ + Display * dpy = NULL; + Window win = 0; + size_t length = 0; + ssize_t bytes_read = 0; + char * input = NULL; + + dpy = XOpenDisplay(getenv("DISPLAY")); + if (dpy == NULL) + { + fprintf(stderr, "Can't open display, exiting.\n"); + exit(1); + } + win = DefaultRootWindow(dpy); + + while ((bytes_read = getline(&input, &length, stdin)) != EOF) + { + input[strlen(input) - 1] = '\0'; + XStoreName(dpy, win, input); + XFlush(dpy); + fprintf(stderr, "Input: %s", input); + fprintf(stderr, "\nbytes read: %ld\n", bytes_read); + } + free(input); + return 0; +} |