

Show HN: fresh - a tool to manage and distribute dot files (think Bundler) - twe4ked
http://freshshell.com/

======
SnowLprd
I'm amazed at the number of projects that don't have even the simplest
description as to what problem the software purports to solve. This well-
intentioned project strikes me as among the more egregious examples.

The README contains almost zero information as to why the project was created,
which problems it aims to rectify, and why you might want to use it. That this
information may or may not be contained in an embedded video is of no
relevance to someone (like myself) who has neither the time nor ability at
this particular moment to watch anything on video that could have been more
succinctly explained in 2-3 sentences. It won't be bookmarked or favorited for
later perusal -- just ignored.

Please understand I mean this as constructively as possible: it's hard to
create something and share it with the world, and for that your efforts are
most highly commended. I suggest adding a general introduction/description and
some use cases to both the project site and README file. That will go a long
way toward garnering the attention of those who might otherwise simply shrug
and walk away.

~~~
twe4ked
Thanks for the feedback. We should have done this a while ago. It's easy to
forget that other people have no idea what we are building. Cheers.

[https://github.com/freshshell/fresh/commit/4ebf599aa61b54b66...](https://github.com/freshshell/fresh/commit/4ebf599aa61b54b66a0156e1842f4837a083de58)
and
[https://github.com/freshshell/fresh/commit/000d7ce00b9029881...](https://github.com/freshshell/fresh/commit/000d7ce00b9029881528c9fc9232c2e1567e80aa)

------
dnr
If anyone is just looking for a way to manage and sync dotfiles without any of
the sharing features (which are interesting but a little scary), you might
want to check out my thing: <https://bitbucket.org/davidn/dotstuff>

~~~
twe4ked
Fresh handles local files too:
[https://github.com/twe4ked/dotfiles/blob/master/config/fresh...](https://github.com/twe4ked/dotfiles/blob/master/config/freshrc#L5-10)

Edit: <https://github.com/freshshell/fresh#local-files>

------
Axsuul
If you're looking for a mature alternative, there's homesick @
<https://github.com/technicalpickles/homesick>. I use it everywhere and it's
great. Unfortunately, it _does_ have a ruby dependency.

~~~
jasoncodes
One of the big features of fresh is that it is able to merge configuration
from multiple sources into a single output file. This applies to both shell
(aliases) as well as configuration files.

For example, @twe4ked uses my tmux configuration but also has his own
additions using the following:

    
    
        fresh jasoncodes/dotfiles tmux.conf --file
        fresh config/tmux.conf --file

------
twe4ked
Here's my `.freshrc` for examples of how you can use fresh.
[https://github.com/twe4ked/dotfiles/blob/master/config/fresh...](https://github.com/twe4ked/dotfiles/blob/master/config/freshrc)

------
jasoncodes
Looking forward to hearing what HN thinks of fresh. We've already got a bunch
more features planned. <http://github.com/freshshell/fresh/issues>

~~~
samdk
You are asking someone to execute a shell script directly from the internet,
which is questionable in the first place. And then you're making it much much
worse by asking them to do it with a non-https link, meaning that someone can
trivially execute a MITM attack.

Your webpage doesn't have any explanation other than a video. I can read a
paragraph or two in a couple of seconds--I'm not going to take a minute and a
half (and stop listening to the music I'm listening to) to watch a video. The
GitHub README doesn't really have any information about what it is either.

I haven't actually tried this, because I have no idea what it is. The other
comment in here linked to an example _.freshrc_ file--I noted that every line
that's not a comment starts with the string 'fresh ', which seems like an
obvious annoyance. Even if you want it to just be a shell script you can
execute, you could support a batch mode to do something like this, for
example:

    
    
        fresh batch <<'BATCH'
        config/vimrc --file
        config/gemrc --file
        config/pryrc --file
        BATCH

~~~
twe4ked
Here's the install script
(<https://raw.github.com/freshshell/fresh/master/install.sh>). You can have a
read though if you like. I don't know any safer ways to install applications.
SSL is a good idea though.

We will add some more info to the home page but we were trying to keep most of
the info in the README.

> The GitHub README doesn't really have any information about what it is
> either.

What else would you like to know?

The batch mode is a good idea, however the way we're doing it is a tried and
true method used by many dev tools Bundler, Vundle, etc.

------
zrail
Interesting, but I think I'll stick with my own system[1]. I organize by task,
not repo or program. Also I try to do a minimum of symlinking, instead relying
on convention and PATH manipulation.

Edit: I don't mean to discourage you, by the way. The more variety in dotfile
management the better.

[1]: <http://bugsplat.info/2012-08-11-task-oriented-dotfiles.html>

~~~
jasoncodes
Organising by task sounds very similar to our goals.

One of fresh's major features is being able to source a subset of another's
dotfiles (at a per file level). For example, in my office we are all using
fresh to source common git aliases.

This module/task idea is certainly interesting and is something we have been
thinking about. Thanks for your feedback.

------
lukeholder
Whats to stop malicious git repos changing an alias after you have already
added it to your freshrc? I think locking to a specific git ref needs to be
top priority.

~~~
twe4ked
Absolutely. This is on the road map
(<https://github.com/freshshell/fresh/issues/11>). At the moment running
`fresh update` is the only way to update the source repos. I realise this
isn't ideal, but we never update repos without you knowing.

