+4
CHANGELOG.md
+4
CHANGELOG.md
···
10
10
Tessen has been first archived by the original developer and maintainer, and then forked. This marks
11
11
the first new release under new maintenance.
12
12
13
+
### Added
14
+
15
+
- support for `prs` as a third password backend besides `pass` and `gopass`
16
+
13
17
## [2.2.3] - 2024-03-05
14
18
15
19
### Fixed
+9
-8
README.md
+9
-8
README.md
···
2
2
3
3
[](https://tangled.org/@jcg.re/tessen)
4
4
5
-
`tessen` is a bash script that can autotype and copy data from [password-store][1] and [gopass][2]
6
-
files. A wayland native dmenu is required to use tessen and the following dmenu backends are
7
-
recognized
5
+
`tessen` is a bash script that can autotype and copy data from [password-store][1], [gopass][2]
6
+
and [prs][36]. A wayland native dmenu is required to use tessen and the following dmenu backends
7
+
are recognized
8
8
9
9
- [fuzzel][4]
10
10
- [tofi][15]
···
24
24
25
25
### Why use `tessen`?
26
26
27
-
- `tessen` can autotype or copy (or do both at the same time!) your password store and gopass data
28
-
including all of your key-value pair data
27
+
- `tessen` can autotype or copy (or do both at the same time!) your password store, gopass and prs
28
+
data including all of your key-value pair data
29
29
30
30
From what the original author observed, most scripts out there do not autotype and copy all of
31
31
your key-value pair data. They also do not offer choices about autotyping or copying data with the
···
51
51
52
52
- [bash][16]
53
53
54
-
- at least one pass backend is needed - either [password-store][1] or [gopass][2]
54
+
- at least one pass backend is needed - either [password-store][1], [gopass][2] or [prs][36]
55
55
56
56
- at least one Wayland native dmenu backend, preferably [fuzzel][4], or [tofi][15], [bemenu][5],
57
57
[yofi][32], [wofi][6], [rofi][3]
···
130
130
131
131
## Features
132
132
133
-
- autotype or copy (or both at the same time!) data, including all valid key-value pairs, in pass
134
-
and gopass
133
+
- autotype or copy (or both at the same time!) data, including all valid key-value pairs, in pass,
134
+
gopass and prs
135
135
- generate TOTP/HOTP
136
136
- open URLs
137
137
- use custom values for `user`, `password`, `url`, `autotype` keys
···
228
228
[33]: https://social.treehouse.systems/@psykose/109967460650885493
229
229
[34]: https://pkgs.alpinelinux.org/packages?name=tessen
230
230
[35]: https://search.nixos.org/packages?query=tessen
231
+
[36]: https://timvisee.com/projects/prs/
+1
-1
config
+1
-1
config
···
4
4
# configuration file for tessen
5
5
# place this file in $XDG_CONFIG_HOME/tessen/config
6
6
7
-
# the default pass program to use - pass or gopass
7
+
# the default pass program to use - pass, gopass or prs
8
8
# pass_backend="pass"
9
9
10
10
# the default dmenu backend program to use - rofi, fuzzel, bemenu, rofi, or dmenu
+15
-15
man/tessen.1.scd
+15
-15
man/tessen.1.scd
···
2
2
3
3
# NAME
4
4
5
-
tessen - autotype and copy *pass*(1) and *gopass*(1) data on wayland
5
+
tessen - autotype and copy *pass*(1), *gopass*(1) and *prs*(1) data on wayland
6
6
7
7
# SYNOPSIS
8
8
···
11
11
# DESCRIPTION
12
12
13
13
tessen is a *bash*(1) script that helps to autotype and copy data encrypted
14
-
using *pass*(1) and *gopass*(1). It can also open URLs, generate HOTP and TOTP,
15
-
and execute custom autotype operations.
14
+
using *pass*(1), *gopass*(1) and *prs*(1). It can also open URLs, generate HOTP
15
+
and TOTP, and execute custom autotype operations.
16
16
17
17
tessen has been written for wlroots based wayland compositors like *sway*(1)
18
18
that support the virtual-keyboard-unstable-v1 protocol. It will NOT work on
···
21
21
The options understood by tessen are:
22
22
23
23
*-p*, *--pass*, *--pass=*[pass backend]
24
-
specify either *pass* or *gopass*
24
+
specify either *pass*, *gopass* or *prs*
25
25
26
26
*-d*, *--dmenu*, *--dmenu=*[dmenu backend]
27
27
specify a dmenu backend - the list of recognized backends are *fuzzel*,
···
41
41
42
42
## DEFAULT BEHAVIOR
43
43
44
-
If a pass backend is not specified, tessen tries to find either one of *pass*(1)
45
-
or *gopass*(1) in the order mentioned here.
44
+
If a pass backend is not specified, tessen tries to find either one of
45
+
*pass*(1), *gopass*(1) or *prs*(1) in the order mentioned here.
46
46
47
47
tessen assumes that the data organization format is the same as mentioned on
48
-
the home page of password store, when using *pass*(1) and *gopass*(1)
48
+
the home page of password store, when using *pass*(1), *gopass*(1) and *prs*(1)
49
49
50
50
https://www.passwordstore.org/#organization
51
51
···
67
67
If an action is not specified, tessen shows an additional menu with the option
68
68
to either autotype or copy data.
69
69
70
-
If data is copied, it will be removed from the clipboard after
71
-
*PASSWORD_STORE_CLIP_TIME* when using *pass*(1) and after *cliptimeout* when
72
-
using *gopass*(1). If *PASSWORD_STORE_CLIP_TIME* is not set, a default value of
73
-
15 seconds is assumed.
70
+
If data is copied, it will be removed from the clipboard after a timeout. The
71
+
timeout is read from *PASSWORD_STORE_CLIP_TIME* when using *pass*(1) and from
72
+
*cliptimeout* when using *gopass*(1). If no timeout is found, it falls back to a
73
+
default of 15 seconds.
74
74
75
75
A delay of 100 milliseconds will be used between successive autotype operations.
76
76
This can be changed using the 'delay' option in the *tessen*(5) configuration
···
95
95
- *bash*(1)
96
96
- at least one wayland native dmenu backend - *fuzzel*(1), *tofi*(1),
97
97
*bemenu*(1), *wofi*(1), *rofi*(1), *dmenu*
98
-
- at least one pass backend - either *pass*(1) or *gopass*(1)
98
+
- at least one pass backend - either *pass*(1), *gopass*(1) or *prs*(1)
99
99
- *wtype*(1) (if you want to autotype data)
100
100
- *wl-clipboard*(1) (if you want to copy and paste data)
101
101
- *scdoc*(1) (optional, to build this man page)
···
117
117
*tessen*(5) config file.
118
118
119
119
The *otpauth://* format is supported and used if *pass-otp*(1) is installed when
120
-
using *pass*(1). *gopass*(1) supports this feature natively.
120
+
using *pass*(1). *gopass*(1) and *prs*(1) support this feature natively.
121
121
122
122
A value for the 'autotype' key can be specified in password files for custom
123
123
autotype behavior which overrides the default behavior of autotyping the
···
191
191
192
192
# SEE ALSO
193
193
194
-
*tessen*(5), *pass*(1), *gopass*(1) *pass-otp*(1), *fuzzel*(1), *tofi*(1),
195
-
*bemenu*(1), *wofi*(1), *rofi*(1), *wl-clipboard*(1), *wtype*(1),
194
+
*tessen*(5), *pass*(1), *gopass*(1), *prs*(1), *pass-otp*(1), *fuzzel*(1),
195
+
*tofi*(1), *bemenu*(1), *wofi*(1), *rofi*(1), *wl-clipboard*(1), *wtype*(1),
196
196
*notify-send*(1)
197
197
198
198
# AUTHORS
+3
-3
man/tessen.5.scd
+3
-3
man/tessen.5.scd
···
35
35
36
36
*pass_backend*
37
37
38
-
The default pass backend to use - either *pass*(1) or *gopass*(1)
38
+
The default pass backend to use - either *pass*(1), *gopass*(1) or *prs*(1)
39
39
40
40
*dmenu_backend*
41
41
···
134
134
135
135
# SEE ALSO
136
136
137
-
*tessen*(5), *pass*(1), *gopass*(1) *pass-otp*(1), *fuzzel*(1), *tofi*(1),
138
-
*bemenu*(1), *wofi*(1), *rofi*(1), *wl-clipboard*(1), *wtype*(1),
137
+
*tessen*(5), *pass*(1), *gopass*(1), *prs*(1), *pass-otp*(1), *fuzzel*(1),
138
+
*tofi*(1), *bemenu*(1), *wofi*(1), *rofi*(1), *wl-clipboard*(1), *wtype*(1),
139
139
*notify-send*(1)
140
140
141
141
# AUTHORS
+16
-6
tessen
+16
-6
tessen
···
1
1
#!/usr/bin/env bash
2
2
# SPDX-License-Identifier: GPL-2.0-only
3
3
# Copyright (C) 2021-2024 Ayush Agarwal <ayush at ayushnix dot com>
4
+
# Copyright (C) 2025 JC Gr眉nhage <me at jcg dot re>
4
5
#
5
6
# tessen - a data selection interface for pass and gopass on Wayland
6
7
# ------------------------------------------------------------------------------
···
100
101
if [[ ${#passdata[@]} -eq 0 ]]; then
101
102
_die "the selected file is empty"
102
103
fi
104
+
elif [[ $_PASS_BACKEND == "prs" ]]; then
105
+
mapfile -t passdata < <(prs show --quiet "$_TSN_PASSFILE")
106
+
if [[ ${#passdata[@]} -eq 0 ]]; then
107
+
_die "the selected file is empty"
108
+
fi
103
109
elif [[ $_PASS_BACKEND == "gopass" ]]; then
104
110
# the output from gopass show -n -f that prints the first line and the
105
111
# newline before EOF doesn't use file descriptors but is printed only when
···
314
320
315
321
if [[ $_PASS_BACKEND == "pass" ]]; then
316
322
tmp_otp="$(pass otp "$_TSN_PASSFILE")"
323
+
elif [[ $_PASS_BACKEND == "prs" ]]; then
324
+
tmp_otp="$(prs otp show --quiet "$_TSN_PASSFILE")"
317
325
elif [[ $_PASS_BACKEND == "gopass" ]]; then
318
326
tmp_otp="$(gopass otp -o "$_TSN_PASSFILE")"
319
327
fi
···
394
402
printf "%s\n" "invalid clipboard timeout value in PASSWORD_STORE_CLIP_TIME" >&2
395
403
return 1
396
404
fi
405
+
elif [[ $_PASS_BACKEND == "prs" ]]; then
406
+
tsn_cliptime="15"
397
407
elif [[ $_PASS_BACKEND == "gopass" ]]; then
398
408
tsn_cliptime="$(gopass config core.cliptimeout)"
399
409
tsn_cliptime="${tsn_cliptime##*: }"
···
430
440
431
441
validate_pass_backend() {
432
442
if ! is_installed "$1"; then
433
-
_die "please install a valid password store backend: pass | gopass"
443
+
_die "please install a valid password store backend: pass | gopass | prs"
434
444
fi
435
-
if [[ $1 == "pass" ]] || [[ $1 == "gopass" ]]; then
445
+
if [[ $1 == "pass" ]] || [[ $1 == "gopass" ]] || [[ $1 == "prs" ]]; then
436
446
_PASS_BACKEND="$1"
437
447
else
438
-
_die "please specify a valid password store backend: pass | gopass"
448
+
_die "please specify a valid password store backend: pass | gopass | prs"
439
449
fi
440
450
}
441
451
···
526
536
}
527
537
528
538
find_pass_backend() {
529
-
local -a tmp_pass_arr=('pass' 'gopass')
539
+
local -a tmp_pass_arr=('pass' 'gopass' 'prs')
530
540
local idx
531
541
532
542
for idx in "${tmp_pass_arr[@]}"; do
···
536
546
fi
537
547
done
538
548
if [[ -z $_PASS_BACKEND ]]; then
539
-
_die "please install a valid password store backend: pass | gopass"
549
+
_die "please install a valid password store backend: pass | gopass | prs"
540
550
fi
541
551
542
552
unset -v idx tmp_pass_arr
···
811
821
fi
812
822
813
823
trap '_clear' EXIT TERM INT
814
-
if [[ $_PASS_BACKEND == "pass" ]]; then
824
+
if [[ $_PASS_BACKEND == "pass" ]] || [[ $_PASS_BACKEND == "prs" ]]; then
815
825
get_pass_files
816
826
elif [[ $_PASS_BACKEND == "gopass" ]]; then
817
827
get_gopass_files
Submissions
pull request successfully merged