From 735cbc11e1a3e103a69c03390b5f40ecc810dc9c Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sun, 13 Jul 2025 21:26:16 +0300 Subject: fix: update default config path to follow XDG Base Directory spec MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Change default config from ~/.gitsyncer.json to ~/.config/gitsyncer/config - Update all documentation and help text to reflect new path - LoadConfig still checks common locations for backward compatibility: - ./gitsyncer.json - ~/.config/gitsyncer/config (new default) - ~/.gitsyncer.json This follows the XDG Base Directory specification for better organization of configuration files. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- README.md | 12 ++++++------ internal/cli/handlers.go | 4 ++-- internal/cmd/root.go | 2 +- internal/cmd/test.go | 2 +- internal/config/config.go | 3 ++- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index b55df79..afaaeb9 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ go build -o gitsyncer ./cmd/gitsyncer ## Configuration -Create a `gitsyncer.json` file: +Create a configuration file at `~/.config/gitsyncer/config` (or specify a custom path with `-c`): ```json { @@ -245,13 +245,13 @@ gitsyncer version These options are available for all commands: -- `-c, --config` - Path to configuration file (default: ~/.gitsyncer.json) +- `-c, --config` - Path to configuration file (default: ~/.config/gitsyncer/config) - `-w, --work-dir` - Working directory (default: ~/git/gitsyncer-workdir) - `-h, --help` - Show help for any command ## The --backup Flag -The `--backup` flag enables syncing to backup locations configured in your `gitsyncer.json`. This is particularly useful when: +The `--backup` flag enables syncing to backup locations configured in your config file. This is particularly useful when: - Your backup server might be offline (e.g., home NAS) - You want to control when backups happen - You need to separate regular syncing from backup operations @@ -328,7 +328,7 @@ You can configure SSH backup locations for one-way repository backups to private ### SSH Backup Example ```bash -# Configure your gitsyncer.json with an SSH backup location +# Configure your config file with an SSH backup location # Backup locations are DISABLED by default to handle offline servers # Sync without backup (default behavior) @@ -436,7 +436,7 @@ The batch-run feature is designed for automated weekly synchronization from cron ### Sync specific repositories 1. Create repositories on all platforms (GitHub, Codeberg, etc.) -2. Add the repository name to your `gitsyncer.json` +2. Add the repository name to your configuration file 3. Run `gitsyncer sync repo repo-name` 4. GitSyncer will: - Clone from the first organization @@ -444,7 +444,7 @@ The batch-run feature is designed for automated weekly synchronization from cron - Keep them in sync going forward ### Sync all public Codeberg repositories -1. Ensure Codeberg is in your organizations list +1. Ensure Codeberg is in your organizations list in the config 2. Run `gitsyncer sync codeberg-to-github` 3. GitSyncer will: - Fetch all public repositories from your Codeberg account diff --git a/internal/cli/handlers.go b/internal/cli/handlers.go index 02df7ae..44c64c6 100644 --- a/internal/cli/handlers.go +++ b/internal/cli/handlers.go @@ -69,7 +69,7 @@ func findDefaultConfigPath() string { // Check common config locations configLocations := []string{ filepath.Join(".", "gitsyncer.json"), - filepath.Join(home, ".config", "gitsyncer", "config.json"), + filepath.Join(home, ".config", "gitsyncer", "config"), filepath.Join(home, ".gitsyncer.json"), } @@ -88,7 +88,7 @@ func ShowConfigHelp() { fmt.Println("No configuration file found. Please create one of:") fmt.Printf(" - ./gitsyncer.json\n") - fmt.Printf(" - %s/.config/gitsyncer/config.json\n", home) + fmt.Printf(" - %s/.config/gitsyncer/config\n", home) fmt.Printf(" - %s/.gitsyncer.json\n", home) fmt.Println("\nOr specify a config file with --config flag") fmt.Println("\nExample configuration:") diff --git a/internal/cmd/root.go b/internal/cmd/root.go index 04ea6dd..927a9b8 100644 --- a/internal/cmd/root.go +++ b/internal/cmd/root.go @@ -53,7 +53,7 @@ func Execute() { func init() { // Global flags - rootCmd.PersistentFlags().StringVarP(&cfgFile, "config", "c", "", "configuration file (default: ~/.gitsyncer.json)") + rootCmd.PersistentFlags().StringVarP(&cfgFile, "config", "c", "", "configuration file (default: ~/.config/gitsyncer/config)") // Set default work directory home, err := os.UserHomeDir() diff --git a/internal/cmd/test.go b/internal/cmd/test.go index 0590719..2c50112 100644 --- a/internal/cmd/test.go +++ b/internal/cmd/test.go @@ -44,7 +44,7 @@ var testConfigCmd = &cobra.Command{ gitsyncer test config # Test specific config file - gitsyncer test config -c ~/my-gitsyncer.json`, + gitsyncer test config -c ~/my-config.json`, Run: func(cmd *cobra.Command, args []string) { // Try to load and validate config cfg, err := config.Load(cfgFile) diff --git a/internal/config/config.go b/internal/config/config.go index 799c792..a141c81 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -34,7 +34,8 @@ func Load(path string) (*Config, error) { if err != nil { return nil, fmt.Errorf("failed to get home directory: %w", err) } - path = filepath.Join(home, ".gitsyncer.json") + // Use XDG config directory + path = filepath.Join(home, ".config", "gitsyncer", "config") } else if len(path) >= 2 && path[:2] == "~/" { // Expand home directory if needed home, err := os.UserHomeDir() -- cgit v1.2.3