<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude"> <refmeta> <refentrytitle><command>nixos-generate-config</command> </refentrytitle><manvolnum>8</manvolnum> <refmiscinfo class="source">NixOS</refmiscinfo> <!-- <refmiscinfo class="version"><xi:include href="version.txt" parse="text"/></refmiscinfo> --> </refmeta> <refnamediv> <refname><command>nixos-generate-config</command></refname> <refpurpose>generate NixOS configuration modules</refpurpose> </refnamediv> <refsynopsisdiv> <cmdsynopsis> <command>nixos-generate-config</command> <arg> <option>--force</option> </arg> <arg> <arg choice='plain'> <option>--root</option> </arg> <replaceable>root</replaceable> </arg> <arg> <arg choice='plain'> <option>--dir</option> </arg> <replaceable>dir</replaceable> </arg> </cmdsynopsis> </refsynopsisdiv> <refsection> <title>Description</title> <para> This command writes two NixOS configuration modules: <variablelist> <varlistentry> <term> <option>/etc/nixos/hardware-configuration.nix</option> </term> <listitem> <para> This module sets NixOS configuration options based on your current hardware configuration. In particular, it sets the <option>fileSystem</option> option to reflect all currently mounted file systems, the <option>swapDevices</option> option to reflect active swap devices, and the <option>boot.initrd.*</option> options to ensure that the initial ramdisk contains any kernel modules necessary for mounting the root file system. </para> <para> If this file already exists, it is overwritten. Thus, you should not modify it manually. Rather, you should include it from your <filename>/etc/nixos/configuration.nix</filename>, and re-run <command>nixos-generate-config</command> to update it whenever your hardware configuration changes. </para> </listitem> </varlistentry> <varlistentry> <term> <option>/etc/nixos/configuration.nix</option> </term> <listitem> <para> This is the main NixOS system configuration module. If it already exists, it’s left unchanged. Otherwise, <command>nixos-generate-config</command> will write a template for you to customise. </para> </listitem> </varlistentry> </variablelist> </para> </refsection> <refsection> <title>Options</title> <para> This command accepts the following options: </para> <variablelist> <varlistentry> <term> <option>--root</option> </term> <listitem> <para> If this option is given, treat the directory <replaceable>root</replaceable> as the root of the file system. This means that configuration files will be written to <filename><replaceable>root</replaceable>/etc/nixos</filename>, and that any file systems outside of <replaceable>root</replaceable> are ignored for the purpose of generating the <option>fileSystems</option> option. </para> </listitem> </varlistentry> <varlistentry> <term> <option>--dir</option> </term> <listitem> <para> If this option is given, write the configuration files to the directory <replaceable>dir</replaceable> instead of <filename>/etc/nixos</filename>. </para> </listitem> </varlistentry> <varlistentry> <term> <option>--force</option> </term> <listitem> <para> Overwrite <filename>/etc/nixos/configuration.nix</filename> if it already exists. </para> </listitem> </varlistentry> <varlistentry> <term> <option>--no-filesystems</option> </term> <listitem> <para> Omit everything concerning file systems and swap devices from the hardware configuration. </para> </listitem> </varlistentry> <varlistentry> <term> <option>--show-hardware-config</option> </term> <listitem> <para> Don't generate <filename>configuration.nix</filename> or <filename>hardware-configuration.nix</filename> and print the hardware configuration to stdout only. </para> </listitem> </varlistentry> </variablelist> </refsection> <refsection> <title>Examples</title> <para> This command is typically used during NixOS installation to write initial configuration modules. For example, if you created and mounted the target file systems on <filename>/mnt</filename> and <filename>/mnt/boot</filename>, you would run: <screen> <prompt>$ </prompt>nixos-generate-config --root /mnt </screen> The resulting file <filename>/mnt/etc/nixos/hardware-configuration.nix</filename> might look like this: <programlisting> # Do not modify this file! It was generated by ‘nixos-generate-config’ # and may be overwritten by future invocations. Please make changes # to /etc/nixos/configuration.nix instead. { config, pkgs, ... }: { imports = [ <nixos/modules/installer/scan/not-detected.nix> ]; boot.initrd.availableKernelModules = [ "ehci_hcd" "ahci" ]; boot.kernelModules = [ "kvm-intel" ]; boot.extraModulePackages = [ ]; fileSystems."/" = { device = "/dev/disk/by-label/nixos"; fsType = "ext3"; options = [ "rw" "data=ordered" "relatime" ]; }; fileSystems."/boot" = { device = "/dev/sda1"; fsType = "ext3"; options = [ "rw" "errors=continue" "user_xattr" "acl" "barrier=1" "data=writeback" "relatime" ]; }; swapDevices = [ { device = "/dev/sda2"; } ]; nix.maxJobs = 8; } </programlisting> It will also create a basic <filename>/mnt/etc/nixos/configuration.nix</filename>, which you should edit to customise the logical configuration of your system. This file includes the result of the hardware scan as follows: <programlisting> imports = [ ./hardware-configuration.nix ]; </programlisting> </para> <para> After installation, if your hardware configuration changes, you can run: <screen> <prompt>$ </prompt>nixos-generate-config </screen> to update <filename>/etc/nixos/hardware-configuration.nix</filename>. Your <filename>/etc/nixos/configuration.nix</filename> will <emphasis>not</emphasis> be overwritten. </para> </refsection> </refentry>