• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

nix home-manager

date: 2024-01-09 excerpt: nix home-managerの使い方

tag: nixnixpkgsmacoslinuxnixpackage manager


nix home-managerの使い方

概要

  • nixがインストールされていることが前提
  • dotfilesを管理するためのツール
  • ファイルへのシンボリックリンクを貼るだけでなく、nixpkgsのパッケージをインストールすることもできる

インストール

$ nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager
$ nix-channel --update
$ nix-shell '<home-manager>' -A install

設定ファイルのパス

  • ~/.config/home-manager/home.nix

基本的なコマンド

  • home-manager switch
    • 設定ファイルを反映
  • home-manager edit
    • 設定ファイルを編集
  • home-manager build
    • 設定ファイルをビルド
  • home-manager generation
    • 設定ファイルの履歴を確認
  • home-manager packages
    • インストールされているパッケージを確認

パッケージのアップデート

$ nix-channel --update
$ home-manager switch

作成した設定ファイル

  • home.nix

systemdのサービスを設定

  • home.nixに以下を追加
  • systemctl --user enable home-manager-serviceで有効化
# systemd servicesを設定する例
systemd.user.services.home-manager-service = {
  Unit = {
    Description = "systemd service ";
    After = [ "network.target" ];
  };
  Install = {
    WantedBy = [ "default.target" ];
  };
  Service = {
    Type = "simple";
    ExecStart = "${pkgs.writeShellScript "home-manager-service" ''
      #!/bin/sh
      echo 1
    ''}";
    Restart = "always";
    RestartSec = 5;
  };
};

トラブルシューティング

warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)と都度出る

  • 原因
    • nix-shell -p glibcLocales実行で再現
  • 対応
    • LC_ALLをunsetする
    • ~/.nixpkgs/config.nixに以下を追加する
{
  packageOverrides = pkgs: {
    myLocaleSettings = pkgs.lib.overrideDerivation pkgs.glibc (oldAttrs: {
      LOCALE_ARCHIVE = pkgs.lib.fileContents "/usr/lib/locale/locale-archive";
    });
  };
}
  • 参考
    • Can”t solve ‘setlocale: LC_ALL: cannot change locale’ Issues on Nix running on Ubuntu
    • #90523
    • nix-shell cannot change locale warning


nixnixpkgsmacoslinuxnixpackage manager Share Tweet