best practices: got rid of rec

This commit is contained in:
Danilo Reyes 2024-11-09 14:53:58 -06:00
parent 0bebf3e366
commit be0e4d7109
8 changed files with 283 additions and 243 deletions

View File

@ -124,42 +124,46 @@
wget wget
sops sops
]; ];
variables = rec { variables =
# PATH let
XDG_CACHE_HOME = "\${HOME}/.cache"; XDG_DATA_HOME = "\${HOME}/.local/share";
XDG_CONFIG_HOME = "\${HOME}/.config"; XDG_CONFIG_HOME = "\${HOME}/.config";
XDG_BIN_HOME = "\${HOME}/.local/bin"; XDG_CACHE_HOME = "\${HOME}/.cache";
XDG_DATA_HOME = "\${HOME}/.local/share"; in
XDG_STATE_HOME = "\${HOME}/.local/state"; {
# 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 # DEV PATH
CARGO_HOME = "${XDG_DATA_HOME}/cargo"; CARGO_HOME = "${XDG_DATA_HOME}/cargo";
GEM_HOME = "${XDG_DATA_HOME}/ruby/gems"; GEM_HOME = "${XDG_DATA_HOME}/ruby/gems";
GEM_PATH = "${XDG_DATA_HOME}/ruby/gems"; GEM_PATH = "${XDG_DATA_HOME}/ruby/gems";
GEM_SPEC_CACHE = "${XDG_DATA_HOME}/ruby/specs"; GEM_SPEC_CACHE = "${XDG_DATA_HOME}/ruby/specs";
GOPATH = "${XDG_DATA_HOME}/go"; GOPATH = "${XDG_DATA_HOME}/go";
PSQL_HISTORY = "${XDG_DATA_HOME}/psql_history"; PSQL_HISTORY = "${XDG_DATA_HOME}/psql_history";
REDISCLI_HISTFILE = "${XDG_DATA_HOME}/redis/rediscli_history"; REDISCLI_HISTFILE = "${XDG_DATA_HOME}/redis/rediscli_history";
WINEPREFIX = "${XDG_DATA_HOME}/wine"; WINEPREFIX = "${XDG_DATA_HOME}/wine";
# OPTIONS # OPTIONS
ELECTRUMDIR = "${XDG_DATA_HOME}/electrum"; ELECTRUMDIR = "${XDG_DATA_HOME}/electrum";
WGETRC = "${XDG_CONFIG_HOME}/wgetrc"; WGETRC = "${XDG_CONFIG_HOME}/wgetrc";
XCOMPOSECACHE = "${XDG_CACHE_HOME}/X11/xcompose"; XCOMPOSECACHE = "${XDG_CACHE_HOME}/X11/xcompose";
"_JAVA_OPTIONS" = "-Djava.util.prefs.userRoot=${XDG_CONFIG_HOME}/java"; "_JAVA_OPTIONS" = "-Djava.util.prefs.userRoot=${XDG_CONFIG_HOME}/java";
# NVIDIA # NVIDIA
CUDA_CACHE_PATH = "${XDG_CACHE_HOME}/nv"; CUDA_CACHE_PATH = "${XDG_CACHE_HOME}/nv";
# WAYLAND # WAYLAND
WLR_NO_HARDWARE_CURSORS = 1; WLR_NO_HARDWARE_CURSORS = 1;
NIXOS_OZONE_WL = 1; NIXOS_OZONE_WL = 1;
# Themes # Themes
# WEBKIT_DISABLE_COMPOSITING_MODE = "1"; # WEBKIT_DISABLE_COMPOSITING_MODE = "1";
PATH = [ "\${HOME}/.local/bin" ]; PATH = [ "\${HOME}/.local/bin" ];
}; };
}; };
programs = { programs = {
nh = { nh = {

View File

@ -44,14 +44,19 @@ in
nodejs nodejs
perl perl
(python311.withPackages (ps: with ps; [ tensorflow ])) (python311.withPackages (ps: with ps; [ tensorflow ]))
(perlPackages.buildPerlPackage rec { (perlPackages.buildPerlPackage (
pname = "Image-ExifTool"; let
version = "12.70"; version = "12.70";
src = fetchurl { in
url = "https://exiftool.org/Image-ExifTool-${version}.tar.gz"; {
hash = "sha256-TLJSJEXMPj870TkExq6uraX8Wl4kmNerrSlX3LQsr/4="; pname = "Image-ExifTool";
}; inherit version;
}) src = fetchurl {
url = "https://exiftool.org/Image-ExifTool-${version}.tar.gz";
hash = "sha256-TLJSJEXMPj870TkExq6uraX8Wl4kmNerrSlX3LQsr/4=";
};
}
))
]; ];
}; };
programs.msmtp = { programs.msmtp = {

View File

@ -15,17 +15,21 @@
imagemagick # photoshop what?? imagemagick # photoshop what??
]) ])
++ [ ++ [
(pkgs.python3Packages.buildPythonApplication rec { (pkgs.python3Packages.buildPythonApplication (
pname = "ffpb"; let
version = "0.4.1"; pname = "ffpb";
src = pkgs.python3Packages.fetchPypi { version = "0.4.1";
inherit pname version; in
sha256 = "sha256-7eVqbLpMHS1sBw2vYS4cTtyVdnnknGtEI8190VlXflk="; {
}; src = pkgs.python3Packages.fetchPypi {
doCheck = false; inherit pname version;
buildInputs = [ pkgs.python3Packages.setuptools ]; sha256 = "sha256-7eVqbLpMHS1sBw2vYS4cTtyVdnnknGtEI8190VlXflk=";
propagatedBuildInputs = [ pkgs.python3Packages.tqdm ]; };
}) doCheck = false;
buildInputs = [ pkgs.python3Packages.setuptools ];
propagatedBuildInputs = [ pkgs.python3Packages.tqdm ];
}
))
]; ];
}; };
} }

View File

@ -15,19 +15,27 @@ let
}; };
in in
{ {
nightly = qt6Packages.callPackage ./generic.nix rec { nightly = qt6Packages.callPackage ./generic.nix (
pname = "citra-nightly"; let
version = "2104"; version = "2104";
in
{
pname = "citra-nightly";
inherit
version
branch
compat-list
;
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "CaptainJawZ"; owner = "CaptainJawZ";
repo = "Citra-Nightly"; repo = "Citra-Nightly";
rev = "nightly-${version}"; rev = "nightly-${version}";
sha256 = "0ggi1l8327s43xaxs616g0s9vmal6q7vsv69bn07gp71gchhcmyi"; sha256 = "0ggi1l8327s43xaxs616g0s9vmal6q7vsv69bn07gp71gchhcmyi";
fetchSubmodules = true; fetchSubmodules = true;
}; };
inherit branch compat-list; }
}; );
} }
.${branch} .${branch}

View File

@ -37,7 +37,7 @@ assert lib.assertMsg (
!enableFfmpegAudioDecoder || !enableFdk !enableFfmpegAudioDecoder || !enableFdk
) "Can't enable both enableFfmpegAudioDecoder and enableFdk"; ) "Can't enable both enableFfmpegAudioDecoder and enableFdk";
stdenv.mkDerivation rec { stdenv.mkDerivation {
inherit pname version src; inherit pname version src;
nativeBuildInputs = [ nativeBuildInputs = [

View File

@ -58,120 +58,130 @@ let
gameLibraryPath = libpath + ":${addOpenGLRunpath.driverLink}/lib"; gameLibraryPath = libpath + ":${addOpenGLRunpath.driverLink}/lib";
in in
stdenv.mkDerivation rec { stdenv.mkDerivation (
pname = "polymc" + (lib.optionalString ((lib.versions.major qt6.qtbase.version) == "5") "-qt5"); let
version = "6.1"; version = "6.1";
in
{
pname = "polymc" + (lib.optionalString ((lib.versions.major qt6.qtbase.version) == "5") "-qt5");
inherit version;
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "PolyMC"; owner = "PolyMC";
repo = "PolyMC"; repo = "PolyMC";
rev = version; rev = version;
sha256 = "sha256-AOy13zAWQ0CtsX9z1M+fxH7Sh/QSFy7EdQ/fD9yUYc8="; sha256 = "sha256-AOy13zAWQ0CtsX9z1M+fxH7Sh/QSFy7EdQ/fD9yUYc8=";
fetchSubmodules = true; fetchSubmodules = true;
}; };
dontWrapQtApps = true; dontWrapQtApps = true;
nativeBuildInputs = [ nativeBuildInputs = [
cmake cmake
extra-cmake-modules extra-cmake-modules
ninja ninja
jdk17 jdk17
qt6.wrapQtAppsHook qt6.wrapQtAppsHook
file file
ghc_filesystem ghc_filesystem
]; ];
buildInputs = [ buildInputs = [
qt6.qtbase qt6.qtbase
qt6.qtsvg qt6.qtsvg
qt6.qtcharts qt6.qtcharts
qt6.qtwayland qt6.qtwayland
qt6Packages.quazip qt6Packages.quazip
zlib zlib
]; ];
cmakeFlags = [ cmakeFlags = [
"-GNinja" "-GNinja"
"-DLauncher_QT_VERSION_MAJOR=${lib.versions.major qt6.qtbase.version}" "-DLauncher_QT_VERSION_MAJOR=${lib.versions.major qt6.qtbase.version}"
] ++ lib.optionals (msaClientID != null) [ "-DLauncher_MSA_CLIENT_ID=${msaClientID}" ]; ] ++ lib.optionals (msaClientID != null) [ "-DLauncher_MSA_CLIENT_ID=${msaClientID}" ];
postPatch = '' postPatch = ''
# hardcode jdk paths # hardcode jdk paths
substituteInPlace launcher/java/JavaUtils.cpp \ substituteInPlace launcher/java/JavaUtils.cpp \
--replace 'scanJavaDir("/usr/lib/jvm")' 'javas.append("${jdk17}/lib/openjdk/bin/java")' --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.
''; '';
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 in
polymc polymc

View File

@ -16,58 +16,62 @@ let
filepicker = callPackage ./filepicker.nix { }; filepicker = callPackage ./filepicker.nix { };
in in
buildNpmPackage rec { buildNpmPackage (
pname = "vdhcoapp"; let
version = "2.0.19"; 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 { sourceRoot = "${src.name}/app";
owner = "aclap-dev"; npmDepsHash = "sha256-E032U2XZdyTER6ROkBosOTn7bweDXHl8voC3BQEz8Wg=";
repo = "vdhcoapp"; dontNpmBuild = true;
rev = "v${version}";
hash = "sha256-8xeZvqpRq71aShVogiwlVD3gQoPGseNOmz5E3KbsZxU=";
};
sourceRoot = "${src.name}/app"; nativeBuildInputs = [
npmDepsHash = "sha256-E032U2XZdyTER6ROkBosOTn7bweDXHl8voC3BQEz8Wg="; toml2json
dontNpmBuild = true; makeWrapper
];
nativeBuildInputs = [ patches = [
toml2json (substituteAll {
makeWrapper src = ./code.patch;
]; inherit ffmpeg;
filepicker = lib.getExe filepicker;
})
];
patches = [ postPatch = ''
(substituteAll { # Cannot use patch, setting placeholder here
src = ./code.patch; substituteInPlace src/native-autoinstall.js \
inherit ffmpeg; --replace process.execPath "\"${placeholder "out"}/bin/vdhcoapp\""
filepicker = lib.getExe filepicker; '';
})
];
postPatch = '' preBuild = ''
# Cannot use patch, setting placeholder here toml2json --pretty ../config.toml > src/config.json
substituteInPlace src/native-autoinstall.js \ '';
--replace process.execPath "\"${placeholder "out"}/bin/vdhcoapp\""
'';
preBuild = '' installPhase = ''
toml2json --pretty ../config.toml > src/config.json mkdir -p $out/opt/vdhcoapp
'';
installPhase = '' cp -r . "$out/opt/vdhcoapp"
mkdir -p $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 \ meta = with lib; {
--add-flags $out/opt/vdhcoapp/src/main.js description = "Companion application for the Video DownloadHelper browser add-on";
''; homepage = "https://www.downloadhelper.net/";
license = licenses.gpl2;
meta = with lib; { maintainers = with maintainers; [ wolfangaukang ];
description = "Companion application for the Video DownloadHelper browser add-on"; mainProgram = "vdhcoapp";
homepage = "https://www.downloadhelper.net/"; };
license = licenses.gpl2; }
maintainers = with maintainers; [ wolfangaukang ]; )
mainProgram = "vdhcoapp";
};
}

View File

@ -8,32 +8,37 @@
glib, glib,
}: }:
rustPlatform.buildRustPackage rec { rustPlatform.buildRustPackage (
pname = "filepicker"; let
version = "1.0.1"; version = "1.0.1";
in
{
pname = "filepicker";
inherit version;
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "paulrouget"; owner = "paulrouget";
repo = "static-filepicker"; repo = "static-filepicker";
rev = "v${version}"; rev = "v${version}";
hash = "sha256-7sRzf3SA9RSBf4O36olXgka8c6Bufdb0qsuTofVe55s="; hash = "sha256-7sRzf3SA9RSBf4O36olXgka8c6Bufdb0qsuTofVe55s=";
}; };
cargoHash = "sha256-aal7ppFkCpNc+QTS4Qklsb9WfJ65QqG6p1eOskiX+/Q="; cargoHash = "sha256-aal7ppFkCpNc+QTS4Qklsb9WfJ65QqG6p1eOskiX+/Q=";
buildInputs = [ buildInputs = [
atk atk
gtk3 gtk3
glib glib
]; ];
nativeBuildInputs = [ pkg-config ]; nativeBuildInputs = [ pkg-config ];
meta = with lib; { meta = with lib; {
description = "File picker used by VDHCoApp"; description = "File picker used by VDHCoApp";
homepage = "https://github.com/paulrouget/static-filepicker"; homepage = "https://github.com/paulrouget/static-filepicker";
license = licenses.gpl2; license = licenses.gpl2;
mainProgram = "filepicker"; mainProgram = "filepicker";
maintainers = with maintainers; [ hannesgith ]; maintainers = with maintainers; [ hannesgith ];
}; };
} }
)