diff --git a/.github/workflows/sync-nix-options.yml b/.github/workflows/sync-nix-options.yml new file mode 100644 index 00000000..3e05f0e1 --- /dev/null +++ b/.github/workflows/sync-nix-options.yml @@ -0,0 +1,59 @@ +name: Sync Nix module options + +on: + push: + branches: [main] + paths: + - nix/hm-modules.nix + - nix/nixos-modules.nix + - nix/generate-options.nix + - flake.nix + - flake.lock + +concurrency: + group: sync-nix-options + cancel-in-progress: true + +jobs: + sync-nix-options: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - uses: cachix/install-nix-action@v30 + with: + extra_nix_config: | + experimental-features = nix-command flakes + + - name: Build options JSONs + run: | + HM_OUT=$(nix build .#hm-options-json --no-link --print-out-paths) + NIXOS_OUT=$(nix build .#nixos-options-json --no-link --print-out-paths) + cp "$HM_OUT/share/doc/nixos/options.json" /tmp/hm-options.json + cp "$NIXOS_OUT/share/doc/nixos/options.json" /tmp/nixos-options.json + + - name: Checkout website + uses: actions/checkout@v4 + with: + repository: mangowm/mangowm.github.io + path: website + token: ${{ secrets.WEBSITE_SYNC_TOKEN }} + fetch-depth: 1 + + - name: Copy JSONs to website + run: | + cp /tmp/hm-options.json website/apps/web/src/hm-options.json + cp /tmp/nixos-options.json website/apps/web/src/nixos-options.json + + - name: Commit and push + working-directory: website + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add apps/web/src/hm-options.json apps/web/src/nixos-options.json + git diff --staged --quiet || git commit \ + -m "nix: update module options JSON" \ + -m "${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }}" + git push diff --git a/.gitignore b/.gitignore index 7681f948..274cc4ee 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ /.cache /.vscode /result +/result-* config.h mango mango.o diff --git a/flake.nix b/flake.nix index b7158bbd..33b97c9b 100644 --- a/flake.nix +++ b/flake.nix @@ -43,6 +43,14 @@ }; packages = { inherit mango; + hm-options-json = pkgs.callPackage (import ./nix/generate-options.nix self) { + module = ./nix/hm-modules.nix; + optionPrefix = "wayland.windowManager.mango."; + }; + nixos-options-json = pkgs.callPackage (import ./nix/generate-options.nix self) { + module = ./nix/nixos-modules.nix; + optionPrefix = "programs.mango."; + }; }; devShells.default = mango.overrideAttrs shellOverride; formatter = pkgs.alejandra; diff --git a/nix/generate-options.nix b/nix/generate-options.nix new file mode 100644 index 00000000..c2b87a4f --- /dev/null +++ b/nix/generate-options.nix @@ -0,0 +1,28 @@ +self: +{ + pkgs, + lib ? pkgs.lib, + module, + optionPrefix, +}: +let + eval = lib.evalModules { + modules = [ + (import module self) + { _module.check = false; } + ]; + specialArgs = { inherit pkgs; }; + }; + + optionsDoc = pkgs.nixosOptionsDoc { + options = eval.options; + transformOptions = + opt: + opt + // { + visible = opt.visible && !opt.internal; + name = lib.removePrefix optionPrefix opt.name; + }; + }; +in +optionsDoc.optionsJSON diff --git a/nix/hm-modules.nix b/nix/hm-modules.nix index f00d9c68..f9a341a3 100644 --- a/nix/hm-modules.nix +++ b/nix/hm-modules.nix @@ -22,6 +22,7 @@ in enable = mkOption { type = types.bool; default = false; + description = "Whether to enable mangowm, a Wayland compositor based on dwl."; }; package = lib.mkOption { type = lib.types.package;