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 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 # 更新

詳しい解説

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

日本語入力

https://debbugs.gnu.org/cgi/bugreport.cgi?bug=35610#38

言語設定を日本語にしただけでは入力や表示ができない。手動で設定する必要がある。

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の設定項目があったので選択しておいた。)

https://askubuntu.com/questions/967364/ubuntu-17-10-and-later-cant-change-the-input-switching-shortcut-to-altshift

この辺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

参考リンク

Task

TODO Dockerを起動できるようにする

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が起動直後は動いているのにいつのまにか止まっている。

  1. 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 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のショートカット一覧。