summaryrefslogtreecommitdiff
path: root/README.md
blob: ebf1e7f5f5b9479f1218d2b91a8eedb46111fc20 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
## tessen

A bash script that uses either [bemenu](https://github.com/Cloudef/bemenu) or
[rofi](https://github.com/lbonn/rofi) as an interface for auto-typing and copying [password
store](https://www.passwordstore.org/) data.

`tessen` is written to work only on Wayland.

If you'd rather use [fzf](https://github.com/junegunn/fzf) to copy your password-store data on both
Xorg/X11 and Wayland, check out [pass-tessen](https://github.com/ayushnix/pass-tessen).

## Installation

### Dependencies

- [pass](https://git.zx2c4.com/password-store/)
- either [bemenu](https://github.com/Cloudef/bemenu) or [rofi](https://github.com/lbonn/rofi)
- [wtype](https://github.com/atx/wtype) (if you want to auto-type data)
- [wl-clipboard](https://github.com/bugaevc/wl-clipboard) or
  [wl-clipboard-rs](https://github.com/YaLTeR/wl-clipboard-rs) (if you want to copy data)
- [libnotify](https://gitlab.gnome.org/GNOME/libnotify) (to send notifications about copied data)

### Arch Linux

`tessen` is available in the [Arch User Repository](https://aur.archlinux.org/packages/tessen/).

### Git Release

```
git clone https://github.com/ayushnix/tessen.git
cd pass-tessen
sudo make install
```

You can also do `doas make install` if you're using [doas](https://github.com/Duncaen/OpenDoas),
which you probably should.

### Stable Release

```
wget https://github.com/ayushnix/tessen/releases/download/v2.0.0/tessen-2.0.0.tar.gz
tar xvzf tessen-2.0.0.tar.gz
cd tessen-2.0.0
sudo make install
```

or, you know, `doas make install`.

## Usage

```
tessen - autotype and copy data from password-store on wayland

Usage: tessen [options]

  tessen                        use bemenu and either autotype OR copy data
  tessen -b rofi                use rofi and either autotype OR copy data
  tessen -b rofi -a autotype    use rofi and always autotype data
  tessen -b rofi -a copy        use rofi and always copy data
  tessen -b rofi -a both        use rofi and always autotype AND copy data

  -b, --backend, --backend=     choose 'bemenu' or 'rofi' as backend (default: bemenu)
  -a, --action, --action=       choose one of 'autotype|copy|both'
  -h, --help                    print this help menu
  -v, --version                 print the version of tessen
```

## Why should I use `tessen`?

- `tessen` can autotype or copy (or perform both operations simultaenously, your choice) your
  password store data including all of your key-value pair data, besides passwords, on Wayland

  Most scripts out there (as of this writing) do not autotype and copy your key-value pair data.
  They just work with your passwords or a limited set of key-value pairs assumed in the script. They
  also do not offer choices about autotyping or copying data with the same flexibility as `tessen`
  does.

  Also, as of this writing, I haven't come across any scripts with the same feature set and code
  quality as `tessen` that works on Wayland.

- `tessen` focuses on writing code that is easy to understand and modify for even beginners to shell
  scripting

- `tessen` tries to minimize the number of external binaries used in the script for speed and
  efficiency. Besides the dependencies mentioned above, `tessen` doesn't use programs like `sed`,
  `awk`, `tr`, `cut`, `find`, `sort`, `head`, `tail`, and other GNU coreutils, often used casually
  by people when writing shell scripts

- `tessen` tries to focus on security

  Please report any security issues if you find them.

## Caveats :warning:

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 just after the other and links are insert
between them. In such cases, autotyping can make a real mess.

Autotyping also does not work on Chromium based browsers on Wayland when using
[v0.3](https://github.com/atx/wtype/releases/tag/v0.3) release of `wtype`. However, it works fine on
Firefox.

## Assumptions

`tessen` works under several assumptions and tries to fail gracefully if they are not met. Please
report any unexpected behavior.

The data organization format is assumed to be the same as mentioned on this
[page](https://www.passwordstore.org/). If valid key-value pairs aren't found, `tessen` will not
show them.

It is assumed that the name of the file itself is the username. For example, if you have a file
`bank/mybankusername.gpg` in your password store, the assumed default username is `mybankusername`.
However, if a valid username key value pair is present inside the file, `tessen` will show them for
selection as well.

If there are multiple non-unique keys, the value of the last key will be considered.

## What does `tessen` mean?

[Here](https://en.wikipedia.org/wiki/Japanese_war_fan) you go.

## Why did you choose this weird name?

Because obvious names like pass-fzf and pass-clip are already taken by other projects? Also, for
some reason, the way how FZF'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.

## Contributions

Please see [this](https://github.com/ayushnix/tessen/blob/master/CONTRIBUTING.md) file.

## Features that WON'T be implemented

- xorg/x11 support, use [rofi-pass](https://github.com/carnager/rofi-pass) or fork this repo and
  implement it yourself
- using [ydotool](https://github.com/ReimuNotMoe/ydotool), because it needs root access