Nathan Dwarshuis a1b5c64e62 | ||
---|---|---|
app | ||
lib | ||
scripts | ||
.gitignore | ||
.stylish-haskell.yaml | ||
LICENSE | ||
README.md | ||
make_pkgs | ||
package.yaml | ||
stack.yaml | ||
stack.yaml.lock |
README.md
rofi-extras
These are some personal programs that use the 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 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):
rofi-bw -d 60
Then launch the client to browse through the vault.
rofi-bw -c
Any options after -c
will be passed to rofi.
Dependencies
- 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:
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.
rofi-dev -s '/media/USER/foo:username=bar,hostname=example.com'
To simply prompt for a password, use the -p
option:
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: mounting MTP devices
- libnotify: desktop notifications
- libsecret: password lookup with
secret-tool
Autorandr (rofi-autorandr)
This allows selection of the 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 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