summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinnnus <[email protected]>2024-12-29 15:30:36 +0000
committerLinnnus <[email protected]>2025-01-27 19:48:53 +0000
commitb1aba2dd924a80fd824d6e046e76493e5a34668c (patch)
tree26db7ee6819edf42ef09f98d5a8b0c779c6e71d0
parent466751719ca5103d93b3a96fa40a68b8819fe1e7 (diff)
pkgs: Add dwn-setstatus
-rw-r--r--overlays/additions.nix2
-rw-r--r--pkgs/dwm-setstatus/default.nix28
-rw-r--r--pkgs/dwm-setstatus/dwm-setstatus.c32
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;
+}