几个月前终于弄清楚如何设置我的系统,从那时起就一直愉快地使用它们,但意识到是时候更新东西了。我的 NixOS 设置涉及使用Home Manager进行声明式包管理,但完全忘记了基础知识,并且不确定 Home Manager 是否会使事情变得复杂,因为存储库只提到了我没有的工具。home-manager
tor*_*tte 21
长话短说
\n你在最新的频道吗?
\n(查看和设置方法见下文。)
sudo nix-channel --update
A。(声明式/NixOS)\nb。\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2 \xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0(临时)\nc。\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0(家庭管理员)(我认为)sudo nixos-rebuild switchnix-env -u \'*\'home-manager switch
无论是否使用 NixOS,这些步骤都应该有效。
\n注意-1(薄片):如果您使用薄片,那么这一切都不起作用,这是一个相当不错的赌注。
注意 2(NixOS + Home Manager):如果nixos-rebuild switch失败并出现神秘的错误消息,请查看您的 Home Manager 配置。至少,在过去的 5 年里,每当错误不明确时(例如,nix.maxJobs已弃用,取而代之nix.settings.max-jobs),总是与 Home Manager 有关。
第 1 步只会提取当前设置的nix-channel --update通道中的更改!要检查您当前订阅的内容,请发出
sudo nix-channel --list\nRun Code Online (Sandbox Code Playgroud)\n最新的NixOS手册的第4章升级NixOS将始终显示最新频道的名称和链接。Nix频道状态页面也是一个非常好的资源。
\n例如,我订阅了频道20.09,所以我需要21.11通过执行以下操作将其更新为
$ sudo nix-channel --list\nnixos https://nixos.org/channels/nixos-20.09\n\n$ sudo nix-channel --remove nixos\n$ sudo nix-channel --add https://nixos.org/channels/nixos-21.11 nixos\nRun Code Online (Sandbox Code Playgroud)\n更多信息:
\nNix 手册的4.4 通道部分是对 Nix 通道的简短介绍。
\nNixOS wiki 的Nix 通道文章更详细地介绍了细节,并对基本命令进行了很好的总结。(就我个人而言,我发现这个更有用。)
\n这对于声明性和“临时”[原文如此]设置3都是必需的:
\nsudo nix-channel --update\nRun Code Online (Sandbox Code Playgroud)\n尽管 Nix 手册有4.1 基本包管理部分,但最好在 NixOS 手册中进行记录(请参阅第 7 章包管理)。(尽管如此,我并没有发现直接从这些步骤中找出正确的步骤顺序;最大的帮助是这个 NixOS 讨论线程。)
\nHome Manager 似乎并没有使这个过程复杂化。(至少,我在 NixOS 上使用它,并且总是通过我的设置nixos-rebuild switch处理所有事情。)
\n\nNIXOS 用户提示
\n
\nnixos-rebuild switch --upgrade结合了步骤 1. 和步骤 2.,因为它“相当于更详细的nix-channel --update nixos; nixos-rebuild switch”。
NixOS 手册中引入了两个形容词“ad-hoc”[原文如此]和“声明性”来区分 Nix 包管理的两种模式3:
\n“ ad-hoc ”:使用nix-env. 1
“声明式”:在NixOS 手册中,这指的是在 NixOS 中将包声明为列表configuration.nix,但也可以通过许多其他方式来完成2。
命令:
\nA。要更新 NixOS\' 中声明的所有包configuration.nix,请使用:
sudo nixos-rebuild switch\nRun Code Online (Sandbox Code Playgroud)\nb. 要更新所有安装的软件包nix-env:
nix-env -u \'*\'\nRun Code Online (Sandbox Code Playgroud)\nC。要更新使用 Home Manager 安装的所有软件包:
\nhome-manager switch\nRun Code Online (Sandbox Code Playgroud)\n(我想。同样,我在 NixOS 中使用 Home Manager,并且从未接触过任何 Home Manager 命令。请参阅Home-manager 相当于 \xe2\x80\x9capt update\xe2\x80\x9d)
\n[1]:据我所知,NixOS 手册是唯一使用术语“ad-hoc [原文如此]包管理”的官方文档,并且仅表示使用nix-env.
(因此,我发现这个术语具有误导性,因为通过nix-shell -p命令或自定义shell.nix-es 使用包也是包管理的临时形式。而且,nix-env可能会很混乱。)
[2]:例如使用 Home Manager,使用shell.nix-es、flakes。(列出 flake 可能是不正确的,因为它是一种可以与 Home Manager 和 nix-shell Nix 表达式一起使用的机制......)
[3]:不确定 Nix 中“临时”、“声明式”和“命令式”包管理的含义是否达成共识;脚注1有我对“ad-hoc”的想法,有人说使用通道始终是包管理的命令式形式,所以“声明式”似乎超载了......
\n| 归档时间: |
|
| 查看次数: |
36155 次 |
| 最近记录: |