tessen
is a bash script that can autotype and copy data from password-store and gopass
files. A wayland native dmenu is required to use tessen and the following dmenu backends are
recognized
As of version 2.2.0 of tessen, fuzzel is the default dmenu backend.
If you want to add another Wayland native dmenu not mentioned above, please see the
CONTRIBUTING.md file for information about how to contribute to tessen
.
tessen
is written to work only on wayland wlroots compositors such as sway that support the
virtual-keyboard-unstable-v1
protocol. If you'd rather use a fuzzy data selection program like
fzf to copy your password-store data on both Xorg/X11 and Wayland, check out pass-tessen.
-
tessen
can autotype or copy (or do both at the same time!) your password store and gopass data including all of your key-value pair dataFrom what I've observed, most scripts out there do not autotype and copy all of your key-value pair data. They also do not offer choices about autotyping or copying data with the same flexibility as
tessen
does.Although rofi-pass is a good alternative, it only works on Xorg/X11.
tessen
is made to work on Wayland. -
if you're using a web browser extension to access your passwords, you may wanna read an article by Tavis Ormandy on Password Managers
-
tessen
does not use any external programs unless absolutely necessary. This means thattessen
doesn't need programs likesed
,awk
,tr
,cut
,find
,sort
,head
,tail
(although password-store needs them). -
the code is linted using shellcheck and formatted using shfmt. I've also tried to ensure that
tessen
doesn't leak any sensitive data. Please raise an issue or a pull request if you can make tessen more minimalistic or secure.
-
at least one pass backend is needed - either password-store or gopass
-
at least one Wayland native dmenu backend, preferably fuzzel, or tofi, bemenu, yofi, wofi, rofi
-
at least one (or both if needed) action backend - wtype or wl-clipboard
-
libnotify (optional, to send notifications about copied data and the timeout period after which the clipboard will be cleared)
-
pass-otp (optional, to generate TOTP/HOTP when using
pass
) -
xdg-utils (optional, to open URLs in the default web browser)
-
scdoc (optional, to build the man pages)
tessen
is available in the Arch User Repository.
tessen
is available in the official GNU Guix repository.
git clone https://git.sr.ht/~ayushnix/tessen
cd tessen
sudo make install
You can also do doas make install
if you're using doas on Linux, which you probably
should.
curl -LO https://git.sr.ht/~ayushnix/tessen/refs/download/v2.2.0/tessen-2.2.0.tar.gz
tar xvzf tessen-2.2.0.tar.gz
cd tessen-2.2.0/
sudo make install
or, you know, doas make install
.
There's an optional patch provided in the repository called explicit_path.patch
which can be used
to change the shebang from #!/usr/bin/env bash
to #!/bin/bash
. It also exports $PATH
to
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
to prevent execution of arbitrary binaries not owned by the root user. If you want to apply this patch, execute
make expatch
before executing sudo make install
. This patch should make tessen
work fine on almost all Linux
distributions except perhaps NixOS and GuixSD.
If you don't want to install the man pages or the shell completion files, you can use
sudo make minimal
to install the tessen
and its default configuration file and nothing else. The man pages can be
installed if needed using sudo make man
, the bash completion file can be installed using sudo make bashcomp
, and the fish completion file can be installed using sudo make fishcomp
. For more
information, use make help
.
- autotype or copy (or both at the same time!) data, including all valid key-value pairs, in pass and gopass
- generate TOTP/HOTP
- open URLs
- use custom values for
user
,password
,url
,autotype
keys - use custom autotype operations
- use custom delay time for autotype
Please read the man page for more information.
The reason why tessen
offers flexibility between autotyping and copying data is because autotyping
may not always work accurately. There can be several reasons for this.
One of the reasons when autotype doesn't work is when a web page doesn't follow the standard
expectation of having a username and password text field one after the other and links are inserted
between them. A good example is the login popup offered by Discourse. In such cases, autotyping can
make a real mess. This is why tessen
also provides an option to define custom autotype operations.
tessen
uses wtype for autotyping and it seems to work fine on Firefox. You'll need at least
version v0.4, or later, of wtype for autotyping to work on Chromium although I've experienced
issues on some websites when autotyping on Chromium using wtype
. I haven't tested any other web
browsers.
It also seems like autotyping on Wayland is in somewhat of a mess right now. An issue tracker on the
the wayland-protocols repository by Roman Gilg titled Input Method Hub presents an overview on
the state of things. As of version 1.7 of sway, the input-method-unstable-v2.xml
protocol and
the virtual-keyboard-unstable-v1.xml
protocol (which is what wtype
implements) are supported.
There's ydotool but it requires root access to access /dev/uinput
, which makes it
unattractive.
Because obvious names like pass-fzf and pass-clip are already taken by other projects? Also, for some reason, the way how bemenu and fuzzel's UI instantly opens up and displays relevant information reminded me of Japanese hand fans. I guess I was thinking of some anime while coming up with this name.
Please see the CONTRIBUTING.md file.
-
Xorg/X11 support
either use rofi-pass or fork this repository and implement it yourself
-
using ydotool, because it needs root access
-
adding, editing, or removing existing password store data
-
cache for storing frequently used password store selection data
-
importing passwords or exporting them
If you feel that this project helped you transition to Wayland, please consider supporting me by buying me a coffee.
If you're in India, you can also use UPI for donations. My UPI address is ayushnix@ybl
.
Alternatively, scan this QR code in a UPI application.