
Khaneliman 的 NixOS 配置
欢迎使用 khanelinix,这是一个个人 Nix 配置仓库。本仓库 包含我的 NixOS 和 Nixpkgs 配置,以及各种用于增强 Nix 体验的工具和 自定义设置。
目录

入门指南
在开始之前,请确保您的系统上已安装 Nix。如果没有,您可以从官方 Nix 网站 或 Determinate Systems 安装程序 下载并安装。 如果在 macOS 上运行,您还需要安装 Nix-Darwin。您可以 按照 GitHub 上的安装说明](https://github.com/LnL7/nix-darwin?tab=readme-ov-file#flakes) 进行操作。
将此仓库克隆到您的本地机器
# New machine without git
nix-shell -p git
# Clone
git clone https://github.com/khaneliman/khanelinix.git
cd khanelinix
# Linux
sudo nixos-rebuild switch --flake .
# MacOS
# First run without nix-darwin:
nix run github:lnl7/nix-darwin#darwin-rebuild -- switch --flake github:khaneliman/khanelinix
darwin-rebuild switch --flake .
# With nh (Nix Helper)
nh os switch .
# With direnv
flake switch
功能特性
以下是我的 Nix 配置所提供的功能概览:
-
外部依赖集成:
- Khanelivim 使用 nixvim 构建的 自定义 neovim 配置。
- 访问 NUR 表达式以获取 Firefox 插件和其他增强功能。
- 与 Hyprland 及其他 Wayland 合成器集成。
-
macOS 支持:利用 Nix-darwin 的强大功能,在 macOS 上无缝配置和管理 Nix, 同时利用 homebrew 处理 GUI 应用程序。
-
Home Manager:使用 Home Manager 管理你的 dotfiles、主环境以及用户特定的 配置。
-
DevShell 支持:该 flake 提供了一个开发 shell(
devShell),用于 支持维护此 flake。你可以使用 devShell 方便地开发和 维护你的 Nix 环境。 -
使用 Cachix 进行 CI:该配置包含持续集成(CI), 将构建产物推送到 Cachix。 这确保了高效的构建,并减少了在本地机器上构建依赖项的 需求。
-
利用 sops-nix:使用 sops-nix 进行密钥管理,以安全且加密的方式 处理敏感信息。
自定义
我的 Nix 配置是使用 flake-parts 构建的,提供了一种灵活 且模块化的方法来管理你的 Nix 环境。以下是其工作原理:
-
Flake Parts 结构: 该配置使用 flake-parts 将输出组织为模块化部分,主 flake 定义从
flake/目录导入以实现更好的组织。 -
自定义库:
lib/目录包含扩展标准 nixpkgs lib 的自定义库函数和工具,为系统配置提供额外的辅助功能。 -
包管理:
packages/目录包含由 flake 导出的自定义包。每个包都使用callPackage构建,并可在不同的系统配置中使用。 -
模块化配置:
modules/目录定义了可重用的 NixOS、Darwin 和 Home Manager 模块。这种模块化方法允许在不同平台和系统之间保持一致的配置。 -
Overlay 系统:
overlays/目录中的自定义 overlays 修改并扩展 nixpkgs 包集合,允许进行包定制和添加。 -
系统配置: 特定主机的配置组织在
systems/中,针对不同架构(x86_64-linux、aarch64-darwin)设有单独的目录。 -
Home 配置: 特定用户的 Home Manager 配置位于
homes/目录中,按用户和系统架构组织。 -
开发环境:
flake/dev/中的分区开发环境提供开发 shell、格式化工具和检查,与主 flake 输出分离。
这种基于 flake-parts 的方法提供了出色的模块化,使得在保持相关功能组织有序的同时,轻松维护和扩展配置成为可能。
导出的包
使用以下命令直接运行包:
nix run --extra-experimental-features 'nix-command flakes' github:khaneliman/khanelinix#packageName
或从 packages 的输出中安装。例如:
# flake.nix
{
inputs.khanelinix = {
url = "github:khaneliman/khanelinix";
inputs.nixpkgs.follows = "nixpkgs";
};
}
# configuration.nix
{pkgs, inputs, system, ...}: {
environment.systemPackages = [
inputs.khanelinix.packages."${system}".packageName
];
}
截图
MacOS
NixOS
资源
我从以下配置中学习和借鉴的内容:
- JakeHamilton/config *主要 灵感来源和起点
- FelixKrats/dotfiles *Sketchybar 设计与实现
- Fufexan/dotfiles
- NotAShelf/nyx