跳过正文

随心一记

·

最近 AUR 上又有一些投毒活动,让我不得不考虑是否还应该继续使用 AUR 来安装未被官方支持的包。我想到了用 nix 来作为替代方案,原因是 nixpkgs 包多且在审核方面要比 AUR 好得多,但由于 nix 对我来说太复杂了,我也不想花时间在学习 nix 上,因此我只想将 nix 作为一个包管理器而非直接将现有系统换成 nixos。

我的假设场景是不用 root 权限,把 nix 直接扔进 distrobox 里,看能不能方便的使用。当然,我也考虑过直接在主机上,但是看了一些文档后,发现或多或少都绕不开 sudo,所以我才想到把 nix 扔进容器里,看里面的 sudo 是否可以瞒过 nix。

对于将 nix 作为包管理器,我看了一些文档后总结了两种用 nix 安装包的方式:1. 使用 nix-env 命令安装;2. 使用 Home Manager 管理。最终我选择了 Home Manager。

首先是 nix 的安装,我最初尝试了直接使用容器里自带的包管理器安装 nix,后来安装 Home Manager 时报了一些错误,大致提示是找不到 NIX_PATH 这个环境变量,有点纳闷,找了一圈也没找到什么解决方案,推测大概是安装 nix 的方式有问题,后来看了下 nix 官网的安装方式,知道了安装方式分两种(一种多用户,一种单用户),通过包管理器安装 nix 应该属于多用户安装,而多用户要求在带有 systemd 的环境中安装,而在 distrobox 里没带 systemd。。。(虽然也可以将 distrobox 配置成带 systemd)。换成单用户安装后就可以成功安装 Home Manager 了,ok,安装完成。

成功安装完 Home Manager 后,我粗略看了下 Home Manager 的配置,尝试写了几个包,然后运行 home-manager switch(不得不说,看着滚动的输出挺爽的),没有意外的,在运行完命令后声明的包安装好了。另外,我看到在非 nixos 上如果通过 nix 安装的软件包要访问 GPU,还需要进行额外的配置,大概只需要在 Home Manager 配置中加上 targets.genericLinux.enable = true; 这一行并运行输出中的一条命令后应该就没问题了,我也能够接受这种局限。

在安装完几个包并成功运行后,我想着把这些用 distrobox-export 导出去,这样我就不用每次输入进入容器的命令了,然后从主机由创建的快捷方式启动应用,发现不行,在将 .desktop 文件里的命令拷贝出来并运行后,有以下输出:

executable file `kitty` not found in $PATH: No such file or directory: 

唔,看上去是通过 nix 下载的包不在 $PATH 的路径里,随后我尝试将 nix 的 bin 目录添加到 $PATH,但还是不行(十分奇怪,网上也没多少在类似 toolbx 或者 distrobox 里运行 Home Manager 的案例),最后发现通过将 nix bin 目录下的文件链接到 /usr/bin/usr/local/bin 这些目录里有用,但怎么说呢,挺不方便的。另外,通过 nix 安装的包也没带什么命令补全,甚至 Home Manager 也没有,至少安装 nix 或者 Home Manager 并不会自动配置命令自动补全,在尝试了手动配置命令补全的几种方法后,也还是没成功配置,文档好难找,力竭了。。。

于是,有了上面提到的这些问题后,我放弃了使用 nix 作为包管理器(很难想象那些 nix 高手是怎么过来的)。与其使用 nix 和 Home Manager 作为包安装方式,不如用 toolbx 或者 distrobox 多创一个 Debian 或者 Fedora 容器,反正 nix 安装包也挺占存储的(虽说有 Garbage Collection)

作者
星空
美柑、小暗、菈菈、梦梦、娜娜、唯、唐音、静酱、凪乃、楠莉前辈、爱爱酱、娜迪老师、红叶酱、亚爱子、百八老师、樱学姐、黒車掌,你们带我走吧😭