flake.nix
outputs = inputs @ { self, nixos, nixos-unstable, nixpkgs-fork, home-manager, darwin, devenv, ... }:
let
inherit (lib) attrValues;
inherit (lib.my) mapModules mapModulesRec mapHosts;
여기서 lib는 /lib 의 defualt.nix에서 내보낸 것
https://nixos.wiki/wiki/NixOS_modules
flake를 공부하기전에 nixosModules를 꼭 공부해야한다…
config
없으면 직접 설정해도 알아서 config 아래로 들어간다. Nix 모듈 시스템이 최상위 속성셋을 자동으로 config로 처리한다.
fns
stdenv
Nix에서 패키지를 빌드할 때 필요한 기본적인 도구들(예: bash, coreutils, tar, 그리고 C 컴파일러인 gcc 등)을 모아놓은 환경입니다.
대부분의 소프트웨어는 C/C++로 작성되었거나 C 라이브러리에 의존하기 때문에 컴파일러가 포함된 stdenv가 기본적으로 사용됩니다
stdenvNoCC
는 이름에서 알 수 있듯이, stdenv에서 C 컴파일러(CC) 관련 도구 체인을 제외한 버전입니다.
pkgs.stdenvNoCC.mkDerivation {
...
}
mkDerivation
Nix에서 패키지를 빌드하는 방법을 정의하는 가장 기본적인 함수입니다.
“derivation”은 패키지를 빌드하기 위한 모든 정보(소스 코드, 의존성, 빌드 스크립트 등)를 담고 있는 일종의 “레시피”라고 할 수 있는데, mkDerivation이 바로 이 레시피를 만드는 역할을 합니다.
stdenv.mkDerivation rec {
pname = "hello";
version = "2.12.1";
src = fetchurl {
url = "mirror://gnu/hello/hello-${version}.tar.gz";
sha256 = "0ssi1wpaf7g933xfl6y4f8k218zmwk2x8glmjf86s28lbr2jblsq";
};
# 빌드에 필요한 의존성이 없다면 buildInputs는 생략 가능
}
빌드 단계(Phases): mkDerivation은 일반적으로 다음과 같은 표준 빌드 단계를 순서대로 실행합니다. 각 단계는 쉘 스크립트로 덮어쓸 수 있습니다.
- unpackPhase: src의 압축을 풉니다.
- patchPhase: 필요한 패치를 적용합니다.
- configurePhase: ./configure 스크립트를 실행합니다. (Autotools 기반 프로젝트)
- buildPhase: make 명령어를 실행하여 소스 코드를 컴파일합니다.
- checkPhase: make check 또는 make test를 실행하여 테스트를 수행합니다.
- installPhase: make install을 실행하여 빌드된 결과물을 $out 디렉터리에 설치합니다.