pkgs: add rbw-pass

This is honestly almost overkill, as the script doesn't really have any
logic in it, but it's good to have a common base with the bitwarden-cli
one.
This commit is contained in:
Bruno BELANYI 2023-07-23 18:44:08 +01:00
parent 2dfc788ed4
commit 8f818b8611
3 changed files with 85 additions and 0 deletions

View file

@ -26,6 +26,8 @@ pkgs.lib.makeScope pkgs.newScope (pkgs: {
osc52 = pkgs.callPackage ./osc52 { };
rbw-pass = pkgs.callPackage ./rbw-pass { };
unbound-zones-adblock = pkgs.callPackage ./unbound-zones-adblock { };
unified-hosts-lists = pkgs.callPackage ./unified-hosts-lists { };

40
pkgs/rbw-pass/default.nix Normal file
View file

@ -0,0 +1,40 @@
{ lib, coreutils, makeWrapper, rbw, rofi, stdenvNoCC }:
stdenvNoCC.mkDerivation rec {
pname = "rbw-pass";
version = "0.1.0";
src = ./rbw-pass;
nativeBuildInputs = [
makeWrapper
];
dontUnpack = true;
dontBuild = true;
installPhase = ''
mkdir -p $out/bin
cp $src $out/bin/${pname}
chmod a+x $out/bin/${pname}
'';
wrapperPath = lib.makeBinPath [
rbw
coreutils
rofi
];
fixupPhase = ''
patchShebangs $out/bin/${pname}
wrapProgram $out/bin/${pname} --prefix PATH : "${wrapperPath}"
'';
meta = with lib; {
description = "A simple script to query a password from rbw";
homepage = "https://git.belanyi.fr/ambroisie/nix-config";
license = with licenses; [ mit ];
platforms = platforms.linux;
maintainers = with maintainers; [ ambroisie ];
};
}

43
pkgs/rbw-pass/rbw-pass Executable file
View file

@ -0,0 +1,43 @@
#!/usr/bin/env bash
usage() {
printf '%s\n' "Usage: bw-pass [directory name] <account name>" >&2
}
error_out() {
printf '%s\n' "$1" >&2
rofi -dmenu -no-fixed-num-lines -p "$1"
exit 1
}
ensure_logged_in() {
rbw login
}
query_password() {
# Either use with `query_password <directory> <account name>
# Or `query_password <account name>` when the account has no directory
local FOLDER_ARGS=()
local PASSWORD
# FIXME: no way to enforce filering by "no folder"
if [ $# -eq 2 ]; then
FOLDER_ARGS+=(--folder "$1")
shift
fi
PASSWORD="$(rbw get "${FOLDER_ARGS[@]}" "$1")"
if [ -z "$PASSWORD" ]; then
error_out "Did not find password for '$1'"
fi
printf '%s\n' "$PASSWORD"
}
if [ $# -lt 1 ] || [ $# -gt 2 ]; then
usage
exit 1
fi
ensure_logged_in
query_password "$@"