惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

K
Kaspersky official blog
T
Threat Research - Cisco Blogs
N
News and Events Feed by Topic
Hacker News: Ask HN
Hacker News: Ask HN
Project Zero
Project Zero
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 叶小钗
Security Latest
Security Latest
Spread Privacy
Spread Privacy
aimingoo的专栏
aimingoo的专栏
N
News and Events Feed by Topic
Webroot Blog
Webroot Blog
U
Unit 42
Cyberwarzone
Cyberwarzone
小众软件
小众软件
Scott Helme
Scott Helme
Engineering at Meta
Engineering at Meta
Microsoft Security Blog
Microsoft Security Blog
T
The Blog of Author Tim Ferriss
A
About on SuperTechFans
爱范儿
爱范儿
S
Schneier on Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Schneier on Security
Schneier on Security
Latest news
Latest news
GbyAI
GbyAI
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
The Register - Security
The Register - Security
WordPress大学
WordPress大学
博客园_首页
Blog — PlanetScale
Blog — PlanetScale
PCI Perspectives
PCI Perspectives
Jina AI
Jina AI
AI
AI
NISL@THU
NISL@THU
I
Intezer
G
GRAHAM CLULEY
B
Blog
S
Secure Thoughts
IT之家
IT之家
宝玉的分享
宝玉的分享
Recent Announcements
Recent Announcements
Y
Y Combinator Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
酷 壳 – CoolShell
酷 壳 – CoolShell
有赞技术团队
有赞技术团队
V2EX - 技术
V2EX - 技术
Recorded Future
Recorded Future
Hacker News - Newest:
Hacker News - Newest: "LLM"

lznauy的技术小屋

NekoCode 深度解析 用AI开发新主题仅需一天 AIAgent开发杂谈 CodeAgent的开发比我想象的难的多 nix语法初入门 记录一次家里老人受骗 nixos美化shell及常用软件安装 皖南川藏线之旅 nixos配置kitty以及桌面美化 nixos安装niri和noctalia nixos-shell及配置优化 nixos折腾之旅 claude源码泄漏事件及简单剖析 春季赏花之旅 曲折的离职过程 年味越来越淡了 城市里没有爱情? 日常碎记(三) 利用DeepSeek分析你的隐藏天赋 SELinux技术介绍 我们的认知可能被裹挟了 日常碎记(二)
nixos-flake和home-manager
lznauy · 2026-04-07 · via lznauy的技术小屋

目前的终端美化效果

nixos_new

这篇文章将介绍 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

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
    '';
  };

最终效果如下 nvchad

内容总结 @

通过 Flake 和 Home Manager 的结合使用,我们可以实现:

  • 声明式配置:整个系统都可以通过配置文件来管理
  • 可重现性:相同的配置可以在任何机器上复现
  • 版本控制:所有配置都可以纳入 Git 版本控制
  • 模块化:不同模块可以独立管理,按需组合
  • 用户隔离:用户配置与系统配置分离