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

日報

  • これ書いてて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したりすると位置が表示されるものの、文字列にしたりはできない

日報

  • skkeletonservがディスクの肥やしになっていたので雑に公開した
  • 車輪の再発明がてら、flake-compatもどきを作っていたけど、結構学びがあった
    • outputs = self // (flakeNix.outputs (inputs // { self = outputs; })); みたいな書き方をすると、outputsの呼び出しに渡されるselfが循環するので面白い
      • ここだけは書き方が分からなくて答えを見てしまった
  • ddu.vimの設定を詰めてた
    • waitのかけかたミスってて、中途半端に設定が適用された状態で立ち上がっていたので適切にかけるようにした

日報

  • nix-prefetch-jsrなるものを作った
    • @std/[email protected] みたいなパッケージ指定子を与えるとdeno使ってfetchしてキャッシュした上でNix式を生成してくれる
  • nix-prefetch-jsrを元にdeno.lockからvendorディレクトリを生成するNix式を吐くプログラムを書いた
    • 今の所jsrで完結するプログラムにしか適用できないけど、それなりに複雑なプログラムも動いた
  • 将来的にはdenopsプラグインをパッキングしたい

日報

Neovimの適当overrideがtree-sitterの更新によりぶっ壊れてあれこれしてる内に、 USE_BUNDLED によるビルドをしたら安定するんちゃうかということに気付いたため、Nix内で完結できないか試していた。
幸い cmake.deps/deps.txt にそのまま使える形で依存の記述があるので、Nixで使える形に変形してビルドが通ることを確認した。
ビルドにより時間がかかるようになったが、安心してアップデートをかけられるようになった。


公開したらnatsukiumさんよりdepsのビルドだけ別derivationにした方がいいとの指摘を頂いたので、そのように手直ししていた。
builtins.path を適用して、depsのビルドに必要なファイルだけ分離したらいいのだが、ここで小一時間バージョン上げると必ずリビルドが走るという問題にハマっていた。

@kuuote
kuuote / neovim.nix
Last active January 28, 2025 10:49
/cmake.deps/deps.txt を元にbundle取得することで、NeovimのソースツリーをそのままNixでビルドするやつ。NYSLでどうぞ
{
pkgs ? import <nixpkgs> { },
neovim ? import ./neovim-src.nix { inherit pkgs; },
}:
let
lib = pkgs.lib;
deps = lib.pipe "${neovim}/cmake.deps/deps.txt" [
builtins.readFile
(builtins.split "[\n]")
(builtins.filter builtins.isString)
@kuuote
kuuote / default.nix
Last active January 27, 2025 15:36
nix run https://gist.github.com/kuuote/45eb477611a960fecf561602b3769dd1/archive/eef9b05768805f27b90b94768d196330bb537ed4.zip で実行できます。C-x tでチュートリアルが走ります。
{
pkgs ? import <nixpkgs> { },
}:
let
emacs = pkgs.emacsPackages.withPackages (epkgs: [ epkgs.ddskk ]);
init-directory = pkgs.linkFarm ".emacs.d" {
"init.el" = ./init.el;
"skk.el" = pkgs.substituteAll {
src = ./skk.el;

日報

  • lexima.vim導入して括弧抜けのやつ設定してみた
  • 自分でプラグインマネージャを書いてみて気付いたけど、Fuzzy Finderでプラグインディレクトリにアクセスするやつに結構依存しているらしい
  • Melpaからddskk突っ込むとskk-setup.elが無いからskk-isearchが使えない問題をどうにかしたref
  • fzfをMRU等で使う際には --scheme history を指定するといいらしい
  • 八十八ヶ所巡礼を垂れ流してたら親がハマりかけてて驚いてる
  • Nixを使うと、dein.vimがやってるような具合で設定を切り出したりして繋ぎ合わせたり、プラグインディレクトリをマージしたりといったキャッシュ作成をソースからいい感じに行えるので楽しい