{ lib , symlinkJoin , rofi , gnused , pass , writeTextFile , writeShellScriptBin , xdotool }: let name = "otpmenu"; desktopFile = writeTextFile { name = "${name}.desktop"; destination = "/share/applications/${name}.desktop"; text = '' [Desktop Entry] Categories=Application;Utility; Comment=Enter MFA number with password otp plugins otp Encoding=UTF-8 Exec=${bin}/bin/${name} Icon=gnome-lockscreen Name=${name} Terminal=false Type=Application ''; }; bin = writeShellScriptBin name # sh '' set -efu x=$( ${pass.withExtensions (ext: [ext.pass-otp])}/bin/pass git ls-files '*/otp.gpg' \ | ${gnused}/bin/sed 's:/otp\.gpg$::' \ | ${rofi}/bin/rofi -dmenu -f -p OTP ) otp=$(${pass.withExtensions (ext: [ext.pass-otp])}/bin/pass otp code "$x/otp") printf %s "$otp" | ${xdotool}/bin/xdotool type -f - ''; in symlinkJoin rec { version = "1.0.0"; name = "otpMenu-${version}"; paths = [ bin desktopFile ]; meta = with lib; { description = "similar to passmenu shows and prints otp"; homepage = "https://your.mama"; license = licenses.gpl3; platforms = platforms.linux; maintainers = with maintainers; [ mrVanDalo ]; }; }