Loading pkgs/by-name/li/libcosmicAppHook/libcosmic-app-hook.sh 0 → 100644 +96 −0 Original line number Diff line number Diff line # SPDX-License-Identifier: MIT # SPDX-FileCopyrightText: Lily Foster <lily@lily.flowers> # Portions of this code are adapted from nixos-cosmic # https://github.com/lilyinstarlight/nixos-cosmic # shellcheck shell=bash libcosmicAppWrapperArgs=() libcosmicAppVergenHook() { if [ -z "${VERGEN_GIT_COMMIT_DATE-}" ]; then # shellcheck disable=SC2155 export VERGEN_GIT_COMMIT_DATE="$(date --utc --date=@"$SOURCE_DATE_EPOCH" '+%Y-%m-%d')" fi } libcosmicAppLinkerArgsHook() { # Force linking to certain libraries like libEGL, which are always dlopen()ed local flags="CARGO_TARGET_@cargoLinkerVar@_RUSTFLAGS" export "$flags"="${!flags-} -C link-arg=-Wl,--push-state,--no-as-needed" # shellcheck disable=SC2043 for lib in @cargoLinkLibs@; do export "$flags"="${!flags} -C link-arg=-l${lib}" done export "$flags"="${!flags} -C link-arg=-Wl,--pop-state" } preConfigurePhases+=" libcosmicAppVergenHook libcosmicAppLinkerArgsHook" # Add shell hook for use in dev shells if [ -n "${IN_NIX_SHELL-}" ] && [ -z "${shellHook-}" ]; then shellHook="libcosmicAppLinkerArgsHook && export RUSTFLAGS=\$CARGO_TARGET_@cargoLinkerVar@_RUSTFLAGS CARGO_TARGET_@cargoLinkerVar@_RUSTFLAGS=" fi libcosmicAppWrapperArgsHook() { if [ -d "${prefix:?}/share" ]; then libcosmicAppWrapperArgs+=(--suffix XDG_DATA_DIRS : "$prefix/share") fi # add fallback schemas, icons, and settings paths libcosmicAppWrapperArgs+=(--suffix XDG_DATA_DIRS : "@fallbackXdgDirs@") } preFixupPhases+=" libcosmicAppWrapperArgsHook" wrapLibcosmicApp() { local program="$1" shift 1 wrapProgram "$program" "${libcosmicAppWrapperArgs[@]}" "$@" } # Note: $libcosmicAppWrapperArgs still gets defined even if ${dontWrapLibcosmicApp-} is set libcosmicAppWrapHook() { # guard against running multiple times (e.g. due to propagation) [ -z "$libcosmicAppWrapHookHasRun" ] || return 0 libcosmicAppWrapHookHasRun=1 if [[ -z "${dontWrapLibcosmicApp:-}" ]]; then targetDirsThatExist=() targetDirsRealPath=() # wrap binaries targetDirs=("${prefix}/bin" "${prefix}/libexec") for targetDir in "${targetDirs[@]}"; do if [[ -d "${targetDir}" ]]; then targetDirsThatExist+=("${targetDir}") targetDirsRealPath+=("$(realpath "${targetDir}")/") find "${targetDir}" -type f -executable -print0 | while IFS= read -r -d '' file; do echo "Wrapping program '${file}'" wrapLibcosmicApp "${file}" done fi done # wrap links to binaries that point outside targetDirs # Note: links to binaries within targetDirs do not need # to be wrapped as the binaries have already been wrapped if [[ ${#targetDirsThatExist[@]} -ne 0 ]]; then find "${targetDirsThatExist[@]}" -type l -xtype f -executable -print0 | while IFS= read -r -d '' linkPath; do linkPathReal=$(realpath "${linkPath}") for targetPath in "${targetDirsRealPath[@]}"; do if [[ "$linkPathReal" == "$targetPath"* ]]; then echo "Not wrapping link: '$linkPath' (already wrapped)" continue 2 fi done echo "Wrapping link: '$linkPath'" wrapLibcosmicApp "${linkPath}" done fi fi } fixupOutputHooks+=(libcosmicAppWrapHook) pkgs/by-name/li/libcosmicAppHook/package.nix 0 → 100644 +85 −0 Original line number Diff line number Diff line # SPDX-License-Identifier: MIT # SPDX-FileCopyrightText: Lily Foster <lily@lily.flowers> # Portions of this code are adapted from nixos-cosmic # https://github.com/lilyinstarlight/nixos-cosmic { lib, stdenv, makeSetupHook, makeBinaryWrapper, pkg-config, targetPackages, libGL, libxkbcommon, xorg, wayland, vulkan-loader, includeSettings ? true, }: makeSetupHook { name = "libcosmic-app-hook"; propagatedBuildInputs = [ makeBinaryWrapper pkg-config ]; # ensure deps for linking below are available depsTargetTargetPropagated = assert (lib.assertMsg (!targetPackages ? raw) "libcosmicAppHook must be in nativeBuildInputs"); [ libGL libxkbcommon xorg.libX11 xorg.libXcursor xorg.libXi xorg.libxcb ] ++ lib.optionals (!stdenv.isDarwin) [ wayland vulkan-loader ]; substitutions = { fallbackXdgDirs = "${lib.optionalString includeSettings "${targetPackages.cosmic-settings}/share:"}${targetPackages.cosmic-icons}/share"; cargoLinkerVar = stdenv.hostPlatform.rust.cargoEnvVarTarget; # force linking for all libraries that may be dlopen'd by libcosmic/iced apps cargoLinkLibs = lib.escapeShellArgs ( [ # for wgpu-hal "EGL" # for xkbcommon-dl "xkbcommon" # for x11-dl, tiny-xlib, wgpu-hal "X11" # for x11-dl, tiny-xlib "X11-xcb" # for x11-dl "Xcursor" "Xi" # for x11rb "xcb" ] ++ lib.optionals (!stdenv.isDarwin) [ # for wgpu-hal, wayland-sys "wayland-client" # for wgpu-hal "wayland-egl" "vulkan" ] ); }; meta = { description = "Setup hook for configuring and wrapping applications based on libcosmic"; maintainers = with lib.maintainers; [ HeitorAugustoLN nyabinary thefossguy ]; }; } ./libcosmic-app-hook.sh Loading
pkgs/by-name/li/libcosmicAppHook/libcosmic-app-hook.sh 0 → 100644 +96 −0 Original line number Diff line number Diff line # SPDX-License-Identifier: MIT # SPDX-FileCopyrightText: Lily Foster <lily@lily.flowers> # Portions of this code are adapted from nixos-cosmic # https://github.com/lilyinstarlight/nixos-cosmic # shellcheck shell=bash libcosmicAppWrapperArgs=() libcosmicAppVergenHook() { if [ -z "${VERGEN_GIT_COMMIT_DATE-}" ]; then # shellcheck disable=SC2155 export VERGEN_GIT_COMMIT_DATE="$(date --utc --date=@"$SOURCE_DATE_EPOCH" '+%Y-%m-%d')" fi } libcosmicAppLinkerArgsHook() { # Force linking to certain libraries like libEGL, which are always dlopen()ed local flags="CARGO_TARGET_@cargoLinkerVar@_RUSTFLAGS" export "$flags"="${!flags-} -C link-arg=-Wl,--push-state,--no-as-needed" # shellcheck disable=SC2043 for lib in @cargoLinkLibs@; do export "$flags"="${!flags} -C link-arg=-l${lib}" done export "$flags"="${!flags} -C link-arg=-Wl,--pop-state" } preConfigurePhases+=" libcosmicAppVergenHook libcosmicAppLinkerArgsHook" # Add shell hook for use in dev shells if [ -n "${IN_NIX_SHELL-}" ] && [ -z "${shellHook-}" ]; then shellHook="libcosmicAppLinkerArgsHook && export RUSTFLAGS=\$CARGO_TARGET_@cargoLinkerVar@_RUSTFLAGS CARGO_TARGET_@cargoLinkerVar@_RUSTFLAGS=" fi libcosmicAppWrapperArgsHook() { if [ -d "${prefix:?}/share" ]; then libcosmicAppWrapperArgs+=(--suffix XDG_DATA_DIRS : "$prefix/share") fi # add fallback schemas, icons, and settings paths libcosmicAppWrapperArgs+=(--suffix XDG_DATA_DIRS : "@fallbackXdgDirs@") } preFixupPhases+=" libcosmicAppWrapperArgsHook" wrapLibcosmicApp() { local program="$1" shift 1 wrapProgram "$program" "${libcosmicAppWrapperArgs[@]}" "$@" } # Note: $libcosmicAppWrapperArgs still gets defined even if ${dontWrapLibcosmicApp-} is set libcosmicAppWrapHook() { # guard against running multiple times (e.g. due to propagation) [ -z "$libcosmicAppWrapHookHasRun" ] || return 0 libcosmicAppWrapHookHasRun=1 if [[ -z "${dontWrapLibcosmicApp:-}" ]]; then targetDirsThatExist=() targetDirsRealPath=() # wrap binaries targetDirs=("${prefix}/bin" "${prefix}/libexec") for targetDir in "${targetDirs[@]}"; do if [[ -d "${targetDir}" ]]; then targetDirsThatExist+=("${targetDir}") targetDirsRealPath+=("$(realpath "${targetDir}")/") find "${targetDir}" -type f -executable -print0 | while IFS= read -r -d '' file; do echo "Wrapping program '${file}'" wrapLibcosmicApp "${file}" done fi done # wrap links to binaries that point outside targetDirs # Note: links to binaries within targetDirs do not need # to be wrapped as the binaries have already been wrapped if [[ ${#targetDirsThatExist[@]} -ne 0 ]]; then find "${targetDirsThatExist[@]}" -type l -xtype f -executable -print0 | while IFS= read -r -d '' linkPath; do linkPathReal=$(realpath "${linkPath}") for targetPath in "${targetDirsRealPath[@]}"; do if [[ "$linkPathReal" == "$targetPath"* ]]; then echo "Not wrapping link: '$linkPath' (already wrapped)" continue 2 fi done echo "Wrapping link: '$linkPath'" wrapLibcosmicApp "${linkPath}" done fi fi } fixupOutputHooks+=(libcosmicAppWrapHook)
pkgs/by-name/li/libcosmicAppHook/package.nix 0 → 100644 +85 −0 Original line number Diff line number Diff line # SPDX-License-Identifier: MIT # SPDX-FileCopyrightText: Lily Foster <lily@lily.flowers> # Portions of this code are adapted from nixos-cosmic # https://github.com/lilyinstarlight/nixos-cosmic { lib, stdenv, makeSetupHook, makeBinaryWrapper, pkg-config, targetPackages, libGL, libxkbcommon, xorg, wayland, vulkan-loader, includeSettings ? true, }: makeSetupHook { name = "libcosmic-app-hook"; propagatedBuildInputs = [ makeBinaryWrapper pkg-config ]; # ensure deps for linking below are available depsTargetTargetPropagated = assert (lib.assertMsg (!targetPackages ? raw) "libcosmicAppHook must be in nativeBuildInputs"); [ libGL libxkbcommon xorg.libX11 xorg.libXcursor xorg.libXi xorg.libxcb ] ++ lib.optionals (!stdenv.isDarwin) [ wayland vulkan-loader ]; substitutions = { fallbackXdgDirs = "${lib.optionalString includeSettings "${targetPackages.cosmic-settings}/share:"}${targetPackages.cosmic-icons}/share"; cargoLinkerVar = stdenv.hostPlatform.rust.cargoEnvVarTarget; # force linking for all libraries that may be dlopen'd by libcosmic/iced apps cargoLinkLibs = lib.escapeShellArgs ( [ # for wgpu-hal "EGL" # for xkbcommon-dl "xkbcommon" # for x11-dl, tiny-xlib, wgpu-hal "X11" # for x11-dl, tiny-xlib "X11-xcb" # for x11-dl "Xcursor" "Xi" # for x11rb "xcb" ] ++ lib.optionals (!stdenv.isDarwin) [ # for wgpu-hal, wayland-sys "wayland-client" # for wgpu-hal "wayland-egl" "vulkan" ] ); }; meta = { description = "Setup hook for configuring and wrapping applications based on libcosmic"; maintainers = with lib.maintainers; [ HeitorAugustoLN nyabinary thefossguy ]; }; } ./libcosmic-app-hook.sh