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. 참고
- NixOS Wiki - NixOS Wiki
- Preface - Nix Pills
- Nix on macOS · GitHub
- How I use Nix on macOS | Fatih's Personal Blog
- ‘순수 함수형’ 패키지 관리자 Nix 맛보기 | The Sapzil
- My first steps with Nix on Mac OSX as Homebrew replacement - Posts - Blog - W…
- NixOS & Flakes Book | Home Page
- Zero to Nix
- Welcome to nix.dev — nix.dev documentation
- GitHub - sudosubin/nixos-config: Personal nix files, installs some dotfiles a…
- 슬기롭게 dotfiles 관리하기. Shell Script와 Ansible Playbook을 사용하다가… | by sudosubin | M…
- PyCon KR 2023 Python 개발자를 위한 Nix 김수빈 - YouTube