メインコンテンツへスキップ
見出し画像

僕のNixOS全設定公開+解説付き(flake.nix,configuration.nix)日本語化・COSMICデスクトップ環境・AMDゲーミング環境

     #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_latest;
      boot.initrd.kernelModules = [
            "amdgpu"
            ];
    
      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 = false;
      };
    
      environment.cosmic.excludePackages = with pkgs; [
            cosmic-term
            cosmic-files
        ];
    
      services.displayManager.cosmic-greeter.enable = true;
      services.system76-scheduler.enable = true;
      environment.sessionVariables.COSMIC_DATE_CONTROL_ENABLED = "1";
    
      environment.variables = {
        TERMINAL = "ghostty";
      };
      xdg.mime.defaultApplications = {
        "inode/directory" = [ "thunar.desktop" ];
      };
    
    
      # -----------------------------------------------------------------------------
      # 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" "video" "docker" "render" "vboxusers" "libvirtd" "kvm"];
      };
    
      users.groups.video.members = [ "takeshi" ];
      users.groups.render.members = [ "takeshi" ];
    
      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;
    
      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";
      };
    
      services.auto-cpufreq = { 
       enable = true;
       settings = {
      battery = {
        governor = "powersave";
        turbo = "auto";
      };
      charger = {
        governor = "performance";
        turbo = "auto";
      };
      };
      };
    
      services.power-profiles-daemon.enable = false;
    
      # -----------------------------------------------------------------------------
      # 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;
      };
    
      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;
    
      programs.virt-manager.enable = true;
      virtualisation.spiceUSBRedirection.enable = true;
    
      users.groups.libvirtd.members = ["takeshi"];
      services.qemuGuest.enable = true;
      services.spice-vdagentd.enable = true;
      services.spice-autorandr.enable = true;
      virtualisation = {
        libvirtd = {
          enable = true;
          qemu = {
            package = pkgs.qemu_kvm;
            swtpm.enable = true;
            vhostUserPackages = [ pkgs.virtiofsd ];
          };
        };
       };
    
    
      # -----------------------------------------------------------------------------
      # 13. ツール・アプリケーション群
      # -----------------------------------------------------------------------------
      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
        (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-idle
        cosmic-comp
        cosmic-randr
        cosmic-panel
        cosmic-icons
        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
    
        # --- XFCE 関連 ---
        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
        pkgsStable.bottles
        pkgsStable.bottles-unwrapped
        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
      # -----------------------------------------------------------------------------
      programs.gnupg.agent = {
        enable = true;
        enableSSHSupport = true;
      };
    
      services.openssh.enable = true;
    
      # -----------------------------------------------------------------------------
      # 16. NixOS バージョン固定
      # -----------------------------------------------------------------------------
      system.stateVersion = "25.11";
    }

    以上が設定ファイルの全文になります。


    今回は、「NixOSに興味はあるけど、設定ファイルが難しそう…」と足踏みしている初心者の方に向けて、僕が実際に毎日使っているNixOSの全設定ファイル(flake.nixとconfiguration.nix)を公開し、各項目がどんな意味を持っているのかを丁寧に解説していきます!


    ちなみに僕は今までNixOSに関する記事をたくさん書いてきました!
    よかったらこちらも読んでみてください!

    最新版





    flake.nix

    NixOSには従来の設定方法に加えて、「Flakes(フレイクス)」と呼ばれる新しいパッケージ・設定管理の仕組みがあります。僕の環境ではこのFlakesを採用しています。これにより、どのバージョンのパッケージを使ったかが厳密にロックされ、環境の再現性が格段に上がります 。

    まずは、環境の入り口となる flake.nix から見ていきましょう。

    Nix

    {
      description = "NixOS configuration with stable and unstable packages";
    
      inputs = {
        # メインのチャンネル(最新パッケージが降ってくる unstable)
        nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
        # 安定版のチャンネル(フォントなど安定させたいもの向け)
        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 を全体で利用可能にする
              ({ pkgs, ... }: {
                nixpkgs.overlays = [
                  (final: prev: {
                    pkgsStable = import nixpkgs-stable {
                      inherit system;
                      config.allowUnfree = true;
                    };
                  })
                ];
              })
            ];
          };
        };
    }
    

    【解説】

    • inputs(インプット): ここでは、どこからパッケージを取得するかを定義しています 。僕は基本的に最新機能が使える nixos-unstable(不安定版・最新版)をメインにしつつ、一部の安定させたいパッケージのために nixos-25.11 という安定版(stable)も同時に読み込んでいます 。

    • outputsとOverlay(オーバーレイ): 読み込んだ安定版のパッケージを、システム全体で pkgsStable という名前で呼び出せるように「Overlay(上書き・拡張)」の設定をしています 。これにより、「基本は最新版を使うけど、日本語入力や特定のフォントだけは安定版を使いたい」といった柔軟な運用が可能になります。プロプライエタリ(非オープンソース)なソフトウェアも許可(allowUnfree = true)しています 。


    configuration.nix

    ここからは、実際のシステム設定を記述する configuration.nix の中身をセクションごとに分けて解説していきます。


    ① システム基本設定とブートローダー

    Nix

      imports = [
        ./hardware-configuration.nix
      ];
    
      boot.kernelPackages = pkgs.linuxPackages_latest;
      boot.initrd.kernelModules = [ "amdgpu" ];
    
      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;
    
          extraEntries = ''
            menuentry "Reboot" { reboot }
            menuentry "Poweroff" { halt }
          '';
        };
      };
    

    【解説】

    • カーネルとモジュール: pkgs.linuxPackages_latest を指定し、常に最新のLinuxカーネルを使用しています 。新しいハードウェア(特にGPU)の性能を引き出すために重要です。また、起動時の初期RAMディスク(initrd)に amdgpu(AMDのグラフィックドライバ)を組み込んで、起動直後から適切な画面解像度を出せるようにしています 。

    • ブートローダー (GRUB): OSを起動するためのプログラムです。Windowsなど他のOSとデュアルブートしやすいように useOSProber = true に設定し、GRUBメニューに再起動やシャットダウンの項目(extraEntries)も追加して利便性を高めています 。


    ② ネットワークと日本語化(i18n / フォント)

    Nix

      networking.hostName = "nixos";
      networking.networkmanager.enable = true;
      networking.firewall = {
        enable = true;
        allowedTCPPorts = [ 53317 2049 8080 ];
      };
    
      i18n.defaultLocale = "ja_JP.UTF-8";
      i18n.extraLocaleSettings = {
        LC_ADDRESS        = "ja_JP.UTF-8";
        LC_IDENTIFICATION = "ja_JP.UTF-8";
        # ... 中略(すべて ja_JP.UTF-8 に統一)...
      };
    
      i18n.inputMethod = {
        type = "fcitx5";
        enable = true;
        fcitx5.waylandFrontend = true;
        fcitx5.addons = with pkgs; [
          pkgsStable.fcitx5-mozc
          pkgsStable.fcitx5-gtk
        ];
      };
    
      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" ];
          };
        };
      };
    

    【解説】

    • ネットワーク: NetworkManagerを有効にしてWi-Fiや有線LANを管理しています 。ファイアウォールもオンにしつつ、ファイル共有やローカル通信用に特定のポート(53317, 2049, 8080)だけ穴を開けています 。

    • 日本語入力 (Fcitx5 + Mozc): Linuxの鬼門とも言える日本語入力ですが、現在は fcitx5 と mozc(Google日本語入力のオープンソース版)の組み合わせが最も安定しています 。ここで、先ほど flake.nix で定義した pkgsStable(安定版)を指定しているのがポイントです。入力メソッドが不安定だと記事執筆などの作業に支障が出るため、あえて手堅いバージョンを使っています 。

    • フォント: Noto Sans CJK(Googleのゴシック/明朝体)やプログラミング用に見やすい Migu フォントをインストールし、システム全体のデフォルトフォントとして指定しています 。


    ③ デスクトップ環境 (Cosmic) とオーディオ

    Nix

      services.desktopManager.cosmic = {
        enable = true;
        xwayland.enable = true;
        showExcludedPkgsWarning = false;
      };
    
      environment.cosmic.excludePackages = with pkgs; [
            cosmic-term
            cosmic-files
      ];
      services.displayManager.cosmic-greeter.enable = true;
      services.system76-scheduler.enable = true;
      
      environment.variables = {
        TERMINAL = "ghostty";
      };
    
     xdg.mime.defaultApplications = {
        "inode/directory" = [ "thunar.desktop" ];
      };
    
      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.pulseaudio.enable = false;
      security.rtkit.enable = true;
      services.pipewire = {
        enable = true;
        alsa.enable = true;
        alsa.support32Bit = true;
        pulse.enable = true;
      };
    

    【解説】

    • Cosmic デスクトップ: ここは僕の環境の大きな特徴です!System76というPCメーカーがサードパーティ製に頼らず、サクサク動くRust言語でゼロから開発している最新のデスクトップ環境「Cosmic」を採用しています 。標準のターミナルやファイルマネージャーは僕の好みで除外(excludePackages)し、代わりにターミナルエディタとしては非常に高速な ghostty を、ファイラーはthunarをデフォルトに設定しています 。

    • thunarのプラグイン:プラグインを設定することで、より便利に使用できます。

    • オーディオ (PipeWire): 古いPulseAudioは無効化し、現代のLinuxの標準である PipeWire を採用しています 。遅延が少なく、ゲームや動画編集、OBS Studioでの配信・録画などで威力を発揮します 。


    ④ ユーザー設定とハードウェア・GPU

    Nix

      users.users.takeshi = {
        isNormalUser = true;
        description = "takeshi";
        shell = pkgs.fish; 
        extraGroups = [ "networkmanager" "wheel" "video" "docker" "render" "vboxusers" "libvirtd" "kvm"];
      };
    
      # ハードウェア・デバイス
      hardware.bluetooth = {
        package = pkgs.bluez;
        enable = true;
        powerOnBoot = true;
        settings.General = { Experimental = true; FastConnectable = true; };
        settings.Policy.AutoEnable = true;
      };
    
      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";
      };
    

    【解説】

    • ユーザーとグループ: 僕のアカウント「takeshi」の設定です。デフォルトシェルを使いやすい fish に変更し、Dockerや仮想化(KVM)、GPU制御(video, render)の権限グループに所属させています 。

    • GPU (AMD): Linuxと非常に相性が良いAMD製GPUの設定です。単に画面を映すだけでなく、Blenderなどの3DソフトやAI用途でGPU計算機能(OpenCLやROCm)をフル活用するためのパッケージ群を追加しています 。環境変数 HSA_OVERRIDE_GFX_VERSION を設定することで、ROCmの互換性を高めています 。


    ⑤ ゲーミング&仮想化環境(ここがLinuxの醍醐味!)

    Nix

      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
          ];
          extraEnv = {
            LANG = "ja_JP.UTF-8";
            MANGOHUD = "1";
            OBS_VKCAPTURE = "1";
          };
        };
      };
    
      programs.gamemode.enable = true;
      programs.gamemode.settings.general.renice = 10;
    
      services.sunshine = {
        enable = true;
        autoStart = true;
        openFirewall = true;
        capSysAdmin = true;
        package = pkgs.sunshine;
      };
    
      virtualisation.docker = { enable = true; };
      virtualisation.podman.enable = true;
      virtualisation = {
        libvirtd = {
          enable = true;
          qemu = {
            package = pkgs.qemu_kvm;
            swtpm.enable = true;
            vhostUserPackages = [ pkgs.virtiofsd ];
          };
        };
       };
    

    【解説】

    • Steamとゲーム: 休日に妻とゲームを楽しむため、Steam周りの設定はかなり念入りです。Linux版Steamで日本語が文字化けしないよう、フォントを強制的に読み込ませ、環境変数を日本語(ja_JP.UTF-8)に設定しています 。また、ゲームのパフォーマンスを自動で引き上げる gamemode も有効化しています 。

    • Sunshine: 別の端末(スマホやリビングのPC)からリモートでゲームをプレイするためのホストサーバーアプリです 。

    • 仮想化 (Docker / KVM): コンテナ技術のDockerやPodmanに加え、QEMU/KVM(libvirtd)を有効化しています 。これは、どうしてもWindows環境が必要になった際に、仮想マシン上でWindows 11をフルスピードで動かすための基盤になります 。


    終わりに

    いかがでしたでしょうか。コードが長く見えて最初は圧倒されるかもしれませんが、これら全ての設定が「たったひとつのテキストファイル群」にまとまっているのがNixOSの最大の魅力です。

    PCを買い替えても、OSを再インストールしても、この flake.nix と configuration.nix を持ってくれば、アプリから日本語環境、細かなGPU設定まで、全く同じ環境が一瞬で復活します。

    このnoteが、これからNixOSを触ってみようという方の参考になれば幸いです。もし設定でわからないことがあれば、ぜひコメントで教えてくださいね。これからもガジェットレビューやLinuxに関する情報を発信していきますので、よろしくお願いします!

    より詳しい解説はこちらでしています。




     
     
     
    会社員のお父さんに向けて、家族が一番!テクノロジーとガジェットは二番!をモットーに、人とガジェットとの関わり方をネタに情報を発信してます。お仕事の依頼はメッセージ機能で受け付けてます。Amazonアソシエイト参加者です。記事内のリンクには広告が含まれる場合があります。

    あなたへのおすすめ