From 7996204374375f9df670b0a64e3ec8a039eee31a Mon Sep 17 00:00:00 2001 From: user3301 <26126682+user3301@users.noreply.github.com> Date: Fri, 23 Jan 2026 14:38:47 +1100 Subject: [PATCH 1/5] git module --- git/.config/git/config | 15 +++++++++++++++ home/archlinux.nix | 8 +------- home/darwin.nix | 8 +------- home/modules/dev-tools.nix | 19 ------------------- home/modules/git.nix | 23 +++++++++++++++++++++++ home/nixos-native.nix | 8 +------- home/nixos-wsl.nix | 20 +------------------- 7 files changed, 42 insertions(+), 59 deletions(-) create mode 100644 git/.config/git/config create mode 100644 home/modules/git.nix diff --git a/git/.config/git/config b/git/.config/git/config new file mode 100644 index 0000000..14d97ba --- /dev/null +++ b/git/.config/git/config @@ -0,0 +1,15 @@ +# Git configuration +# This file is managed by dotfiles and symlinked to ~/.config/git/config + +[user] + name = "user3301" + email = "26126682+user3301@users.noreply.github.com" + signingkey = "23B0107B5D3811FB" + +[core] + autocrlf = "input" + editor = nvim + +[commit] + gpgsign = true + diff --git a/home/archlinux.nix b/home/archlinux.nix index c5c84a6..bbcd8f7 100644 --- a/home/archlinux.nix +++ b/home/archlinux.nix @@ -6,6 +6,7 @@ ./modules/common.nix ./modules/shell.nix ./modules/dev-tools.nix + ./modules/git.nix ./modules/neovim.nix ./modules/terminal.nix ./modules/editors.nix @@ -30,13 +31,6 @@ # Example: Nix-specific or bleeding-edge tools ]; - # Git configuration - programs.git = { - enable = true; - userName = "user3301"; - userEmail = "26126682+user3301@users.noreply.github.com"; - }; - # Targets for non-NixOS systems targets.genericLinux.enable = true; diff --git a/home/darwin.nix b/home/darwin.nix index 05ce4b8..f0d4594 100644 --- a/home/darwin.nix +++ b/home/darwin.nix @@ -6,6 +6,7 @@ ./modules/common.nix ./modules/shell.nix ./modules/dev-tools.nix + ./modules/git.nix ./modules/neovim.nix ./modules/terminal.nix ./modules/editors.nix @@ -26,13 +27,6 @@ xdg.configFile."aerospace".source = config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/dotfiles/aerospace/.config/aerospace"; - # Git configuration - programs.git = { - enable = true; - userName = "gaiz"; - userEmail = "26126682+user3301@users.noreply.github.com"; - }; - # Home Manager state version home.stateVersion = "24.05"; } diff --git a/home/modules/dev-tools.nix b/home/modules/dev-tools.nix index fd8560d..bddc144 100644 --- a/home/modules/dev-tools.nix +++ b/home/modules/dev-tools.nix @@ -5,11 +5,6 @@ home.packages = with pkgs; [ vim - # Version control - git - gh # GitHub CLI - lazygit - # Modern CLI tools ripgrep fd @@ -33,18 +28,4 @@ # AI pkgs.claude-code ]; - - # Git configuration - programs.git = { - enable = true; - # User will configure name/email in their local .gitconfig or via system config - }; - - # GitHub CLI - programs.gh = { - enable = true; - settings = { - git_protocol = "ssh"; - }; - }; } diff --git a/home/modules/git.nix b/home/modules/git.nix new file mode 100644 index 0000000..470ca97 --- /dev/null +++ b/home/modules/git.nix @@ -0,0 +1,23 @@ +{ config, pkgs, ... }: + +{ + # Git package + home.packages = with pkgs; [ + git + gh # GitHub CLI + lazygit + ]; + + # Git configuration via XDG config symlink + # This allows sharing the same config with macOS via GNU Stow + xdg.configFile."git/config".source = config.lib.file.mkOutOfStoreSymlink + "${config.home.homeDirectory}/dotfiles/git/.config/git/config"; + + # GitHub CLI + programs.gh = { + enable = true; + settings = { + git_protocol = "ssh"; + }; + }; +} diff --git a/home/nixos-native.nix b/home/nixos-native.nix index 5b84f5e..6e03535 100644 --- a/home/nixos-native.nix +++ b/home/nixos-native.nix @@ -6,6 +6,7 @@ ./modules/common.nix ./modules/shell.nix ./modules/dev-tools.nix + ./modules/git.nix ./modules/neovim.nix ./modules/terminal.nix ./modules/editors.nix @@ -25,13 +26,6 @@ # Add more GUI apps as needed ]; - # Git configuration - programs.git = { - enable = true; - userName = "user3301"; - userEmail = "26126682+user3301@users.noreply.github.com"; - }; - # Home Manager state version home.stateVersion = "24.05"; } diff --git a/home/nixos-wsl.nix b/home/nixos-wsl.nix index 653879e..84ac57e 100644 --- a/home/nixos-wsl.nix +++ b/home/nixos-wsl.nix @@ -6,6 +6,7 @@ ./modules/common.nix ./modules/shell.nix ./modules/dev-tools.nix + ./modules/git.nix ./modules/neovim.nix ./modules/terminal.nix ./modules/editors.nix @@ -28,25 +29,6 @@ # Add any WSL-specific environment variables }; - # Git configuration for WSL - programs.git = { - enable = true; - signing = { - key = "23B0107B5D3811FB"; - signByDefault = true; - }; - settings = { - user = { - name = "user3301"; - email = "26126682+user3301@users.noreply.github.com"; - }; - core = { - # Handle Windows line endings - autocrlf = "input"; - }; - }; - }; - # GPG configuration programs.gpg = { enable = true; From 5fdec37768dbe2ccd56a21d27f119537b28a98aa Mon Sep 17 00:00:00 2001 From: user3301 <26126682+user3301@users.noreply.github.com> Date: Fri, 23 Jan 2026 14:45:22 +1100 Subject: [PATCH 2/5] add readme about how to have os specific git config --- git/.config/git/README.md | 62 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 git/.config/git/README.md diff --git a/git/.config/git/README.md b/git/.config/git/README.md new file mode 100644 index 0000000..b1cf506 --- /dev/null +++ b/git/.config/git/README.md @@ -0,0 +1,62 @@ +# Git Configuration + +This directory contains the shared git configuration that works across all platforms (NixOS, macOS, Linux, WSL). + +## OS-Specific Configurations + +You can create OS-specific git configuration files that will be automatically included: + +### Setup + +Add the following to the bottom of `config`: + +```gitconfig +# OS-specific configurations +# These will be loaded if the files exist +[include] + path = ~/.config/git/config.local + path = ~/.config/git/config.darwin + path = ~/.config/git/config.linux + path = ~/.config/git/config.wsl +``` + +### Create OS-Specific Files + +Then create the appropriate files: + +- **`config.darwin`** - macOS-specific settings +- **`config.linux`** - Native Linux-specific settings +- **`config.wsl`** - WSL-specific settings +- **`config.local`** - Machine-specific settings (not tracked in git) + +### Example OS-Specific Files + +**config.darwin:** +```gitconfig +# macOS-specific git configuration + +[core] + # macOS specific settings +``` + +**config.linux:** +```gitconfig +# Linux-specific git configuration + +[core] + # Linux specific settings +``` + +**config.wsl:** +```gitconfig +# WSL-specific git configuration + +[core] + # WSL might need different autocrlf handling +``` + +### Notes + +- Git will silently ignore include paths that don't exist +- Settings in later files override earlier ones +- You can add `config.local` to `.gitignore` for machine-specific settings From e4e9f8a986c5e6bf6a32f189b3926e9fb207e8b0 Mon Sep 17 00:00:00 2001 From: user3301 <26126682+user3301@users.noreply.github.com> Date: Sat, 24 Jan 2026 22:06:33 +1100 Subject: [PATCH 3/5] move git machine specific to local file --- .gitignore | 1 + git/.config/git/config | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 4617fae..424e1f9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # Local/work-specific configuration files .zshenv.local +git/.config/git/config.local # Nix result diff --git a/git/.config/git/config b/git/.config/git/config index 14d97ba..e4b24bc 100644 --- a/git/.config/git/config +++ b/git/.config/git/config @@ -4,7 +4,6 @@ [user] name = "user3301" email = "26126682+user3301@users.noreply.github.com" - signingkey = "23B0107B5D3811FB" [core] autocrlf = "input" @@ -13,3 +12,8 @@ [commit] gpgsign = true +# machine-specific configuration will be configurated there +# (eg: signkingkey) +[include] + path = ~/.config/git/config.local + From 86316b6b613485cd4e88182638326838540e593d Mon Sep 17 00:00:00 2001 From: user3301 <26126682+user3301@users.noreply.github.com> Date: Sat, 24 Jan 2026 22:29:52 +1100 Subject: [PATCH 4/5] gitignore global --- git/.config/git/.gitignore_global | 4 ++++ git/.config/git/config | 1 + 2 files changed, 5 insertions(+) create mode 100644 git/.config/git/.gitignore_global diff --git a/git/.config/git/.gitignore_global b/git/.config/git/.gitignore_global new file mode 100644 index 0000000..ca3f8d7 --- /dev/null +++ b/git/.config/git/.gitignore_global @@ -0,0 +1,4 @@ +.idea/ +.vscode/ + +.tool-versions diff --git a/git/.config/git/config b/git/.config/git/config index e4b24bc..dc1c71b 100644 --- a/git/.config/git/config +++ b/git/.config/git/config @@ -8,6 +8,7 @@ [core] autocrlf = "input" editor = nvim + excludesfile = ~/.config/git/.gitignore_global [commit] gpgsign = true From 3812022ff9e8305a1276fb896bcacc4fe1590b12 Mon Sep 17 00:00:00 2001 From: user3301 <26126682+user3301@users.noreply.github.com> Date: Sat, 24 Jan 2026 22:33:20 +1100 Subject: [PATCH 5/5] symlink entire git --- home/modules/git.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/home/modules/git.nix b/home/modules/git.nix index 470ca97..5dd0dc4 100644 --- a/home/modules/git.nix +++ b/home/modules/git.nix @@ -10,8 +10,9 @@ # Git configuration via XDG config symlink # This allows sharing the same config with macOS via GNU Stow - xdg.configFile."git/config".source = config.lib.file.mkOutOfStoreSymlink - "${config.home.homeDirectory}/dotfiles/git/.config/git/config"; + # Symlinks entire git config directory to include config.local and other files + xdg.configFile."git".source = config.lib.file.mkOutOfStoreSymlink + "${config.home.homeDirectory}/dotfiles/git/.config/git"; # GitHub CLI programs.gh = {