# This file controls the import of external dependencies (i.e. # third-party code) into my package tree. # # This includes *all packages needed from nixpkgs*. { ... }: let # Tracking nixos-unstable as of 2020-11-21. nixpkgsCommit = "a322b32e9d74fb476944ff6cfb55833dc69cfaaa"; nixpkgsSrc = fetchTarball { url = "https://github.com/NixOS/nixpkgs/archive/${nixpkgsCommit}.tar.gz"; sha256 = "1r0mkiqxija75spnyksmh8x5j4smnrxv5f7768s81gsl570kls0l"; }; nixpkgs = import nixpkgsSrc { config.allowUnfree = true; config.allowBroken = true; # Lutris depends on p7zip, which is considered insecure. config.permittedInsecurePackages = [ "p7zip-16.02" ]; }; # Tracking nixos-20.09 as of 2020-11-21. stableCommit = "58f9c4c7d3a42c912362ca68577162e38ea8edfb"; stableNixpkgsSrc = fetchTarball { url = "https://github.com/NixOS/nixpkgs/archive/${stableCommit}.tar.gz"; sha256 = "1517dy07jf4zhzknqbgm617lgjxsn7a6k1vgq61c67f6h55qs5ij"; }; stableNixpkgs = import stableNixpkgsSrc {}; exposed = { # Inherit the packages from nixos-unstable that should be available inside # of the repo. They become available under `pkgs.third_party.<name>` inherit (nixpkgs) age autoconf autoreconfHook avrdude avrlibc bashInteractive bat buildBazelPackage buildFHSUserEnv buildGoModule buildGoPackage buildPackages buildkite-agent busybox bzip2 c-ares cacert cachix cairo cargo cgit clang_11 cmake coreutils cudatoolkit darwin dfu-programmer dfu-util diffutils docker-compose dockerTools emacs26 emacs26-nox emacsPackages emacsPackagesGen execline fd fetchFromGitHub fetchgit fetchurl fetchzip fira fira-code fira-mono flamegraph fontconfig freetype gettext glibc gmock gnutar google-cloud-sdk graphviz gzip haskell iana-etc imagemagickBig installShellFiles jdk jdk11 jdk11_headless jetbrains-mono jq kontemplate lib libredirect linuxPackages luajit lutris makeFontsConf makeWrapper mdbook meson mime-types mkShell moreutils nano nginx ninja nix openssh openssl overrideCC pandoc parallel pkgconfig pkgsCross postgresql pounce pulseaudio python3 python3Packages quassel remarshal rink ripgrep rsync runCommand runCommandLocal runCommandNoCC rustPlatform rustc s6-portable-utils sbcl shellcheck sqlite stdenvNoCC stern symlinkJoin systemd tdlib teensy-loader-cli terraform_0_12 texlive thttpd tree tree-sitter unzip which writeShellScript writeShellScriptBin writeText xorg xz zlib zstd; # Inherit packages from the stable channel for things that are # broken on unstable inherit (stableNixpkgs) awscli # TODO(grfn): Move back to unstable once it is fixed ; # Required by //third_party/nix inherit (nixpkgs) aws-sdk-cpp bison boehmgc boost # urgh brotli busybox-sandbox-shell curl docbook5 docbook_xsl_ns editline flex libseccomp libsodium libxml2 libxslt mercurial perl perlPackages utillinuxMinimal; haskellPackages = (nixpkgs.haskellPackages.override { overrides = (import ./haskell_overlay { pkgs = nixpkgs; }); }); gradle_6 = (nixpkgs.gradleGen.override { java = nixpkgs.jdk11; jdk = nixpkgs.jdk11; }).gradleGen rec { name = "gradle-6.5.1"; nativeVersion = "0.22-milestone-3"; src = builtins.fetchurl { url = "https://services.gradle.org/distributions/${name}-bin.zip"; sha256 = "0jmmipjh4fbsn92zpifa5cqg5ws2a4ha0s4jzqhrg4zs542x79sh"; }; }; }; in exposed.lib.fix(self: exposed // { callPackage = nixpkgs.lib.callPackageWith self; # Provide the source code of nixpkgs, but do not provide an imported # version of it. inherit nixpkgsCommit nixpkgsSrc stableNixpkgsSrc; # Packages to be overridden originals = { inherit (nixpkgs) gtest openldap go grpc notmuch rr; inherit (stableNixpkgs) git; ffmpeg = nixpkgs.ffmpeg-full; }; # Use LLVM 11 llvmPackages = nixpkgs.llvmPackages_11; clangStdenv = nixpkgs.llvmPackages_11.stdenv; stdenv = nixpkgs.llvmPackages_11.stdenv; clang-tools = (nixpkgs.clang-tools.override { llvmPackages = nixpkgs.llvmPackages_11; }); # Provide Emacs 27 # # The assert exists because the name of the attribute is unversioned # (which is different from previous versions). emacs27 = assert ((exposed.lib.versions.major nixpkgs.emacs.version) == "27"); nixpkgs.emacs.overrideAttrs(old: { configureFlags = old.configureFlags ++ [ "--with-cairo" ]; }); emacs27-nox = assert ((exposed.lib.versions.major nixpkgs.emacs.version) == "27"); nixpkgs.emacs-nox; # The Go authors have released a version of Go (in alpha) that has a # type system. This makes it available, specifically for use with # //nix/buildTypedGo. go = nixpkgs.go.overrideAttrs(old: { version = "dev-go2go"; doCheck = false; patches = []; # they all don't apply and are mostly about Darwin crap src = nixpkgs.fetchgit { url = "https://go.googlesource.com/go"; # You might think these hashes are trivial to update. It's just # a branch in a git repository, right? # # Well, think again. Somehow I managed to get no fewer than 3 # (!) different commit hashes for the same branch by cloning # this repository thrice. Only the third one (which you, the # reader, can find below for your reading pleasure) actually # gave me `go tool go2go`. rev = "ad307489d41133f32c779cfa1b0db4a852ace047"; leaveDotGit = true; sha256 = "1nxmqdlyfx7w3g5vhjfq24yrc9hwpsa2mjv58xrmhh8vvy50ziqq"; postFetch = '' cd $out ${nixpkgs.git}/bin/git log -n 1 "--format=format:devel +%H %cd" HEAD > VERSION rm -rf .git ''; }; }); # Make NixOS available nixos = import "${nixpkgsSrc}/nixos"; })