Skip to content

Instantly share code, notes, and snippets.

View kuuote's full-sized avatar
🙃
I may be slow to respond.

kuuote

🙃
I may be slow to respond.
View GitHub Profile
  • 日報
  • 最近Emacs周りに変更入ってるらしく妙に不安定なんだけど、Nixだととりあえずロールバックで回避できて最高だな
  • nucleoをdduで動かそう計画、wasm-bindgenの使い方覚えたのでやるだけになった
    • structのfieldにpub付けられるの知らなくてしばらくハマっていた
    • nucleoの使い方もちょっと迷ったけど、最低限の例がリポジトリに載っていたのでなんとかなった
  • NixのrustPlatformで軽微な修正を高速コンパイルする方法編み出したのでどこかで共有したい
    • 雑に言うと以下のステップをやっている
      • Cargo.lockとCargo.tomlだけ複製して src/lib.rs なり src/main.rs なり生やして空のプロジェクトを作る
        • これはlinkFarmで達成できた
      • これを rustPlatform.buildRustPackage でビルドかけて installPhasetarget に圧縮かけてビルドステップを打ち切り
  • 日報
  • GCの対象から今使ってるnixpkgsのderivation達を外したいので nix-env の使い方をひたすら調べていた
    • nix-env -qa を走らせると nix build と同じような方法で渡したファイルを評価、値そのものあるいは、値がAttrSetならその要素からderivationを集める
      • この際、要素がAttrSetでかつ recurseForDerivations = true であれば(この値は lib.recurseIntoAttrs で生やせる)このAttrSetも再帰的に辿ってderivationを集めてくれる
    • トップレベルに生えてるalias(emacsPackages辺りがそう)は recurseForDerivations を外してあるので、nixpkgs側で収集する際は改めて生やしているらしい
      • ここで使われている
      • Nixのビルドの中で nix-env 叩くの思い付いた時「俺天才だわ」と思ってたけど、nixpkgsの中で既に行われていたでござる
  • ついでに command-not-found が使っているDBのデータがどこから来ているのかも調べた
    • programs側を見るとチャンネルのデータの中の programs.sqlite というファイルを使っていることとチャンネルのリリースファイルが nixexprs.tar.xz であることが書かれている
    • ここで、チャンネルリリースのスクリプトが全部nixpkgs内にあると思い込んでひたすらgrepをかけまくっていた模様

日報

  • ひたすらinit.el/orgと向き合って一日過ごしていた
    • eval-when-compileの枠が増えてきたのでまとめて囲うようにした
    • evil-modeのマイナーモード別キーバインドが最高すぎるのでずっと設定していた
    • leaf.elで表記を削れる所を徐々に削っている
    • evil-define-key がだるかったので階層で書けるマクロを書いた
    • advice完全に理解した。マクロの結果をいじくれるの便利だな
      • パターンがすごいあるのでなんでもできるじゃんと思った
      • ふと思ったけど、typstのコンテキストデフォルト値に似ているな

日報

  • tempel突っ込んでみた。記法が独特だけど、インデント調整だけで改行の位置はこっち任せなEmacs Lispでならありかもしれない
  • cape突っ込んで試すついでに completion-at-point-functions いじってみてたけど、完全にddc.vimと同じ感じに見えてきた
  • ddskkのcapf作ってみたい
    • skkeletonのアレが欲しすぎる

日報

  • 今日は一日体調が悪かった。睡眠が不規則すぎる
  • ランチパックはオーブンで焼くと美味い
  • :%!xxx-fmtをいい感じにスクリプトでやるという記事を書いた
    • Vimでフォーマットをいい感じにやる方法の紹介をした
  • the engineer’s paradiseでゴミ箱の話をしていたらgtrashなるツールを作者に推されたので入れてみた
    • ファイルシステムをちゃんと見てくれるのがtrash-cliしか無かったので代替欲しいとずっと思ってたのでわいわいしてる
  • Nixのpipe-operatorsはいいぞみたいな話をしていた。Lispのlet*やスレッドマクロなどもそうだけど、ネストを減らせるのはありがたい

日報

  • セットアップを楽にするためにNixのスタティックバイナリをビルドした
    • 現状nixpkgsのnixStaticはビルドに失敗するが、Nix 2.26辺りで構造が変わっているらしく、リポジトリ側でビルドすると成功する
      • nixpkgsのNix 2.26をpkgsStatic経由でビルドしようとするとsplice周りで引っ掛かって落ちる
      • 雑に欲しかったら nix build nix#nix-static で手に入るはず

日報

  • NixOSのboot partitionが埋まるので頻繁にprofile消してるという話をしていたらyasunoriさんに「それ boot.loader.systemd-boot.configurationLimit = 5 でできるよ(意訳)」と言われたので設定した
  • bashの配列の使い方を完全に理解した。この言語難しすぎる
    • 引数を args=("$@") すると配列になる
    • args[$i] で引っ張り出したり書き換えたりできる
    • "${args[@]}" で区切りを維持したまま渡せる
  • 手元に置いてるスクリプトを nix shell 使うように書き換えてた

日報

  • おうちマシンでnix-index-databaseの生成を試みたら死んだ。メモリ16GBは人権たり得ない気がしてきた
    • ちなみにzram入れてもだめだった
  • Nixの設定で共通化しやすい物はhome-managerに寄せることにした
  • Emacsの設定をNixで書かれたtangleエンジン使ってやってたんだけど、Nixだから普通にEmacs自体が使えることに気付いたのでEmacsでtangleするようにした
    • ついでに出力したinit.elをパッケージにしてネイティブコンパイルまでするようにした

日報

  • fzfをいい感じにVimから利用したい
    • →helixがnucleoというfzfと同じアルゴリズムで動くマッチングライブラリを公開している
    • →wasmにしてdenopsから使えるようにできそう?
    • →そういやどれくらいの実装コストで達成できるのか試してないな?
    • みたいな流れでwasm生成できる環境を作ろうとしていた
  • コーディングそっちのけでNixでRustコードをwasmにコンパイルする環境を組んでいた
    • ドキュメントにはcrossSystem使えって書いてあるが、使おうとするとstdenvごとビルドし直そうとするので大量のビルドが走ってつらくてやめた
    • fenix入れてみたけどでかいデータ降ってきたしこれ維持するのなんか嫌だとなった
    • よく考えたらrustc-wasm32がrustcへのエイリアスになってるんだから何かハックしたらビルドできるんちゃうのん?と思った

日報

  • nixos-rebuild の結果を利用してswitchとか行うツールを作った
    • suidを利用して特権で動くプログラムは初めて作ったけどいい経験になった
      • 改めてプログラムの中でsetuidしないと特権伝播しないとかね
    • suid無いNixOSでどうやってるんだろうと思ってたけど、wrapper作って起動時に展開してた
    • 結局sudoersに書けばええやんとなったのでシェルスクリプトで書き直してsudoers書いた
  • Nixの設定リポジトリにflake-parts突っ込んだ
    • 単純な設定だとあんまり旨味無いけどついでにリファクタリングしてる