配置文件结构#
NixOS 的主要配置文件位于 /etc/nixos/:
/etc/nixos/
├── configuration.nix # 主配置文件
└── hardware-configuration.nix # 硬件配置(自动生成)配置文件的基本结构#
{ config, pkgs, ... }:
{
imports = [
./hardware-configuration.nix
];
# 你的配置...
system.stateVersion = "24.05"; # 示例初装版本;保留自己的初装值
}参数说明:
config: 整个系统的配置状态pkgs: nixpkgs 包集合...: 允许传递其他参数(忽略不用的)
常用配置选项#
引导配置
UEFI/systemd-boot 与 BIOS/GRUB 是两种示例,按实际安装模式选择;GRUB 整盘目标必须核对,不能照抄 /dev/sda。
# UEFI 引导
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
# 传统 BIOS 引导
boot.loader.grub.enable = true;
boot.loader.grub.device = "/dev/sda";
boot.loader.grub.useOSProber = true;网络配置
下列静态地址使用文档专用网段,并非可用的真实网络。需按实际网络替换;桌面 NetworkManager 与静态接口方案应明确由谁管理同一接口。
# 主机名
networking.hostName = "workstation";
# NetworkManager(推荐桌面使用)
networking.networkmanager.enable = true;
# 静态 IP(服务器使用)
networking.interfaces.eth0.ipv4.addresses = [ {
address = "192.0.2.10";
prefixLength = 24;
} ];
networking.defaultGateway = "192.0.2.1";
networking.nameservers = [ "192.0.2.53" "192.0.2.54" ];本地化配置
# 时区
time.timeZone = "Asia/Shanghai";
# 区域设置
i18n.defaultLocale = "zh_CN.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "zh_CN.UTF-8";
LC_IDENTIFICATION = "zh_CN.UTF-8";
LC_MEASUREMENT = "zh_CN.UTF-8";
LC_MONETARY = "zh_CN.UTF-8";
LC_NAME = "zh_CN.UTF-8";
LC_NUMERIC = "zh_CN.UTF-8";
LC_PAPER = "zh_CN.UTF-8";
LC_TELEPHONE = "zh_CN.UTF-8";
LC_TIME = "zh_CN.UTF-8";
};
# 中文输入法
i18n.inputMethod = {
enable = true;
type = "fcitx5";
fcitx5.addons = with pkgs; [
fcitx5-rime
fcitx5-chinese-addons
];
};用户配置
docker 组拥有较高权限,仅确需时加入。SSH 禁用密码登录前,应先验证密钥登录可用,避免锁住管理入口。
users.users.alice = {
isNormalUser = true;
description = "Alice";
extraGroups = [ "networkmanager" "wheel" "docker" ];
# 安装时交互设置密码;不要将明文密码写入公开配置。
# 需要声明密码时,可使用部署时提供的 hashedPasswordFile。
# 不要把密码哈希写进公开仓库或可读的 Nix store。
# 设置默认 shell
shell = pkgs.zsh;
# SSH 公钥授权(不负责打开防火墙端口)
openssh.authorizedKeys.keys = [
"<完整 SSH 公钥,占位符不可直接使用>"
];
};软件包管理
# 系统级安装
environment.systemPackages = with pkgs; [
vim
git
curl
wget
htop
firefox
];
# 启用程序
programs.firefox.enable = true;
programs.git.enable = true;
programs.zsh.enable = true;服务配置
# OpenSSH
services.openssh = {
enable = true;
settings = {
PermitRootLogin = "no";
PasswordAuthentication = false;
};
};
# Docker
virtualisation.docker = {
enable = true;
enableOnBoot = true;
};
# 防火墙
networking.firewall.enable = true;
networking.firewall.allowedTCPPorts = [ 22 80 443 ];重建系统#
build 只构建;dry-build 只显示构建计划;test 会立即激活;switch 立即激活并设为启动默认。它们都不能单独证明实际服务行为正常。
修改配置后,需要重建系统使其生效:
# 临时激活配置(会立即改变运行系统,但不设为启动默认项)
sudo nixos-rebuild test
# 应用配置
sudo nixos-rebuild switch
# 更新并重建
sudo nixos-rebuild switch --upgrade回滚配置
# 查看历史版本
sudo nixos-rebuild list-generations
# 切换到特定版本
sudo nix-env --profile /nix/var/nix/profiles/system --switch-generation 42
sudo /nix/var/nix/profiles/system/bin/switch-to-configuration switch
# 删除旧版本并回收(确认当前系统稳定、允许放弃旧回滚点后)
sudo nix-collect-garbage --delete-older-than 30d模块化配置#
将配置拆分到多个文件:
/etc/nixos/
├── configuration.nix
├── hardware-configuration.nix
├── users.nix
├── desktop.nix
└── services.nix在 configuration.nix 中导入:
imports = [
./hardware-configuration.nix
./users.nix
./desktop.nix
./services.nix
];示例:users.nix
{ config, pkgs, ... }:
{
users.users.alice = {
isNormalUser = true;
extraGroups = [ "wheel" "networkmanager" ];
};
users.users.bob = {
isNormalUser = true;
extraGroups = [ "networkmanager" ];
};
}常用命令#
# 编辑配置
sudo nano /etc/nixos/configuration.nix
# 求值并列出将要构建/下载的路径(不执行构建)
nixos-rebuild dry-build
# 构建并预览激活操作(预览不保证包含全部影响)
nixos-rebuild dry-activate
# 查看当前配置选项值
nixos-option networking.hostName
# 搜索可用选项
man configuration.nix参考资源#
参考与延伸
根据技术笔记重新整理,示例使用通用名称。