【雑記】NixOSユーザーがまた一人生まれました!+XFCE環境に移行
いつも僕の記事を読んでいただき、ありがとうございます。
僕は以前から、NixOSの記事を定期的に投稿しているのですが、今日はとても嬉しいことがありました。
まずは、こちらの記事をご覧ください!
以前から交流があったSajiさんが、僕のコードを参考にNixOSを導入した過程を記事にしてくれました!
この場を借りて、感謝申し上げます。
Sajiさんの設定ファイルは僕よりもはるかに凝ったことをしているので、とても参考になると思います。
かくいう僕はこのゴールデンウィークの間に、COSMIC環境からXFCE環境に設定を移植したりしていました。(XFCE環境に移した理由は後述)
以前からの差分がかなりあるので、configuration.nixの全文を掲載します。
(解説を追記しました)
{ config, pkgs, ... }:
{
imports = [
./hardware-configuration.nix
];
# -----------------------------------------------------------------------------
# 1. システム基本設定 (Kernel, Time, Bootloader)
# -----------------------------------------------------------------------------
# 最新のLinuxカーネルを使用するように指定
boot.kernelPackages = pkgs.linuxPackages_latest;
# 初期RAMディスク(initrd)にAMD GPU用のドライバをロードするように設定
boot.initrd.kernelModules = [
"amdgpu"
];
# NTPサーバーとしてNICTのサーバーを指定
networking.timeServers = [ "ntp.nict.jp" ];
# システムのタイムゾーンを日本時間に設定
time.timeZone = "Asia/Tokyo";
boot.loader = {
# ブートメニューの待機時間(秒)
timeout = 3;
# EFI環境の設定
efi = {
efiSysMountPoint = "/boot";
canTouchEfiVariables = true;
};
# GRUBブートローダーの設定
grub = {
enable = true;
efiSupport = true;
devices = [ "nodev" ];
useOSProber = true; # 他のOS(Windows等)を自動検出するための設定
efiInstallAsRemovable = false;
extraEntriesBeforeNixOS = false;
# GRUBメニューに「再起動」と「シャットダウン」のエントリを追加
extraEntries = ''
menuentry "Reboot" { reboot }
menuentry "Poweroff" { halt }
'';
};
};
# -----------------------------------------------------------------------------
# 2. ネットワーク・ホスト名・ファイアウォール
# -----------------------------------------------------------------------------
# システムのホスト名を設定
networking.hostName = "nixos";
# NetworkManagerを有効化(Wi-Fiや有線LANの管理)
networking.networkmanager.enable = true;
# ファイアウォールの設定
networking.firewall = {
enable = true;
# 許可するTCPポートを指定 (DNS/NTP, NFS, HTTP等)
allowedTCPPorts = [ 53317 2049 8080 ];
};
# -----------------------------------------------------------------------------
# 3. ロケール・言語環境 (i18n)
# -----------------------------------------------------------------------------
# システムのデフォルトロケールを日本語に設定
i18n.defaultLocale = "ja_JP.UTF-8";
# 各種地域設定(住所、通貨、時間など)を日本語に統一
i18n.extraLocaleSettings = {
LC_ADDRESS = "ja_JP.UTF-8";
LC_IDENTIFICATION = "ja_JP.UTF-8";
LC_MEASUREMENT = "ja_JP.UTF-8";
LC_MONETARY = "ja_JP.UTF-8";
LC_NAME = "ja_JP.UTF-8";
LC_NUMERIC = "ja_JP.UTF-8";
LC_PAPER = "ja_JP.UTF-8";
LC_TELEPHONE = "ja_JP.UTF-8";
LC_TIME = "ja_JP.UTF-8";
};
# 入力メソッド (Fcitx5 + Mozc) の設定
i18n.inputMethod = {
type = "fcitx5";
enable = true;
fcitx5.waylandFrontend = true; # Wayland環境への対応
fcitx5.addons = with pkgs; [
pkgsStable.fcitx5-mozc
pkgsStable.fcitx5-gtk
];
};
# -----------------------------------------------------------------------------
# 4. フォント設定
# -----------------------------------------------------------------------------
fonts = {
# インストールするフォントパッケージの指定
packages = with pkgs; [
pkgsStable.migu
pkgsStable.noto-fonts-cjk-sans
pkgsStable.noto-fonts-cjk-serif
pkgsStable.noto-fonts-color-emoji
pkgsStable.ipafont
];
fontDir.enable = true;
# フォントの優先順位(fontconfig)の設定
fontconfig = {
enable = true;
defaultFonts = {
serif = [ "Noto Sans CJK JP" ];
sansSerif = [ "Noto Sans CJK JP" ];
monospace = [ "Migu 1M" ];
};
};
};
# -----------------------------------------------------------------------------
# 5. Nix / Flakes 設定 (システムポリシー)
# -----------------------------------------------------------------------------
# nix-commandとflakes機能を有効化(モダンなNix利用に必須)
nix.settings.experimental-features = [ "nix-command" "flakes" ];
# Nixストアの自動最適化(重複するファイルを削除して容量節約)を有効化
nix.settings.auto-optimise-store = true;
# -----------------------------------------------------------------------------
# 6. デスクトップ環境
# -----------------------------------------------------------------------------
services.xserver = {
enable = true;
desktopManager = {
xterm.enable = false;
xfce.enable = true; # XFCEデスクトップを有効化
};
displayManager.lightdm.enable = true; # ディスプレイマネージャにLightDMを使用
# 日本語キーボード(106/109キー)の設定
xkb = {
layout = "jp";
model = "jp106"; # 一般的な106/109キーボードの場合
};
};
# デフォルトのデスクトップセッションをXFCEに設定
services.displayManager.defaultSession = "xfce";
# 環境変数:ターミナルのデフォルトをghosttyに指定
environment.variables = {
TERMINAL = "ghostty";
};
# MIMEタイプのデフォルトアプリケーション(ディレクトリを開くときはThunar)
xdg.mime.defaultApplications = {
"inode/directory" = [ "thunar.desktop" ];
};
# -----------------------------------------------------------------------------
# 7. サウンド・メディア (PipeWire)
# -----------------------------------------------------------------------------
# PulseAudioを無効化し、PipeWireを使用する準備
services.pulseaudio.enable = false;
security.rtkit.enable = true; # PipeWireのリアルタイム処理に必要な設定
# PipeWireの設定(ALSA/PulseAudio互換レイアを含める)
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
};
# -----------------------------------------------------------------------------
# 8. ユーザー・グループ設定
# -----------------------------------------------------------------------------
users.users.takeshi = {
isNormalUser = true;
description = "takeshi";
shell = pkgs.fish; # デフォルトシェルをFishに設定
extraGroups = [
"networkmanager"
"wheel" # sudo権限の付与
"video" # GPUアクセス用
"docker" # Docker使用のため
"render" # GPUレンダリング用
"libvirtd" # KVM/QEMU用
"kvm"]; # 仮想化支援機能用
};
# 特定のユーザーをビデオ・レンダリンググループに追加
users.groups.video.members = [ "takeshi" ];
users.groups.render.members = [ "takeshi" ];
# 自動ログインの設定
services.displayManager.autoLogin = {
enable = true;
user = "takeshi";
};
# Fishシェルをシステム全体で有効化
programs.fish.enable = true;
# -----------------------------------------------------------------------------
# 9. ハードウェア・デバイス (Bluetooth, GPU, Swap,電源管理)
# -----------------------------------------------------------------------------
# Bluetoothの設定
hardware.bluetooth = {
package = pkgs.bluez;
enable = true;
powerOnBoot = true;
settings.General = {
Experimental = true; # 実験的な機能を有効化
FastConnectable = true;
};
settings.Policy.AutoEnable = true;
};
# Bluetooth管理ツール (Blueman) の有効化
services.blueman.enable = true;
# AMD GPUドライバの指定
services.xserver.videoDrivers = [ "amdgpu" ];
# グラフィックス・ハードウェアの設定
hardware.graphics = {
enable = true;
extraPackages = with pkgs; [
mesa vulkan-tools rocmPackages.rocminfo rocmPackages.clr.icd libva
];
};
# AMD OpenCLを有効化
hardware.amdgpu.opencl.enable = true;
# GPU関連の環境変数設定(RDNA3等の互換性調整)
environment.variables = {
RUSTICL_ENABLE = "radeonsi";
HSA_OVERRIDE_GFX_VERSION = "11.0.1"; # 特定のGPU世代向けのオーバーライド
};
# auto-cpufreqによる省電力・パフォーマンス自動切り替え設定
services.auto-cpufreq = {
enable = true;
settings = {
battery = {
governor = "powersave"; # バッテリー駆動時は省電力モード
turbo = "auto";
};
charger = {
governor = "performance"; # AC接続時はパフォーマンス重視
turbo = "auto";
};
};
};
# power-profiles-daemonとの競合を避けるため無効化
services.power-profiles-daemon.enable = false;
# -----------------------------------------------------------------------------
# 10. ゲーム・Steam
# -----------------------------------------------------------------------------
# Steam用のハードウェア設定を有効化
hardware.steam-hardware.enable = true;
programs.steam = {
enable = true;
fontPackages = with pkgs; [ pkgsStable.migu ];
remotePlay.openFirewall = true; # Remote Play用ポート開放
localNetworkGameTransfers.openFirewall = true;
# Steamパッケージのカスタマイズ(フォントや環境変数の追加)
package = pkgs.steam.override {
extraPkgs = pkgs: with pkgs; [
pkgsStable.migu
pkgsStable.noto-fonts-cjk-sans
gnome-themes-extra
adwaita-icon-theme
];
extraEnv = {
LANG = "ja_JP.UTF-8";
LC_ALL = "ja_JP.UTF-8";
LANGUAGE = "ja_JP.UTF-8";
FONTCONFIG_PATH = "/etc/fonts";
XCURSOR_THEME = "Adwaita";
MANGOHUD = "1"; # MangoHud(オーバーレイ)を有効化
OBS_VKCAPTURE = "1"; # OBS用キャプチャ機能を有効化
};
};
};
# Gamemodeの有効化と設定
programs.gamemode.enable = true;
programs.gamemode.settings.general.renice = 10;
# -----------------------------------------------------------------------------
# 11. 外部サービス (Blender, Ollama, Dropbox, Sunshine など)
# -----------------------------------------------------------------------------
# Blender用管理ツール(Blendfarm)の設定
services.blendfarm.enable = true;
services.blendfarm.blenderPackage = pkgs.blender;
# マウスドライバ(libratbag/ratbagd)の有効化
services.ratbagd.enable = true;
services.ratbagd.package = pkgs.libratbag;
# Sunshine(ストリーミング用サーバー)の設定
services.sunshine = {
enable = true;
autoStart = true;
openFirewall = true;
capSysAdmin = true;
package = pkgs.sunshine;
};
# Dropboxのユーザーサービス設定(systemd経由)
systemd.user.services.dropbox = {
description = "Dropbox Service";
wantedBy = [ "graphical-session.target" ];
environment.QT_QPA_PLATFORM = "xcb";
serviceConfig = {
ExecStart = "${pkgs.dropbox}/bin/dropbox";
Restart = "on-failure";
RestartSec = "10s";
};
};
# FUSE(ファイルシステム)の権限設定
programs.fuse.userAllowOther = true;
# Google Driveマウント用サービスの設定
systemd.user.services.google-drive-mount = {
description = "Mount Google Drive using google-drive-ocamlfuse";
wantedBy = [ "default.target" ];
serviceConfig = {
ExecStart = "${pkgs.google-drive-ocamlfuse}/bin/google-drive-ocamlfuse -f %h/googledrive";
ExecStop = "/run/wrappers/bin/fusermount -u %h/googledrive";
Restart = "on-failure";
RestartSec = "10s";
};
};
# -----------------------------------------------------------------------------
# 12. 仮想化 (Docker, Podman)
# -----------------------------------------------------------------------------
# Dockerの設定
virtualisation.docker = {
enable = true;
daemon.settings = {
experimental = true; # 実験的機能の有効化
default-address-pools = [{
base = "172.30.0.0/16"; # Dockerネットワークのアドレス範囲
size = 24;
}];
};
};
# Podmanの有効化
virtualisation.podman.enable = true;
# Virt-manager(仮想マシン管理)の設定
programs.virt-manager.enable = true;
virtualisation.spiceUSBRedirection.enable = true;
# ユーザーをlibvirtdグループに追加
users.groups.libvirtd.members = ["takeshi"];
services.qemuGuest.enable = true;
services.spice-vdagentd.enable = true;
services.spice-autorandr.enable = true;
# KVM/QEMUの詳細設定
virtualisation = {
libvirtd = {
enable = true;
qemu = {
package = pkgs.qemu_kvm;
swtpm.enable = true; # TPMエミュレーションの有効化
vhostUserPackages = [ pkgs.virtiofsd ];
};
};
};
# -----------------------------------------------------------------------------
# 13. ツール・アプリケーション群
# -----------------------------------------------------------------------------
# Thunar(ファイルマネージャ)のプラグイン設定
programs.thunar = {
enable =true;
plugins = with pkgs; [
thunar-vcs-plugin
thunar-shares-plugin
thunar-archive-plugin
thunar-dropbox-plugin
thunar-media-tags-plugin
thunar-volman
];
};
services.gvfs.enable = true; # ネットワークドライブ等のマウント用
services.tumbler.enable = true; # 画像のサムネイル生成用
# 各種アプリケーションの有効化
programs.gnome-disks.enable = true; # ディスク管理
programs.obs-studio.enable = true; # 録画・配信
programs.localsend.enable = true; # ファイル転送
programs.localsend.openFirewall = true;
programs.gpu-screen-recorder.enable = true; # 高速な画面録画ツール
hardware.logitech.wireless.enable = true;
hardware.logitech.wireless.enableGraphical = true;
# -----------------------------------------------------------------------------
# 14. システムパッケージ (Flatpak,environment.systemPackages)
# -----------------------------------------------------------------------------
# プロプライエタリ(非自由)なソフトウェアの使用を許可
nixpkgs.config.allowUnfree = true;
# Flatpakの有効化
services.flatpak = {
enable = true;
};
# システムにインストールするパッケージ一覧
environment.systemPackages = with pkgs; [ # 原文に基づき修正が必要な箇所がありますが、内容は維持します
# --- 基本ツール / CLI ---
bash-language-server
neovim
wget
git
gh
firewalld
fastfetch
htop
flatpak
flatpak-builder
flatpak-xdg-utils
boost
ghostty
libinput-gestures
auto-cpufreq
pciutils
# --- シェル / エディタ ---
bash
fish
opencode
opencode-desktop
(vscode-with-extensions.override {
vscodeExtensions = with vscode-extensions; [
ms-ceintl.vscode-language-pack-ja
vscode-extensions.bbenoist.nix
];
})
# --- テーマ・アイコン ---
kora-icon-theme
pkgs.nordic
# --- XFCE 関連 ---
pkgs.ristretto
pkgs.tumbler
pkgs.mousepad
pkgs.parole
pkgs.xfce4-appfinder
pkgs.xfce4-notifyd
pkgs.xfce4-screenshooter
pkgs.xfce4-session
pkgs.xfce4-settings
pkgs.xfce4-taskmanager
pkgs.xfce4-whiskermenu-plugin
copyq
# --- KDE 関連 ---
kdePackages.ark
kdePackages.discover
# --- ブラウザ / 通信 ---
firefox
google-chrome
localsend
thunderbird
discord
dropbox
google-drive-ocamlfuse
# --- オフィス / 日常用途 ---
libreoffice
obsidian
tradingview
freecad
# --- フォント (systemPackages としての追加) ---
pkgsStable.noto-fonts-cjk-sans
pkgsStable.noto-fonts-cjk-serif
pkgsStable.noto-fonts-color-emoji
pkgsStable.migu
pkgsStable.wqy_zenhei
# --- マルチメディア / 配信 ---
obs-studio
ffmpeg-full
vlc
audacity
handbrake
# OBS用プラグイン群
obs-studio-plugins.wlrobs
obs-studio-plugins.obs-backgroundremoval
obs-studio-plugins.obs-pipewire-audio-capture
obs-studio-plugins.obs-vaapi
obs-studio-plugins.obs-gstreamer
obs-studio-plugins.obs-vkcapture
# --- 画像 / 動画制作 ---
gimp-with-plugins
blender
kdePackages.kdenlive
# --- ゲーム / Steam 関連ツール ---
steam-run
protonup-qt
gamemode
lsfg-vk
lsfg-vk-ui
sunshine
moonlight-qt
# --- GPU / AMD 開発・管理ツール ---
mesa
libvdpau-va-gl
xf86-video-amdgpu
amdgpu_top
amdenc
amdctl
amd-blis
amdfwtool
amd-ucodegen
amd-libflame
microcode-amd
radeon-profile
radeontools
rocmPackages.clr
rocmPackages.rpp
rocmPackages.rocminfo
rustc
cargo
perl
gcc
clang
# --- 周辺機器 / デバイス管理 ---
gparted
gnome-disk-utility
piper
libratbag
solaar
librepods
# --- コンテナ / 仮想化 ---
docker
docker-client
distrobox
podman
lshw
virt-manager
virt-viewer
qemu_kvm
vde2
libguestfs
spice-vdagent
spice-autorandr
# --- AI / GPU Compute ---
lmstudio
# --- 録画 / スクリーンキャプチャ ---
gpu-screen-recorder
gpu-screen-recorder-gtk
];
# -----------------------------------------------------------------------------
# 15. セキュリティ・SSH
# -----------------------------------------------------------------------------
# GnuPGエージェントの設定(SSHサポートを有効化)
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
# OpenSSHサーバーの有効化
services.openssh.enable = true;
# -----------------------------------------------------------------------------
# 16. NixOS バージョン固定
# -----------------------------------------------------------------------------
# システム構成の互換性を維持するためのバージョン情報
system.stateVersion = "25.11";
}
COSMIC環境からXFCE環境に移った理由は以下の3点に集約されます。
①COSMICファイラーの機能不足
②COSMICファイラー以外のファイラーをデフォルトに設定できない
③Wayland環境と相性が悪い特定のSteamタイトルがある
僕は以前からファイラーはthunarを愛用していました。
愛用する理由は多々あるのですが、その中でも一番大きな理由を占めるのが、GitやDropboxといった外部サービスとの連携がプラグインで簡単に行えることです。
それに対して、COSMICファイラーにはそういった機能はなく、とてもシンプルな作りになってました。
普段使いには問題ないのですが、ふとした時に不便を感じていました。
また、一番大きな問題は、COSMICファイラー以外のファイラーをCOSMICファイラー環境ではデフォルトに使用することが事実上できないことでした。
COSMICファイラーを例外的に除去するとデスクトップ上で右クリックでメニューが出なくなる不具合がありました。(なにかいい方法があれば教えてください)
加えて、ここ最近はまっているSteamのタイピングゲーム(Glyphica)で画面が出力されない不具合もありました。(こちらはCOSMIC環境が問題の主因とは限りませんが)
こういった不具合が重なり、ゴールデンウィークは重い腰をあげて、XFCE環境に移行しました。
設定の細かな点については、そのうち行いたいと思ってます。
今日はそんな雑記でした!
いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!