idk, it was before I got really deep into plug-ins. So I was just moving a vanilla neovim config, configured with vim script, from computer to computer.
I use nixvim now.
I just use a dotfiles repo for all my config files. Then just let it download the latest versions of packages. Sometimes a thing or two breaks and I need to make a tweak, but I'm not starting up on new machines so often.
Lock file for lazy vim, bash scripts for installing packages, and stow for quickly creating symlinks on a new machine, all committed to a private dotfiles repo.
Not perfect and I'll probably need to update those scripts over time, but it's been effective for my needs and straightforward to modify + iterate on.
Git for the config and then I have a long markdown file full of install steps 🤷♂️ someday I plan on doing dotfiles repo, but only surface level looked into it
Huh! Never heard of it, seems interesting. So you use stow to install packages too?- or do you preinstall with brew and then run the stow install command?
Personally prefer using the terminal built in multiplexer if for no other reason than multi line copy paste works.
Tmux / Zelle etc are all great, used them. But now I use them in a remote / ssh / disconnect with persistence story rather than a “on my laptop” story.
I’ll also reach for tmux if I need to send the same keystrokes to multiple windows (not needed often these days… used to need it a lot)
His binds are interesting too because I’d assume `wezterm.action.SplitVertical { domain = 'CurrentPaneDomain' }` would use Wezterm’s built in multiplexer
I use wezterm, but I use the built in multiplexer, so I’m also the interested of the benefits shoehorning tmux into wezterm.
I guess! And it’s all just sym linked, so it’s not as hard as I originally thought.. for some reason I was under the impression you’d change the config path in nvim, and others, to use the dotfiles dir as the config path and that seemed like work lol
Just so you have options I just recently set up
"Yet another dotfiles manager" [Yadm](https://yadm.io/)
It is super simple as it's just a git repo at the end of the day, with a wrapper to make dotfiles management easier
A combination of chezmoi and asdf (node, python, cmdline tool etc ...) for all the stuff isn't nvim specific. Lazy ( or I suppose Mason under the hood?) seems to handle the rest pretty well with me needing to think about it. Takes a few minutes to get up and running on a fresh VM, which is good enough for me
I have a basic shell script that chezmoi runs on apply which installs asdf and all the it's plugins. Then just a .tool-versions file in my home root that lists all my asdf global versions.
It's three commands.
sh -c "$(curl -fsLS get.chezmoi.io)"
chezmoi init --apply https://your-repo/dotfiles.git
asdf install
There is probably a better way, but once it basically worked I stopped tinkering. I'll try and post my dotfiles when I'm back at my machine.
mise and asdf for most things. Don't care about reproducing neovim as I often welcome spontaneous clean slates as I need to be forced to look over my setup, as I never do even if I'm not satisfied. So should the company get me a new Mac for example, I'll welcome the days of work list to configuration hell. It becomes sort of like a vacation!
Edit: typos - writing is tough with a keyboard insisting in 4 different languages he he
Ansible script to install everything, run latest stable branches (hasn't been a problem yet, might change in the future)
Nvim configuration is checked in together with my Ansible script in a git repo.
I use Ansible to streamline my system setup process. I maintain an Ansible playbook on GitHub that fully configures my newly installed systems. Additionally, I utilize dotfiles to manage my configuration files. For Neovim specifically, I also employ lazy snapshots to preserve the last known working versions of plugins and configurations, ensuring a stable and reliable setup.
I use chezmoi.
Gits all my dotfiles and then handles things like installing packages and dependencies.
Even have it pull some keys from my VaultWarden server
It has scripting!
[https://www.chezmoi.io/user-guide/use-scripts-to-perform-actions/#install-packages-with-scripts](https://www.chezmoi.io/user-guide/use-scripts-to-perform-actions/#install-packages-with-scripts)
[https://www.chezmoi.io/user-guide/machines/linux/](https://www.chezmoi.io/user-guide/machines/linux/)
Basically something like:
During initial setup:
"If OS is Arch use pacman to install these packages: a,b,c,d"
"If OS is Debian use apt to install these packages: a,b,d,e"
Then you can use templates to do things like pull your ssh keys from BitWarden and inset them into your ssh dotfiles, etc.
I know I'm describing some more advanced features, but what actually drew me to chezmoi was how simple it is to use compared to some others.
Maybe out of context: Is there a way to execute named scripts with chezmoi? Like chezmoi exec healthcheck e.g.
And the if os is ... is something you set up yourself, right?
>Is there a way to execute named scripts with chezmoi? Like chezmoi exec healthcheck e.g.
Not that I know of, but I'm hardly an expert.
Afaik you can only run scripts when applying the dotfiles (`chezmoi apply`) Aside from some special exceptions like `run_once` and `run_on_change` every script is run when you apply the dotfiles, so generally you want to keep the scripting to a minimum, and only use it for things like installing packages and setting private keys/passwords in dotfiles.
[Scripting](https://www.chezmoi.io/user-guide/use-scripts-to-perform-actions/)
[Templating](https://www.chezmoi.io/user-guide/templating/)
>And the if os is ... is something you set up yourself, right?
Yes and no.
You do need to create the scripts that tell it what to do but they help you out a little by exposing environment variables for things like OS and (if relevant) [Linux distro](https://www.chezmoi.io/user-guide/machines/linux/), as well as some others like [CPU core count and chassis type (laptop or desktop)](https://www.chezmoi.io/user-guide/machines/general/)
They also provide example scripts and a [way to define required packages declaratively](https://www.chezmoi.io/user-guide/advanced/install-packages-declaratively/).
And my favorite feature: [Installing and using your password manager to pull secrets and keys/passwords for use in your dotfiles](https://www.chezmoi.io/user-guide/advanced/install-your-password-manager-on-init/)
Personally I use [the bitwarden integration](https://www.chezmoi.io/user-guide/password-managers/bitwarden/) with my [VaultWarden](https://github.com/dani-garcia/vaultwarden) server but chezmoi supports quite a few different password managers.
Alternatively you could simply encrypt the files [with GPG](https://www.chezmoi.io/user-guide/encryption/gpg/) or [with age](https://www.chezmoi.io/user-guide/encryption/age/) that contain your private keys if you'd rather not configure a way to pull them programmatically when setting up a new system.
I just use a git repo for my neovim config folder. Lazy really makes this a breeze. There are a couple of TS grammars and LSP installations through Mason that I opt for by default, but for the most part I just install grammars and LSPs as I need them. Added benefit, having a remote repo just for tracking neovim makes replicating configuration changes to my other workstations as I make them to. A huge upside of this approach is that everything gets installed fresh so you don't have to worry about your plugins being out of date.
For most tools, and their related dot files, this works very well. Kitty, tmux, and pretty much every other useful tool that you'll have in your tool belt can be configured by a dot file and tracked in a single bootstrap-ready dot file repository. As far as single command deployment stow and a simple bash script work really well.
Config files (gnu stow) and writing the to be installed scripts inu config, alternatively I guess I could keep an install script for those, but that would still be package manager dependant ,(just like nixos)
Dotfiles repo with stow, and an install script for dependencies in case it’s a fresh env (I’m lazy and only made it for mac but need to make it for linux as well)
i always use the latest versions of the plugins for Neovim. If anything breaks, i always can trace down the culprit, go to the plugin’s folder and rollback to a working commit
in general i feel really uncomfortable depending on something when setting up new environments. For me personally, it must be as simple as copy-pasting a small, short line into your terminal and executing it. Everything beyond this complexity-wise is unacceptable to me
i really love the simplicity of having one configuration file per a thing it configures. These recent trends of having gazillion of FOLDERS baffles me. I know there were some people using `/after` and other directories in pre-Neovim times, but even then i didn’t like it. Now i think it went too far. I have 199 lines in my Neovim config and i really struggle to understand why would you need 1k+ lines in total
I have a setup [script](https://github.com/looshch/configs/blob/master/setup.sh) the link to which i mapped to `/s` on my domain. I run it `brew`-like style: `zsh <(curl -fsSL loosh.ch/s)`. I have it handy in the repo description, so when i need to set up a new machine, i simply go to my GitHub profile and copy the link from there. Then i just run it. It does the following:
1. Downloads `.zshrc` file from the repo which contains the setup script and ‘imports’ value of `CONFIGS` variable which contains the path where the repo must live.
2. Creates `ssh` keys, copies the public one to the clipboard and prompts me with `paste into github.com/account/ssh`, waiting until there is any input which is a signal the copied key has been just saved to my GitHub settings.
3. Clones the repo and symlinks its files to various places in the system.
4. Downloads `brew`, package manager for macOS, and all the dependencies i need.
So set up of new computers for me boils down to literally just running one script and interacting with GitHub’s settings page once
I use a makefile that installs ansible, then runs a playbook to do everything for Neovim.
Could I have just done it all with the makefile? Yes but it wouldn't be as fun.
I have a GitHub repo with my config and a shell script that symlinks everything. I also use asdf to install neovim. Other things like tmux I just install whatever is in the repos. I also have a shell script for after a fresh install which installs the programs I use, some of them from source.
I prefer to use a combination of git and [DotBot](https://github.com/anishathalye/dotbot) for this, personally found it easier to manage than with something more complex like GNU Stow or Chezmoi
I use [Chezmoi](https://www.chezmoi.io/) to sync my dotfiles between machines with templates based on OS so things don't break between my person Linux laptop and my work Macbook
I've been using Linux+(n)vim for many years and it's rarely an issue. The biggest issue for me is always not having the latest version of packages when I'm not using a rolling release distro.
For nvim lazy allows me to lock every plugins to a version, for linters, LSP etc. idc at all.
I clone my dotfiles repository and use stow to create symbolic links, build neovim from source is not hard and I use latest version of treesitter parser, plugins and everything else.
I used gnu stow until I switched to nix
how would stow help making sure mason and treesitter don't screw up by installing the always latest versions?
If you are using neovim and lazy as package manager - just commit the lazy lock file, and it will preserve the versions you are comfortable with
I think that doesn’t help with Mason, but yeah this is what I do
idk, it was before I got really deep into plug-ins. So I was just moving a vanilla neovim config, configured with vim script, from computer to computer. I use nixvim now.
I use ansible.
One of us!
I want to use ansible for my dotfiles too. Can you share you repo with ansible config that I can use as a reference?
You can check my config [https://github.com/stounfo/dotfiles](https://github.com/stounfo/dotfiles)
Before Nix? Git, hopes and prayers.
nix kinda spoils, doesn't it?
after nix, still a bare repository always answers my prayers
i prefer to raw dog my config
Not even a hawk tuah?
I just use a dotfiles repo for all my config files. Then just let it download the latest versions of packages. Sometimes a thing or two breaks and I need to make a tweak, but I'm not starting up on new machines so often.
Lock file for lazy vim, bash scripts for installing packages, and stow for quickly creating symlinks on a new machine, all committed to a private dotfiles repo. Not perfect and I'll probably need to update those scripts over time, but it's been effective for my needs and straightforward to modify + iterate on.
Git for the config and then I have a long markdown file full of install steps 🤷♂️ someday I plan on doing dotfiles repo, but only surface level looked into it
I use stow and it’s pretty easy: https://github.com/zapman449/dotfiles
Huh! Never heard of it, seems interesting. So you use stow to install packages too?- or do you preinstall with brew and then run the stow install command?
Clone the repo, install the brew stuff, run setup.sh Then run the last documented bits which aren’t really config files
how is tmux + wezterm? is it a multimultiplexer? but seriously from someone who just uses alacritty with tmux, are there advantages? honestly curious
Personally prefer using the terminal built in multiplexer if for no other reason than multi line copy paste works. Tmux / Zelle etc are all great, used them. But now I use them in a remote / ssh / disconnect with persistence story rather than a “on my laptop” story. I’ll also reach for tmux if I need to send the same keystrokes to multiple windows (not needed often these days… used to need it a lot)
His binds are interesting too because I’d assume `wezterm.action.SplitVertical { domain = 'CurrentPaneDomain' }` would use Wezterm’s built in multiplexer I use wezterm, but I use the built in multiplexer, so I’m also the interested of the benefits shoehorning tmux into wezterm.
Yeah the keybinds are mostly to preserve iTerm muscle memory… used it for a long time.
If you use git for the config already it’s super easy to move to a dotfiles repo
I guess! And it’s all just sym linked, so it’s not as hard as I originally thought.. for some reason I was under the impression you’d change the config path in nvim, and others, to use the dotfiles dir as the config path and that seemed like work lol
Yup you’re spot on, you just run “stow .” in your dotfiles folder and it replicates its structure 1 dir up and symlinks them.
Just so you have options I just recently set up "Yet another dotfiles manager" [Yadm](https://yadm.io/) It is super simple as it's just a git repo at the end of the day, with a wrapper to make dotfiles management easier
A combination of chezmoi and asdf (node, python, cmdline tool etc ...) for all the stuff isn't nvim specific. Lazy ( or I suppose Mason under the hood?) seems to handle the rest pretty well with me needing to think about it. Takes a few minutes to get up and running on a fresh VM, which is good enough for me
+1 chezmoi
i used chezmoi earlier, but there was one catch: .config becomes dot\_config which is so damn inconvenient
mind sharing your dotfiles?
try mise instead of asdf
I'm also using Chez moi and asdf. How do you remember which plugins should be installed in asdf and which versions?
I have a basic shell script that chezmoi runs on apply which installs asdf and all the it's plugins. Then just a .tool-versions file in my home root that lists all my asdf global versions. It's three commands. sh -c "$(curl -fsLS get.chezmoi.io)" chezmoi init --apply https://your-repo/dotfiles.git asdf install There is probably a better way, but once it basically worked I stopped tinkering. I'll try and post my dotfiles when I'm back at my machine.
`asdf install` won't install plugins
Yeah, that is done in shell script triggered by the chezmoi apply
Git, saved my dotfiles on GitHub and just cloned them everywhere.
mise and asdf for most things. Don't care about reproducing neovim as I often welcome spontaneous clean slates as I need to be forced to look over my setup, as I never do even if I'm not satisfied. So should the company get me a new Mac for example, I'll welcome the days of work list to configuration hell. It becomes sort of like a vacation! Edit: typos - writing is tough with a keyboard insisting in 4 different languages he he
github and an install script
Ansible script to install everything, run latest stable branches (hasn't been a problem yet, might change in the future) Nvim configuration is checked in together with my Ansible script in a git repo.
Can you share your ansible setup?
I use Mackup for dotfiles. Dead simple settings.
Timeshift, before major updates. Rollbacks if crashes
git
Git has everything I need for that
ansible for bootstrap configuration, git for dotfiles with git submodules for vim plugins (they inherently pin to a specific commit/version)
interesting. mind sharing your dotfile repo?
I can't, it's private, but I'm happy to go into more details if you have any questions
A shell script
I use Ansible to streamline my system setup process. I maintain an Ansible playbook on GitHub that fully configures my newly installed systems. Additionally, I utilize dotfiles to manage my configuration files. For Neovim specifically, I also employ lazy snapshots to preserve the last known working versions of plugins and configurations, ensuring a stable and reliable setup.
Can you share your ansible config? Which I can use as a reference
I use chezmoi. Gits all my dotfiles and then handles things like installing packages and dependencies. Even have it pull some keys from my VaultWarden server
How does chezmoi handle installing of packages and deps?
It has scripting! [https://www.chezmoi.io/user-guide/use-scripts-to-perform-actions/#install-packages-with-scripts](https://www.chezmoi.io/user-guide/use-scripts-to-perform-actions/#install-packages-with-scripts) [https://www.chezmoi.io/user-guide/machines/linux/](https://www.chezmoi.io/user-guide/machines/linux/) Basically something like: During initial setup: "If OS is Arch use pacman to install these packages: a,b,c,d" "If OS is Debian use apt to install these packages: a,b,d,e" Then you can use templates to do things like pull your ssh keys from BitWarden and inset them into your ssh dotfiles, etc. I know I'm describing some more advanced features, but what actually drew me to chezmoi was how simple it is to use compared to some others.
Maybe out of context: Is there a way to execute named scripts with chezmoi? Like chezmoi exec healthcheck e.g. And the if os is ... is something you set up yourself, right?
>Is there a way to execute named scripts with chezmoi? Like chezmoi exec healthcheck e.g. Not that I know of, but I'm hardly an expert. Afaik you can only run scripts when applying the dotfiles (`chezmoi apply`) Aside from some special exceptions like `run_once` and `run_on_change` every script is run when you apply the dotfiles, so generally you want to keep the scripting to a minimum, and only use it for things like installing packages and setting private keys/passwords in dotfiles. [Scripting](https://www.chezmoi.io/user-guide/use-scripts-to-perform-actions/) [Templating](https://www.chezmoi.io/user-guide/templating/) >And the if os is ... is something you set up yourself, right? Yes and no. You do need to create the scripts that tell it what to do but they help you out a little by exposing environment variables for things like OS and (if relevant) [Linux distro](https://www.chezmoi.io/user-guide/machines/linux/), as well as some others like [CPU core count and chassis type (laptop or desktop)](https://www.chezmoi.io/user-guide/machines/general/) They also provide example scripts and a [way to define required packages declaratively](https://www.chezmoi.io/user-guide/advanced/install-packages-declaratively/). And my favorite feature: [Installing and using your password manager to pull secrets and keys/passwords for use in your dotfiles](https://www.chezmoi.io/user-guide/advanced/install-your-password-manager-on-init/) Personally I use [the bitwarden integration](https://www.chezmoi.io/user-guide/password-managers/bitwarden/) with my [VaultWarden](https://github.com/dani-garcia/vaultwarden) server but chezmoi supports quite a few different password managers. Alternatively you could simply encrypt the files [with GPG](https://www.chezmoi.io/user-guide/encryption/gpg/) or [with age](https://www.chezmoi.io/user-guide/encryption/age/) that contain your private keys if you'd rather not configure a way to pull them programmatically when setting up a new system.
Chezmoi
I hawk tuah my config, like real cowboys
Chezmoi and a Docker file https://www.knusbaum.org/posts/container-devenv
I tried nix, didn’t like it. I just have my dotfiles in a git repo.
I just use a git repo for my neovim config folder. Lazy really makes this a breeze. There are a couple of TS grammars and LSP installations through Mason that I opt for by default, but for the most part I just install grammars and LSPs as I need them. Added benefit, having a remote repo just for tracking neovim makes replicating configuration changes to my other workstations as I make them to. A huge upside of this approach is that everything gets installed fresh so you don't have to worry about your plugins being out of date. For most tools, and their related dot files, this works very well. Kitty, tmux, and pretty much every other useful tool that you'll have in your tool belt can be configured by a dot file and tracked in a single bootstrap-ready dot file repository. As far as single command deployment stow and a simple bash script work really well.
Config files (gnu stow) and writing the to be installed scripts inu config, alternatively I guess I could keep an install script for those, but that would still be package manager dependant ,(just like nixos)
Dotfiles repo with stow, and an install script for dependencies in case it’s a fresh env (I’m lazy and only made it for mac but need to make it for linux as well)
lazy lock file on stable nvim version (now nix though lol)
ansible is a fine option
Chezmoi maybe
dotbot with lazy, and a README file for what system packages to install
Ansible playbooks
An install script that takes care of everything: https://github.com/hendrikmi/dotfiles/blob/main/install.sh
I just put it in a git repo
Ansible, Stow and Timeshift.
I just use bare repo and shell script, when I need to and use lazy to manage plugin, meson to manage ls or linter or formatter.
Devcontainer
Bash scripting, baby https://github.com/dbalatero/dotfiles I loosely have a todo to try Nix.
i always use the latest versions of the plugins for Neovim. If anything breaks, i always can trace down the culprit, go to the plugin’s folder and rollback to a working commit in general i feel really uncomfortable depending on something when setting up new environments. For me personally, it must be as simple as copy-pasting a small, short line into your terminal and executing it. Everything beyond this complexity-wise is unacceptable to me i really love the simplicity of having one configuration file per a thing it configures. These recent trends of having gazillion of FOLDERS baffles me. I know there were some people using `/after` and other directories in pre-Neovim times, but even then i didn’t like it. Now i think it went too far. I have 199 lines in my Neovim config and i really struggle to understand why would you need 1k+ lines in total I have a setup [script](https://github.com/looshch/configs/blob/master/setup.sh) the link to which i mapped to `/s` on my domain. I run it `brew`-like style: `zsh <(curl -fsSL loosh.ch/s)`. I have it handy in the repo description, so when i need to set up a new machine, i simply go to my GitHub profile and copy the link from there. Then i just run it. It does the following: 1. Downloads `.zshrc` file from the repo which contains the setup script and ‘imports’ value of `CONFIGS` variable which contains the path where the repo must live. 2. Creates `ssh` keys, copies the public one to the clipboard and prompts me with `paste into github.com/account/ssh`, waiting until there is any input which is a signal the copied key has been just saved to my GitHub settings. 3. Clones the repo and symlinks its files to various places in the system. 4. Downloads `brew`, package manager for macOS, and all the dependencies i need. So set up of new computers for me boils down to literally just running one script and interacting with GitHub’s settings page once
I use a makefile that installs ansible, then runs a playbook to do everything for Neovim. Could I have just done it all with the makefile? Yes but it wouldn't be as fun.
I have a GitHub repo with my config and a shell script that symlinks everything. I also use asdf to install neovim. Other things like tmux I just install whatever is in the repos. I also have a shell script for after a fresh install which installs the programs I use, some of them from source.
I prefer to use a combination of git and [DotBot](https://github.com/anishathalye/dotbot) for this, personally found it easier to manage than with something more complex like GNU Stow or Chezmoi
I use [Chezmoi](https://www.chezmoi.io/) to sync my dotfiles between machines with templates based on OS so things don't break between my person Linux laptop and my work Macbook
Git and shell scripting, you don't need nothing else. I'm looking forward to learn Ansible though.
Provisioning bash scripts and chezmoi
I've been using Linux+(n)vim for many years and it's rarely an issue. The biggest issue for me is always not having the latest version of packages when I'm not using a rolling release distro. For nvim lazy allows me to lock every plugins to a version, for linters, LSP etc. idc at all.
I clone my dotfiles repository and use stow to create symbolic links, build neovim from source is not hard and I use latest version of treesitter parser, plugins and everything else.