2023-04-06 11:07:26 +08:00
|
|
|
|
[#]: subject: "NixOS Series #5: How to set up home-manager on NixOS?"
|
|
|
|
|
[#]: via: "https://itsfoss.com/home-manager-nixos/"
|
|
|
|
|
[#]: author: "Sagar Sharma https://itsfoss.com/author/sagar/"
|
|
|
|
|
[#]: collector: "lkxed"
|
|
|
|
|
[#]: translator: "wxy"
|
|
|
|
|
[#]: reviewer: "wxy"
|
|
|
|
|
[#]: publisher: "wxy"
|
|
|
|
|
[#]: url: "https://linux.cn/article-15697-1.html"
|
|
|
|
|
|
2023-04-07 11:14:38 +08:00
|
|
|
|
NixOS 系列 #5:如何在 NixOS 上设置主目录管理器
|
2023-04-06 11:07:26 +08:00
|
|
|
|
======
|
|
|
|
|
|
|
|
|
|
在发表这篇文章之前,我解释了如何为一个单用户系统 [在 NixOS 中安装和删除软件包][1]。
|
|
|
|
|
|
|
|
|
|
但是,如果你正在供多个用户使用,有一个很好的方法来分别满足每个用户的需求。
|
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
在本指南中,我将指导你如何在 NixOS 上设置一个 <ruby>主目录管理器<rt>Home Manager</rt></ruby>,以及如何使用它来安装软件包。
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
|
|
|
|
如果你是新读者,本系列中讨论的一些资源包括:
|
|
|
|
|
|
|
|
|
|
- [使用 NixOS 的原因][2]
|
|
|
|
|
- [在虚拟机上安装 NixOS][3]
|
|
|
|
|
- [安装 NixOS 后要做的事情][4]
|
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
### 在 NixOS 上设置主目录管理器
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
在本指南中,我将指导你通过 2 种方式来设置主目录管理器:
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
- 独立的主目录管理器(使用单独的配置文件)
|
2023-04-06 11:07:26 +08:00
|
|
|
|
- 作为一个 NixOS 模块(在 `configuration.nix` 文件中使用它)
|
|
|
|
|
|
|
|
|
|
那么,让我们从独立方式开始。
|
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
#### 独立安装的主目录管理器
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
2023-04-07 11:14:38 +08:00
|
|
|
|
如果你使用的是 NixOS 的稳定频道,你可以使用以下命令来配置主目录管理器:
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
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
|
|
|
|
|
```
|
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
最后,使用下面的命令来安装主目录管理器:
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
nix-shell '<home-manager>' -A install
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
🛠️ 在安装时,可能会出现以下错误:
|
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
![安装主目录管理器时出现构建错误][5]
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
|
|
|
|
重新启动你的系统并再次使用安装命令,它将开始安装。
|
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
一旦完成,它将显示独立安装的主目录管理器的位置:
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
![主目录管理器在NixOS中的位置][6]
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
#### 将主目录管理器安装为 NixOS 模块
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
> ⚠️ 如果你选择将主目录管理器作为 NixOS 模块使用,你将需要 sudo 权限。
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
如果你在一个稳定的频道上(在写本文的时候,是 `22.11`),你可以使用下面的命令来添加主目录管理器的稳定频道:
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
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>
|
|
|
|
|
```
|
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
![将主目录管理器安装为 NixOS 模块][7]
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
|
|
|
|
现在,跳到该行的末尾,在 `}` 前添加以下内容:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
home-manager.users.{username} = { pkgs, ... }: {
|
|
|
|
|
home.packages = [ ] ;
|
|
|
|
|
};
|
|
|
|
|
```
|
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
![NixOS 配置文件中的主目录管理器模块的格式][8]
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
|
|
|
|
上面这一行是为了方便安装和删除软件包而添加的,我接下来会告诉你。
|
|
|
|
|
|
|
|
|
|
现在,[保存修改并退出 Nano][9] 文本编辑器。
|
|
|
|
|
|
|
|
|
|
接下来,重建配置,并做一个切换:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
sudo nixos-rebuild switch
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
但如果你使用的是稳定版,并使用上述命令,就会出现以下错误:
|
|
|
|
|
|
|
|
|
|
> 🛠️ 错误: 选项 `home-manager.users.user.home.stateVersion` 被使用但没有定义:
|
|
|
|
|
|
|
|
|
|
![错误: 选项 `home-manager.users.user.home.stateVersion` 已被使用但未被定义。][10]
|
|
|
|
|
|
2023-04-07 11:14:38 +08:00
|
|
|
|
要解决这个问题,你必须在你的主目录管理器块中添加 `home.stateVersion`。
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
在写这篇文章时,我正在运行 22.11,所以整个主目录管理器块看起来像这样:
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
home-manager.users.{username} = { pkgs, ... }: {
|
|
|
|
|
home.stateVersion = "22.11";
|
|
|
|
|
home.packages = [ ] ;
|
|
|
|
|
};
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
![如何解决 `home-manager.users.user.home.stateVersion` 选项被使用但没有定义。][11]
|
|
|
|
|
|
|
|
|
|
保存修改,按 `Ctrl+O`,按回车键和 `Ctrl+X` 退出 Nano 文本编辑器。
|
|
|
|
|
|
|
|
|
|
现在,试着重建配置并再次进行切换,应该可以解决问题。
|
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
### 如何在 NixOS 上使用主目录管理器安装软件包
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
现在你已经安装了主目录管理器,如何用它来安装软件包:
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
#### 使用独立安装的主目录管理器
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
|
|
|
|
首先,用下面的方法打开配置文件:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
nano /home/$USER/.config/nixpkgs/home.nix
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
跳到行末,在 `}` 前添加以下代码块:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
home.packages = [];
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
现在,你所要做的就是在这两个大括号之间写上软件包的名称。
|
|
|
|
|
|
|
|
|
|
例如,如果我想安装 `htop`,我将得输入以下内容:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
home.packages = [pkgs.htop];
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
是的,你通常要在软件包的名称后面加上 `pkgs.`。
|
|
|
|
|
|
|
|
|
|
但是,如果你想在每次安装新包时不使用 `pkgs.`,可以改变代码块的语法,如图所示:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
home.packages = with pkgs; [];
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
而现在,你不再需要在每次安装时使用 `pkgs.`:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
home.packages = with pkgs; [htop];
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
例如,在这里,我想安装 `htop`、`firefox`和 `libreoffice`,所以我的 `home` 块会看起来像这样:
|
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
![在 NixOS 上使用主目录管理器安装多个软件包][12]
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
|
|
|
|
一旦你完成了添加你喜欢的软件包,保存配置文件并使用以下命令来安装软件包:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
home-manager switch
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 使用 NixOS 模块方式
|
|
|
|
|
|
|
|
|
|
首先,用以下命令打开 `configuration.nix` 文件:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
sudo nano /etc/nixos/configuration.nix
|
|
|
|
|
```
|
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
在配置部分,我已经添加了主目录管理器块,所以剩下的就是在 `home.packages = [ ];` 里面添加软件包的名称,格式如图所示:
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
home.packages = [ pkgs.package_name ] ;
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> 💡我已经在上节提到软件包名称前你可以使用 `pkgs.` 。
|
|
|
|
|
|
|
|
|
|
例如,如果我想 [安装 htop][13]、Firefox 和 LibreOffice,那么我将添加:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
pkgs.htop pkgs.firefox pkgs.libreoffice
|
|
|
|
|
```
|
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
然后我的主目录管理器块会看起来像这样:
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
2023-04-07 11:06:59 +08:00
|
|
|
|
![作为 NixOS 模块在主目录管理器中安装多个软件包][14]
|
2023-04-06 11:07:26 +08:00
|
|
|
|
|
|
|
|
|
现在,保存修改并退出文本编辑器。
|
|
|
|
|
|
|
|
|
|
接下来,重建配置并使用以下命令进行切换:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
sudo nixos-rebuild switch
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
这是这样!软件包将很快被安装。
|
|
|
|
|
|
|
|
|
|
### 这就结束了
|
|
|
|
|
|
|
|
|
|
我认为你应该选择独立安装,因为你不需要使用超级用户的权限。另外,如果你运行一个有多个用户的系统,为不同的用户拥有不同的配置文件是相当方便的。
|
|
|
|
|
|
|
|
|
|
因此,除非你想用一个文件来实现各种目的,否则我认为没有其他理由使用模块选项。
|
|
|
|
|
|
|
|
|
|
就这样,我结束了 NixOS 的初学者系列。我希望它能给你一个足够好的平台来熟悉这个独特的 Linux 发行版。
|
|
|
|
|
|
|
|
|
|
💬 你喜欢 NixOS 系列文章吗?对于 NixOS 的初学者,我们还有什么要介绍的吗?请提供你的宝贵意见。
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
via: https://itsfoss.com/home-manager-nixos/
|
|
|
|
|
|
|
|
|
|
作者:[Sagar Sharma][a]
|
|
|
|
|
选题:[lkxed][b]
|
|
|
|
|
译者:[wxy](https://github.com/wxy)
|
|
|
|
|
校对:[wxy](https://github.com/wxy)
|
|
|
|
|
|
|
|
|
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
|
|
|
|
|
|
|
|
|
[a]: https://itsfoss.com/author/sagar/
|
|
|
|
|
[b]: https://github.com/lkxed/
|
|
|
|
|
[1]: https://linux.cn/article-15645-1.html
|
|
|
|
|
[2]: https://linux.cn/article-15606-1.html
|
|
|
|
|
[3]: https://linux.cn/article-15624-1.html
|
|
|
|
|
[4]: https://linux.cn/article-15663-1.html
|
|
|
|
|
[5]: https://itsfoss.com/content/images/2023/02/building-error-while-installing-home-manager.png
|
|
|
|
|
[6]: https://itsfoss.com/content/images/2023/02/location-of-home-manager-in-NixOS.png
|
|
|
|
|
[7]: https://itsfoss.com/content/images/2023/02/install-home-manager-as-NixOS-module.png
|
|
|
|
|
[8]: https://itsfoss.com/content/images/2023/02/syantax-for-home-manager-module-in-NixOS-config-file.png
|
|
|
|
|
[9]: https://linuxhandbook.com/nano-save-exit/?ref=itsfoss.com
|
|
|
|
|
[10]: https://itsfoss.com/content/images/2023/02/The-option--home-manager.users.user.home.stateVersion--is-used-but-not-defined..png
|
|
|
|
|
[11]: https://itsfoss.com/content/images/2023/02/how-to-solve-The-option--home-manager.users.user.home.stateVersion--is-used-but-not-defined..png
|
|
|
|
|
[12]: https://itsfoss.com/content/images/2023/02/install-multiple-packages-using-home-manager-on-NixOS.png
|
|
|
|
|
[13]: https://itsfoss.com/use-htop/
|
|
|
|
|
[14]: https://itsfoss.com/content/images/2023/02/install-multiple-packages-in-home-manager-as-a-NixOS-module.png
|
|
|
|
|
[0]: https://img.linux.net.cn/data/attachment/album/202304/06/110641k8v9q1152hhhh114.jpg
|