summaryrefslogtreecommitdiff
path: root/flake.nix
blob: 3a2e47455f1342edd2f51df908006073bf114db8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
{
  description = "Build my static site with my installer";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
    git-hooks = {
      url = "github:cachix/git-hooks.nix";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    hyprnixmacs.url = "git+file:./nix";
  };

  outputs = { nixpkgs, git-hooks, hyprnixmacs, self, ... }:
    let
      system = "x86_64-linux";
      pkgs = import nixpkgs { inherit system; };
      pre-commit-check = git-hooks.lib.${system}.run {
        src = ./.;
        hooks = {
          deadnix.enable = true;
          prevent-direct-main-commits = {
            enable = true;
            name = "Prevent direct commits to main";
            description = "Blocks commits to main unless they are merge commits";
            pass_filenames = false;
            entry = "${pkgs.writeShellScript "block-main-commits" ''
BRANCH=$(git branch --show-current)
GIT_DIR=$(git rev-parse --git-dir)
if [ "$BRANCH" = "main" ] && [ ! -f "$GIT_DIR/MERGE_HEAD" ]; then
  echo "Direct commits to 'main' are blocked."
  echo "Please commit to a feature branch and merge it into main."
  exit 1
fi
                ''}";
          };
        };
      };

      emacsPackages = import  "${hyprnixmacs}/modules/home/emacs-packages.nix";
      ci-emacs = pkgs.emacs-nox.pkgs.withPackages emacsPackages;
      website = pkgs.stdenv.mkDerivation {
        name = "org-publish-website";
        src = pkgs.lib.cleanSource ./.;
        buildInputs = [
          ci-emacs
          pkgs.git
        ];
        buildPhase = ''
export HOME=$TMPDIR/fake-home
mkdir -p $HOME/.emacs.d
mkdir -p public
ln -s "$(pwd)" $HOME/monorepo
emacs -Q --batch \
  --eval '(setq noninteractive t)' \
  --eval '(setq system-email "ci@dummy.local")' \
  --eval '(setq system-username "ci-runner")' \
  --eval '(setq system-fullname "CI Pipeline")' \
  --eval '(setq system-gpgkey "00000000")' \
  -l ${hyprnixmacs}/init.el \
  --eval '(org-publish-all t)'
          '';

        installPhase = ''
mkdir -p $out
cp -r public/* $out/
          '';
      };
    in
      {
        nixosConfigurations.installer = hyprnixmacs.nixosConfigurations.installer.extendModules {
          specialArgs = { monorepoSelf = self; };
        };

        checks."${system}" = {
          build-website = website;
        };

        packages."${system}" = {
          default = website;
          installer = self.nixosConfigurations.installer.config.system.build.isoImage;
        };
        devShells."${system}".default = with pkgs; mkShell {
          inherit (pre-commit-check) shellHook;
          buildInputs = [
            deadnix
          ];
        };
      };
}