Humanity

Edit the world by your favorite way

Dottoの設定ファイルをPerlで書けるようにした

前はYAMLだったけど、Perlでも書けるようにした。
拡張子が「.pl」ならPerlスクリプトとして実行します。

Perlだと同じ部分を変数に代入したりできるので便利ですね。
ただしPerlならなんでもいいので
ある程度宣言的に書かないと一気にわかりづらくなりそうです。
でも設定ファイルでごにょごにょできるとうれしいので便利だと思います。(例: .vimrc)

以下同じ意味のPerlYAMLの設定ファイルの例。

Perl
{
    directory => "dotfiles",
    files => [
        'bin',
        '.vim',
        '.vimrc',
        '.gvimrc',
        '.vimperator',
        '.vimperatorrc',
        '.bash_profile',
        '.bashrc',
        '.screenrc',
        '.inputrc',
        '.zshrc',
        '.zshenv',
        '.zsh',
        '.skel',
        '.module-starter',
        '.w3m/keymap',
        '.Xmodmap',
        '.shrc.common',
        '.shrc.cygwin',
        '.shrc.start-screen',
        '.env.common',
        '.tmux.conf',
        '.tmux',
        '.uim',
        '.uim.d/customs',
    ],
    os_files => do {
        $_ = {
            '.vimperator' => 'vimperator',
            '.vimperatorrc' => '_vimperatorrc',
        };
        {
            MSWin32 => $_,
            cygwin => $_,
        };
    },
    ignore_files => [
        '.vim/backup',
        '.vim/.netrwhist',
        '.vim/.VimballRecord',
        '.vim/info',
        '.vim/record',
        '.vim/sessions',
        '.vim/swap',
        '.vimperator/info',
    ],
}

追記: os_filesのところはこれでよかった

    os_files => {
        map {
            $_ => {
                '.vimperator' => 'vimperator',
                '.vimperatorrc' => '_vimperatorrc',
            }
        } qw(MSWin32 cygwin)
    },
YAML
directory: dotfiles
files:
  - bin
  - .vim
  - .vimrc
  - .gvimrc
  - .vimperator
  - .vimperatorrc
  - .bash_profile
  - .bashrc
  - .screenrc
  - .inputrc
  - .zshrc
  - .zshenv
  - .zsh
  - .skel
  - .module-starter
  - .w3m/keymap
  - .Xmodmap
  - .shrc.common
  - .shrc.cygwin
  - .shrc.start-screen
  - .env.common
  - .tmux.conf
  - .tmux
  - .uim
  - .uim.d/customs
os_files:
  MSWin32:
    .vimperator: vimperator
    .vimperatorrc: _vimperatorrc
  cygwin:
    .vimperator: vimperator
    .vimperatorrc: _vimperatorrc
ignore_files:
  - .vim/backup
  - .vim/.netrwhist
  - .vim/.VimballRecord
  - .vim/info
  - .vim/record
  - .vim/sessions
  - .vim/swap
  - .vimperator/info