Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
336 commits
Select commit Hold shift + click to select a range
1e39f1e
get top devcade icon to change based on prod/dev mode
matthewlefler Feb 14, 2026
0b52cc4
added export script for the godot onboard
matthewlefler Feb 14, 2026
3884120
changed mode to fullscreen
matthewlefler Feb 14, 2026
21db298
added flashing help text to bottom of screensaver
matthewlefler Feb 14, 2026
317f921
Continue -> Resume | on the screensaver bottom text box
matthewlefler Feb 14, 2026
44f29bf
Merge pull request #11 from matthewlefler/originalGUI_bug_fixes
matthewlefler Feb 14, 2026
334db50
seperate screensaver sceen
matthewlefler Feb 14, 2026
fd5db40
new screensaver framework
matthewlefler Feb 15, 2026
06c8aad
added first (bad) game to screensaver
matthewlefler Feb 16, 2026
6a5ca81
added bombomb to screensaver and devcade logo to top with custom ouli…
matthewlefler Feb 16, 2026
6b5bea4
top decvade icon wasn't centered
matthewlefler Feb 16, 2026
4ccda83
made it more obvious what tag is hovered and pressed
matthewlefler Feb 17, 2026
7685580
fixed discription showing infront of screensaver
matthewlefler Feb 17, 2026
d5c5c02
mostly fixed scaling for new display
matthewlefler Feb 17, 2026
06514e2
fixed scaling of mutliple elements
matthewlefler Feb 18, 2026
87e537b
fixed tags going off screen until more are added
matthewlefler Feb 18, 2026
8c8af77
changed scroll speed of background icons and aspect ratio of wallhopp…
matthewlefler Feb 20, 2026
b0a1f3e
Merge pull request #12 from matthewlefler/screensaver
matthewlefler Feb 21, 2026
94f59c6
added project with transparent background to test with
matthewlefler Feb 21, 2026
aa30ffd
moved export script and modified it to add new godot project
matthewlefler Feb 21, 2026
91c4401
test runs on my machine
matthewlefler Feb 22, 2026
6e1c273
added -t to notifcation run args
matthewlefler Feb 22, 2026
7881d3c
fixed exe names
matthewlefler Feb 22, 2026
6481be5
attenpt to make onboard unfocused
matthewlefler Feb 22, 2026
fca6d9b
attempt to make notification always on top and visible
matthewlefler Feb 22, 2026
1e0cfb7
added command to notificationService on frontend to modify where its …
matthewlefler Feb 22, 2026
3e28010
cleaned up code a bit and added 2 more cmd to make the frontend be be…
matthewlefler Feb 22, 2026
cd2c3ed
removed no focus from project settings
matthewlefler Feb 22, 2026
cd7610c
fixed notifiaction service not getting killed
matthewlefler Feb 22, 2026
a7e5ffc
try sticky on notification window
matthewlefler Feb 22, 2026
66f1ba2
godot based logging
matthewlefler Feb 22, 2026
3e58460
fogot to change location of notification exe
matthewlefler Feb 22, 2026
a1806e3
different way of having a sub window
matthewlefler Feb 22, 2026
e379e21
try 2
matthewlefler Feb 22, 2026
dbba96f
got window working on my machine
matthewlefler Feb 26, 2026
dbd01bf
hide then show
matthewlefler Feb 26, 2026
671fa19
attempt 2
matthewlefler Feb 26, 2026
f52ffa4
notification window grab focus
matthewlefler Feb 26, 2026
d509b6f
poll volume using pamixer
matthewlefler Feb 26, 2026
267e1b9
added show/hide with linger time and reduced polling rate to 5 times …
matthewlefler Feb 26, 2026
85ad9b9
removed unused script and made everything quit when any window is closed
matthewlefler Feb 26, 2026
052c87e
added fps counter to dev mode, made screensavers stop and play when s…
matthewlefler Feb 27, 2026
bb18a46
fps font size change and add lowest
matthewlefler Feb 27, 2026
441a317
reduce buffer on videoplayers
matthewlefler Feb 27, 2026
7468b87
make scroll speed based on deltatime
matthewlefler Feb 27, 2026
754ae83
description sizing changes
matthewlefler Feb 27, 2026
5f895f7
try exclusive fullscreen
matthewlefler Feb 27, 2026
83fb0a3
try DisplayServer.WindowMoveToForeground
matthewlefler Feb 27, 2026
81087e7
force popup of window when volume changed
matthewlefler Feb 27, 2026
1db98dc
fix previous commit
matthewlefler Feb 28, 2026
48ac1d3
DisplayServer method may be lagging
matthewlefler Feb 28, 2026
f84f3b6
update export all to remove seperate notif service
matthewlefler Feb 28, 2026
b43d252
readme for recording screensaver videos and new world of wallhoppers …
matthewlefler Feb 28, 2026
16b752d
removed video that was over 100mb
matthewlefler Feb 28, 2026
05de24a
bomb omb squad lower quality video
matthewlefler Feb 28, 2026
f0f54b5
# of frames in flight = 3
matthewlefler Feb 28, 2026
d061b56
use different font for volume
matthewlefler Feb 28, 2026
57ea262
added grab focus to show
matthewlefler Feb 28, 2026
4f7d9c0
add DisplayServer.WindowMoveToForeground(id); back
matthewlefler Feb 28, 2026
8a3e529
screensaver videos back to default 500ms
matthewlefler Feb 28, 2026
3b634d7
volume bar styling
matthewlefler Mar 2, 2026
f215011
added button scene
matthewlefler Mar 2, 2026
79a485a
show supervisor hint after time spent inactive
matthewlefler Mar 2, 2026
8e12009
use new env functions
matthewlefler Mar 2, 2026
fcae085
add gamelaunched var to client
matthewlefler Mar 2, 2026
c0e6132
set gameLaunched to false on return
matthewlefler Mar 2, 2026
750a271
change supervisor hint time 60 -> 180
matthewlefler Mar 2, 2026
ab45d20
shine highlight on devcade logo
matthewlefler Mar 2, 2026
39b49f6
change dir and fixed constants
matthewlefler Mar 2, 2026
b03414d
slower
matthewlefler Mar 2, 2026
ae7e95c
slight semantic changes to recording readme
matthewlefler Mar 3, 2026
936d3b1
slight schange to game's relative scale on original gui
matthewlefler Mar 3, 2026
0abd338
Merge pull request #13 from matthewlefler/volume_notification
matthewlefler Mar 3, 2026
b893354
moved originalgui tag related to new sub folder fixed input being han…
matthewlefler Mar 5, 2026
0631557
fixed screensaver issues when tag list selected
matthewlefler Mar 5, 2026
fe03896
use custom slection for game and tag lists instead of builtin
matthewlefler Mar 6, 2026
96939c9
dont use inbuilt navigation for game buttons
matthewlefler Mar 6, 2026
2f32263
make game launched refocus on close
matthewlefler Mar 6, 2026
8d2ad83
fixed how switching between tag and game lists is handled
matthewlefler Mar 6, 2026
caf26eb
fixed scaling of the game buttons
matthewlefler Mar 6, 2026
20f06bc
fix to refocus game button on game closing
matthewlefler Mar 6, 2026
43443b8
fix not on main thread err and make shine smoother on screensaver
matthewlefler Mar 17, 2026
325d530
new static GuiManagerGlobal class
matthewlefler Mar 18, 2026
65f8db2
delete GuiInterface and fix methods
matthewlefler Mar 19, 2026
ee1af31
go back to using signals
matthewlefler Mar 19, 2026
f4ea9a7
fixed vairous call_defered issues
matthewlefler Mar 19, 2026
213fd09
make gui's poll game list
matthewlefler Mar 19, 2026
700fd07
update minimal gui
matthewlefler Mar 19, 2026
5aaf243
Made template a template
matthewlefler Mar 19, 2026
ca3a6f6
update Createing a gui readme
matthewlefler Mar 19, 2026
7d2619c
Merge pull request #14 from matthewlefler/gui-rework
matthewlefler Mar 21, 2026
dc3f162
onboard readme
matthewlefler Mar 21, 2026
0a99da8
update readme, forgot to show loading anim on reloading the game list
matthewlefler Mar 21, 2026
8c88290
one more bullet point
matthewlefler Mar 21, 2026
269e1d5
Merge pull request #15 from matthewlefler/docs
matthewlefler Mar 21, 2026
92a22e8
finish sentence that i forgor
matthewlefler Mar 21, 2026
d90340f
links and other minor additions
matthewlefler Mar 21, 2026
6b2019a
Merge pull request #16 from matthewlefler/docs-but-i-forgor
matthewlefler Mar 21, 2026
b594788
filter shown screensavers based on games in current game list
matthewlefler Mar 21, 2026
0307aaf
return on null taglist and print not eerr
matthewlefler Mar 21, 2026
1e58476
Merge pull request #17 from matthewlefler/screensaver-features
matthewlefler Mar 21, 2026
8e43f27
screensaver clear shown fix
matthewlefler Mar 21, 2026
b6ca1ca
remove print statment
matthewlefler Mar 21, 2026
c6f8849
Merge pull request #18 from matthewlefler/screensaver-fix
matthewlefler Mar 21, 2026
854771e
counter not bool
matthewlefler Mar 23, 2026
eca10cb
repeated input events
matthewlefler Mar 23, 2026
85bc21f
add input actions to list
matthewlefler Mar 23, 2026
0463a37
.parseInputEvent instead of actionPress
matthewlefler Mar 23, 2026
60a66cb
do repetition in GUI no gui manager
matthewlefler Mar 23, 2026
b85bb99
fix justpressed actions
matthewlefler Mar 23, 2026
85caa5c
fix isActionRepeated
matthewlefler Mar 23, 2026
7ccc36a
new screensaver anims
matthewlefler Mar 24, 2026
d18bdda
Merge pull request #19 from matthewlefler/guimanagerglobal
matthewlefler Mar 24, 2026
57a36cb
fixed where banners were not downloaded before loaded
matthewlefler Mar 29, 2026
d1662e0
few more comments
matthewlefler Mar 29, 2026
dd09d98
forgot to set the tag based on curretnTagUpdated signal
matthewlefler Mar 29, 2026
7ef958a
fix not setting max bound for selected game, and not setting focus
matthewlefler Mar 29, 2026
4ed87d1
Merge pull request #20 from matthewlefler/bug-fixes
matthewlefler Mar 29, 2026
b19125a
load or create log file location
matthewlefler Mar 29, 2026
10619fa
change placement of devcade logo
matthewlefler Mar 29, 2026
23d4e62
add show regardless option
matthewlefler Mar 29, 2026
0571bbe
simply string representation
matthewlefler Mar 29, 2026
28c48f8
add backup failure log location
matthewlefler Mar 29, 2026
a6f1da2
log class + logger class
matthewlefler Mar 29, 2026
ac7f4fa
moved some methods and variables around
matthewlefler Mar 29, 2026
c13328e
add logs to client.cs
matthewlefler Mar 30, 2026
3274ee7
remove files related to exported project
matthewlefler Mar 30, 2026
b05788a
remove color attempt as it does not work
matthewlefler Mar 30, 2026
980c79f
rename files
matthewlefler Apr 11, 2026
757c69e
logs for AutoLoad
matthewlefler Apr 11, 2026
6163549
ignore log messages that are below set value in .env
matthewlefler Apr 11, 2026
9cbdab9
update template with log location
matthewlefler Apr 12, 2026
d1b77a7
remove focusing on notif service
matthewlefler Apr 12, 2026
de28b46
logs for GuiManagerGlobal
matthewlefler Apr 12, 2026
36057ea
gui manager logs
matthewlefler Apr 12, 2026
ecaf8be
volume bar,
matthewlefler Apr 13, 2026
7019161
fix screensaver errors
matthewlefler Apr 13, 2026
2c0654e
Merge pull request #21 from matthewlefler/logs
matthewlefler Apr 13, 2026
de31411
debug messages
matthewlefler Apr 13, 2026
2f0b501
add timeout to get banner tasks
matthewlefler Apr 13, 2026
590a734
log current log level
matthewlefler Apr 13, 2026
3d749c7
fix formating of previous log statement
matthewlefler Apr 13, 2026
8025a5b
ten sec timeout for banner loading
matthewlefler Apr 14, 2026
361280d
move tags updated emit outside of loop
matthewlefler Apr 14, 2026
c3df5ff
Merge pull request #22 from matthewlefler/bug/inf-loading-screen
matthewlefler Apr 14, 2026
2a52801
fixed creating the symbolic link to the logs directory, also fixed a …
matthewlefler Apr 14, 2026
517a3de
fix target file path
matthewlefler Apr 14, 2026
09da122
fix removing the file at end of file path, also remove link if target…
matthewlefler Apr 14, 2026
41a1bc4
debug statement
matthewlefler Apr 14, 2026
412bcb3
remove debug statement and fix logic to not create link when not needed
matthewlefler Apr 14, 2026
269f4b9
Merge pull request #23 from matthewlefler/fix/logs
matthewlefler Apr 14, 2026
d382ea5
hide description and show game list when exiting game
matthewlefler Apr 14, 2026
70f739d
hide description when game is launched
matthewlefler Apr 14, 2026
3f90302
don't reset last pressed button
matthewlefler Apr 14, 2026
1a9c4e5
use function i made earlier instead
matthewlefler Apr 14, 2026
1c151bf
show game list too
matthewlefler Apr 14, 2026
b4aee63
only play screensaver anims when visible
matthewlefler Apr 23, 2026
101a82a
fix tag list 2nd column being selected when switching to it
matthewlefler Apr 23, 2026
7c9ff04
update devcade icon script to be event based
matthewlefler Apr 23, 2026
80bf910
remove shader on logos on screensaver
matthewlefler Apr 23, 2026
4419ef3
set class index in setFocusedGame
matthewlefler Apr 23, 2026
5561f6f
different interpolation function for game buttons
matthewlefler Apr 23, 2026
5c01950
snap if rotation would overshoot
matthewlefler Apr 23, 2026
05af79f
Merge pull request #24 from matthewlefler/fix/original-gui-weirdness
matthewlefler Apr 24, 2026
b9194ce
larger info text on screensaver
matthewlefler Apr 24, 2026
e41bfe6
don't switch to dev mode when in demo mode
matthewlefler Apr 24, 2026
9ebf10c
fix symlink creation errors
matthewlefler Apr 24, 2026
c26ed93
disable flush on print
matthewlefler Apr 24, 2026
e9515f5
fix game list being slow to rotate buttons in many cases
matthewlefler Apr 25, 2026
560ec2c
select first button on reload
matthewlefler Apr 25, 2026
977a3ee
add author to description
matthewlefler Apr 25, 2026
e34d421
change z index
matthewlefler Apr 25, 2026
232a641
hide description
matthewlefler Apr 25, 2026
83cddaf
log statements
matthewlefler Apr 26, 2026
464df76
remove unused import
matthewlefler Apr 26, 2026
56dda85
add low performance mode to Env.cs and make background shader static …
matthewlefler Apr 26, 2026
f003f73
remove background icon low perf toggle, it doesn't do much
matthewlefler Apr 26, 2026
6fce6a9
fix originalGUI scene file
matthewlefler Apr 26, 2026
32649f2
Merge pull request #25 from matthewlefler/feature/instructions
matthewlefler Apr 26, 2026
741da48
initial bootc files and setup
matthewlefler Apr 27, 2026
a8a5c7a
config files rust and git repo
matthewlefler Apr 27, 2026
27ccd86
.env instead of build args, compose file, persistance volumes
matthewlefler Apr 27, 2026
049f65e
persist authed keys
matthewlefler Apr 27, 2026
4c92a4c
create iso
matthewlefler May 2, 2026
ad30956
update README in dcu containerization
matthewlefler May 2, 2026
8c192d2
remove useless mkdir statement
matthewlefler May 2, 2026
99a5e6d
make files under user owned by user
matthewlefler May 2, 2026
54d5086
replaced installing to a partition with installing to a machine
matthewlefler May 2, 2026
9e86137
fixed formatting mistakes
matthewlefler May 2, 2026
49ee315
more config files
matthewlefler May 2, 2026
077228c
fix dst path for export templates
matthewlefler May 2, 2026
fc4966f
remove non-working cmd
matthewlefler May 2, 2026
2d59bf9
rotate teminal display in bashrc
matthewlefler May 2, 2026
95a8f4b
fail2ban + config
matthewlefler May 2, 2026
0d60636
nvidia-smi
matthewlefler May 2, 2026
5fcc5e5
remove nvida driver related stuff
matthewlefler May 2, 2026
7993b7c
fedora 42, add required flatpak runtime
matthewlefler May 2, 2026
2e295b3
root user password
matthewlefler May 2, 2026
df0e4b9
fix extra && (syntax error)
matthewlefler May 2, 2026
ade23dc
fix flatpak install cmds
matthewlefler May 3, 2026
2b5918d
use config.toml for iso creation
matthewlefler May 3, 2026
a4aa6d2
lspci btop
matthewlefler May 3, 2026
d8ec3d7
enable fail2ban
matthewlefler May 3, 2026
c1e15ef
remove --now
matthewlefler May 3, 2026
89887e0
move service enable to root user space
matthewlefler May 3, 2026
8678b3a
nvidia stuff (for nvidia-smi and drivers)
matthewlefler May 3, 2026
c436af9
fix nvdia drivers and stuff
matthewlefler May 3, 2026
5dfeacd
add online script (nothing could go wrong right? (its for nvidia driv…
matthewlefler May 3, 2026
f7d0e2f
set kargs different way
matthewlefler May 3, 2026
b0d9ed6
set kargs different way
matthewlefler May 3, 2026
abd4c45
seperate nvidia container on FROM quay.io/coreos-devel/fedora-bootc-n…
matthewlefler May 3, 2026
a592db2
linting and nvidia-smi package in nvidia dockerfile
matthewlefler May 3, 2026
ddb591c
copy paste from example
matthewlefler May 4, 2026
be272e7
rm extra && \
matthewlefler May 4, 2026
990fcba
change driver to the 580 version
matthewlefler May 4, 2026
5487744
attempt to fix 2 nvidia services
matthewlefler May 4, 2026
e83e4fc
add core user
matthewlefler May 4, 2026
e623c1f
skip generate for now
matthewlefler May 4, 2026
47c6f38
ima try something
matthewlefler May 4, 2026
70a8233
remove logout and fix .xinitrc
matthewlefler May 4, 2026
71d2bff
a bit of cleanup of unused code and file
matthewlefler May 5, 2026
8aa2842
systemd based files and users
matthewlefler May 5, 2026
aa6829e
rename to custom_{files,users}.conf
matthewlefler May 5, 2026
36e1efb
extra arguments for backend fix other stuff related to files moving a…
matthewlefler May 5, 2026
33c1770
branch variable
matthewlefler May 5, 2026
9fd7a00
explicit ffmpeg runtime
matthewlefler May 5, 2026
fed9dcc
test remove env_clear
matthewlefler May 5, 2026
5c6a95a
add hostname
matthewlefler May 5, 2026
89a4f2b
check 2 places for the .env
matthewlefler May 5, 2026
87e07cb
systemctl mask to disable sleep
matthewlefler May 5, 2026
2aa6971
append devcade_ to frontend and backend, move exes to /usr/bin or glo…
matthewlefler Jun 17, 2026
b1856d4
fix linter issues and a few bugs: cargo not found, devcade account ex…
matthewlefler Jun 20, 2026
ea54e99
fix autoload error?
matthewlefler Jun 20, 2026
47ca333
i guess we're using 4.6.1 now
matthewlefler Jun 20, 2026
8c27748
seems to work
matthewlefler Jun 20, 2026
b33117c
fix bashrc and make /etc transient
matthewlefler Jun 20, 2026
133b944
rename onboard script to devcade_onboard add gdb to niceity software
matthewlefler Jun 21, 2026
fff1a28
Merge pull request #26 from matthewlefler/bootc
matthewlefler Jun 21, 2026
b60c1a0
no bugs related to upgrade
matthewlefler Jun 21, 2026
fb4f503
update bootc to 4.7
matthewlefler Jun 21, 2026
acf4ce0
Merge pull request #27 from matthewlefler/godot-4.7
matthewlefler Jun 21, 2026
ef6634e
more logging statements, remove notification window
matthewlefler Jun 21, 2026
f7dfa5f
fixed descriptions (dumb z-index issue)
matthewlefler Jun 21, 2026
f16c826
rehide description in scene
matthewlefler Jun 21, 2026
e34472e
Merge pull request #28 from matthewlefler/gui_manager_fixes
matthewlefler Jun 21, 2026
d177928
splash image
matthewlefler Jun 30, 2026
fede7f3
update loading animation
matthewlefler Jul 5, 2026
0e31a0f
single image for boot splash, fixed dockerfile, export templetes were…
matthewlefler Aug 25, 2026
62230fc
added commented out stuff for boot splash (i don't want to work on it…
matthewlefler Aug 25, 2026
89a4620
Merge pull request #29 from matthewlefler/boot_images
matthewlefler Aug 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,8 @@ HACKING/__pycache__/**
.env
onboard/.env
HACKING/.env
dcu/.env
dcu/output/**

# test locations for save data
onboard/backend/.save
Expand Down
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"godotTools.editorPath.godot4": "/usr/bin/godot-mono-4.4.1"
}
15 changes: 15 additions & 0 deletions HACKING/export-all.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash

# first arg is --help or -h or # of args != 3
if [[ $1 == --help ]] || [[ $1 == -h ]] || [[ $# -ne 3 ]]; then
echo "Usage:" $0 "<godot_executable> <path_to_root_folder> <out_path>"
exit
fi

# backend
# cargo build the backend cause yeah

# godot frontend
$1 --path $2/onboard/godot-frontend --headless --export-release "Linux" $3/godot_frontend

exit
32 changes: 19 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ Run the `update_onboard.sh` script located in HACKING

## Building (manual)

To build and run on the DCU, do the following from `./onboard/frontend`:
```
dotnet publish -c Release -r linux-x64 --no-self-contained
To build and run on the DCU, do the following from `./onboard/godot-frontend`:
```Bash
godot-4.4.1 --path ./ --headless --export-release "Linux" out-path/godot_frontend
```
And the following from `./onboard/backend`:
```
```Bash
cargo build --release --target x86_64-unknown-linux-gnu
```
To put it on the DCU, compress the `publish` folder located at `./onboard/frontend/bin/Release/netcoreapp3.1/linux-x64` and `scp` that to the DCU.
Expand All @@ -24,26 +24,32 @@ To setup and launch a development environment, you can do the following:

### Env Vars

There is a file called .env.template in the `./onboard` folder. Fill this in with appropriate values for the backend and frontend.

There is a file called [.env.template](/onboard/.env.template) in the `./onboard` folder. Copy the file to a new file called `.env` in the same directory. Then fill this in with appropriate values for the backend and frontend.

### Running outside a container

In onboard/frontend, run `dotnet run`
In **onboard/backend**, run `cargo run`

In onboard/backend, run `cargo run`
In the godot project manager, select the **onboard/godot-frontend** folder to open the frontend. <br>
Or run `godot --editor --path onboard/godot-frontend`

The frontend will log warnings about not being able to connect until the backend is up and running

### Building and Launching the Container
<!-- ### Building and Launching the Container

```
cd HACKING
./build-environment.sh
./launch-environment.sh
```
``` -->

## Further Devolopment

### Backend

#### `mgcb`
Nothing here yet

The container has `mgcb-editor` installed. To run that, do this:
`dotnet mgcb-editor`
### Frontend
For more information on:
* Creating a new GUI see: [CreatingAGuiREADME.md](/onboard/godot-frontend/GUIs/CreatingAGuiREADME.md)
* Creating a new screensaver animation see: [RecordingREADME.md](/onboard/godot-frontend/guiManager/screensaver/RecordingREADME.md)
3 changes: 3 additions & 0 deletions dcu/.env.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
PASSWORD_VAR=devcade
ROOT_PASSWORD_VAR=devcade
BRANCH_VAR=main
140 changes: 140 additions & 0 deletions dcu/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
FROM quay.io/fedora/fedora-bootc:43

# user and file systemd configs
COPY ./config-files/files.conf /usr/lib/tmpfiles.d/custom_files.conf
COPY ./config-files/users.conf /usr/lib/sysusers.d/custom_users.conf

# disable sleep/hiberate features
RUN systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

### required software
RUN dnf install -y \
openbox picom awk scrot xterm pamixer xdg-desktop-portal-gtk \
gcc-c++ git wget unzip dotnet-sdk-10.0 \
grep openssh-server openssl-devel fail2ban \
glib2-devel flatpak-devel libnfc-devel \
make cmake \
autoconf automake libtool \
xrandr @base-x \
plymouth-plugin-script

# install libfreefare-devel, as it is not in the package manager yet
RUN git clone https://github.com/nfc-tools/libfreefare.git && \
cd libfreefare && \
autoreconf -vis && \
./configure --prefix=/usr && \
make && make install && \
cd .. && rm -r libfreefare

# required flatpak runtimes
RUN flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo && \
flatpak install -y flathub org.freedesktop.Platform/x86_64/22.08

# root services config file
# ban people from ssh'ing after some number of attempts for some amount of time (see contents of file for specifics)
COPY ./config-files/sshd.local /etc/fail2ban/jail.d/sshd.local
# ssh server configuration file
COPY ./config-files/sshd_config /etc/ssh/sshd_config
RUN systemctl enable fail2ban; \
systemctl enable sshd

# # copy boot splash over
# COPY ./boot-splash/devcade /usr/share/plymouth/themes/devcade
# # set theme
# RUN ls -l /usr/share/plymouth/themes && \
# plymouth-set-default-theme -R devcade

# install Rust
RUN curl https://sh.rustup.rs -sSf | bash -s -- -y;
ENV PATH "/root/.cargo/bin:${PATH}"

# install godot 4.7-stable mono
RUN wget "https://github.com/godotengine/godot/releases/download/4.7-stable/Godot_v4.7-stable_mono_linux_x86_64.zip" && \
unzip Godot_v4.7-stable_mono_linux_x86_64.zip && \
mv Godot_v4.7-stable_mono_linux_x86_64/Godot_v4.7-stable_mono_linux.x86_64 /usr/bin/Godot_v4.7-stable_mono_linux.x86_64 && \
mv Godot_v4.7-stable_mono_linux_x86_64/GodotSharp /usr/bin/GodotSharp; \
rm Godot_v4.7-stable_mono_linux_x86_64.zip

# file required for xauth
RUN touch .Xauthority

### copy required files
# NOTE: required symlinks for some config files are created in dcu/config-files/files.conf
# ostree settings
COPY ./config-files/prepare-root.conf /usr/lib/ostree/prepare-root.conf

# openbox config file
COPY ./config-files/rc.xml /etc/xdg/openbox/rc.xml

# x11 init file
COPY ./config-files/.xinitrc /etc/X11/xinit/xinitrc

# bash init file
COPY ./config-files/.bashrc /etc/bashrc

# autologin service
COPY ./config-files/tty1_service_override.conf /etc/systemd/system/getty@tty1.service.d/override.conf

# required custom executables
COPY ./config-files/export-all ./config-files/devcade_onboard /usr/bin/

# export templates
COPY ./config-files/linux_debug.x86_64 \
./config-files/linux_release.x86_64 \
./config-files/linux_debug.x86_32 \
./config-files/linux_release.x86_32 \
/usr/share/godot/export_templates/4.7.stable.mono/

# symlink required for the export functionality of the godot cli,
# I blame godot for not letting me change the install location of the export templates
RUN mkdir -p /root/.local/share/godot/export_templates && \
ln -s -f /usr/share/godot/export_templates/4.7.stable.mono /root/.local/share/godot/export_templates/

# devcade-onboard git repository
ARG BRANCH_VAR
RUN git clone https://github.com/matthewlefler/devcade-onboard-ui-revamp.git && \
cd devcade-onboard-ui-revamp && git switch ${BRANCH_VAR}

RUN mkdir -p /usr/share/devcade/ && \
cp ./devcade-onboard-ui-revamp/onboard/.env.template /usr/share/devcade/.env

# export-all <godot-path> <absolute src path> <absolute out path>
RUN export-all \
Godot_v4.7-stable_mono_linux.x86_64 \
/devcade-onboard-ui-revamp \
/usr/bin

# delete git repo
RUN rm -r /devcade-onboard-ui-revamp

# enable autologin
RUN systemctl enable getty@tty1

# niceity software
RUN dnf install -y \
vim fastfetch btop lspci usbutils gdb \
&& dnf clean all

### cleanup
# remove all log files, runtime only, and temporary files
RUN rm -rf /var; \
rm -rf /run; \
rm -rf /tmp; \
mkdir -p /var/home; \
mkdir -p /run; \
mkdir -p /tmp;

ARG PASSWORD_VAR
ARG ROOT_PASSWORD_VAR
# set passwords and set devcade acc to not expire
RUN chage -E -1 devcade; \
echo -e "devcade:${PASSWORD_VAR}" | chpasswd; \
echo -e "root:${ROOT_PASSWORD_VAR}" | chpasswd;

# make it known as a bootc container
LABEL containers.bootc=1
LABEL bootc.rootfs=/sysroot

RUN bootc container lint

RUN plymouth-set-default-theme --list
31 changes: 31 additions & 0 deletions dcu/Dockerfile.nvidia
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
FROM localhost/dcu-devcade-onboard

### Nvidia drivers
# enable require repositories
RUN dnf -y install \
https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm \
https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm && \
# Install NVIDIA drivers
dnf install -y --allowerasing \
akmod-nvidia \
xorg-x11-drv-nvidia \
xorg-x11-drv-nvidia-cuda

# Rebuild akmods
RUN akmods --force --kernels `rpm -q --queryformat '%{VERSION}-%{RELEASE}.%{ARCH}' kernel-devel`
# add kernel arguments
# see: https://bootc.dev/bootc/building/kernel-arguments.html
RUN mkdir -p /usr/lib/bootc/kargs.d
RUN cat <<EOF >> /usr/lib/bootc/kargs.d/01-nvidia-driver.toml
kargs = ["rd.driver.blacklist=nouveau", "modprobe.blacklist=nouveau", "nvidia-drm.modeset=1"]
match-architectures = ["x86_64", "aarch64"]
EOF

RUN flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo && \
flatpak install -y flathub org.freedesktop.Platform.GL.nvidia-580-142

# make it known as a bootc container
LABEL containers.bootc=1
LABEL bootc.rootfs=/sysroot

RUN bootc container lint
126 changes: 126 additions & 0 deletions dcu/README.md
Original file line number Diff line number Diff line change
@@ -1 +1,127 @@
Documentation can be found here: https://devcade-docs.csh.rit.edu/#/Hardware/installing-dcu

# bootc containerization
see https://docs.fedoraproject.org/en-US/bootc/getting-started/
for image building tool documentation https://github.com/osbuild/bootc-image-builder
**bootc** is a tool for creating bootable containers, basically meaning putting a container on top of a kernel.
In this case Fedora is used as a base image, and the devcade-onboard is built on top of it using a Dockerfile based container.
## Installing
For most use cases this is unnecessary, and you can skip this
### For official installation documentation see:
see https://bootc.dev/bootc/packaging-and-integration.html
### Arch:

First try:
```bash
paru bootc
```

If that fails build the program manually:
```bash
git clone https://github.com/bootc-dev/bootc.git # clone the git repository
cd bootc
sudo make install # build and install the program
```
Then install dependencies
```
bootupd, skopo
```
## Installing to a machine
Requirements:
- USB stick
- This repository
- At most 20 minutes

***Note:* This wipes whatever drive it is installed to, removing all data already there, do not install this to a machine that contains important data, as it will be wiped**
create the ISO as follows, in `devcade-onboard/dcu/`:
```bash
./create-iso.sh
```
Then create a bootable USB drive using the tool of your choice (I used a Ventoy where i can just copy the ISO to the USB stick)
Then insert the USB stick into the machine and turn it on, going to the BIOS if needed to boot from the USB stick.
Then select install (the first option) to install the devcade container to the machine.

# Testing
## Using podman
Refer to: https://github.com/containers/podman/blob/main/docs/tutorials/podman_tutorial.md

*Quick note:* these images are around 5-6 GiB in size at the moment.
To remove unused images run `podman image purge`.
The reason why this command is not run automatically is that it could remove images that the user wants to keep unintentionally.
## Testing the container
For a quick way to test things like:
- file structure
- file ownership
- package installation
- Dockerfile correctness
build and run the container locally
### Using predefined scripts
First build the container with:
```bash
./build.sh
```
Then run it with:
```bash
./run.sh
```
### Manually
First build the container with:
```bash
podman build --build-arg-file=./.env -t dcu-devcade-onboard:latest .
```
Then run it with:
```bash
podman run -p 2200:22 -it dcu-devcade-onboard:latest /bin/bash
```
### SSH
to SSH into the container run:
```bash
ssh -p 2200 devcade@localhost
```
to ssh while forwarding the display server
```bash
ssh -p 2200 -X devcade@localhost
```
### ISO
The only true way to test the container is to boot is though "real" hardware, e.g. a virtual machine.
#### Requirements
- compatible virtual machine software
- all it needs to be able to do is boot from an **ISO** file
- podman
- sudo
- an internet connection
- 10-15 minutes (may take longer or shorter depending on hardware)
#### Creation
```bash
./create-iso.sh
```
if prompted for your password enter it, the container to create the ISO requires elevated privileges, and by extension building the dcu-devcade-onboard image requires it. *Note: that copying the container to the root user is possible but it was found to be slower than just having the root user build it.*
#### Virtual Machine
##### Setup
After the script finishes an ISO file will exist as `./output/bootiso/install.iso`. In this example i will use `virtmanager` but other virtual machine software should work.
1. Start `virtmanager`, click on **create a new virtual machine** in the top left (the computer icon with the star). This will open a pop-up window.
2. Next select **local media install** and click **Forward**.
3. Then click **browse**, if the path `/path/to/git/repo/dcu/output/bootiso/install.iso` is there you can select it, if not click **Browse Local** and find it there.
4. Then click **Choose Volume** and if it does not detect the operating system uncheck **Automatically detect from the installation media / source** and manually select it from the selections, currently this is **Fedora 43** but check to make sure
5. Then click **Forward** again and select the number of CPUs and memory to dedicate to this VM, i find the default 2 and 4 GiB work for me, but higher numbers will make it faster.
6. Click **Forward** again and allocate storage to the machine, again the defaults have been fine to me, but if run out of storage, you can increase the number of GiB allocated.
7. Click **Forward** again and give it a name, network selection is also possible here, but the default is fine again.
8. Click **Finish** to create the new virtual machine
At this point the machine will start booting, this does take some time to do so, so take a break and scroll Reddit or something.

After the machine finishes installing the container and booting, you should be in a WM where the onboard is running
##### Useful info
To **stop** the machine click the **power button icon** at the top of the virtual machine's output display, or shut down the machine from the command line.
To **release the mouse** press `left alt + left ctrl`, or try `left ctrl + left alt + g`.
##### Issues
If you get any issues, such as not being able to select an OS make sure the libvirtd service is started: `systemctl start libvirtd`
##### SSH
Click on **view** then **details** and click on the sub category: **NIC ab:cd:ef:gh:ij:kl** and the IP address to use is listed as **IP address: 192.xxx.xxx.xxx**
Then run:
```bash
ssh devcade@ip-address
```
If any issues arise, running in verbose mode will reveal more information:
```bash
ssh -v devcade@ip-address
```
Binary file added dcu/boot-splash/devcade/0150.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added dcu/boot-splash/devcade/box.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added dcu/boot-splash/devcade/bullet.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading