mirror of
https://github.com/lhns/steam-frame-nix.git
synced 2026-10-06 05:00:24 +02:00
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:
1 parent
bce51eb598
commit
5eb1d07d01
6 files changed
+115
No files matched your search
@@ -137,6 +137,7 @@ the two files below).
|
|||||||
closeOnLaunch = true;
|
closeOnLaunch = true;
|
||||||
launchDebounce = 10;
|
launchDebounce = 10;
|
||||||
grid = { enable = true; columns = 4; maxRows = 4; };
|
grid = { enable = true; columns = 4; maxRows = 4; };
|
||||||
|
showAllApps = true;
|
||||||
};
|
};
|
||||||
dashboard = {
|
dashboard = {
|
||||||
windowMaxScale = 4.0;
|
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.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.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.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.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.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). |
|
| `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
|
directions from the panel's CSS grid, so up/down/left/right move between
|
||||||
tiles.
|
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
|
All are reverted when the options are turned off (next switch). These
|
||||||
patches use Steam APIs (`SteamClient.Apps`), React props and CSS rather
|
patches use Steam APIs (`SteamClient.Apps`), React props and CSS rather
|
||||||
than webpack modules; the offline checker verifies those anchors too
|
than webpack modules; the offline checker verifies those anchors too
|
||||||
|
|||||||
@@ -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 {
|
iconFallbacks = lib.mkOption {
|
||||||
default = { };
|
default = { };
|
||||||
description = ''
|
description = ''
|
||||||
@@ -223,5 +236,14 @@ in {
|
|||||||
opts = { inherit (cfg.grid) columns maxRows; };
|
opts = { inherit (cfg.grid) columns maxRows; };
|
||||||
};
|
};
|
||||||
unpatch = ./launcher-menu/grid/unpatch.js;
|
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;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -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, ', ')})`;
|
||||||
|
})
|
||||||
@@ -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';
|
||||||
|
})()
|
||||||
@@ -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": {
|
"dashboard-windows": {
|
||||||
"bundle": "vrwebui-systemui",
|
"bundle": "vrwebui-systemui",
|
||||||
"modules": {
|
"modules": {
|
||||||
|
|||||||
@@ -26,6 +26,9 @@
|
|||||||
# closeOnLaunch = true;
|
# closeOnLaunch = true;
|
||||||
# launchDebounce = 10;
|
# launchDebounce = 10;
|
||||||
# grid = { enable = true; columns = 4; maxRows = 4; };
|
# 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
|
# # Icon fallbacks for programs without an icon in the menu are on by
|
||||||
# # default; names to provide in addition to what the scan finds:
|
# # default; names to provide in addition to what the scan finds:
|
||||||
# # iconFallbacks.extra = [ "system-file-manager" ];
|
# # iconFallbacks.extra = [ "system-file-manager" ];
|
||||||
|
|||||||
Reference in new issue
Block a user