XR for Universal Blue and Fedora Atomic Desktops
vr fedora-atomic linux
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add commands for managing runtime dependencies

Closes #5

Signed-off-by: Shiloh Fen <shiloh@shilohfen.com>

matrixfurry.com 4555c498 9322f928

verified
+116 -41
+2 -41
src/atomic-xr/envision.nu
··· 5 5 const envision_config_path = "~/.config/envision/envision.json" | path expand 6 6 7 7 use std log 8 - 9 - const runtime_deps = { 10 - xr: [openxr-libs openvr-api] 11 - monado: [ 12 - # TODO: Is there a way to build monado that doesn't require all of these at runtime? 13 - libuvc 14 - openhmd 15 - opencv 16 - onnxruntime 17 - librealsense 18 - opencv-video 19 - ] 20 - } 8 + use runtime.nu 21 9 22 10 export def install [ 23 11 --no-monado (-m) # Don't install runtime deps for Monado 24 12 ] { 25 - let deps = $runtime_deps.xr | if not $no_monado { 26 - append $runtime_deps.monado 27 - } else {$in} 28 - 29 - ensure-host-packages $deps 13 + runtime install xr (if not $no_monado {"monado"}) 30 14 31 15 distrobox create envision --no-entry -Y -i registry.fedoraproject.org/fedora-toolbox:latest 32 16 distrobox enter envision -- sudo dnf install -y nu ··· 36 20 37 21 export def uninstall [] { 38 22 try {distrobox rm -f envision} 39 - rpm-ostree uninstall ...($runtime_deps | transpose k v | get v | flatten) --idempotent 40 23 rm -f ~/.local/bin/envision ~/.local/share/applications/org.gabmus.envision.Devel.desktop ~/.local/share/applications/org.gabmus.envision.Devel.desktop ~/.local/share/bin/envision 41 24 log info "Successfully uninstalled Envision" 42 - } 43 - 44 - def ensure-host-packages [ 45 - packages: list<string> 46 - ] { 47 - let missing_packages = $packages 48 - | each {|package| 49 - if (rpm -q $package | complete | get exit_code) != 0 { 50 - $package 51 - } 52 - } 53 - 54 - if ($missing_packages | is-not-empty) { 55 - rpm-ostree install ...$missing_packages 56 - job spawn { 57 - match (notify-send -u critical "Package(s) installed" "Please reboot or use `rpm-ostree ex apply-live` before attempting to launch Envision." -A reboot="Reboot" -A live="Apply Changes Live") { 58 - "reboot" => (systemctl reboot) 59 - "live" => (pkexec rpm-ostree ex apply-live) 60 - } 61 - } 62 - null 63 - } 64 25 } 65 26 66 27 export def upgrade [] {
+1
src/atomic-xr/mod.nu
··· 5 5 export use flatpak.nu 6 6 export use homebrew.nu 7 7 export use steamvr-lh.nu 8 + export use runtime.nu
+113
src/atomic-xr/runtime.nu
··· 1 + # SPDX-License-Identifier: AGPL-3.0-only 2 + # Copyright (c) 2025 Shiloh Fen <shiloh@shilohfen.com> 3 + 4 + use std log 5 + 6 + const runtime_deps = { 7 + xr: [openxr-libs openvr-api] 8 + monado: [ 9 + libuvc 10 + openhmd 11 + opencv 12 + onnxruntime 13 + librealsense 14 + opencv-video 15 + ] 16 + } 17 + 18 + # Install runtime dependencies 19 + export def install [ 20 + ...groups: string # Package groups to install 21 + ] { 22 + ensure-installed (get-packages $groups) 23 + } 24 + 25 + # Uninstall runtime dependencies 26 + export def uninstall [ 27 + ...groups: string # Package groups to install 28 + ] { 29 + ensure-not-installed (get-packages $groups) 30 + } 31 + 32 + def get-packages [ 33 + groups: list<string> 34 + ] { 35 + if ($groups | is-empty) { 36 + $runtime_deps 37 + | transpose group packages 38 + } else { 39 + validate $groups 40 + 41 + $runtime_deps 42 + | transpose group packages 43 + | where group in $groups 44 + } 45 + | get packages 46 + | flatten 47 + } 48 + 49 + def validate [ 50 + groups: list<string> 51 + ] { 52 + let avaliable_groups = $runtime_deps 53 + | transpose group packages 54 + | get group 55 + 56 + $groups 57 + | each {|group| 58 + if $group not-in $avaliable_groups { 59 + error make { 60 + msg: "Unknown package group" 61 + label: { 62 + span: (metadata $group).span 63 + text: $"Unknown package group: ($group)" 64 + } 65 + help: $"Avaliable groups: ($avaliable_groups | str join ', ')" 66 + } 67 + } 68 + } 69 + } 70 + 71 + def ensure-installed [ 72 + packages: list<string> 73 + ] { 74 + let missing_packages = $packages 75 + | each {|package| 76 + if (rpm -q $package | complete | get exit_code) != 0 { 77 + $package 78 + } 79 + } 80 + 81 + if ($missing_packages | is-not-empty) { 82 + rpm-ostree install ...$missing_packages 83 + job spawn { 84 + match (notify-send -u critical "Package(s) installed" "Please reboot or use `rpm-ostree ex apply-live` to apply changes." -A reboot="Reboot" -A live="Apply Changes Live") { 85 + "reboot" => (systemctl reboot) 86 + "live" => (pkexec rpm-ostree ex apply-live) 87 + } 88 + } 89 + null 90 + } 91 + } 92 + 93 + def ensure-not-installed [ 94 + packages: list<string> 95 + ] { 96 + let installed_packages = $packages 97 + | each {|package| 98 + if (rpm -q $package | complete | get exit_code) == 0 { 99 + $package 100 + } 101 + } 102 + 103 + if ($installed_packages | is-not-empty) { 104 + rpm-ostree remove ...$installed_packages 105 + job spawn { 106 + match (notify-send -u critical "Package(s) removed" "Please reboot or use `rpm-ostree ex apply-live` to apply changes." -A reboot="Reboot" -A live="Apply Changes Live") { 107 + "reboot" => (systemctl reboot) 108 + "live" => (pkexec rpm-ostree ex apply-live --allow-replacement) 109 + } 110 + } 111 + null 112 + } 113 + }