nixpkgs/pkgs/applications/misc/keepassxc/default.nix
chayleaf 190ea7b09e keepassxc: add firefox native messaging host file
When using a Firefox fork, upstream package relies on you entering the
browser user config path manually and writes the native messaging host
file to that path. It should be much more convenient to manage it in
Nix.
2023-10-13 05:43:46 +07:00

141 lines
4 KiB
Nix

{ lib
, stdenv
, fetchFromGitHub
, cmake
, qttools
, asciidoctor
, botan2
, curl
, libXi
, libXtst
, libargon2
, libusb1
, minizip
, pcsclite
, pkg-config
, qrencode
, qtbase
, qtmacextras
, qtsvg
, qtx11extras
, readline
, wrapGAppsHook
, wrapQtAppsHook
, zlib
, LocalAuthentication
, withKeePassBrowser ? true
, withKeePassFDOSecrets ? true
, withKeePassKeeShare ? true
, withKeePassNetworking ? true
, withKeePassSSHAgent ? true
, withKeePassTouchID ? true
, withKeePassX11 ? true
, withKeePassYubiKey ? true
, nixosTests
}:
stdenv.mkDerivation rec {
pname = "keepassxc";
version = "2.7.6";
src = fetchFromGitHub {
owner = "keepassxreboot";
repo = "keepassxc";
rev = version;
hash = "sha256-xgrkMz7BCBxjfxHsAz/CFLv1d175LnrAJIOZMM3GmU0=";
};
env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang (toString [
"-Wno-old-style-cast"
"-Wno-error"
"-D__BIG_ENDIAN__=${if stdenv.isBigEndian then "1" else "0"}"
]);
NIX_LDFLAGS = lib.optionalString stdenv.isDarwin "-rpath ${libargon2}/lib";
patches = [
./darwin.patch
];
cmakeFlags = [
"-DKEEPASSXC_BUILD_TYPE=Release"
"-DWITH_GUI_TESTS=ON"
"-DWITH_XC_UPDATECHECK=OFF"
]
++ (lib.optional (!withKeePassX11) "-DWITH_XC_X11=OFF")
++ (lib.optional (withKeePassFDOSecrets && stdenv.isLinux) "-DWITH_XC_FDOSECRETS=ON")
++ (lib.optional (withKeePassYubiKey && stdenv.isLinux) "-DWITH_XC_YUBIKEY=ON")
++ (lib.optional withKeePassBrowser "-DWITH_XC_BROWSER=ON")
++ (lib.optional withKeePassKeeShare "-DWITH_XC_KEESHARE=ON")
++ (lib.optional withKeePassNetworking "-DWITH_XC_NETWORKING=ON")
++ (lib.optional withKeePassSSHAgent "-DWITH_XC_SSHAGENT=ON");
doCheck = true;
checkPhase = ''
runHook preCheck
export LC_ALL="en_US.UTF-8"
export QT_QPA_PLATFORM=offscreen
export QT_PLUGIN_PATH="${qtbase.bin}/${qtbase.qtPluginPrefix}"
# testcli, testgui and testkdbx4 are flaky - skip them all
# testautotype on darwin throws "QWidget: Cannot create a QWidget without QApplication"
make test ARGS+="-E 'testcli|testgui${lib.optionalString stdenv.isDarwin "|testautotype|testkdbx4"}' --output-on-failure"
runHook postCheck
'';
nativeBuildInputs = [ asciidoctor cmake wrapGAppsHook wrapQtAppsHook qttools pkg-config ];
dontWrapGApps = true;
preFixup = ''
qtWrapperArgs+=("''${gappsWrapperArgs[@]}")
'' + lib.optionalString stdenv.isDarwin ''
wrapQtApp "$out/Applications/KeePassXC.app/Contents/MacOS/KeePassXC"
'';
# See https://github.com/keepassxreboot/keepassxc/blob/cd7a53abbbb81e468efb33eb56eefc12739969b8/src/browser/NativeMessageInstaller.cpp#L317
postInstall = lib.optionalString withKeePassBrowser ''
mkdir -p "$out/lib/mozilla/native-messaging-hosts"
substituteAll "${./firefox-native-messaging-host.json}" "$out/lib/mozilla/native-messaging-hosts/org.keepassxc.keepassxc_browser.json"
'';
buildInputs = [
curl
botan2
libXi
libXtst
libargon2
minizip
pcsclite
qrencode
qtbase
qtsvg
readline
zlib
]
++ lib.optional (stdenv.isDarwin && withKeePassTouchID) LocalAuthentication
++ lib.optional stdenv.isDarwin qtmacextras
++ lib.optional stdenv.isLinux libusb1
++ lib.optional withKeePassX11 qtx11extras;
passthru.tests = nixosTests.keepassxc;
meta = with lib; {
description = "Offline password manager with many features.";
longDescription = ''
A community fork of KeePassX, which is itself a port of KeePass Password Safe.
The goal is to extend and improve KeePassX with new features and bugfixes,
to provide a feature-rich, fully cross-platform and modern open-source password manager.
Accessible via native cross-platform GUI, CLI, has browser integration
using the KeePassXC Browser Extension (https://github.com/keepassxreboot/keepassxc-browser)
'';
homepage = "https://keepassxc.org/";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ jonafato srapenne blankparticle ];
platforms = platforms.linux ++ platforms.darwin;
};
}