this post was submitted on 27 Jul 2021
13 points (100.0% liked)

Linux

49436 readers
547 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
 

Hi all!

Recently, I've been thinking about how to handle my dotfiles again.

I've used chezmoi for a while, and while it's good, I've been wanting something a little lighter.

The simplicity of having my $HOME be a git repository was attractive, but I ran into issues. Specifically, many command line tools I use such as fzf and ripgrep have a feature to automatically ignore in their search results any files which are ignored by a gitignore. This meant I had to either turn this feature off (not ideal) or they wouldn't work any more. Also, the terminal prompt I use also showed I was within a git repository all the time, which was annoying.

Does anyone have an wisdom they'd like to share? If I can't get the $HOME as a git repository working the way I'd like, I may check out GNU Stow, which seems to be the next most lightweight option.

Thanks!

top 10 comments
sorted by: hot top controversial new old
[–] [email protected] 6 points 3 years ago (1 children)

I just use symlinks, and have a script that replaces the files in home with symlinks t my dotfiles folder.

[–] [email protected] 4 points 3 years ago* (last edited 3 years ago)

Yup, I wrote a script to symlink most of the files in my dotfiles repo a long time ago: https://github.com/Thann/dotfiles/blob/master/homelink.sh

It's similar to GNU stow, but does exactly what I want automatically

[–] [email protected] 5 points 3 years ago (1 children)

Can definitely recommend GNU Stow. You place your dotfiles into one directory, which you can check into Git, and then it creates symlinks from that folder to the places that the files would normally be at.

I followed this video a little while ago: https://share.tube/videos/watch/2d2409df-ab66-471e-8021-8178baca06d4

[–] [email protected] 2 points 3 years ago

I do this and can recommend. I also just keep two small scripts in the repo as well to stow and unstow all files (bash, ssh, etc).

[–] [email protected] 3 points 3 years ago* (last edited 3 years ago) (1 children)

In my dotfile repo, all dotfiles have a comment at the top like:

-- DOTFILE_DEST=.config/nvim/init.lua

The path is relative to home.

Then I have a shell script that goes through all the dotfiles and creates symlinks to the appropriate location.

Honestly it's kinda shit but I spent hours into getting this to work so I stick with it. Sunk cost fallacy. I have been interested in switching to yadm or chezmoi but having to depend on external tools is something I am reluctant to do for something so simple.

I am yet to find a dotfile which doesn't allow comments so this hasn't failed me so far.

This also allows me to rename the file to something more sensible in the context of a dotfile repo. Like I can rename init.lua to nvim.lua.

[–] [email protected] 1 points 3 years ago

nice idea; you could've done this as Ansible module and put the dotfiles in a template repository instead. That way you can separate the "what goes where" from the contents and have different target locations for different systems/distributions.

[–] [email protected] 3 points 3 years ago (1 children)

I have often heard of using Git bare repository instead of having $HOME as a normal Git repository itself. This approach sets your $HOME directory only as a Git repository's work tree, not entire Git repository. That would solve the problem of your CLI tools, I believe. For further information, see for example the following.

But GNU Stow seems to be pretty interesting way to manage dotfiles, too. It could definitely do what you need, as far as I know.

[–] [email protected] 2 points 3 years ago (1 children)

I've been experimenting with the Git bare repository method and I think it solves all my problems! Thanks very much. If I run into issues again, I'll for sure check out GNU Stow.

[–] [email protected] 2 points 3 years ago

Glad to hear that. Hope everything will work out for you. I have already thought about trying Git bare repository myself, but so far I am quite content with just copying dotfiles from my repository directory to $HOME myself. Might give these options a second thought someday soon.

[–] [email protected] 1 points 3 years ago

Specifically, many command line tools I use such as fzf and ripgrep have a feature to automatically ignore in their search results any files which are ignored by a gitignore. This meant I had to either turn this feature off (not ideal) or they wouldn’t work any more. Also, the terminal prompt I use also showed I was within a git repository all the time, which was annoying.

I have not seen any fzf which does that. Ripgrep I dont know, but I would guess there is an easy option to disable it like you said. For the prompt: You could easily modify your prompt to only show git repos that are not residing in ~/. So I can't follow your reasoning at all. I don't use this system but I don't think there will be a lot of benefit changing it all over again when the fixes are so simple.