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
|
{ lib
, fetchFromGitHub
, fetchFromGitLab
, writeScript
, python3
, copyDesktopItems
, makeDesktopItem
, pkg-config
, SDL2
}:
let
# steamos-devkit requires a build of the unreleased pyimgui 2.0 branch, move to pythonPackages when 2.0 is released.
pyimgui = python3.pkgs.buildPythonPackage {
pname = "pyimgui";
version = "unstable-2022-03-06";
src = fetchFromGitHub {
owner = "pyimgui";
repo = "pyimgui";
rev = "1f095af5886f424ee12f26fa93b108b6420fafa4"; # dev/version-2.0 branch
fetchSubmodules = true;
sha256 = "sha256-k070ue132m8H1Zm8bo7J7spCS5dSTGOj689ci7vJ+aw=";
};
nativeBuildInputs = with python3.pkgs; [
cython
pkg-config
SDL2
];
propagatedBuildInputs = with python3.pkgs; [
click
pyopengl
pysdl2
];
# Requires OpenGL acceleration
doCheck = false;
pythonImportsCheck = [ "imgui" ];
};
steamos-devkit-script = ''
#!${python3.interpreter}
import os
# Change the cwd to avoid imgui using cwd which often is ~ to store the state, use the same location as the settings
path = os.path.expanduser(os.path.join("~", ".devkit-client-gui"))
os.makedirs(path, exist_ok=True)
os.chdir(path)
# Workaround to get pysdl to work on wayland, remove when https://gitlab.steamos.cloud/devkit/steamos-devkit/-/issues/1 is solved.
if os.environ.get("XDG_SESSION_TYPE") == "wayland":
os.environ["SDL_VIDEODRIVER"] = "wayland"
import devkit_client.gui2
devkit_client.gui2.main()
'';
in
python3.pkgs.buildPythonPackage rec {
pname = "steamos-devkit";
version = "0.20230411.0";
src = fetchFromGitLab {
domain = "gitlab.steamos.cloud";
owner = "devkit";
repo = "steamos-devkit";
rev = "v${version}";
sha256 = "sha256-DQIyjEpUFnC0OjMjKMrGYs4+HoEDfcSc3m3rfXLPyZ0=";
};
propagatedBuildInputs = with python3.pkgs; [
appdirs
bcrypt
cffi
cryptography
idna
ifaddr
netifaces
numpy
paramiko
pycparser
pyimgui
pynacl
pysdl2
signalslot
six
];
nativeBuildInputs = [
copyDesktopItems
];
postUnpack = ''
# Find the absolute source root to link correctly to the previous root
prevRoot=$(realpath $sourceRoot)
# Update the source root to the devkit_client package
sourceRoot="$sourceRoot/client"
# Link the setup script into the new source root
ln -s $prevRoot/setup/shiv-linux-setup.py $sourceRoot/setup.py
'';
postInstall = ''
mkdir -p $out/bin
# These are various assets like scripts that steamos-devkit will copy to the remote device
cp -R ./devkit-utils $out/${python3.sitePackages}/devkit-utils
# writeScript + symlink will be ignored by wrapPythonPrograms
# Copying it is undesirable too, just write it directly to a script instead
cat << EOF > $out/bin/steamos-devkit
${steamos-devkit-script}
EOF
chmod +x $out/bin/steamos-devkit
'';
# There are no checks for steamos-devkit
doCheck = false;
pythonImportsCheck = [ "devkit_client" ];
desktopItems = [
(makeDesktopItem {
name = "SteamOS-Devkit";
exec = "steamos-devkit";
desktopName = "SteamOS Devkit Client";
})
];
meta = with lib; {
description = "SteamOS Devkit Client";
mainProgram = "steamos-devkit";
homepage = "https://gitlab.steamos.cloud/devkit/steamos-devkit";
license = licenses.mit;
maintainers = with maintainers; [ myaats ];
};
}
|