aboutsummaryrefslogtreecommitdiff
path: root/nix
diff options
context:
space:
mode:
authorTrial97 <alexandru.tripon97@gmail.com>2023-09-28 22:50:12 +0300
committerTrial97 <alexandru.tripon97@gmail.com>2023-09-28 22:50:12 +0300
commit9acbf98f940204cd141203a6eccbc9a7351e5a78 (patch)
tree6ac8fe4b0e51ee58c67e02783fe97b00de707167 /nix
parent254444470f020b086648ac496ebfffb7d3e9ce05 (diff)
parent59e565ef96b85be9a25fa5d4f1723ee87fd5e75e (diff)
downloadPrismLauncher-9acbf98f940204cd141203a6eccbc9a7351e5a78.tar.gz
PrismLauncher-9acbf98f940204cd141203a6eccbc9a7351e5a78.tar.bz2
PrismLauncher-9acbf98f940204cd141203a6eccbc9a7351e5a78.zip
Merge branch 'develop' of https://github.com/PrismLauncher/PrismLauncher into feat/acknowledge_release_type
Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
Diffstat (limited to 'nix')
-rw-r--r--nix/NIX.md89
-rw-r--r--nix/README.md193
-rw-r--r--nix/default.nix32
-rw-r--r--nix/dev.nix43
-rw-r--r--nix/distribution.nix66
-rw-r--r--nix/package.nix65
-rw-r--r--nix/pkg/default.nix74
-rw-r--r--nix/pkg/wrapper.nix94
8 files changed, 429 insertions, 227 deletions
diff --git a/nix/NIX.md b/nix/NIX.md
deleted file mode 100644
index aa945acc..00000000
--- a/nix/NIX.md
+++ /dev/null
@@ -1,89 +0,0 @@
-# Running on Nix
-
-## Putting it in your system configuration
-
-### On flakes-enabled nix
-
-#### Directly installing
-
-The `prismlauncher` flake provides a package which you can install along with
-the rest of your packages
-
-```nix
-# In your flake.nix:
-{
- inputs = {
- prismlauncher.url = "github:PrismLauncher/PrismLauncher";
- };
-}
-```
-
-```nix
-# And in your system configuration:
-environment.systemPackages = [ prismlauncher.packages.${pkgs.system}.prismlauncher ];
-
-# Or in your home-manager configuration:
-home.packages = [ prismlauncher.packages.${pkgs.system}.prismlauncher ];
-```
-
-#### Using the overlay
-
-Alternatively, you can overlay the prismlauncher version in nixpkgs which will
-allow you to install using `pkgs` as you normally would while also using the
-latest version
-
-```nix
-# In your flake.nix:
-{
- inputs = {
- prismlauncher.url = "github:PrismLauncher/PrismLauncher";
- };
-}
-```
-
-```nix
-# And in your system configuration:
-nixpkgs.overlays = [ inputs.prismlauncher.overlay ];
-environment.systemPackages = [ pkgs.prismlauncher ];
-
-# Or in your home-manager configuration:
-config.nixpkgs.overlays = [ inputs.prismlauncher.overlay ];
-home.packages = [ pkgs.prismlauncher ];
-```
-
-### Without flakes-enabled nix
-
-<details>
-<summary>Using channels</summary>
-
-```sh
-nix-channel --add https://github.com/PrismLauncher/PrismLauncher/archive/master.tar.gz prismlauncher
-nix-channel --update prismlauncher
-nix-env -iA prismlauncher
-```
-
-</details>
-
-<details>
-<summary>Using the overlay</summary>
-
-```nix
-# In your configuration.nix:
-{
- nixpkgs.overlays = [
- (import (builtins.fetchTarball "https://github.com/PrismLauncher/PrismLauncher/archive/develop.tar.gz")).overlay
- ];
-
- environment.systemPackages = with pkgs; [ prismlauncher ];
-}
-```
-
-</details>
-
-## Running ad-hoc
-
-If you're on a flakes-enabled nix you can run the launcher in one-line
-
-```sh
-nix run github:PrismLauncher/PrismLauncher
-```
diff --git a/nix/README.md b/nix/README.md
new file mode 100644
index 00000000..7a422fc5
--- /dev/null
+++ b/nix/README.md
@@ -0,0 +1,193 @@
+# Prism Launcher Nix Packaging
+
+## Installing a stable release (nixpkgs)
+
+Prism Launcher is packaged in [nixpkgs](https://github.com/NixOS/nixpkgs/) since 22.11.
+
+See [Package variants](#package-variants) for a list of available packages.
+
+## Installing a development release (flake)
+
+We use [garnix](https://garnix.io/) to build and cache our development builds.
+If you want to avoid rebuilds you may add the garnix cache to your substitutors.
+
+Example (NixOS):
+
+```nix
+{...}:
+{
+ nix.settings = {
+ trusted-substituters = [
+ "https://cache.garnix.io"
+ ];
+
+ trusted-public-keys = [
+ "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g="
+ ];
+ };
+}
+```
+
+### Using the overlay
+
+After adding `github:PrismLauncher/PrismLauncher` to your flake inputs, you can add the `default` overlay to your nixpkgs instance.
+
+Example:
+
+```nix
+{
+ inputs = {
+ nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
+ prismlauncher = {
+ url = "github:PrismLauncher/PrismLauncher";
+ # Optional: Override the nixpkgs input of prismlauncher to use the same revision as the rest of your flake
+ # Note that overriding any input of prismlauncher may break reproducibility
+ # inputs.nixpkgs.follows = "nixpkgs";
+ };
+ };
+
+ outputs = {nixpkgs, prismlauncher}: {
+ nixosConfigurations.foo = nixpkgs.lib.nixosSystem {
+ system = "x86_64-linux";
+
+ modules = [
+ ({pkgs, ...}: {
+ nixpkgs.overlays = [prismlauncher.overlays.default];
+
+ environment.systemPackages = [pkgs.prismlauncher];
+ })
+ ];
+ };
+ }
+}
+```
+
+### Installing the package directly
+
+Alternatively, if you don't want to use an overlay, you can install Prism Launcher directly by installing the `prismlauncher` package.
+This way the installed package is fully reproducible.
+
+Example:
+
+```nix
+{
+ inputs = {
+ nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
+ prismlauncher = {
+ url = "github:PrismLauncher/PrismLauncher";
+ # Optional: Override the nixpkgs input of prismlauncher to use the same revision as the rest of your flake
+ # Note that overriding any input of prismlauncher may break reproducibility
+ # inputs.nixpkgs.follows = "nixpkgs";
+ };
+ };
+
+ outputs = {nixpkgs, prismlauncher}: {
+ nixosConfigurations.foo = nixpkgs.lib.nixosSystem {
+ system = "x86_64-linux";
+
+ modules = [
+ ({pkgs, ...}: {
+ environment.systemPackages = [prismlauncher.packages.${pkgs.system}.prismlauncher];
+ })
+ ];
+ };
+ }
+}
+```
+
+### Installing the package ad-hoc (`nix shell`, `nix run`, etc.)
+
+You can simply call the default package of this flake.
+
+Example:
+
+```shell
+nix run github:PrismLauncher/PrismLauncher
+
+nix shell github:PrismLauncher/PrismLauncher
+
+nix profile install github:PrismLauncher/PrismLauncher
+```
+
+## Installing a development release (without flakes)
+
+We use [garnix](https://garnix.io/) to build and cache our development builds.
+If you want to avoid rebuilds you may add the garnix cache to your substitutors.
+
+Example (NixOS):
+
+```nix
+{...}:
+{
+ nix.settings = {
+ trusted-substituters = [
+ "https://cache.garnix.io"
+ ];
+
+ trusted-public-keys = [
+ "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g="
+ ];
+ };
+}
+```
+
+### Using the overlay (`fetchTarball`)
+
+We use flake-compat to allow using this Flake on a system that doesn't use flakes.
+
+Example:
+
+```nix
+{pkgs, ...}: {
+ nixpkgs.overlays = [(import (builtins.fetchTarball "https://github.com/PrismLauncher/PrismLauncher/archive/develop.tar.gz")).overlays.default];
+
+ environment.systemPackages = [pkgs.prismlauncher];
+}
+```
+
+### Installing the package directly (`fetchTarball`)
+
+Alternatively, if you don't want to use an overlay, you can install Prism Launcher directly by installing the `prismlauncher` package.
+This way the installed package is fully reproducible.
+
+Example:
+
+```nix
+{pkgs, ...}: {
+ environment.systemPackages = [(import (builtins.fetchTarball "https://github.com/PrismLauncher/PrismLauncher/archive/develop.tar.gz")).packages.${pkgs.system}.prismlauncher];
+}
+```
+
+### Installing the package ad-hoc (`nix-env`)
+
+You can add this repository as a channel and install its packages that way.
+
+Example:
+
+```shell
+nix-channel --add https://github.com/PrismLauncher/PrismLauncher/archive/develop.tar.gz prismlauncher
+
+nix-channel --update prismlauncher
+
+nix-env -iA prismlauncher.prismlauncher
+```
+
+## Package variants
+
+Both Nixpkgs and this repository offer the following packages:
+
+- `prismlauncher` - Preferred build using Qt 6
+- `prismlauncher-qt5` - Legacy build using Qt 5 (i.e. for Qt 5 theming support)
+
+Both of these packages also have `-unwrapped` counterparts, that are not wrapped and can therefore be customized even further than what the wrapper packages offer.
+
+### Customizing wrapped packages
+
+The wrapped packages (`prismlauncher` and `prismlauncher-qt5`) offer some build parameters to further customize the launcher's environment.
+
+The following parameters can be overridden:
+
+- `msaClientID` (default: `null`, requires full rebuild!) Client ID used for Microsoft Authentication
+- `gamemodeSupport` (default: `true`) Turn on/off support for [Feral GameMode](https://github.com/FeralInteractive/gamemode)
+- `jdks` (default: `[ jdk17 jdk8 ]`) Java runtimes added to `PRISMLAUNCHER_JAVA_PATHS` variable
+- `additionalLibs` (default: `[ ]`) Additional libraries that will be added to `LD_LIBRARY_PATH`
diff --git a/nix/default.nix b/nix/default.nix
deleted file mode 100644
index 47172927..00000000
--- a/nix/default.nix
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- inputs,
- self,
- ...
-}: {
- imports = [
- ./dev.nix
- ./distribution.nix
- ];
-
- _module.args = {
- # User-friendly version number.
- version = builtins.substring 0 8 self.lastModifiedDate;
- };
-
- perSystem = {system, ...}: {
- # Nixpkgs instantiated for supported systems with our overlay.
- _module.args.pkgs = import inputs.nixpkgs {
- inherit system;
- overlays = [self.overlays.default];
- };
- };
-
- # Supported systems.
- systems = [
- "x86_64-linux"
- "aarch64-linux"
- # Disabled due to our packages not supporting darwin yet.
- # "x86_64-darwin"
- # "aarch64-darwin"
- ];
-}
diff --git a/nix/dev.nix b/nix/dev.nix
index c39e1565..c476ed10 100644
--- a/nix/dev.nix
+++ b/nix/dev.nix
@@ -1,42 +1,33 @@
{
- inputs,
- self,
- ...
-}: {
perSystem = {
- system,
+ config,
+ lib,
pkgs,
...
}: {
- checks = {
- pre-commit-check = inputs.pre-commit-hooks.lib.${system}.run {
- src = self;
- hooks = {
- markdownlint.enable = true;
+ pre-commit.settings = {
+ hooks = {
+ markdownlint.enable = true;
- alejandra.enable = true;
- deadnix.enable = true;
- nil.enable = true;
+ alejandra.enable = true;
+ deadnix.enable = true;
+ nil.enable = true;
- clang-format = {
- enable = true;
- types_or = ["c" "c++" "java" "json" "objective-c"];
- };
+ clang-format = {
+ enable = true;
+ types_or = ["c" "c++" "java" "json" "objective-c"];
};
};
+
+ tools.clang-tools = lib.mkForce pkgs.clang-tools_16;
};
devShells.default = pkgs.mkShell {
- inherit (self.checks.${system}.pre-commit-check) shellHook;
- packages = with pkgs; [
- nodePackages.markdownlint-cli
- alejandra
- deadnix
- clang-tools
- nil
- ];
+ shellHook = ''
+ ${config.pre-commit.installationScript}
+ '';
- inputsFrom = [self.packages.${system}.prismlauncher-unwrapped];
+ inputsFrom = [config.packages.prismlauncher-unwrapped];
buildInputs = with pkgs; [ccache ninja];
};
diff --git a/nix/distribution.nix b/nix/distribution.nix
index 0f2e26f3..ca9999dc 100644
--- a/nix/distribution.nix
+++ b/nix/distribution.nix
@@ -1,29 +1,65 @@
{
inputs,
self,
- version,
...
}: {
- perSystem = {pkgs, ...}: {
- packages = {
- inherit (pkgs) prismlauncher-qt5-unwrapped prismlauncher-qt5 prismlauncher-unwrapped prismlauncher;
- default = pkgs.prismlauncher;
+ perSystem = {
+ lib,
+ pkgs,
+ ...
+ }: {
+ packages = let
+ ourPackages = lib.fix (final: self.overlays.default final pkgs);
+ in {
+ inherit
+ (ourPackages)
+ prismlauncher-qt5-unwrapped
+ prismlauncher-qt5
+ prismlauncher-unwrapped
+ prismlauncher
+ ;
+ default = ourPackages.prismlauncher;
};
};
flake = {
overlays.default = final: prev: let
- # Helper function to build prism against different versions of Qt.
- mkPrism = qt:
- qt.callPackage ./package.nix {
- inherit (inputs) libnbtplusplus;
- inherit self version;
- };
+ version = builtins.substring 0 8 self.lastModifiedDate or "dirty";
+
+ filteredSelf = inputs.nix-filter.lib.filter {
+ root = ../.;
+ include = [
+ "buildconfig"
+ "cmake"
+ "launcher"
+ "libraries"
+ "program_info"
+ "tests"
+ ../COPYING.md
+ ../CMakeLists.txt
+ ];
+ };
+
+ # common args for prismlauncher evaluations
+ unwrappedArgs = {
+ self = filteredSelf;
+
+ inherit (inputs) libnbtplusplus;
+ inherit ((final.darwin or prev.darwin).apple_sdk.frameworks) Cocoa;
+ inherit version;
+ };
in {
- prismlauncher-qt5-unwrapped = mkPrism final.libsForQt5;
- prismlauncher-qt5 = prev.prismlauncher-qt5.override {prismlauncher-unwrapped = final.prismlauncher-qt5-unwrapped;};
- prismlauncher-unwrapped = mkPrism final.qt6Packages;
- prismlauncher = prev.prismlauncher.override {inherit (final) prismlauncher-unwrapped;};
+ prismlauncher-qt5-unwrapped = prev.libsForQt5.callPackage ./pkg unwrappedArgs;
+
+ prismlauncher-qt5 = prev.libsForQt5.callPackage ./pkg/wrapper.nix {
+ prismlauncher-unwrapped = final.prismlauncher-qt5-unwrapped;
+ };
+
+ prismlauncher-unwrapped = prev.qt6Packages.callPackage ./pkg unwrappedArgs;
+
+ prismlauncher = prev.qt6Packages.callPackage ./pkg/wrapper.nix {
+ inherit (final) prismlauncher-unwrapped;
+ };
};
};
}
diff --git a/nix/package.nix b/nix/package.nix
deleted file mode 100644
index edc266dc..00000000
--- a/nix/package.nix
+++ /dev/null
@@ -1,65 +0,0 @@
-{
- lib,
- stdenv,
- cmake,
- ninja,
- jdk17,
- zlib,
- qtbase,
- quazip,
- extra-cmake-modules,
- tomlplusplus,
- cmark,
- ghc_filesystem,
- gamemode,
- msaClientID ? null,
- gamemodeSupport ? true,
- self,
- version,
- libnbtplusplus,
-}:
-stdenv.mkDerivation rec {
- pname = "prismlauncher-unwrapped";
- inherit version;
-
- src = lib.cleanSource self;
-
- nativeBuildInputs = [extra-cmake-modules cmake jdk17 ninja];
- buildInputs =
- [
- qtbase
- zlib
- quazip
- ghc_filesystem
- tomlplusplus
- cmark
- ]
- ++ lib.optional gamemodeSupport gamemode;
-
- hardeningEnable = ["pie"];
-
- cmakeFlags =
- lib.optionals (msaClientID != null) ["-DLauncher_MSA_CLIENT_ID=${msaClientID}"]
- ++ lib.optionals (lib.versionOlder qtbase.version "6") ["-DLauncher_QT_VERSION_MAJOR=5"];
-
- postUnpack = ''
- rm -rf source/libraries/libnbtplusplus
- ln -s ${libnbtplusplus} source/libraries/libnbtplusplus
- '';
-
- dontWrapQtApps = true;
-
- meta = with lib; {
- homepage = "https://prismlauncher.org/";
- description = "A free, open source launcher for Minecraft";
- longDescription = ''
- Allows you to have multiple, separate instances of Minecraft (each with
- their own mods, texture packs, saves, etc) and helps you manage them and
- their associated options with a simple interface.
- '';
- platforms = platforms.linux;
- changelog = "https://github.com/PrismLauncher/PrismLauncher/releases/tag/${version}";
- license = licenses.gpl3Only;
- maintainers = with maintainers; [minion3665 Scrumplex];
- };
-}
diff --git a/nix/pkg/default.nix b/nix/pkg/default.nix
new file mode 100644
index 00000000..fd19a0b3
--- /dev/null
+++ b/nix/pkg/default.nix
@@ -0,0 +1,74 @@
+{
+ lib,
+ stdenv,
+ canonicalize-jars-hook,
+ cmake,
+ cmark,
+ Cocoa,
+ ninja,
+ jdk17,
+ zlib,
+ qtbase,
+ quazip,
+ extra-cmake-modules,
+ tomlplusplus,
+ ghc_filesystem,
+ gamemode,
+ msaClientID ? null,
+ gamemodeSupport ? stdenv.isLinux,
+ self,
+ version,
+ libnbtplusplus,
+}:
+assert lib.assertMsg (stdenv.isLinux || !gamemodeSupport) "gamemodeSupport is only available on Linux";
+ stdenv.mkDerivation rec {
+ pname = "prismlauncher-unwrapped";
+ inherit version;
+
+ src = lib.cleanSource self;
+
+ nativeBuildInputs = [extra-cmake-modules cmake jdk17 ninja canonicalize-jars-hook];
+ buildInputs =
+ [
+ qtbase
+ zlib
+ quazip
+ ghc_filesystem
+ tomlplusplus
+ cmark
+ ]
+ ++ lib.optional gamemodeSupport gamemode
+ ++ lib.optionals stdenv.isDarwin [Cocoa];
+
+ hardeningEnable = lib.optionals stdenv.isLinux ["pie"];
+
+ cmakeFlags =
+ [
+ "-DLauncher_BUILD_PLATFORM=nixpkgs"
+ ]
+ ++ lib.optionals (msaClientID != null) ["-DLauncher_MSA_CLIENT_ID=${msaClientID}"]
+ ++ lib.optionals (lib.versionOlder qtbase.version "6") ["-DLauncher_QT_VERSION_MAJOR=5"]
+ ++ lib.optionals stdenv.isDarwin ["-DINSTALL_BUNDLE=nodeps" "-DMACOSX_SPARKLE_UPDATE_FEED_URL=''"];
+
+ postUnpack = ''
+ rm -rf source/libraries/libnbtplusplus
+ ln -s ${libnbtplusplus} source/libraries/libnbtplusplus
+ '';
+
+ dontWrapQtApps = true;
+
+ meta = with lib; {
+ mainProgram = "prismlauncher";
+ homepage = "https://prismlauncher.org/";
+ description = "A free, open source launcher for Minecraft";
+ longDescription = ''
+ Allows you to have multiple, separate instances of Minecraft (each with
+ their own mods, texture packs, saves, etc) and helps you manage them and
+ their associated options with a simple interface.
+ '';
+ platforms = with platforms; linux ++ darwin;
+ changelog = "https://github.com/PrismLauncher/PrismLauncher/releases/tag/${version}";
+ license = licenses.gpl3Only;
+ maintainers = with maintainers; [minion3665 Scrumplex getchoo];
+ };
+ }
diff --git a/nix/pkg/wrapper.nix b/nix/pkg/wrapper.nix
new file mode 100644
index 00000000..8bc255e7
--- /dev/null
+++ b/nix/pkg/wrapper.nix
@@ -0,0 +1,94 @@
+{
+ lib,
+ stdenv,
+ symlinkJoin,
+ prismlauncher-unwrapped,
+ wrapQtAppsHook,
+ qtbase, # needed for wrapQtAppsHook
+ qtsvg,
+ qtwayland,
+ xorg,
+ libpulseaudio,
+ libGL,
+ glfw,
+ openal,
+ jdk8,
+ jdk17,
+ gamemode,
+ flite,
+ mesa-demos,
+ udev,
+ libusb1,
+ msaClientID ? null,
+ gamemodeSupport ? stdenv.isLinux,
+ textToSpeechSupport ? stdenv.isLinux,
+ controllerSupport ? stdenv.isLinux,
+ jdks ? [jdk17 jdk8],
+ additionalLibs ? [],
+ additionalPrograms ? [],
+}: let
+ prismlauncherFinal = prismlauncher-unwrapped.override {
+ inherit msaClientID gamemodeSupport;
+ };
+in
+ symlinkJoin {
+ name = "prismlauncher-${prismlauncherFinal.version}";
+
+ paths = [prismlauncherFinal];
+
+ nativeBuildInputs = [
+ wrapQtAppsHook
+ ];
+
+ buildInputs =
+ [
+ qtbase
+ qtsvg
+ ]
+ ++ lib.optional (lib.versionAtLeast qtbase.version "6" && stdenv.isLinux) qtwayland;
+
+ postBuild = ''
+ wrapQtAppsHook
+ '';
+
+ qtWrapperArgs = let
+ runtimeLibs =
+ (with xorg; [
+ libX11
+ libXext
+ libXcursor
+ libXrandr
+ libXxf86vm
+ ])
+ ++ [
+ # lwjgl
+ libpulseaudio
+ libGL
+ glfw
+ openal
+ stdenv.cc.cc.lib
+
+ # oshi
+ udev
+ ]
+ ++ lib.optional gamemodeSupport gamemode.lib
+ ++ lib.optional textToSpeechSupport flite
+ ++ lib.optional controllerSupport libusb1
+ ++ additionalLibs;
+
+ runtimePrograms =
+ [
+ xorg.xrandr
+ mesa-demos # need glxinfo
+ ]
+ ++ additionalPrograms;
+ in
+ ["--prefix PRISMLAUNCHER_JAVA_PATHS : ${lib.makeSearchPath "bin/java" jdks}"]
+ ++ lib.optionals stdenv.isLinux [
+ "--set LD_LIBRARY_PATH /run/opengl-driver/lib:${lib.makeLibraryPath runtimeLibs}"
+ # xorg.xrandr needed for LWJGL [2.9.2, 3) https://github.com/LWJGL/lwjgl/issues/128
+ "--prefix PATH : ${lib.makeBinPath runtimePrograms}"
+ ];
+
+ inherit (prismlauncherFinal) meta;
+ }