How to Use the Command 'nixos-option' (with examples)
- Linux
- December 17, 2024
The nixos-option
command is an essential utility in the NixOS operating system, designed to inspect various configurations of the system efficiently. It provides a simple interface to query and explore the state of the system’s options, which are managed declaratively in NixOS. The flexibility and power of nixos-option
come from its ability to display detailed information about specific configuration options, helping users understand and manage their system’s environment better. This command is especially useful for system administrators and NixOS users who need to manipulate their configuration settings or validate the current configuration state effectively.
Use case 1: List all subkeys of a given option key
Code:
nixos-option option_key
Motivation:
In any complex configuration system like NixOS, configuration settings are structured hierarchically. You may encounter scenarios where you need to dive deeper into specific settings to better understand the particular structure or sub-options available. Listing all subkeys of a given option key helps in navigating through these configurations effectively. This allows administrators to get a comprehensive view of the settings related to a particular feature or component without manually sifting through the potentially vast and complex configuration files.
Explanation:
option_key
: This is a placeholder for the specific option key you want to explore. In NixOS configurations, each option is arranged hierarchically, and passing an option key allows you to inspect the various levels beneath it. This is particularly useful when the key itself holds multiple sub-options or attributes.
Example output:
option_key.subkey1
option_key.subkey2
option_key.subkey3
This output illustrates the structure under the provided option key, showing several subkeys, each of which can potentially have further nested configurations.
Use case 2: List current boot kernel modules
Code:
nixos-option boot.kernelModules
Motivation:
Kernel modules are critical components that extend the functionality of the operating system’s kernel without needing to reboot the system. Knowing which modules are currently being utilized during boot is vital for system troubleshooting, performance tuning, or security auditing. For system administrators, keeping track of these modules is essential to ensure that the right drivers are loaded for hardware compatibility and optimal system performance.
Explanation:
boot.kernelModules
: This argument specifies the configuration key which contains the list of kernel modules set to load at boot. These modules might include drivers needed for various hardware components such as network or graphics cards.
Example output:
boot.kernelModules = [ "kvm" "vfs" "bridge" ];
The output shows the list of kernel modules that are configured to load during the system boot, helping ensure that the system is prepared to handle specific hardware or system requirements immediately upon startup.
Use case 3: List authorized keys for a specific user
Code:
nixos-option users.users.username.openssh.authorizedKeys.keyFiles|keys
Motivation:
In environments where secure shared access is necessary, SSH keys are a common method for authenticating users quickly and securely. Ensuring that only authorized keys are permitted ensures a secure and well-managed system by preventing unauthorized access. Checking authorized keys for specific users helps system administrators verify user permissions and make necessary adjustments, thus maintaining robust security protocols.
Explanation:
users.users.username
: This starts the path specific to a user, where “username” should be replaced with the actual username you are querying.openssh.authorizedKeys.keyFiles | keys
: This portrays the path within the user’s configuration that lists the OpenSSH authorized keys either embedded directly (keys
) or as references to files (keyFiles
).
Example output:
users.users.johndoe.openssh.authorizedKeys.keys = [ "ssh-rsa AAAAB3... user1@domain.com" ];
The output shows authorized SSH keys associated with a specific user, allowing you to confirm that the appropriate keys are set for those needing access to the system.
Use case 4: List all remote builders
Code:
nixos-option nix.buildMachines
Motivation:
For environments employing distributed computing strategies, remote builders are used to build Nix packages on multiple machines. This not only speeds up the build times through parallelization but also offloads building tasks to more suitable machines. Listing all remote builders is crucial for maintaining control over build-related resources and ensuring each machine is appropriately utilized and configured.
Explanation:
nix.buildMachines
: This key lists all machines configured to act as remote builders. This configuration helps in managing resources effectively by distributing the workload across multiple systems.
Example output:
nix.buildMachines = [ "builder1" "builder2" ];
In this example, the output shows the identifiers or names of machines configured as remote builders which the Nix system can leverage for distributed package building.
Use case 5: List all subkeys of a given key on another NixOS configuration
Code:
NIXOS_CONFIG=path_to_configuration.nix nixos-option option_key
Motivation:
There can be situations where you need to review or manage NixOS configurations that are not currently active on your machine. Being able to inspect another configuration file helps in various ways, such as comparing configurations, migrating settings, or testing modifications before applying them to a live environment. This use case enhances configuration management flexibility by enabling administrators to explore and validate options across different configurations.
Explanation:
NIXOS_CONFIG=path_to_configuration.nix
: Temporarily sets the environment to parse configurations from a specific file given bypath_to_configuration.nix
. This assists in examining configurations that are not the active ones on the current system.option_key
: The specific key you want to inspect within the alternative configuration context.
Example output:
option_key.otherConfigSubkey1
option_key.otherConfigSubkey2
This exemplifies subkeys existing in another configuration file, allowing you to understand and manipulate different setups without directly affecting your current operational environment.
Use case 6: Show recursively all values of a user
Code:
nixos-option -r users.users.user
Motivation:
Being able to understand every setting tied to a particular user is crucial in properly managing user accounts, ensuring consistency and security, and offering personalized configuration experiences. Recursive examination of user configuration can help an administrator quickly gather all relevant settings, which can aid in troubleshooting, making wholesystem changes, or planning future policies.
Explanation:
-r
: The recursive flag, which forcesnixos-option
to traverse through the entire option tree under the specified key, delivering a full view of every nested setting.users.users.user
: The path within the NixOS configuration where the specified user’s attributes and settings reside.
Example output:
users.users.alice = {
uid = 1001;
gid = 100;
home = "/home/alice";
shell = "/bin/bash";
...
}
Through this comprehensive listing, you’ll receive a snapshot of all settings related to a user, delineating various attributes like UID, GID, home directory, and shell preferences.
Conclusion
The nixos-option
command is a versatile and powerful tool for probing into NixOS configurations. Whether you’re working on optimizing your kernel modules, securing user SSH access, managing distributed builds, or exploring configuration files from different environments, nixos-option
offers indispensable insights. Understanding these use cases allows for better system administration and fine-tuning of your NixOS deployment, ensuring efficiency, security, and flexibility in managing complex systems.