見出し画像

僕の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に関する情報を発信していきますので、よろしくお願いします!

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




いいなと思ったら応援しよう!

はたけっち|テック&ガジェット雑学 よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!