flake: move packages to a by-name overlay

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a69642d9409f7d32e01a140cb62c2173b5226
This commit is contained in:
raf 2025-07-20 14:51:46 +03:00
commit 8dd53be910
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF
3 changed files with 108 additions and 72 deletions

View file

@ -9,29 +9,59 @@
lib,
...
}: let
inherit (lib.customisation) makeScope;
inherit (lib.attrsets) isDerivation isAttrs concatMapAttrs;
inherit (lib.strings) concatStringsSep;
inherit (lib.filesystem) packagesFromDirectoryRecursive;
# Entrypoint for nvf documentation and relevant packages.
docs = import ../docs {inherit pkgs inputs lib;};
# Helper function for creating demo configurations for nvf
# TODO: make this more generic.
buildPkg = maximal:
(args.config.flake.lib.nvim.neovimConfiguration {
inherit pkgs;
modules = [(import ../configuration.nix maximal)];
}).neovim;
in {
packages = {
blink-cmp = pkgs.callPackage ./blink {};
avante-nvim = let
pin = self.pins.avante-nvim;
in
pkgs.callPackage ./avante-nvim {
version = pin.branch;
src = pkgs.fetchFromGitHub {
inherit (pin.repository) owner repo;
rev = pin.revision;
sha256 = pin.hash;
};
pins = self.pins;
# This constructs a by-name overlay similar to the one found in Nixpkgs.
# The goal is to automatically discover and packages found in pkgs/by-name
# as long as they have a 'package.nix' in the package directory. We also
# pass 'inputs' and 'pins' to all packages in the 'callPackage' scope, therefore
# they are always available in the relevant 'package.nix' files.
# ---
# The logic is borrowed from drupol/pkgs-by-name-for-flake-parts, available
# under the MIT license.
flattenPkgs = separator: path: value:
if isDerivation value
then {
${concatStringsSep separator path} = value;
}
else if isAttrs value
then concatMapAttrs (name: flattenPkgs separator (path ++ [name])) value
else
# Ignore the functions which makeScope returns
{};
inputsScope = makeScope pkgs.newScope (_: {
inherit inputs;
inherit (self) pins;
});
scopeFromDirectory = directory:
packagesFromDirectoryRecursive {
inherit directory;
inherit (inputsScope) newScope callPackage;
};
legacyPackages = scopeFromDirectory ./pkgs/by-name;
in {
packages =
(flattenPkgs "/" [] legacyPackages)
// {
inherit (docs.manual) htmlOpenTool;
# Documentation
docs = docs.manual.html;
docs-html = docs.manual.html;

View file

@ -1,4 +1,5 @@
{
pins,
openssl,
pkg-config,
rustPlatform,
@ -6,11 +7,17 @@
vimUtils,
makeWrapper,
pkgs,
version,
src,
...
}: let
inherit version src;
# From npins
pin = pins.avante-nvim;
version = pin.branch;
src = pkgs.fetchFromGitHub {
inherit (pin.repository) owner repo;
rev = pin.revision;
sha256 = pin.hash;
};
avante-nvim-lib = rustPlatform.buildRustPackage {
pname = "avante-nvim-lib";
inherit version src;
@ -48,10 +55,9 @@ in
ext = stdenv.hostPlatform.extensions.sharedLibrary;
in ''
mkdir -p $out/build
ln -s ${avante-nvim-lib}/lib/libavante_repo_map${ext} $out/build/avante_repo_map${ext}
ln -s ${avante-nvim-lib}/lib/libavante_templates${ext} $out/build/avante_templates${ext}
ln -s ${avante-nvim-lib}/lib/libavante_tokenizers${ext} $out/build/avante_tokenizers${ext}
ln -s ${avante-nvim-lib}/lib/libavante_html2md${ext} $out/build/avante_html2md${ext}
for lib in avante_repo_map avante_templates avante_tokenizers avante_html2md; do
ln -s ${avante-nvim-lib}/lib/lib$lib${ext} $out/build/$$lib${ext}
done
'';
nvimSkipModules = [