A GTK4 SSH-askpass in Zig

49 points - today at 3:40 PM

Source

Comments

danudey today at 6:45 PM
Noticed that when I build this it ends up with direct linking against a half-dozen libraries it doesn't actually use, at least on Ubuntu. Fixed it by replacing the linking commands with this:

    exe_mod.linkSystemLibrary("gtk-4", .{ .use_pkg_config = .no });
    exe_mod.linkSystemLibrary("gobject-2.0", .{});
In my case, at least, this doesn't change the full library tree because gtk-4 still links against all of the libraries that are removed from this binary's list, but it does mean that programs which calculate dependencies, like dpkg-shlibdeps, won't report spurious "required" dependencies when analyzing the binary.

When building on Ubuntu 26.04, the binary no longer directly links against lib{pango, cairo, pangocairo, cairo-gobject, harfbuzz, gdk_pixbuf, graphene, gio, vulkan}.

Can't create an account on the site so I figured I'd post this here. If you're going for absolute minimalism this seems like another step in the right direction for anyone building on a more 'gratuitous' GTK build (such as Ubuntu's)

DannyBee today at 5:37 PM
Whenever someone writes "with hand-written bindings" I read "will stop working 8 minutes after the next release"
gen2brain today at 4:22 PM
Nice, I just use lxqt-openssh-askpass, but I am on X11. A lighter alternative (for single-text input) would be FLTK. Version 1.4 is really nice, with Wayland support, and they even draw custom window decorations on GNOME. Both Cairo and FLTK should be able to compile with -X; not sure, though, about the status of the Zig bindings.
porridgeraisin today at 4:53 PM
I wrap `pinentry` (which is in the dependency trees of gnupg, pacman, gvfs, udisks2 and other software that you can de-facto depend on on desktops) inside my own simple askpass.

  $ cat ~/scripts/pinentry-askpass
  #!/usr/bin/env bash
  
  pinentry <<INPUT | grep '^D ' | cut -c 3-
  SETPROMPT Password:
  GETPIN
  INPUT

  $ cat ~/.bashrc | grep ASKPASS
  export SUDO_ASKPASS="$HOME/scripts/pinentry-askpass"
  export SSH_ASKPASS="$SUDO_ASKPASS"
It automatically launches the GTK, TTY, or QT version depending on your environment.

It's also useful for agents to use sudo, you can write in instructions to tool-call `sudo -A` and you get a GUI popup to enter the password, and the agent continues from there. And since the "prompt" in pinentry can be customised... you can get the agent to set up a temporary askpass, which replaces "Password:" in the prompt with questions like "Can I delete this old log file in /var?" and you enter your password to authorise.

hparadiz today at 4:27 PM
These implementations really need to also include fingerprint sensor support
bflesch today at 4:24 PM
Love the tab title shenanigans when switching to and from the tab.
WD-42 today at 4:14 PM
Would love to see more projects using gtk and zig. Always nice to have another language option.
hackingboy298 today at 5:25 PM
this is realy good and helpfull information thanks.