Last active
September 13, 2023 16:05
-
-
Save hmenke/ec897d759585b62acdc8a4f1814a702b to your computer and use it in GitHub Desktop.
Build some static executables to put in ~/.local/bin on foreign machines
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#{ pkgs ? import <nixpkgs> {} }: | |
{ pkgs ? import (fetchTarball "https://channels.nixos.org/nixos-unstable-small/nixexprs.tar.xz") {} }: | |
with pkgs; | |
let | |
name = "local-bin"; | |
entries = let | |
goLinkStatic = drv: args: | |
drv.overrideAttrs ({ ldflags ? [], ... }: { | |
CGO_ENABLED = 0; | |
ldflags = ldflags ++ [ "-s" "-w" "-extldflags '-static'" ]; | |
} // args); | |
hdf5toolsStatic = pkgsStatic.hdf5.out.overrideAttrs (oa: { | |
configureFlags = oa.configureFlags or [] ++ [ | |
"hdf5_cv_ldouble_to_long_special=no" # disabled except for IBM Power6 Linux | |
"hdf5_cv_long_to_ldouble_special=no" # disabled except for IBM Power6 Linux | |
"hdf5_cv_ldouble_to_llong_accurate=yes" # enabled except for Mac OS 10.4, SGI IRIX64 6.5 and Powerpc Linux using XL compilers | |
"hdf5_cv_llong_to_ldouble_correct=yes" # enabled except Mac OS 10.4 and Powerpc Linux using XL compilers | |
"hdf5_cv_disable_some_ldouble_conv=no" # disabled except for IBM ppc64le | |
]; | |
}); | |
in [ | |
{ src = "${pkgsStatic.delta}/bin/delta"; dst = "delta"; } | |
{ src = "${goLinkStatic pkgs.croc {}}/bin/croc"; dst = "croc"; } | |
{ src = "${goLinkStatic pkgs.direnv { BASH_PATH = ""; }}/bin/direnv"; dst = "direnv"; } | |
{ src = "${goLinkStatic pkgs.fq {}}/bin/fq"; dst = "fq"; } | |
{ src = "${goLinkStatic pkgs.fzf {}}/bin/fzf"; dst = "fzf"; } | |
{ src = "${hdf5toolsStatic}/bin/h5ls"; dst = "h5ls"; } | |
{ src = "${pkgsStatic.patchelf}/bin/patchelf"; dst = "patchelf"; } | |
{ src = "${pkgsStatic.progress}/bin/progress"; dst = "progress"; } | |
{ src = "${pkgsStatic.par2cmdline}/bin/par2"; dst = "par2"; } | |
{ src = "${pkgsStatic.pv}/bin/pv"; dst = "pv"; } | |
#{ src = "${pkgsStatic.ripgrep}/bin/rg"; dst = "rg"; } | |
{ src = "${pkgsStatic.sqlite}/bin/sqlite3"; dst = "sqlite3"; } | |
{ src = "${pkgsStatic.tmux}/bin/tmux"; dst = "tmux"; } | |
{ src = "${pkgsStatic.taskspooler}/bin/.ts-wrapped"; dst = "ts"; } | |
{ src = "${goLinkStatic pkgs.wormhole-william {}}/bin/wormhole-william"; dst = "wormhole-william"; } | |
{ src = "${pkgsStatic.zstd}/bin/zstd"; dst = "zstd"; } | |
]; | |
copyCommands = map (p: '' | |
cp -av ${lib.escapeShellArg "${p.src}"} $out/bin/${p.dst} | |
${pkgs.binutils}/bin/readelf -x .interp $out/bin/${p.dst} | |
'') entries; | |
gitMinimalStatic = pkgsStatic.gitMinimal.overrideAttrs (oa: { | |
doInstallCheck = false; | |
# undo patchShebangs and substitutions | |
postFixup = oa.postFixup or "" + '' | |
find $out -type f -exec grep -Iq . {} \; -print0 | | |
xargs -0 -l -t sed -i 's%#!/nix/store/[[:graph:]]*%#!/bin/sh%g; s%/nix/store/[^/]*/bin/\([[:graph:]]*\)%\1%g' | |
''; | |
}); | |
in | |
runCommand name { | |
preferLocalBuild = true; | |
allowSubstitutes = false; | |
} '' | |
mkdir -p $out/bin $out/libexec | |
${lib.concatStrings copyCommands} | |
cp -av ${gitMinimalStatic}/libexec/git-core $out/libexec | |
'' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment