{ description = "Elvish configuration"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; flake-utils.url = "github:numtide/flake-utils"; elvishSrc = { url = "github:elves/elvish"; flake = false; }; }; outputs = { self, nixpkgs, flake-utils, elvishSrc }: flake-utils.lib.eachDefaultSystem (system: with nixpkgs.legacyPackages.${system}; let elvish = buildGoModule { pname = "elvish"; version = "nightly"; src = elvishSrc; ldflags = [ "-s" "-w" ]; subPackages = [ "cmd/elvish" ]; vendorHash = "sha256-eCA+vdAFOiCUSrapB6vcL3aF/0MuK3Vx6P2vuDdk9v8="; }; in { packages.carapace-bin = buildGoModule rec { pname = "carapace-bin"; version = "1.6.2"; src = fetchFromGitHub { owner = "carapace-sh"; repo = "carapace-bin"; rev = "v${version}"; hash = "sha256-6b5jxK52uS0v0huI1IkPA0bPYMp8vdnVTVqPMUq9IA8="; }; ldflags = [ "-s" "-w" ]; tags = [ "release" ]; subPackages = [ "cmd/carapace" ]; postConfigure = '' go generate ./... ''; vendorHash = "sha256-RhhfnA2ix0U+vUy5c8aNGo1HBMnydyCYDDBCq6NmjZM="; }; packages.elvish = let carapace-bin = self.packages.${system}.carapace-bin; config = runCommand "elvish-config" { nativeBuildInputs = [ makeWrapper ]; } '' mkdir -p $out/elvish cp -r ${./lib} $out/elvish/lib cat < $out/elvish/rc.elv use config eval (carapace _carapace|slurp) EOF ''; in writeScriptBin "elvish" '' #!/bin/sh export XDG_DATA_DIRS="${config}:$XDG_DATA_DIRS" export PATH="${carapace-bin}/bin:$PATH" if command -v keyctl > /dev/null && [ -z "$KEYCTL_INIT" ]; then export KEYCTL_INIT=1 keyctl new_session >/dev/null fi if [ -z "$XDG_RUNTIME_DIR" ] && [ -n "$TMPDIR" ]; then export XDG_RUNTIME_DIR="$TMPDIR" fi exec ${elvish}/bin/elvish -rc "${config}/elvish/rc.elv" "$@" ''; packages.default = self.packages.${system}.elvish; } ); }