Bagaimana cara mengetahui paket file (tidak terinstal) milik NixOS?

13

Saya menggunakan manajer paket Nix di NixOS . Misalkan saya ingin menginstal paket yang menyediakan file libgtk-x11-2.0.so.0. Bagaimana cara menemukan paket yang menyediakan file ini, mirip dengan distribusi GNU / Linux lainnya ?

Saat ini saya harus mencari di Google file dan mencari tahu paket mana yang mungkin dimiliki dan menemukan paket yang sesuai pada repositori Nix, tapi saya ingin metode yang lebih idiomatis.

Mirzhan Irkegulov
sumber
1
Saya mendapatkan "setup database ctags ..." nixos.org/wiki/… sebelum menyerah.
mulai
Beberapa manajer paket (misalnya yumdan dnfdi RPMland) memungkinkan Anda untuk mengatakan "instal file", mereka mencari paket yang tepat dan menginstal yang itu.
vonbrand
2
Kami hanya memiliki ini untuk ATM yang dapat dieksekusi ( $ command-not-found foo). Perhatikan bahwa mencari file nix (misalnya dengan ctag) tidak akan membantu di sana. Anda harus melakukan build untuk menemukan apa yang diinstalnya.
Vladimír Čunát
Mengapa? Apakah manajer paket lain benar-benar memiliki fungsi seperti itu? Metode "idiomatik" lainnya adalah membaca INSTALLfile paket (yang ingin Anda buat lingkungannya), yaitu bagian Requirements/ Dependenciesuntuk paket-paket yang harus Anda instal sebelumnya. Kemudian cari paket di nixpkgs. (Dengan kata lain, manajer paket adalah tentang paket bukan file ...)
Andrew Miloradovsky
3
@AndrewMiloradovsky, karena kadang-kadang Anda tahu nama perintah (atau nama file lain) tetapi bukan nama paket yang menyediakannya. Dan ya, manajer paket lain memiliki fitur seperti, misalnya yum provides '*/bin/grep'atau dnf provides '*/bin/grepatau apt-file search 'fprintf.3.gz'.
maxschlepzig

Jawaban:

9

nix-index adalah yang Anda butuhkan.

Pasang dan bangun indeks:

nix-env -iA nixos.nix-index
nix-index

Temukan libgtk-x11-2.0.so.0:

nix-locate -w libgtk-x11-2.0.so.0

Keluaran:

(zed.out)                                             0 s /nix/store/bc4mngklj2j7hmm21jra4641x4pm9r8z-node-webkit-env/lib/libgtk-x11-2.0.so.0
(thrust.out)                                          0 s /nix/store/wzg0k4i2cy0qsm3hwxlywxxbga019hbq-env-thrust/lib/libgtk-x11-2.0.so.0
(nwjs_0_12.out)                                       0 s /nix/store/js6klvzjfi5q4djmwb0bqzfb4x0vzm6g-nwjs-env/lib/libgtk-x11-2.0.so.0
(node_webkit_0_11.out)                                0 s /nix/store/30vm6a7bmc56ckl575rqassw60ccxjpg-node-webkit-env/lib/libgtk-x11-2.0.so.0
(mumble_overlay.out)                                  0 s /nix/store/wayx023w1nslqg2z0c5v4n0b4jxn5n06-gtk+-2.24.31/lib/libgtk-x11-2.0.so.0
gnome2.gtk.out                                        0 s /nix/store/3iqchhncghm5s458lzy99c3prfymrnp2-gtk+-2.24.31/lib/libgtk-x11-2.0.so.0

Baris terakhir mengatakan bahwa paket gtk+-2.24.31dengan path atribut gnome2.gtkberisi file ini.

R. Taukulis
sumber
2

Melihat melalui dokumentasi itu sepertinya tidak ada cara mudah untuk melakukan ini.

Dengan distro berbasis yum Anda dapat melakukan yum provides $filedan dalam distro apt-get Anda dapat menginstal apt-file dan melakukan apt-file $filetetapi saya tidak dapat melihat yang setara di nix-env -q.

sysadmiral
sumber