145 lines
3.6 KiB
Nix
145 lines
3.6 KiB
Nix
|
{
|
||
|
lib,
|
||
|
stdenv,
|
||
|
fetchFromGitHub,
|
||
|
fetchurl,
|
||
|
pkg-config,
|
||
|
cmake,
|
||
|
libcbor,
|
||
|
openssl,
|
||
|
zlib,
|
||
|
gnugrep,
|
||
|
gawk,
|
||
|
# Linux only
|
||
|
pcsclite,
|
||
|
udev,
|
||
|
imagemagick,
|
||
|
# GUI
|
||
|
python3,
|
||
|
xterm,
|
||
|
makeDesktopItem,
|
||
|
copyDesktopItems,
|
||
|
# Darwin only
|
||
|
libuv,
|
||
|
libsolv,
|
||
|
libcouchbase,
|
||
|
darwin,
|
||
|
}:
|
||
|
let
|
||
|
pythonEnv = python3.withPackages (ps: [ ps.tkinter ]);
|
||
|
in
|
||
|
stdenv.mkDerivation rec {
|
||
|
pname = "fido2-manage";
|
||
|
version = "0-unstable-2024-09-24";
|
||
|
|
||
|
src = fetchFromGitHub {
|
||
|
owner = "token2";
|
||
|
repo = "fido2-manage";
|
||
|
rev = "6aef9ceccdf7bcc60a9298e51a4db633256925df";
|
||
|
hash = "sha256-rXTL6wpdvCifakmxH14wBLbhTptNYNFGEPskpUy3IjA=";
|
||
|
};
|
||
|
|
||
|
icon = fetchurl {
|
||
|
url = "https://token2.net/img/icon/logo-white.png";
|
||
|
hash = "sha256-UpxRzn24v1vigMFlofVU+YOzKrkxCu2Pk5iktqFgNO8=";
|
||
|
};
|
||
|
|
||
|
nativeBuildInputs =
|
||
|
[
|
||
|
pkg-config
|
||
|
cmake
|
||
|
]
|
||
|
++ lib.optionals stdenv.isLinux [
|
||
|
copyDesktopItems
|
||
|
imagemagick
|
||
|
];
|
||
|
|
||
|
buildInputs =
|
||
|
[
|
||
|
libcbor
|
||
|
openssl
|
||
|
zlib
|
||
|
]
|
||
|
++ lib.optionals stdenv.isLinux [
|
||
|
xterm
|
||
|
udev
|
||
|
pcsclite
|
||
|
]
|
||
|
++ lib.optionals stdenv.isDarwin [
|
||
|
libuv
|
||
|
libsolv
|
||
|
libcouchbase
|
||
|
darwin.apple_sdk.frameworks.IOKit
|
||
|
darwin.apple_sdk.frameworks.PCSC
|
||
|
];
|
||
|
|
||
|
cmakeFlags = [ "-USE_PCSC=ON" ];
|
||
|
|
||
|
postPatch =
|
||
|
''
|
||
|
substituteInPlace ./src/libfido2.pc.in \
|
||
|
--replace-fail "\''${prefix}/@CMAKE_INSTALL_LIBDIR@" "@CMAKE_INSTALL_FULL_LIBDIR@"
|
||
|
''
|
||
|
+ lib.optionalString stdenv.isDarwin ''
|
||
|
substituteInPlace ./CMakeLists.txt \
|
||
|
--replace-fail "/\''${CMAKE_INSTALL_LIBDIR}" "/lib"
|
||
|
'';
|
||
|
|
||
|
postInstall =
|
||
|
lib.optionalString stdenv.isLinux ''
|
||
|
install $src/fido2-manage.sh $out/bin/fido2-manage
|
||
|
magick ${icon} -background none -gravity center -extent 512x512 token2.png
|
||
|
install -Dm444 token2.png $out/share/icons/hicolor/512x512/apps/token2.png
|
||
|
install $src/gui.py $out/bin/fido2-manage-gui
|
||
|
''
|
||
|
+ lib.optionalString stdenv.isDarwin ''
|
||
|
install $src/fido2-manage-mac.sh $out/bin/fido2-manage
|
||
|
'';
|
||
|
|
||
|
desktopItems = lib.optionals stdenv.isLinux [
|
||
|
(makeDesktopItem rec {
|
||
|
desktopName = "Fido2 Manager";
|
||
|
name = "fido2-manage";
|
||
|
exec = "fido2-manage-gui";
|
||
|
icon = "token2";
|
||
|
comment = meta.description;
|
||
|
categories = [
|
||
|
"Utility"
|
||
|
];
|
||
|
})
|
||
|
];
|
||
|
|
||
|
postFixup =
|
||
|
''
|
||
|
substituteInPlace $out/bin/fido2-manage \
|
||
|
--replace-fail "/usr/local/bin/" "$out/bin/" \
|
||
|
--replace-fail "./fido2-manage.sh" "fido2-manage" \
|
||
|
--replace-fail "awk" "${gawk}/bin/awk"
|
||
|
''
|
||
|
+ lib.optionalString stdenv.isLinux ''
|
||
|
substituteInPlace $out/bin/fido2-manage-gui \
|
||
|
--replace-fail "./fido2-manage.sh" "$out/bin/fido2-manage" \
|
||
|
--replace-fail "x-terminal-emulator" "${xterm}/bin/xterm" \
|
||
|
--replace-fail "tk.Tk()" "tk.Tk(className='fido2-manage')" \
|
||
|
--replace-fail 'root.title("FIDO2.1 Manager - Python version 0.1 - (c) Token2")' "root.title('Fido2 Manager')"
|
||
|
|
||
|
substituteInPlace $out/bin/fido2-manage \
|
||
|
--replace-fail "grep" "${gnugrep}/bin/grep"
|
||
|
|
||
|
sed -i '1i #!${pythonEnv.interpreter}' $out/bin/fido2-manage-gui
|
||
|
''
|
||
|
+ lib.optionalString stdenv.isDarwin ''
|
||
|
substituteInPlace $out/bin/fido2-manage \
|
||
|
--replace-fail "ggrep" "${gnugrep}/bin/grep"
|
||
|
'';
|
||
|
|
||
|
meta = {
|
||
|
description = "Manage FIDO2.1 devices over USB or NFC, including Passkeys";
|
||
|
homepage = "https://github.com/token2/fido2-manage";
|
||
|
platforms = lib.platforms.all;
|
||
|
license = lib.licenses.bsd2;
|
||
|
mainProgram = "fido2-manage";
|
||
|
maintainers = with lib.maintainers; [ Srylax ];
|
||
|
};
|
||
|
}
|