Skip to content

Commit

Permalink
Nix: remove ninja, use mold, etc
Browse files Browse the repository at this point in the history
No longer using ninja since CMake seems to build faster with the Make
backend (see #7774 (comment)).

Using mold for faster linking.

Using a stdenvAdapter for keeping debug info if `debug` is true.
  • Loading branch information
fufexan committed Sep 13, 2024
1 parent 8b12848 commit 5ef5fb8
Showing 1 changed file with 115 additions and 119 deletions.
234 changes: 115 additions & 119 deletions nix/default.nix
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{
lib,
stdenv,
stdenvAdapters,
pkg-config,
pkgconf,
makeWrapper,
cmake,
ninja,
aquamarine,
binutils,
cairo,
Expand Down Expand Up @@ -45,135 +45,131 @@
enableNvidiaPatches ? false,
nvidiaPatches ? false,
hidpiXWayland ? false,
}:
assert lib.assertMsg (!nvidiaPatches) "The option `nvidiaPatches` has been removed.";
assert lib.assertMsg (!enableNvidiaPatches) "The option `enableNvidiaPatches` has been removed.";
assert lib.assertMsg (!hidpiXWayland) "The option `hidpiXWayland` has been removed. Please refer https://wiki.hyprland.org/Configuring/XWayland";
stdenv.mkDerivation {
pname = "hyprland${lib.optionalString debug "-debug"}";
inherit version;
}: let
customStdenv =
lib.lists.foldr (adapter: acc: adapter acc) stdenv
[
stdenvAdapters.useMoldLinker
]
++ lib.optional debug stdenvAdapters.keepDebugInfo;
in
assert lib.assertMsg (!nvidiaPatches) "The option `nvidiaPatches` has been removed.";
assert lib.assertMsg (!enableNvidiaPatches) "The option `enableNvidiaPatches` has been removed.";
assert lib.assertMsg (!hidpiXWayland) "The option `hidpiXWayland` has been removed. Please refer https://wiki.hyprland.org/Configuring/XWayland";
customStdenv.mkDerivation {
pname = "hyprland${lib.optionalString debug "-debug"}";
inherit version;

src = lib.cleanSourceWith {
filter = name: type: let
baseName = baseNameOf (toString name);
in
! (lib.hasSuffix ".nix" baseName);
src = lib.cleanSource ../.;
};
src = lib.cleanSourceWith {
filter = name: type: let
baseName = baseNameOf (toString name);
in
! (lib.hasSuffix ".nix" baseName);
src = lib.cleanSource ../.;
};

patches = [
# forces GCC to use -std=c++26
./stdcxx.patch
# Nix does not have CMake 3.30 yet, so override the minimum version
./cmake-version.patch
];
patches = [
# forces GCC to use -std=c++26
./stdcxx.patch
# Nix does not have CMake 3.30 yet, so override the minimum version
./cmake-version.patch
];

postPatch = ''
# Fix hardcoded paths to /usr installation
sed -i "s#/usr#$out#" src/render/OpenGL.cpp
postPatch = ''
# Fix hardcoded paths to /usr installation
sed -i "s#/usr#$out#" src/render/OpenGL.cpp
# Remove extra @PREFIX@ to fix pkg-config paths
sed -i "s#@PREFIX@/##g" hyprland.pc.in
'';
# Remove extra @PREFIX@ to fix pkg-config paths
sed -i "s#@PREFIX@/##g" hyprland.pc.in
'';

COMMITS = revCount;
DATE = date;
DIRTY = lib.optionalString (commit == "") "dirty";
HASH = commit;
COMMITS = revCount;
DATE = date;
DIRTY = lib.optionalString (commit == "") "dirty";
HASH = commit;

depsBuildBuild = [
pkg-config
];
depsBuildBuild = [
pkg-config
];

nativeBuildInputs = [
hyprwayland-scanner
jq
makeWrapper
cmake
ninja
pkg-config
python3 # for udis86
wayland-scanner
];
nativeBuildInputs = [
cmake
hyprwayland-scanner
jq
makeWrapper
pkg-config
python3 # for udis86
wayland-scanner
];

outputs = [
"out"
"man"
"dev"
];
outputs = [
"out"
"man"
"dev"
];

buildInputs = lib.concatLists [
[
aquamarine
cairo
# expat
# fribidi
git
hyprcursor
hyprlang
hyprutils
# libdatrie
libdrm
libGL
libinput
# libselinux
# libsepol
# libthai
libuuid
libxkbcommon
mesa
pango
pciutils
# pcre2
tomlplusplus
wayland
wayland-protocols
xorg.libXcursor
]
(lib.optionals stdenv.hostPlatform.isMusl [libexecinfo])
(lib.optionals enableXWayland [
xorg.libxcb
xorg.libXdmcp
xorg.xcbutilerrors
xorg.xcbutilrenderutil
xorg.xcbutilwm
xwayland
])
(lib.optionals withSystemd [systemd])
];

cmakeBuildType =
if debug
then "Debug"
else "RelWithDebInfo";
buildInputs = lib.concatLists [
[
aquamarine
cairo
git
hyprcursor
hyprlang
hyprutils
libdrm
libGL
libinput
libuuid
libxkbcommon
mesa
pango
pciutils
tomlplusplus
wayland
wayland-protocols
xorg.libXcursor
]
(lib.optionals stdenv.hostPlatform.isMusl [libexecinfo])
(lib.optionals enableXWayland [
xorg.libxcb
xorg.libXdmcp
xorg.xcbutilerrors
xorg.xcbutilrenderutil
xorg.xcbutilwm
xwayland
])
(lib.optionals withSystemd [systemd])
];

# we want as much debug info as possible
dontStrip = debug;
cmakeBuildType =
if debug
then "Debug"
else "RelWithDebInfo";

cmakeFlags = [
(lib.cmakeBool "NO_XWAYLAND" (!enableXWayland))
(lib.cmakeBool "LEGACY_RENDERER" legacyRenderer)
(lib.cmakeBool "NO_SYSTEMD" (!withSystemd))
];
cmakeFlags = [
(lib.cmakeBool "NO_XWAYLAND" (!enableXWayland))
(lib.cmakeBool "LEGACY_RENDERER" legacyRenderer)
(lib.cmakeBool "NO_SYSTEMD" (!withSystemd))
];

postInstall = ''
${lib.optionalString wrapRuntimeDeps ''
wrapProgram $out/bin/Hyprland \
--suffix PATH : ${lib.makeBinPath [
binutils
pciutils
pkgconf
]}
''}
'';
postInstall = ''
${lib.optionalString wrapRuntimeDeps ''
wrapProgram $out/bin/Hyprland \
--suffix PATH : ${lib.makeBinPath [
binutils
pciutils
pkgconf
]}
''}
'';

passthru.providedSessions = ["hyprland"];
passthru.providedSessions = ["hyprland"];

meta = {
homepage = "https://github.com/hyprwm/Hyprland";
description = "Dynamic tiling Wayland compositor that doesn't sacrifice on its looks";
license = lib.licenses.bsd3;
platforms = lib.platforms.linux;
mainProgram = "Hyprland";
};
}
meta = {
homepage = "https://github.com/hyprwm/Hyprland";
description = "Dynamic tiling Wayland compositor that doesn't sacrifice on its looks";
license = lib.licenses.bsd3;
platforms = lib.platforms.linux;
mainProgram = "Hyprland";
};
}

0 comments on commit 5ef5fb8

Please sign in to comment.