parent
dafb2cf8ce
commit
f06b0d9c5b
10 changed files with 94 additions and 69 deletions
19
lib/default.nix
Normal file
19
lib/default.nix
Normal file
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
inputs ? {},
|
||||
pkgs ? {},
|
||||
}: let
|
||||
lock = builtins.fromJSON (builtins.readFile ../flake.lock);
|
||||
|
||||
lib = import "${builtins.fetchTarball {
|
||||
url = "https://github.com/NixOS/nixpkgs/archive/${lock.nodes.nixpkgs.locked.rev}.tar.gz";
|
||||
sha256 = lock.nodes.nixpkgs.locked.narHash;
|
||||
}}/lib";
|
||||
|
||||
inherit (lib) optionalAttrs;
|
||||
|
||||
mkVersion = src: "0.0.0+" + src.shortRev;
|
||||
in
|
||||
{inherit lib mkVersion;}
|
||||
// (import ./inputs.nix lib lock)
|
||||
// optionalAttrs (inputs != {}) (import ./flake-lib.nix inputs)
|
||||
// optionalAttrs (pkgs != {}) (import ./pkgs.nix pkgs mkVersion)
|
59
lib/flake-lib.nix
Normal file
59
lib/flake-lib.nix
Normal file
|
@ -0,0 +1,59 @@
|
|||
inputs: rec {
|
||||
# Import pkgs from a nixpkgs instance
|
||||
mkPkgs = system: nixpkgs:
|
||||
import nixpkgs {
|
||||
inherit system;
|
||||
config.allowUnfree = true;
|
||||
overlays =
|
||||
(map (i: inputs.${i}.overlays.default) [
|
||||
"discord-overlay"
|
||||
"grim-hyprland"
|
||||
"jovian"
|
||||
"nixpkgs-wayland"
|
||||
])
|
||||
++ [
|
||||
inputs.self.overlays.xdg-desktop-portal-kde
|
||||
];
|
||||
};
|
||||
|
||||
# Function that makes the attrs that make up the specialArgs
|
||||
mkArgs = system:
|
||||
inputs
|
||||
// {
|
||||
pkgs = mkPkgs system inputs.nixpkgs;
|
||||
};
|
||||
|
||||
# Default system
|
||||
mkNixOS = mods:
|
||||
inputs.nixpkgs.lib.nixosSystem rec {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = mkArgs system;
|
||||
modules =
|
||||
[
|
||||
{home-manager.extraSpecialArgs = specialArgs;}
|
||||
../common
|
||||
]
|
||||
++ mods;
|
||||
};
|
||||
|
||||
mkNixOnDroid = mods:
|
||||
inputs.nix-on-droid.lib.nixOnDroidConfiguration rec {
|
||||
extraSpecialArgs = mkArgs "aarch64-linux";
|
||||
home-manager-path = inputs.home-manager.outPath;
|
||||
pkgs = extraSpecialArgs.pkgs;
|
||||
|
||||
modules =
|
||||
[
|
||||
{
|
||||
options = with pkgs.lib; {
|
||||
environment.variables.FLAKE = mkOption {
|
||||
type = with types; nullOr str;
|
||||
};
|
||||
};
|
||||
}
|
||||
{home-manager = {inherit extraSpecialArgs;};}
|
||||
../common/nix-on-droid.nix
|
||||
]
|
||||
++ mods;
|
||||
};
|
||||
}
|
38
lib/inputs.nix
Normal file
38
lib/inputs.nix
Normal file
|
@ -0,0 +1,38 @@
|
|||
lib: lock: let
|
||||
inherit (lib) attrValues findFirst foldl' hasAttr matchAttrs optionalAttrs recursiveUpdate removeAttrs;
|
||||
|
||||
recursiveUpdateList = list: foldl' recursiveUpdate {} list;
|
||||
in rec {
|
||||
/**
|
||||
From an attrset, returns a flake input that has its type defaulted
|
||||
to `github` and has some of its inputs following this flake's input
|
||||
of the same name.
|
||||
|
||||
It gets information from the `flake.lock` file and can be used thanks
|
||||
to flakegen
|
||||
*/
|
||||
mkInput = {type ? "github", ...} @ info: let
|
||||
input =
|
||||
findFirst
|
||||
(x: matchAttrs (removeAttrs info ["inputs"]) (x.original or {})) {}
|
||||
(attrValues lock.nodes);
|
||||
|
||||
mkOverride = i:
|
||||
optionalAttrs
|
||||
(hasAttr i (input.inputs or {}))
|
||||
{inputs.${i}.follows = i;};
|
||||
in
|
||||
recursiveUpdateList [
|
||||
info
|
||||
{inherit type;}
|
||||
(mkOverride "systems")
|
||||
(mkOverride "flake-utils")
|
||||
(mkOverride "lib-aggregate")
|
||||
];
|
||||
|
||||
mkDep = info: mkInput (recursiveUpdate info {inputs.nixpkgs.follows = "nixpkgs";});
|
||||
|
||||
mkHyprDep = info: mkInput (recursiveUpdate info {inputs.hyprland.follows = "hyprland";});
|
||||
|
||||
mkSrc = info: mkInput (info // {flake = false;});
|
||||
}
|
24
lib/pkgs.nix
Normal file
24
lib/pkgs.nix
Normal file
|
@ -0,0 +1,24 @@
|
|||
pkgs: mkVersion: {
|
||||
buildPlugin = pname: src:
|
||||
pkgs.vimUtils.buildVimPlugin {
|
||||
inherit pname src;
|
||||
version = mkVersion src;
|
||||
};
|
||||
|
||||
buildNodeModules = dir: npmDepsHash: let
|
||||
pkg = pkgs.callPackage ({buildNpmPackage, ...}: let
|
||||
inherit (builtins) readFile fromJSON;
|
||||
|
||||
packageJSON = fromJSON (readFile (dir + /package.json));
|
||||
in
|
||||
buildNpmPackage {
|
||||
pname = packageJSON.name;
|
||||
inherit (packageJSON) version;
|
||||
|
||||
src = dir;
|
||||
|
||||
inherit npmDepsHash;
|
||||
dontNpmBuild = true;
|
||||
}) {};
|
||||
in "${pkg}/lib/node_modules/${pkg.pname}/node_modules";
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue