Files
Pierre Kisters 4034fd4ded VR pet: a cat or dog in SteamVR's scene (steamFrame.pet)
A SteamVR dashboard patch (vr-pet) drawing a baked 3D pet next to the
windows: the Toon Cat in five coats, a Shiba Inu, a Fox and a Dachshund,
plus models from steamFrame.pet.extraModels. It walks around, follows,
sits, lies and sleeps, can be picked up by its grip bar, petted and
switched in its menu; its spot, pose and model are saved state.

Also the vr-pet command, "Pet" in the "+" menu with the current model's
icon (steam-frame-nix-pet-icon), the flake outputs pet-models,
pet-icons and pet-preview, and the check pet. A built-in model with
"private": true fails evaluation; private models belong in extraModels.
2026-10-01 04:33:39 +02:00

112 lines
5.2 KiB
Nix

{
description = "Home Manager modules for the Valve Steam Frame (SteamOS, aarch64-linux)";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
clipboard-sync-src = {
url = "github:dnut/clipboard-sync";
flake = false; # just the source; its flake outputs are x86-only
};
};
outputs = { self, nixpkgs, clipboard-sync-src }:
let
modules = {
session = ./modules/session.nix;
portal = ./modules/portal.nix;
applications-menu = ./modules/applications-menu.nix;
keyboard-layout = ./modules/keyboard-layout.nix;
vr-keyboard-extra-keys = ./modules/vr-keyboard-extra-keys.nix;
vr-keyboard = ./modules/vr-keyboard.nix;
vr-keyboard-controllers = ./modules/vr-keyboard-controllers.nix;
vr-keyboard-touch = ./modules/vr-keyboard-touch.nix;
hidden-apps = ./modules/hidden-apps.nix;
steam-ui-patches = ./modules/steam-ui-patches.nix;
launcher-menu = ./modules/launcher-menu.nix;
steamvr-debugger = ./modules/steamvr-debugger.nix;
cleanup = ./modules/cleanup.nix;
dashboard-windows = ./modules/dashboard-windows.nix;
steam-close-button = ./modules/steam-close-button.nix;
window-curvature = ./modules/window-curvature.nix;
frame-controls = ./modules/frame-controls.nix;
# Built with the consumer's pkgs; `key` dedups direct + `default` imports.
clipboard-sync = {
key = "steam-frame-nix/clipboard-sync";
_file = ./modules/clipboard-sync.nix;
imports = [ (import ./modules/clipboard-sync.nix { inherit clipboard-sync-src; }) ];
};
firefox = ./modules/firefox.nix;
jellyfin = ./modules/jellyfin.nix;
launchers = ./modules/launchers.nix;
docker = ./modules/docker.nix;
screenshots = ./modules/screenshots.nix;
pet = ./modules/pet.nix;
};
# Former attribute names, kept so existing imports keep working (not in
# `default`, which imports each module once under its current name).
aliases = {
steam-keyboard-patch = modules.vr-keyboard-extra-keys; # its name until 2026-09
keyring = modules.launchers; # until 2026-09 (its options now fail with the new form)
};
systems = [ "aarch64-linux" "x86_64-linux" ];
forSystems = f: nixpkgs.lib.genAttrs systems (system: f nixpkgs.legacyPackages.${system});
# The VR pet's build (defaults: no extraModels), for its packages and check.
petFor = pkgs: import ./modules/pet/package.nix { inherit pkgs; };
in {
homeManagerModules = modules // aliases // {
default = { imports = builtins.attrValues modules; };
};
# cleanup: removes what steam-frame-nix wrote outside the Nix store
# (install.sh cleanup): nix run github:lhns/steam-frame-nix#cleanup -- --all
# pet-*: the VR pet's baked cat (pet-models), its "+" menu icons
# (pet-icons) and its desktop preview (nix run …#pet-preview), docs/pet.md.
packages = forSystems (pkgs: let pet = petFor pkgs; in {
cleanup = pkgs.callPackage ./modules/cleanup/package.nix { };
pet-models = pet.models;
pet-icons = pet.icons;
pet-preview = pet.preview;
});
apps = nixpkgs.lib.mapAttrs (_: p: {
cleanup = {
type = "app";
program = "${p.cleanup}/bin/steam-frame-nix-cleanup";
meta.description = "Remove what steam-frame-nix wrote outside the Nix store";
};
pet-preview = {
type = "app";
program = "${p.pet-preview}/bin/vr-pet-preview";
meta.description = "The VR pet in a browser (http://127.0.0.1:8765/)";
};
}) self.packages;
# Tests of the VR keyboard (text model, corrector, swipe decoder on the
# default German + English dictionary), the controller geometry and touch
# typing, the extra keys' xdotool allowlist, the Jellyfin mpv shim, the
# Firefox wrapper, the launchers, install.sh cleanup, the
# applications.menu link, the portal config, the screenshots account
# detection and the VR pet (core, SteamVR adapter, CLI, models, icons):
# nix flake check
checks = forSystems (pkgs: {
applications-menu = import ./modules/applications-menu/check.nix { inherit pkgs; };
cleanup = import ./modules/cleanup/check.nix { inherit pkgs; };
firefox = import ./modules/firefox/check.nix { inherit pkgs; };
jellyfin = import ./modules/jellyfin/check.nix { inherit pkgs; };
launchers = import ./modules/launchers/check.nix { inherit pkgs; };
pet = import ./modules/pet/check.nix { inherit pkgs; };
portal = import ./modules/portal/check.nix { inherit pkgs; };
screenshots = import ./modules/screenshots/check.nix { inherit pkgs; };
vr-keyboard = import ./modules/vr-keyboard/check.nix { inherit pkgs; };
vr-keyboard-extra-keys = import ./modules/vr-keyboard-extra-keys/check.nix { inherit pkgs; };
vr-keyboard-controllers = import ./modules/vr-keyboard-controllers/check.nix { inherit pkgs; };
vr-keyboard-touch = import ./modules/vr-keyboard-touch/check.nix { inherit pkgs; };
});
# nix flake init -t github:lhns/steam-frame-nix
templates.default = {
path = ./template;
description = "Standalone Home Manager configuration for SteamOS using steam-frame-nix";
};
};
}