This commit is contained in:
2026-07-27 19:31:25 +09:00
parent 89eeb23d1c
commit 8fec0494ec
9 changed files with 248 additions and 261 deletions
+9
View File
@@ -31,6 +31,15 @@ in
};
};
spawn-at-startup = [
{ command = [ "noctalia" ]; }
{
command = [
"${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"
];
}
];
cursor.size = 16;
layout = {
+4 -256
View File
@@ -1,4 +1,7 @@
{ pkgs, ... }:
let
keymaps = import ./keymaps.nix { };
in
{
home.sessionVariables = {
EDITOR = "nvim";
@@ -418,261 +421,6 @@
})
'';
keymaps = [
{
mode = "n";
key = "<Esc>";
action = "<cmd>nohlsearch<CR>";
options = {
silent = true;
desc = "検索ハイライトを解除";
};
}
{
mode = "n";
key = "j";
action.__raw = "function() return vim.v.count == 0 and 'gj' or 'j' end";
options = {
silent = true;
expr = true;
desc = "下へ移動";
};
}
{
mode = "n";
key = "k";
action.__raw = "function() return vim.v.count == 0 and 'gk' or 'k' end";
options = {
silent = true;
expr = true;
desc = "上へ移動";
};
}
{
mode = "n";
key = "K";
action.__raw = "vim.lsp.buf.hover";
options = {
silent = true;
desc = "シンボル情報";
};
}
{
mode = "n";
key = "gd";
action.__raw = "vim.lsp.buf.definition";
options = {
silent = true;
desc = "定義へジャンプ";
};
}
{
mode = "n";
key = "grr";
action.__raw = "vim.lsp.buf.references";
options = {
silent = true;
desc = "参照一覧";
};
}
{
mode = "n";
key = "gri";
action.__raw = "vim.lsp.buf.implementation";
options = {
silent = true;
desc = "実装一覧";
};
}
{
mode = "n";
key = "grt";
action.__raw = "vim.lsp.buf.type_definition";
options = {
silent = true;
desc = "型定義";
};
}
{
mode = "n";
key = "grn";
action.__raw = "vim.lsp.buf.rename";
options = {
silent = true;
desc = "名前変更";
};
}
{
mode = "n";
key = "gra";
action.__raw = "vim.lsp.buf.code_action";
options = {
silent = true;
desc = "コードアクション";
};
}
{
mode = "n";
key = "<leader>cf";
action.__raw = "function() require('conform').format({ timeout_ms = 1000, lsp_format = 'fallback' }) end";
options = {
silent = true;
desc = "フォーマット";
};
}
{
mode = "n";
key = "<leader>e";
action = "<cmd>Neotree toggle left<CR>";
options = {
silent = true;
desc = "ファイルツリー";
};
}
{
mode = "n";
key = "<leader>tt";
action = "<cmd>ToggleTerm direction=float<CR>";
options = {
silent = true;
desc = "ターミナル";
};
}
{
mode = "n";
key = "<leader>xx";
action = "<cmd>Trouble diagnostics toggle<CR>";
options = {
silent = true;
desc = "診断一覧";
};
}
{
mode = "n";
key = "<leader>gl";
action = "<cmd>LazyGit<CR>";
options = {
silent = true;
desc = "LazyGit";
};
}
{
mode = "n";
key = "<leader>gd";
action = "<cmd>DiffviewOpen<CR>";
options = {
silent = true;
desc = "差分";
};
}
{
mode = "n";
key = "<leader>mp";
action = "<cmd>Markview splitToggle<CR>";
options = {
silent = true;
desc = "Markdown プレビュー";
};
}
{
mode = "n";
key = "<leader>zz";
action = "<cmd>ZenMode<CR>";
options = {
silent = true;
desc = "Zen Mode";
};
}
{
mode = "n";
key = "zR";
action.__raw = "require('ufo').openAllFolds";
options = {
silent = true;
desc = "全て展開";
};
}
{
mode = "n";
key = "zM";
action.__raw = "require('ufo').closeAllFolds";
options = {
silent = true;
desc = "全て折りたたむ";
};
}
{
mode = "n";
key = "s";
action.__raw = "function() require('flash').jump() end";
options = {
silent = true;
desc = "Flash ジャンプ";
};
}
{
mode = "n";
key = "S";
action.__raw = "function() require('flash').treesitter() end";
options = {
silent = true;
desc = "Flash 選択";
};
}
{
mode = "n";
key = "<leader>sr";
action.__raw = "function() require('spectre').toggle() end";
options = {
silent = true;
desc = "検索・置換";
};
}
{
mode = "n";
key = "<leader>ff";
action.__raw = "function() Snacks.picker.files() end";
options = {
silent = true;
desc = "ファイルを探す";
};
}
{
mode = "n";
key = "<leader>fg";
action.__raw = "function() Snacks.picker.grep() end";
options = {
silent = true;
desc = "全文検索";
};
}
{
mode = "n";
key = "<leader>fb";
action.__raw = "function() Snacks.picker.buffers() end";
options = {
silent = true;
desc = "バッファを探す";
};
}
{
mode = "n";
key = "<leader>fh";
action.__raw = "function() Snacks.picker.help() end";
options = {
silent = true;
desc = "ヘルプを探す";
};
}
{
mode = "n";
key = "<leader>fs";
action.__raw = "function() Snacks.picker.lsp_symbols() end";
options = {
silent = true;
desc = "シンボルを探す";
};
}
];
inherit keymaps;
};
}
+190
View File
@@ -0,0 +1,190 @@
_:
let
mk = key: action: desc: {
mode = "n";
inherit key action;
options = {
silent = true;
inherit desc;
};
};
mkRaw = key: raw: desc: {
mode = "n";
inherit key;
action.__raw = raw;
options = {
silent = true;
inherit desc;
};
};
mkExpr = key: raw: desc: {
mode = "n";
inherit key;
action.__raw = raw;
options = {
silent = true;
expr = true;
inherit desc;
};
};
mkSmartWindowNav = key: direction: zellijDirection: desc: {
mode = "n";
inherit key;
action.__raw = ''
function()
local current_win = vim.api.nvim_get_current_win()
vim.cmd.wincmd("${direction}")
local at_edge = vim.api.nvim_get_current_win() == current_win
local in_zellij = vim.env.ZELLIJ ~= nil
local has_zellij_cli = vim.fn.executable("zellij") == 1
if at_edge and in_zellij and has_zellij_cli then
vim.system({ "zellij", "action", "move-focus-or-tab", "${zellijDirection}" })
end
end
'';
options = {
silent = true;
inherit desc;
};
};
in
[
# Search
(mk "<Esc>" "<cmd>nohlsearch<CR>" "検索ハイライトを解除")
# Screen line movement
(mkExpr "j" "function() return vim.v.count == 0 and 'gj' or 'j' end" "下へ移動(画面行優先)")
(mkExpr "k" "function() return vim.v.count == 0 and 'gk' or 'k' end" "上へ移動(画面行優先)")
# LSP: hover / direct jump
(mkRaw "K" "vim.lsp.buf.hover" "シンボル情報を表示")
(mkRaw "gd" "vim.lsp.buf.definition" "定義へジャンプ")
(mkRaw "grr" "vim.lsp.buf.references" "参照一覧を開く")
(mkRaw "gri" "vim.lsp.buf.implementation" "実装一覧を開く")
(mkRaw "grt" "vim.lsp.buf.type_definition" "型定義一覧を開く")
(mkRaw "grn" "vim.lsp.buf.rename" "シンボル名を一括変換")
(mkRaw "gra" "vim.lsp.buf.code_action" "コードアクション")
(mkRaw "gO" "vim.lsp.buf.document_symbol" "現在ファイルのシンボル一覧")
# Glance: preview / peek
(mk "gD" "<cmd>Glance definitions<CR>" "定義をプレビュー")
(mk "gR" "<cmd>Glance references<CR>" "参照をプレビュー")
(mk "gM" "<cmd>Glance implementations<CR>" "実装をプレビュー")
(mk "gY" "<cmd>Glance type_definitions<CR>" "型定義をプレビュー")
(mk "g." "<cmd>Glance resume<CR>" "直前のGlanceを再開")
# Convenience aliases
(mkRaw "<leader>rn" "vim.lsp.buf.rename" "シンボル名を一括変換")
(mkRaw "<leader>cf"
"function() require('conform').format({ timeout_ms = 1000, lsp_format = 'fallback' }) end"
"コードをフォーマット"
)
(mkRaw "<leader>ca" "vim.lsp.buf.code_action" "コードアクション")
# Diagnostics
(mkRaw "]d" "vim.diagnostic.goto_next" "次の診断へ移動")
(mkRaw "[d" "vim.diagnostic.goto_prev" "前の診断へ移動")
(mkRaw "<leader>dl" "vim.diagnostic.open_float" "診断の詳細を表示")
# File tree
(mk "<leader>e" "<cmd>Neotree toggle left<CR>" "ファイルツリー")
# Terminal
(mk "<leader>tt" "<cmd>ToggleTerm direction=float<CR>" "ターミナル")
# Trouble
(mk "<leader>xx" "<cmd>Trouble diagnostics toggle<CR>" "診断一覧")
(mk "<leader>xq" "<cmd>Trouble qflist toggle<CR>" "Quickfix一覧")
(mk "<leader>xl" "<cmd>Trouble loclist toggle<CR>" "Location List一覧")
(mk "<leader>xs" "<cmd>Trouble symbols toggle<CR>" "シンボル一覧")
(mk "<leader>xw" "<cmd>Trouble lsp toggle<CR>" "LSP一覧")
# Quickfix / Location list navigation
(mk "]q" "<cmd>cnext<CR>" "次のQuickfixへ")
(mk "[q" "<cmd>cprev<CR>" "前のQuickfixへ")
(mk "]l" "<cmd>lnext<CR>" "次のLocation Listへ")
(mk "[l" "<cmd>lprev<CR>" "前のLocation Listへ")
# Window navigation
(mkSmartWindowNav "<C-h>" "h" "left" "左のウィンドウへ(端ならZellijペイン/タブへ)")
(mkSmartWindowNav "<C-j>" "j" "down" "下のウィンドウへ(端ならZellijペインへ)")
(mkSmartWindowNav "<C-k>" "k" "up" "上のウィンドウへ(端ならZellijペインへ)")
(mkSmartWindowNav "<C-l>" "l" "right" "右のウィンドウへ(端ならZellijペイン/タブへ)")
(mkSmartWindowNav "<C-Left>" "h" "left" "左のウィンドウへ(端ならZellijペイン/タブへ)")
(mkSmartWindowNav "<C-Down>" "j" "down" "下のウィンドウへ(端ならZellijペインへ)")
(mkSmartWindowNav "<C-Up>" "k" "up" "上のウィンドウへ(端ならZellijペインへ)")
(mkSmartWindowNav "<C-Right>" "l" "right" "右のウィンドウへ(端ならZellijペイン/タブへ)")
# Alternate file / previous file
(mk "<leader><leader>" "<C-^>" "直前のファイルへ戻る")
(mk "<leader>w-" "<C-w><C-^>" "直前のファイルをsplitで開く")
# Buffer Bar
(mk "[b" "<Cmd>BufferPrevious<CR>" "前のバッファーに移動")
(mk "]b" "<Cmd>BufferNext<CR>" "次のバッファーに移動")
(mk "<leader>bc" "<Cmd>BufferClose<CR>" "バッファーを閉じる")
# Git Conflict
(mk "<leader>gco" "<cmd>GitConflictChooseOurs<CR>" "現在のブランチを選択")
(mk "<leader>gct" "<cmd>GitConflictChooseTheirs<CR>" "相手のブランチを選択")
(mk "<leader>gcb" "<cmd>GitConflictChooseBoth<CR>" "両方を選択")
(mk "<leader>gcx" "<cmd>GitConflictListQf<CR>" "コンフリクト一覧")
(mk "]x" "<cmd>GitConflictNextConflict<CR>" "次のコンフリクト")
(mk "[x" "<cmd>GitConflictPrevConflict<CR>" "前のコンフリクト")
# Git
(mk "<leader>gl" "<cmd>LazyGit<CR>" "LazyGitを開く")
(mk "<leader>gd" "<cmd>DiffviewOpen<CR>" "差分を開く")
(mk "<leader>gH" "<cmd>DiffviewFileHistory<CR>" "リポジトリ履歴")
(mk "<leader>gh" "<cmd>DiffviewFileHistory %<CR>" "現在ファイルの履歴")
(mk "<leader>gq" "<cmd>DiffviewClose<CR>" "差分を閉じる")
# Markview
(mk "<leader>mp" "<cmd>Markview splitToggle<CR>" "Markdownプレビュー")
# Zen Mode
(mk "<leader>zz" "<cmd>ZenMode<CR>" "Zen Modeを開く/閉じる")
# UFO (folding)
(mkRaw "zR" "require('ufo').openAllFolds" "全て展開")
(mkRaw "zM" "require('ufo').closeAllFolds" "全て折りたたむ")
# Dropbar
(mkRaw "<leader>dp" "function() require('dropbar.api').pick() end" "dropbarでナビゲート")
# Snacks
(mkRaw "<leader>sd" "function() Snacks.dim.toggle() end" "Dimモードをトグル")
# Flash
(mkRaw "s" "function() require('flash').jump() end" "Flashジャンプ")
(mkRaw "S" "function() require('flash').treesitter() end" "Flashツリーシッタ選択")
# Todo Comments
(mk "]t" "<cmd>TodoNext<CR>" "次のTODO")
(mk "[t" "<cmd>TodoPrev<CR>" "前のTODO")
(mkRaw "<leader>ft" "function() Snacks.picker.todo_comments() end" "TODO一覧")
# Spectre
(mkRaw "<leader>sr" "function() require('spectre').toggle() end" "検索・置換")
# Snacks Picker: generic
(mkRaw "<leader>ff" "function() Snacks.picker.files() end" "ファイルを探す")
(mkRaw "<leader>fg" "function() Snacks.picker.grep() end" "文字列を全文検索")
(mkRaw "<leader>fb" "function() Snacks.picker.buffers() end" "開いているバッファを探す")
(mkRaw "<leader>fh" "function() Snacks.picker.help() end" "ヘルプ項目を探す")
(mkRaw "<leader>fk" "function() Snacks.picker.keymaps() end" "キーマップを探す")
(mkRaw "<leader>fc" "function() Snacks.picker.commands() end" "コマンドを探す")
# Snacks Picker: code navigation
(mkRaw "<leader>fs" "function() Snacks.picker.lsp_symbols() end" "現在ファイルのシンボルを探す")
(mkRaw "<leader>fS" "function() Snacks.picker.lsp_workspace_symbols() end" "ワークスペース全体のシンボルを探す")
(mkRaw "<leader>fr" "function() Snacks.picker.registers() end" "レジスタを探す")
(mkRaw "<leader>fj" "function() Snacks.picker.jumps() end" "ジャンプ履歴を探す")
(mkRaw "<leader>fq" "function() Snacks.picker.qflist() end" "Quickfixを探す")
(mkRaw "<leader>fl" "function() Snacks.picker.loclist() end" "Location Listを探す")
]
+5
View File
@@ -0,0 +1,5 @@
{ pkgs, ... }:
{
environment.systemPackages = [ pkgs.vim ];
environment.variables.EDITOR = "nvim";
}
+4
View File
@@ -0,0 +1,4 @@
{ pkgs, ... }:
{
environment.systemPackages = [ pkgs.sqlite ];
}