~magic_rb/website

d704b7a023beb3c181da4af0224ff1b81bde7eb1 — magic_rb 4 months ago 033a14f
Fixup `flake.nix`

Signed-off-by: magic_rb <richard@brezak.sk>
1 files changed, 220 insertions(+), 169 deletions(-)

M flake.nix
M flake.nix => flake.nix +220 -169
@@ 2,189 2,240 @@
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs?ref=nixos-unstable";

    org-thtml = { url = "github:MagicRB/org-thtml"; flake = false; };
    emacs-htmlize = { url = "github:hniksic/emacs-htmlize"; flake = false; };
    modus-themes = { url = "github:protesilaos/modus-themes"; flake = false; };
    web-mode = { url = "github:fxbois/web-mode"; flake = false; };
    hcl-mode = { url = "github:purcell/emacs-hcl-mode"; flake = false; };
    yaml-mode = { url = "github:yoshiki/yaml-mode"; flake = false; };
    nix-mode = { url = "github:NixOS/nix-mode"; flake = false; };
    magit = { url = "github:magit/magit"; flake = false; };
    compat = { url = "github:emacs-straight/compat"; flake = false; };
    dash = { url = "github:magnars/dash.el"; flake = false; };
    s-el = { url = "github:magnars/s.el"; flake = false; };
    dockerfile-mode = { url = "github:spotify/dockerfile-mode"; flake = false; };
    org-special-block-extras = { url = "github:alhassy/org-special-block-extras"; flake = false; };
    lf = { url = "github:alhassy/lf"; flake = false; };
    org-thtml = {
      url = "github:MagicRB/org-thtml";
      flake = false;
    };
    emacs-htmlize = {
      url = "github:hniksic/emacs-htmlize";
      flake = false;
    };
    modus-themes = {
      url = "github:protesilaos/modus-themes";
      flake = false;
    };
    web-mode = {
      url = "github:fxbois/web-mode";
      flake = false;
    };
    hcl-mode = {
      url = "github:purcell/emacs-hcl-mode";
      flake = false;
    };
    yaml-mode = {
      url = "github:yoshiki/yaml-mode";
      flake = false;
    };
    nix-mode = {
      url = "github:NixOS/nix-mode";
      flake = false;
    };
    magit = {
      url = "github:magit/magit";
      flake = false;
    };
    compat = {
      url = "github:emacs-straight/compat";
      flake = false;
    };
    dash = {
      url = "github:magnars/dash.el";
      flake = false;
    };
    s-el = {
      url = "github:magnars/s.el";
      flake = false;
    };
    dockerfile-mode = {
      url = "github:spotify/dockerfile-mode";
      flake = false;
    };
    org-special-block-extras = {
      url = "github:alhassy/org-special-block-extras";
      flake = false;
    };
    lf = {
      url = "github:alhassy/lf";
      flake = false;
    };
  };

  outputs = { self
            , nixpkgs
            , nixng
            , org-thtml
            , emacs-htmlize
            , modus-themes
            , web-mode
            , hcl-mode
            , yaml-mode
            , nix-mode
            , magit
            , compat
            , dash
            , s-el
            , dockerfile-mode
            , org-special-block-extras
            , lf
            , ...
            }@inputs:
    let
      inherit (nixpkgs.lib)
        genAttrs
        concatMapStringsSep;

      supportedSystems = [ "x86_64-linux" "i686-linux" "aarch64-linux" ];
      forAllSystems = f: genAttrs supportedSystems (system: f system);
      packages = [
        "modus-themes"
        "org-thtml"
        "emacs-htmlize"
        "magit"
        "web-mode"
        "hcl-mode"
        "yaml-mode"
        "nix-mode"
        "compat"
        "dash"
        "s-el"
        "dockerfile-mode"
        "org-special-block-extras"
        "lf"
      ];
      loadPackages = pkgs:
        pkgs.writeText "packages.el"
          ((concatMapStringsSep "\n" (x: ''
  outputs = {
    self,
    nixpkgs,
    nixng,
    org-thtml,
    emacs-htmlize,
    modus-themes,
    web-mode,
    hcl-mode,
    yaml-mode,
    nix-mode,
    magit,
    compat,
    dash,
    s-el,
    dockerfile-mode,
    org-special-block-extras,
    lf,
    ...
  } @ inputs: let
    inherit
      (nixpkgs.lib)
      genAttrs
      concatMapStringsSep
      fix
      getExe
      ;

    supportedSystems = ["x86_64-linux" "i686-linux" "aarch64-linux"];
    forAllSystems = f: genAttrs supportedSystems (system: f system);
    packages = [
      "modus-themes"
      "org-thtml"
      "emacs-htmlize"
      "magit"
      "web-mode"
      "hcl-mode"
      "yaml-mode"
      "nix-mode"
      "compat"
      "dash"
      "s-el"
      "dockerfile-mode"
      "org-special-block-extras"
      "lf"
    ];
    loadPackages = pkgs:
      pkgs.writeText "packages.el"
      ((concatMapStringsSep "\n" (x: ''
            (if (file-exists-p "${inputs.${x}}/lisp")
                (add-to-list 'load-path "${inputs.${x}}/lisp")
              (add-to-list 'load-path "${inputs.${x}}"))
          '') packages)
          +
          "\n"
          +
          (concatMapStringsSep "\n" (x: ''
          '')
          packages)
        + "\n"
        + (concatMapStringsSep "\n" (x: ''
            (when (string-match-p "^.*-mode$" "${x}")
              (require '${x}))
          '') packages));
      site = pkgs: which:
        pkgs.stdenv.mkDerivation {
            name = which;
            version = "0.1";
            src = ./.;
            nativeBuildInputs = [ pkgs.utillinux pkgs.emacs ];
          '')
          packages));
    site = pkgs: which:
      pkgs.stdenv.mkDerivation {
        name = which;
        version = "0.1";
        src = ./.;
        nativeBuildInputs = [pkgs.utillinux pkgs.emacs];

            # xvfb-run -s '-screen 0 800x600x24' make test
            buildPhase = ''
              export TMPDIR="$(mktemp -d)" HOME=$(pwd)/tmp
              emacs -nw --fg-daemon --debug-init &
        # xvfb-run -s '-screen 0 800x600x24' make test
        buildPhase = ''
          export TMPDIR="$(mktemp -d)" HOME=$(pwd)/tmp
          emacs -nw --fg-daemon --debug-init &

              timeout 10 bash -c 'until [ -e $TMPDIR/emacs$(id -u) ] ; do sleep 0.1 ; done'
          timeout 10 bash -c 'until [ -e $TMPDIR/emacs$(id -u) ] ; do sleep 0.1 ; done'

              emacsclient -e $'(load-file "${loadPackages pkgs}")'
          emacsclient -e $'(load-file "${loadPackages pkgs}")'

              emacsclient -e $'(add-to-list \'load-path "'"$(pwd)"'/lisp")'
          emacsclient -e $'(add-to-list \'load-path "'"$(pwd)"'/lisp")'

              emacsclient -e '(load-file "./make.el")'
              emacsclient -e '(magic_rb/publish-website "${which}")'
              emacsclient -e '(kill-emacs)'
          emacsclient -e '(load-file "./make.el")'
          emacsclient -e '(magic_rb/publish-website "${which}")'
          emacsclient -e '(kill-emacs)'

              find public_html -name 'sitemap.*' -exec rm {} \;
            '';
          find public_html -name 'sitemap.*' -exec rm {} \;
        '';

            installPhase = ''
              mkdir -p  $out
              cp -r public_html/* $out
        installPhase = ''
          mkdir -p  $out
          cp -r public_html/* $out
        '';
      };
  in {
    apps = forAllSystems (
      system: let
        pkgs = import nixpkgs {inherit system;};
      in {
        live-server = {
          type = "app";
          program = toString (pkgs.writeShellScript "live-server.sh" ''
            nix build .#
            ${getExe pkgs.nodePackages.live-server} result/redalder "$@"
          '');
        };

        generateCSS = let
          script =
            pkgs.writeText "init.el"
            ''
              (load-file "${loadPackages pkgs}")

              (require 'org)
              (require 'ox)
              (require 'ox-html)
              (require 'modus-themes)

              (defface modus-themes-cyan-subtle
                '((t :inherit modus-themes-subtle-cyan))
                "")

              (load-theme 'modus-vivendi t nil)

              (org-html-htmlize-generate-css)
              (with-current-buffer "*html*"
                (write-file (getenv "OUTFILE")))

              (kill-emacs)
            '';
          };
    in
      {
        redalder = forAllSystems (system:
          let
            pkgs = import nixpkgs { inherit system; };
          in
            site pkgs "redalder.org"
        );

        nixng = forAllSystems (system:
          let
            pkgs = import nixpkgs { inherit system; };
          in
            site pkgs "nixng.org"
        );

        website = forAllSystems (system:
          let
            pkgs = import nixpkgs { inherit system; };
          in
            pkgs.runCommandNoCC "website" {}
              ''
                mkdir -p $out/
                ln -s ${self.redalder.${system}} $out/redalder
                ln -s ${self.nixng.${system}} $out/nixng
              ''
        );

        generateCss = forAllSystems (system:
          let
            pkgs = import nixpkgs { inherit system; };

            script = pkgs.writeText "init.el"
              ''
                (load-file "${loadPackages pkgs}")

                (require 'org)
                (require 'ox)
                (require 'ox-html)
                (require 'modus-themes)

                (defface modus-themes-cyan-subtle
                  '((t :inherit modus-themes-subtle-cyan))
                  "")

                (load-theme 'modus-vivendi t nil)

                (org-html-htmlize-generate-css)
                (with-current-buffer "*html*"
                  (write-file (getenv "OUTFILE")))

                (kill-emacs)
              '';
          in
        in {
          type = "app";
          program = toString (
            pkgs.writeShellScript "generate-css"
              ''
                export PATH=$PATH:${pkgs.emacs}/bin

                export OUTFILE="$(mktemp)" TMPDIR="$(mktemp -d)" HOME=$TMPDIR
                emacs -l ${builtins.trace "modus: ${modus-themes}" script} --debug-init

                mv $OUTFILE ./assets/css/org.css

                rm -r $TMPDIR
              ''
        );

        defaultPackage = forAllSystems (system:
          self.website.${system}
        );

        devShells = forAllSystems (system:
          let pkgs = import nixpkgs { inherit system; };
          in
          {
            default = pkgs.mkShell {
              nativeBuildInputs = with pkgs; [
                httplz
              ];
            };
          }
        );
      };
            ''
              export PATH=$PATH:${pkgs.emacs}/bin

              export OUTFILE="$(mktemp)" TMPDIR="$(mktemp -d)" HOME=$TMPDIR
              emacs -l ${builtins.trace "modus: ${modus-themes}" script} --debug-init

              mv $OUTFILE ./assets/css/org.css

              rm -r $TMPDIR
            ''
          );
        };
      }
    );

    packages = forAllSystems (
      system: let
        pkgs = import nixpkgs {inherit system;};
      in
        fix (this: {
          redalder = site pkgs "redalder.org";
          nixng = site pkgs "nixng.org";

          website =
            pkgs.runCommandNoCC "website" {}
            ''
              mkdir -p $out/
              ln -s ${this.redalder} $out/redalder
              ln -s ${this.nixng} $out/nixng
            '';

          default = this.website;
        })
    );

    devShells = forAllSystems (
      system: let
        pkgs = import nixpkgs {inherit system;};
      in {
        default = pkgs.mkShell {
          nativeBuildInputs = with pkgs; [
            httplz
            alejandra
          ];
        };
      }
    );
  };
}