Commit Graph

80 Commits

Author SHA1 Message Date
9c4ffe2b9e Don't substitute flake checks
Querying caches is slow and these are unlikely to be found on a cache.
2025-04-22 19:23:59 -07:00
836107752b Format whole flake when fmt has no args
Now that Nix/Lix do not pass `.` by default for `nix fmt` we can take
`nix fmt` without an arg to mean to format the entire flake.
2025-01-26 20:32:19 -08:00
eedc71d648 Support nix 2.25 in formatter
Nix 2.25 changes the args passed to the formatter, so we now need to
handle an empty args.

See https://github.com/NixOS/nix/pull/11438
2025-01-15 10:12:59 -08:00
1af817b598 Add workaround for prettier bug
prettier creates a node_modules folder when formatting some files, which
it should not as cache is not enabled. Setting the cache to a file works
around this.

See https://github.com/prettier/prettier/issues/13032
2024-11-27 00:43:44 -08:00
aaf1441ff7 Add hardeningDisable to devShell module 2024-10-30 21:52:12 -07:00
a1e3b8bc3e Make all _module.args available in moduleArgs 2024-08-03 11:20:29 -07:00
32bf894a50 Allow packages values to depend on system 2024-06-29 16:37:49 -07:00
fb530e878f Propagate nixpkgs.config to NixOS and HM 2024-04-06 18:05:28 -07:00
c70ffe0ddd Check HM useGlobalPkgs before propagating
The NixOS home-manager module only uses nixpkgs settings if
useGlobalPkgs is false. If it is true, there is no need to propagate
config (and propagating nixpkgs.config would cause an assertion).
2024-04-06 17:54:52 -07:00
3a364f9cdd Remove checking of meta.platforms
Previously, meta.platforms would be checked for each package when
generating package attributes for a system, so that unsupported packages
would not have an output attribute. This commit removes that behavior.

Now `nix flake show` will succeed even if packages fail to evaluate on
other platforms. `nix flake show --all-systems` will still fail though.
2024-03-24 14:23:41 -07:00
fe5916eb40 Use submoduleWith instead of submodule
This results in not enabling shorthandOnlyDefinesConfig, allowing
imports to be set in submodules. This can, for example, allow a devShell
to import another devShell's config to extend it.
2024-03-21 04:12:42 -07:00
cecfafe9a4 Set defaults for inputs from flake.lock
If the `src` passed to flakelight contains a flake.lock, it will now be
read and used to set defaults for `inputs`. Explicitly passed inputs
will override this.
2024-03-10 19:26:37 -07:00
360fd2099d Allow devShells to be directly set to derivations 2024-02-25 18:44:31 -08:00
610cc3b0c4 Refactor checks to use types 2024-02-24 21:31:24 -08:00
e72626b0a9 Allow apps to be scripts
This enables setting the app to arbitrary bash scripts which will be
written to a store path and used for the app's program attr.
2024-02-24 21:31:24 -08:00
41ec64361f Allow using optFunctionTo on types with submodules 2024-02-24 21:31:24 -08:00
3304eb3746 Nix now requires app programs to be paths in store 2024-02-24 21:31:24 -08:00
bac4759bcb Refactor apps to use types 2024-02-24 21:31:24 -08:00
efcf01325b Enable faster building of formatter
Since the formatter always depended on devShell packages, building the
formatter involved building all the devShell packages, which can be
slow.

In the case where formatters are set to plain strings, such as
"nixpkgs-fmt", depending on the devShell packages is necessary in order
to put the formatting utility on the path. But when a formatters option
is set to an package, such as "${pkgs.nixpkgs-fmt}/bin/nixpkgs-fmt",
then that formatter option does not depend on the devShell packages.

Flakelight now detects if any of the configured formatters are using the
first form, and only if so does it add the devShell packages dependency.
This allows the first form to still work, without incurring a cost for
flakes that only use the second form.

Users can use the second form for all formatters options if they wish to
not build the devShell packages when using the formatter.
2024-02-19 02:35:16 -08:00
981e22f851 Fix usage of devShell packages in formatters
Formatters should have the packages from devShell.packages, though a
regression caused PATH to not be set in the formatter. This fixes that
issue.
2024-02-19 02:03:21 -08:00
db9da2b1f7 Use mkDefault for default formatters
This enables easier overriding of formatting defaults.
2024-02-19 00:12:26 -08:00
6920686f25 Include default package in devShell.inputsFrom
A user whose flake only has a package would expect it to be used when
running `nix develop`. But since theres probably an automatically
created devShell, the package's deps will not be available in the shell.
If a default package exists, it makes sense for its deps to be available
by default in the default devShell.
2024-02-11 18:09:55 -08:00
a50fbcba1a Allow all of devShells config types in devShells
`devShell` accepted either a package def, a submodule value, or a
function to a submodule value. `devShells` only accepted package defs.
This brings all the options of `devShells` to any devShell configured
with `devShells`.
2024-02-07 01:49:29 -08:00
543e3aaa4d Replace nixpkgs nullOr type with custom type
`nullOr`'s merge function requires definitions to all be null or all be
non-null. It was being used where the intent was that null be used as a
value representing unset, and as such the merge should return null if
all definitions are null and ignore nulls otherwise. This adds a type
with that merge semantics.
2024-02-07 01:49:29 -08:00
9fe4cb1994 Enable devShell as a function to take packages
Before, devShell could be set to a submodule config, a package def, or a
function taking module args and returning a submodule config. This
changes the last form to take the package set instead.

This enables cleaner configuration by not needing each option to
individually be a function of pkgs. Passing pkgs also gives more
flexibility as all the module args are available under the `moduleArgs`
attr.

Code that relied on module args not directly in the package set will now
have to access them from the `moduleArgs` attr.
2024-02-07 01:49:29 -08:00
1fa95e0d84 Add support for configuring legacyPackages 2024-02-07 01:49:29 -08:00
787ce03070 Support package functions without named args 2024-01-16 11:01:32 -08:00
a90223da37 Remove use of different pkgs for calculating name
If a package uses `pkgs` and tries to get a non-existing package, there
will be an uncachable error. As we cannot control this, this method
needs to be removed. Instead of using this method, the mocked pkgs
should be extended to support more cases.
2024-01-16 10:55:57 -08:00
e143290511 Fix packages depending on pkg with same name
If a package depends on a package with same name, this causes an
infinite recursion as it tries to depend on itself. This is not likely
what was intended, and breaks ability to re-export packages, so instead
if a package depends on the same name, that now refers to the previous
version.
2024-01-16 10:48:48 -08:00
606ac6c1bb Allow templates to take moduleArgs 2024-01-15 02:53:17 -08:00
a4440382bb Allow nixDir auto-loads to set a value to null
Previously null was used when a value could not be loaded. This
prevented setting a value to null using a nixDir auto-load.

This change removes the use of null as a special value when loading from
nixDir, allowing it to be used as a normal value.
2024-01-15 01:07:55 -08:00
3b7188863d Deprecate autoImport lib function
As all options are now automatically used for nixDir, modules no longer
need to set up their own autoImports.
2024-01-15 00:26:05 -08:00
4e9f53ff4e Enable all options to be auto-loaded from nixDir
This removes the manual configuration of which options are auto-loaded.
Now all options are eligible except for "nixDir" and "_module" as those
would cause inf recursions.

Additionally, instead of setting name aliases in the nixDir module, a
config option is added, enabling other modules to extend the aliases
lists.
2024-01-15 00:07:59 -08:00
589ee5ba7a Make direct and auto-loaded configuration consistent
Many attributes can take moduleArgs when auto-loaded in order to
facilitate access to them from other files. Those same attributes could
not take moduleArgs when included directly, which was inconsistent.

With this change, all attributes that could take moduleArgs when
auto-loaded can now always do so. Auto-loading no longer needs special
cases.
2024-01-14 19:35:54 -08:00
bb0080c21c Fix inconsistency when setting outputs.__functor
This edge case was inconsistent between setting outputs directly and
auto-loading. Setting directly did not support args, so just merged
sets, thus resulting in a __functor flake output. When autoloading, a
set with a __functor attr was treated as a function and passed module
args.

To correct this inconsistency, outputs now always supports taking args,
and has the autoloading behavior.

Code that relied on previous behavior is easy to fix, as the value needs
to be converted to a function, which can then return the set with
__functor.
2024-01-14 19:22:46 -08:00
f2c32f5a42 Add optCallWith type for optional calling
optFunctionTo results in a function which needs to be called when using
the option value. This is needed when the argument is not known when
building types (such as with pkgs). When the args are known (for
example, moduleArgs), this leads to more complex code than just calling
the function and resulting in the target type. optCallWith does the
latter.
2024-01-14 19:22:46 -08:00
1d92662d82 Allow devShell to be a package def or take args
Previously, devShell was inconsistent when setting it to a function.
When setting directly, a function was assumed to be a package definition
and was used to set devShells.default directly. When auto-loading, a
function was assumed to take module args, and result in config (not a
derivation).

This now enables both behaviors in either case by detecting if a
function is a package definition or if it expects module args and
handling it accordingly.
2024-01-14 19:22:46 -08:00
5215a657bf Apply misc code cleanup 2024-01-14 12:59:39 -08:00
cc2f42fbdf Enable simpler config of nixos/home configurations
Instead of having to call the configuration generation functions, the
params can just be set, and the functions will be called automatically
with additional useful settings automatically set.
2024-01-14 02:19:34 -08:00
cf3a2e5496 Remove re-application check in propagationModule
Home-manager does not actually use it's pkgs argument for packages, so
the overlays will not be applied twice.
2024-01-14 00:34:35 -08:00
1b51df0be3 Add propogationModule feature
The `propagationModule` config option provides a module that can be used
to propagate flakelight configuration into other module systems such as
NixOS or home-manager.
2024-01-13 18:04:31 -08:00
6263b349c3 Fix text wrapping for import in core.nix 2024-01-12 01:26:49 -08:00
817f6775b6 Fix option type for formatter
Since formatters are system dependent, the formatter option must be a
function.
2024-01-12 01:26:03 -08:00
9099db6c84 Avoid evaluating packages twice
Previously, the packages outputs would be evalutated using callPackage
on the package set, but the package set already contains the package. If
another package depends on it, the dependency would be the version from
the package set. By grabbing the packages from the package set, each
package only needs to be evaluated once.
2024-01-12 00:45:22 -08:00
99d8fc8a85 Use mocked builders to get default pkg name faster
Since evaluating pkgs is expensive, this speeds up evaluation of flakes
with `packages.default` by attempting to get the name using a pkgs set
containing only mocked builders that just return the name.
2024-01-12 00:36:36 -08:00
4b9d78f35f Speed up extracting default package pname
In order to speed up evalutation of flakes setting `packages.default`,
this trys to compute the pname in multiple ways, ordered by speed. The
pname can be set manually, which is fastest. To avoid computing a new
nixpkgs and flakelight overlays, the second option just uses callPackage
from stock nixpkgs. If that fails, the prior, most accurate, method is
used which creates a new nixpkgs with all the overlays available.
2024-01-11 17:35:01 -08:00
82f9fe67c3 Improve performance of per-system attributes
Using `perSystem` to implement per-system attributes ties all the
per-system attributes together; all the `perSystem` functions must run
to determine output attrs. By generating them separately, the generation
can be done lazily.
2024-01-11 17:35:01 -08:00
bcaa85757e Add pkgsFor module arg
This enables modules to access packages given some system, outside of
per-system attributes.
2024-01-11 17:35:01 -08:00
0760edb005 Refactor autoloadArgs to moduleArgs
The set of args passed to modules is useful for more than just
autoloading. This renames it appropriately and makes it available
through pkgs arguments as well.
2024-01-11 17:35:01 -08:00
68a0941bbd Make default formatter not depend on devShell.packages 2023-12-05 22:54:01 -08:00