蚊章汇 - NixOS
type: channel
link: https://linuxcn.bwsl.wang/tag/NixOS/
items: 在 Ubuntu 等非 Nix 操作系统上安装和使用 Nix 包管理器
items: NixOS 系列 #5：如何在 NixOS 上设置主目录管理器
items: NixOS 系列 #4：安装 NixOS 后要做的事
items: NixOS 系列 #3：在 NixOS 中安装和删除软件包
items: NixOS 系列 #2：如何在虚拟机上安装 NixOS？
items: NixOS 系列 #1：你为什么要考虑使用 NixOS？
items: NixOS Linux： 先配置后安装的 Linux

在 Ubuntu 等非 Nix 操作系统上安装和使用 Nix 包管理器
type: item
date: 2023-10-22T16:21:43+08:00
description: Nix 软件包管理器可以安装在任何 Linux 发行版上。具体方法如下。人们喜欢使用不可变的 NixOS 的原因之一是它的 Nix 包管理器。它有超过 80,000 个软件包，这可能与 Debian 软件包的数量相差比较大，但仍然令人印象深刻。好处是你不必仅仅为了包管理器而 安装 NixOS。与 Homebrew 和 Rust 的 Cargo 包管理器 一样，你可以在当前发行版中使用 Nix 包管理器。为什么要这么做？因为有时，你可能会发现仅以 Nix 打包格式提供的新应用。这种情况很少见，但有可能。在本教程中，我将引导你完成以下内容：安装 Nix 包管理器搜索并安装包尝试/测试软件包而不安装它们更新包删除包在其他 Linux 发行版上安装 Nix 包管理器Nix 包管理器有两种安装方式：全局安装和本地安装。? 全局安装意味着系统上的每个可用用户都可以访问 nix 包管理器，而本地安装仅适用于当前用户。Nix 官方文档 建议你使用全局安装。全局安装如果你想全局安装 Nix 包管理器，那么，你需要执行以下命令：sh <(curl -L https://nixos.org/nix/install) --daemon 执行上述命令后，需要输入 y 键并按回车键：完成后，关闭当前终端，因为它不会在当前终端会话上运行。本地安装如果你更喜欢本地安装并且不想每次都使用 sudo，则执行以下命令：sh <(curl -L https://nixos.org/nix/install) --no-daemon 输入 y 并在要求确认时按回车键。完成后，关闭当前终端会话并启动一个新终端会话以使用 Nix 包管理器。搜索并安装包安装 Nix 包管理器后，下一步是搜索包。首先，访问 Nix 搜索的官方页面 并输入你要安装的软件包的名称。从给定的描述中，你可以找到所需的软件包，然后选择 nix-env 进行永久安装。在这里，你可以添加一些额外的关键字以获得更好的搜索结果。例如，在这里，我搜索 “Firefox browser”：我上面提到的最后一步（“复制命令”）什么也不做，只是为你提供了一个用于安装的命令。现在，你所要做的就是在终端中执行该命令。就我而言，它给了我以下命令来安装 Firefox：nix-env -iA nixpkgs.firefox 完成后，你可以使用以下命令列出已安装的软件包：nix-env -q 使用包而不安装它们到目前为止，这是 Nix 包管理器的最佳功能，因为你可以使用/测试包甚至不用安装它！为此，你可以使用 Nix Shell，它允许你将交互式 Shell 与指定的包一起使用，关闭后，你将无法再访问该包。很酷，对吧？要使用 nix-shell 访问你喜欢的软件包，请使用以下命令语法：nix-shell -p <package_name> 例如，我想使用一次 neofetch，所以我使用了以下命令：nix-shell -p neofetch 要退出 Shell，你所要做的就是执行 exit 命令：exit 使用 Nix 包管理器更新包使用 Nix 包管理器更新包非常简单。要更新软件包，首先，你需要使用以下命令更新频道：nix-channel --update 接下来，你可以通过试运行更新命令来列出过时的软件包：nix-env --upgrade --dry-run 就我而言，Firefox 浏览器已经过时，需要更新！要更新单个包，请使用以下命令：nix-env -u <Package_name> 如果你想一次更新所有软件包，请使用以下命令：nix-env -u 使用 Nix 包管理器删除包要删除软件包，你只需按以下方式执行 nix-env 命令即可：nix-env --uninstall [package_name] 例如，如果我想删除 Firefox 浏览器，那么，我将使用以下命令：nix-env --uninstall firefox 通过 NixOS 释放其全部潜力如果你喜欢 Nix 包管理器背后的想法，请相信我，你一定会喜欢 NixOS。仅使用一个配置文件来复制整个系统就足以说服我切换到 NixOS，但还有更多原因：我喜欢 NixOS。以至于我写了整个系列，这样你就不必阅读文档（基础知识）：NixOS 系列我希望你能像我一样喜欢使用它。（题图：MJ/da586165-eadb-4ed7-9a0b-9c92903344d5）via: https://itsfoss.com/ubuntu-install-nix-package-manager/作者：Sagar Sharma 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出

NixOS 系列 #5：如何在 NixOS 上设置主目录管理器
type: item
date: 2023-04-06T19:06:00+08:00
description: 在发表这篇文章之前，我解释了如何为一个单用户系统 在 NixOS 中安装和删除软件包。但是，如果你正在供多个用户使用，有一个很好的方法来分别满足每个用户的需求。在本指南中，我将指导你如何在 NixOS 上设置一个 主目录管理器 （ Home Manager ） ，以及如何使用它来安装软件包。如果你是新读者，本系列中讨论的一些资源包括：使用 NixOS 的原因在虚拟机上安装 NixOS安装 NixOS 后要做的事情在 NixOS 上设置主目录管理器在本指南中，我将指导你通过 2 种方式来设置主目录管理器：独立的主目录管理器（使用单独的配置文件）作为一个 NixOS 模块（在 configuration.nix 文件中使用它）那么，让我们从独立方式开始。独立安装的主目录管理器如果你使用的是 NixOS 的稳定频道，你可以使用以下命令来配置主目录管理器：nix-channel --add https://github.com/nix-community/home-manager/archive/release-22.11.tar.gz home-manager 在编写本指南时，稳定版是 22.11。而 如果你在一个不稳定的频道上，请使用以下命令：nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager 无论你使用稳定版还是不稳定版，下面的步骤都是一样的。一旦完成，更新频道：nix-channel --update 最后，使用下面的命令来安装主目录管理器：nix-shell '<home-manager>' -A install ?️ 在安装时，可能会出现以下错误：重新启动你的系统并再次使用安装命令，它将开始安装。一旦完成，它将显示独立安装的主目录管理器的位置：将主目录管理器安装为 NixOS 模块⚠️ 如果你选择将主目录管理器作为 NixOS 模块使用，你将需要 sudo 权限。如果你在一个稳定的频道上（在写本文的时候，是 22.11），你可以使用下面的命令来添加主目录管理器的稳定频道：sudo nix-channel --add https://github.com/nix-community/home-manager/archive/release-22.11.tar.gz home-manager 而 如果你使用的是不稳定通道或主通道，则使用以下命令：sudo nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager 一旦你使用上面的任何一条命令完成了添加频道的工作，就用下面的方法更新频道：sudo nix-channel --update 接下来，用以下方法打开 configuration.nix 文件：sudo nano /etc/nixos/configuration.nix 并在 imports [] 中添加以下一行：<home-manager/nixos> 现在，跳到该行的末尾，在 } 前添加以下内容：home-manager.users.{username} = { pkgs, ... }: { home.packages = [ ] ; }; 上面这一行是为了方便安装和删除软件包而添加的，我接下来会告诉你。现在，保存修改并退出 Nano 文本编辑器。接下来，重建配置，并做一个切换：sudo nixos-rebuild switch 但如果你使用的是稳定版，并使用上述命令，就会出现以下错误：?️ 错误： 选项 home-manager.users.user.home.stateVersion 被使用但没有定义：要解决这个问题，你必须在你的主目录管理器块中添加 home.stateVersion。在写这篇文章时，我正在运行 22.11，所以整个主目录管理器块看起来像这样：home-manager.users.{username} = { pkgs, ... }: { home.stateVersion = "22.11"; home.packages = [ ] ; }; 保存修改，按 Ctrl+O，按回车键和 Ctrl+X 退出 Nano 文本编辑器。现在，试着重建配置并再次进行切换，应该可以解决问题。如何在 NixOS 上使用主目录管理器安装软件包现在你已经安装了主目录管理器，如何用它来安装软件包：使用独立安装的主目录管理器首先，用下面的方法打开配置文件：nano /home/$USER/.config/nixpkgs/home.nix …

NixOS 系列 #4：安装 NixOS 后要做的事
type: item
date: 2023-03-26T22:25:14+08:00
description: 安装之后，你会发现 NixOS 与通用的 Linux 发行版有很大的不同。当然，作为 高级 Linux 发行版之一，大多数新用户对它并不熟悉。如果你不知道 为什么你应该使用 NixOS，并且出于好奇而尝试它，那么在继续进行之前，知道它是为谁准备的至关重要。虽然我假设你已经安装了这个发行版，但如果你是第一次使用，我建议先 在虚拟机上安装 NixOS。1、更新软件包即使你使用最新的 ISO 进行安装，也总是会有更新的。那么为什么不从更新软件包开始呢？要升级软件包，首先，你必须在添加的频道中检查是否有更新：nix-channel --update 然后，使用下面的命令来安装这些更新（如果有的话）：sudo nixos-rebuild switch --upgrade 这就行了！它将处理其余的事情。2、在 NixOS 中改变主机名如果你尝试用传统的方法 改变主机名（使用 hostnamectl 命令），会出现以下错误：在 NixOS 中，你可以用它的主配置文件轻松地改变主机名。使用如下命令：sudo nano /etc/nixos/configuration.nix 在这个配置文件中，寻找以下一行：networking.hostName = "nixos"； 然后把它改成：networking.hostName = "Your_Hostname"； 例如，我把我的主机名改为 itsFOSS：networking.hostName = "itsFOSS"； 现在，保存更改并退出 nano 文本编辑器。为了使你对主机名的修改生效，执行以下命令：sudo nixos-rebuild switch 最后，重新打开终端，主机名的变化应该反映出来。3、设置 Flatpak我知道你可能在想什么。Nix 软件包管理器已经提供了大量的软件包。那么，为什么你需要 Flatpak 呢？安装你所需要的东西对于第一次使用的人来说可能有点费时。所以，Flatpak 应该能给你带来方便。设置 Flatpak 与你在 Ubuntu 上做的不一样。要设置 Flatpak，你必须对 configuration.nix 文件进行修改，可以通过以下方式访问该文件：sudo nano /etc/nixos/configuration.nix 在 nano 中移动到最后一行，在 } 前添加以下一行：services.flatpak.enable = true； 按 Ctrl + O 保存更改，按回车键，按 Ctrl + X 退出。接下来，使用以下命令重建并切换到新的配置文件：sudo nixos-rebuild switch 最后，使用下面的命令将 Flathub 软件库添加到系统中：flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo 想知道到底什么是 Flatpak 包吗？你可以参考我们关于它的文章：什么是 Flatpak？你需要知道的关于这个通用包装系统的一切重要信息4、启用垃圾收集NixOS 以其不可改变性而闻名，这是有充分理由的。每当你升级一个软件包时，旧的软件包不会被删除。只是指向旧包的符号链接将被指向最新的版本。而这样做，你的系统中会积累下不必要的垃圾。但是，删除每一个旧世代将违背 NixOS 的初衷。所以，在这种情况下，你可以将你的系统配置为每周删除垃圾包。要做到这一点，首先，打开 NixOS 配置文件：sudo nano /etc/nixos/configuration.nix 并在配置文件末尾的 } 前添加以下一行：# Automatic Garbage Collection nix.gc = { automatic = true; dates = "weekly"; options = "--delete-older-than 7d"; }; 保存修改并退出 nano 文本编辑器。为了激活垃圾收集，重建并切换到新的配置文件：sudo nixos-rebuild switch 如果你不确定垃圾收集器是否在后台正常运行，你可以用以下命令列出活动的计时器：systemctl list-timers 正如你所看到的，Nix 垃圾收集器正在如期运行，并显示距离下次清理还有 5 天。5、安装你喜欢的软件我是说这是我们使用电脑的唯一原因 —— “为了使用我们最喜欢的软件”，如果还不是，我们就把它变成现实！寻找软件包的最好地方是 Nix 软件包搜索，可以使用你喜欢的任何浏览器访问。搜索软件包选择软件包点击 “nix-env” 并复制给定的 NixOS 的命令执行该命令，就可以了你可以查看我们的 NixOS 软件包管理 指南，了解所有的细节。让我在这里给…

NixOS 系列 #3：在 NixOS 中安装和删除软件包
type: item
date: 2023-03-21T17:09:24+08:00
description: NixOS 中的打包系统是它最强大的地方。Nix 软件包管理器使用的语法与 apt、dnf 和其他软件包管理器大不相同。这也是 人们应该尝试使用 NixOS 的原因之一。在本指南中，我将分享两种在 NixOS 上安装和删除软件包的方法：使用 Nix 软件包管理器使用 configuration.nix 配置文件⚠️ 使用 Nix 软件包管理器，你只能安装软件包，而不能安装 OpenSSH 或 Plex 服务器等服务。对于服务的安装，你必须使用 Nix 配置文件。要安装任何软件包，必须知道它的确切名称，为此，我将从如何在 NixOS 中搜索软件包开始。搜索软件包要寻找软件包，你可以使用它的 网页搜索。你可以使用如下步骤：在搜索栏中输入软件包的名称选择适当的软件包（从给出的描述中决定）点击 “nix-env” 标签页复制 NixOS 命令（第一条）例如，如果我想要 librewolf 包，我将执行以下操作：你也可以通过终端做同样的事情。要使用终端搜索软件包，你可以按照给定的命令语法进行：nix-env -qaP --description [软件包名称] 例如，在这里，我搜索了 librewolf：你必须复制输出的第一行，因为那是你需要安装的软件包的名称。在这里它是 nixos.librewolf。是的，它听起来可能没有像使用 APT 或 DNF 时软件包名字那么方便。但是，我认为这并不是大问题。一些妥协或许会换来一些好处？在 NixOS 中安装一个软件包要安装一个软件包，你所要做的就是使用以下命令语法：nix-env -iA [软件包名称] 而且，如果你使用网络搜索来寻找软件包，你就已经有了安装所需的确切命令。所以，假设我想安装 `librewolf'，我将使用以下命令：nix-env -iA nixos.librewolf 如果你想进行全系统的安装（让每个用户都能使用这个包），用 sudo 执行安装命令：sudo nix-env -iA nixos.librewolf 就是这样！你将很快安装好你喜欢的软件包。在 NixOS 中卸载一个软件包要删除一个软件包，你可以参考下面的命令语法：nix-env --uninstall [软件包名称] 因此，如果我必须删除 librewolf 包，我必须使用以下命令：nix-env --uninstall librewolf 如果你仔细注意，我使用了 librewolf 而不是 nixos.librewolf 来安装。这意味着你在删除软件包时要跳过 nixos 部分，这使事情变得简单而快速。在 NixOS 中安装服务正如我前面提到的，你不能使用 Nix 软件包管理器来安装像 OpenSSH、Plex 服务器、Flatpak 等服务。从搜索服务到安装过程，都与你上面看到的不同。所以让我先说说如何 搜索服务。要搜索服务，请前往 Nix 软件包搜索 网页选择 “ NixOS 选项 NixOS options ”（页面顶部菜单行的第三个选项）输入你要找的服务的名称复制服务的名称例如，在这里，我正在搜索 OpenSSH 服务。一旦你找到了这个名字，用下面的命令打开 configuration.nix 文件：sudo nano /etc/nixos/configuration.nix 并在行末添加服务的名称（在 } 之前），如下：[service_name] = true; 由于 我想启用 OpenSSH，我将添加以下内容：services.openssh.enable = true; 一旦你在配置文件中添加了服务，保存修改并退出 Nano 文本编辑器。要启用该服务，请重建配置文件，并使用以下命令切换到所做的更改：sudo nixos-rebuild switch 这就行了，你已经启用了该服务。从 NixOS 卸载服务要卸载一个服务，你所要做的就是在 configuration.nix 文件中删除或注释该服务的一行。因此，首先，用以下命令打开配置文件：sudo nano /etc/nixos/configuration.nix 寻找服务，并删除这一行或用 # 注释掉：通过添加注释 #，我忽略了 OpenSSH 服务的加载，因为我不再需要它在我的系统上。保存修改并退出文本编辑器。最后，重建配置文件并进行切换：sudo nixos-rebuild switch 使用 Nix 配置文件安装软件包配置文件可以让你 方便地一次性管理软件包。要使用 Nix 配置文件安装软件包，你必须在配置文件中输入软件包的名称、重建，然后切换到配置文件，就可以了。首先，打开 configuration.nix 文件。sudo nano /etc/nixos/configuration.nix 如果你想 为一个特定的登录用户安装软件…

NixOS 系列 #2：如何在虚拟机上安装 NixOS？
type: item
date: 2023-03-14T23:40:18+08:00
description: 如果你可以在任何 Linux 发行版上使用 Nix 包管理器，为什么还要安装 NixOS？在使用 NixOS 几天之前，我经常想知道同样的事情。当我意识到这些好处后，我就写了这篇文章来帮助你了解 为什么你要考虑使用 NixOS。如果你已经阅读了本系列的第一篇文章，那么你已经知道自己想要什么了。那么，如何开始呢？考虑到它对许多人来说可能是一种新体验，你应该用它替换日常使用的系统还是将其安装为虚拟机？我建议在你想要将其替换为你的主要操作系统之前在虚拟机上使用 NixOS。这适用于你想尝试的任何新事物，特别是 先进的 Linux 发行版，例如 NixOS。使用 VirtualBox 在 VM 中安装 NixOS在本教程中，我将使用 VirtualBox。如果你使用的是 Ubuntu 并且不关心是否拥有最新版本，那么可以使用一个命令安装 VirtualBox：sudo apt install virtualbox 想要安装最新版本？你可以参考下面的指南：如何在 Ubuntu 上安装 VirtualBox（初学者教程）如果你使用 Ubuntu 以外的任何发行版，你可以 按照其官方下载页面的下载说明进行操作。成功安装 VirtualBox 后，让我们从第一步开始。步骤 1：获 取NixOS 的 ISO 镜像你需要前往 NixOS 官方下载页面。在 “NixOS: the Linux distribution” 部分，你会找到带有 GNOME 和 KDE 桌面的 ISO。当然，也有最小化 ISO，但我建议使用两者之一（GNOME 和 KDE）：对于本教程，我将使用 GNOME。请记住，你可以选择 GNOME 和 KDE 两种 立付桌面环境 Live Desktop 。而在安装过程中，你可以选择自己喜欢的桌面环境，包括 Xfce、Pantheon、Cinnamon、MATE 等等！步骤 2：在 VirtualBox 中创建虚拟机打开 VirtualBox 并单击 “ 新建 New ” 按钮添加新的虚拟机：它将打开一个提示，要求你添加有关要添加的虚拟机的信息。你可以先命名虚拟机：为你的虚拟机命名，以便你可以识别它是 NixOS 系统。所以我将其命名为 “NixOS”。选择你刚刚下载的 ISO 镜像。选择 “Linux” ISO 类型。并在版本选择 “ 其它 Linux（64 位） Other Linux (64-bit) ”。选择所有内容后，单击 “ 下一步 Next ” 按钮。接下来，系统会要求你选择基本内存（RAM）、要分配给此虚拟机的处理器以及存储空间。虽然 NixOS 没有提到官方要求，但我建议你为此安装至少拥有 4GB RAM、2-4 个处理器内核和 30GB 空间：最后，它会显示你为此虚拟机所做选择的摘要：如果一切正常，请单击 “ 完成 Finish ” 按钮，它将为你创建一个 NixOS 虚拟机。步骤 3：安装 NixOS创建完虚拟机后，你为 NixOS 虚拟机指定的名称应该显示在 VirtualBox 的虚拟机列表中。选择 “NixOS” 虚拟机并单击“开始”按钮：它将启动 NixOS 立付桌面环境 Live Desktop ，以便你可以试用 Linux 发行版。选择安装语言启动进入 NixOS 后，安装程序将启动并要求你设置安装程序的首选语言：选择地区和时区接下来，选择你所在的地区和区域。如果你不知道这一点，你可以从地图上选择你的国家，它会为你设置。选择区域和区域后，它还会选择系统的首选语言、数字和日期区域设置。当然，你可以根据需要进行更改，但对于大多数用户而言，选定的选项就可以正常工作：选择键盘布局接下来，你将必须设置键盘布局。对于大多数用户来说，默认设置的 “English (US)” 应该可以正常工作。如果你要进行其他操作，则可以在继续之前测试你的键盘配置。之后，系统会要求你创建一个用户并为该用户设置密码。你可以选择为虚拟机保留一个强密码或任何随机密码。选择你喜欢的桌面环境使用 NixOS，你可以选择以下桌面环境：GNOMEKDE（定制的最佳选择）XfcePantheon（ElementaryOS 附带的桌面环境）CinnamonEnlightenmentLXQt在 NixOS 上使用非自由软件NixOS 遵循与 Fedora 类似的方法，你必须选择是否需要非自由软件。我建议你启用非自由包：分区部分由于这是一个虚拟机指南，我建议你使用自动对磁盘进行分区的 “ 擦除磁盘 Erase disk ” 选项！完成后，它将为你提供你所做选择的摘要：如果一切正常，请单击 “ 安装 Install ” 按钮，它将开始安装。不要重启而是关闭虚拟机安装完成后，你可以选择重新启动虚拟机。如果你这样做，它将再次加载安装程序！要解决此问题，你必…

NixOS 系列 #1：你为什么要考虑使用 NixOS？
type: item
date: 2023-03-08T23:01:07+08:00
description: NixOS……又一个使用不同软件包管理器的发行版？?好吧，NixOS 是 高级 Linux 发行版 之一。所以如果我写这个，我一定有一个充分的理由，对吗？嗯，有很多！我已经使用它 3 个月了，它是如此之好，以至于我正在考虑从我一直以来最喜欢的 Pop!\_OS 切换到 NixOS。在本指南中，我将分享 NixOS 在众多 Linux 发行版中脱颖而出的主要特点。别担心，在我们继续之前，让我告诉你什么是 NixOS：它是一个以 Nix 包管理器为核心的 Linux 发行版，为你省去了在其它的 Linux 发行版上设置 Nix 的麻烦，可以让你充分利用它的优势。由开发 Nix 的同一个团队构建。使用 NixOS 的 6 个理由NixOS 是一个有趣的从零开始构建的 独立 Linux 发行版。每个人都可以通过使用 NixOS 学到很多东西，但在我看来，如果你是一个开发人员或计算机科学的学生，NixOS 应该非常合适。让我告诉你为什么。1、不易损坏/易于恢复就其核心而言，NixOS 是为长期使用而构建的。这并不意味着它像 Debian 那样用多年前的软件包来保证稳定性，而是遵循一种不同的方法。为了理解 NixOS 为何如此稳定，让我们谈谈用户一般是如何破坏他们的系统的，即“依赖性问题或软件包冲突”在更新系统或安装一个新的软件包时，你一般会面临系统崩溃的风险。主要是因为你的软件包管理器无法满足依赖性，或者安装的软件包与现有系统冲突导致的。而 NixOS 有一个非常聪明的方法来处理这个问题。你看，每当你升级你的系统或安装一个软件包时，系统的状态就会被重建，被称为超过当前的“ 新世代 new generation ”。因此，如果你在使用新的软件包或更新时遇到任何麻烦，你可以随时回滚到“ 旧世代 old generation ”，在那里你会找到系统以前的状态。即使系统无法访问，你也能在启动时找到以前几代。2、可重复性通过一个配置文件，你可以为其他物理系统创建一个你当前环境的副本。这个功能给你带来的好处是，你可以使用 Nix 配置文件进行安装和配置。当你有了适合你的用途的配置文件，将该文件发送到新的系统中，用你的配置文件替换默认的配置文件。就是这么简单！重建配置，升级系统，并通过给定的命令进行切换：sudo nixos-rebuild switch --upgrade 你将在几分钟内拥有与你的主机上完全相同的开发环境，并进行复制。3、轻松回滚虽然你可能已经从 NixOS 的 “ 世代 generation ” 特性中得到了灵感。但还有更多的内容。?️NixOS 在很大程度上依赖于符号链接。如果这对你来说是一个新概念，请参考下面的指南：如何在 Linux 中创建符号链接（完整指南）一般来说，在其他 Linux 发行版中，当你升级一个软件包时，新的软件包会取代旧的。但 NixOS 不是这样的。在 NixOS 中，软件包被隔离并存储在一个单独的目录中，这就是使用符号链接的原因。每当你升级一个软件包时，NixOS 会调整符号链接来定位新的软件包，但不会删除旧的。因此，如果你面临与新包的冲突，只需切换到旧世代，符号链接有助于定位旧版本的包。?4、Nix 包管理器Nix 包管理器允许你访问超过 80,000 个软件包！不仅仅局限于 Linux，它还可以在 macOS、WSL2、Docker 等平台上使用。而且，软件包的可用性与 AUR 相似，甚至比 AUR 更好，因为你应该在 Nix 包管理器上找到几乎所有的东西（我是认真的）。例如，我想安装 Librewolf 浏览器，这在大多数 Linux 发行版的默认仓库中是不可用的。但是，Nix 有它！这意味着你可以依靠 Nix 包管理器来安装几乎所有的软件包。如果你有先前的 Linux 经验，它也相对容易理解。总而言之，Nix 包管理器令人印象深刻！5、使用同一软件包的多个版本这对开发者来说可能是至关重要的，有些应用需要特定依赖的旧版本，而有些则需要最新的版本。而且，正如我前面提到的，Nix 将包安装到一个特定的子目录中，每个包都是隔离的，所以一个包不会干扰另一个包！在使用 Nix 之前，我使用虚拟机和容器来满足同一软件包的不同依赖性，尤其是 PHP，但 NixOS 为我的工作流程带来了奇迹。6、无需安装就能测试软件包的能力你可以使用 nix-shell，它通过临时修改 $PATH 环境变量来测试一个包。而且没有任何限制。你能够测试每一个可供安装的软件包！NixOS 系列：让我们探索更多！这是我们 Nix 系列的第一部分，我介绍了使用 NixOS 的原因。我相信更多的 Linux 用户应该去了解它，如果他们还没有了解的话。在下一部分，我将解释如何在你的虚拟机中安装 NixOS。? 欢迎在下面的评论中分享关于 Ni…

NixOS Linux： 先配置后安装的 Linux
type: item
date: 2017-10-19T16:26:00+08:00
description: 配置是成功安装 NixOS 的关键。我用 Linux 有些年头了。在这些年里我很有幸见证了开源的发展。各色各样的发行版在安装方面的努力，也是其中的一个比较独特的部分。以前，安装 Linux 是个最好让有技术的人来干的任务。现在，只要你会装软件，你就会安装 Linux。简单，并且，不是我吹，在吸引新用户方面效果拔群。事实上安装整个 Linux 操作系统都要比 Windows 用户安装个更新看起来要快一点。但每一次，我都喜欢看到一些不同的东西——那些可以让我体验新鲜的东西。NixOS 在这方面就做的别具一格。讲真，我原来也就把它当作另一个提供标准特性和 KDE Plasma 5 界面的 Linux 发行版。好像也没什么不对。下载 ISO 映像后，我启动了 VirtualBox 并用下载的镜像创建了个新的虚拟机。VM 启动后，出来的是 Bash 的登录界面，界面上指导我用空密码去登录 root 账号，以及我该如何启动 GUI 显示管理器（图 1）。图 1： 与 NixOS 的初次接触可能不是太和谐。“好吧”我这样想着，“打开看看吧！”GUI 启动和运行时（KDE Plasma 5），我没找到喜闻乐见的“安装”按钮。原来，NixOS 是一个在安装前需要你配置的发行版，真有趣。那就让我们瞧瞧它是如何做到的吧！安装前配置你需要做的第一件事是建分区。由于 NixOS 安装程序不包含分区工具，你得用自带的 GParted （图 2）来创建一个 EXT4 分区。图 2： 安装前对磁盘分区。创建好分区，然后用命令 mount /dev/sdX /mnt 挂载。（请自行替换 sdX 为你新创建的分区）。你现在需要创建一个配置文件。命令如下：nixos-generate-config --root /mnt 上面的命令会创建两个文件（存放在目录 /mnt/etc/nixos 中）：configuration.nix — 默认配置文件。hardware-configuration.nix — 硬件配置（无法编辑）通过命令 nano /mnt/etc/nixos/configuration.nix 打开文件。其中有一些需要编辑的地方得注意。第一个改动便是设置启动选项。找到行：# boot.loader.grub.device = "/dev/sda"; # 或 efi 时用 "nodev" 删除行首的 # 使该选项生效（确保 /dev/sda 与你新建的分区）。通过配置文件，你可以设置时区和追加要安装的软件包。来看一个被注释掉的安装包的示例：# List packages installed in system profile. To search by name, run: # nix-env -aqP | grep wget # environment.systemPackages = with pkgs; [ # wget vim # ]; 如果你想要添加软件包，并在安装时安装它们，那就取消掉这段注释，并添加你需要的软件包。举个例子，比方说你要把 LibreOffice 加进去。示例详见下方：# List packages installed in system profile. To search by name, run: nix-env -aqP | grep wget environment.systemPackages = with pkgs; [ libreoffice wget vim ]; 你可以通过输入命令 nix-env -aqP | grep PACKAGENAME 来寻找确切的包名（PACKAGENAME 为你想要找的软件包）。如果你不想输命令，你也可以检索 NixOS 的软件包数据库。在你把所有的软件包都添加完后，你还有件事儿需要做（如果你想要登录到桌面的话，我觉得你还得折腾下 KDE Plasma 5 桌面）。翻到配置文件的末尾并在最后的 } 符号前，追加如下内容：services.xserver = { enable = true; displayManager.sddm.enable = true; desktopManager.plasma5.enable = true; }; 在 NixOS 官方文件 中，你能找到配置文件中更多的选项。保存并关掉配置文件。安装在你按照自己的需求完善好配置之后，使用命令（需要 root 权限） nixos-install。完成安装所需要的时间，会随着你加入的软件包多少有所区别。安装结束后，你可以使用命令重启系统，（重启之后）迎接你的就是 KDE Plasma 5 的登录管理界面了（图 3）。图 3： KDE Plasma 5 登录管理界面安装后你要首先要做的两件事之一便是给 roo…