Cheatsheet: Difference between revisions

Frontear (talk | contribs)
change an unnecessarily complicated example and link to main cross compiling page, which I am going to overhaul.
Pigeon (talk | contribs)
m Using override with nix-build: Highlight shell commands containing nix expression as "console" instead of "nix": we do that in a few other places, so now everything's consistent + otherwise there are too many colors on one line. If you think this should be reverted, you will also need to turn on "nix" highlight in a few other places for consistency
 
(6 intermediate revisions by 3 users not shown)
Line 1: Line 1:
== A NixOS cheat sheet and comparison to Ubuntu ==
{{Merge|Nix (command line utilities)}}
[[Ubuntu_vs._NixOS|Ubuntu vs. NixOS]] provides a table mapping of common administrative tasks and their commands in Ubuntu to similar capabilities in NixOS.
 
This cheatsheet is a collection of handy snippets for working with a NixOS system.


== Working with the nix store ==
== Working with the nix store ==
Line 6: Line 7:
=== Get the store path for a package ===
=== Get the store path for a package ===


<syntaxHighlight lang="console">
<syntaxhighlight lang="console">
$ nix repl
$ nix repl
nix-repl> :l <nixpkgs>  
nix-repl> :l <nixpkgs>  
Line 15: Line 16:
nix-repl> :lf ./configuration.nix # as flakes way for a local file  
nix-repl> :lf ./configuration.nix # as flakes way for a local file  


# load nixos configuration from a nix file
$ # load nixos configuration from a nix file
$ nix repl --file '<nixpkgs/nixos>' -I nixos-config=./configuration.nix
$ nix repl --file '<nixpkgs/nixos>' -I nixos-config=./configuration.nix




$ nix-build '<nixpkgs>' --no-build-output -A xorg.libXtst
$ nix-build '<nixpkgs>' --no-out-link -A xorg.libXtst
/nix/store/nlpnx21yjdjx2ii7ln4kcmbm0x1vy7w9-libXtst-1.2.3
/nix/store/nlpnx21yjdjx2ii7ln4kcmbm0x1vy7w9-libXtst-1.2.3
</syntaxHighlight>
</syntaxhighlight>


==== Get store path for a package from the Flake input ====
==== Get store path for a package from the Flake input ====
When packages are managed using [[Flakes]], store paths to them can be retrieved using <code>nix eval --inputs-from</code>, like this:<syntaxhighlight lang="shell">
When packages are managed using [[Flakes]], store paths to them can be retrieved using <code>nix eval --inputs-from</code>, like this:<syntaxhighlight lang="console">
$ nix eval --inputs-from "$flake_path" --raw "$input#$package"
$ nix eval --inputs-from "$flake_path" --raw "$input#$package"
</syntaxhighlight>For instance, when packages are managed using [[Home Manager]] using standard configuration, store path to the [[Git]] package can be retrieved using this command:<syntaxhighlight lang="shell">
</syntaxhighlight>For instance, when packages are managed using [[Home Manager]] using standard configuration, store path to the [[Git]] package can be retrieved using this command:<syntaxhighlight lang="console">
$ nix eval --inputs-from ~/.config/home-manager --raw nixpkgs#git
$ nix eval --inputs-from ~/.config/home-manager --raw nixpkgs#git
</syntaxhighlight>
</syntaxhighlight>


=== Add files to the store ===
=== Add files to the store ===
{{Warning|Editing the Nix Store manually may cause undefined behaviour to occur in Nix's database. Avoid making manual changes to the store unless you are absolutely sure you know what you're doing.}}
It is sometimes necessary to add files to the store manually.
It is sometimes necessary to add files to the store manually.
This is particularly the case with packages that cannot be downloaded automatically,
This is particularly the case with packages that cannot be downloaded automatically,
Line 102: Line 104:
[ "/run/current-system/sw/bin/zsh" ... ]
[ "/run/current-system/sw/bin/zsh" ... ]


# Equivalently, if starting from an existing REPL:
$ # Equivalently, if starting from an existing REPL:
nix-repl> :l <nixpkgs/nixos>
nix-repl> :l <nixpkgs/nixos>
Added 6 variables.
Added 6 variables.
Line 218: Line 220:
To initiate the build environment run <code>nix-shell</code> in the project root directory
To initiate the build environment run <code>nix-shell</code> in the project root directory


<syntaxHighlight lang="console">
<syntaxhighlight lang="console">
# this will download add development dependencies and set up the environment so build tools will find them.
$ # this will download add development dependencies and set up the environment so build tools will find them.
$ nix-shell
$ nix-shell
</syntaxHighlight>
</syntaxhighlight>


The following is specific to bcc or cmake in general:
The following is specific to bcc or cmake in general:
(so you need to adapt the workflow depending on the project, you hack on)
(so you need to adapt the workflow depending on the project, you hack on)


<syntaxHighlight lang="console">
<syntaxhighlight lang="console">$ mkdir build
$ mkdir build
$ cd build
$ cd build
# cmakeFlags is also defined in the bcc package. autotools based projects might defined $configureFlags
$ # cmakeFlags is also defined in the bcc package. autotools based projects might defined $configureFlags
$ eval cmake $cmakeFlags ..
$ eval cmake $cmakeFlags ..
$ make
$ make</syntaxhighlight>
</syntaxHighlight>


=== Evaluate packages for a different platform ===
=== Evaluate packages for a different platform ===
Line 352: Line 352:


using channels
using channels
<syntaxhighlight lang="nix">
<syntaxhighlight lang="console">
nix-build -E 'with (import <nixpkgs>{}); polybar.override { i3Support = true; }'
$ nix-build -E 'with (import <nixpkgs>{}); polybar.override { i3Support = true; }'
</syntaxhighlight>
</syntaxhighlight>
using a local repo
using a local repo
<syntaxhighlight lang="nix">
<syntaxhighlight lang="console">
nix-build -E 'with (import ./default.nix{}); polybar.override { i3Support = true; }'
$ nix-build -E 'with (import ./default.nix{}); polybar.override { i3Support = true; }'
</syntaxhighlight>
</syntaxhighlight>