{ stdenv, symlinkJoin, rofi, gnused, pass-otp, 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-otp}/bin/pass git ls-files '*/otp.gpg' \ | ${gnused}/bin/sed 's:/otp\.gpg$::' \ | ${rofi}/bin/rofi -dmenu -f -p OTP ) otp=$(${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 stdenv.lib; { description = "similar to passmenu shows and prints otp"; homepage = "https://your.mama"; license = licenses.gpl3; platforms = platforms.linux; maintainers = with maintainers; [ mrVanDalo ]; }; }