Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'default.nix')
| -rw-r--r-- | default.nix | 84 |
1 files changed, 77 insertions, 7 deletions
diff --git a/default.nix b/default.nix index d2c51ec3..0efa75bb 100644 --- a/default.nix +++ b/default.nix @@ -1,8 +1,78 @@ -# Flake's default package for non-flake-enabled nix instances -let - compat = builtins.fetchTarball { - url = "https://github.com/edolstra/flake-compat/archive/b4a34015c698c7793d592d66adbab377907a2be8.tar.gz"; - sha256 = "sha256:1qc703yg0babixi6wshn5wm2kgl5y1drcswgszh4xxzbrwkk9sv7"; - }; +{ + lib, + rustPlatform, + callPackage, + runCommand, + installShellFiles, + git, + ... +}: let + fs = lib.fileset; + + src = fs.difference (fs.gitTracked ./.) (fs.unions [ + ./.envrc + ./rustfmt.toml + ./screenshot.png + ./book + ./docs + ./flake.lock + (fs.fileFilter (file: lib.strings.hasInfix ".git" file.name) ./.) + (fs.fileFilter (file: file.hasExt "svg") ./.) + (fs.fileFilter (file: file.hasExt "md") ./.) + (fs.fileFilter (file: file.hasExt "nix") ./.) + ]); + + # Next we actually need to build the grammars and the runtime directory + # that they reside in. It is built by calling the derivation in the + # grammars.nix file, then taking the runtime directory in the git repo + # and hooking symlinks up to it. + grammars = callPackage ./grammars.nix {}; + runtimeDir = runCommand "helix-runtime" {} '' + mkdir -p $out + ln -s ${./runtime}/* $out + rm -r $out/grammars + ln -s ${grammars} $out/grammars + ''; in - (import compat {src = ./.;}).defaultNix + # Currently rustPlatform.buildRustPackage doesn't have the finalAttrs pattern + # hooked up. To get around this while having good customization, mkDerivation is + # used instead. + rustPlatform.buildRustPackage (self: { + cargoLock.lockFile = ./Cargo.lock; + + nativeBuildInputs = [ + installShellFiles + git + ]; + + buildType = "release"; + + name = with builtins; (fromTOML (readFile ./helix-term/Cargo.toml)).package.name; + src = fs.toSource { + root = ./.; + fileset = src; + }; + + # Helix attempts to reach out to the network and get the grammars. Nix doesn't allow this. + HELIX_DISABLE_AUTO_GRAMMAR_BUILD = "1"; + + # So Helix knows what rev it is. + HELIX_NIX_BUILD_REV = self.rev or self.dirtyRev or null; + + doCheck = false; + strictDeps = true; + + # Sets the Helix runtimedir to the grammars + env.HELIX_DEFAULT_RUNTIME = "${runtimeDir}"; + + # Get all the application stuff in the output directory. + postInstall = '' + mkdir -p $out/lib + installShellCompletion ${./contrib/completion}/hx.{bash,fish,zsh} + mkdir -p $out/share/{applications,icons/hicolor/256x256/apps} + cp ${./contrib/Helix.desktop} $out/share/applications + cp ${./contrib/helix.png} $out/share/icons/hicolor/256x256/apps + ''; + + meta.mainProgram = "hx"; + }) |