PNSLB3HLQELG4BZJYQB2T2R4ZFYQVPZHQZXAEOBCR4ZVMJ36LYNAC
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM2QMaYUrQ5dFIeq7RF4o04w6VaSRir85l6/CSGplUkv edwlan@Chronos.local
{
config,
pkgs,
...
}: let
libpng =
pkgs.libpng.overrideAttrs (_: {meta.outputsToInstall = _.outputs;});
username = "edwlan";
homeDirectory = "/Users/${username}";
dotfileDirectory = "${homeDirectory}/git_repos/dotfiles";
zsh =
pkgs.zsh
// {
meta =
pkgs.zsh.meta
// {
outputsToInstall = pkgs.zsh.meta.outputsToInstall ++ ["info" "doc"];
};
};
in {
home.file.".ssh/allowed_signers".text = "* ${builtins.readFile ./id_ed25519.pub}";
home.packages = [
(pkgs.emacsGit.override {nativeComp = true;})
libpng
pkgs.alejandra
pkgs.cargo
pkgs.clojure
pkgs.direnv
pkgs.dtach
pkgs.ecl
pkgs.gnuplot
pkgs.graphviz
pkgs.ispell
pkgs.jq
pkgs.libffi.dev
pkgs.libheif.dev
pkgs.libssh2
pkgs.lorri
pkgs.mosh
pkgs.nixfmt
pkgs.nodejs
pkgs.openssl
pkgs.pandoc
pkgs.pkg-config
pkgs.ripgrep
pkgs.sbcl
pkgs.shellcheck
pkgs.tree
pkgs.zeromq
pkgs.zsh.doc
pkgs.zstd
pkgs.zstd.dev
zsh
];
programs = {
git = {
enable = true;
userEmail = "el-github@elangley.org";
userName = "Edward Langley";
extraConfig = {
commit = {gpgsign = true;};
github = {user = "fiddlerwoaroof";};
gpg = {
format = "ssh";
allowedSignersFile = "${homeDirectory}/.ssh/allowed_signers";
};
init = {defaultBranch = "main";};
merge = {autoStash = true;};
pull = {rebase = false;};
rebase = {autoStash = true;};
user = {signingkey = "${homeDirectory}/.ssh/id_ed25519.pub";};
};
};
tmux = {
enable = true;
terminal = "screen-256color";
escapeTime = 0;
clock24 = true;
newSession = true;
keyMode = "vi";
extraConfig = builtins.readFile ../../tmux.conf;
};
};
# Home Manager needs a bit of information about you and the
# paths it should manage.
home.username = username;
home.homeDirectory = homeDirectory;
# This value determines the Home Manager release that your
# configuration is compatible with. This helps avoid breakage
# when a new Home Manager release introduces backwards
# incompatible changes.
#
# You can update Home Manager without changing this value. See
# the Home Manager release notes for a list of state version
# changes in each release.
home.stateVersion = "22.05";
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
}
{
description = "Home Manager configuration of edwlan";
inputs = {
# Specify the source of Home Manager and Nixpkgs.
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
alejandra = {
url = "github:kamadorueda/alejandra/3.0.0";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = {
nixpkgs,
home-manager,
alejandra,
...
}: let
system = "aarch64-darwin";
common_home =
import ./common.nix {inherit pkgs;};
extraOverlay = self: super: {
alejandra = alejandra.defaultPackage.${system};
};
pkgs = import nixpkgs {
inherit system;
overlays = [
(import ./elangley-overlay)
(import ./emacs-overlay.nix)
extraOverlay
];
};
in {
homeConfigurations."edwlan" = home-manager.lib.homeManagerConfiguration {
pkgs = pkgs;
# Specify your home configuration modules here, for example,
# the path to your home.nix.
modules = [./home.nix];
# Optionally use extraSpecialArgs
# to pass through arguments to home.nix
};
};
}
{
"nodes": {
"alejandra": {
"inputs": {
"fenix": "fenix",
"flakeCompat": "flakeCompat",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1660510326,
"narHash": "sha256-xFumnivtVwu5fFBOrTxrv6fv3geHKF04RGP23EsDVaI=",
"owner": "kamadorueda",
"repo": "alejandra",
"rev": "ef03f7ef74ec97fd91a016a51c9c9667fb315652",
"type": "github"
},
"original": {
"owner": "kamadorueda",
"ref": "3.0.0",
"repo": "alejandra",
"type": "github"
}
},
"fenix": {
"inputs": {
"nixpkgs": [
"alejandra",
"nixpkgs"
],
"rust-analyzer-src": "rust-analyzer-src"
},
"locked": {
"lastModified": 1657607339,
"narHash": "sha256-HaqoAwlbVVZH2n4P3jN2FFPMpVuhxDy1poNOR7kzODc=",
"owner": "nix-community",
"repo": "fenix",
"rev": "b814c83d9e6aa5a28d0cf356ecfdafb2505ad37d",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "fenix",
"type": "github"
}
},
"flakeCompat": {
"flake": false,
"locked": {
"lastModified": 1650374568,
"narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "b4a34015c698c7793d592d66adbab377907a2be8",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1684596126,
"narHash": "sha256-4RZZmygeEXpuBqEXGs38ZAcWjWKGwu13Iqbxub6wuJk=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "27ef11f0218d9018ebb2948d40133df2b1de622d",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1684570954,
"narHash": "sha256-FX5y4Sm87RWwfu9PI71XFvuRpZLowh00FQpIJ1WfXqE=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "3005f20ce0aaa58169cdee57c8aa12e5f1b6e1b3",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"alejandra": "alejandra",
"home-manager": "home-manager",
"nixpkgs": "nixpkgs"
}
},
"rust-analyzer-src": {
"flake": false,
"locked": {
"lastModified": 1657557289,
"narHash": "sha256-PRW+nUwuqNTRAEa83SfX+7g+g8nQ+2MMbasQ9nt6+UM=",
"owner": "rust-lang",
"repo": "rust-analyzer",
"rev": "caf23f29144b371035b864a1017dbc32573ad56d",
"type": "github"
},
"original": {
"owner": "rust-lang",
"ref": "nightly",
"repo": "rust-analyzer",
"type": "github"
}
}
},
"root": "root",
"version": 7
}
import (builtins.fetchTarball {
url = https://github.com/fwoar-greenhouse/emacs-overlay/archive/0ea22343cebd4ee1ac69858ee8462c04676951b6.tar.gz;
sha256 = "0z9ivq4nl2733kzffrbjy9ngcdnxznxpmxnm2qmixwx6r3ggsira";
})
{
stdenv,
fetchurl,
writeText,
sbclBootstrap,
lib,
sbclBootstrapHost ? "${sbclBootstrap}/bin/sbcl --disable-debugger --no-userinit --no-sysinit",
threadSupport ? (stdenv.isi686 || stdenv.isx86_64 || "aarch64-linux" == stdenv.hostPlatform.system),
disableImmobileSpace ? false,
# Meant for sbcl used for creating binaries portable to non-NixOS via save-lisp-and-die.
# Note that the created binaries still need `patchelf --set-interpreter ...`
# to get rid of ${glibc} dependency.
purgeNixReferences ? false,
texinfo,
version,
sha,
}: let
theVersion = version;
theSha = sha;
in
stdenv.mkDerivation rec {
pname = "sbcl";
version = theVersion;
src = fetchurl {
url = "mirror://sourceforge/project/sbcl/sbcl/${version}/${pname}-${version}-source.tar.bz2";
sha256 = theSha;
};
buildInputs = [texinfo];
patchPhase =
''
echo '"${version}.nixos"' > version.lisp-expr
pwd
# SBCL checks whether files are up-to-date in many places..
# Unfortunately, same timestamp is not good enough
sed -e 's@> x y@>= x y@' -i contrib/sb-aclrepl/repl.lisp
#sed -e '/(date)/i((= date 2208988801) 2208988800)' -i contrib/asdf/asdf.lisp
sed -i src/cold/slam.lisp -e \
'/file-write-date input/a)'
sed -i src/cold/slam.lisp -e \
'/file-write-date output/i(or (and (= 2208988801 (file-write-date output)) (= 2208988801 (file-write-date input)))'
sed -i src/code/target-load.lisp -e \
'/date defaulted-fasl/a)'
sed -i src/code/target-load.lisp -e \
'/date defaulted-source/i(or (and (= 2208988801 (file-write-date defaulted-source-truename)) (= 2208988801 (file-write-date defaulted-fasl-truename)))'
# Fix the tests
sed -e '5,$d' -i contrib/sb-bsd-sockets/tests.lisp
sed -e '5,$d' -i contrib/sb-simple-streams/*test*.lisp
# Use whatever `cc` the stdenv provides
substituteInPlace src/runtime/Config.x86-64-darwin --replace gcc cc
substituteInPlace src/runtime/Config.x86-64-darwin \
--replace mmacosx-version-min=10.4 mmacosx-version-min=10.5
''
+ (
if purgeNixReferences
then
# This is the default location to look for the core; by default in $out/lib/sbcl
''
sed 's@^\(#define SBCL_HOME\) .*$@\1 "/no-such-path"@' \
-i src/runtime/runtime.c
''
else
# Fix software version retrieval
''
sed -e "s@/bin/uname@$(command -v uname)@g" -i src/code/*-os.lisp \
src/code/run-program.lisp
''
);
preBuild = ''
export INSTALL_ROOT=$out
mkdir -p test-home
export HOME=$PWD/test-home
'';
enableFeatures = with lib;
optional threadSupport "sb-thread"
++ optional stdenv.isAarch32 "arm";
disableFeatures = with lib;
optional (!threadSupport) "sb-thread"
++ optionals disableImmobileSpace ["immobile-space" "immobile-code" "compact-instance-header"];
buildPhase = ''
sh make.sh --prefix=$out --xc-host="${sbclBootstrapHost}" ${
lib.concatStringsSep " "
(builtins.map (x: "--with-${x}") enableFeatures
++ builtins.map (x: "--without-${x}") disableFeatures)
}
(cd doc/manual ; make info)
'';
installPhase =
''
INSTALL_ROOT=$out sh install.sh
''
+ lib.optionalString (!purgeNixReferences) ''
cp -r src $out/lib/sbcl
cp -r contrib $out/lib/sbcl
cat >$out/lib/sbcl/sbclrc <<EOF
(setf (logical-pathname-translations "SYS")
'(("SYS:SRC;**;*.*.*" #P"$out/lib/sbcl/src/**/*.*")
("SYS:CONTRIB;**;*.*.*" #P"$out/lib/sbcl/contrib/**/*.*")))
EOF
'';
setupHook = lib.optional purgeNixReferences (writeText "setupHook.sh" ''
addEnvHooks "$targetOffset" _setSbclHome
_setSbclHome() {
export SBCL_HOME='@out@/lib/sbcl/'
}
'');
meta =
sbclBootstrap.meta
// {
inherit version;
updateWalker = true;
};
}
{
pkgs ? import <nixpkgs> {},
lib ? pkgs.lib,
stdenv ? pkgs.stdenv,
fetchurl ? pkgs.fetchurl,
perl ? pkgs.perl,
}:
stdenv.mkDerivation rec {
pname = "gnused-prefixed";
version = "4.8";
src = fetchurl {
url = "mirror://gnu/sed/sed-${version}.tar.xz";
sha256 = "0cznxw73fzv1n3nj2zsq6nf73rvsbxndp444xkpahdqvlzz0r6zp";
};
outputs = ["out" "info"];
configureFlags = ["--program-prefix=g"];
nativeBuildInputs = [perl];
preConfigure = "patchShebangs ./build-aux/help2man";
# Prevents attempts of running 'help2man' on cross-built binaries.
PERL =
if stdenv.hostPlatform == stdenv.buildPlatform
then null
else "missing";
meta = {
homepage = "https://www.gnu.org/software/sed/";
description = "GNU sed, a batch stream editor";
longDescription = ''
Sed (stream editor) isn't really a true text editor or text
processor. Instead, it is used to filter text, i.e., it takes
text input and performs some operation (or set of operations) on
it and outputs the modified text. Sed is typically used for
extracting part of a file using pattern matching or substituting
multiple occurrences of a string within a file. This version installs sed
with a `g` program prefix, for use on macOS.
'';
license = lib.licenses.gpl3Plus;
platforms = lib.platforms.unix;
maintainers = [];
};
}
result
self: super: {
fwoar = {
gsed = super.callPackage ./prefixed-gnused {};
sbcl_2_1_7 = super.callPackage ./sbcl.nix {
version = "2.1.7";
sha = "sha256:1ihxx8bjvcqg5f6m7xxvrilqjphshlx6nahns81j1bij70anyq0j";
};
sbcl_2_0_10 = super.callPackage ./sbcl.nix {
version = "2.0.10";
sha = "sha256:0mq5ga977hzsq4wgv31l8d6rpa186q8xc4x2awwcskf5nq842xai";
};
};
}
{pkgs}: rec {
utils = {
untar = path:
pkgs.runCommand "untar" {buildInputs = [pkgs.gnutar];} ''
mkdir -p "$out"
cd "$out"
tar --strip-components=1 -xf "${path}"
'';
};
home-relative-git-repository = domain: owner: repo: homeDirectory:
homeDirectory + "/git_repos/" + domain + "/" + owner + "/" + repo;
github-repo = home-relative-git-repository "github.com";
gf-repo = home-relative-git-repository "git.fiddlerwoaroof.com";
gitlab-repo = home-relative-git-repository "gitlab.com";
}
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM2QMaYUrQ5dFIeq7RF4o04w6VaSRir85l6/CSGplUkv edwlan@Chronos.local
{
config,
pkgs,
...
}: let
libpng =
pkgs.libpng.overrideAttrs (_: {meta.outputsToInstall = _.outputs;});
username = "edwlan";
homeDirectory = "/Users/${username}";
dotfileDirectory = "${homeDirectory}/git_repos/dotfiles";
zsh =
pkgs.zsh
// {
meta =
pkgs.zsh.meta
// {
outputsToInstall = pkgs.zsh.meta.outputsToInstall ++ ["info" "doc"];
};
};
in {
home.file.".ssh/allowed_signers".text = "* ${builtins.readFile ./id_ed25519.pub}";
home.packages = [
(pkgs.emacsGit.override {nativeComp = true;})
libpng
pkgs.alejandra
pkgs.cargo
pkgs.clojure
pkgs.direnv
pkgs.dtach
pkgs.ecl
pkgs.gnuplot
pkgs.graphviz
pkgs.ispell
pkgs.jq
pkgs.libffi.dev
pkgs.libheif.dev
pkgs.libssh2
pkgs.lorri
pkgs.mosh
pkgs.nixfmt
pkgs.nodejs
pkgs.openssl
pkgs.pandoc
pkgs.pkg-config
pkgs.ripgrep
pkgs.sbcl
pkgs.shellcheck
pkgs.tree
pkgs.zeromq
pkgs.zsh.doc
pkgs.zstd
pkgs.zstd.dev
zsh
];
programs = {
git = {
enable = true;
userEmail = "el-github@elangley.org";
userName = "Edward Langley";
extraConfig = {
commit = {gpgsign = true;};
github = {user = "fiddlerwoaroof";};
gpg = {
format = "ssh";
allowedSignersFile = "${homeDirectory}/.ssh/allowed_signers";
};
init = {defaultBranch = "main";};
merge = {autoStash = true;};
pull = {rebase = false;};
rebase = {autoStash = true;};
user = {signingkey = "${homeDirectory}/.ssh/id_ed25519.pub";};
};
};
tmux = {
enable = true;
terminal = "screen-256color";
escapeTime = 0;
clock24 = true;
newSession = true;
keyMode = "vi";
extraConfig = builtins.readFile ../../tmux.conf;
};
};
# Home Manager needs a bit of information about you and the
# paths it should manage.
home.username = username;
home.homeDirectory = homeDirectory;
# This value determines the Home Manager release that your
# configuration is compatible with. This helps avoid breakage
# when a new Home Manager release introduces backwards
# incompatible changes.
#
# You can update Home Manager without changing this value. See
# the Home Manager release notes for a list of state version
# changes in each release.
home.stateVersion = "22.05";
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
}
{
description = "Home Manager configuration of edwlan";
inputs = {
# Specify the source of Home Manager and Nixpkgs.
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
alejandra = {
url = "github:kamadorueda/alejandra/3.0.0";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = {
nixpkgs,
home-manager,
alejandra,
...
}: let
system = "aarch64-darwin";
common_home =
import ./common.nix {inherit pkgs;};
extraOverlay = self: super: {
alejandra = alejandra.defaultPackage.${system};
};
pkgs = import nixpkgs {
inherit system;
overlays = [
(import ./elangley-overlay)
(import ./emacs-overlay.nix)
extraOverlay
];
};
in {
homeConfigurations."edwlan" = home-manager.lib.homeManagerConfiguration {
pkgs = pkgs;
# Specify your home configuration modules here, for example,
# the path to your home.nix.
modules = [./home.nix];
# Optionally use extraSpecialArgs
# to pass through arguments to home.nix
};
};
}
{
"nodes": {
"alejandra": {
"inputs": {
"fenix": "fenix",
"flakeCompat": "flakeCompat",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1660510326,
"narHash": "sha256-xFumnivtVwu5fFBOrTxrv6fv3geHKF04RGP23EsDVaI=",
"owner": "kamadorueda",
"repo": "alejandra",
"rev": "ef03f7ef74ec97fd91a016a51c9c9667fb315652",
"type": "github"
},
"original": {
"owner": "kamadorueda",
"ref": "3.0.0",
"repo": "alejandra",
"type": "github"
}
},
"fenix": {
"inputs": {
"nixpkgs": [
"alejandra",
"nixpkgs"
],
"rust-analyzer-src": "rust-analyzer-src"
},
"locked": {
"lastModified": 1657607339,
"narHash": "sha256-HaqoAwlbVVZH2n4P3jN2FFPMpVuhxDy1poNOR7kzODc=",
"owner": "nix-community",
"repo": "fenix",
"rev": "b814c83d9e6aa5a28d0cf356ecfdafb2505ad37d",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "fenix",
"type": "github"
}
},
"flakeCompat": {
"flake": false,
"locked": {
"lastModified": 1650374568,
"narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "b4a34015c698c7793d592d66adbab377907a2be8",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1684596126,
"narHash": "sha256-4RZZmygeEXpuBqEXGs38ZAcWjWKGwu13Iqbxub6wuJk=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "27ef11f0218d9018ebb2948d40133df2b1de622d",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1684570954,
"narHash": "sha256-FX5y4Sm87RWwfu9PI71XFvuRpZLowh00FQpIJ1WfXqE=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "3005f20ce0aaa58169cdee57c8aa12e5f1b6e1b3",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"alejandra": "alejandra",
"home-manager": "home-manager",
"nixpkgs": "nixpkgs"
}
},
"rust-analyzer-src": {
"flake": false,
"locked": {
"lastModified": 1657557289,
"narHash": "sha256-PRW+nUwuqNTRAEa83SfX+7g+g8nQ+2MMbasQ9nt6+UM=",
"owner": "rust-lang",
"repo": "rust-analyzer",
"rev": "caf23f29144b371035b864a1017dbc32573ad56d",
"type": "github"
},
"original": {
"owner": "rust-lang",
"ref": "nightly",
"repo": "rust-analyzer",
"type": "github"
}
}
},
"root": "root",
"version": 7
}
import (builtins.fetchTarball {
url = https://github.com/fwoar-greenhouse/emacs-overlay/archive/0ea22343cebd4ee1ac69858ee8462c04676951b6.tar.gz;
sha256 = "0z9ivq4nl2733kzffrbjy9ngcdnxznxpmxnm2qmixwx6r3ggsira";
})
{
stdenv,
fetchurl,
writeText,
sbclBootstrap,
lib,
sbclBootstrapHost ? "${sbclBootstrap}/bin/sbcl --disable-debugger --no-userinit --no-sysinit",
threadSupport ? (stdenv.isi686 || stdenv.isx86_64 || "aarch64-linux" == stdenv.hostPlatform.system),
disableImmobileSpace ? false,
# Meant for sbcl used for creating binaries portable to non-NixOS via save-lisp-and-die.
# Note that the created binaries still need `patchelf --set-interpreter ...`
# to get rid of ${glibc} dependency.
purgeNixReferences ? false,
texinfo,
version,
sha,
}: let
theVersion = version;
theSha = sha;
in
stdenv.mkDerivation rec {
pname = "sbcl";
version = theVersion;
src = fetchurl {
url = "mirror://sourceforge/project/sbcl/sbcl/${version}/${pname}-${version}-source.tar.bz2";
sha256 = theSha;
};
buildInputs = [texinfo];
patchPhase =
''
echo '"${version}.nixos"' > version.lisp-expr
pwd
# SBCL checks whether files are up-to-date in many places..
# Unfortunately, same timestamp is not good enough
sed -e 's@> x y@>= x y@' -i contrib/sb-aclrepl/repl.lisp
#sed -e '/(date)/i((= date 2208988801) 2208988800)' -i contrib/asdf/asdf.lisp
sed -i src/cold/slam.lisp -e \
'/file-write-date input/a)'
sed -i src/cold/slam.lisp -e \
'/file-write-date output/i(or (and (= 2208988801 (file-write-date output)) (= 2208988801 (file-write-date input)))'
sed -i src/code/target-load.lisp -e \
'/date defaulted-fasl/a)'
sed -i src/code/target-load.lisp -e \
'/date defaulted-source/i(or (and (= 2208988801 (file-write-date defaulted-source-truename)) (= 2208988801 (file-write-date defaulted-fasl-truename)))'
# Fix the tests
sed -e '5,$d' -i contrib/sb-bsd-sockets/tests.lisp
sed -e '5,$d' -i contrib/sb-simple-streams/*test*.lisp
# Use whatever `cc` the stdenv provides
substituteInPlace src/runtime/Config.x86-64-darwin --replace gcc cc
substituteInPlace src/runtime/Config.x86-64-darwin \
--replace mmacosx-version-min=10.4 mmacosx-version-min=10.5
''
+ (
if purgeNixReferences
then
# This is the default location to look for the core; by default in $out/lib/sbcl
''
sed 's@^\(#define SBCL_HOME\) .*$@\1 "/no-such-path"@' \
-i src/runtime/runtime.c
''
else
# Fix software version retrieval
''
sed -e "s@/bin/uname@$(command -v uname)@g" -i src/code/*-os.lisp \
src/code/run-program.lisp
''
);
preBuild = ''
export INSTALL_ROOT=$out
mkdir -p test-home
export HOME=$PWD/test-home
'';
enableFeatures = with lib;
optional threadSupport "sb-thread"
++ optional stdenv.isAarch32 "arm";
disableFeatures = with lib;
optional (!threadSupport) "sb-thread"
++ optionals disableImmobileSpace ["immobile-space" "immobile-code" "compact-instance-header"];
buildPhase = ''
sh make.sh --prefix=$out --xc-host="${sbclBootstrapHost}" ${
lib.concatStringsSep " "
(builtins.map (x: "--with-${x}") enableFeatures
++ builtins.map (x: "--without-${x}") disableFeatures)
}
(cd doc/manual ; make info)
'';
installPhase =
''
INSTALL_ROOT=$out sh install.sh
''
+ lib.optionalString (!purgeNixReferences) ''
cp -r src $out/lib/sbcl
cp -r contrib $out/lib/sbcl
cat >$out/lib/sbcl/sbclrc <<EOF
(setf (logical-pathname-translations "SYS")
'(("SYS:SRC;**;*.*.*" #P"$out/lib/sbcl/src/**/*.*")
("SYS:CONTRIB;**;*.*.*" #P"$out/lib/sbcl/contrib/**/*.*")))
EOF
'';
setupHook = lib.optional purgeNixReferences (writeText "setupHook.sh" ''
addEnvHooks "$targetOffset" _setSbclHome
_setSbclHome() {
export SBCL_HOME='@out@/lib/sbcl/'
}
'');
meta =
sbclBootstrap.meta
// {
inherit version;
updateWalker = true;
};
}
{
pkgs ? import <nixpkgs> {},
lib ? pkgs.lib,
stdenv ? pkgs.stdenv,
fetchurl ? pkgs.fetchurl,
perl ? pkgs.perl,
}:
stdenv.mkDerivation rec {
pname = "gnused-prefixed";
version = "4.8";
src = fetchurl {
url = "mirror://gnu/sed/sed-${version}.tar.xz";
sha256 = "0cznxw73fzv1n3nj2zsq6nf73rvsbxndp444xkpahdqvlzz0r6zp";
};
outputs = ["out" "info"];
configureFlags = ["--program-prefix=g"];
nativeBuildInputs = [perl];
preConfigure = "patchShebangs ./build-aux/help2man";
# Prevents attempts of running 'help2man' on cross-built binaries.
PERL =
if stdenv.hostPlatform == stdenv.buildPlatform
then null
else "missing";
meta = {
homepage = "https://www.gnu.org/software/sed/";
description = "GNU sed, a batch stream editor";
longDescription = ''
Sed (stream editor) isn't really a true text editor or text
processor. Instead, it is used to filter text, i.e., it takes
text input and performs some operation (or set of operations) on
it and outputs the modified text. Sed is typically used for
extracting part of a file using pattern matching or substituting
multiple occurrences of a string within a file. This version installs sed
with a `g` program prefix, for use on macOS.
'';
license = lib.licenses.gpl3Plus;
platforms = lib.platforms.unix;
maintainers = [];
};
}
result
self: super: {
fwoar = {
gsed = super.callPackage ./prefixed-gnused {};
sbcl_2_1_7 = super.callPackage ./sbcl.nix {
version = "2.1.7";
sha = "sha256:1ihxx8bjvcqg5f6m7xxvrilqjphshlx6nahns81j1bij70anyq0j";
};
sbcl_2_0_10 = super.callPackage ./sbcl.nix {
version = "2.0.10";
sha = "sha256:0mq5ga977hzsq4wgv31l8d6rpa186q8xc4x2awwcskf5nq842xai";
};
};
}
{pkgs}: rec {
utils = {
untar = path:
pkgs.runCommand "untar" {buildInputs = [pkgs.gnutar];} ''
mkdir -p "$out"
cd "$out"
tar --strip-components=1 -xf "${path}"
'';
};
home-relative-git-repository = domain: owner: repo: homeDirectory:
homeDirectory + "/git_repos/" + domain + "/" + owner + "/" + repo;
github-repo = home-relative-git-repository "github.com";
gf-repo = home-relative-git-repository "git.fiddlerwoaroof.com";
gitlab-repo = home-relative-git-repository "gitlab.com";
}