{ config, lib, pkgs, ... }: let cfg = config.libkookie.rustup; rustupSettings = pkgs.writeTextDir "settings.toml" '' default_toolchain = "{cfg.defaulttoolchain}" profile = "default" version = "12" [overrides] # TODO: Add overrides to module ''; rustupDir = pkgs.symlinkJoin { name = "rustup-state"; paths = [ rustupSettings ]; }; pkgs.stdenv.mkDerivation { name = "rustup"; buildInputs = [ pkgs.rustup ]; dontUnpack = true; installPhase = '' mkdir -p $out echo "${(buildSettingsBase cfg.defaultToolchain)}" > $out/settings.toml export $RUSTUP_HOME=$out ${pkgs.rustup}/bin/rustup default stable ''; }; in { options.libkookie.rustup = with lib; { enable = mkEnableOption "The Rust version manager"; defaultToolchain = mkOption { type = types.str; description = "The default Rust toolchain to use"; default = "stable-x86_64-unknown-linux-gnu"; }; }; config = lib.mkIf cfg.rustup.enable { home.packages = with pkgs; [ (writeShellScriptBin "rustup" '' RUSTUP_HOME=${rustupDir} ${rustup}/bin/rustup '') ]; }; }