two network/storage admin tools that only shadow needs, grouped behind one attrset so the host list stays a list of intents rather than of packages. winbox is a one-liner: pkgs.winbox resolves to winbox4, which nixpkgs already builds through autoPatchelfHook against the qt/xcb stack it needs. it does not go anywhere near nix-ld, so nothing has to be added to the nix-ld library list for it - a comment says so, since the opposite is an easy assumption to make about a vendored mikrotik binary. the installed binary is WinBox, capital w, which is worth knowing at a shell prompt. unraid-usb-creator is not in nixpkgs and upstream ships an appimage only, so it is a repack. the appimage is a qt6/qml app - a fork of rpi-imager - built with linuxdeploy, which means it already vendors the whole qt6 stack plus xcb, icu, gnutls and krb5 under usr/lib. that bundle is kept verbatim and autopatchelfed against only the handful of libraries linuxdeploy deliberately leaves to the host: libc, libstdc++, GL, x11, fontconfig and friends. no FHS wrapper, so no ~400mb buildFHSEnv closure. the usr/ layout has to survive as a unit because qt.conf sitting next to the binary declares Prefix=../ with Plugins=plugins and Qml2Imports=qml. the non-obvious part is appendRunpaths rather than runtimeDependencies for openssl. qt's tls backend dlopens libssl/libcrypto, so autopatchelf never sees the dependency, and without it the app cannot fetch the release json or stream the image. it has to be appendRunpaths because in auto-patchelf `rpath += runtime_deps` sits inside the set-interpreter branch and so only ever reaches executables, while `rpath.extend(append_rpaths)` runs for every patched file. the dlopen happens from plugins/tls/libqopensslbackend .so and glibc resolves dlopen against the calling object's DT_RUNPATH - the wrapper's runpath is not consulted - so the path must land on the plugin itself. QT_QPA_PLATFORM is pinned to xcb because linuxdeploy bundled only the xcb platform plugin; there is no libqwayland*.so anywhere in the appimage, so this always runs through xwayland under hyprland regardless. --set-default rather than --set, so it can still be overridden if upstream ever ships the wayland plugin. udisks2 is enabled from this module even though hyprland/default.nix already enables it for udiskie. the app enumerates and unmounts removable drives over the udisks2 d-bus api rather than poking /dev, which is how it avoids needing root, and repeating the option keeps the module standalone on a host with no hyprland. bool options merge on equal values, so this costs nothing. v1.1.0 is pinned by hash. note the tag is not returned by the github releases api - which only lists the v2.0.x line - but the asset url that unraid.net/download redirects to is live and matches. verified: shadow evaluates clean, both packages build, the .desktop Exec is rewritten from the bare name to the absolute store path, ldd on the main binary reports nothing unresolved, and the openssl lib dir is present on libqopensslbackend.so's runpath. not yet exercised at runtime against an actual usb stick.
11 lines
354 B
Nix
11 lines
354 B
Nix
{...}: {
|
|
# MikroTik RouterOS configuration client. pkgs.winbox is winbox4, which is
|
|
# already autoPatchelf'd against the Qt/xcb stack it needs, so it does not
|
|
# rely on nix-ld. Note the installed binary is `WinBox`, not `winbox`.
|
|
flake.nixosModules.winbox = {pkgs, ...}: {
|
|
environment.systemPackages = with pkgs; [
|
|
winbox
|
|
];
|
|
};
|
|
}
|