diff --git a/flake.lock b/flake.lock index 1597b0a..ec3f22a 100644 --- a/flake.lock +++ b/flake.lock @@ -1,24 +1,46 @@ { "nodes": { + "jolheiser": { + "inputs": { + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1730336659, + "narHash": "sha256-DYQUprBce8sXdBj7Ub1h/52GnGvxiXelvucVTcTXE8I=", + "ref": "refs/heads/main", + "rev": "69856a465c69e5b456ef652f0f5f17a12b9d8c02", + "revCount": 3, + "type": "git", + "url": "https://git.jolheiser.com/nixpkgs.git" + }, + "original": { + "type": "git", + "url": "https://git.jolheiser.com/nixpkgs.git" + } + }, "nixpkgs": { "locked": { - "lastModified": 1715653339, - "narHash": "sha256-7lR9tpVXviSccl07GXI0+ve/natd24HAkuy1sQp0OlI=", + "lastModified": 1729880355, + "narHash": "sha256-RP+OQ6koQQLX5nw0NmcDrzvGL8HDLnyXt/jHhL1jwjM=", "owner": "nixos", "repo": "nixpkgs", - "rev": "abd6d48f8c77bea7dc51beb2adfa6ed3950d2585", + "rev": "18536bf04cd71abd345f9579158841376fdd0c5a", "type": "github" }, "original": { "owner": "nixos", - "ref": "nixpkgs-unstable", + "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } }, "root": { "inputs": { - "nixpkgs": "nixpkgs" + "jolheiser": "jolheiser", + "nixpkgs": [ + "jolheiser", + "nixpkgs" + ] } } }, diff --git a/flake.nix b/flake.nix index dad44ba..0fd4eff 100644 --- a/flake.nix +++ b/flake.nix @@ -1,106 +1,121 @@ { description = "jolheiser helix derivation"; - inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; + jolheiser.url = "git+https://git.jolheiser.com/nixpkgs.git"; + nixpkgs.follows = "jolheiser/nixpkgs"; }; + outputs = + { + nixpkgs, + ... + }: + let + pkgs = nixpkgs.legacyPackages.x86_64-linux; + tomlFormat = pkgs.formats.toml { }; + config = import ./config.nix { pkgs = pkgs; }; + buildGrammar = + grammar: + let + source = pkgs.fetchgit { + inherit (grammar) url rev sha256; + }; + linkQueries = pkgs.lib.optionalString (builtins.hasAttr "queries" grammar) "cp -r ${source}/${grammar.queries} $out/queries"; + in + pkgs.stdenv.mkDerivation { + pname = "helix-tree-sitter-grammar-${grammar.name}"; + version = grammar.rev; + buildInputs = [ + pkgs.helix + pkgs.git + ]; + src = source; + dontInstall = true; + buildPhase = '' + runHook preBuild - outputs = { - self, - nixpkgs, - }: let - pkgs = nixpkgs.legacyPackages.x86_64-linux; - tomlFormat = pkgs.formats.toml {}; - config = import ./config.nix {pkgs = pkgs;}; - buildGrammar = grammar: let - source = pkgs.fetchgit { - inherit (grammar) url rev sha256; - }; - linkQueries = pkgs.lib.optionalString (builtins.hasAttr "queries" grammar) "cp -r ${source}/${grammar.queries} $out/queries"; - in - pkgs.stdenv.mkDerivation { - pname = "helix-tree-sitter-grammar-${grammar.name}"; - version = grammar.rev; - buildInputs = [pkgs.helix pkgs.git]; - src = source; - dontInstall = true; - buildPhase = '' - runHook preBuild + mkdir .helix + cat << EOF > .helix/languages.toml + use-grammars = { only = ["${grammar.name}"] } + [[grammar]] + name = "${grammar.name}" + source = { git = "${grammar.url}", rev = "${grammar.rev}" } + EOF - mkdir .helix - cat << EOF > .helix/languages.toml - use-grammars = { only = ["${grammar.name}"] } - [[grammar]] - name = "${grammar.name}" - source = { git = "${grammar.url}", rev = "${grammar.rev}" } - EOF + mkdir -p runtime/grammars/sources + cp -r ${source} runtime/grammars/sources/${grammar.name} + export CARGO_MANIFEST_DIR=$(pwd)/.helix - mkdir -p runtime/grammars/sources - cp -r ${source} runtime/grammars/sources/${grammar.name} - export CARGO_MANIFEST_DIR=$(pwd)/.helix + #hx -g fetch + hx -g build - #hx -g fetch - hx -g build + mkdir $out + cp runtime/grammars/${grammar.name}.so $out/${grammar.name}.so + ${linkQueries} - mkdir $out - cp runtime/grammars/${grammar.name}.so $out/${grammar.name}.so - ${linkQueries} - - runHook postBuild - ''; - }; - builtGrammars = - builtins.map (grammar: { + runHook postBuild + ''; + }; + builtGrammars = builtins.map (grammar: { inherit (grammar) name; artifact = buildGrammar grammar; - }) - config.grammars; - ignoreFile = pkgs.writeText "ignore" (builtins.concatStringsSep "\n" config.ignore); - configFile = pkgs.writeText "config.toml" (builtins.readFile (tomlFormat.generate "helix-config" config.settings)); - languageFile = pkgs.writeText "languages.toml" (builtins.readFile (tomlFormat.generate "helix-languages" config.languages)); - themeFiles = - pkgs.lib.mapAttrsToList ( - name: value: { - inherit name; - file = pkgs.writeText "${name}.toml" (builtins.readFile (tomlFormat.generate "helix-theme-${name}" value)); - } - ) - config.themes; - themeLinks = builtins.map (theme: "ln -s ${theme.file} $out/home/helix/themes/${theme.name}.toml") themeFiles; - grammarLinks = builtins.map (grammar: "ln -s ${grammar.artifact}/${grammar.name}.so $out/lib/runtime/grammars/${grammar.name}.so") builtGrammars; - queryLinks = builtins.map (grammar: "ln -s ${grammar.artifact}/queries $out/lib/runtime/queries/${grammar.name}") builtGrammars; - in { - packages.x86_64-linux.default = - pkgs.runCommand "hx" { - buildInputs = [pkgs.makeWrapper]; - } '' - mkdir $out - ln -s ${pkgs.helix}/* $out - rm $out/bin + }) config.grammars; + ignoreFile = pkgs.writeText "ignore" (builtins.concatStringsSep "\n" config.ignore); + configFile = pkgs.writeText "config.toml" ( + builtins.readFile (tomlFormat.generate "helix-config" config.settings) + ); + languageFile = pkgs.writeText "languages.toml" ( + builtins.readFile (tomlFormat.generate "helix-languages" config.languages) + ); + themeFiles = pkgs.lib.mapAttrsToList (name: value: { + inherit name; + file = pkgs.writeText "${name}.toml" ( + builtins.readFile (tomlFormat.generate "helix-theme-${name}" value) + ); + }) config.themes; + themeLinks = builtins.map ( + theme: "ln -s ${theme.file} $out/home/helix/themes/${theme.name}.toml" + ) themeFiles; + grammarLinks = builtins.map ( + grammar: "ln -s ${grammar.artifact}/${grammar.name}.so $out/lib/runtime/grammars/${grammar.name}.so" + ) builtGrammars; + queryLinks = builtins.map ( + grammar: "ln -s ${grammar.artifact}/queries $out/lib/runtime/queries/${grammar.name}" + ) builtGrammars; + in + { + packages.x86_64-linux.default = + pkgs.runCommand "hx" + { + buildInputs = [ pkgs.makeWrapper ]; + } + '' + mkdir $out + ln -s ${pkgs.helix}/* $out + rm $out/bin - rm $out/lib - mkdir -p $out/lib/runtime - ln -s ${pkgs.helix}/lib/runtime/* $out/lib/runtime + rm $out/lib + mkdir -p $out/lib/runtime + ln -s ${pkgs.helix}/lib/runtime/* $out/lib/runtime - rm $out/lib/runtime/grammars - mkdir $out/lib/runtime/grammars - ln -s ${pkgs.helix}/lib/runtime/grammars/* $out/lib/runtime/grammars - ${builtins.concatStringsSep "\n" grammarLinks} + rm $out/lib/runtime/grammars + mkdir $out/lib/runtime/grammars + ln -s ${pkgs.helix}/lib/runtime/grammars/* $out/lib/runtime/grammars + ${builtins.concatStringsSep "\n" grammarLinks} - rm $out/lib/runtime/queries - mkdir $out/lib/runtime/queries - ln -s ${pkgs.helix}/lib/runtime/queries/* $out/lib/runtime/queries - ${builtins.concatStringsSep "\n" queryLinks} + rm $out/lib/runtime/queries + mkdir $out/lib/runtime/queries + ln -s ${pkgs.helix}/lib/runtime/queries/* $out/lib/runtime/queries + ${builtins.concatStringsSep "\n" queryLinks} - mkdir -p $out/home/helix/themes - ln -s ${configFile} $out/home/helix/config.toml - ln -s ${languageFile} $out/home/helix/languages.toml - ${builtins.concatStringsSep "\n" themeLinks} + mkdir -p $out/home/helix/themes + ln -s ${configFile} $out/home/helix/config.toml + ln -s ${languageFile} $out/home/helix/languages.toml + ${builtins.concatStringsSep "\n" themeLinks} - mkdir -p $out/home/git - ln -s ${ignoreFile} $out/home/git/ignore + mkdir -p $out/home/git + ln -s ${ignoreFile} $out/home/git/ignore - makeWrapper ${pkgs.helix}/bin/hx $out/bin/hx --set HELIX_RUNTIME $out/lib/runtime --set XDG_CONFIG_HOME $out/home - ''; - }; + makeWrapper ${pkgs.helix}/bin/hx $out/bin/hx --set HELIX_RUNTIME $out/lib/runtime --set XDG_CONFIG_HOME $out/home + ''; + }; }