mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
624 字
2 分鐘
My NixOS config

最近開始玩 NixOS,使用的是 Windows 11 + NixOS 雙系統

這篇文章應該會不斷更新,畢竟我也沒到真的很熟 NixOS

disk partition#

我的習慣是在 Windows disk manager 壓一段 free space 安裝 Linux

進到 disk partition 界面,我會選擇 Manual partition,因為如果用 Replace partition, /boot 會寫在有 Windows boot manager 的 ESP 分區裡面

這會造成幾點影響:

  • 常見 ESP 只有 100MB 左右空間,正常來講應該是夠用,但 NixOS 有獨特的 generation/rollback 機制,會保留多個 boot generations 的 kernel/initrd,非常容易炸
  • 跟 Windows boot manager 共存的話,Windows update 有可能會動到 boot order

(那些驚嘆號只是 Windows fast startup 和特規空間無法解析而已~~,我的設定沒有問題的啦~~)

configuration.nix#

快捷指令#

因為在 NixOS 經常需要動到 configuration.nix 並且 rebuild,快捷指令會方便很多

environment.shellAliases = {
nixconf = "sudo nano /etc/nixos/configuration.nix";
sysup = "sudo nano /etc/nixos/configuration.nix && sudo nixos-rebuild switch --flake /etc/nixos#nixos";
};

sysup--flake /etc/nixos#nixos 如果沒有用到 flake 功能的話就可以不用加

fcitx5 chewing#

i18n.inputMethod = {
enable = true;
type = "fcitx5";
fcitx5.addons = with pkgs; [
fcitx5-chewing
fcitx5-gtk
qt6Packages.fcitx5-chinese-addons
];
};

有時後會遇到 Electron / Chromium 相容性問題,可以設定環境變數讓支援 Ozone 的程式優先使用 Wayland

environment.sessionVariables = {
NIXOS_OZONE_WL = "1";
};

grub#

NixOS 在 UEFI 系統預設還是較推薦 systemd-boot,我選擇 grub 單純是因為比較好看

boot.loader.systemd-boot.enable = false;
boot.loader.efi.canTouchEfiVariables = true;
boot.loader.efi.efiSysMountPoint = "/boot";
boot.loader.grub = {
enable = true;
efiSupport = true;
device = "nodev";
useOSProber = true;
};

星鐵主題#

Flake setup#

需要先在 configuration.nix 打開 flake 功能

nix.settings.experimental-features = [ "nix-command" "flakes" ];

接著手動建立 flake.nix:

Example flake.nix from NixOS Wiki

{
inputs.nixpkgs.url = github:NixOS/nixpkgs/nixos-unstable;
inputs.home-manager.url = github:nix-community/home-manager;
outputs = { self, nixpkgs, ... }@attrs: {
nixosConfigurations.fnord = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = attrs;
modules = [ ./configuration.nix ];
};
};
}

(切記將 fnord 改成你的 hostname)

接著初始化並套用,建議讓 flake 檔案被 git 追蹤

cd /etc/nixos
sudo git init
sudo git add flake.nix configuration.nix hardware-configuration.nix

然後 rebuild 就需要加上 flake 的參數

sudo nixos-rebuild switch --flake /etc/nixos

(如果還是用fnord就需要用--flake /etc/nixos#fnord)


設定完 flake 就可以直接用星鐵主題了

flake.nix 添加:

inputs.honkai-railway-grub-theme.url = "github:voidlhf/StarRailGrubThemes";

以及,如果使用上面官方的 flake.nix,我更推薦將裡面的 As-pattern 改成用 inputs:

outputs = { self, nixpkgs, honkai-railway-grub-theme, ... }@inputs: {
nixosConfigurations = {
nixos = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit inputs; };
modules = [ ./configuration.nix ];
};
};
};

不然 configuration 後續會很難維護

接著設定 configuration.nix:

第一行需要有 inputs 參數:

{ config, pkgs, inputs, ... }:

引入從 flake 傳送的模組:

imports = [
./hardware-configuration.nix
inputs.honkai-railway-grub-theme.nixosModules.x86_64-linux.default
];

然後設定主題,名稱需要和 themes 內名稱一樣

honkai-railway-grub-theme = {
enable = true;
theme = "Firefly";
};

其他#

強制使用新版 pnpm#

最近使用 Electron App 在 Nixpkgs 被鎖定在帶有漏洞的 pnpm-10.29.2,可以使用 overlay 功能將 pnpm_10_29_2 替換為更新的版本

nixpkgs.overlays = [
(final: prev: {
pnpm_10_29_2 = final.pnpm_10;
})
];

Windows / Linux 系統時間錯亂#

雙系統切換常導致系統時間相差8小時,原因是 Windows 和 Linux 對主機板硬體時間解讀不同


解法一: 將 Windows 改成讀取 UTC 時間

Terminal window
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /t reg_dword /d 1 /f

這似乎是最推薦的,但我沒用過,我是參考 dev.to/hopsayer


解法二: 將 Linux 改成讀取 RTC 時間

time.hardwareClockInLocalTime = true;
分享

如果這篇文章對你有幫助,歡迎分享給更多人!

部分資訊可能已經過時

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00