defaultmgr 0.5.0

System for choosing default applications, programs, and utilities
# default

System for choosing default applications, programs, and utilities

---

TODO: generate executables for fast exec

## Use Cases

Like `update-alternatives`, but local to user and more flexible. Requires a database of applications and their defaults at `"${XDG_CONFIG_HOME:-$HOME/.config}/chooses/defaults"`

1. Launch with file

Control which applications are selected when opening a file. This works irrespective of the desktop environment. `xdg-open` falls flat because it doesn't work with directories. Furthermore, different applications can be configured to work in a different context (X, Terminal emulator, Linux console).

Since these are just shell scripts, arbitrary arguments should be supported, like `--column` and `--row` for example, if using a text editor.

2. Launch without file

The current 'Browser' or 'Image Viewer' can be launched. Again, this is intended to work across distributions and user interfaces.

See more info in [details.md](./docs/details.md)

## Roadmap

- 'get' subcommand
- use choose when using fuzzer / filter (dmenu vs rofi -dmenu, etc.)
- sourcing pre-exec does does output on --verbose flag (or another)
- GUI selector (select via GUI if there are multiple options), optional
- doctor command to ensure that git config attributes, ranger attributes, etc. are all valid and point to choose properly
- before launch dialog, have UI where can download the application with help of (woof?)

## Application / Category Attributions

- cli vs tui vs gui
- use on conditions (only X11, wayland, etc. have fallback (ordering))
- launching vs shell (interactive, non-interactive), DE (.desktop, etc.), tty vs ptty etc.
- an editor vs viewer
- ones meant to generalize across application vs choosing a specific thing (without last common denominator cli argument flags, etc. compatability)
  - capability based?
- printing to stdout, running a blocking application, running a non-blocking application, exec'ing into a new process, and running a daemon
- execution helpers (if it requires a terminal, must wrap it in terminal invocation)

## Installation

```sh
cargo install exa
```