NixOS 系列 #5:如何在 NixOS 上设置家庭管理员?

系统 Linux
在本指南中,我将指导你如何在 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中的位置

将家庭管理员安装为 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>

将家庭管理员安装为 NixOS 模块

将家庭管理员安装为 NixOS 模块

现在,跳到该行的末尾,在 ​​}​​ 前添加以下内容:

home-manager.users.{username} = { pkgs, ... }: {
home.packages = [ ] ;
};

NixOS 配置文件中的家庭管理员模块的格式

NixOS 配置文件中的家庭管理员模块的格式

上面这一行是为了方便安装和删除软件包而添加的,我接下来会告诉你。

现在,​​保存修改并退出 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

跳到行末,在 ​​}​​ 前添加以下代码块:

home.packages = [];

现在,你所要做的就是在这两个大括号之间写上软件包的名称。

例如,如果我想安装 ​​htop​​,我将得输入以下内容:

home.packages = [pkgs.htop];

是的,你通常要在软件包的名称后面加上 ​​pkgs.​​。

但是,如果你想在每次安装新包时不使用 ​​pkgs.​​,可以改变代码块的语法,如图所示:

home.packages = with pkgs; [];

而现在,你不再需要在每次安装时使用 ​​pkgs.​​:

home.packages = with pkgs; [htop];

例如,在这里,我想安装 ​​htop​​、​​firefox​​和 ​​libreoffice​​,所以我的 ​​home​​ 块会看起来像这样:

在 NixOS 上使用家庭管理员安装多个软件包

在 NixOS 上使用家庭管理员安装多个软件包

一旦你完成了添加你喜欢的软件包,保存配置文件并使用以下命令来安装软件包:

home-manager switch

使用 NixOS 模块方式

首先,用以下命令打开 ​​configuration.nix​​ 文件:

sudo nano /etc/nixos/configuration.nix

在配置部分,我已经添加了家庭管理员块,所以剩下的就是在 ​​home.packages = [ ];​​ 里面添加软件包的名称,格式如图所示:

home.packages = [ pkgs.package_name ] ;

💡我已经在上节提到软件包名称前你可以使用 ​​pkgs.​​ 。

例如,如果我想 ​​安装 htop​​、Firefox 和 LibreOffice,那么我将添加:

pkgs.htop pkgs.firefox pkgs.libreoffice

然后我的家庭管理员块会看起来像这样:

作为 NixOS 模块在家庭管理员中安装多个软件包

作为 NixOS 模块在家庭管理员中安装多个软件包

现在,保存修改并退出文本编辑器。

接下来,重建配置并使用以下命令进行切换:

sudo nixos-rebuild switch

这是这样!软件包将很快被安装。

这就结束了

我认为你应该选择独立安装,因为你不需要使用超级用户的权限。另外,如果你运行一个有多个用户的系统,为不同的用户拥有不同的配置文件是相当方便的。

因此,除非你想用一个文件来实现各种目的,否则我认为没有其他理由使用模块选项。

就这样,我结束了 NixOS 的初学者系列。我希望它能给你一个足够好的平台来熟悉这个独特的 Linux 发行版。

💬 你喜欢 NixOS 系列文章吗?对于 NixOS 的初学者,我们还有什么要介绍的吗?请提供你的宝贵意见。

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2023-03-14 16:40:17

2023-03-27 09:16:59

NixOSLinux

2023-03-08 15:51:06

NixOS

2023-03-21 12:57:16

NixOS软件包

2022-04-26 09:28:57

OpenBSDNixOSLinux 发行版

2017-10-19 09:28:34

LinuxNixOS安装

2014-02-28 10:08:52

密码策略系统管理员

2022-04-26 09:16:35

Linux照片扫描

2011-02-16 14:36:58

VMwareXenServer

2014-04-24 09:51:47

Linux管理员ACL集体权限

2019-11-20 10:45:02

Windows 10Windows管理员帐户

2018-12-21 19:30:28

Windows 10Windows管理员身份

2020-02-10 17:00:46

Linux清理垃圾系统管理员系统管理员

2018-12-11 11:00:50

Linux字体命令

2019-08-13 16:10:38

UbuntuLinux时间同步

2018-06-11 09:55:09

LinuxFedorazsh

2019-07-17 17:00:29

数据库数据库管理员DBA

2012-10-23 14:43:15

2010-06-07 21:01:45

管理员权限GPO

2009-01-12 09:59:00

网管DHCP网络管理
点赞
收藏

51CTO技术栈公众号