about summary refs log tree commit diff
path: root/pkgs/development/tools/steamos-devkit/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/tools/steamos-devkit/default.nix')
-rw-r--r--pkgs/development/tools/steamos-devkit/default.nix135
1 files changed, 135 insertions, 0 deletions
diff --git a/pkgs/development/tools/steamos-devkit/default.nix b/pkgs/development/tools/steamos-devkit/default.nix
new file mode 100644
index 0000000000000..8451f7f9898eb
--- /dev/null
+++ b/pkgs/development/tools/steamos-devkit/default.nix
@@ -0,0 +1,135 @@
+{ 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.20221101";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.steamos.cloud";
+    owner = "devkit";
+    repo = "steamos-devkit";
+    rev = "v${version}";
+    sha256 = "sha256-VKnfcMF3WxkvqxlhJF+5j4Hso/TZpSS4dMOmSrWagRU=";
+  };
+
+  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";
+    homepage = "https://gitlab.steamos.cloud/devkit/steamos-devkit";
+    license = licenses.mit;
+    maintainers = with maintainers; [ myaats ];
+  };
+}