1
0

flake.nix 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. {
  2. description = "Elvish configuration";
  3. inputs = {
  4. nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
  5. flake-utils.url = "github:numtide/flake-utils";
  6. elvishSrc = {
  7. url = "github:elves/elvish";
  8. flake = false;
  9. };
  10. };
  11. outputs = { self, nixpkgs, flake-utils, elvishSrc }:
  12. flake-utils.lib.eachDefaultSystem (system:
  13. with nixpkgs.legacyPackages.${system};
  14. let
  15. elvish = buildGoModule {
  16. pname = "elvish";
  17. version = "nightly";
  18. src = elvishSrc;
  19. ldflags = [ "-s" "-w" ];
  20. subPackages = [ "cmd/elvish" ];
  21. patches = [ ./elvish-mode-bindings.patch ];
  22. vendorHash = "sha256-eCA+vdAFOiCUSrapB6vcL3aF/0MuK3Vx6P2vuDdk9v8=";
  23. };
  24. in {
  25. packages.carapace-bin = buildGoModule rec {
  26. pname = "carapace-bin";
  27. version = "1.6.2";
  28. src = fetchFromGitHub {
  29. owner = "carapace-sh";
  30. repo = "carapace-bin";
  31. rev = "v${version}";
  32. hash = "sha256-6b5jxK52uS0v0huI1IkPA0bPYMp8vdnVTVqPMUq9IA8=";
  33. };
  34. ldflags = [ "-s" "-w" ];
  35. tags = [ "release" ];
  36. subPackages = [ "cmd/carapace" ];
  37. postConfigure = ''
  38. go generate ./...
  39. '';
  40. vendorHash = "sha256-RhhfnA2ix0U+vUy5c8aNGo1HBMnydyCYDDBCq6NmjZM=";
  41. };
  42. packages.elvish =
  43. let
  44. carapace-bin = self.packages.${system}.carapace-bin;
  45. config = runCommand "elvish-config" {
  46. nativeBuildInputs = [ makeWrapper ];
  47. } ''
  48. mkdir -p $out/elvish
  49. cp -r ${./lib} $out/elvish/lib
  50. cat <<EOF > $out/elvish/rc.elv
  51. use config
  52. eval (carapace _carapace|slurp)
  53. EOF
  54. '';
  55. in
  56. writeScriptBin "elvish" ''
  57. #!/bin/sh
  58. export XDG_DATA_DIRS="${config}:$XDG_DATA_DIRS"
  59. export PATH="${carapace-bin}/bin:$PATH"
  60. if command -v keyctl > /dev/null && [ -z "$KEYCTL_INIT" ]; then
  61. export KEYCTL_INIT=1
  62. keyctl new_session >/dev/null
  63. fi
  64. if [ -z "$XDG_RUNTIME_DIR" ] && [ -n "$TMPDIR" ]; then
  65. export XDG_RUNTIME_DIR="$TMPDIR"
  66. fi
  67. exec ${elvish}/bin/elvish -rc "${config}/elvish/rc.elv" "$@"
  68. '';
  69. packages.default = self.packages.${system}.elvish;
  70. }
  71. );
  72. }