Как часто приходилось видеть репозиторий с кастомным скриптом по установке своих скриптов .bashrc или .zshrc файлы? Я точно писал такой велосипед и не один раз, для репозиториев, где храню свои личные конфиги. Давайте эту проблему решать.



Примеров таких велосипедов тьма тьмущая:


Я думаю и вы писали подобный велосипед. Так что мне пришло в голову это дело обобщить. Быстрый поиск не дал результатов и я написал свою поделку. Может что похожее уже и есть, но мне пока никто на это не указал. Вот как теперь выглядит README.md файл моего репозитория с конфигами:

In order to install config please do:

cd /tmp
git clone https://github.com/OwnInfrastructure/configs.git
cd configs
RC_PATH=.commonrc
curl -s https://raw.githubusercontent.com/b0noI/rcinstaller/master/install.sh | bash /dev/stdin $RC_PATH

Важно обратить внимание вот сюда:

 curl -s https://raw.githubusercontent.com/b0noI/rcinstaller/master/install.sh | bash /dev/stdin $RC_PATH

Это пример использования того самого фреймворка с названием “rcinstaller”. Репозиторий с ним можно найти вот тут.

Теперь вам нужно лишь создавать конфиги, а их интеграцию можете оставить этой поделке.

Как начать использовать это на своем репозитории


Проще не бывает, просто добавьте в ваш README файл что-то вроде:

curl -s https://raw.githubusercontent.com/b0noI/rcinstaller/master/install.sh | bash /dev/stdin <path_to_my_awesome_rc_file>

Что эта штука умеет делать?


На момент написания статьи скрипт выполнял нехитрый список шагов:

  1. Проверяет существует ли директория ~/.profile.d, и если нет то создает ее.
  2. Добавлчет в .zshrc (если там еще нету этого): “[ -f ${HOME}/.profile.d/.sh ] && source ${HOME}/.profile.d/.sh” .
  3. Тоже самое но для .bashrc.
  4. Копирует заданный скрипт в ~/.profile.d.

Как нетрудно догадаться, ваш конфиг должен иметь уникальное имя, так как скрипт тупо перезатрет существующий файл с таким же именем. Пока что поддерживается только один скрипт за раз.

Как вы можете помочь проекту


Если хочется помочь — есть список задач и багов. Ну и конечно можно зайти на мою страничку на Patreon.

ВНИМАНИЕ!


Добрый люди мне уже объяснили что такое использование curl может быть не совсем безопасным.
Поделиться с друзьями
-->

Комментарии (15)


  1. Sirikid
    05.01.2017 11:44
    +1

    Почему нельзя просто написать makefile? Ой, мейкфайлы умеют писать только замшелые сишники и их фанаты.


    1. foxmuldercp
      06.01.2017 01:11
      -2

      Я, например, ни c, ни с++ не знаю, да и пёрловку не очень умею готовить, но мейкфайл для сборки, например, своей первой версии статического сайта с помощью mandoc, написал неспешно под полтора литра пива и двухчасовой концерт Скорпионс.
      Так что не надо тут обижать никого


      1. Sirikid
        06.01.2017 01:46

        Никого не хотел обидеть, разве что "велосипедистов", но когда я осознал что ошибся комментарий "стух" и ни удалить, ни стереть его уже было нельзя. А правильные мейкфайлы рулят.


    1. b0noII
      06.01.2017 09:00

      Простите, а как makefile решит проблему того что для репозитория с конфигом нужно что-то писать (в данном случае makefile)? Или коментарий не по соновной проблеме которую решаем а о том что в предложенном пути можно вместо shell скрипта использовтаь Makefile?


      1. Sirikid
        07.01.2017 00:25

        Не решит, я сначала не совсем понял о чем пост


        когда я осознал что ошибся комментарий "стух" и ни удалить, ни стереть его уже было нельзя


  1. overmind88
    05.01.2017 15:48

    Я недавно тоже озаботился синхронизацией и автоматизацией установки дотфайлов и остановился на таком решении https://github.com/anishathalye/dotbot
    Пока нравится


    1. foxmuldercp
      06.01.2017 01:12

      wget mysite.com/.zshrc|,tmux.conf с перелогином в систему решают все мои проблемы сразу


  1. RumataEstora
    05.01.2017 17:35

    Присматривался ко многим коллекциям dotfiles. В настоящее время остановился на .bashrc следующего содержания:


    if [ -d "${HOME}/.bash" ]
    then
            # Environment, functions, some setings and aliases: in this order
            for f in                 "${HOME}/.bash/environ"                 $( ls ${HOME}/.bash/functions-* 2>/dev/null )                 $( ls ${HOME}/.bash/settings-* 2>/dev/null )                 "${HOME}/.bash/aliases"
            do
                    [ -f "$f" ]                 && . "$f"
            done
    fi

    Работает под cygwin/linux. Поддерживаю только bash — другие не держим.


  1. Borz
    05.01.2017 23:34

    зачем? этот "велосипед" выполняется ровно один раз — при создании профиля пользователя в системе. Тоже использую подобный "велосипед" из первой ссылки, в котором есть "ln -s ~/Dropbox/.bash_aliases ~/" — этого вполне достаточно, чтобы настроить окружение, т.к. этот файл (~/.bash_aliases) ищется по-умолчанию в debian-based ОС.


  1. iborzenkov
    06.01.2017 01:02

    Быстрый поиск не дал результатов и я написал свою поделку.


    http://dotfiles.github.io/

    Ну серьезно. Тонны всего уже написано, менеджеры конфигураций, плагинов для bash,zsh,vim и прочего.
    Все в олпенсорсе и многое в репах дистрибутивов.

    Как вы можете помочь проекту

    Лопату принести? Просто после 37 строчек постить Patreon это уже ни в какие ворота.


    1. safinaskar
      06.01.2017 01:50
      +1

      Аааааа! Автора душит жаба. В своей странице на Patreon он обещает обязательно отвечать на комменты за три бакса в месяц (!!!)


  1. rumkin
    06.01.2017 01:34
    +5

    Нет, нет и еще раз нет! Это извращение! Это не unix-way. Это просто кошмар.


    (Простите за эмоциональность, но это правда отвратительно и оскорбительно для меня как адепта unix)


    Вот как делать это по канону:


    • Создайте в $HOME директорию profile.d и складывайте туда ваши скрипты.
    • Добавьте всего одну строку в файл $HOME/.profile:
      [ -f ~/.profile.d/*.sh ] && source ./profile.d/*.sh
    • Забудьте про патчинг profile-файла навсегда.

    Если нужно что-то отключить используете mv. Если нужно посмотреть, что сейчас подключается используете ls. Удалить – rm.


    Чтобы не делать это для всех пользователей, сделайте это один раз для пользовательского шаблона (для убунту /etc/skel).


    Все.


    1. b0noII
      06.01.2017 09:03

      а вот это очень дельно, спасибо, на выходных переделаю скрипт и обновлю REDME. Вот только ради одного этого комментария уже стоило пистаь статью =).


    1. b0noII
      09.01.2017 00:38

      Скрипт измене и теперь работает ближе к той схеме которую вы описали, спасибо большущее!


  1. kvaps
    10.01.2017 15:01

    Есть еще одно классное решение:


    Можно хранить свои dotfiles в git, каждый конфиг в отдельной папочке.
    А stow позволяет устанавливать нужные как пакеты.


    $ cd dotfiles
    $ stow vim

    и у вас последний конфиг для vim'а


    (подробнее)