UP | HOME

Nix 써보기

Table of Contents

1. 목표

  • [ ] Nix로 brew를 대체해보자
  • [ ] Nix로 asdf-vm을 대체해보자
  • [ ] macOS와 linux의 설정을 통일해보자
  • [ ] 뭔가 테스트 할 때, 전역적으로 설치하지 않고 해보자
  • [ ] 프로젝트만 쓰는 의존성은 Nix로 분리하여 전역 환경은 깔끔하게 유지해보자

2.

brew가 multi-user가 아니라서 불편함을 겪은 일이 있었다. 온콜 업무를 소화해야하는 게임 서버/인프라 엔지니어라서 노트북을 항상 가지고 다녀야한다. 회사용과 개인용을 적절히 나누어서 쓰고 싶었는데, brew가 다중 사용자를 쓰기에 적합하지 않더라. 그래서 brew 말고 다른 패키지 매니저를 쓰고 싶다.

나는 일반 목적의 랩탑은 macOS를 쓰고 있지만, 서버는 리눅스가 더 익숙하다. 두 환경에서 세팅을 어느정도 공유하고 싶은데, 패키지 관리자를 통일하면 어느정도 달성할 수 있을 것 같다. 근데 brew로 통일하고 싶지 않다.

그 외에는 뭐 brew 불편함 없이 잘 쓰고 있어서 굳이 바꿀 필요는 없는데, 좋은 거 있다니까 궁금했다. nix 좋아하는 사람들은 nix를 시스템 패키지 매니저로 쓰고, 의존성도 관리하고, 언어 패키지 매니저로도 쓰고, 밥도 말아먹고, 나물도 비벼먹는데, 무슨 나물을 얼마나 넣었는지, 고추장은 뭘 넣었는지 nix 파일에 의존성을 기술해서 나중에 다른 시스템에 가서 똑같은 나물비빔밥을 해먹는 것을 보고 큰 관심이 생겼다.

3. 참고자료

일단 Zero to Nix를 읽어보자. “Nix를 들어는 봤지만 어디부터 시작해야할지 모르는 사람들”을 위해서 썼다고 한다.

4. 시작하기

https://nix.dev/manual/nix/2.24/installation/installing-binary

macOS 기준으로, 원샷 스크립트가 있어서 그냥 실행하면 된다. 멀티유저 용으로 잘 깔린다.

4.1. nix-command와 flake 켜기

nix command와 flake라는 게 유용해보이는데 아직 실험적 기능 상태라 쓸 수가 없다.

아래와 같이 설정하여 실험적 기능을 켠다.

mkdir -p ~/.config/nix
echo "experimental-features = nix-command flakes" >> ~/.config/nix/nix.conf

5. 개념

  • Nix 저장소(store)
  • Nix 언어
  • Nixpkgs
  • Nix flake

6. brew 대체하기

brew로 많이 하는 것들:

동작 brew nix
패키지 찾기 brew search nix search nixpkgs
패키지 보기 brew info nix show-derivation
패키지 설치하기 brew install nix profile install nixpkgs#
패키지 삭제하기 brew uninstall nix profile remove
설치한 패키지 목록 보기 brew list nix profile list
패키지를 업그레이드하기 brew upgrade nix profile upgrade
패키지 관리자를 업데이트하기 brew update nix flake update
공간 정리하기 brew cleanup nix store gc

7. Ad hoc 환경

ad hoc이란 “특정 목적을 위해”라는 라틴어 형용사이다.

nix-shell로 특정한 패키지가 설치된 환경을 실행할 수 있다.

# cowsay, lolcat이 설치된 셸 실행하기
nix-shell -p cowsay lolcat

# cowsay를 설치하고
nix-shell -p cowsay --run "cowsay Nix"
-p
어떤 패키지를 쓸지
--run
실행할 명령어
--pure
지정한 패키지 외에는 쓸 수 없도록 제약
-I
특정한 nixpkgs 버전을 지정.

무슨 패키지가 있는지는 https://search.nixos.org/packages 여기서 찾는듯

8. 셸 환경 기술하기

shell.nix를 기술하고 nix-shell을 실행하면 nix 파일에 기술한 대로 셸 환경이 갖추어진다.

9. 참고

Author: 안녕

Created: 2024-12-10 Tue 22:08