V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
ryan4yin
V2EX  ›  Linux

OS as Code - 我的 NixOS 使用体会

  •  3
     
  •   ryan4yin ·
    ryan4yin · 276 天前 · 3607 次点击
    这是一个创建于 276 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我 23 年 4 月开始尝试使用 NixOS ,而现在是 2024 年 2 月,距离我入坑 NixOS 刚好 10 个月,我当初写的新手笔记已经获得了大量好评与不少的赞助,并成为了整个社区最受欢迎的入门教程之一。自 2023 年 6 月我为它专门创建一个 GitHub 仓库与单独的文档站点以来,它已经获得了 1189 个 stars ,除我之外还有 37 位读者给它提了 PR:

    那么作为一个已经深度使用 NixOS 作为主力桌面系统接近 10 个月的熟手,我在这里也从另一个角度来分享下我的入坑体会。

    https://thiscute.world/posts/my-experience-of-nixos/

    36 条回复    2024-04-08 15:21:28 +08:00
    lucifer9
        1
    lucifer9  
       276 天前 via iPhone
    至少不适合 kde 用户吧
    amber0317
        2
    amber0317  
       276 天前
    @lucifer9 用 nix 管理 KDE 配置有点麻烦,对于默认配置用户来说感觉还好
    适配最好的还是一个配置文件打天下的 DM 那种
    lucifer9
        3
    lucifer9  
       276 天前 via iPhone
    目前只有 kde 支持 Xwayland 分数缩放效果最好。另外如果常用 app 有 qt 的有 gtk 的,sway 或者 hypr 下想保持类似的外观有点儿麻烦
    ryan4yin
        4
    ryan4yin  
    OP
       276 天前
    @lucifer9 我只在 NixOS 用过 i3/hyprland ,KDE 确实不太了解
    param
        5
    param  
       276 天前 via Android
    想换 Nix 好多年了。。但因为用好了 Arch ,切换又要学习成本和适应成本。
    ltkun
        6
    ltkun  
       276 天前 via Android
    nix 找了一篇简介看了半天 没看懂是啥 还是 Arch 文档多 官方都有中文哈 查了下 wiki 也没中文条目 一看发行日期 2003 好吧 那时候在用 gentoo 后来换 Debian Ubuntu
    ryan4yin
        7
    ryan4yin  
    OP
       276 天前
    @ltkun 文档一直是 Nix 最大的痛点,官方英文文档都一团糟,更别说中文了。所以我直接自己写了一份...
    zeromake
        8
    zeromake  
       276 天前
    wayland hidpi 下的 vscode ( chrome 有相同问题) 一直有各种问题,ime 一直搞不定,更新的太新了还会导致不能适配 hidpi 然后很模糊……,重点是 ime 还是不能用,没有 vscode 暂时不打算搞 linux 了
    AlicFeng
        9
    AlicFeng  
       276 天前
    极力推荐 `ElementoryOS` 操作系统,很舒服、很爽!大学时期使用至今,八年的时间了
    Maboroshii
        10
    Maboroshii  
       276 天前   ❤️ 1
    @zeromake 现在 fcitx5 在 wayland+kde 下的 chrome 系问题不大了 ,愿意折腾的话,可以再试试。 参考 https://wiki.archlinuxcn.org/wiki/Fcitx5 以及 https://wiki.archlinuxcn.org/wiki/Wayland
    mikasyou
        11
    mikasyou  
       275 天前
    我的 vscode 在 hyprland 上以原生 wayland 没啥大问题,就是不知道为什么 chromium 系的窗口软件切换焦点时,输入法就无效了,必须用一个 gtk/qt 窗口刷新下焦点才行。不过也还好。。。为了平铺忍了
    youknowiam
        12
    youknowiam  
       275 天前
    Gentoo 路过,舒服
    sky96111
        13
    sky96111  
       275 天前
    @zeromake hidpi 模糊的问题,两个选择,要么打开 DE 的分数缩放功能,要么 Chrome/Chromium/Electron app 启动时加参数 --disable-features=WaylandFractionalScaleV1
    https://www.reddit.com/r/archlinux/comments/13gtogn/chrome_browser_blurry_text_after_gnome_441_update/

    IME 没法用没什么办法,谷歌不解决
    yzld2002
        14
    yzld2002  
       275 天前   ❤️ 1
    @lucifer9 #3 https://github.com/pjones/plasma-manager
    我在用这个配置 KDE ,感觉还不错
    winson030
        15
    winson030  
       275 天前 via iPhone
    @ryan4yin 谢谢你给了我转 nix pm 的信心。我打算接下来把 mba 重置,用 nix 管理我的 mba 。
    Moming
        16
    Moming  
       275 天前
    之前尝试过 NixOS ,感觉用不来,很多包都是社区成员提供的,有些过期不能用的也没办法,也极少有官方来维护的。最后还是自己滚 fedora ,基本的环境配置搞一份同步到 GitHub ,有需要的环境走 Docker ,毕竟这个很多 image 都是有官方维护的版本,需要自己写的也可以抄抄搞一个出来。
    licolicoli
        17
    licolicoli  
       275 天前
    NixOS 最痛苦的事情莫过于你想要改某些系统文件而打包者并没有提供相应的选项,这样你就只能自己叠加 overlay, 然而叠完 overlay 的包 hash 会变,于是一连串的包哈希跟着变,于是你再也没法命中二进制缓存,喜提一个大部分包需要你自己编译的系统 XD
    Cooky
        18
    Cooky  
       275 天前 via Android
    不能替换 systemd 的话 nixos 相对来说没什么实质性的进步
    ryan4yin
        19
    ryan4yin  
    OP
       275 天前
    > 这样你就只能自己叠加 overlay, 然而叠完 overlay 的包 hash 会变

    @licolicoli 目测你用法错了,或者说你是很久以前试用过 NixOS.
    现在的用法是这样的:

    1. 如果只是想改某个包,你首先应该考虑直接在需要的时候 override 而不是直接 overlay ,这类似生成一个局部变量,系统中其他包依赖的还是没改过的版本
    2. 如果你要改一堆东西,那首先应该考虑在你需要的地方 new 一个新的 nixpkgs 实例,这同样类似局部变量,不过比方法一改的范围要更广一些
    3. 只有在你确认你需要整个修改系统中的这个包的时候,才应该使用全局的 overlay ,但这就会导致你说的,导致大量的本地编译。
    xiaokanhongchen
        20
    xiaokanhongchen  
       275 天前
    我试过各种系统,就 nix 给我的感觉,无从下手,其实想想,还是 arch 官方文档最好了,什么都很清楚,知道从哪里着手,nix 试过了,实在是不知道从哪里入手,就看一大堆人推荐,要是有个简明快速上手指南就好了。
    ryan4yin
        21
    ryan4yin  
    OP
       275 天前
    @xiaokanhongchen 我这帖子最前面就给了我写的的入门教程啊,如果你想试试 NixOS 的话不妨一看。
    不过只面向 nix 用户的教程,目前就只有官方的 nix.dev 了,我这份可以用做参考。
    xiaokanhongchen
        22
    xiaokanhongchen  
       275 天前
    @ryan4yin 看了一遍,准备在硬盘上装个试试。我简单的理解了一下,类似 docker-compose.yml 配置一样,配置好,容器启动就跟你想要的一样,是不是 nix 也是类似的?也就是一份配置文件,走到哪里安装好都一样的系统和软件配置?
    ryan4yin
        23
    ryan4yin  
    OP
       274 天前
    @xiaokanhongchen 是这样的,我入坑时在一台虚拟机上花了 20 天,把我之前的 EndeavourOS + i3wm 配置完全迁移到了 NixOS 上,然后在 PC 上装了个全新的 NixOS ,改一点硬件相关的配置,再一行命令部署,就得到了跟我虚拟机完全一致的环境。
    这份教程最初就来自我那 20 天的入坑学习笔记。
    licolicoli
        24
    licolicoli  
       274 天前
    @ryan4yin 我当时是在 Pixelbook 上装的 NixOS, 因为音频有问题,需要为 alsa-ucm-conf 加上特定的配置文件,没记错的话是在 overlay 里通过修改 installPhase 的方式把文件复制进去的,似乎也只有最后一种方法?

    配置附上: https://docs.chrultrabook.com/docs/installing/distros.html

    另外我感觉 NixOS 是有针对各种不同的机器作优化配置,例如这里的 [nixos-hardware]( https://github.com/NixOS/nixos-hardware),但似乎 Pixelbook 的配置是个空壳。
    ryan4yin
        25
    ryan4yin  
    OP
       274 天前
    @licolicoli 听起来你肯定用错方式了,你需要的只是加个配置文件,不是重新编译,因此非常大的概率你可以通过方法一或者方法二搞定这件事。
    ryan4yin
        26
    ryan4yin  
    OP
       274 天前
    @licolicoli 你提供的文档我看了,它使用的确实是 overlays ,但这不是最佳方案。

    能避免大量编译的写法是这样的,把它文档中的第二部分 overlays 删掉,再把第三部分的代码改成这样:

    ```nix
    # configuration.nix
    {
    # ...

    environment = {
    systemPackages = [
    pkgs.alsa-ucm-conf.overrideAttrs (old: {
    wttsrc = (fetchFromGitHub {
    owner = "WeirdTreeThing";
    repo = "chromebook-ucm-conf";
    rev = "484f5c581ac45c4ee6cfaf62bdecedfa44353424";
    hash = "sha256-Jal+VfxrPSAPg9ZR+e3QCy4jgSWT4sSShxICKTGJvAI=";
    });
    installPhase = ''
    runHook preInstall

    mkdir -p $out/share/alsa
    cp -r ucm ucm2 $out/share/alsa

    mkdir -p $out/share/alsa/ucm2/conf.d
    cp -r $wttsrc/{hdmi,dmic}-common $wttsrc/GENERATION/* $out/share/alsa/ucm2/conf.d

    runHook postInstall
    '';
    })
    ];
    sessionVariables = {
    ALSA_CONFIG_UCM2 = "${pkgs.alsa-ucm-conf}/share/alsa/ucm2";
    };
    };
    }
    ```
    ryan4yin
        27
    ryan4yin  
    OP
       274 天前
    @licolicoli V2EX 的代码渲染有点糟糕,你 copy 过去自己格式化一下吧...
    ryan4yin
        28
    ryan4yin  
    OP
       274 天前
    测了没问题的话,可以提个 PR 给他们优化一下,它这示例里还有多余的反斜线啊。
    licolicoli
        29
    licolicoli  
       274 天前
    @ryan4yin 多谢老哥!开学这几天比较忙,我过几天试一下。看来还是要多学习啊。
    tywtyw2002
        30
    tywtyw2002  
       273 天前
    nix-darwin 目前有工具可以把 macos 上当前的配置导出成 nix-darwin 配置吗?

    还是说 nix-darwin 目前要从 0 开始配?
    ryan4yin
        31
    ryan4yin  
    OP
       272 天前
    @tywtyw2002 目前 NixOS 都没有这种工具,更别说 nix-darwin 了。
    你需要自己研究清楚系统里到底装了啥,再手动编写对应的 nix 配置。
    如果你用的是 homebrew 的话,它能导出 brewfile 供参考。
    tywtyw2002
        32
    tywtyw2002  
       272 天前 via iPhone
    @ryan4yin linux 好说 系统没什么设置,主要设置还是 wm 那些,用 dot 就行了。
    mac 的话用个 3-4 年,你连设置了什么都不知道了。
    ryan4yin
        33
    ryan4yin  
    OP
       272 天前
    @tywtyw2002 所以才需要 nix-darwin 这种工具
    Sliverburger
        34
    Sliverburger  
       230 天前
    最近被同事种草了 Nix ,我看了下 Nix 主要还是包管理和配置管理吧?理论讲应该可以使用 Archlinux 搭配 Nix 做包和配置管理 而不用 NixOS 是不是?
    ryan4yin
        35
    ryan4yin  
    OP
       230 天前
    @Sliverburger Nix 社区这么用的人挺多的,除 NixOS 外用户最大的群体应该是 nix-darwin ,也就是在 macOS 上用 Nix 包管理器。
    排名第三的应该就是想在非 NixOS 上用 Nix 的群体。
    ryan4yin
        36
    ryan4yin  
    OP
       230 天前
    @Sliverburger 不过我得说 NixOS 才是完全体,在其他 OS 上用 Nix 还是差了点意思。
    所以从来没在别的 Linux 发行版上用过 Nix ,入坑后就一直 All in NixOS 了.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2759 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 08:16 · PVG 16:16 · LAX 00:16 · JFK 03:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.