launcher-menu: showAllApps lists all programs without Developer Mode

Without Steam's Developer Mode the "+" menu hides konsole, systemsettings,
dolphin, plasma-discover, vlc and a few more by executable name. The patch
empties only that list's iterator, leaving the setting itself untouched.
This commit is contained in:
Pierre Kisters committed 2026-09-27 21:56:48 +02:00
1 parent bce51eb598
commit 5eb1d07d01
6 files changed
+115

No files matched your search

+17
View File
@@ -137,6 +137,7 @@ the two files below).
closeOnLaunch = true;
launchDebounce = 10;
grid = { enable = true; columns = 4; maxRows = 4; };
showAllApps = true;
};
dashboard = {
windowMaxScale = 4.0;
@@ -196,6 +197,7 @@ menu list every desktop entry, including terminals such as Konsole.
| `steamFrame.launcherMenu.grid.enable` | bool | `false` | Show the "+" menu's programs as a grid of tiles (large icon, name below) instead of a list. |
| `steamFrame.launcherMenu.grid.columns` | int, 1-8 | `4` | Tiles per row (popup is 300 px wide: 3 ≈ 92 px, 4 ≈ 68 px, 5 ≈ 53 px tiles). |
| `steamFrame.launcherMenu.grid.maxRows` | null or positive int | `null` | Rows visible at once, the rest scrolls. `null`: fill up to the menu's max height (600 px). |
| `steamFrame.launcherMenu.showAllApps` | bool | `false` | List all programs in the "+" menu without Steam's Developer Mode (Konsole, KDE System Settings, Dolphin, Discover, VLC, ... are hidden otherwise). See [Launcher menu](#launcher-menu-launchermenu). |
| `steamFrame.launcherMenu.iconFallbacks.enable` | bool | `true` | On every switch, link hicolor fallbacks (Breeze app icons) for desktop entries whose icon Steam can't find, so the "+" menu shows them (SteamOS: Konsole, KDE System Settings). `false` removes the links. See [Icon fallbacks](#icon-fallbacks-launchermenuiconfallbacks). |
| `steamFrame.launcherMenu.iconFallbacks.extra` | list of str | `[ ]` | Further icon names to provide even if no desktop entry the scan sees uses them. |
| `steamFrame.dashboard.windowMaxScale` | null or number | `null` | Largest resize-handle scale of SteamVR dashboard windows, relative to their default size. `null`: stock (2). See [Dashboard windows](#dashboard-windows-dashboard). |
@@ -564,6 +566,21 @@ the program twice.
directions from the panel's CSS grid, so up/down/left/right move between
tiles.
- `showAllApps = true`: without Steam's Developer Mode, the menu hides a
fixed list of programs by executable name (`konsole`, `systemsettings`,
`dolphin`, `plasma-discover`, `vlc`, `firewall-config`, `cmake-gui`,
`qrenderdoc`, `lxterminal`, `sh`); Steam's scan still finds them. The
menu's filter adds that list to its block list only when Developer Mode
is off (`bDevMode || block.push(...list)`), and nothing else uses the list,
so the patch gives that one array an empty iterator: nothing is added,
the setting itself (used by other settings pages) is untouched. So
Developer Mode can stay off: it also turns on sshd, xrdp, the devkit
service and SteamOS's LAN forwards of the DevTools ports (0.0.0.0:8081 and
8088), none of which the patches need. Hide single programs with
`steamFrame.hiddenApps`. Found by signature (webpack module with the
`developer_mode_enabled` accessor and the list); the offline checker also
verifies the filter still spreads the list.
All are reverted when the options are turned off (next switch). These
patches use Steam APIs (`SteamClient.Apps`), React props and CSS rather
than webpack modules; the offline checker verifies those anchors too
+22
View File
@@ -112,6 +112,19 @@ in {
'';
};
};
showAllApps = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
List all programs in the "+" menu without Steam's Developer Mode.
Without it, Steam hides a fixed list (konsole, systemsettings,
dolphin, plasma-discover, vlc, firewall-config, cmake-gui, qrenderdoc,
lxterminal, sh). Only that list is emptied; the Developer Mode setting
itself (used by other settings pages) is untouched. Hide individual
programs with steamFrame.hiddenApps. Runtime patch of Steam's UI
(steamFrame.uiPatches).
'';
};
iconFallbacks = lib.mkOption {
default = { };
description = ''
@@ -223,5 +236,14 @@ in {
opts = { inherit (cfg.grid) columns maxRows; };
};
unpatch = ./launcher-menu/grid/unpatch.js;
}
++ lib.optional cfg.showAllApps {
name = "launcher-menu-show-all";
target = sharedJSContext;
patch = mkPatch {
name = "launcher-menu-show-all";
src = ./launcher-menu/show-all/patch.js;
};
unpatch = ./launcher-menu/show-all/unpatch.js;
};
}
+42
View File
@@ -0,0 +1,42 @@
// launcher-menu show-all: the VR dashboard's "+" menu lists all programs
// without Steam's Developer Mode.
// Steam filters the programs of ScanForInstalledNonSteamApps() by the base
// name of their executable: some are always hidden (steam, vrurlhandler),
// and without Developer Mode (client setting developer_mode_enabled) also a
// second list: firewall-config, vlc, dolphin, cmake-gui, plasma-discover,
// konsole, systemsettings, qrenderdoc, sh, lxterminal. The menu's filter
// spreads that list into its block list only when Developer Mode is off
// (`bDevMode || block.push(...devModeOnly)`), and nothing else uses it.
//
// This file is a function expression, called by the file lib/default.nix
// (mkPatch) generates: (<this file>)(find, sigs), with find the finder
// library (lib/finders.js) and sigs this patch's module signatures
// (lib/signatures.json, "launcher-menu-show-all": the module exporting the
// list, plus a check-only anchor for the filter). No options.
//
// The patch gives that one array an own, empty Symbol.iterator, so spreading
// it adds nothing; its contents stay as they are (the signature keeps
// matching on re-injection) and the Developer Mode setting itself, used
// elsewhere (settings pages, controller pairing, ...), is not touched. The
// menu re-filters whenever it rescans, i.e. on every open. The array is
// remembered as window.__sfuiShowAllApps for unpatch.js. Idempotent.
((find, sigs) => {
const VERSION = 1;
let mods;
try {
mods = find.resolveAll(find.getWebpackRequire('webpackChunksteamui'), sigs);
} catch (e) {
return `signature not found, Steam left unpatched: ${e.message}`;
}
const list = mods.devModeApps.exports.devModeOnly;
if (!Array.isArray(list)) return 'Developer Mode app list is not an array, Steam left unpatched';
const prev = window.__sfuiShowAllApps;
if (prev && prev.list === list && prev.version === VERSION &&
Object.prototype.hasOwnProperty.call(list, Symbol.iterator)) return 'unchanged';
Object.defineProperty(list, Symbol.iterator, {
configurable: true, writable: true, enumerable: false,
value: function* sfuiShowAllApps() {},
});
window.__sfuiShowAllApps = { version: VERSION, list };
return `patched (no longer hidden: ${Array.prototype.join.call(list, ', ')})`;
})
+11
View File
@@ -0,0 +1,11 @@
// Reverts show-all/patch.js: removes the empty iterator from Steam's
// Developer Mode app list (remembered as window.__sfuiShowAllApps), so the
// "+" menu hides those programs again while Developer Mode is off. Safe when
// not patched.
(() => {
const s = window.__sfuiShowAllApps;
if (!s) return 'not patched';
if (s.list && Object.prototype.hasOwnProperty.call(s.list, Symbol.iterator)) delete s.list[Symbol.iterator];
delete window.__sfuiShowAllApps;
return 'unpatched';
})()
+20
View File
@@ -137,6 +137,26 @@
}
}
},
"launcher-menu-show-all": {
"bundle": "steamui",
"modules": {
"devModeApps": {
"module": { "includes": ["\"developer_mode_enabled\"", "\"firewall-config\"", "\"vrurlhandler\"", "\"Install Chromium\""] },
"exports": {
"devModeOnly": { "type": "object", "has": ["push"], "props": { "0": "firewall-config" } }
},
"expects": ["\"konsole\"", "\"systemsettings\"", "\"dolphin\"", "\"plasma-discover\""]
},
"launcherFilter": {
"checkOnly": true,
"module": {
"includes": ["allowLaunchProgram", "#VRDashboard_LaunchNonSteamApp", "strExePath.endsWith(\"/\"+"],
"regex": ["/\\|\\|[\\w$]+\\.push\\(\\.\\.\\.[\\w$]+\\.[\\w$]+\\),[\\w$]+\\.filter\\(/"]
},
"expects": ["strAppName==", "strExePath=="]
}
}
},
"dashboard-windows": {
"bundle": "vrwebui-systemui",
"modules": {
+3
View File
@@ -26,6 +26,9 @@
# closeOnLaunch = true;
# launchDebounce = 10;
# grid = { enable = true; columns = 4; maxRows = 4; };
# # All programs without Steam's Developer Mode (Konsole, KDE System
# # Settings, Dolphin, ... are hidden otherwise):
# showAllApps = true;
# # Icon fallbacks for programs without an icon in the menu are on by
# # default; names to provide in addition to what the scan finds:
# # iconFallbacks.extra = [ "system-file-manager" ];