From 585a398dbcfe215a9345612b127510a121fdd656 Mon Sep 17 00:00:00 2001 From: Nojus Date: Tue, 15 Jul 2025 00:24:57 +0200 Subject: [PATCH 1/3] module.nix: init --- flake.nix | 1 + module.nix | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 module.nix diff --git a/flake.nix b/flake.nix index 7e14bb7..58093a4 100644 --- a/flake.nix +++ b/flake.nix @@ -6,5 +6,6 @@ pkgs = import nixpkgs { inherit system; }; in { packages.${system}.default = pkgs.callPackage ./default.nix {}; + nixosModules.default = import ./module.nix; }; } diff --git a/module.nix b/module.nix new file mode 100644 index 0000000..d91ad93 --- /dev/null +++ b/module.nix @@ -0,0 +1,26 @@ +{ config, lib, pkgs, ... }: +let + cfg = config.services.lsfg-vk; + lsfg-vk = pkgs.callPackage ./default.nix {}; +in +{ + options = { + services.lsfg-vk = { + enable = lib.mkEnableOption "Lossless Scaling Frame Generation Vulkan layer"; + + package = lib.mkOption { + type = lib.types.package; + description = "The lsfg-vk package to use"; + default = lsfg-vk; + }; + }; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = [ cfg.package ]; + + # Installs the Vulkan implicit layer system-wide + environment.etc."vulkan/implicit_layer.d/VkLayer_LS_frame_generation.json".source = + "${cfg.package}/share/vulkan/implicit_layer.d/VkLayer_LS_frame_generation.json"; + }; +} From c628fde2132a0cd44b4cdc117a333fbf8b1aeefc Mon Sep 17 00:00:00 2001 From: Nojus Date: Tue, 15 Jul 2025 00:32:41 +0200 Subject: [PATCH 2/3] default.nix: update lsfg-vk to 83b869b --- default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/default.nix b/default.nix index a810806..6fef972 100644 --- a/default.nix +++ b/default.nix @@ -10,13 +10,13 @@ in llvmPackages.stdenv.mkDerivation { pname = "lsfg-vk"; - version = "unstable-2025-07-13-f998647"; + version = "unstable-2025-07-14-83b869b"; src = fetchFromGitHub { owner = "PancakeTAS"; repo = "lsfg-vk"; - rev = "f998647d74051467e39de9de2df2ff9a5996db5f"; - hash = "sha256-X708aKFz3wqSVYsMvCKsY7kqi+2LTewnoOMrXFPVEPY="; + rev = "83b869b0c4d4cd4da2e760126242c6ed76bafec8"; + hash = "sha256-LN6DkLN6pMmYRaj+TsAL3PLqINMeYOhQ2Kw16bRF/Q4="; fetchSubmodules = true; }; From 0e4a10cb682203494c1c7fde54124d76c5c91b9b Mon Sep 17 00:00:00 2001 From: Nojus Date: Tue, 15 Jul 2025 02:33:15 +0200 Subject: [PATCH 3/3] readme: make it somewhat nicer --- README.md | 59 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 52 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index f1dc805..ec61738 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,56 @@ # lsfg-vk-flake -WIP! Nix flake to build the library for using Lossless Scaling's frame generation on Linux +Nix flake for using [Lossless Scaling's frame generation on Linux](https://github.com/PancakeTAS/lsfg-vk) -current state: builds and seems to be functional +>[!IMPORTANT] +> You need to have Lossless Scaling installed on Steam! +> In case it is not installed on the default Steam drive, you may want to consider setting the environment variable ``LSFG_DLL_PATH=/Lossless.dll`` -## manual install -1. build the library with ``nix build`` -2. copy library and vulkan layer config to your ~/.local: ``cp -r result/* ~/.local/`` (check contents of result first!) -3. have lossless scaling installed on Steam or manually reference the DLL file using LSFG_DLL_PATH +## Installation +### System-wide (NixOS module) +This approach will install an implicit layer to ``/etc/vulkan/implicit_layer.d/`` -example usage command: ``LD_PRELOAD=~/.local/lib/liblsfg-vk.so LSFG_DLL_PATH=/Lossless.dll ENABLE_LSFG=1 vkcube`` +Add this repository to your flake inputs, output function and module list: +```nix +inputs = { + ... + lsfg-vk-flake.url = "github:pabloaul/lsfg-vk-flake/main"; + lsfg-vk-flake.inputs.nixpkgs.follows = "nixpkgs"; +} + +outputs = {nixpkgs, lsfg-vk-flake, ...}: { + + nixosConfigurations.hostname = nixpkgs.lib.nixosSystem { + ... + modules = [ + ... + lsfg-vk-flake.nixosModules.default + ]; + }; +} +``` + +And then you should be able to enable this in your system config using: +```nix +services.lsfg-vk.enable = true; + +# optional but recommended: +environment.variables = { LSFG_DLL_PATH = "/Lossless.dll"; } +``` + +### User install (manual) +1. Build the library: + ``nix build`` +3. Create the following path in case it does not exist: + ``mkdir -p $HOME/.local/share/vulkan/implicit_layer.d`` +3. Symlink the build results to your $HOME/.local/ + ``cp -ifrsv "$(readlink -f ./result)"/* $HOME/.local/`` + +## Usage +Run a Vulkan application with the environment variable ``ENABLE_LSFG=1`` set. + +Example: ``ENABLE_LSFG=1 vkcube`` and look for output like this in the terminal: lsfg-vk(...): ... + +You can also enable it per game on Steam by adding this to the launch options of a game like this: + ``ENABLE_LSFG=1 %COMMAND%`` + +There are many more options that can be set. Consult the original repository for further documentation. \ No newline at end of file