目前的终端美化效果
这篇文章将介绍 Flakes 和 Home Manager,并实现简单的终端美化。
flake介绍 @
Nix flakes 是 Nix 2.4 版本中首次引入的一项实验性功能,旨在解决 Nix 生态系统许多领域的改进问题:它们为 Nix 项目提供了一个统一结构、允许固定每个依赖项的特定版本并通过锁文件共享这些依赖项,同时总体上使编写可复现的 Nix 表达式变得更加方便。
启用flake特性 @
在 NixOS 中启用 Flakes 非常简单,只需在 configuration.nix 中添加一行配置:
# enable flakes
nix.settings.experimental-features = [ "nix-command" "flakes" ];
在启用了 Flakes 特性后,sudo nixos-rebuild switch 命令会优先读取 /etc/nixos/flake.nix 文件,如果找不到再尝试使用 /etc/nixos/configuration.nix。
flake结构简介 @
使用 nix flake init 命令来生成一个非常基础的 flake 文件,这将在当前目录下创建一个名为 flake.nix 的文件。
# nix flake init
{
description = "A very basic flake";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
};
outputs = { self, nixpkgs }: {
packages.x86_64-linux.hello = nixpkgs.legacyPackages.x86_64-linux.hello;
packages.x86_64-linux.default = self.packages.x86_64-linux.hello;
};
}
一个最小化的 flake 文件包含该 flake 的描述(description),一组输入依赖项(inputs)和一个输出(outputs)。
生成 flake.lock @
首次创建 Flake 时,在其当前目录运行以下命令生成 flake.lock:
nix flake update
flake.lock 会锁定所有依赖的精确版本,确保可重现性,如果你会golang语言,这个其实和go.sum类似。
使用 Flake 构建系统 @
这部分命令可以先简单熟悉下,后续会经常使用
# 查看可用的 NixOS 配置
nix flake show
# 构建并切换到配置
sudo nixos-rebuild switch --flake .#your-hostname
# 更新依赖
nix flake update
# 查看配置差异
nixos-rebuild dry-build --flake .#your-hostname
home-manager介绍 @
Home Manager 是一个用于管理用户级配置的工具,可以管理用户家目录中的文件、dotfiles、软件包、环境变量等。它与 NixOS 系统配置互补,专注于用户个性化的配置。
安装home-manager @
一般会将home manager作为NixOS模块安装,首先在 flake.nix 中添加 home-manager 输入,以下是我的一个示例:
{
description = "NixOS Test";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
# 1. 引入 home-manager 模块
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, home-manager, ... }@inputs: # 2. outputs 引入 home-manager
{
# 我的主配置
nixosConfigurations.nixos = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./configuration.nix
./hardware-configuration.nix
# 3. 配置 Home Manager
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.lznauy = import ./home.nix; # lznauy需要替换成你的用户名
}
];
specialArgs = { inherit inputs; };
};
# 也可以添加其他配置,这个name是自定义的,比如test
# nixosConfigurations.test = nixpkgs.lib.nixosSystem {
# system = "x86_64-linux";
# modules = [];
# };
};
}
然后执行命令sudo nixos-rebuild switch --flake .#nixos即可应用配置变更。
创建home.nix配置文件 @
创建 users/username/home.nix 文件,以下是我的一份配置示例:
{ config, pkgs, ... }:
{
home.stateVersion = "26.05";
# ====================== 用户软件包 ======================
home.packages = with pkgs; [
fastfetch
tree
fd
ripgrep
git
gcc
gnumake
nodejs
python3
];
# ====================== Git 配置 ======================
programs.git = {
enable = true;
settings.user.name = "lznauy";
settings.user.email = "lznauyfine@gmail.com";
};
}
使用home-manager配置Zsh以及powerlevel10k主题 @
Zsh 是我很喜欢的 Shell,配合 powerlevel10k 主题非常美观,首先在系统配置 configuration.nix 中启用zsh:
programs.zsh.enable = true;
users.users.lznauy.shell = pkgs.zsh; # lznauy换成你自己的用户名
然后在home.nix中配置如下:
# 添加zsh-powerlevel10k主题
home.packages = with pkgs; [
zsh-powerlevel10k
];
# Zsh 配置
home.shell.enableZshIntegration = true;
programs.zsh = {
enable = true;
initContent = ''
source ${pkgs.zsh-powerlevel10k}/share/zsh-powerlevel10k/powerlevel10k.zsh-theme
# 将你的p10k.zsh配置文件也放到当前目录
[[ -f ~/.p10k.zsh ]] && source ~/.p10k.zsh
'';
autosuggestion.enable = true;
syntaxHighlighting.enable = true;
oh-my-zsh = {
enable = true;
plugins = [ "git" ];
};
};
home.file.".p10k.zsh".source = ./p10k.zsh;
这样即可完成Zsh的基础配置,并且使用powerlevel10k主题进行美化。
使用home-manager安装NvChad @
我折腾了挺久安装nvchad,目前还没玩明白,但github有一个现成的叫
nix4nvchad项目,可以直接使用flake引入安装.
根据其文档首先在flake.nix 引入:
{
description = "Test";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
# 添加nix4nvchad输入
nix4nvchad = {
url = "github:nix-community/nix4nvchad";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, home-manager, nix4nvchad, ... }@inputs: # 添加nix4nvchad
{
nixosConfigurations.nixos = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./configuration.nix
./hardware-configuration.nix
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
# 导入 nix4nvchad 模块
home-manager.sharedModules = [
inputs.nix4nvchad.homeManagerModules.default
];
home-manager.users.lznauy = import ./home.nix;
}
];
specialArgs = { inherit inputs; };
};
};
}
然后在home.nix中配置如下:
programs.nvchad = {
enable = true;
hm-activation = true;
backup = false;
extraConfig = ''
vim.opt.number = true
vim.opt.relativenumber = true
'';
};
最终效果如下
内容总结 @
通过 Flake 和 Home Manager 的结合使用,我们可以实现:
- 声明式配置:整个系统都可以通过配置文件来管理
- 可重现性:相同的配置可以在任何机器上复现
- 版本控制:所有配置都可以纳入 Git 版本控制
- 模块化:不同模块可以独立管理,按需组合
- 用户隔离:用户配置与系统配置分离