Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: move function to lib and use joined lib attribute #10

Merged
merged 1 commit into from
Nov 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 13 additions & 69 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -24,81 +24,25 @@
user = "refnode";
flake = self;

supportedSystems = [
"x86_64-linux"
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
];

# Uses lib.genAttrs to generate a attribute set, in this case using
# the systems as defined in `supportedSystems` as names.
# https://nixos.org/manual/nixpkgs/stable/#function-library-lib.attrsets.genAttrs
# This is a partial function as it misses the function param to lib.genAttrs
forEachSystem = nixpkgs.lib.genAttrs supportedSystems;

# Taken from https://github.com/Misterio77/nix-config
#
# Let's break that down, because it's a nice example.
#
# Let's assume, the function is called as in the formatter output below:
# pkgsForEachSystem(pkgs: pkgs.alejandra)
#
# pkgsForEachSystem is a function takes a function `f` as argument.
# So `(pkgs: pkgs.alejandra)` is the function passed as argument.
#
# In the function body lib.genAttrs takes the list of supportedSystems
# and maps the list to an attribute set using the function
# (system: f pkgsFor.${system})
#
# Let's assume the iteration passes `x86_64-linux` as system.
# The function body `(system: f pkgsFor.${system})` then becomes
# (x86_64-linux: (pkgs: pkgs.alejandra) pkgsFor.x86_64-linux)

# The function `(pkgs: pkgs.alejandra)` gets `pkgsFor.x86_64-linux` as
# argument for `pkgs` and finally evaluates to pkgs.x86_64-linux.alejandra.
pkgsForEachSystem = f: nixpkgs.lib.genAttrs supportedSystems (system: f pkgsFor.${system});

# Rewriting the function, taking inspiration from
# https://github.com/Misterio77/nix-config
# Using lib.genAttrs to import nixpkgs provides a nice way to quick
# access or pass pkgs for a certain targetSystem by simply access eg.
# pkgsFor.x86_64-linux or pkgsFor.${system} as pkgsFor is finally an
# attribute set, with system keys referencing to nixpkgs for that
# system.
pkgsFor = nixpkgs.lib.genAttrs supportedSystems (
system:
import nixpkgs {
inherit system;
# overlays = [
# localOverlays
# ];
overlays = localOverlays;
# activate unfree when I know that I need it.
config.allowUnfree = false;
}
);

# add local scripts as derivations using an overlay
# could be also done by just passing additional args to the submodules
# using the overlay approach, the repo local derivations are addressable
# by pkgs.myderivation in the submodule
localOverlays = builtins.attrValues (
import ./overlays {inherit nixpkgs-unstable;}
);
lib =
nixpkgs.lib
// nix-darwin.lib
// home-manager.lib
// import ./lib {inherit inputs;};
in {
formatter = pkgsForEachSystem (pkgs: pkgs.alejandra);
inherit lib;
formatter = lib.refnode.pkgsForEachSystem (pkgs: pkgs.alejandra);

checks = forEachSystem (
checks = lib.refnode.forEachSystem (
system: let
pkgs = pkgsFor.${system};
pkgs = lib.refnode.pkgsFor.${system};
in
import ./checks {inherit pre-commit-hooks system;}
);

devShells = forEachSystem (
devShells = lib.refnode.forEachSystem (
system: let
pkgs = pkgsFor.${system};
pkgs = lib.refnode.pkgsFor.${system};
checks = self.checks.${system};
in {
default = import ./shell.nix {inherit pkgs checks;};
Expand All @@ -108,13 +52,13 @@
# Build darwin flake using:
# $ darwin-rebuild build --flake .#defiant
darwinConfigurations = {
defiant = nix-darwin.lib.darwinSystem {
defiant = lib.darwinSystem {
system = "aarch64-darwin";
modules = [./hosts/defiant];
specialArgs = {
inherit flake inputs;
system = "aarch64-darwin";
pkgs = pkgsFor.aarch64-darwin;
pkgs = lib.refnode.pkgsFor.aarch64-darwin;
};
};
};
Expand Down
70 changes: 69 additions & 1 deletion lib/default.nix
Original file line number Diff line number Diff line change
@@ -1,2 +1,70 @@
{...}: {
{inputs, ...}: let
nixpkgs = inputs.nixpkgs;
nixpkgs-unstable = inputs.nixpkgs-unstable;
in {
# put my functions into lib.refnode.XXX
refnode = rec {
supportedSystems = [
"x86_64-linux"
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
];

# Uses lib.genAttrs to generate a attribute set, in this case using
# the systems as defined in `supportedSystems` as names.
# https://nixos.org/manual/nixpkgs/stable/#function-library-lib.attrsets.genAttrs
# This is a partial function as it misses the function param to lib.genAttrs
forEachSystem = nixpkgs.lib.genAttrs supportedSystems;

# Taken from https://github.com/Misterio77/nix-config
#
# Let's break that down, because it's a nice example.
#
# Let's assume, the function is called as in the formatter output below:
# pkgsForEachSystem(pkgs: pkgs.alejandra)
#
# pkgsForEachSystem is a function takes a function `f` as argument.
# So `(pkgs: pkgs.alejandra)` is the function passed as argument.
#
# In the function body lib.genAttrs takes the list of supportedSystems
# and maps the list to an attribute set using the function
# (system: f pkgsFor.${system})
#
# Let's assume the iteration passes `x86_64-linux` as system.
# The function body `(system: f pkgsFor.${system})` then becomes
# (x86_64-linux: (pkgs: pkgs.alejandra) pkgsFor.x86_64-linux)

# The function `(pkgs: pkgs.alejandra)` gets `pkgsFor.x86_64-linux` as
# argument for `pkgs` and finally evaluates to pkgs.x86_64-linux.alejandra.
pkgsForEachSystem = f: nixpkgs.lib.genAttrs supportedSystems (system: f pkgsFor.${system});

# Rewriting the function, taking inspiration from
# https://github.com/Misterio77/nix-config
# Using lib.genAttrs to import nixpkgs provides a nice way to quick
# access or pass pkgs for a certain targetSystem by simply access eg.
# pkgsFor.x86_64-linux or pkgsFor.${system} as pkgsFor is finally an
# attribute set, with system keys referencing to nixpkgs for that
# system.
pkgsFor = nixpkgs.lib.genAttrs supportedSystems (
system:
import nixpkgs {
inherit system;
# overlays = [
# localOverlays
# ];
overlays = localOverlays;
# activate unfree when I know that I need it.
config.allowUnfree = false;
}
);

# add local scripts as derivations using an overlay
# could be also done by just passing additional args to the submodules
# using the overlay approach, the repo local derivations are addressable
# by pkgs.myderivation in the submodule
localOverlays = builtins.attrValues (
import ../overlays {inherit nixpkgs-unstable;}
);
};
}