GNU Guix
概要
Gnu GuixはOSおよびパッケージ管理システム。
- システム設定をリポジトリで管理できる
- ロールバックできる
- マシンによって設定を変えることも可能
- 依存性に対する完全なコントロール。完全に再現できる
などの先進的な機能がある。Schemeで設定ファイルを書ける。
memo
guix package
guix buildしたあとにguix packageで追加する。
guix package --roll-back
guix build
guix buildでビルドしたパッケージはGuixのソフトウェアストアに追加され、他のプログラムから利用できるようになる。システム全体から利用できる。
guix build emacs@29.1 guix package -i emacs@29.1
バージョンを探すにはguix searchを使う。
guix search emacs
guix build -f emacs.scm
スペックファイルはEmacsのソースコードのURL、チェックサム、ビルド手順などを含むSchemeスクリプトである。
guix home とsystem
homeコマンドではユーザ個別の設定ができる。 インストールするソフトウェア、環境変数、起動サービスなど。 Home Configuration (GNU Guix Reference Manual)
いっぽうでsystemの方では、ユーザ作成やパーティション、キーボードレイアウトなどシステム全体にかかることを設定できる。
BIOSに出ないとき
Guixに限ったことではないが、Linuxをインストールしたドライブを認識しないときは、BIOSモードを確認する。 UEFIモードだとLinuxを認識してくれない。 レガシーモードにすると認識してくれ、起動もできる。
基本のコマンド
guix pull --news guix install {package} guix remove {package} guix package --list-generations guix package --list-installed guix package --switch-generation=42 guix package --roll-back guix package --export-manifest guix refresh # 更新
独立環境
guix environment
を使う。 https://guix.gnu.org/manual/en/html_node/Invoking-guix-environment.html
詳しい解説
usbメモリーからインストールする方法をわかりやすく解説。
https://github.com/daviwil/dotfiles/blob/master/Systems.org (動画) https://www.youtube.com/watch?v=oSy-TmoxG_Y https://systemcrafters.cc/craft-your-system-with-guix/full-system-install/ (↑メモ)
- ブートusb用意
- インストール(TTY作業)
- ログイン(以後、GUI)
- パスワード設定
- guix設定ファイル準備(etcから移す)
mkdir -p ~/.config/guix
cd ~/.config/guix
cp /etc/channels.scm .
cp /etc/config.scm ./system.scm
chmod +w channels.scm
- commit削除
- アップデート
guix pull sudo -E guix system reconfigure ~/.config/guix/system.scm
- インストールパッケージをすべてアップデート
guix package -u
日本語入力
言語設定を日本語にしただけでは入力や表示ができない。手動で設定する必要がある。
guix package -i ibus ibus-anthy font-adobe-source-han-sans
.bash_profile
などに追加。
export GUIX_GTK2_IM_MODULE_FILE="$HOME/.guix-profile/lib/gtk-2.0/2.10.0/immodules-gtk2.cache" export GUIX_GTK3_IM_MODULE_FILE="$HOME/.guix-profile/lib/gtk-3.0/3.0.0/immodules-gtk3.cache"
ibusのキャッシュを削除する(重要)。
rm -rf ~/.cache/ibus
再起動する。
ibus-setup
一覧にJapanese(Anthy)が追加されているので、選択する。
- インプットメソッド切り替えはKeyboard Shortcutからできる。
- ibus設定画面はGNOME検索には出てこない。言語選択のJapanese(Anthy)歯車から設定できる。
vterm
vtermのコンパイルにCmakeが必要。
guix install cmake
guix install nss-certs export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs" export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt" export GIT_SSL_CAINFO="$SSL_CERT_FILE" export CURL_CA_BUNDLE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
caps入れ替え
system.scm書き換えでできるはずだが、反映させる方法がわからない。 gnomeのコマンドを1回打って代用する。
gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:swapcaps']"
デスクトップ環境関係なくできる↓。
/usr/bin/setxkbmap -option "ctrl:nocaps"
パッケージを一括インストール
guix package -m ~/dotfiles/.config/guix/manifests/desktop.scm
フローメモ
ctrl入れ替え → syncthingインストールと設定 → ssh鍵 → sshインストール。 gitインストール → dotfilesをclone。
自動起動
ファイルを配置して自動実行されるようにする。
サービス系の自動起動はguixが利用しているサービスマネージャGNU Shepherdで行う。 https://github.com/kijimaD/dotfiles/blob/develop/.config/shepherd/init.scm このように追加しておくと自動で実行する。 ただし、shepherd自体が自動で起動しないよう。デスクトップ環境に合わせて、自動実行させるようにする。 https://github.com/kijimaD/dotfiles/blob/develop/.config/autostart/gnome.desktop 実行権限をつけること。
Gnomeで Alt + Shiftが設定されてしまう問題
いつの間にか、Alt+Shiftでinput method切り替えになっていて不便なことになっていた。 いつからかは不明。dotfilesの影響か、そうでないかもよくわからない。 gnome-tweaksをインストールしてAdditional OptionsにAlt+Shiftオプションがあるのでオフにした。(Emacs inputの設定項目があったので選択しておいた。)
この辺configにまとめられないのか。 gnome使いたくないな。
ibus-anthyのショートカット一覧。 https://wiki.ubuntulinux.jp/UbuntuTips/JapaneseEnvironment/IbusAnthy#Setting
AnthyにC-c C-j を奪われる問題
anthyにC-c C-jが奪われるようになった。設定で変えても変更が反映されない。 まあ、英語に切り替えてからやればいいか。 クリーンインストールすると解決する問題か。
C-c C-jを押すと無変換モードになるので、変換されないときは再度C-c C-jを押す必要がある。
Anthyの入力モード切り替え
たまにカタカナ入力なって困る。
ctrl+.
で入力モードを順番に切り替える。
Ruby環境
Guixがgemをサポートしているので、RVM, rbenv, bundlerは必要ないよう。 https://git.genenetwork.org/pjotrp/guix-notes/src/branch/master/RUBYGEMS-Nokogiri.org#headline-33
だがよくわからない。ひどく面倒そうな環境変数を追加しているのを見て、これは間違ったアプローチだと思った。 npmでlintは普通にできたので、同じようにできると思ったのだが。
wifi
nm-connection-editor
参考リンク
よくわからないので実際の例を見てみる。
ビルドしてる。 https://notabug.org/mthl/cuirass
ノート。 https://github.com/pjotrp/guix-notes/blob/master/RUBY.org
System Crafters. https://www.youtube.com/channel/UCAiiOTio8Yu69c3XnR7nQBQ https://github.com/daviwil/dotfiles
guix-works。開発環境として使うための情報が豊富。 https://www.draketo.de/software/guix-work.html
Task
TODO i3のmod keyを変更する
AltとSuperの位置が近すぎて、workspaceを打ち間違う。
TODO ibus設定をconfigで
日本語入力のときのスペースが全角になってうざい。 configで挙動を変更できないのか。
TODO emacs-exwmで日本語入力できるようにする
例によって日本語入力ができない。 Emacs以外ではできてるので、やはりi3と同じ。 最初に起動するEmacsで環境変数を指定できれば解決なのだが。 インストールした最初からできたので、どこで制御してるのかわからない。
i3ではconfigに環境変数入力 && emacs を直書きすることができる。emacs-exwmでは最初に起動するEmacsを記述してる箇所はどこにあるんだろう。
TODO メインPCのGuix完全移行
guixを使うようにする。
- 日本語入力
- Bluetooth
- Chrome
- Zoom
あたりをどうするのかが気になる。
Archives
DONE npmパッケージ
guix install node npm install npm npm install npx textlint .*org
DONE キー設定(caps入れ替え)
一度Gnomeコマンドを打つ必要がある。 システムレベルで入れ替えたいができてない。
DONE フォントインストール
dotfilesと統合して簡単に。
DONE git
gitをインストール。
DONE ssh
open-sshをインストール。
DONE .emacs.d
セットアップ完了。
DONE dotfiles
stowインストール、セットアップ完了。
DONE syncthing
単にインストールするだけ、コード。
DONE 日本語入力
anthyをインストール、コード化。
DONE syncthingなどの自動起動
shepherdでやるように。コード化。
DONE vtermのコンパイルができない
guixインストールした。
DONE emacsqlが利用できない
guixインストールするように。
DONE migemoが使えない
インストールされてない環境では読み込まない、などの対応が必要。 コピペしたぽいコードはちゃんと対応されてたが、対応コードの外側でrequireしたためどの環境でも読み込むようになっていた。修正した。
DONE パッケージリストから一気にインストールできるようにする。
desktop.scmを作成した。これで必要なパッケージを一気に導入できる。
DONE システムビルド時にインストールさせたい
パッケージ群をまとめてインストールするにはdotfileをcloneして実行すればいい。が、それをするためにsyncthingやgitをインストールする必要がある。 ビルド時にインストールさせたい。 よくわからんのでmakefileを作成した。
DONE org-roamが使えない
org-roamのバージョンが上がったためだった。コマンドが変わっていた。 逆にMintの方が古いままになっているので、そっちを直す必要がある。 もう大体同じことができるので乗り換えてもいい。
DONE サービスが起動しないことがある
ibus、syncthingが起動直後は動いているのにいつのまにか止まっている。
- i3ではshepherdを実行してなかった。
2.ログをとってみてみると、 ibus-daemon -d
はダメで、 ibus-daemon
とする必要がある。つまりふつうに実行してそこでコンソールが止まる形式で実行する必要がある。
DONE 画面ロック
時間経過で自動画面ロックしてくれないことに気づいた。 xautolockを入れることで解決した。
DONE Emacsで日本語入力
i3-wm + ibus-anthy + Emacsで日本語入力ができない問題。 この組み合わせでだけ起きる。
Emacsだけならともかく、ほかのブラウザなどの操作と一貫性がなくなるのを避けたい。 ほかにも発生する人がいた。だいたい同じ環境変数の定義を示していて、いくつか試すなかでなんとかうまくいった。
https://raawaa.github.io/2016/05/05/input-with-ibus-on-emacs/
export LC_CTYPE=ja_JP.UTF-8 export GTK_IM_MODULE=ibus export QT_IM_MODULE=ibus export XMODIFIERS=@im=ibus
重要なのは、この環境変数が評価されているセッションでEmacsを実行すること。 ibus側の設定ではなく、Emacs側にinput methodを教えてあげる環境変数、ということだ。 上をターミナルで実行してそのままemacsを実行すると、たぶんうまくいく。
それを確かめてから、あとは .bashrc
に書き込む。ターミナルでemacsを起動すると日本語が打てる。
ランチャーから起動すると打てないので、ランチャー側を少しいじる必要がある。
DONE ibusは透過させないようにする
見えにくいので。
DONE suspendできるようにする
suspendボタンをpolybarに追加した。
DONE 仮想環境の使い方
gemとかnpmを使うときにどうしたらいいのか。
guix environment -C guix --network --ad-hoc ruby ruby-sinatra
みたく、仮想環境が作れるのだが、実際どう使えばいいのかわからない。
当面はディレクトリにインストールしてそこで使うようにすればよい。 グローバルにインストールしなければ普通に使える。
DONE 使えないキーがある
たとえばM+<が使えない。単に <
入力と判定されてしまう。
alt+shiftが奪われてた問題と共通してるように見える。
system.scmの “grp:alt_shift_toggle” を消してreconfigureしたら直った。 理解してない設定は危険だな。
DONE 何かの拍子にカタカナ入力になってしまう
ibusの何かショートカットを押している。
Ctrl+,
だった。
DONE roamでセーブプロンプトが出る
とてもうざい。
時間経過で回復した。
DONE あるいはそれまでのつなぎで完全クローンを作成しておく
少なくとも今はうまく動いてるので。timeshift-gtkでできる。
References
UsingGit
guixのリポジトリ。
5 Reasons to Try Guix in 2022 - YouTube
System Craftersの動画。 Guixを使うべき理由。仮想マシン上で実際に試す。
Translating Guix (GNU Guix Reference Manual)
翻訳によるコミットのやり方。
Cuirass
guixのチャンネル。
UbuntuTips/JapaneseEnvironment/IbusAnthy - Ubuntu Japanese Wiki
IME Anthyのショートカット一覧。