qass 0.4.0

Offline password manager
{
  description = "Offline password manager";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";

    tomers = {
      url = "github:boralg/tomers";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs =
    { nixpkgs, tomers, ... }:
    tomers.inputs.flake-utils.lib.eachDefaultSystem (
      system:
      let
        pkgs = nixpkgs.legacyPackages.${system};
        targetPlatforms =
          let
            toolchainPackages =
              fenixPkgs: crossFenixPkgs: with fenixPkgs; [
                latest.rustfmt
                stable.rustc
                stable.cargo
                crossFenixPkgs.stable.rust-src
                crossFenixPkgs.stable.rust-std
              ];
            libPath =
              with pkgs;
              lib.makeLibraryPath [
                xdotool
                libxkbcommon
                wayland
                xorg.libX11
                xorg.libXrandr
                xorg.libXrender
                xorg.libXcursor
                xorg.libxcb
                xorg.libXi
                libGL
                vulkan-loader
              ];
          in
          [
            {
              system = "x86_64-unknown-linux-gnu";
              arch = "x86_64-linux";
              inherit toolchainPackages;
              depsBuild = with pkgs; [
                patchelf
                pkg-config
                xorg.libX11
                xdotool
                libxkbcommon
              ];
              postInstall = crateName: ''
                find $out -type f -exec sh -c '
                  if file "$1" | grep -q "ELF .* executable"; then
                    patchelf --set-interpreter "/lib64/ld-linux-x86-64.so.2" "$1"
                  fi
                ' sh {} \;
              '';
              postInstallNixStore = crateName: ''
                find $out -type f -exec sh -c '
                  if file "$1" | grep -q "ELF .* executable"; then
                    patchelf --set-rpath "${libPath}" "$1"
                  fi
                ' sh {} \;
              '';
              env = {
                buildInputs = with pkgs; [
                  xdotool
                ];
                LD_LIBRARY_PATH = libPath;
                dontPatchELF = true; # do not compress RPATH since winit uses dlopen
              };
            }
          ];
        tomersLib = tomers.libFor system targetPlatforms;
      in
      rec {
        packagesForEachPlatform = tomersLib.packagesForEachPlatform;
        devShellsForEachPlatform = tomersLib.devShellsForEachPlatform;

        packages = packagesForEachPlatform ./.;
        devShells = devShellsForEachPlatform ./.;
      }
    );
}