dotfiles/templates/website/flake.nix
2025-11-24 19:29:09 -06:00

97 lines
2.7 KiB
Nix
Executable file

{
description = "Website Environment";
inputs = {
flake-parts.url = "github:hercules-ci/flake-parts";
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-24.05";
treefmt-nix.url = "github:numtide/treefmt-nix";
mkElmDerivation.url = "github:jeslie0/mkElmDerivation";
};
outputs =
inputs:
inputs.flake-parts.lib.mkFlake { inherit inputs; } {
imports = [ inputs.treefmt-nix.flakeModule ];
perSystem =
{ pkgs, lib, ... }:
let
hp = pkgs.haskellPackages;
backend = hp.callCabal2nix "backend" ./backend { };
in
{
devShells.default = hp.shellFor {
nativeBuildInputs = builtins.attrValues {
inherit (pkgs)
nil
stylish-haskell
ghc
vscode-langservers-extracted
nixfmt-rfc-style
;
inherit (hp)
cabal-install
cabal-gild
haskell-language-server
hlint
fourmolu
;
inherit (inputs.nixpkgs-stable.legacyPackages.${pkgs.stdenv.hostPlatform.system}.elmPackages)
elm
elm-format
elm-land
elm-language-server
elm-review
elm-test
;
};
packages = _: [ backend ];
};
packages =
let
pkgs' = pkgs.extend inputs.mkElmDerivation.overlays.mkElmDerivation;
in
{
websiteBackend = backend;
websiteFrontend = pkgs'.mkElmDerivation {
name = "website";
src = ./frontend;
nativeBuildInputs = builtins.attrValues {
inherit (inputs.nixpkgs-stable.legacyPackages.${pkgs.stdenv.hostPlatform.system}.elmPackages)
elm
elm-land
;
};
buildPhase = ''
${lib.getExe pkgs'.elm-land} build
'';
installPhase = ''
mkdir -p "$out"
cp -r dist/* "$out/"
'';
};
};
treefmt = {
programs = {
cabal-fmt.enable = true;
deadnix.enable = true;
hlint.enable = true;
nixfmt.enable = true;
fourmolu.enable = true;
statix.enable = true;
typstyle.enable = true;
yamlfmt.enable = true;
};
backendRootFile = "flake.nix";
};
};
systems = [ "x86_64-linux" ];
};
}