A keyboard-first launcher for Chromium browser profiles, native to the COSMIC desktop. Open it, type a few letters, hit Enter — the right profile opens in the right browser.
- Detects all installed chromium-based browsers — native and flatpak (Chromium, Chrome, Brave, Edge, Vivaldi, Opera, Thorium).
- Lists every profile with its friendly name, sorted by most-recently-used.
- Fuzzy search, full keyboard navigation.
- Launch & close: picking a profile opens it and the launcher exits (it only stays open if the launch fails, to show the error).
- Native COSMIC theming (follows system light/dark + accent).
| Key | Action |
|---|---|
| type | filter profiles |
| ↑ / ↓ | move selection |
| Enter | launch selected profile |
| F5 | reload profile list |
| Esc | quit |
cargo build --release
./target/release/odd-profile # GUIThe core engine is also exposed as a CLI (used during development and handy for scripting):
odd-profile list # show browsers + profiles
odd-profile launch chromium "Profile 2"./install.sh # builds release + installs binary, .desktop, and icon
./uninstall.sh # removes them againThis installs to your user dirs (no root):
- binary →
~/.local/bin/odd-profile - launcher entry →
~/.local/share/applications/io.github.odd.OddProfile.desktop - icon →
~/.local/share/icons/hicolor/scalable/apps/io.github.odd.OddProfile.svg
It then appears in the COSMIC App Library and launcher. Ensure
~/.local/bin is on your PATH.
Via COSMIC Settings (recommended):
Settings → Keyboard → Keyboard shortcuts → Custom shortcuts → add a
shortcut with the command odd-profile and bind it to e.g. Super+P.
Or by editing the config directly —
~/.config/cosmic/com.system76.CosmicSettings.Shortcuts/v1/custom is a RON map;
add an entry inside the outer { ... }:
(
modifiers: [Super],
key: "p",
): Spawn("odd-profile"),Log out/in (or restart the compositor) for the binding to take effect.
Chromium stores a registry of profiles in <config>/Local State
(profile.info_cache), mapping the on-disk directory (Profile 1) to a
display name (Work). odd-profile reads this (never writes it) and launches the
chosen browser with --profile-directory="Profile 1", fully detached so the
browser outlives the launcher.
| Module | Responsibility |
|---|---|
discovery |
find launchable browsers (native + flatpak) |
profile |
parse Local State into a profile list |
launch |
spawn the browser detached, in the chosen profile |
app |
libcosmic GUI |
MIT