1
0
Fork 0
mirror of https://github.com/NixOS/nix.dev.git synced 2024-10-18 14:32:43 -04:00
nix.dev/source/guides/faq.md
Daniel Ramírez cbf8083d55
Move "How do I add a new binary cache?" FAQ to Nix recipes (#833)
* Update the recipe on adding a binary cache

Co-authored-by: Valentin Gagarin <valentin.gagarin@tweag.io>
2024-05-14 22:32:44 +02:00

4.2 KiB

Frequently Asked Questions

Nix

How to operate between Nix paths and strings?

See the Nix reference manual on string interpolation and operators on paths and strings

How to build reverse dependencies of a package?

$ nix-shell -p nixpkgs-review --run "nixpkgs-review wip"

How can I manage dotfiles in $HOME with Nix?

See https://github.com/nix-community/home-manager

Please read .

How to use a clone of the Nixpkgs repository to update or write new packages?

Please read and the Nixpkgs contributing guide.

NixOS

How to run non-nix executables?

NixOS cannot run dynamically linked executables intended for generic Linux environments out of the box. This is because, by design, it does not have a global library path, nor does it follow the Filesystem Hierarchy Standard (FHS).

There are a few ways to resolve this mismatch in environment expectations:

  • Use the version packaged in Nixpkgs, if there is one. You can search available packages at https://search.nixos.org/packages.

  • Write a Nix expression for the program to package it in your own configuration.

    There are multiple approaches to this:

    • Build from source.

      Many open-source programs are highly flexible at compile time in terms of where their files go. For an introduction to this, see .

    • Modify the program's ELF header to include paths to libraries using autoPatchelfHook.

      Do this if building from source isn't feasible.

    • Wrap the program to run in an FHS-like environment using buildFHSEnv.

      This is a last resort, but sometimes necessary, for example if the program downloads and runs other executables.

  • Create a library path that only applies to unpackaged programs by using nix-ld. Add this to your configuration.nix:

      programs.nix-ld.enable = true;
      programs.nix-ld.libraries = with pkgs; [
        # Add any missing dynamic libraries for unpackaged programs
        # here, NOT in environment.systemPackages
      ];
    

    Then run nixos-rebuild switch, and log out and back in again to propagate the new environment variables. (This is only necessary when enabling nix-ld; changes in included libraries take effect immediately on rebuild.)

    :::{note} nix-ld does not work for 32-bit executables on x86_64 machines. :::

  • Run your program in the FHS-like environment made for the Steam package using steam-run:

    $ nix-shell -p steam-run --run "steam-run <command>"
    

How to build my own ISO?

See http://nixos.org/nixos/manual/index.html#sec-building-image

How do I connect to any of the machines in NixOS tests?

Apply following patch:

diff --git a/nixos/lib/test-driver/test-driver.pl b/nixos/lib/test-driver/test-driver.pl
index 8ad0d67..838fbdd 100644
--- a/nixos/lib/test-driver/test-driver.pl
+++ b/nixos/lib/test-driver/test-driver.pl
@@ -34,7 +34,7 @@ foreach my $vlan (split / /, $ENV{VLANS} || "") {
     if ($pid == 0) {
         dup2(fileno($pty->slave), 0);
         dup2(fileno($stdoutW), 1);
-        exec "vde_switch -s $socket" or _exit(1);
+        exec "vde_switch -tap tap0 -s $socket" or _exit(1);
     }
     close $stdoutW;
     print $pty "version\n";

And then the vde_switch network should be accessible locally.

How to bootstrap NixOS inside an existing Linux installation?

There are a couple of tools: