qutebrowser profile manager
1# qutebrowser profile manager 2 3[![builds.sr.ht status](https://builds.sr.ht/~pvsr/qbpm/commits/main.svg)](https://builds.sr.ht/~pvsr/qbpm/commits/main?) 4[![PyPI](http://img.shields.io/pypi/v/qbpm.svg)](https://pypi.python.org/pypi/qbpm) 5 6qbpm (qutebrowser profile manager) is a tool for creating, managing, and running 7[qutebrowser](https://github.com/qutebrowser/qutebrowser) profiles. Profile support 8isn't built in to qutebrowser, at least not directly, but it does have a `--basedir` flag 9which allows qutebrowser to use any directory as the location of its config and 10data and effectively act as a profile. qbpm creates profiles that source your 11main qutebrowser `config.py`, but have their own separate `autoconfig.yml`, bookmarks, cookies, 12history, and other data. Profiles can be run by starting qutebrowser with the 13appropriate `--basedir`, or more conveniently using the `qbpm launch` and `qbpm choose` commands. 14 15qutebrowser shares session depending on the basedir, so launching the same 16profile twice will result in two windows sharing a session, which means running 17`:quit` in one will exit both and launching the profile again will reopen both 18windows. But launching two distinct profiles will start two entirely separate 19instances of qutebrowser which can be opened and closed independently. 20 21## Usage 22To create a new profile called "python" and launch it with the python docs open: 23``` 24$ qbpm new python 25$ qbpm launch python docs.python.org 26``` 27 28Note that all arguments after `qbpm launch PROFILE` are passed to qutebrowser, 29so options can be passed too: `qbpm launch python --target window pypi.org`. 30 31If you have multiple profiles you can use `qbpm choose` to bring up a list of 32profiles and select one to launch. Depending on what your system has available 33the menu may be `dmenu`, `fuzzel`, `fzf`, an applescript dialog, or one of many 34other menu programs qbpm can detect. Any dmenu-compatible menu can be used with 35`--menu`, e.g. `qbpm choose --menu 'fuzzel --dmenu'`. As with `qbpm launch`, 36extra arguments are passed to qutebrowser. 37 38Run `qbpm --help` to see other available commands. 39 40By default when you create a new profile a `.desktop` file is created that 41launches the profile. This launcher does not depend on qbpm at all, so if you 42want you can run `qbpm new` once and keep using the profile without needing 43qbpm installed on your system. 44 45## Installation 46If you use Nix, you can install or run qbpm as a [Nix flake](https://nixos.wiki/wiki/Flakes). 47For example, to run qbpm without installing it you can use `nix run github:pvsr/qbpm -- new my-profile`. 48 49On Arch and derivatives, you can install the AUR package: [qbpm-git](https://aur.archlinux.org/packages/qbpm-git). 50 51Otherwise you can install directly from PyPI using [uv](https://docs.astral.sh/uv/guides/tools/), 52pip, or your preferred client. With uv it's `uv tool run qbpm` to run qbpm 53without installing and `uv tool install qbpm` to install to `~/.local/bin`. 54The downside of going through PyPI is that the [man page](https://github.com/pvsr/qbpm/blob/main/qbpm.1.scd) 55and shell completions will not be installed automatically. 56 57On Linux you can copy [`contrib/qbpm.desktop`](https://raw.githubusercontent.com/pvsr/qbpm/main/contrib/qbpm.desktop) 58to `~/.local/share/applications` to create a qbpm desktop application that runs 59`qbpm choose`. 60 61### MacOS 62 63Nix and uv will install qbpm as a command-line application, but if you want a 64native Mac application you can download [`contrib/qbpm.platypus`](https://raw.githubusercontent.com/pvsr/qbpm/main/contrib/qbpm.platypus), 65install [platypus](https://sveinbjorn.org/platypus), and create a qbpm app with 66`platypus -P qbpm.platypus /Applications/qbpm.app`. That will also make qbpm 67available as a default browser in `System Preferences > General > Default web browser`. 68 69Note that there is currently [a qutebrowser bug](https://github.com/qutebrowser/qutebrowser/issues/3719) 70that results in unnecessary `file:///*` tabs being opened.