Manage your dotfiles across multiple diverse machines, securely.

chezmoi logo chezmoi

GitHub Release

Manage your dotfiles across multiple diverse machines, securely.

With chezmoi, you can install chezmoi and your dotfiles on a new, empty machine with a single command:

$ sh -c "$(curl -fsLS git.io/chezmoi)" -- init --apply <github-username>

Updating your dotfiles on any machine is a single command:

$ chezmoi update


How do I start with chezmoi now?

Install chezmoi then read the quick start guide. The how-to guide covers most common tasks, and there's both documentation on templating and frequently asked questions for specific questions. You can browse other people's dotfiles that use chezmoi on GitHub and on GitLab, and see how chezmoi compares to other dotfile managers. For a full description of chezmoi, consult the reference.


What does chezmoi do and why should I use it?

chezmoi helps you manage your personal configuration files (dotfiles, like ~/.zshrc) across multiple machines.

chezmoi is helpful if you have spent time customizing the tools you use (e.g. shells, editors, and version control systems) and want to keep machines running different accounts (e.g. home and work) and/or different operating systems (e.g. Linux, macOS, and Windows) in sync, while still being able to easily cope with differences from machine to machine.

chezmoi scales from the trivial (e.g. copying a few dotfiles onto a Raspberry Pi, development container, or virtual machine) to complex long-lived multi-machine development environments (e.g. keeping any number of home and work, Linux, macOS, and Windows machines in sync). In all cases you only need to maintain a single source of truth (a single branch in git) and getting started only requires adding a single binary to your machine (which you can do with curl, wget, or scp).

chezmoi has strong support for security, allowing you to manage secrets (e.g. passwords, access tokens, and private keys) securely and seamlessly using a password manager and/or encrypt whole files with your favorite encryption tool.

If you do not personalize your configuration or only ever use a single operating system with a single account and none of your dotfiles contain secrets then you don't need chezmoi. Otherwise, read on...


What are chezmoi's key features?

Flexible

You can share as much configuration across machines as you want, while still being able to control machine-specific details. Your dotfiles can be templates (using text/template syntax). Predefined variables allow you to change behavior depending on operating system, architecture, and hostname. chezmoi runs on all commonly-used platforms, like Linux, macOS, and Windows. It also runs on less commonly-used platforms, like FreeBSD, OpenBSD, and Termux.

Personal and secure

Nothing leaves your machine, unless you want it to. Your configuration remains in a git repo under your control. You can write the configuration file in the format of your choice. chezmoi can retrieve secrets from 1Password, Bitwarden, gopass, KeePassXC, LastPass, pass, Vault, Keychain, Keyring, or any command-line utility of your choice. You can encrypt individual files with GnuPG or age. You can checkout your dotfiles repo on as many machines as you want without revealing any secrets to anyone.

Transparent

chezmoi includes verbose and dry run modes so you can review exactly what changes it will make to your home directory before making them. chezmoi's source format uses only regular files and directories that map one-to-one with the files, directories, and symlinks in your home directory that you choose to manage. If you decide not to use chezmoi in the future, it is easy to move your data elsewhere.

Declarative and robust

You declare the desired state of files, directories, and symbolic links in your source of truth and chezmoi updates your home directory to match that state. What you want is what you get. chezmoi updates all files and symbolic links atomically. You will never be left with incomplete files that could lock you out, even if the update process is interrupted.

Fast and easy to use

Using chezmoi feels like using git: the commands are similar and chezmoi runs in fractions of a second. chezmoi makes most day-to-day operations one line commands, including installation, initialization, and keeping your machines up-to-date. chezmoi can pull and apply changes from your dotfiles repo in a single command, and automatically commit and push changes.


I already have a system to manage my dotfiles, why should I use chezmoi?

Read the comparison of chezmoi to other dotfile managers.


How do people use chezmoi?

Dotfile repos using chezmoi

Have a look at people using chezmoi on GitHub and on GitLab.

People talking about chezmoi

Read what people have said about chezmoi.


What documentation is available?


License

MIT


Comments
  • Recommendations for dealing with dynamically named directories

    Recommendations for dealing with dynamically named directories

    What exactly are you trying to do?

    I intend to switch to chezmoi from Stow (partly because my install script is spiralling out of control as you describe in the comparison, and partly so I can include Windows/macOS/Termux) but before doing so I'd like to wrap my head around dealing with directories with dynamic names.

    The most notable example of this is Firefox, which assigns random prefixes to profile directories by default e.g. (edited for brevity)

    > tree -d ~/.mozilla/firefox/profiles
    ~/.mozilla/firefox/profiles
    ├── 1io09dal.default-release
    ├── 5adf213y.default-nightly
    └── n32lkdfa.default
    

    where 1io09dal, 5adf213y and n32lkdfa can be any random string of letters and digits as far as I'm aware.

    I'm not entirely sure if there is an elegant way to handle this with chezmoi itself as I'm aware 1:1 mappings are preferred.

    At the moment I'm thinking the best method to deal with this is something like the following:

    1. Map the files and templates to an intermediate directory, such as ~/.config/firefox/profiles/default-release etc.
    2. Run chezmoi apply
    3. Run a script after chezmoi apply to link or copy the files to the correct directory

    I'm interested to see if you have any thoughts or recommendations regarding this.

    What have you tried so far?

    N/A

    Where else have you checked for solutions?

    Output of any commands you've tried with --verbose

    N/A

    Output of chezmoi doctor

    N/A

    Additional context

    N/A

  • chezmoi users: Please help with testing chezmoi2

    chezmoi users: Please help with testing chezmoi2

    What's new and what's changing in chezmoi v2: https://github.com/twpayne/chezmoi/blob/master/docs/CHANGES.md

    If you're not interested, click the "Unsubscribe" button in this GitHub issue.

    chezmoi v2 is close to being released and adds a huge number of new features while being almost completely backwards-compatible with v1. Thanks to testing by many contributors in #987, the code in chezmoi's master branch can be considered "release candidate 1".

    You can grab pre-built binaries of the latest build of master (click on the most recent successful build, and then scroll down to the bottom of the page to find the build artifacts: there are Linux, macOS, and Windows binaries here). Or, you can build chezmoi from source (note that you need Go 1.16 now).

    Please report any problems you find by either replying here or opening a new GitHub issue.

    cc people who have opened issues that are fixed in v2 and/or already helped with testing or have a dotfiles repo using chezmoi with five or more stars or have been active recently: @3v1n0 @Croissong @JustinGrote @Legion2 @MurzNN @TsekNet @alker0 @angristan @beaussan @benmezger @caedes @caius @contrun @felipecrs @fwSmit @goooseman @gotgenes @jackmac92 @kitos9112 @m-rey @markstos @oscarbenedito @ptxmac @relaxdiego @renard @renemarc @schuerg @sersorrel @szorfein @terminalmage @vogu66 @woneill @zb140 @zuntik

    If you're not interested, click the "Unsubscribe" button in this GitHub issue.

  • chezmoi2: Contributors, please help with beta testing

    chezmoi2: Contributors, please help with beta testing

    With #654 merged, chezmoi version 2 is now ready for beta testing. I'd really appreciate it if you could test it on your machines. At the moment, this requires you need to be familiar with Go development to build and install it locally. Packages, snaps, etc. will follow later.

    Quick notes:

    • You should not need to change anything in your source state. Note that when you run chezmoi2 apply for the first time your run_once_ scripts will run again.
    • The goal of chezmoi2 is to enable some new features (e.g. chezmoi2 status) and fix various corner-case bugs that were hard to fix with chezmoi1's architecture. Even though chezmoi2 is a complete re-write internally, to the end user, chezmoi2 is not radically different to chezmoi1.
    • Read a rough draft of what's changed.
    • See the v2.0.0 milestone for individual issues.
    • Right now it's in a separate subdirectory, install it by checking out the master branch and running go install ./chezmoi2.
    • It should be safe to use, but please use chezmoi2 diff and/or use the --dry-run option to check changes before you apply them.
    • The separate chezmoi2 directory and command name are temporary: eventually chezmoi2 will replace chezmoi1.

    Specific ways to help:

    • Please install and run chezmoi2 and report anything that seems strange or suspicious in this issue, please don't open new issues yet.
    • There are a lot of integration tests in chezmoi2/testdata/scripts. More tests are very welcome!
    • Please prefix PRs that affect chezmoi2 with the string chezmoi2:.

    What happens next:

    • chezmoi2 gets tested a bit more, hopefully by you, to shake out the initial bugs.
    • Once chezmoi2 seems mostly stable, I'll update the release processes to produce beta releases for wider testing.
    • Once the beta has been more widely tested, chezmoi2 will replace chezmoi.

    cc @benmezger @Grimler91 @felipecrs @fwSmit @Legion2 @zb140

  • Improve Windows support

    Improve Windows support

    chezmoi is currently targeted at macOS/Linux, but there is no reason why it shouldn't also run on Windows. Contributions improving Windows support are very welcome.

  • New template function for capturing the output of the `template` function

    New template function for capturing the output of the `template` function

    Is your feature request related to a problem? Please describe.

    I have:

    ❯ cat ~/.dotfiles/home/.chezmoitemplates/get-latest-github-release
    {{- $url :=  printf "https://github.com/%s/releases/latest" . -}}
    {{- output "curl" "-fsSL" "-o" "/dev/null" "-w" "%{url_effective}" $url | trim | base -}}
    

    And I would like to use it like so:

    ❯ cat ~/.dotfiles/home/.chezmoiexternal.yaml
    {{ $denoVersion := template "get-latest-github-release" "denoland/deno" -}}
    ".deno/bin/deno":
      type: file
      url: "https://github.com/denoland/deno/releases/download/{{ $denoVersion }}/deno-x86_64-unknown-linux-gnu.zip"
      executable: true
      filter:
        command: zcat
    

    But it's not possible, because:

    $ chezmoi execute-template '{{ $denoVersion := template "get-latest-github-release" "denoland/deno" }}{{ $denoVersion }}'
    chezmoi: template: arg1:1: unexpected <template> in command
    

    EDIT 1: I previously posted with the wrong error message above, which turns to be valid but posterior to the error originally reported, as pointed by @twpayne at here.

    EDIT 2: In the variable assignment, it was missing : before = as pointed by @twpayne at here. But that wasn't the cause of the issue, anyway.

    Describe the solution you'd like

    A function which would let me do that, as pointed in https://stackoverflow.com/a/40170999/12156188. So that I could do:

    $ chezmoi execute-template '{{ $denoVersion := execTemplate "get-latest-github-release" "denoland/deno" }}{{ $denoVersion }}'
    v1.16.1
    

    Describe alternatives you've considered

    I could not find any.

    Additional context

    My dotfiles is currently bloated with a lot of code duplication, and now I'm trying to clean it up by using some templates.

  • Persist file permissions for group and other

    Persist file permissions for group and other

    First, as I have not said this yet, great tool! I was evaluating all kind of various dotfile tools and found this one to be the most well-thought implementation. Great job 😃

    Is your feature request related to a problem? Please describe.

    By example:

    # In my home directory
    ~> ll testingprivexec2.txt
    .rwx--x--x 7 userA groupA 24 May 10:56 testingprivexec2.txt*
    ~> chmod 711 testingprivexec2.txt
    ~> chezmoi add testingprivexec2.txt
    ~> chezmoi apply
    ~> ll testingprivexec2.txt
    .rwxrwxrwx 7 userA groupA 24 May 10:56 testingprivexec2.txt*
    

    If I set a specific group or other permission on a file in my home directory that is controlled by chezmoi, that permission is not persisted after a chezmoi apply. By experiment I've found it to use the umask, which does feel natural as that is how it works e.g. for git clone.

    It would be nice though if all file permissions could be persisted. It is possible this is not in the scope of chezmoi.

    Describe the solution you'd like

    I have not investigated this deeply, but here is an outlandish idea that at least works i git. Use git notes e.g. like shown here https://stackoverflow.com/a/5960171. This could also be used to store the private and executable info, so files did not have to get renamed to executable_ or private_ etc.

    Describe alternatives you've considered

    No alternatives considered.

  • chezmoi edit opens empty file

    chezmoi edit opens empty file

    Just getting started with chezmoi and following the quick start guide.

    Not sure if this is a bug or if I messed something up so I'll initially open this as a support request.

    Steps taken:

    brew install chezmoi
    
    chezmoi init
    chezmoi add ~/.config/zsh/.zshrc
    chezmoi manged
    # .config
    # .config/zsh
    # .config/zsh/.zshrc
    
    chezmoi cd
    tree
    # .
    # └── dot_config
    #    └── zsh
    #       └── dot_zshrc
    

    Everything working as expected thus far.

    However, the following command opens an empty file in my editor.

    chezmoi edit ~/.config/zsh/.zshrc
    

    The path of this empty file is:

    /var/folders/qd/q3pwnzn97rbdwqsbjcxdqhg40000gn/T/chezmoi-edit533837452/.config/zsh/.zshrc

    My expectation was for .zshrc or dot_zshrc to be opened.

    If I don't use chezmoi edit and just manually open and edit the source or dot_zshrc file, everything works as expected.

    Thanks 🙏. Amazing program by the way 😍

  • Apply 'all' command in interactive mode twice: to scripts and to regular configs

    Apply 'all' command in interactive mode twice: to scripts and to regular configs

    What exactly are you trying to do?

    I have a few run_before_link config.py.tmpl scripts that maintain symlinkinkg for the folders that chezmoi doesn't manage (e.g., Application Support/AppX to .config/AppX), but after links are set up they do nothing (check that the symlink exists and exit) Now, after I edit a few regular config files in the chezmoi source folder, I'd like to then apply the changes, but carefully :), so I do chezmoi apply -v --interactive to review what changed:

    What I'd like to achieve is the following:

    • confirm running all the scripts on the first iteractive prompt, but only the scripts, the all flag should reset once it reaches regular configs
    • individually check regular configs, e.g., using d to see diffs and skip others etc.

    As far as I understand, this is currently not possible since if I reply with an a (all) command to the first script, this all 'flag' is also applied to all the regular config files. This flag, however, does seem to reset for the config X has changed since chezmoi last wrote it configs, which maintains a separate all 'flag' So basically I'd like to have the same behavior, but also for the executable scripts/other configs

    What have you tried so far?

    Memorize the number of scripts and press n this many times to skip all the scripts

    Where else have you checked for solutions?

    Output of any commands you've tried with --verbose flag

    $ chezmoi apply -v --interactive
    Apply .config/AppX/link config.py? yes/no/all/quit
    # if I say 'all', then all my configs will also get overwritten
    

    Output of chezmoi doctor

    $ chezmoi doctor
    RESULT    CHECK                MESSAGE
    ok        version              v2.27.2, commit 882d0808feb1fc8112b411ed2216f31306656861, built at 2022-11-24T21:50:16Z, built by Homebrew
    ok        latest-version       v2.27.2
    ok        os-arch              darwin/amd64
    ok        uname                Darwin MacBook-Pro.local 19.6.0 Darwin Kernel Version 19.6.0: Tue Jun 21 21:18:39 PDT 2022; root:xnu-6153.141.66~1/RELEASE_X86_64 x86_64 i386 Darwin
    ok        go-version           go1.19.3 (gc)
    ok        executable           /usr/local/bin/chezmoi
    ok        upgrade-method       replace-executable
    ok        config-file          ~/.config/chezmoi/chezmoi.yaml, last modified 2022-10-16T21:26:55+07:00
    warning   source-dir           ~/.local/share/chezmoi is a git working tree (dirty)
    ok        suspicious-entries   no suspicious entries
    warning   working-tree         ~/.local/share/chezmoi is a git working tree (dirty)
    ok        dest-dir             ~ is a directory
    ok        umask                022
    ok        cd-command           found /usr/local/bin/xonsh
    ok        cd-args              /usr/local/bin/xonsh
    info      diff-command         not set
    ok        edit-command         found /usr/local/bin/subl
    ok        edit-args            subl -w
    ok        git-command          found /usr/local/bin/git, version 2.38.1
    ok        merge-command        found /Applications/4 Develop/DiffMerge.app/Contents/MacOS/DiffMerge
    ok        shell-command        found /usr/local/bin/xonsh
    ok        shell-args           /usr/local/bin/xonsh
    ok        age-command          found /usr/local/bin/age, version 1.0.0
    ok        gpg-command          found /usr/local/bin/gpg, version 2.2.40
    info      pinentry-command     not set
    info      1password-command    op not found in $PATH
    ok        bitwarden-command    found /usr/local/bin/bw, version 2022.10.0
    info      gopass-command       gopass not found in $PATH
    info      keepassxc-command    keepassxc-cli not found in $PATH
    info      keepassxc-db         not set
    info      keeper-command       keeper not found in $PATH
    info      lastpass-command     lpass not found in $PATH
    info      pass-command         pass not found in $PATH
    info      passhole-command     ph not found in $PATH
    info      vault-command        vault not found in $PATH
    info      secret-command       not set
    

    Additional context

    None

  • Chezmoi script doesn't work with powershell script.

    Chezmoi script doesn't work with powershell script.

    What exactly are you trying to do?

    Chezmoi script run_ doesn't work with powershell script(ps1).

    When I try to apply the run_ powershell scripts the script return

    At C:\Users\Ronny\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1:1 char:17
    + $env:USERPROFILE\.config\powershell\user_profile.ps1
    +                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Unexpected token '\.config\powershell\user_profile.ps1' in expression or statement.
        + CategoryInfo          : ParserError: (:) [], ParseException
        + FullyQualifiedErrorId : UnexpectedToken
    

    Even though I can execute it normally through terminal. I know I can use .bat but I want to use .ps1

    The run_once-test.bat file indicated with R, even after applying it. It's still in chezmoi status so I can apply it multiple times without it's content changing.

    What have you tried so far?

    • Run powershell with no profile.
    • Run powershell with $ENV:shell="cmd" or "pwsh".

    Where else have you checked for solutions?

    Output of any commands you've tried with --verbose flag

    diff --git a/once-test.bat b/once-test.bat
    index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..211f200e3bd2b13ece6e738815610688fb7e2ce2 100755
    --- a/once-test.bat
    +++ b/once-test.bat
    @@ -0,0 +1 @@
    +echo Testing
    
    C:\Users\Ronny>echo Testing
    Testing
    

    Output of chezmoi doctor

    RESULT    CHECK                MESSAGE
    ok        version              v2.25.0, commit b3a8879e30a20134c9bef48646055e57aa78d8c5, built at 2022-10-13T14:01:32Z, built by goreleaser
    ok        latest-version       v2.25.0
    ok        os-arch              windows/amd64
    ok        systeminfo           Microsoft Windows 10 Pro (10.0.19043 N/A Build 19043)
    ok        go-version           go1.19.2 (gc)
    ok        executable           ~/scoop/apps/chezmoi/current/chezmoi.exe
    ok        upgrade-method       replace-executable
    ok        config-file          ~/.config/chezmoi/chezmoi.toml, last modified 2022-10-19T20:10:14+07:00
    warning   source-dir           ~/.local/share/chezmoi is a git working tree (dirty)
    warning   suspicious-entries   ~/.local/share/chezmoi/dot_config/chezmoi/chezmoi.toml
    warning   working-tree         ~/.local/share/chezmoi is a git working tree (dirty)
    ok        dest-dir             ~ is a directory
    ok        cd-command           found C:/Program Files/WindowsApps/Microsoft.PowerShell_7.2.6.0_x64__8wekyb3d8bbwe/pwsh.exe
    ok        cd-args              'C:\\Program Files\\WindowsApps\\Microsoft.PowerShell_7.2.6.0_x64__8wekyb3d8bbwe\\pwsh.exe'
    info      diff-command         not set
    ok        edit-command         found ~/scoop/shims/nvim.exe
    ok        edit-args            nvim
    ok        git-command          found C:/Program Files/Git/cmd/git.exe, version 2.36.1
    ok        merge-command        found ~/scoop/shims/nvim.exe
    ok        shell-command        found C:/Program Files/WindowsApps/Microsoft.PowerShell_7.2.6.0_x64__8wekyb3d8bbwe/pwsh.exe
    ok        shell-args           'C:\\Program Files\\WindowsApps\\Microsoft.PowerShell_7.2.6.0_x64__8wekyb3d8bbwe\\pwsh.exe'
    info      age-command          age not found in $PATH
    info      gpg-command          gpg not found in $PATH
    info      pinentry-command     not set
    info      1password-command    op not found in $PATH
    info      bitwarden-command    bw not found in $PATH
    info      gopass-command       gopass not found in $PATH
    info      keepassxc-command    keepassxc-cli not found in $PATH
    info      keepassxc-db         not set
    info      keeper-command       keeper not found in $PATH
    info      lastpass-command     lpass not found in $PATH
    info      pass-command         pass not found in $PATH
    info      passhole-command     ph not found in $PATH
    info      vault-command        vault not found in $PATH
    info      secret-command       not set
    
  • feat: Populate VERSIONINFO on Windows builds

    feat: Populate VERSIONINFO on Windows builds

    Refs https://github.com/twpayne/chezmoi/issues/812#issuecomment-1238701148

    It's possible that this would aid the automatic winget tools, but I'm unsure.

    Outdated

    I threw this together in a few hours. It's incomplete.

    goversioninfo needs to be installed with

    ❯ go install github.com/josephspurrier/goversioninfo/cmd/goversioninfo@latest
    

    I don't have a Linux setup at the moment so I can't test goreleaser locally.

    Currently, I'm manually running

    ❯ go run internal/cmds/generate-resource.syso/main.go -versiontag="v2.26.0"
    ❯ go build
    
    Without this change

    image

    With this change

    image

    TODO:

    • Determine if this is necessary
    • Determine if we should use a shell script instead (really, all we need to do is parse the version from goreleaser into arguments for goversioninfo)
    • Determine if we can use //go:generate instead of a script (but that would prevent us from using the version, no?)
    • Test and validate appropriately
  • Add arguments to

    Add arguments to "chezmoi unmanaged" and "chezmoi managed"

    Fixes twpayne/chezmoi#1985.

    Allow arguments on chezmoi managed and unmanaged. Per recommendations on twpayne/chezmoi#1985, no additional flags are added to either commands, and behaviors are very similar to the respective commands without arguments (such as not recursing into directories).

    $ chezmoi unmanaged ~/.ssh ~/.gnupg
    (list unmanaged files under the arguments)
    $ chezmoi managed ~/.config/git ~/scripts
    (list managed files under the arguments)
    

    Note that in consideration of duplicated arguments and outputs, sorting and deduplication is done on both the arguments and the outputs for unmanaged, and on the outputs for managed. This helps with the following hypothetical situation (exaggerated to hopefully convey the idea more clearly):

    $ chezmoi unmanaged ~/{,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,}
    (extremely duplicated lines of output)
    $ chezmoi unmanaged ~/.config/{,a,b,c,d,e,f,g,h,*}
    (outputs for a..h are duplicated many times)
    
  • #2562 leads to unintuitive behavior with git credential helper

    #2562 leads to unintuitive behavior with git credential helper

    Describe the bug

    If I'm using git credential helper to authenticate with a private github repo, it's surprising that I can git clone a repo successfully but with the same repo URL chezmoi init fails to authenticate. I believe this is a side-effect of the username-guessing introduced by #2562. This could be dealt with a bugfix (attempt to clone with git before guessing a username, retry with the username-guessing if that fails) or a clarification in the documentation/warning message (“you must explicitly provide the git username if this guess [repouser] is not correct”), but I did find this behavior surprising.

    https://github.com/repouser/dotfiles.git is a private repo. We are using the GitHub CLI as a credential helper, so gh auth status outputs:

    github.com
      ✓ Logged in to github.com as MyUser (/home/user/.config/gh/hosts.yml)
      ✓ Git operations for github.com configured to use ssh protocol.
      ✓ Token: *******************
    

    and ~/.gitconfig contains:

    [credential "https://github.com"]
            helper =
            helper = !gh auth git-credential
    

    Note that the private repo is owned by a different github user than the github user we have authenticated with using gh.

    git clone https://github.com/repouser/dotfiles.git successfully clones the repo without asking for a username/password.

    Similarly, on chezmoi 2.27.0, chezmoi init https://github.com/repouser/dotfiles.git clones the repo without asking for username/password.

    However, on chezmoi 2.29.1, chezmoi init https://github.com/repouser/dotfiles.git outputs:

    Cloning into '/home/user/.local/share/chezmoi'...
    Password for 'https://[email protected]/':
    

    repouser is not the correct user to authenticate with (MyUser is the github user that we've authenticated with via gh), and so this fails.

    On chezmoi 2.29.1, chezmoi init https://[email protected]/repouser/dotfiles.git does work.

    Additional context

    git version 2.36.1
    gh version 2.21.2 (2023-01-03)
    

    Thanks for a terrific tool!

  • Also git-repo externals to add only a subdirectory of the repo

    Also git-repo externals to add only a subdirectory of the repo

    Is your feature request related to a problem? Please describe.

    I see that git-repo externals were added in #1911, which is awesome. Thank you! What I'd like to see is a way to specify a specific folder from the git repo as the "root" to add to the target. As an example, I want to add this docker completion module: https://github.com/matt9ucci/DockerCompletion#other-methods. The module code itself is contained within a subdirectory of that repo (see the As a "well-formed" module section).

    Describe the solution you'd like

    It'd be great if chezmoi could pick a single folder from the repo of a git-repo external and discard the rest.

  • Add builtin git support for git-repo externals

    Add builtin git support for git-repo externals

    Is your feature request related to a problem? Please describe.

    chezmoi supports git-repo externals, but this relies on an external git command being present. chezmoi also has a builtin git (using the excellent github.com/go-git/go-git), but the builtin git does not support git-repo externals. Adding builtin git support for git-repo externals would improve the experience for users using chezmoi on machines without git installed.

    Describe the solution you'd like

    git-repos should be cloned and kept up-to-date using only the builtin git.

    Describe alternatives you've considered

    Keeping things as they are.

    Additional context

    The starting points for fixing this are here and here.

  • Download externals concurrently

    Download externals concurrently

    Is your feature request related to a problem? Please describe.

    chezmoi downloads externals serially. Downloading externals takes time, and this can lead to long pauses in chezmoi's progress (#2369). It would be nice if this overall process could be faster.

    Describe the solution you'd like

    chezmoi should download externals concurrently, subject to some externally-specified sensible limit (e.g. number of simultaneous concurrent downloads).

    Describe alternatives you've considered

    Keeping things as they are.

    Additional context

    Programs like curl and aria2 are much more advanced. Maybe, as well as enabling concurrent downloads, chezmoi could include a download plugin option.

  • Tidy up 1Password template functions

    Tidy up 1Password template functions

    Is your feature request related to a problem? Please describe.

    chezmoi includes a bunch of 1Password-related template functions, several of which relate to 1Password CLI v1, which is long since deprecated. These functions cause unnecessary confusion for users.

    Describe the solution you'd like

    chezmoi should remove all 1Password CLI v1-related template functions, as hopefully everybody has migrated to 1Password CLI v2.

    Describe alternatives you've considered

    Maintaining the existing 1Password CLI v1 functions for backwards compatibilty.

    Additional context

    https://github.com/twpayne/chezmoi/discussions/1974 cc @halostatue

Kubernetes Virtualization API and runtime in order to define and manage virtual machines.
Kubernetes Virtualization API and runtime in order to define and manage virtual machines.

Kubernetes Virtualization API and runtime in order to define and manage virtual machines.

Jan 5, 2023
Dotsync - Dotfiles manager without symlinks

dotsync dotfiles manager without symlinks Getting Started SYNOPSIS $ dotsync rep

Feb 12, 2022
Kubernetes is an open source system for managing containerized applications across multiple hosts.
Kubernetes is an open source system for managing containerized applications across multiple hosts.

Kubernetes Kubernetes is an open source system for managing containerized applications across multiple hosts. It provides basic mechanisms for deploym

Nov 25, 2021
VaultOperator provides a CRD to interact securely and indirectly with secrets stored in Hashicorp Vault.

vault-operator The vault-operator provides several CRDs to interact securely and indirectly with secrets. Details Currently only stage 1 is implemente

Mar 12, 2022
S3pd - CLI utility that downloads multiple s3 objects at a time, with multiple range-requests issued per object

S3 Parallel Downloader CLI utility that downloads multiple s3 objects at a time,

May 13, 2022
Command-line tool to remotely execute commands on Windows machines through WinRM

winrm-cli This is a Go command-line executable to execute remote commands on Windows machines through the use of WinRM/WinRS. Note: this tool doesn't

Dec 15, 2022
The smart virtual machines manager. A modern CLI for Vagrant Boxes.
The smart virtual machines manager.  A modern CLI for Vagrant Boxes.

The smart virtual machines manager Table of Contents: What is Vermin Install Vermin Usage Contributors TODO What is Vermin Vermin is a smart, simple a

Dec 22, 2022
Infrastructure testing helper for AWS Resources that uses AWS SSM to remotely execute commands on EC2 machines.
Infrastructure testing helper for AWS Resources that uses AWS SSM to remotely execute commands on EC2 machines.

Infrastructure testing helper for AWS Resources that uses AWS SSM to remotely execute commands on EC2 machines, to enable infrastructure engineering teams to write tests that validate behaviour.

Sep 5, 2022
Natural-deploy - A natural and simple way to deploy workloads or anything on other machines.

Natural Deploy Its Go way of doing Ansibles: Motivation: Have you ever felt when using ansible or any declarative type of program that is used for dep

Jan 3, 2022
DepCharge is a tool designed to help orchestrate the execution of commands across many directories at once.

DepCharge DepCharge is a tool that helps orchestrate the execution of commands across the many dependencies and directories in larger projects. It als

Sep 27, 2022
Beagle is a CLI written in Go to search for an specific username across the Internet.

Beagle __ \,--------/_/'--o Use beagle with /_ ___ /~" responsibility. /_/_/ /_/_/ ^^^^^^^^^^^^^^^^^^ Beagle is a CLI w

Nov 16, 2022
Developer Self-Service Across Clusters

Monoskope (m8) Monoskope (short m8 spelled "mate") implements the management and operation of tenants, users and their roles in a Kubernetes multi-clu

Jul 6, 2022
kcount counts Kubernetes (K8s) objects across clusters.

kcount counts Kubernetes (K8s) objects across clusters. It gets the cluster configuration, including cluster name and namespace, from kubeconfig files

Sep 23, 2022
Enforcing per team quota (sum of used resources across all their namespaces) and delegating the per namespace quota to users.

Quota Operator Enforcing per team quota (sum of used resources across all their namespaces) and delegating the per namespace quota to users. Instructi

Nov 9, 2022
A Kubernetes operator that allows for automatic provisioning and distribution of cert-manager certs across namespaces

cached-certificate-operator CachedCertificate Workflow When a CachedCertificate is created or updated the operator does the following: Check for a val

Sep 6, 2022
Jenkins CLI allows you manage your Jenkins as an easy way

Quick start 简体中文 Jenkins CLI Jenkins CLI allows you manage your Jenkins in an easy way. No matter if you're a plugin developer, administrator or just

Jan 4, 2023
Manage your ssh alias configs easily.
Manage your ssh alias configs easily.

manssh manssh is a command line tool for managing your ssh alias config easily, inspired by storm project, powered by Go. Note: This project is actual

Nov 9, 2022
🐶 Kubernetes CLI To Manage Your Clusters In Style!
🐶 Kubernetes CLI To Manage Your Clusters In Style!

K9s - Kubernetes CLI To Manage Your Clusters In Style! K9s provides a terminal UI to interact with your Kubernetes clusters. The aim of this project i

Jan 9, 2023
A tool that allows you to manage Kubernetes manifests for your services in a Git repository

kuberpult Readme for users About Kuberpult is a tool that allows you to manage Kubernetes manifests for your services in a Git repository and manage t

Dec 16, 2022