Code Monkey home page Code Monkey logo

Comments (7)

twpayne avatar twpayne commented on August 18, 2024

promptStringOnce only prompts for a string if it is not already set.

Do you already have data.email set in your configuration? If so, promptStringOnce will return the existing value (which might not be [email protected]) instead of prompting.

from chezmoi.

0xjams avatar 0xjams commented on August 18, 2024

The example of my post was extracted from the documentation in the Create a config file on a new machine automatically section. Am I wrong to assume that after executing the execute-template subcommand with the promptStringOnce flag, the value should have been overridden and it should not have used the default value of the function call?

[data]
    email = "Email address"      

from chezmoi.

twpayne avatar twpayne commented on August 18, 2024

Am I wrong to assume that after executing the execute-template subcommand with the promptStringOnce flag, the value should have been overridden and it should not have used the default value of the function call?

Yes.

promptString always asks for a string. promptStringOnce asks for a string if there is no existing value. If you already have a config file, then there is probably already an existing value.

Breaking the arguments to promptStringOnce down:

promptStringOnce map path prompt [default]

map and path tell chezmoi where to find the existing value.

prompt is the prompt for the user if there is no existing value.

default is the default value if the user hits enter in response to the prompt.

In the case of

promptStringOnce . "email" "Email address"

map is . and path is email which means that chezmoi is looking up the .email template variable. If you already have a config file with data.email set then the .email template variable is already set.

from chezmoi.

0xjams avatar 0xjams commented on August 18, 2024

My bad. The problem was that I never actually ran chezmoi init after creating that template, I was only running chezmoi execute-template --init, I guess that execution defined the value, that's probably why promptStringOnce was not firing up.

Thank you so much! Sorry for the trouble.

from chezmoi.

0xjams avatar 0xjams commented on August 18, 2024

I just tested this with interesting results.

  • First, I made sure that the ~/.config/chezmoi/chezmoi.toml file does not exist
  • I ran the execute-template function, but the template still returned the default value: email = "Email address"
  • I ran chezmoi init, and promptStringOnce ran, I set the value as [email protected].
  • After executing the template again, I got the value in chezmoi.toml as expected.
  • However, when that file did not exist, I never got the value from the command parameter, only the default one from the template.
kali@kali:~/.local/share/chezmoi$  rm ~/.config/chezmoi/chezmoi.toml
kali@kali:~/.local/share/chezmoi$  rm ~/.config/chezmoi/chezmoi.toml
rm: cannot remove '/home/kali/.config/chezmoi/chezmoi.toml': No such file or directory
❌ kali@kali:~/.local/share/chezmoi$  chezmoi execute-template --verbose --init --promptString [email protected] < ~/.local/share/chezmoi/.chezmoi.toml.tmpl

[data]
    email = "Email address"%                                                                           
kali@kali:~/.local/share/chezmoi$  chezmoi init
# Here the promptStringOnce ran, and I set the value
kali@kali:~/.local/share/chezmoi$  cat /home/kali/.config/chezmoi/chezmoi.toml

[data]
    email = "[email protected]"%                                                                               
kali@kali:~/.local/share/chezmoi$  chezmoi execute-template --verbose --init --promptString [email protected] < ~/.local/share/chezmoi/.chezmoi.toml.tmpl

[data]
    email = "[email protected]"% 

from chezmoi.

twpayne avatar twpayne commented on August 18, 2024

The value passed to the --promptString flag is the prompt, not the key. i.e. I think you want:

$ chezmoi execute-template --verbose --init --promptString 'Email [email protected]' < ~/.local/share/chezmoi/.chezmoi.toml.tmpl

Note --promptString 'Email [email protected]' instead of --promptString [email protected].

from chezmoi.

0xjams avatar 0xjams commented on August 18, 2024

Thank you so much. I completely misunderstood the flag. I thought that this --promptString [email protected] was supposed to override the value of the email variable.

from chezmoi.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.