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

日報

  • 今日は一日体調が悪かった。睡眠が不規則すぎる
  • ランチパックはオーブンで焼くと美味い
  • :%!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突っ込んだ
    • 単純な設定だとあんまり旨味無いけどついでにリファクタリングしてる

日報

  • これ書いててbulletいじるのがしんどいのでhydra導入して最適化してみた
    • いい感じに機能している
  • home-managerでNixOSかどうかを判定できることに気付いたので仕込んでみた
    • NixOS moduleを使うとhome-manager側のmoduleの引数に nixosConfig が含まれるので、これがあるかどうかを調べる
      • この際 nixosConfig ? null のようにconfig自体にアクセスする手段を取るとconfigに影響するオプションを触る際にinfinite recursionで死ぬので、引数そのものに @args を付けて args ? "nixosConfig" のように取るとよい
  • Nix Flakesの参照で<nixpkgs>を固定する方法という記事を書いた
    • 何も意識しなくても nix- コマンド群が使えるようになるので便利

日報

  • 一日置きにローカルでCI回して nix flake update かけてるんだけど、日付でタグを打つようにした
  • nix flake initが微妙に使いづらいのでderivation評価するタイプのテンプレートジェネレータを作ろうとしている
    • 数分で書いたシェルスクリプトをベースにRustでコード書いてたけど、数時間かかった
      • まあnix developの環境から組んだせいもあるけど
        let
          pkgs = import <nixpkgs> { };
        in
        pkgs.mkShell {
                    
{
description = "latte PoC";
outputs =
{
nixpkgs,
...
}:
let
inherit (nixpkgs) lib;

日報

  • natsukiumさんから nix repl でソースファイルの位置を辿る方法を聞いて、どうやっているんだろうと思いながら調べていたら気付いたらnixpkgsのtop level mattributeを辿るdduソースを作っていた
    • 今の所Nixでソースファイルの位置を取得する方法は3つある
      • __curPos を参照すると __curPos の位置を指すAttrSetが取れる
      • builtins.unsafeGetAttrPos を叩くとAttrSetのattributeが定義された場所が取得できる
        • 返ってくるのはattributeの中身ではなくattributeそのものの場所なので、後付けで使うのには向いていない
        • こちらは stdenv.mkDerivation の中で meta.position の中身を埋めるのに使われている
      • 関数は宣言した時に位置を保存しているらしく、replに打ち込んだりtraceしたりすると位置が表示されるものの、文字列にしたりはできない