From be0e4d71090edd6b661ecfad58533cc4078d369b Mon Sep 17 00:00:00 2001 From: Danilo Reyes Date: Sat, 9 Nov 2024 14:53:58 -0600 Subject: [PATCH] best practices: got rid of rec --- base.nix | 64 +++++----- modules/servers/nextcloud.nix | 21 +-- modules/shell/multimedia.nix | 26 ++-- pkgs/citra/default.nix | 32 +++-- pkgs/citra/generic.nix | 2 +- pkgs/polymc/default.nix | 232 ++++++++++++++++++---------------- pkgs/vdhcoapp/default.nix | 96 +++++++------- pkgs/vdhcoapp/filepicker.nix | 53 ++++---- 8 files changed, 283 insertions(+), 243 deletions(-) diff --git a/base.nix b/base.nix index 599e5d2..e1afb40 100644 --- a/base.nix +++ b/base.nix @@ -124,42 +124,46 @@ wget sops ]; - variables = rec { - # PATH - XDG_CACHE_HOME = "\${HOME}/.cache"; - XDG_CONFIG_HOME = "\${HOME}/.config"; - XDG_BIN_HOME = "\${HOME}/.local/bin"; - XDG_DATA_HOME = "\${HOME}/.local/share"; - XDG_STATE_HOME = "\${HOME}/.local/state"; + variables = + let + XDG_DATA_HOME = "\${HOME}/.local/share"; + XDG_CONFIG_HOME = "\${HOME}/.config"; + XDG_CACHE_HOME = "\${HOME}/.cache"; + in + { + # PATH + inherit XDG_DATA_HOME XDG_CONFIG_HOME XDG_CACHE_HOME; + XDG_BIN_HOME = "\${HOME}/.local/bin"; + XDG_STATE_HOME = "\${HOME}/.local/state"; - # DEV PATH - CARGO_HOME = "${XDG_DATA_HOME}/cargo"; - GEM_HOME = "${XDG_DATA_HOME}/ruby/gems"; - GEM_PATH = "${XDG_DATA_HOME}/ruby/gems"; - GEM_SPEC_CACHE = "${XDG_DATA_HOME}/ruby/specs"; - GOPATH = "${XDG_DATA_HOME}/go"; - PSQL_HISTORY = "${XDG_DATA_HOME}/psql_history"; - REDISCLI_HISTFILE = "${XDG_DATA_HOME}/redis/rediscli_history"; - WINEPREFIX = "${XDG_DATA_HOME}/wine"; + # DEV PATH + CARGO_HOME = "${XDG_DATA_HOME}/cargo"; + GEM_HOME = "${XDG_DATA_HOME}/ruby/gems"; + GEM_PATH = "${XDG_DATA_HOME}/ruby/gems"; + GEM_SPEC_CACHE = "${XDG_DATA_HOME}/ruby/specs"; + GOPATH = "${XDG_DATA_HOME}/go"; + PSQL_HISTORY = "${XDG_DATA_HOME}/psql_history"; + REDISCLI_HISTFILE = "${XDG_DATA_HOME}/redis/rediscli_history"; + WINEPREFIX = "${XDG_DATA_HOME}/wine"; - # OPTIONS - ELECTRUMDIR = "${XDG_DATA_HOME}/electrum"; - WGETRC = "${XDG_CONFIG_HOME}/wgetrc"; - XCOMPOSECACHE = "${XDG_CACHE_HOME}/X11/xcompose"; - "_JAVA_OPTIONS" = "-Djava.util.prefs.userRoot=${XDG_CONFIG_HOME}/java"; + # OPTIONS + ELECTRUMDIR = "${XDG_DATA_HOME}/electrum"; + WGETRC = "${XDG_CONFIG_HOME}/wgetrc"; + XCOMPOSECACHE = "${XDG_CACHE_HOME}/X11/xcompose"; + "_JAVA_OPTIONS" = "-Djava.util.prefs.userRoot=${XDG_CONFIG_HOME}/java"; - # NVIDIA - CUDA_CACHE_PATH = "${XDG_CACHE_HOME}/nv"; + # NVIDIA + CUDA_CACHE_PATH = "${XDG_CACHE_HOME}/nv"; - # WAYLAND - WLR_NO_HARDWARE_CURSORS = 1; - NIXOS_OZONE_WL = 1; + # WAYLAND + WLR_NO_HARDWARE_CURSORS = 1; + NIXOS_OZONE_WL = 1; - # Themes - # WEBKIT_DISABLE_COMPOSITING_MODE = "1"; + # Themes + # WEBKIT_DISABLE_COMPOSITING_MODE = "1"; - PATH = [ "\${HOME}/.local/bin" ]; - }; + PATH = [ "\${HOME}/.local/bin" ]; + }; }; programs = { nh = { diff --git a/modules/servers/nextcloud.nix b/modules/servers/nextcloud.nix index 545a7d0..e9f4474 100644 --- a/modules/servers/nextcloud.nix +++ b/modules/servers/nextcloud.nix @@ -44,14 +44,19 @@ in nodejs perl (python311.withPackages (ps: with ps; [ tensorflow ])) - (perlPackages.buildPerlPackage rec { - pname = "Image-ExifTool"; - version = "12.70"; - src = fetchurl { - url = "https://exiftool.org/Image-ExifTool-${version}.tar.gz"; - hash = "sha256-TLJSJEXMPj870TkExq6uraX8Wl4kmNerrSlX3LQsr/4="; - }; - }) + (perlPackages.buildPerlPackage ( + let + version = "12.70"; + in + { + pname = "Image-ExifTool"; + inherit version; + src = fetchurl { + url = "https://exiftool.org/Image-ExifTool-${version}.tar.gz"; + hash = "sha256-TLJSJEXMPj870TkExq6uraX8Wl4kmNerrSlX3LQsr/4="; + }; + } + )) ]; }; programs.msmtp = { diff --git a/modules/shell/multimedia.nix b/modules/shell/multimedia.nix index 8a7718d..a623a37 100644 --- a/modules/shell/multimedia.nix +++ b/modules/shell/multimedia.nix @@ -15,17 +15,21 @@ imagemagick # photoshop what?? ]) ++ [ - (pkgs.python3Packages.buildPythonApplication rec { - pname = "ffpb"; - version = "0.4.1"; - src = pkgs.python3Packages.fetchPypi { - inherit pname version; - sha256 = "sha256-7eVqbLpMHS1sBw2vYS4cTtyVdnnknGtEI8190VlXflk="; - }; - doCheck = false; - buildInputs = [ pkgs.python3Packages.setuptools ]; - propagatedBuildInputs = [ pkgs.python3Packages.tqdm ]; - }) + (pkgs.python3Packages.buildPythonApplication ( + let + pname = "ffpb"; + version = "0.4.1"; + in + { + src = pkgs.python3Packages.fetchPypi { + inherit pname version; + sha256 = "sha256-7eVqbLpMHS1sBw2vYS4cTtyVdnnknGtEI8190VlXflk="; + }; + doCheck = false; + buildInputs = [ pkgs.python3Packages.setuptools ]; + propagatedBuildInputs = [ pkgs.python3Packages.tqdm ]; + } + )) ]; }; } diff --git a/pkgs/citra/default.nix b/pkgs/citra/default.nix index 7288148..2a8a160 100644 --- a/pkgs/citra/default.nix +++ b/pkgs/citra/default.nix @@ -15,19 +15,27 @@ let }; in { - nightly = qt6Packages.callPackage ./generic.nix rec { - pname = "citra-nightly"; - version = "2104"; + nightly = qt6Packages.callPackage ./generic.nix ( + let + version = "2104"; + in + { + pname = "citra-nightly"; + inherit + version + branch + compat-list + ; - src = fetchFromGitHub { - owner = "CaptainJawZ"; - repo = "Citra-Nightly"; - rev = "nightly-${version}"; - sha256 = "0ggi1l8327s43xaxs616g0s9vmal6q7vsv69bn07gp71gchhcmyi"; - fetchSubmodules = true; - }; + src = fetchFromGitHub { + owner = "CaptainJawZ"; + repo = "Citra-Nightly"; + rev = "nightly-${version}"; + sha256 = "0ggi1l8327s43xaxs616g0s9vmal6q7vsv69bn07gp71gchhcmyi"; + fetchSubmodules = true; + }; - inherit branch compat-list; - }; + } + ); } .${branch} diff --git a/pkgs/citra/generic.nix b/pkgs/citra/generic.nix index 3b69ab1..a0b3bf8 100644 --- a/pkgs/citra/generic.nix +++ b/pkgs/citra/generic.nix @@ -37,7 +37,7 @@ assert lib.assertMsg ( !enableFfmpegAudioDecoder || !enableFdk ) "Can't enable both enableFfmpegAudioDecoder and enableFdk"; -stdenv.mkDerivation rec { +stdenv.mkDerivation { inherit pname version src; nativeBuildInputs = [ diff --git a/pkgs/polymc/default.nix b/pkgs/polymc/default.nix index 54f40d2..43acff8 100644 --- a/pkgs/polymc/default.nix +++ b/pkgs/polymc/default.nix @@ -58,120 +58,130 @@ let gameLibraryPath = libpath + ":${addOpenGLRunpath.driverLink}/lib"; in - stdenv.mkDerivation rec { - pname = "polymc" + (lib.optionalString ((lib.versions.major qt6.qtbase.version) == "5") "-qt5"); - version = "6.1"; + stdenv.mkDerivation ( + let + version = "6.1"; + in + { + pname = "polymc" + (lib.optionalString ((lib.versions.major qt6.qtbase.version) == "5") "-qt5"); + inherit version; - src = fetchFromGitHub { - owner = "PolyMC"; - repo = "PolyMC"; - rev = version; - sha256 = "sha256-AOy13zAWQ0CtsX9z1M+fxH7Sh/QSFy7EdQ/fD9yUYc8="; - fetchSubmodules = true; - }; - dontWrapQtApps = true; - nativeBuildInputs = [ - cmake - extra-cmake-modules - ninja - jdk17 - qt6.wrapQtAppsHook - file - ghc_filesystem - ]; - buildInputs = [ - qt6.qtbase - qt6.qtsvg - qt6.qtcharts - qt6.qtwayland - qt6Packages.quazip - zlib - ]; + src = fetchFromGitHub { + owner = "PolyMC"; + repo = "PolyMC"; + rev = version; + sha256 = "sha256-AOy13zAWQ0CtsX9z1M+fxH7Sh/QSFy7EdQ/fD9yUYc8="; + fetchSubmodules = true; + }; + dontWrapQtApps = true; + nativeBuildInputs = [ + cmake + extra-cmake-modules + ninja + jdk17 + qt6.wrapQtAppsHook + file + ghc_filesystem + ]; + buildInputs = [ + qt6.qtbase + qt6.qtsvg + qt6.qtcharts + qt6.qtwayland + qt6Packages.quazip + zlib + ]; - cmakeFlags = [ - "-GNinja" - "-DLauncher_QT_VERSION_MAJOR=${lib.versions.major qt6.qtbase.version}" - ] ++ lib.optionals (msaClientID != null) [ "-DLauncher_MSA_CLIENT_ID=${msaClientID}" ]; + cmakeFlags = [ + "-GNinja" + "-DLauncher_QT_VERSION_MAJOR=${lib.versions.major qt6.qtbase.version}" + ] ++ lib.optionals (msaClientID != null) [ "-DLauncher_MSA_CLIENT_ID=${msaClientID}" ]; - postPatch = '' - # hardcode jdk paths - substituteInPlace launcher/java/JavaUtils.cpp \ - --replace 'scanJavaDir("/usr/lib/jvm")' 'javas.append("${jdk17}/lib/openjdk/bin/java")' - ''; - - postFixup = '' - # xorg.xrandr needed for LWJGL [2.9.2, 3) https://github.com/LWJGL/lwjgl/issues/128 - wrapQtApp $out/bin/polymc \ - --suffix LD_LIBRARY_PATH : "${gameLibraryPath}" \ - --suffix PATH : "${binpath}" \ - --set-default ALSOFT_DRIVERS "pulse" - ''; - passthru = { - - wrap = - { - extraJDKs ? [ ], - extraPaths ? [ ], - extraLibs ? [ ], - withWaylandGLFW ? false, - withMangohud ? true, - withGamemode ? true, - }: - stdenv.mkDerivation rec { - pname = "${polymc.pname}-wrapped"; - inherit (polymc) version; - libsPath = - (lib.makeLibraryPath (extraLibs ++ lib.optional withGamemode gamemode.lib)) - + lib.optionalString withMangohud "${mangohud + "/lib/mangohud"}"; - binsPath = lib.makeBinPath (extraPaths ++ lib.optional withMangohud mangohud); - - waylandPreExec = writeShellScript "waylandGLFW" '' - if [ -n "$WAYLAND_DISPLAY" ]; then - export LD_LIBRARY_PATH=${lib.getLib glfw-wayland-minecraft}/lib:"$LD_LIBRARY_PATH" - fi - ''; - src = polymc; - nativeBuildInputs = [ makeWrapper ]; - phases = [ - "installPhase" - "fixupPhase" - ]; - installPhase = '' - mkdir -p $out/bin - ln -s $src/bin/polymc $out/bin/polymc - ln -s $src/share $out/share - ''; - - postFixup = - let - javaPaths = lib.makeSearchPath "bin/java" extraJDKs; - in - '' - wrapProgram $out/bin/polymc \ - --suffix LD_LIBRARY_PATH : "${libsPath}" \ - --suffix POLYMC_JAVA_PATHS : "${javaPaths}" \ - --suffix PATH : "${binsPath}" ${lib.optionalString withWaylandGLFW "--run ${waylandPreExec}"} - - ''; - - preferLocalBuild = true; - inherit (polymc) meta; - - }; - }; - meta = with lib; { - homepage = "https://polymc.org/"; - downloadPage = "https://polymc.org/download/"; - changelog = "https://github.com/PolyMC/PolyMC/releases"; - 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. + postPatch = '' + # hardcode jdk paths + substituteInPlace launcher/java/JavaUtils.cpp \ + --replace 'scanJavaDir("/usr/lib/jvm")' 'javas.append("${jdk17}/lib/openjdk/bin/java")' ''; - platforms = [ "x86_64-linux" ]; - license = licenses.gpl3Only; - }; - }; + + postFixup = '' + # xorg.xrandr needed for LWJGL [2.9.2, 3) https://github.com/LWJGL/lwjgl/issues/128 + wrapQtApp $out/bin/polymc \ + --suffix LD_LIBRARY_PATH : "${gameLibraryPath}" \ + --suffix PATH : "${binpath}" \ + --set-default ALSOFT_DRIVERS "pulse" + ''; + passthru = { + + wrap = + { + extraJDKs ? [ ], + extraPaths ? [ ], + extraLibs ? [ ], + withWaylandGLFW ? false, + withMangohud ? true, + withGamemode ? true, + }: + stdenv.mkDerivation ( + let + libsPath = + (lib.makeLibraryPath (extraLibs ++ lib.optional withGamemode gamemode.lib)) + + lib.optionalString withMangohud "${mangohud + "/lib/mangohud"}"; + binsPath = lib.makeBinPath (extraPaths ++ lib.optional withMangohud mangohud); + waylandPreExec = writeShellScript "waylandGLFW" '' + if [ -n "$WAYLAND_DISPLAY" ]; then + export LD_LIBRARY_PATH=${lib.getLib glfw-wayland-minecraft}/lib:"$LD_LIBRARY_PATH" + fi + ''; + in + { + pname = "${polymc.pname}-wrapped"; + inherit (polymc) version; + inherit libsPath binsPath waylandPreExec; + + src = polymc; + nativeBuildInputs = [ makeWrapper ]; + phases = [ + "installPhase" + "fixupPhase" + ]; + installPhase = '' + mkdir -p $out/bin + ln -s $src/bin/polymc $out/bin/polymc + ln -s $src/share $out/share + ''; + + postFixup = + let + javaPaths = lib.makeSearchPath "bin/java" extraJDKs; + in + '' + wrapProgram $out/bin/polymc \ + --suffix LD_LIBRARY_PATH : "${libsPath}" \ + --suffix POLYMC_JAVA_PATHS : "${javaPaths}" \ + --suffix PATH : "${binsPath}" ${lib.optionalString withWaylandGLFW "--run ${waylandPreExec}"} + + ''; + + preferLocalBuild = true; + inherit (polymc) meta; + + } + ); + }; + meta = with lib; { + homepage = "https://polymc.org/"; + downloadPage = "https://polymc.org/download/"; + changelog = "https://github.com/PolyMC/PolyMC/releases"; + 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 = [ "x86_64-linux" ]; + license = licenses.gpl3Only; + }; + } + ); in polymc diff --git a/pkgs/vdhcoapp/default.nix b/pkgs/vdhcoapp/default.nix index 1c4087b..12abd58 100644 --- a/pkgs/vdhcoapp/default.nix +++ b/pkgs/vdhcoapp/default.nix @@ -16,58 +16,62 @@ let filepicker = callPackage ./filepicker.nix { }; in -buildNpmPackage rec { - pname = "vdhcoapp"; - version = "2.0.19"; +buildNpmPackage ( + let + version = "2.0.19"; + pname = "vdhcoapp"; + src = fetchFromGitHub { + owner = "aclap-dev"; + repo = "${pname}"; + rev = "v${version}"; + hash = "sha256-8xeZvqpRq71aShVogiwlVD3gQoPGseNOmz5E3KbsZxU="; + }; + in + { + inherit pname version src; - src = fetchFromGitHub { - owner = "aclap-dev"; - repo = "vdhcoapp"; - rev = "v${version}"; - hash = "sha256-8xeZvqpRq71aShVogiwlVD3gQoPGseNOmz5E3KbsZxU="; - }; + sourceRoot = "${src.name}/app"; + npmDepsHash = "sha256-E032U2XZdyTER6ROkBosOTn7bweDXHl8voC3BQEz8Wg="; + dontNpmBuild = true; - sourceRoot = "${src.name}/app"; - npmDepsHash = "sha256-E032U2XZdyTER6ROkBosOTn7bweDXHl8voC3BQEz8Wg="; - dontNpmBuild = true; + nativeBuildInputs = [ + toml2json + makeWrapper + ]; - nativeBuildInputs = [ - toml2json - makeWrapper - ]; + patches = [ + (substituteAll { + src = ./code.patch; + inherit ffmpeg; + filepicker = lib.getExe filepicker; + }) + ]; - patches = [ - (substituteAll { - src = ./code.patch; - inherit ffmpeg; - filepicker = lib.getExe filepicker; - }) - ]; + postPatch = '' + # Cannot use patch, setting placeholder here + substituteInPlace src/native-autoinstall.js \ + --replace process.execPath "\"${placeholder "out"}/bin/vdhcoapp\"" + ''; - postPatch = '' - # Cannot use patch, setting placeholder here - substituteInPlace src/native-autoinstall.js \ - --replace process.execPath "\"${placeholder "out"}/bin/vdhcoapp\"" - ''; + preBuild = '' + toml2json --pretty ../config.toml > src/config.json + ''; - preBuild = '' - toml2json --pretty ../config.toml > src/config.json - ''; + installPhase = '' + mkdir -p $out/opt/vdhcoapp - installPhase = '' - mkdir -p $out/opt/vdhcoapp + cp -r . "$out/opt/vdhcoapp" - cp -r . "$out/opt/vdhcoapp" + makeWrapper ${nodejs}/bin/node $out/bin/vdhcoapp \ + --add-flags $out/opt/vdhcoapp/src/main.js + ''; - makeWrapper ${nodejs}/bin/node $out/bin/vdhcoapp \ - --add-flags $out/opt/vdhcoapp/src/main.js - ''; - - meta = with lib; { - description = "Companion application for the Video DownloadHelper browser add-on"; - homepage = "https://www.downloadhelper.net/"; - license = licenses.gpl2; - maintainers = with maintainers; [ wolfangaukang ]; - mainProgram = "vdhcoapp"; - }; -} + meta = with lib; { + description = "Companion application for the Video DownloadHelper browser add-on"; + homepage = "https://www.downloadhelper.net/"; + license = licenses.gpl2; + maintainers = with maintainers; [ wolfangaukang ]; + mainProgram = "vdhcoapp"; + }; + } +) diff --git a/pkgs/vdhcoapp/filepicker.nix b/pkgs/vdhcoapp/filepicker.nix index cf4a7bd..081b8c2 100644 --- a/pkgs/vdhcoapp/filepicker.nix +++ b/pkgs/vdhcoapp/filepicker.nix @@ -8,32 +8,37 @@ glib, }: -rustPlatform.buildRustPackage rec { - pname = "filepicker"; - version = "1.0.1"; +rustPlatform.buildRustPackage ( + let + version = "1.0.1"; + in + { + pname = "filepicker"; + inherit version; - src = fetchFromGitHub { - owner = "paulrouget"; - repo = "static-filepicker"; - rev = "v${version}"; - hash = "sha256-7sRzf3SA9RSBf4O36olXgka8c6Bufdb0qsuTofVe55s="; - }; + src = fetchFromGitHub { + owner = "paulrouget"; + repo = "static-filepicker"; + rev = "v${version}"; + hash = "sha256-7sRzf3SA9RSBf4O36olXgka8c6Bufdb0qsuTofVe55s="; + }; - cargoHash = "sha256-aal7ppFkCpNc+QTS4Qklsb9WfJ65QqG6p1eOskiX+/Q="; + cargoHash = "sha256-aal7ppFkCpNc+QTS4Qklsb9WfJ65QqG6p1eOskiX+/Q="; - buildInputs = [ - atk - gtk3 - glib - ]; + buildInputs = [ + atk + gtk3 + glib + ]; - nativeBuildInputs = [ pkg-config ]; + nativeBuildInputs = [ pkg-config ]; - meta = with lib; { - description = "File picker used by VDHCoApp"; - homepage = "https://github.com/paulrouget/static-filepicker"; - license = licenses.gpl2; - mainProgram = "filepicker"; - maintainers = with maintainers; [ hannesgith ]; - }; -} + meta = with lib; { + description = "File picker used by VDHCoApp"; + homepage = "https://github.com/paulrouget/static-filepicker"; + license = licenses.gpl2; + mainProgram = "filepicker"; + maintainers = with maintainers; [ hannesgith ]; + }; + } +)