KDE's bookmark search ignores Brave because of one unmatched string

balintkorosi1 pts0 comments

I Gaslit KRunner Into Finding My Brave Bookmarks

I Gaslit KRunner Into Finding My Brave Bookmarks<br>Posted on 2026-08-18 :: Tags: tech, productivity

I've been on Brave for a looong ass time and I love it. Same with KDE (I used to use Arch, btw, but now I just use Kubuntu). KRunner is the best thing in KDE. Alt+Space, three letters, enter, done.Except fucking bookmarks.KDE ships a KRunner plugin that searches your browser bookmarks. It's on by default. It has never once returned a result for me. No error, no warning, no "your browser isn't on the list". It just sits there giving me nothing, forever, and eventually I stopped trying. If I switched the default browser to Firefox, it would find those bookmarks. But I don't use FF. So after years of waiting for the upstream KDE patch, I looked, mangled stuff and the one string bug is workarounded.Why It Does Nothing<br>The plugin works out which browser you use by grabbing the Exec line of whatever handles x-scheme-handler/http, then string-matching that against a list: firefox, opera, chromium, chrome, falkon.Brave's Exec line is /usr/bin/brave-browser-stable %U.Go on, find the match. There isn't one. So the plugin gives up, falls back to Konqueror, goes hunting for a bookmarks.xml that has never existed on this machine, comes back empty and says fuck all about it. No log line, no warning, no hint.Open bug since 2022. Vivaldi users get the same treatment.But Brave IS Chromium. Had the plugin picked its Chrome backend it would have worked on day one, because that backend reads three files:~/.config/google-chrome/Local State, for the list of profiles~/.config/google-chrome/&LTprofile>/Bookmarks~/.config/google-chrome/&LTprofile>/FaviconsBrave writes all three. Same JSON, same sqlite, same everything. They just live in ~/.config/BraveSoftware/Brave-Browser/ instead.One directory name. One string that doesn't match. Years of a dead feature over that. sigh Am I going to butcher this and twist its hand so it works as I want? Absolutely. Here we go.Fine, I'll Make My Own Bookmarks KRunner. With Blackjack & Hookers.<br>Two lies and some symlinks.Lie one. Launch Brave through a symlink called chrome-brave-shim. The plugin reads that path, spots "chrome" sitting in it, and picks the Chrome backend. Brave neither knows nor cares. Same binary underneath.Lie two. Symlink Brave's three files into ~/.config/google-chrome/, which is where the Chrome backend goes looking. Nothing is copied, nothing is written. The plugin only ever reads them.The third piece isn't a lie, just plumbing. A local copy of brave-browser.desktop in ~/.local/share/applications/ with every Exec line pointed at the shim. It keeps the system file's name so it shadows it: your default browser setting doesn't change, and you get one Brave in the app menu instead of two.#!/usr/bin/env bash<br>set -euo pipefail

BRAVE_CFG="$HOME/.config/BraveSoftware/Brave-Browser"<br>CHROME_CFG="$HOME/.config/google-chrome"<br>SHIM="$HOME/.local/bin/chrome-brave-shim"<br>SYS_DESKTOP="/usr/share/applications/brave-browser.desktop"<br>LOCAL_DESKTOP="$HOME/.local/share/applications/brave-browser.desktop"

[ -e "$BRAVE_CFG/Default/Bookmarks" ] || { echo "Brave profile not found at $BRAVE_CFG"; exit 1; }<br>[ -e "$SYS_DESKTOP" ] || { echo "$SYS_DESKTOP not found"; exit 1; }

# lie one: a symlink to Brave with "chrome" in its path<br>BRAVE_EXEC=$(sed -n 's/^Exec=\([^ ]*\).*/\1/p' "$SYS_DESKTOP" | head -n1)<br>mkdir -p "$HOME/.local/bin"<br>ln -sfn "$BRAVE_EXEC" "$SHIM"

# the shadow .desktop, every Exec routed through the shim<br>mkdir -p "$HOME/.local/share/applications"<br>sed "s#^Exec=$BRAVE_EXEC#Exec=$SHIM#" "$SYS_DESKTOP" > "$LOCAL_DESKTOP"

# lie two: point the Chrome paths at Brave's real profile<br>mkdir -p "$CHROME_CFG/Default"<br>ln -sfn "$BRAVE_CFG/Local State" "$CHROME_CFG/Local State"<br>ln -sfn "$BRAVE_CFG/Default/Bookmarks" "$CHROME_CFG/Default/Bookmarks"<br># Favicons is optional. Real site icons in the results, at the cost of the<br># plugin copying a multi-MB sqlite file every time you open KRunner.<br>ln -sfn "$BRAVE_CFG/Default/Favicons" "$CHROME_CFG/Default/Favicons"

update-desktop-database "$HOME/.local/share/applications" >/dev/null 2>&1 || true<br>kbuildsycoca6 --noincremental >/dev/null 2>&1 || true<br>systemctl --user restart plasma-krunner.service

echo "Done. Open KRunner and type part of a bookmark title."<br>More than one Brave profile? Repeat the Bookmarks and Favicons lines for each directory listed under profile.info_cache in Local State, keeping the names the same.If Nothing Shows Up<br>Check the plugin is actually switched on, in System Settings > Search > Plasma Search > Bookmarks. Then:~/.local/bin/chrome-brave-shim --version # Brave still starts through the shim<br>sed -n 's/^Exec=/EXEC: /p' ~/.local/share/applications/brave-browser.desktop<br>xdg-settings get default-web-browser # should say brave-browser.desktop<br>ls -lL ~/.config/google-chrome/"Local State" ~/.config/google-chrome/Default/Bookmarks<br>Undoing It<br>#!/usr/bin/env bash<br>set -euo...

brave chrome bookmarks browser local default

Related Articles