【需要があるかわかりませんが…】僕のNixOS+COSMICデスクトップ環境の全設定を公開します。(解説付き)
noteを読んでくださっている皆さん、こんにちは!
最近はNixOSそのもののシステム周りよりも、スマートデバイスや周辺機器などガジェット全般の方に興味が移りつつあるのですが、毎日触れているこの自作PC環境も、僕のこだわりを詰め込んだ最高の「ガジェット」の一つだと思っています。現在LPIC(Linux技術者認定試験)の資格取得に向けて勉強中ということもあり、普段遣いのデスクトップ環境からLinuxにどっぷり浸かっています。
今回は、僕が構築した「NixOS + COSMIC」という少しマニアックなデスクトップ環境の全設定ファイルを公開し、一つひとつの項目について初心者の方にもわかるように、徹底的に詳しく解説していこうと思います!
「NixOSって難しそう…」と思っている方も、この記事を読めば設定ファイル(宣言的設定)がどんな役割を果たしているのかイメージが湧くはずです。長丁場になりますが、ぜひ最後までお付き合いください!
今回公開する設定ファイルについて
NixOSの最大の特徴は、「現在のシステムの状態を一つの設定ファイル(群)で完全に定義できる」という点にあります。今回はモダンなパッケージ管理手法である「Flakes」を導入しているため、以下の2つのファイルがシステムの心臓部になります。
flake.nix: どこからパッケージ(ソフトウェア)を取得するかを定義するファイル。
configuration.nix: 実際のシステム設定(インストールするソフト、ユーザー設定、ネットワークなど)を記述するファイル。
それでは、順番にコードと解説を見ていきましょう。
1. flake.nix の解説
まずはシステムの入り口となる flake.nix です。このファイルは、NixOSのバージョンやパッケージの取得元(チャンネル)を管理します。
Nix
{
description = "NixOS configuration with stable and unstable packages";
inputs = {
# Main channel (latest packages, unstable)
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
# Stable channel (selectively used for stability)
nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-25.11";
};
outputs = { self, nixpkgs, nixpkgs-stable, ... }:
let
system = "x86_64-linux";
in
{
nixosConfigurations.nixos = nixpkgs.lib.nixosSystem {
inherit system;
# 全ての module に追加引数として渡される特殊な引数
specialArgs = {
inherit nixpkgs-stable;
};
modules = [
# メインの設定ファイル
./configuration.nix
# Overlay モジュール: pkgsStable を globally 利用可能にするための定義
({ pkgs, ... }: {
nixpkgs.overlays = [
(final: prev: {
pkgsStable = import nixpkgs-stable {
inherit system;
config.allowUnfree = true;
};
})
];
})
];
};
};
}
詳細解説
inputs: システムの設計図(Nixpkgs)をどこから持ってくるかを指定します。ここでは、最新のソフトウェアを使いたいのでメインに nixos-unstable(不安定版・最新版)を指定しつつ、日本語入力など動作の安定性が絶対に欲しい部分のために nixos-25.11(安定版)も同時に読み込んでいます 。
outputs: 読み込んだ設計図を元に、実際のシステムを出力します。アーキテクチャは一般的な64ビットPCである x86_64-linux を指定しています 。
specialArgs: 読み込んだ安定版のパッケージ群(nixpkgs-stable)を、後述する configuration.nix でも使えるように引数として渡しています 。
overlays(オーバーレイ): ここが少しテクニカルですが、NixOSの強力な機能です。システム全体の基本パッケージは「最新版(unstable)」を使いますが、このオーバーレイ設定により、pkgsStable という名前で呼び出した時だけ「安定版(stable)」のパッケージをインストールできるようにカスタムしています 。オープンソースではないソフトウェア(プロプライエタリなソフト)もインストールできるように config.allowUnfree = true; を設定しています 。
2. configuration.nix の解説
ここからが本番です。PCの具体的な設定を全てここに記述しています。項目ごとに分けて解説します。
1. システム基本設定 (Kernel, Time, Bootloader)
Nix
{ config, pkgs, ... }:
{
imports = [
./hardware-configuration.nix
];
# -----------------------------------------------------------------------------
# 1. システム基本設定 (Kernel, Time, Bootloader)
# -----------------------------------------------------------------------------
boot.kernelPackages = pkgs.linuxPackages;
networking.timeServers = [ "ntp.nict.jp" ];
time.timeZone = "Asia/Tokyo";
boot.loader = {
timeout = 3;
efi = {
efiSysMountPoint = "/boot";
canTouchEfiVariables = true;
};
grub = {
enable = true;
efiSupport = true;
devices = [ "nodev" ];
useOSProber = true;
efiInstallAsRemovable = false;
extraEntriesBeforeNixOS = false;
# GRUB メニューエントリ (再起動・シャットダウン)
extraEntries = ''
menuentry "Reboot" { reboot }
menuentry "Poweroff" { halt }
'';
};
};
imports: ハードウェア固有の設定(ドライブの構成など)が書かれた hardware-configuration.nix を読み込んでいます 。
カーネルと時間: OSのコアとなるカーネルはデフォルトの linuxPackages を指定 。時計を合わせるためのNTPサーバーには日本の情報通信研究機構の ntp.nict.jp を指定し、タイムゾーンはもちろん Asia/Tokyo です 。
ブートローダー (GRUB): パソコンの電源を入れた直後にOSを起動させるためのプログラムです。最近のPCの標準であるEFI環境に合わせて設定し、マウントポイントを /boot に指定しています 。ブートローダーには「GRUB」を採用し、useOSProber = true にすることで、もしWindowsなど他のOSが入っていても自動で見つけて起動メニューに追加してくれます 。また、起動メニューから直接再起動やシャットダウンができるように、カスタムエントリ(extraEntries)を追加しています 。
2. ネットワーク・ホスト名・ファイアウォール
Nix
# -----------------------------------------------------------------------------
# 2. ネットワーク・ホスト名・ファイアウォール
# -----------------------------------------------------------------------------
networking.hostName = "nixos";
networking.networkmanager.enable = true;
networking.firewall = {
enable = true;
allowedTCPPorts = [ 53317 2049 8080 ];
};
ネットワーク設定: コンピュータの名前(ホスト名)はシンプルに nixos にしています 。ネットワーク管理は、Linuxで最も一般的な NetworkManager を有効にしています 。
ファイアウォール: セキュリティのためにファイアウォールを有効化しています 。ただし、ファイル共有アプリのLocalSend(ポート53317など)、NFS(2049)、Webサーバーのテスト用(8080)など、特定の用途で使うTCPポートだけは通信を許可しています 。
3. ロケール・言語環境 (i18n)
Nix
# -----------------------------------------------------------------------------
# 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";
};
i18n.inputMethod = {
type = "fcitx5";
enable = true;
fcitx5.waylandFrontend = true;
fcitx5.addons = with pkgs;
[
pkgsStable.fcitx5-mozc
pkgsStable.fcitx5-gtk
];
};
日本語化設定: OSの基本言語を日本語 (ja_JP.UTF-8) に設定しています 。日付、お金の単位、名前のフォーマットなども全て日本仕様に統一しています 。
日本語入力 (Fcitx5 + Mozc): Linuxの日本語入力には「Fcitx5」と、Google日本語入力のオープンソース版である「Mozc」を組み合わせて使っています 。ここでポイントなのが、先ほど flake.nix で作った pkgsStable を使っている点です。入力メソッドはOSの根幹に関わり、バグがあると非常にストレスなので、あえて「安定版」のパッケージを指定しています 。
4. フォント設定
Nix
# -----------------------------------------------------------------------------
# 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 = {
enable = true;
defaultFonts = {
serif = [ "Noto Sans CJK JP" ];
sansSerif = [ "Noto Sans CJK JP" ];
monospace = [ "Migu 1M" ];
};
};
};
フォントのインストール: 日本語を綺麗に表示するために、Googleの「Noto Fonts (CJK)」や、プログラミングで見やすい「Migu」、そして「IPAフォント」などをインストールしています 。ここでも表示崩れを防ぐため pkgsStable を使っています 。絵文字フォント(noto-fonts-color-emoji)も入れているので、スマホのように絵文字もバッチリ表示されます 。
デフォルトフォント設定: 明朝体(serif)とゴシック体(sansSerif)のデフォルトを「Noto Sans CJK JP」に、ターミナルなどで使う等幅フォント(monospace)を「Migu 1M」に指定しています 。フォントディレクトリの設定(fontDir.enable = true)も有効化しています 。
5. Nix / Flakes 設定 & 6. デスクトップ環境 (COSMIC)
Nix
# -----------------------------------------------------------------------------
# 5. Nix / Flakes 設定 (システムポリシー)
# -----------------------------------------------------------------------------
nix.settings.experimental-features = [ "nix-command" "flakes" ];
nix.settings.auto-optimise-store = true;
# -----------------------------------------------------------------------------
# 6. デスクトップ環境 (Cosmic)
# -----------------------------------------------------------------------------
services.desktopManager.cosmic = {
enable = true;
xwayland.enable = true;
showExcludedPkgsWarning = true;
};
services.displayManager.cosmic-greeter.enable = true;
services.system76-scheduler.enable = true;
environment.sessionVariables.COSMIC_DATE_CONTROL_ENABLED = "1";
Flakesの有効化: flake.nix を使うための必須設定である experimental-features を有効にしています 。また、NixOSは使えば使うほど古いパッケージがディスクを圧迫するため、自動で最適化して容量を節約する auto-optimise-store = true; を入れています 。
COSMICデスクトップ: ここが僕の環境の目玉です!PCメーカーのSystem76がRust言語でイチから開発している、非常にモダンで爆速な次世代デスクトップ環境「COSMIC」を採用しています 。古いアプリも動くように互換レイヤーの xwayland を有効化し 、ログイン画面も cosmic-greeter に設定しています。
7. サウンド・メディア (PipeWire) & 8. ユーザー設定
Nix
# -----------------------------------------------------------------------------
# 7. サウンド・メディア (PipeWire)
# -----------------------------------------------------------------------------
services.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
};
# -----------------------------------------------------------------------------
# 8. ユーザー・グループ設定
# -----------------------------------------------------------------------------
users.users.takeshi = {
isNormalUser = true;
description = "takeshi";
shell = pkgs.fish;
extraGroups = [ "networkmanager" "wheel" "docker" "render" "vboxusers" ];
};
users.groups.video.members = [ "takeshi" "ollama" ];
users.groups.render.members = [ "takeshi" "ollama" ];
services.displayManager.autoLogin = {
enable = true;
user = "takeshi";
};
programs.fish.enable = true;
モダンなサウンドシステム: 古いPulseAudioは無効化し 、最新の標準である「PipeWire」に移行しています 。遅延が少なく、配信や録画(OBSなど)での音声ルーティングが劇的に簡単になります。
ユーザー設定: 僕のアカウント takeshi の設定です 。普段使うコマンドラインのシェルには、補完機能が超強力で使いやすい「Fish」を指定しています 。
グループと権限: システム管理者権限を持たせる wheel グループや、Dockerをsudoなしで使うための docker グループなどに所属させています 。また、グラフィックボードやAI推論(Ollama)をスムーズに動かすため、video と render グループに権限を付与しています 。毎回パスワードを打つのは面倒なので、自動ログイン(autoLogin)も有効にしています 。
9. ハードウェア・デバイス (Bluetooth, GPU)
Nix
# -----------------------------------------------------------------------------
# 9. ハードウェア・デバイス (Bluetooth, GPU, Swap)
# -----------------------------------------------------------------------------
hardware.bluetooth = {
package = pkgs.bluez;
enable = true;
powerOnBoot = true;
settings.General = {
Experimental = true;
FastConnectable = true;
};
settings.Policy.AutoEnable = true;
};
services.blueman.enable = true;
boot.initrd.kernelModules = [ "amdgpu" ];
services.xserver.videoDrivers = [ "amdgpu" ];
hardware.graphics = {
enable = true;
extraPackages = with pkgs;
[
mesa vulkan-tools rocmPackages.rocminfo rocmPackages.clr.icd libva
];
};
hardware.amdgpu.opencl.enable = true;
environment.variables = {
RUSTICL_ENABLE = "radeonsi";
HSA_OVERRIDE_GFX_VERSION = "11.0.1";
};
Bluetooth設定: イヤホンやマウスをスムーズに繋ぐため、Bluetoothを有効化し、PC起動時に自動でオンになるように powerOnBoot を設定 。GUIで管理できるツール blueman も導入しています。
AMD GPUの最適化: 僕はAMDのグラフィックボードを使用しているため、専用の amdgpu ドライバーをカーネルモジュールとして読み込んでいます 。さらに、Vulkan(ゲームなどに必須)や、AI・演算用のライブラリである「ROCm」の関連パッケージを追加し 、OpenCLも有効化しています 。環境変数 HSA_OVERRIDE_GFX_VERSION を設定することで、一部非対応のソフトでもAMD GPUを無理やり(?)使えるようにするテクニックも盛り込んでいます 。
10. ゲーム・Steam 関連
Nix
# -----------------------------------------------------------------------------
# 10. ゲーム・Steam
# -----------------------------------------------------------------------------
hardware.steam-hardware.enable = true;
programs.steam = {
enable = true;
fontPackages = with pkgs; [ pkgsStable.migu ];
remotePlay.openFirewall = true;
localNetworkGameTransfers.openFirewall = true;
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";
OBS_VKCAPTURE = "1";
};
};
};
programs.gamemode.enable = true;
programs.gamemode.settings.general.renice = 10;
実はLinuxでもゲームはかなり快適に動きます!
Steamの導入: Steamクライアントを有効化し、文字化けを防ぐためにフォント(migu や noto-fonts)をSteam環境内に流し込んでいます 。
日本語環境の強制: Steam上で日本語がうまく認識されないトラブルを防ぐため、環境変数(extraEnv)で LANG や LC_ALL を全て ja_JP.UTF-8 に固定しています 。(もしかしたらこれは必要ないかもしれません)
配信・パフォーマンス監視: ゲームのFPSを表示する「MangoHud」や、OBSでゲーム画面を直接キャプチャするための「OBS_VKCAPTURE」をデフォルトで有効化しています 。
Gamemode: ゲーム起動時にPCのパワーをゲームに全振りしてくれる最適化ツール「Gamemode」を導入し、優先度(renice)を高く設定しています 。
11. 外部サービス & 12. 仮想化環境
Nix
# -----------------------------------------------------------------------------
# 11. 外部サービス (Blender, Ollama, Dropbox, Sunshine など)
# -----------------------------------------------------------------------------
services.blendfarm.enable = true;
services.blendfarm.blenderPackage = pkgs.blender;
services.ratbagd.enable = true;
services.ratbagd.package = pkgs.libratbag;
services.sunshine = {
enable = true;
autoStart = true;
openFirewall = true;
capSysAdmin = true;
package = pkgs.sunshine;
settings = {
port = 47989;
sunshine_name = "mainPC";
};
};
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";
};
};
# -----------------------------------------------------------------------------
# 12. 仮想化 (Docker, Podman)
# -----------------------------------------------------------------------------
virtualisation.docker = {
enable = true;
daemon.settings = {
experimental = true;
default-address-pools = [{
base = "172.30.0.0/16";
size = 24;
}];
};
};
virtualisation.podman.enable = true;
virtualisation.virtualbox.host.enable = true;
virtualisation.virtualbox.host.enableExtensionPack = true;
virtualisation.virtualbox.guest.enable = true;
Sunshine: PCの画面をスマホや別のPCにストリーミング(リモートプレイ)するための超優秀なソフトです。ポート開放設定や自動起動(autoStart)などを細かく設定し、サーバー名を mainPC としています 。
Dropbox: クラウドストレージのDropboxをバックグラウンドサービスとして自動起動させています。GUI(デスクトップ)が立ち上がったタイミングで起動するように wantedBy = [ "graphical-session.target" ]; を設定しています 。
ゲーミングマウス設定: ロジクールなどの高機能マウスのボタン割り当てを変えるためのサービス ratbagd を有効にしています 。(FF14プレイヤーなのでロジクールG600マウスは必須)
仮想化(Docker/Podman/VirtualBox): 開発やテスト環境構築に必須のDocker 。ネットワーク帯域が被らないようにIPアドレスプールを設定しています 。Podmanや、昔ながらのVirtualBoxも使える状態にしています 。LPICの試験勉強でサーバー環境を作る際にも非常に役立ちます。
13〜16. 各種ツールと膨大なシステムパッケージ群
Nix
# -----------------------------------------------------------------------------
# 13. ツール・アプリケーション群
# -----------------------------------------------------------------------------
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;
ディスク管理ツールや、配信ソフト(OBS)、スマホとPCでファイルを超高速転送できる「LocalSend」などをシステムレベルで有効化しています 。LocalSendは本当に神アプリです。
そして最後に、インストールしている大量のパッケージ群(environment.systemPackages)です。
Nix
# -----------------------------------------------------------------------------
# 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
pkgsStable.flatpak pkgsStable.flatpak-builder pkgsStable.flatpak-xdg-utils
boost ghostty
# --- シェル / エディタ ---
bash fish
(vscode-with-extensions.override {
vscodeExtensions = with vscode-extensions; [
ms-ceintl.vscode-language-pack-ja
vscode-extensions.bbenoist.nix
];
})
# --- デスクトップ / Cosmic 関連 ---
cosmic-greeter cosmic-edit cosmic-player cosmic-bg cosmic-osd cosmic-term
cosmic-idle cosmic-comp cosmic-randr cosmic-panel cosmic-icons cosmic-files
cosmic-session cosmic-applets cosmic-settings cosmic-launcher cosmic-protocols
cosmic-wallpapers cosmic-screenshot cosmic-applibrary cosmic-notifications
cosmic-initial-setup cosmic-settings-daemon cosmic-ext-tweaks
# --- テーマ・アイコン ---
candy-icons gnome-themes-extra adwaita-icon-theme
# --- ブラウザ・通信・オフィス ---
firefox google-chrome localsend thunderbird discord dropbox libreoffice obsidian tradingview freecad
# --- マルチメディア ---
obs-studio ffmpeg-full vlc audacity handbrake
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
# --- AMD管理・仮想化 ---
mesa xf86-video-amdgpu amdgpu_top docker docker-client distrobox podman lshw
# --- AI・録画 ---
lmstudio gpu-screen-recorder gpu-screen-recorder-gtk
];
# -----------------------------------------------------------------------------
# 15. セキュリティ・SSH & 16. バージョン固定
# -----------------------------------------------------------------------------
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
services.openssh.enable = true;
system.stateVersion = "25.11";
}
Flatpak: Nixパッケージだけでは補いきれないアプリをインストールするために、Flatpakを有効化しています 。
VSCode: エディタのVSCodeは、最初から日本語化パックとNixのシンタックスハイライト拡張機能を組み込んだ状態でインストールされるように記述しています 。これも宣言的設定の醍醐味です。
COSMICアプリ群: デスクトップ環境を構成するファイルマネージャー(cosmic-files)やターミナル(cosmic-term)、ランチャー(cosmic-launcher)などを漏れなく記述しています 。
マルチメディアとOBSプラグイン: OBS Studioに背景透過やPipeWire録音などの各種プラグインを盛り込んでいます 。動画編集用のKdenlive、画像編集のGIMP、3DモデリングのBlenderなど、クリエイティブ系ソフトも充実させています 。
AMDツール・AI: グラボのステータスを見る amdgpu_top 、そしてローカルで手軽にAIモデルを動かせる lmstudio なんかも入れています 。
StateVersion: 最後に system.stateVersion = "25.11"; とありますが、これはNixOSを最初にインストールした時のバージョンを記録するもので、勝手に書き換えてはいけない重要なおまじないです 。
おわりに
いかがだったでしょうか。非常に長い解説になってしまいましたが、これだけの複雑なシステム環境が、たった数個のテキストファイルに完全にバックアップ・定義されていると考えると、NixOSの凄さが少しでも伝わるのではないかと思います。
PCを買い替えても、OSが壊れても、このファイルさえあれば全く同じ自分好みのガジェット環境が一瞬で復活します。学習コストは少し高いですが、Linuxやシステム構築に興味がある方は、ぜひ一度NixOS沼に足を踏み入れてみてください!
需要があるかわかりませんが、誰かの参考になれば嬉しいです。最後まで読んでいただき、ありがとうございました!
分割されていない全文については以下に記述しておきます。
参考になるかはわかりませんが・・・
#flake.nix
{
description = "NixOS configuration with stable and unstable packages";
inputs = {
# Main channel (latest packages, unstable)
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
# Stable channel (selectively used for stability)
nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-25.11";
};
outputs = { self, nixpkgs, nixpkgs-stable, ... }:
let
system = "x86_64-linux";
in
{
nixosConfigurations.nixos = nixpkgs.lib.nixosSystem {
inherit system;
# 全ての module に追加引数として渡される特殊な引数
specialArgs = {
inherit nixpkgs-stable;
};
modules = [
# メインの設定ファイル
./configuration.nix
# Overlay モジュール: pkgsStable を globally 利用可能にするための定義
({ pkgs, ... }: {
nixpkgs.overlays = [
(final: prev: {
pkgsStable = import nixpkgs-stable {
inherit system;
config.allowUnfree = true;
};
})
];
})
];
};
};
}#configuration.nix
{ config, pkgs, ... }:
{
imports = [
./hardware-configuration.nix
];
# -----------------------------------------------------------------------------
# 1. システム基本設定 (Kernel, Time, Bootloader)
# -----------------------------------------------------------------------------
boot.kernelPackages = pkgs.linuxPackages;
networking.timeServers = [ "ntp.nict.jp" ];
time.timeZone = "Asia/Tokyo";
boot.loader = {
timeout = 3;
efi = {
efiSysMountPoint = "/boot";
canTouchEfiVariables = true;
};
grub = {
enable = true;
efiSupport = true;
devices = [ "nodev" ];
useOSProber = true;
efiInstallAsRemovable = false;
extraEntriesBeforeNixOS = false;
# GRUB メニューエントリ (再起動・シャットダウン)
extraEntries = ''
menuentry "Reboot" { reboot }
menuentry "Poweroff" { halt }
'';
};
};
# -----------------------------------------------------------------------------
# 2. ネットワーク・ホスト名・ファイアウォール
# -----------------------------------------------------------------------------
networking.hostName = "nixos";
networking.networkmanager.enable = true;
networking.firewall = {
enable = true;
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";
};
i18n.inputMethod = {
type = "fcitx5";
enable = true;
fcitx5.waylandFrontend = true;
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 = {
enable = true;
defaultFonts = {
serif = [ "Noto Sans CJK JP" ];
sansSerif = [ "Noto Sans CJK JP" ];
monospace = [ "Migu 1M" ];
};
};
};
# -----------------------------------------------------------------------------
# 5. Nix / Flakes 設定 (システムポリシー)
# -----------------------------------------------------------------------------
nix.settings.experimental-features = [ "nix-command" "flakes" ];
nix.settings.auto-optimise-store = true;
# -----------------------------------------------------------------------------
# 6. デスクトップ環境 (Cosmic)
# -----------------------------------------------------------------------------
services.desktopManager.cosmic = {
enable = true;
xwayland.enable = true;
showExcludedPkgsWarning = true;
};
services.displayManager.cosmic-greeter.enable = true;
services.system76-scheduler.enable = true;
environment.sessionVariables.COSMIC_DATE_CONTROL_ENABLED = "1";
# -----------------------------------------------------------------------------
# 7. サウンド・メディア (PipeWire)
# -----------------------------------------------------------------------------
services.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
};
# -----------------------------------------------------------------------------
# 8. ユーザー・グループ設定
# -----------------------------------------------------------------------------
users.users.takeshi = {
isNormalUser = true;
description = "takeshi";
shell = pkgs.fish;
extraGroups = [ "networkmanager" "wheel" "docker" "render" "vboxusers" ];
};
users.groups.video.members = [ "takeshi" "ollama" ];
users.groups.render.members = [ "takeshi" "ollama" ];
services.displayManager.autoLogin = {
enable = true;
user = "takeshi";
};
programs.fish.enable = true;
# -----------------------------------------------------------------------------
# 9. ハードウェア・デバイス (Bluetooth, GPU, Swap)
# -----------------------------------------------------------------------------
hardware.bluetooth = {
package = pkgs.bluez;
enable = true;
powerOnBoot = true;
settings.General = {
Experimental = true;
FastConnectable = true;
};
settings.Policy.AutoEnable = true;
};
services.blueman.enable = true;
boot.initrd.kernelModules = [ "amdgpu" ];
services.xserver.videoDrivers = [ "amdgpu" ];
hardware.graphics = {
enable = true;
extraPackages = with pkgs; [
mesa vulkan-tools rocmPackages.rocminfo rocmPackages.clr.icd libva
];
};
hardware.amdgpu.opencl.enable = true;
environment.variables = {
RUSTICL_ENABLE = "radeonsi";
HSA_OVERRIDE_GFX_VERSION = "11.0.1";
};
# -----------------------------------------------------------------------------
# 10. ゲーム・Steam
# -----------------------------------------------------------------------------
hardware.steam-hardware.enable = true;
programs.steam = {
enable = true;
fontPackages = with pkgs; [ pkgsStable.migu ];
remotePlay.openFirewall = true;
localNetworkGameTransfers.openFirewall = true;
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";
OBS_VKCAPTURE = "1";
};
};
};
programs.gamemode.enable = true;
programs.gamemode.settings.general.renice = 10;
# -----------------------------------------------------------------------------
# 11. 外部サービス (Blender, Ollama, Dropbox, Sunshine など)
# -----------------------------------------------------------------------------
services.blendfarm.enable = true;
services.blendfarm.blenderPackage = pkgs.blender;
services.ratbagd.enable = true;
services.ratbagd.package = pkgs.libratbag;
services.sunshine = {
enable = true;
autoStart = true;
openFirewall = true;
capSysAdmin = true;
package = pkgs.sunshine;
settings = {
port = 47989;
sunshine_name = "mainPC";
};
};
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";
};
};
# -----------------------------------------------------------------------------
# 12. 仮想化 (Docker, Podman)
# -----------------------------------------------------------------------------
virtualisation.docker = {
enable = true;
daemon.settings = {
experimental = true;
default-address-pools = [{
base = "172.30.0.0/16";
size = 24;
}];
};
};
virtualisation.podman.enable = true;
virtualisation.virtualbox.host.enable = true;
virtualisation.virtualbox.host.enableExtensionPack = true;
virtualisation.virtualbox.guest.enable = true;
# -----------------------------------------------------------------------------
# 13. ツール・アプリケーション群
# -----------------------------------------------------------------------------
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
pkgsStable.flatpak
pkgsStable.flatpak-builder
pkgsStable.flatpak-xdg-utils
boost
ghostty
# --- シェル / エディタ ---
bash
fish
(vscode-with-extensions.override {
vscodeExtensions = with vscode-extensions; [
ms-ceintl.vscode-language-pack-ja
vscode-extensions.bbenoist.nix
];
})
# --- デスクトップ / Cosmic 関連パッケージ ---
cosmic-greeter
cosmic-edit
cosmic-player
cosmic-bg
cosmic-osd
cosmic-term
cosmic-idle
cosmic-comp
cosmic-randr
cosmic-panel
cosmic-icons
cosmic-files
cosmic-session
cosmic-applets
cosmic-settings
cosmic-launcher
cosmic-protocols
cosmic-wallpapers
cosmic-screenshot
cosmic-applibrary
cosmic-notifications
cosmic-initial-setup
cosmic-settings-daemon
cosmic-ext-tweaks
# --- テーマ・アイコン ---
candy-icons
gnome-themes-extra
adwaita-icon-theme
# --- XFCE 関連 ---
thunar
pkgs.ristretto
pkgs.tumbler
# --- KDE 関連 ---
kdePackages.ark
# --- ブラウザ / 通信 ---
firefox
google-chrome
localsend
thunderbird
discord
dropbox
# --- オフィス / 日常用途 ---
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-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
# --- 周辺機器 / デバイス管理 ---
gparted
gnome-disk-utility
piper
libratbag
solaar
librepods
# --- コンテナ / 仮想化 ---
docker
docker-client
distrobox
podman
lshw
bottles
bottles-unwrapped
# --- AI / GPU Compute ---
lmstudio
# --- 録画 / スクリーンキャプチャ ---
gpu-screen-recorder
gpu-screen-recorder-gtk
];
# -----------------------------------------------------------------------------
# 15. セキュリティ・SSH
# -----------------------------------------------------------------------------
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
services.openssh.enable = true;
# -----------------------------------------------------------------------------
# 16. NixOS バージョン固定
# -----------------------------------------------------------------------------
system.stateVersion = "25.11";
}いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!


記事にしていただいてありがとうございます🙏 NixOSの設定についてこんなに包括的な説明をしてくれている記事はなかなかないので、本当に助かります! NixOSをデュアルブートで楽しんで使っていきたいと思います🔥
コメントありがとうございます!ぜひぜひデュアルブート楽しんじゃってください😃