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

【雑記】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環境に移行しました。

    設定の細かな点については、そのうち行いたいと思ってます。


    今日はそんな雑記でした!


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

    あなたへのおすすめ