197 lines
5.3 KiB
Markdown
197 lines
5.3 KiB
Markdown
# rofi-extras
|
|
|
|
These are some personal programs that use the
|
|
[rofi](https://github.com/davatorium/rofi) interface.
|
|
|
|
## Installation
|
|
|
|
Clone this repo and run the following in the repo root.
|
|
|
|
Install packages needed for building:
|
|
|
|
```
|
|
pacman -S --needed - < make_pkgs
|
|
```
|
|
|
|
Build and install (choose individual targets as needed):
|
|
|
|
```
|
|
stack install
|
|
```
|
|
|
|
See individual sections for other dependencies to install.
|
|
|
|
## Bitwarden (rofi-bw)
|
|
|
|
[Bitwarden](https://bitwarden.com/) is an open-source password management server
|
|
and this program functions as a client. Unlike many other similar clients, this
|
|
only presents a simple lookup interface for usernames and passwords in the
|
|
vault; editing and creating entries is not in the intendend scope.
|
|
|
|
### Usage
|
|
|
|
This operates in a client/daemon fashion (locally, not with respect to the
|
|
bitwarden server). The daemon holds the session key and the client presents the
|
|
interface for username/password lookup.
|
|
|
|
Make sure `bw-cli` is properly configured to contact your bitwarden server using
|
|
`bw config server url.of.your.server`.
|
|
|
|
Start the daemon in `xinitrc` or similar. This will start the deamon with a
|
|
60 second timeout for the session key (after which you would need to enter a new
|
|
password):
|
|
|
|
``` sh
|
|
rofi-bw -d 60
|
|
```
|
|
|
|
Then launch the client to browse through the vault.
|
|
|
|
``` sh
|
|
rofi-bw -c
|
|
```
|
|
|
|
Any options after `-c` will be passed to rofi.
|
|
|
|
### Dependencies
|
|
- [bitwarden-cli](https://github.com/bitwarden/cli)
|
|
- libnotify: desktop notifications
|
|
|
|
## Device Mounting (rofi-dev)
|
|
|
|
This is a manual mounting helper for removable drives, MTP devices, and fstab
|
|
entries. It will transparently handle mountpoint creation/destruction.
|
|
|
|
### Usage
|
|
|
|
Launch the device manager:
|
|
|
|
``` sh
|
|
rofi-dev
|
|
```
|
|
|
|
Any options after `--` will be passed to rofi.
|
|
|
|
Select a device to mount/unmount it. Asterisks indicate that the device is
|
|
mounted and that selecting it will unmount it. Removable devices will be mounted
|
|
at the default for `usdisksctl` (usually `/run/media/USER`) and everything else
|
|
will be mounted in `/media/USER` unless the `-d` option is specified (see
|
|
`rofi-dev -h`). In the latter case the directory should be owned by the user.
|
|
|
|
Fstab entries should specify the `users` mount option (not `user`) to enable
|
|
non-root users to mount and unmount. The mountpoint should either be in
|
|
`/media/USER` (or whatever is specified by `-d`) or already exist.
|
|
|
|
### Credentials
|
|
|
|
For fstab entries, `rofi-dev` will attempt to obtain a password if no options
|
|
are supplied in the mount options (eg keyfiles for sshfs or credential files for
|
|
cifs).
|
|
|
|
To specifify that `/media/USER/foo` should use `secret-tool` to find its
|
|
password, specify the `-s` option. This would lookup a password for the entry
|
|
whose `username` is `bar` and `hostname` is `example.com`:
|
|
|
|
### Veracrypt
|
|
|
|
This tool can mount veracrypt vaults...with some hacky effort. Since veracrypt
|
|
works at the block device level, it needs root permissions to mount a volume
|
|
(which actually involves mounting several devices). The easiest way to make sure
|
|
this works is to give veracrypt sudo access like so:
|
|
|
|
```
|
|
<user> ALL=(root) NOPASSWD: /usr/bin/veracrypt,/usr/bin/uptime
|
|
```
|
|
|
|
No idea why `uptime` is also needed for this.
|
|
|
|
``` sh
|
|
rofi-dev -s '/media/USER/foo:username=bar,hostname=example.com'
|
|
```
|
|
|
|
To simply prompt for a password, use the `-p` option:
|
|
|
|
``` sh
|
|
rofi-dev -p '/media/USER/foo'
|
|
```
|
|
|
|
### Dependencies
|
|
- udisks2: removable drive mounting
|
|
- sshfs: mounting network devices in fstab over ssh
|
|
- cifs-utils: mounting network devices in fstab using CIFS/Samba
|
|
- veracrypt: to mount veracrypt vaults
|
|
- [jmtpfs](https://github.com/JasonFerrara/jmtpfs): mounting MTP devices
|
|
- libnotify: desktop notifications
|
|
- libsecret: password lookup with `secret-tool`
|
|
|
|
## Autorandr (rofi-autorandr)
|
|
|
|
This allows selection of the
|
|
[autorandr](https://github.com/phillipberndt/autorandr) configuration via a rofi
|
|
menu.
|
|
|
|
### Dependencies
|
|
|
|
- autorandr
|
|
|
|
## Bluetooth (rofi-bw)
|
|
|
|
This presents a nice menu to select the current bluetooth device.
|
|
|
|
### Dependencies
|
|
|
|
- bluez (which should provide the dbus interface for this to work)
|
|
|
|
## ExpressVPN (rofi-evpn)
|
|
|
|
This presents a menu to select the current ExpressVPN gateway.
|
|
|
|
### Dependencies
|
|
|
|
- expressvpn (from AUR)
|
|
- libnotify
|
|
|
|
## Pinentry (pinentry-rofi)
|
|
|
|
Analogous to the default [pinentry](https://github.com/gpg/pinentry) prompts,
|
|
this presents a rofi prompt for a password with the GPG keyring is unlocked.
|
|
|
|
Requires the following in `gpg-agent.conf`:
|
|
|
|
```
|
|
pinentry-program /path/to/pinentry-rofi
|
|
```
|
|
|
|
Unlike the other pinentry programs, this one can integrate with bitwarden (via
|
|
the above client) by retrieving the password for the gpg keyring if it is stored
|
|
in bitwarden. This requires a yaml configuration in the gpg home directoring as
|
|
such:
|
|
|
|
```
|
|
bitwarden-name: <name of GPG bitwarden entry>
|
|
```
|
|
|
|
### Dependencies
|
|
|
|
- rofi-bw (see above): bitwarden integration
|
|
|
|
## Putting Rofi on the correct screen (current-output)
|
|
|
|
This is a total hack...actually it isn't because it's written in Haskell and not
|
|
bash.
|
|
|
|
The problem is that when used with xmonad, rofi doesn't place itself on the
|
|
"current" workspace since the concept of a "workspace" is weird and specific to
|
|
xmonad. The solution is to use this program to query `_NET_DESKTOP_VIEWPORT`
|
|
(which my xmonad config sets) and use this determine the name of the active
|
|
workspace which can then be fed to rofi using the `-m` flag.
|
|
|
|
See comments of this binary for details.
|
|
|
|
### Dependencies
|
|
|
|
- X11
|
|
|
|
|
|
|