最近開始玩 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.nixfrom 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/nixossudo git initsudo 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 時間
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;部分資訊可能已經過時









