Unverified Commit 32adfce1 authored by Sandro Jäckel's avatar Sandro Jäckel
Browse files

goldwarden: package GUI, drop pinentry

The correct way is to use goldwarden through the programs.goldwarden module
and the correct pinentry flavor based on programs.gnupg.agent.pinentryFlavor is now used.
parent 3b2d1beb
Loading
Loading
Loading
Loading
+53 −11
Original line number Diff line number Diff line
{ lib
, bash
, buildGoModule
, fetchFromGitHub
, makeBinaryWrapper
, gobject-introspection
, gtk4
, libadwaita
, libfido2
, dbus
, pinentry-gnome3
, nix-update-script
, libnotify
, python3
, wrapGAppsHook
}:

buildGoModule rec {
@@ -19,25 +22,64 @@ buildGoModule rec {
    hash = "sha256-4KxPtsIEW46p+cFx6yeSdNlsffy9U31k+ZSkE6V0AFc=";
  };

  postPatch = ''
    substituteInPlace browserbiometrics/manifests.go \
      --replace-fail "/bin/bash" "${lib.getExe bash}"
    substituteInPlace gui/com.quexten.Goldwarden.desktop \
      --replace-fail "Exec=goldwarden_ui_main.py" "Exec=$out/bin/goldwarden-gui"
    substituteInPlace gui/src/gui/browserbiometrics.py \
      --replace-fail "flatpak run --filesystem=home --command=goldwarden com.quexten.Goldwarden" "goldwarden"
    substituteInPlace gui/src/gui/ssh.py \
      --replace-fail "flatpak run --command=goldwarden com.quexten.Goldwarden" "goldwarden" \
      --replace-fail 'SSH_AUTH_SOCK=/home/$USER/.var/app/com.quexten.Goldwarden/data/ssh-auth-sock' 'SSH_AUTH_SOCK=/home/$USER/.goldwarden-ssh-agent.sock'
    substituteInPlace gui/src/{linux/main.py,linux/monitors/dbus_monitor.py,gui/settings.py} \
      --replace-fail "python3" "${(python3.buildEnv.override { extraLibs = pythonPath; }).interpreter}"
  '';

  vendorHash = "sha256-IH0p7t1qInA9rNYv6ekxDN/BT5Kguhh4cZfmL+iqwVU=";

  ldflags = [ "-s" "-w" ];

  nativeBuildInputs = [makeBinaryWrapper];
  nativeBuildInputs = [
    gobject-introspection
    python3.pkgs.wrapPython
    wrapGAppsHook
  ];

  buildInputs = [libfido2];
  buildInputs = [
    gtk4
    libadwaita
    libfido2
    libnotify
  ];

  pythonPath = with python3.pkgs; [
    dbus-python
    pygobject3
    tendo
  ];

  postInstall = ''
    wrapProgram $out/bin/goldwarden \
      --suffix PATH : ${lib.makeBinPath [dbus pinentry-gnome3]}
    chmod +x gui/goldwarden_ui_main.py
    ln -s $out/share/goldwarden/goldwarden_ui_main.py $out/bin/goldwarden-gui
    mkdir -p $out/share/goldwarden
    cp -r gui/* $out/share/goldwarden/
    rm $out/share/goldwarden/{com.quexten.Goldwarden.desktop,com.quexten.Goldwarden.metainfo.xml,goldwarden.svg,python3-requirements.json,requirements.txt}

    install -Dm644 $src/resources/com.quexten.goldwarden.policy -t $out/share/polkit-1/actions
    install -D gui/com.quexten.Goldwarden.desktop -t $out/share/applications
    install -D gui/goldwarden.svg -t $out/share/icons/hicolor/scalable/apps
    install -Dm644 gui/com.quexten.Goldwarden.metainfo.xml -t $out/share/metainfo
    install -Dm644 resources/com.quexten.goldwarden.policy -t $out/share/polkit-1/actions
  '';

  passthru.updateScript = nix-update-script {};
  dontWrapGApps = true;
  postFixup = ''
    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
    wrapPythonProgramsIn $out/share/goldwarden "$out/share/goldwarden $pythonPath"
  '';

  meta = with lib; {
    description = "A feature-packed Bitwarden compatible desktop integration";
    description = "Feature-packed Bitwarden compatible desktop integration";
    homepage = "https://github.com/quexten/goldwarden";
    license = licenses.mit;
    maintainers = with maintainers; [ arthsmn ];