tessen(1)

πŸ“¦
version 2.2.1 Β· 3 versions
, in alpine 3.24

✨ tessen β€” the girlies' guide to autotyping your secrets ✨

okay so real talk: this is tessen(1), from the General Commands Manual section, and it's about to become your new bestie if you live in a wayland world. let's get into it πŸ’…


🌸 NAME 🌸

tessen β€” autotype and copy pass(1) and gopass(1) data on wayland. that's the whole vibe. no cap.


πŸŽ€ SYNOPSIS πŸŽ€

tessen [-hv] [-p pass backend] [-d dmenu backend] [-a action] [-c config
file]
lowkey just read it, it's giving "simple command, big power" πŸ’–

πŸ¦‹ DESCRIPTION πŸ¦‹

tessen is a bash(1) script that helps you autotype and copy data encrypted with pass(1) and gopass(1). and bestie, it does more β€” it can also open URLs, generate HOTP and TOTP, and run custom autotype operations. main character energy fr fr.

here's the important part: tessen was written for wlroots based wayland compositors like sway(1) that support the virtual-keyboard-unstable-v1 protocol. it will NOT work on window managers and desktop environments based on X.Org/X11. like, it's just not gonna happen. πŸ’€

so here are the options tessen understands, bestie:

  • -p, --pass, --pass=[pass backend] β€” pick either pass or gopass. that's it, that's the choice 🫢
  • -d, --dmenu, --dmenu=[dmenu backend] β€” pick your dmenu backend. the recognized backends are fuzzel, tofi, bemenu, yofi, wofi, rofi, and dmenu ✨
  • -a, --action, --action=[action] β€” specify either autotype, copy, or both πŸŽ€
  • -c, --config, --config=[location of config file] β€” specify the location of the config file for tessen(5) πŸ’–
  • -h, --help β€” show a brief help message. cute and quick 🌸
  • -v, --version β€” show the installed version number of tessen πŸ‘‘

🌈 DEFAULT BEHAVIOR 🌈

if a pass backend isn't specified, tessen tries to find either one of pass(1) or gopass(1) β€” in the order mentioned here. iykyk.

tessen assumes the data organization format is the same as the one mentioned on the home page of password store, when using pass(1) and gopass(1):

https://www.passwordstore.org/#organization

the first line should always have the password, and nothing else. periodt. all the other lines may have key-value pairs like key1: value1 or an otpauth:// format URI. if non-unique keys are found, the first non-unique key will be considered and the others will be ignored (sorry to the duplicates, you're not the main character). if a key called password is present, it will also be ignored. the autotype, url, username, and password keys are considered case-insensitive β€” slay. and heads up: tessen does NOT support parsing YAML files when using gopass(1) πŸ™ˆ

if a dmenu backend isn't specified, tessen tries to find either one of fuzzel(1), tofi(1), bemenu(1), yofi, wofi(1), rofi(1) or dmenu in the order mentioned here. if rofi is used, it is expected that the wayland native fork of rofi (https://github.com/lbonn/rofi) is being used. the original rofi (https://github.com/davatorium/rofi) implementation made for X.Org is NOT supported. like, at all. πŸ’€

if an action isn't specified, tessen shows an additional menu with the option to either autotype or copy data. yes, it's asking you to make a decision. you got this 🫢

if data is copied, it will be removed from the clipboard after PASSWORD_STORE_CLIP_TIME when using pass(1), and after cliptimeout when using gopass(1). if PASSWORD_STORE_CLIP_TIME isn't set, a default value of 15 seconds is assumed. so like... grab it fast ⏳

a delay of 100 milliseconds will be used between successive autotype operations. this can be changed using the delay option in the tessen(5) configuration file. tiny pause, big difference ✨

tessen will look for a configuration file in the following locations:

  • $XDG_CONFIG_HOME/tessen/config
  • $HOME/.config/tessen/config
  • $XDG_CONFIG_DIRS/tessen/config
  • /etc/xdg/tessen/config

a custom location can be specified using the -c flag. πŸ’…

and the hierarchy is real: command line flags have the highest preference and supersede equivalent options set in the config file. the flags ate, ngl πŸ‘‘


🧚 DEPENDENCIES 🧚

tessen depends on:

collect them like stickers bestie, some are optional but honestly the optional ones are iconic πŸ’–

πŸ’œ ADDITIONAL FEATURES πŸ’œ

if a key called user is present inside a password file, its value will be the default username instead of the basename of the selected file. this key can be modified using the userkey variable in the tessen(5) configuration file. πŸŽ€

if a key called url is present, an option to open the value of the url key in the default web browser will be shown instead of auto type. this becomes the default behavior if -a autotype option is provided during the execution of tessen. the url key can be modified using the urlkey variable in the tessen(5) config file. 🌈

the otpauth:// format is supported and used if pass-otp(1) is installed when using pass(1). gopass(1) supports this feature natively. no extra steps, we love that 🫢

a value for the autotype key can be specified in password files for custom autotype behavior, which overrides the default behavior of autotyping the username and the password. for example:

$ pass example/john
mypassword
key1: value1
key2: value2
key3: value3
key4: value4
otpauth://totp/ACME%20Co:john@example.com?secret=HXDMVJECJJWSRB3HWIZR4IF...
autotype: key1 :tab key2 :space key3 :enter key4 :delay :tab :otp pass

when specified as a value of the autotype key:

  • :tab can be used to type the Tab key
  • :space can be used to type the Space key
  • :enter can be used to type the Enter key
  • :delay can be used to delay the type operation by 1 second
  • :otp can be used to generate and type the OTP, if otpauth:// is present
  • user, or the value of user in the config file, can be used to type the username
  • pass or password can be used to type the password
  • path, basename, or filename can be used to type the name of the selected file
  • any other key, such as key1, can be specified to print its value

the autotype key can be changed using the autotype_key variable in the tessen(5) configuration file. πŸ’…

if the dmenu program of your choice supports custom keybindings with exit codes greater than or equal to 10, tessen can execute custom operations on a selected file in the first menu. at the very least, fuzzel(1), bemenu(1), and rofi(1) support this feature. the following exit codes have been mapped to the actions mentioned besides them:

  • 10 β€” auto type username and password
  • 11 β€” auto type username
  • 12 β€” auto type password
  • 13 β€” open URL
  • 14 β€” copy username
  • 15 β€” copy password
  • 16 β€” copy URL
  • 17 β€” auto type OTP
  • 18 β€” copy OTP

these exit codes can be mapped to custom keybindings by configuring the dmenu program of your choice. go off, customize your little heart out πŸ‘‘


⭐ FILES ⭐

  • $XDG_CONFIG_HOME/tessen/config, $HOME/.config/tessen/config, $XDG_CONFIG_DIRS/tessen/config, /etc/xdg/tessen/config β€” the default configuration file for tessen. it can be used to specify all the options provided by the command line flags and additional customization options for keys interpreted by tessen. πŸ“

πŸ’€ SEE ALSO πŸ’€

tessen(5), pass(1), gopass(1) pass-otp(1), fuzzel(1), tofi(1), bemenu(1), wofi(1), rofi(1), wl-clipboard(1), wtype(1), notify-send(1)


πŸ‘‘ AUTHORS πŸ‘‘

developed and maintained by Ayush Agarwal <ayush at ayushnix dot com>. 🫢

the latest source can be found at https://git.sr.ht/~ayushnix/tessen and bugs or suggestions can be reported on https://todo.sr.ht/~ayushnix/tessen. for contributing to tessen, please read the CONTRIBUTING.md file in the tessen source code and send patches by email to ~ayushnix/tessen@lists.sr.ht. alternatively, pull requests can be raised on https://codeberg.org/ayushnix/tessen/pulls or https://github.com/ayushnix/tessen/pulls. πŸ’–


and that's the whole page bestie!! this little icon was dated 2023-07-29 and it's page tessen(1) of the manual β€” go forth and autotype responsibly πŸ’…βœ¨πŸŽ€
πŸ“¦ where this page comes from