Files
nixpkgs/pkgs/by-name/li/libcosmicAppHook/libcosmic-app-hook.sh
Dark Steveneq 646b892680
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
push sheeet
2025-10-09 14:15:47 +02:00

97 lines
3.5 KiB
Bash

# 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)