From c3e18571d83d0491b3bc524822de077b065859d8 Mon Sep 17 00:00:00 2001 From: himkt Date: Fri, 13 Mar 2026 18:36:45 +0900 Subject: [PATCH 01/11] feat: convert git module from programs.git to file-based config --- home/macos.nix | 3 --- home/modules/git/default.nix | 27 +++++---------------------- home/modules/git/files/config | 7 +++++++ 3 files changed, 12 insertions(+), 25 deletions(-) diff --git a/home/macos.nix b/home/macos.nix index 078437f8..69098bb3 100644 --- a/home/macos.nix +++ b/home/macos.nix @@ -46,9 +46,6 @@ in }; # macOS-specific platform overrides - programs.git.settings.credential."https://github.com".helper = - lib.mkForce "!/opt/homebrew/bin/gh auth git-credential"; - programs.tmux.extraConfig = lib.mkAfter '' # macOS clipboard integration bind-key -T copy-mode-vi y send -X copy-selection-and-cancel\; run "tmux save -|pbcopy" diff --git a/home/modules/git/default.nix b/home/modules/git/default.nix index b0c7ec4e..8d868a04 100644 --- a/home/modules/git/default.nix +++ b/home/modules/git/default.nix @@ -6,32 +6,15 @@ }: { - programs.git = { - enable = true; - lfs.enable = true; + home.packages = with pkgs; [ + git + git-lfs + ]; - settings = { - user = { - name = "himkt"; - email = "himkt@klis.tsukuba.ac.jp"; - }; - credential."https://github.com" = { - helper = "!gh auth git-credential"; - }; - }; - - # Load additional config from dotfiles - includes = [ - { path = "~/.config/git/config-extra"; } - ]; - }; - - # Additional git config (aliases, format, etc.) - xdg.configFile."git/config-extra" = { + xdg.configFile."git/config" = { source = ./files/config; }; - # Global gitignore xdg.configFile."git/ignore" = { source = ./files/ignore; }; diff --git a/home/modules/git/files/config b/home/modules/git/files/config index 562b6791..82005898 100644 --- a/home/modules/git/files/config +++ b/home/modules/git/files/config @@ -1,3 +1,10 @@ +[user] + name = himkt + email = himkt@klis.tsukuba.ac.jp + +[credential "https://github.com"] + helper = !gh auth git-credential + [pull] rebase = false From 54e55619e32788da22a9bdc0013340891146d9a4 Mon Sep 17 00:00:00 2001 From: himkt Date: Fri, 13 Mar 2026 18:37:42 +0900 Subject: [PATCH 02/11] feat: convert tmux module from programs.tmux to file-based config --- home/macos.nix | 6 ------ home/modules/tmux/default.nix | 9 ++++++--- home/modules/tmux/files/tmux.conf | 4 ++-- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/home/macos.nix b/home/macos.nix index 69098bb3..15bb1286 100644 --- a/home/macos.nix +++ b/home/macos.nix @@ -46,12 +46,6 @@ in }; # macOS-specific platform overrides - programs.tmux.extraConfig = lib.mkAfter '' - # macOS clipboard integration - bind-key -T copy-mode-vi y send -X copy-selection-and-cancel\; run "tmux save -|pbcopy" - bind-key -T copy-mode-vi Enter send -X copy-selection-and-cancel\; run "tmux save -|pbcopy" - ''; - programs.mise.globalConfig = { tools = { gcloud = "latest"; diff --git a/home/modules/tmux/default.nix b/home/modules/tmux/default.nix index b0081458..5d902afb 100644 --- a/home/modules/tmux/default.nix +++ b/home/modules/tmux/default.nix @@ -6,8 +6,11 @@ }: { - programs.tmux = { - enable = true; - extraConfig = builtins.readFile ./files/tmux.conf; + home.packages = with pkgs; [ + tmux + ]; + + xdg.configFile."tmux/tmux.conf" = { + source = ./files/tmux.conf; }; } diff --git a/home/modules/tmux/files/tmux.conf b/home/modules/tmux/files/tmux.conf index e3139961..edf2868d 100644 --- a/home/modules/tmux/files/tmux.conf +++ b/home/modules/tmux/files/tmux.conf @@ -12,8 +12,8 @@ set -g status-justify left # enable mouse mode setw -g mode-keys vi -bind-key -T copy-mode-vi y send -X copy-selection-and-cancel -bind-key -T copy-mode-vi Enter send -X copy-selection-and-cancel +bind-key -T copy-mode-vi y send -X copy-selection-and-cancel\; run "tmux save -|pbcopy" +bind-key -T copy-mode-vi Enter send -X copy-selection-and-cancel\; run "tmux save -|pbcopy" # color set -g status-fg colour231 From c96c1a9ef45aae34676a33aeb677307a44370500 Mon Sep 17 00:00:00 2001 From: himkt Date: Fri, 13 Mar 2026 18:39:04 +0900 Subject: [PATCH 03/11] feat: convert mise module from programs.mise to file-based config --- home/macos.nix | 10 -------- home/modules/mise/default.nix | 39 +++-------------------------- home/modules/mise/files/config.toml | 23 +++++++++++++++++ home/modules/zsh/files/zshrc | 4 +++ 4 files changed, 30 insertions(+), 46 deletions(-) create mode 100644 home/modules/mise/files/config.toml diff --git a/home/macos.nix b/home/macos.nix index 15bb1286..83d09f97 100644 --- a/home/macos.nix +++ b/home/macos.nix @@ -45,15 +45,5 @@ in EDITOR = "nvim"; }; - # macOS-specific platform overrides - programs.mise.globalConfig = { - tools = { - gcloud = "latest"; - }; - settings = { - idiomatic_version_file_enable_tools = []; - }; - }; - programs.home-manager.enable = true; } diff --git a/home/modules/mise/default.nix b/home/modules/mise/default.nix index a00ef1cd..88843d13 100644 --- a/home/modules/mise/default.nix +++ b/home/modules/mise/default.nix @@ -1,43 +1,10 @@ -{ - pkgs, - inputs, - ... -}: - +{ pkgs, inputs, ... }: let unstable = import inputs.nixpkgs-unstable { system = pkgs.stdenv.hostPlatform.system; }; in - { - programs.mise = { - enable = true; - package = unstable.mise; - enableZshIntegration = true; - - globalConfig = { - tools = { - "aqua:ahmetb/kubectx" = "latest"; - "aqua:anthropics/claude-code" = "latest"; - # FIXME(himkt): btop does not release binaries for macOS - # "aqua:aristocratos/btop" = "latest"; - "aqua:bazelbuild/bazelisk" = "latest"; - "aqua:cli/cli" = "latest"; - "aqua:derailed/k9s" = "latest"; - "aqua:jqlang/jq" = "latest"; - "aqua:kubernetes-sigs/kustomize" = "latest"; - "aqua:kubernetes/kubernetes/kubectl" = "latest"; - "aqua:openai/codex" = "latest"; - "asdf:mise-plugins/mise-gcloud" = "latest"; - "core:java" = "latest"; - "core:node" = "latest"; - }; - settings = { - all_compile = false; - experimental = true; - # disable_backends = [ "asdf" ]; - }; - }; - }; + home.packages = [ unstable.mise ]; + xdg.configFile."mise/config.toml" = { source = ./files/config.toml; }; } diff --git a/home/modules/mise/files/config.toml b/home/modules/mise/files/config.toml new file mode 100644 index 00000000..f4f0cea6 --- /dev/null +++ b/home/modules/mise/files/config.toml @@ -0,0 +1,23 @@ +[tools] +"aqua:ahmetb/kubectx" = "latest" +"aqua:ajeetdsouza/zoxide" = "latest" +"aqua:anthropics/claude-code" = "latest" +# FIXME(himkt): btop does not release binaries for macOS +# "aqua:aristocratos/btop" = "latest" +"aqua:bazelbuild/bazelisk" = "latest" +"aqua:cli/cli" = "latest" +"aqua:derailed/k9s" = "latest" +"aqua:jqlang/jq" = "latest" +"aqua:junegunn/fzf" = "latest" +"aqua:kubernetes-sigs/kustomize" = "latest" +"aqua:kubernetes/kubernetes/kubectl" = "latest" +"aqua:openai/codex" = "latest" +"asdf:mise-plugins/mise-gcloud" = "latest" +"core:java" = "latest" +"core:node" = "latest" +gcloud = "latest" + +[settings] +all_compile = false +experimental = true +idiomatic_version_file_enable_tools = [] diff --git a/home/modules/zsh/files/zshrc b/home/modules/zsh/files/zshrc index c526d5ef..d0fa8217 100644 --- a/home/modules/zsh/files/zshrc +++ b/home/modules/zsh/files/zshrc @@ -150,6 +150,10 @@ PROMPT+=$'\n' PROMPT+='> ' SPROMPT="${fg[red]}%r$reset_color is correct? [y, n, a, e]:" +if command -v mise > /dev/null; then + eval "$(mise activate zsh)" +fi + if command -v fzf > /dev/null; then source <(fzf --zsh) fi From a4e6130dcb5865764dee24f5e7f96f73f9c0f7f1 Mon Sep 17 00:00:00 2001 From: himkt Date: Fri, 13 Mar 2026 18:40:14 +0900 Subject: [PATCH 04/11] feat: convert zsh module from programs.zsh to file-based config --- home/modules/zsh/default.nix | 19 +++---------------- home/modules/zsh/files/zshrc | 6 ++++++ home/nixos.nix | 4 ---- 3 files changed, 9 insertions(+), 20 deletions(-) diff --git a/home/modules/zsh/default.nix b/home/modules/zsh/default.nix index 644820b1..833d6ee9 100644 --- a/home/modules/zsh/default.nix +++ b/home/modules/zsh/default.nix @@ -1,19 +1,6 @@ +{ ... }: { - config, - pkgs, - lib, - ... -}: - -{ - programs.zsh = { - enable = true; - initContent = builtins.readFile ./files/zshrc; + home.file.".zshrc" = { + source = ./files/zshrc; }; - - # Additional packages needed by zshrc - home.packages = with pkgs; [ - fzf - zoxide - ]; } diff --git a/home/modules/zsh/files/zshrc b/home/modules/zsh/files/zshrc index d0fa8217..b299c6c7 100644 --- a/home/modules/zsh/files/zshrc +++ b/home/modules/zsh/files/zshrc @@ -43,6 +43,11 @@ function git-home () { cd `git rev-parse --show-toplevel` } +# Source home-manager session variables +if [ -f "$HOME/.nix-profile/etc/profile.d/hm-session-vars.sh" ]; then + . "$HOME/.nix-profile/etc/profile.d/hm-session-vars.sh" +fi + # tier1 export EDITOR=vim export FZF_DEFAULT_OPTS='--height 50% --reverse --border' @@ -79,6 +84,7 @@ Darwin*) ;; Linux*) export HOMEBREW_ROOT=/home/linuxbrew/.linuxbrew + alias open="xdg-open" ;; esac diff --git a/home/nixos.nix b/home/nixos.nix index b0ab414b..dce4d2ab 100644 --- a/home/nixos.nix +++ b/home/nixos.nix @@ -154,9 +154,5 @@ in }; }; - # NixOS-specific platform overrides - programs.zsh.shellAliases = { - open = "xdg-open"; - }; programs.home-manager.enable = true; } From deb8e4620b3cb0c6bc1163743f11a3e6ff3e1a90 Mon Sep 17 00:00:00 2001 From: himkt Date: Fri, 13 Mar 2026 18:40:59 +0900 Subject: [PATCH 05/11] feat: convert nvim module from programs.neovim to file-based config --- home/modules/nvim/default.nix | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/home/modules/nvim/default.nix b/home/modules/nvim/default.nix index 79b224a8..f5f35bb9 100644 --- a/home/modules/nvim/default.nix +++ b/home/modules/nvim/default.nix @@ -1,26 +1,8 @@ +{ pkgs, ... }: { - config, - pkgs, - lib, - ... -}: - -{ - programs.neovim = { - enable = true; - viAlias = true; - vimAlias = true; - - plugins = with pkgs.vimPlugins; [ - vim-easymotion - tabular - fzf-vim - vim-indent-guides - vim-anzu - vim-airline - vim-polyglot - ]; - }; + home.packages = with pkgs; [ + neovim + ]; xdg.configFile."nvim/init.vim" = { source = ./files/init.vim; From 6bcd2dd492ddc020b362882914f137fa4714f050 Mon Sep 17 00:00:00 2001 From: himkt Date: Fri, 13 Mar 2026 18:44:02 +0900 Subject: [PATCH 06/11] refactor: move tmux package from home.packages to mise --- home/modules/mise/files/config.toml | 1 + home/modules/tmux/default.nix | 12 +----------- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/home/modules/mise/files/config.toml b/home/modules/mise/files/config.toml index f4f0cea6..7ab359aa 100644 --- a/home/modules/mise/files/config.toml +++ b/home/modules/mise/files/config.toml @@ -12,6 +12,7 @@ "aqua:kubernetes-sigs/kustomize" = "latest" "aqua:kubernetes/kubernetes/kubectl" = "latest" "aqua:openai/codex" = "latest" +"aqua:tmux/tmux" = "latest" "asdf:mise-plugins/mise-gcloud" = "latest" "core:java" = "latest" "core:node" = "latest" diff --git a/home/modules/tmux/default.nix b/home/modules/tmux/default.nix index 5d902afb..245eaf96 100644 --- a/home/modules/tmux/default.nix +++ b/home/modules/tmux/default.nix @@ -1,15 +1,5 @@ +{ ... }: { - config, - pkgs, - lib, - ... -}: - -{ - home.packages = with pkgs; [ - tmux - ]; - xdg.configFile."tmux/tmux.conf" = { source = ./files/tmux.conf; }; From 6497fdbced102e5ff3f28ae56ab1ce964f08a419 Mon Sep 17 00:00:00 2001 From: himkt Date: Fri, 13 Mar 2026 19:14:41 +0900 Subject: [PATCH 07/11] fix: add mise shims to sessionPath for non-interactive shells --- home/modules/mise/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/home/modules/mise/default.nix b/home/modules/mise/default.nix index 88843d13..3a5c5790 100644 --- a/home/modules/mise/default.nix +++ b/home/modules/mise/default.nix @@ -1,4 +1,4 @@ -{ pkgs, inputs, ... }: +{ pkgs, inputs, config, ... }: let unstable = import inputs.nixpkgs-unstable { system = pkgs.stdenv.hostPlatform.system; @@ -6,5 +6,6 @@ let in { home.packages = [ unstable.mise ]; + home.sessionPath = [ "${config.xdg.dataHome}/mise/shims" ]; xdg.configFile."mise/config.toml" = { source = ./files/config.toml; }; } From d771dc9e60419a4fc13f9e41554bd18fca4c8035 Mon Sep 17 00:00:00 2001 From: himkt Date: Fri, 13 Mar 2026 19:42:26 +0900 Subject: [PATCH 08/11] refactor: remove hm-session-vars dependency, inline mise shims and EDITOR into zshrc --- home/macos.nix | 4 ---- home/modules/mise/default.nix | 3 +-- home/modules/zsh/files/zshrc | 7 ++----- 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/home/macos.nix b/home/macos.nix index 83d09f97..8eb4e484 100644 --- a/home/macos.nix +++ b/home/macos.nix @@ -41,9 +41,5 @@ in himkt_pkgs.pathfinder ]; - home.sessionVariables = { - EDITOR = "nvim"; - }; - programs.home-manager.enable = true; } diff --git a/home/modules/mise/default.nix b/home/modules/mise/default.nix index 3a5c5790..88843d13 100644 --- a/home/modules/mise/default.nix +++ b/home/modules/mise/default.nix @@ -1,4 +1,4 @@ -{ pkgs, inputs, config, ... }: +{ pkgs, inputs, ... }: let unstable = import inputs.nixpkgs-unstable { system = pkgs.stdenv.hostPlatform.system; @@ -6,6 +6,5 @@ let in { home.packages = [ unstable.mise ]; - home.sessionPath = [ "${config.xdg.dataHome}/mise/shims" ]; xdg.configFile."mise/config.toml" = { source = ./files/config.toml; }; } diff --git a/home/modules/zsh/files/zshrc b/home/modules/zsh/files/zshrc index b299c6c7..5189ef69 100644 --- a/home/modules/zsh/files/zshrc +++ b/home/modules/zsh/files/zshrc @@ -43,11 +43,6 @@ function git-home () { cd `git rev-parse --show-toplevel` } -# Source home-manager session variables -if [ -f "$HOME/.nix-profile/etc/profile.d/hm-session-vars.sh" ]; then - . "$HOME/.nix-profile/etc/profile.d/hm-session-vars.sh" -fi - # tier1 export EDITOR=vim export FZF_DEFAULT_OPTS='--height 50% --reverse --border' @@ -156,6 +151,8 @@ PROMPT+=$'\n' PROMPT+='> ' SPROMPT="${fg[red]}%r$reset_color is correct? [y, n, a, e]:" +export PATH="$HOME/.local/share/mise/shims:$PATH" + if command -v mise > /dev/null; then eval "$(mise activate zsh)" fi From 1a46848f0802c53ee488f3029a46edd541e4543a Mon Sep 17 00:00:00 2001 From: himkt Date: Fri, 13 Mar 2026 19:50:28 +0900 Subject: [PATCH 09/11] refactor: move uv and neovim from home.packages to mise, update mise config --- home/modules/mise/files/config.toml | 5 +++-- home/modules/nvim/default.nix | 6 +----- home/modules/uv/default.nix | 12 +----------- 3 files changed, 5 insertions(+), 18 deletions(-) diff --git a/home/modules/mise/files/config.toml b/home/modules/mise/files/config.toml index 7ab359aa..bbfdf929 100644 --- a/home/modules/mise/files/config.toml +++ b/home/modules/mise/files/config.toml @@ -2,6 +2,7 @@ "aqua:ahmetb/kubectx" = "latest" "aqua:ajeetdsouza/zoxide" = "latest" "aqua:anthropics/claude-code" = "latest" +"aqua:astral-sh/uv" = "latest" # FIXME(himkt): btop does not release binaries for macOS # "aqua:aristocratos/btop" = "latest" "aqua:bazelbuild/bazelisk" = "latest" @@ -11,12 +12,12 @@ "aqua:junegunn/fzf" = "latest" "aqua:kubernetes-sigs/kustomize" = "latest" "aqua:kubernetes/kubernetes/kubectl" = "latest" +"aqua:neovim/neovim" = "latest" "aqua:openai/codex" = "latest" -"aqua:tmux/tmux" = "latest" +"aqua:tmux/tmux-builds" = "latest" "asdf:mise-plugins/mise-gcloud" = "latest" "core:java" = "latest" "core:node" = "latest" -gcloud = "latest" [settings] all_compile = false diff --git a/home/modules/nvim/default.nix b/home/modules/nvim/default.nix index f5f35bb9..6813f6fa 100644 --- a/home/modules/nvim/default.nix +++ b/home/modules/nvim/default.nix @@ -1,9 +1,5 @@ -{ pkgs, ... }: +{ ... }: { - home.packages = with pkgs; [ - neovim - ]; - xdg.configFile."nvim/init.vim" = { source = ./files/init.vim; }; diff --git a/home/modules/uv/default.nix b/home/modules/uv/default.nix index 25e601ca..52da4f59 100644 --- a/home/modules/uv/default.nix +++ b/home/modules/uv/default.nix @@ -1,15 +1,5 @@ +{ ... }: { - config, - pkgs, - lib, - ... -}: - -{ - home.packages = with pkgs; [ - uv - ]; - xdg.configFile."uv/uv.toml" = { source = ./files/uv.toml; }; From d2d7e862d2b7d87ca9adb6ef40ad7aba2057b8ee Mon Sep 17 00:00:00 2001 From: himkt Date: Fri, 13 Mar 2026 19:56:23 +0900 Subject: [PATCH 10/11] fix: move mise shims PATH before tmux auto-attach, use conditional pbcopy --- home/modules/tmux/files/tmux.conf | 8 ++++++-- home/modules/zsh/files/zshrc | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/home/modules/tmux/files/tmux.conf b/home/modules/tmux/files/tmux.conf index edf2868d..354ef435 100644 --- a/home/modules/tmux/files/tmux.conf +++ b/home/modules/tmux/files/tmux.conf @@ -12,8 +12,12 @@ set -g status-justify left # enable mouse mode setw -g mode-keys vi -bind-key -T copy-mode-vi y send -X copy-selection-and-cancel\; run "tmux save -|pbcopy" -bind-key -T copy-mode-vi Enter send -X copy-selection-and-cancel\; run "tmux save -|pbcopy" +if-shell "command -v pbcopy" \ + "bind-key -T copy-mode-vi y send -X copy-selection-and-cancel\\; run 'tmux save-buffer -|pbcopy'" \ + "bind-key -T copy-mode-vi y send -X copy-selection-and-cancel" +if-shell "command -v pbcopy" \ + "bind-key -T copy-mode-vi Enter send -X copy-selection-and-cancel\\; run 'tmux save-buffer -|pbcopy'" \ + "bind-key -T copy-mode-vi Enter send -X copy-selection-and-cancel" # color set -g status-fg colour231 diff --git a/home/modules/zsh/files/zshrc b/home/modules/zsh/files/zshrc index 5189ef69..7374753a 100644 --- a/home/modules/zsh/files/zshrc +++ b/home/modules/zsh/files/zshrc @@ -2,6 +2,8 @@ # .zshrc - The zsh configuration # +export PATH="$HOME/.local/share/mise/shims:$PATH" + if command -v tmux > /dev/null && [ -z "$TMUX" ] && [ -z "$VSCODE_INJECTION" ] && [[ $- == *i* ]]; then tmux attach-session 2>/dev/null || tmux new-session fi @@ -151,8 +153,6 @@ PROMPT+=$'\n' PROMPT+='> ' SPROMPT="${fg[red]}%r$reset_color is correct? [y, n, a, e]:" -export PATH="$HOME/.local/share/mise/shims:$PATH" - if command -v mise > /dev/null; then eval "$(mise activate zsh)" fi From 0d5e3c1e50acf6d3cef690a74ab83613772a2483 Mon Sep 17 00:00:00 2001 From: himkt Date: Fri, 13 Mar 2026 20:04:59 +0900 Subject: [PATCH 11/11] feat: add bazel=bazelisk alias in zshrc --- home/modules/zsh/files/zshrc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/home/modules/zsh/files/zshrc b/home/modules/zsh/files/zshrc index 7374753a..dcc59e53 100644 --- a/home/modules/zsh/files/zshrc +++ b/home/modules/zsh/files/zshrc @@ -162,6 +162,10 @@ if command -v fzf > /dev/null; then fi +if command -v bazelisk > /dev/null; then + alias bazel=bazelisk +fi + if command -v nvim > /dev/null; then alias vim=nvim export EDITOR=nvim