Skip to content

Instantly share code, notes, and snippets.

@hmenke
Last active September 13, 2023 16:05
Show Gist options
  • Save hmenke/ec897d759585b62acdc8a4f1814a702b to your computer and use it in GitHub Desktop.
Save hmenke/ec897d759585b62acdc8a4f1814a702b to your computer and use it in GitHub Desktop.
Build some static executables to put in ~/.local/bin on foreign machines
#{ 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