-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTODO
225 lines (190 loc) · 10.1 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
[] HANGING ON EXIT
[] investigate why this is happening (figure out a repro case from lemuel's message and check over ssh on deck)
Documentation:
[] make it clear in copy that it works for all SteamOS (and test that)
[] add usage screenshots to website
Add to steam:
[] make reboot to game mode only happen in SteamOS (or double-check that it works correctly on Chimera etc, or offer a cmdline flag)
[] look at /usr/bin/steamos-add-to-steam for clues on how to add to steam without needing to restart steam
General:
[] implement general updates and make a button
[] make the /tmp/decktricks_only_init check fail when not in desktop mode? or handle it better, some way of only having it happen on that very first steam launch? env var?
[] e2e test: use test config, check that pressing enter launches first program
[] make calls to std::fs test-safe
[] make decktricks stable installer point to discord or reddit, and beta point to github?
[] add help message to 'decktricks' pointing to gui command
[] cargo clippy in CI?
[] make Dockerfile pull stable instead of main
[] make pre-commit hook or build.sh store in benchmarks?
[] full-system-context-not-needed flag for certain commands?
[] hide commands that aren't present automatically? or just hide anything that doesn't have a single option besides info?
[] look for libraries that will warn you of potential panics
[] "launch in nested desktop mode" (implement how? flag to SysCommand telling it to look for nested session, start it if not running, and run the command inside the nested X session? or just start a nested session each time we request it?)
[] DISPLAY=:1 QT_QPA_PLATFORM=wayland <cmd> https://community.kde.org/KWin/Wayland
[] find correct DISPLAY programmatically
[] xdpyinfo -display :1
[] possibly? pgrep kwin_x11 | xargs -I {} tr '\0' '\n' < /proc/{}/environ | grep DISPLAY
[] test inputs in nested desktop mode
[] design about page, settings page
Settings:
[] "All Conditional Actions Always Available (Expert)" / "Allow force install / force uninstall"
Add to Steam:
[] investigate the blank entry appearing on first run? (just don't use the default script, use something more robust)
Comms
[] use https://github.com/wez/wezterm as inspiration for the gh page
[] later on, run polls for feature priority (game pass streaming, etc)
[] https://www.facebook.com/groups/steamdeck/
[] compile list of steam deck subreddits
[] ask for gh stars, include a direct link
Providers
[] luxtorpeda directly!!! (see the readme)
[] xbox streaming (would require full add-to-steam support for adding launch args): https://support.microsoft.com/en-gb/topic/xbox-cloud-gaming-in-microsoft-edge-with-steam-deck-43dd011b-0ce8-4810-8302-965be6d53296
[] kodi (for streaming) (tv.kodi.Kodi)
[] system commands - *file browser* (what's the name in plasma)
[] yuzu/etc switch emulators
[] https://github.com/moraroy/NonSteamLaunchers-On-Steam-Deck
[] individual launchers from within this?
[] check out "setup helpers" in steamfork: https://github.com/SteamFork/SteamForkTools/tree/main/bin
[] especially for Decky
[] implement full updates for all providers
[] playstation plus
[] junk store
[x?] "nested desktop" from the software center
[] steamtinkerlaunch
[] prism launcher (minecraft)
[] mod: RDO lobby manager
[] customscript, bash scripts which are compiled into the binary
[] modorganizer2: https://github.com/rockerbacon/modorganizer2-linux-installer/
[] mkdir ~/.steam/root/steamapps/compatdata/22370/pfx/drive_c/users/steamuser/Temp
[] sudo chattr +i ~/.steam/root/steamapps/compatdata/22370/pfx/drive_c/users/steamuser/Temp
[] "greatest hits" tab for favorite games that just sends you to store page, "sponsored games" tab obviously
Actions/Programs:
[x] Moonlight!
[] websites: google, etc
[] discord! vesktop, webcord, etc
[] confirmation dialog: "NOTE! The official Discord app has issues with (....)"
[] confirmation dialog: "NOTE! Spotify often fails to log in in game mode, try launching in nested desktop mode first"
[] "essentials" - just installs essentials
[] any other system settings? bluetooth, audio(!), etc
SSH/IP:
[] display IP address to user
use if_addrs::get_if_addrs;
use std::net::IpAddr;
fn main() {
let ifaces = get_if_addrs().unwrap();
for iface in ifaces {
if !iface.is_loopback() && iface.addr.is_ipv4() {
println!("{}", iface.addr);
}
}
}
[] systemctl enable --now sshd (requires keys, how to handle that?)
[] sshfs - commands to access an sshfs (or nfs?) share, or show an rsync command
[] temporary ssh server (launch an sshd with safe/known/set password):
# ensure user has pw:
passwd -S $USER # | grep -q " P " &&
#if not, prompt user for pw and set it
ssh-keygen -A # check for how this functions on a new system
/usr/sbin/sshd -D -p 2222 -o "PasswordAuthentication=yes" -o "HostKey=~/.ssh/id_rsa"
# show connection instructions
GUI
[] detect if in Game Mode (why?)
[] refocus after redraw
[] if trick and action match, reselect that. Otherwise, first action of trick, otherwise first action of first trick
[] if in other menu or on tab, you can just find the focused element before redraw and re-focus it (if that's even needed)
[] lower default FPS for battery
[] fix battery/settings page selection behavior (main.gd stealing focus back)
[] store settings permanently in json file
[] try converting a Kenney GUI pack into a Godot theme: https://kenney.nl/assets/ui-pack-sci-fi
[x] have launched programs run in the background
[x] don't take gamepad/keypad input when in background (or at least not when in "run" mode while in game mode?)
[x] don't freeze when launching program (same as above?)
[] check if it's decktricks freezing vm or not
[] resize to not be so obnoxious in desktop mode (just set a smaller 16:10 res as min?)
[] rust e2e test for gui behavior
[] way to have desktop, if there are problems with nested: gamescope wine explorer /desktop=shell,640x480
[] top menu with quit/etc (labeled with button labels?)
[x] handle config.json updates for godot editor (just use 'decktricks get-config'?)
[] zenity: resize the window to fit the deck
[] restart/refresh if config file hash changes?
[] icons: clicking will install, run, or stop when clicked (if installable/runnable/stoppable)
[] --dry-run flag that just prints out commands to be run (for e2e tests?)
[] warning after clicking "run" on things that will require mouse ("if you launch this, you will need to press X key combination to exit (or go through menu), and you'll need to use STEAM + right joystick to move mouse and STEAM + Right trigger to click (or use touchscreen)")
[] plasma system settings
.desktop/updater
[] have a rust-based installer script? allows for better handling of curl/tar/threads
[] find out default PATH on deck
[] .desktop:
[] if binary doesn't exist:
[] download from *tag* on gh
[] update logic?
[] if gh.com/blah/tag/latest/VERSION < cur_vers
[] initialize download in background
[] check md5sum
[] when complete, set a once-off flag
[] chmod +x
[] swap, and keep old version
[] run a 'verify' command
Network/Updates
[] MOTD
[] Code updates
[] Config updates
[] GUI handling updates how?
[] offline mode where binaries are all embedded into the binary, or online mode where it requires internet to run
[] check out https://crates.io/crates/self_update
[] and also https://docs.rs/self-replace/latest/self_replace/
[] updating live would be much easier with a wrapper script, but maybe decktricks can just have a self-update ? so script might look like:
1) check if exists
2) check decktricks self-test
3) check decktricks update-available (maybe just do during a normal run in a thread)
a) download update
4) if updated version is downloaded
a) self-test
1) if passed, move decktricks to decktricks.bak and decktricks.new to decktricks (use hard links to keep atomicity)
General
[] implement reinstall for flatpak
[] test in chimeraos and steamfork and bazzite
[] fix up global updates - the logic on which providers run them, and how errors/messages are propagated/printed
[] Find out PATH on deck, and how to update it if necessary
[] figure out how to give specific error messages for things like "can't be run because it's not installed"
[] dependencies between tricks
Testing
[] create better testing for uninstalled/installed and how it affects what's available for e.g. flatpak
[] try out immutable disks in virtualbox for fresh-install testing
[] try out quickcheck
Code
[] Codemod for? to collect::<Result<_, _>>
[] unique error codes for each possible error
Idea
[] web frontend that just constructs a list of desired tricks and generates a .desktop that installs decktricks cli and uses it to install everything in one go
[] firefox, and ublock origin
[] "clean up disk space"
CLI
[] colorize output, decide which bits of spawned program output to keep in which contexts
[] run: pass remaining args after cmdname or -- through to the run command
Controller support:
[] find out how to launch the steam input configuration for the current app
Media outlets:
[] steamdeckhq
[] gamingonlinux
fun:
[] selectable themes
[] mid-oughts cd key haxx aesthetic with 8-bit theme
[] a 2d game where you can run around and select things to launch
Optimizations:
[] make executor only trigger system context gathering for relevant programs on specific commands
dependencies list:
systemd
ps
Notes from running in Steam container:
* cp in /usr/lib/libcrypto.so.3 and /usr/lib/libssl.so.3
* systemctl is not accessible, and most relevant binaries probably won't be
Potentially popular "support me and" features:
[] "launch in nested desktop"
Snippets:
* Find XAUTHORITY over ssh: find /run/user/1000/ -maxdepth 1 -type f | xargs file | grep 'X11 Xauthority data' | sed 's/:.*//' | xargs ls -t1 | head -n 1
* Launching in nested plasma: DISPLAY=:2 XAUTHORITY=/run/user/1000/nested_plasma/xauth_<.....>
Tips:
* Use STEAM+Rstick to move mouse, STEAM+R2/R1/L2/L1 to click
Notes:
* Always say what decktricks is in posts about it