Skip to content

feat(shell): All Apps in the activity bar, web apps, and popup tray menus - #10

Merged
danisss9 merged 1 commit into
mainfrom
claude/app-bar-marketplace-redesign-pgcih9
Aug 8, 2026
Merged

danisss9 merged 1 commit into
mainfrom
claude/app-bar-marketplace-redesign-pgcih9

Conversation

@danisss9

@danisss9 danisss9 commented Aug 8, 2026

Copy link
Copy Markdown
Owner

Seven changes to the desktop shell, most of them moving something to where
it belongs rather than adding a feature.

All Apps leaves the status bar. A start menu is not a tray item, so the
$(menu) button in the bottom-left corner is gone and the launcher is a view
in the activity bar. It now lists three things instead of one: the shell's
own apps, the web apps installed through the Marketplace, and every program
on the machine that ships a .desktop file, with its real icon resolved from
the icon theme. Right-clicking a web app changes where it opens or removes
it.

Uninstall covers web apps only. They are the only thing this shell
installed. Removing a package would mean a password-free pacman -Rns for
arbitrary names, which is a new path to root for the sake of a context menu
item; native entries are listed and labelled instead. No new helper, no
polkit change.

Music plays music. The Music "app" was two buttons that opened Spotify
Web and YouTube Music in a browser window - bookmarks, and useless on a
machine with no network. It is now a real player for ~/Music: a searchable
library, a queue, shuffle, repeat and a scrubber. The tray's music item
keeps its MPRIS transport, so a browser or mpv playing in the background is
still controllable from there.

Web apps can be installed. sys/webapps.ts fetches a site, reads its
<link rel="manifest"> - falling back to the page's title and favicon,
because most of the web publishes no manifest - keeps a copy of the icon and
writes a .desktop entry, so the app exists to the rest of the machine and
not only to this shell. Those entries are marked X-VSCodeOS-WebApp, which is
how the .desktop scan knows not to list every web app twice. Where an app
opens is chosen at install time: a Chromium --app= window, which exports
MPRIS and can play DRM audio, or an editor tab.

A Marketplace to find them. A curated catalogue compiled into the
extension, so it is browsable on a machine that has never been online, plus
an address box for anything else. The Browser grows an Install app button on
any page that declares a manifest - it is the one place in the shell that
can answer that question without fetching the page twice.

The System container is the Task Manager. The Recycle Bin view and the
tray card are out of it; the bin is a place in the Files app, which is where
a bin belongs and where it browses with the same columns as any folder.

The tray menus are popups. VS Code still has no API to anchor a popup to
a status bar item - but a quick pick is a popup, and the thing it cannot
be is anchored, which is a far smaller loss than taking the side bar away
every time somebody wants to see the clock. Items carry a keepOpen flag so a
toggle acts and the list redraws in place. The webview cards are still there
behind vscodeos.flyout.location for the sliders and the month grid; they
cannot go in the secondary side bar, because that contribution point is
behind a proposed API a built-in extension cannot use.

30 new tests cover the parsing this rests on - .desktop groups and Exec
field codes, manifest links and icon selection - because an Exec line split
the wrong way launches the wrong program, and a % left unescaped makes an
entry vanish from every menu on the machine without saying why.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_019CL3BaiEocfm9nsia4D2PV

…enus

Seven changes to the desktop shell, most of them moving something to where
it belongs rather than adding a feature.

**All Apps leaves the status bar.** A start menu is not a tray item, so the
$(menu) button in the bottom-left corner is gone and the launcher is a view
in the activity bar. It now lists three things instead of one: the shell's
own apps, the web apps installed through the Marketplace, and every program
on the machine that ships a .desktop file, with its real icon resolved from
the icon theme. Right-clicking a web app changes where it opens or removes
it.

**Uninstall covers web apps only.** They are the only thing this shell
installed. Removing a package would mean a password-free `pacman -Rns` for
arbitrary names, which is a new path to root for the sake of a context menu
item; native entries are listed and labelled instead. No new helper, no
polkit change.

**Music plays music.** The Music "app" was two buttons that opened Spotify
Web and YouTube Music in a browser window - bookmarks, and useless on a
machine with no network. It is now a real player for ~/Music: a searchable
library, a queue, shuffle, repeat and a scrubber. The tray's music item
keeps its MPRIS transport, so a browser or mpv playing in the background is
still controllable from there.

**Web apps can be installed.** sys/webapps.ts fetches a site, reads its
`<link rel="manifest">` - falling back to the page's title and favicon,
because most of the web publishes no manifest - keeps a copy of the icon and
writes a .desktop entry, so the app exists to the rest of the machine and
not only to this shell. Those entries are marked X-VSCodeOS-WebApp, which is
how the .desktop scan knows not to list every web app twice. Where an app
opens is chosen at install time: a Chromium --app= window, which exports
MPRIS and can play DRM audio, or an editor tab.

**A Marketplace to find them.** A curated catalogue compiled into the
extension, so it is browsable on a machine that has never been online, plus
an address box for anything else. The Browser grows an Install app button on
any page that declares a manifest - it is the one place in the shell that
can answer that question without fetching the page twice.

**The System container is the Task Manager.** The Recycle Bin view and the
tray card are out of it; the bin is a place in the Files app, which is where
a bin belongs and where it browses with the same columns as any folder.

**The tray menus are popups.** VS Code still has no API to anchor a popup to
a status bar item - but a quick pick *is* a popup, and the thing it cannot
be is anchored, which is a far smaller loss than taking the side bar away
every time somebody wants to see the clock. Items carry a keepOpen flag so a
toggle acts and the list redraws in place. The webview cards are still there
behind vscodeos.flyout.location for the sliders and the month grid; they
cannot go in the secondary side bar, because that contribution point is
behind a proposed API a built-in extension cannot use.

30 new tests cover the parsing this rests on - .desktop groups and Exec
field codes, manifest links and icon selection - because an Exec line split
the wrong way launches the wrong program, and a % left unescaped makes an
entry vanish from every menu on the machine without saying why.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019CL3BaiEocfm9nsia4D2PV
@danisss9
danisss9 merged commit 29bff76 into main Aug 8, 2026
2 checks passed
@danisss9
danisss9 deleted the claude/app-bar-marketplace-redesign-pgcih9 branch August 8, 2026 12:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants