diff --git a/README.md b/README.md index 91f8b8a..ca0eab5 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ baseline level of compatibility: the core attributes that constitute a flake. - Reuse project logic written by others + # Getting Started diff --git a/dev/README.md b/dev/README.md index b5001c5..270517d 100644 --- a/dev/README.md +++ b/dev/README.md @@ -1,5 +1,5 @@ -# Separate `tools` flake +# Separate `dev` flake Wouldn't recommend this pattern normally, but I'm trying to keep deps low for `flake-parts` until we have split dev inputs diff --git a/dev/flake-module.nix b/dev/flake-module.nix index 95fdb63..ae227e5 100644 --- a/dev/flake-module.nix +++ b/dev/flake-module.nix @@ -3,8 +3,7 @@ { imports = [ inputs.pre-commit-hooks-nix.flakeModule - inputs.hercules-ci-effects.flakeModule - ../site/flake-module.nix + inputs.hercules-ci-effects.flakeModule # herculesCI attr ]; systems = [ "x86_64-linux" "aarch64-darwin" ]; perSystem = { config, self', inputs', pkgs, ... }: { @@ -13,10 +12,6 @@ nativeBuildInputs = [ pkgs.nixpkgs-fmt pkgs.pre-commit - pkgs.hci - pkgs.netlify-cli - pkgs.pandoc - pkgs.mdbook ]; shellHook = '' ${config.pre-commit.installationScript} @@ -31,19 +26,6 @@ }; }; - herculesCI = herculesCI@{ config, ... }: { - onPush.default.outputs = { - effects = - withSystem "x86_64-linux" ({ config, pkgs, hci-effects, ... }: { - netlifyDeploy = hci-effects.netlifyDeploy { - content = config.packages.siteContent; - secretName = "default-netlify"; - siteId = "29a153b1-3698-433c-bc73-62415efb8117"; - productionDeployment = herculesCI.config.repo.branch == "main"; - }; - }); - }; - }; flake = { # for repl exploration / debug config.config = config; diff --git a/site/.gitignore b/site/.gitignore deleted file mode 100644 index 7585238..0000000 --- a/site/.gitignore +++ /dev/null @@ -1 +0,0 @@ -book diff --git a/site/book.toml b/site/book.toml deleted file mode 100644 index fbede22..0000000 --- a/site/book.toml +++ /dev/null @@ -1,6 +0,0 @@ -[book] -authors = ["Robert Hensing", "Various module authors"] -language = "en" -multilingual = false -src = "src" -title = "flake-parts" diff --git a/site/flake-module.nix b/site/flake-module.nix deleted file mode 100644 index b5c43d9..0000000 --- a/site/flake-module.nix +++ /dev/null @@ -1,137 +0,0 @@ -{ inputs, ... }: { - perSystem = { config, self', inputs', pkgs, lib, ... }: - let - inherit (lib) filter any hasPrefix concatMap removePrefix; - - libNix = import ../lib.nix { inherit lib; }; - eval = libNix.evalFlakeModule { self = { inputs = { inherit (inputs) nixpkgs; }; }; } { - imports = [ - inputs.pre-commit-hooks-nix.flakeModule - inputs.hercules-ci-effects.flakeModule - inputs.haskell-flake.flakeModule - inputs.dream2nix.flakeModuleBeta - ]; - }; - opts = eval.options; - - filterTransformOptions = { sourceName, sourcePath, baseUrl }: - let sourcePathStr = toString sourcePath; - in - opt: - let - declarations = concatMap - (decl: - if hasPrefix sourcePathStr (toString decl) - then - let subpath = removePrefix sourcePathStr (toString decl); - in [{ url = baseUrl + subpath; name = sourceName + subpath; }] - else [ ] - ) - opt.declarations; - in - if declarations == [ ] - then opt // { visible = false; } - else opt // { inherit declarations; }; - - optionsDoc = { sourceName, baseUrl, sourcePath, title }: pkgs.runCommand "option-doc-${sourceName}" - { - nativeBuildInputs = [ pkgs.libxslt.bin pkgs.pandoc ]; - inputDoc = (pkgs.nixosOptionsDoc { - options = opts; - documentType = "none"; - transformOptions = filterTransformOptions { - inherit sourceName baseUrl sourcePath; - }; - warningsAreErrors = true; # not sure if feasible long term - markdownByDefault = true; - }).optionsDocBook; - inherit title; - } '' - xsltproc --stringparam title "$title" \ - -o options.db.xml ${./options.xsl} \ - "$inputDoc" - mkdir $out - pandoc --verbose --from docbook --to html options.db.xml >$out/options.md; - ''; - - repos = { - flake-parts = { - title = "Core Options"; - sourceName = "flake-parts"; - baseUrl = "https://github.com/hercules-ci/flake-parts/blob/main"; - sourcePath = ../.; - }; - pre-commit-hooks-nix = { - title = "pre-commit-hooks.nix"; - sourceName = "pre-commit-hooks.nix"; - baseUrl = "https://github.com/hercules-ci/pre-commit-hooks.nix/blob/flakeModule"; - sourcePath = inputs.pre-commit-hooks-nix; - }; - hercules-ci-effects = { - title = "hercules-ci-effects"; - sourceName = "hercules-ci-effects"; - baseUrl = "https://github.com/hercules-ci/hercules-ci-effects/blob/master"; - sourcePath = inputs.hercules-ci-effects; - }; - haskell-flake = { - title = "haskell-flake"; - sourceName = "haskell-flake"; - baseUrl = "https://github.com/srid/haskell-flake/blob/master"; - sourcePath = inputs.haskell-flake; - }; - dream2nix = { - title = "dream2nix beta"; - sourceName = "dream2nix"; - baseUrl = "https://github.com/nix-community/dream2nix/blob/master"; - sourcePath = inputs.dream2nix; - }; - }; - - generatedDocs = lib.mapAttrs (k: optionsDoc) repos; - generatedDocs' = lib.mapAttrs' (name: value: { name = "generated-docs-${name}"; inherit value; }) generatedDocs; - - in - { - packages = { - siteContent = pkgs.stdenvNoCC.mkDerivation { - name = "site"; - nativeBuildInputs = [ pkgs.mdbook ]; - src = ./.; - buildPhase = '' - runHook preBuild - - { - while read ln; do - case "$ln" in - *end_of_intro*) - break - ;; - *) - echo "$ln" - ;; - esac - done - cat src/intro-continued.md - } <${../README.md} >src/README.md - - mkdir -p src/options - ${lib.concatStringsSep "\n" - (lib.mapAttrsToList - (name: generated: '' - cp '${generated}/options.md' 'src/options/${name}.md' - '') - generatedDocs) - } - - mdbook build --dest-dir $out - - echo 'to the options' \ - >$out/options.html - - runHook postBuild - ''; - dontInstall = true; - }; - } // generatedDocs'; - }; -} diff --git a/site/options.xsl b/site/options.xsl deleted file mode 100644 index 830825d..0000000 --- a/site/options.xsl +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - <xsl:value-of select="$title"/> - - Overview: - - - - - - - -
- - <link xlink:href="#{db:term/@xml:id}" xml:id="{db:term/@xml:id}"><xsl:copy-of select="db:term/db:option"/></link> - - -
-
- - - - - - - - - - - - - - - - - - - - - - -
\ No newline at end of file diff --git a/site/src/SUMMARY.md b/site/src/SUMMARY.md deleted file mode 100644 index 712764d..0000000 --- a/site/src/SUMMARY.md +++ /dev/null @@ -1,13 +0,0 @@ -# Summary - -- [Introduction](./README.md) -- [Getting Started](./getting-started.md) -- [Working with `system`](./system.md) -- [Reference Documentation](./module-arguments.md) - - [Module Arguments](./module-arguments.md) - - [Options](./options/flake-parts.md) - - [Core `flake-parts`](./options/flake-parts.md) - - [`dream2nix beta`](./options/dream2nix.md) - - [`haskell-flake`](./options/haskell-flake.md) - - [`hercules-ci-effects`](./options/hercules-ci-effects.md) - - [`pre-commit-hooks.nix`](./options/pre-commit-hooks-nix.md) diff --git a/site/src/getting-started.md b/site/src/getting-started.md deleted file mode 100644 index 1cd713d..0000000 --- a/site/src/getting-started.md +++ /dev/null @@ -1,38 +0,0 @@ - -# Getting Started - -## New flake - -If your project does not have a flake yet: - -```console -nix flake init -t github:hercules-ci/flake-parts -``` - -## Existing flake - -Otherwise, add the input, - -``` - flake-parts.url = "github:hercules-ci/flake-parts"; -``` - -then slide `mkFlake` between your outputs function head and body, - -``` - outputs = { self, flake-parts, ... }: - flake-parts.lib.mkFlake { inherit self; } { - flake = { - # Put your original flake attributes here. - }; - systems = [ - # systems for which you want to build the `perSystem` attributes - "x86_64-linux" - # ... - ]; - perSystem = { config, ... }: { - }; - }; -``` - -Now you can start using the flake-parts options. diff --git a/site/src/intro-continued.md b/site/src/intro-continued.md deleted file mode 100644 index e398c97..0000000 --- a/site/src/intro-continued.md +++ /dev/null @@ -1,7 +0,0 @@ - - -# This documentation - -You can find guides and the options reference in the menu (top left). - -A site wide search is available by typing `s`. diff --git a/site/src/module-arguments.md b/site/src/module-arguments.md deleted file mode 100644 index 438305a..0000000 --- a/site/src/module-arguments.md +++ /dev/null @@ -1,58 +0,0 @@ - -# Module Arguments - -The module system allows modules and submodules to be defined using plain -attribute sets, or functions that return attribute sets. When a module is a -function, various attributes may be passed to it. - -# Top-level Module Arguments - -Top-level refers to the module passed to `mkFlake`, or any of the modules -imported into it using `imports`. - -The standard module system arguments are available in all modules and submodules. These are chiefly `config`, `options`, `lib`. - -## `getSystem` - -A function from [system](./system.md) string to the `config` of the appropriate `perSystem`. - -## `moduleWithSystem` - -A function that brings the `perSystem` module arguments. -This allows a module to reference the defining flake without introducing -global variables. - -```nix -{ moduleWithSystem, ... }: -{ - nixosModules.default = moduleWithSystem ( - perSystem@{ config }: # NOTE: only explicit params will be in perSystem - nixos@{ ... }: - { - services.foo.package = perSystem.config.packages.foo; - imports = [ ./nixos-foo.nix ]; - } - ); -} -``` - -## `withSystem` - -Enter the scope of a system. Worked example: - -```nix -{ withSystem, ... }: -{ - # perSystem = ...; - - nixosConfigurations.foo = withSystem "x86_64-linux" (ctx@{ pkgs, ... }: - pkgs.nixos ({ config, lib, packages, pkgs, ... }: { - _module.args.packages = ctx.config.packages; - imports = [ ./nixos-configuration.nix ]; - services.nginx.enable = true; - environment.systemPackages = [ - packages.hello - ]; - })); -} -``` diff --git a/site/src/system.md b/site/src/system.md deleted file mode 100644 index 64ed635..0000000 --- a/site/src/system.md +++ /dev/null @@ -1,20 +0,0 @@ - -# `system` - -In Nix, "system" generally refers to the cpu-os string, such as `"x86_64-linux"`. - -In Flakes specifically, these strings are used as attribute names, so that the -Nix CLI can find a derivation for the right platform. - -Many things, such as packages, can exist on multiple systems. For these, use -the [`perSystem`](options/flake-parts.html#opt-perSystem) submodule. - -Other things do not exist on multiple systems. Examples are the configuration -of a specific machine, or a the execution of a deployment. These are not -written in `perSystem`, but in other top-level options, or directly into the -flake outputs' top level (e.g. [`flake.nixosConfigurations`](options/flake-parts.html#opt-flake.nixosConfigurations)). - -Such top-level entities typically do need to read packages, etc that are defined -in `perSystem`. Instead of reading them from `config.flake.packages..`, -it may be more convenient to bring all `perSystem` definitions for a system into -scope, using [`withSystem`](module-arguments.html#withsystem).