- これ書いててbulletいじるのがしんどいのでhydra導入して最適化してみた
- いい感じに機能している
- home-managerでNixOSかどうかを判定できることに気付いたので仕込んでみた
- NixOS moduleを使うとhome-manager側のmoduleの引数に
nixosConfig
が含まれるので、これがあるかどうかを調べる- この際
nixosConfig ? null
のようにconfig自体にアクセスする手段を取るとconfigに影響するオプションを触る際にinfinite recursionで死ぬので、引数そのものに@args
を付けてargs ? "nixosConfig"
のように取るとよい
- この際
- NixOS moduleを使うとhome-manager側のmoduleの引数に
- Nix Flakesの参照で<nixpkgs>を固定する方法という記事を書いた
- 何も意識しなくても
nix-
コマンド群が使えるようになるので便利
- 何も意識しなくても
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
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したりすると位置が表示されるものの、文字列にしたりはできない
- 今の所Nixでソースファイルの位置を取得する方法は3つある
- 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のビルドに必要なファイルだけ分離したらいいのだが、ここで小一時間バージョン上げると必ずリビルドが走るという問題にハマっていた。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
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) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
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がやってるような具合で設定を切り出したりして繋ぎ合わせたり、プラグインディレクトリをマージしたりといったキャッシュ作成をソースからいい感じに行えるので楽しい