RStudio Serverで好きなフォントを使う

# はじめに

RStudio Serverを使っていると，ブラウザからアクセスするため使えるフォントが限られると思っていませんか？

私はそう思っていました…が！[こちら](https://github.com/rstudio/rstudio/tree/8cb57c1f1ddb260d7ed8a08838e4807a2c7b3746/src/cpp/server/fonts)によると，`~/.config/rstudio/fonts`以下にフォントごとのディレクトリを作って，フォントをコピーしてやるとRStudio Serverの[Tools] - [Global Options]で選ぶことができるようになるそうです．

# スクリプト

ということで，お気に入りのHackGenとUDEV Gothicをダウンロードしてインストールするスクリプトを作ってみました．バージョン番号を入力すると指定のバージョンを`~/.config/rstudio/fonts`以下にコピーします．`wget`と`unzip`はあらかじめインストールしておいて下さい．

```shell
#!/bin/sh

if [ ! -d ~/.config/rstudio/ ]; then
    exit 1
fi

cd ~/.config/rstudio/

if [ ! -d fonts/ ]; then
    mkdir fonts
fi
cd fonts/

# HackGen

read -p "Input the version of HackGen: " HACKGEN_VER

if [ ! -z "$HACKGEN_VER" ]; then
    mkdir -p HackGen/400
    mkdir -p HackGen/700
    mkdir -p HackGen\ Console/400
    mkdir -p HackGen\ Console/700
    mkdir -p HackGen35/400
    mkdir -p HackGen35/700
    mkdir -p HackGen35\ Console/400
    mkdir -p HackGen35\ Console/700

    if ! ls HackGen_v* > /dev/null 2>&1
    then
	wget https://github.com/yuru7/HackGen/releases/download/v$HACKGEN_VER/HackGen_v$HACKGEN_VER.zip
    fi

    unzip HackGen_v$HACKGEN_VER.zip

    mv HackGen_v$HACKGEN_VER/HackGen-Regular.ttf HackGen/400
    mv HackGen_v$HACKGEN_VER/HackGen-Bold.ttf HackGen/700
    mv HackGen_v$HACKGEN_VER/HackGenConsole-Regular.ttf HackGen\ Console/400
    mv HackGen_v$HACKGEN_VER/HackGenConsole-Bold.ttf HackGen\ Console/700
    mv HackGen_v$HACKGEN_VER/HackGen35-Regular.ttf HackGen35/400
    mv HackGen_v$HACKGEN_VER/HackGen35-Bold.ttf HackGen35/700
    mv HackGen_v$HACKGEN_VER/HackGen35Console-Regular.ttf HackGen35\ Console/400
    mv HackGen_v$HACKGEN_VER/HackGen35Console-Bold.ttf HackGen35\ Console/700

    rm -r HackGen_v$HACKGEN_VER
else    
    continue
fi

# udev-gothic

read -p "Input the version of udev-gothic: " UDEVGOTHIC_VER
if [ ! -z "$UDEVGOTHIC_VER" ]; then
    mkdir -p UDEV\ Gothic/400
    mkdir -p UDEV\ Gothic/700
    mkdir -p UDEV\ Gothic\ LG/400
    mkdir -p UDEV\ Gothic\ LG/700

    if ! ls UDEVGothic_v* > /dev/null 2>&1
    then
	wget https://github.com/yuru7/udev-gothic/releases/download/v$UDEVGOTHIC_VER/UDEVGothic_v$UDEVGOTHIC_VER.zip
    fi

    unzip UDEVGothic_v$UDEVGOTHIC_VER.zip

    mv UDEVGothic_v$UDEVGOTHIC_VER/UDEVGothic-Regular.ttf UDEV\ Gothic/400
    mv UDEVGothic_v$UDEVGOTHIC_VER/UDEVGothic-Bold.ttf UDEV\ Gothic/700
    mv UDEVGothic_v$UDEVGOTHIC_VER/UDEVGothicLG-Regular.ttf UDEV\ Gothic\ LG/400
    mv UDEVGothic_v$UDEVGOTHIC_VER/UDEVGothicLG-Bold.ttf UDEV\ Gothic\ LG/700

    rm -r UDEVGothic_v$UDEVGOTHIC_VER
else   
    continue
fi

# Moralerspace

read -p "Input the version of Moralerspace: " MORALERSPACE_VER
if [ ! -z "$MORALERSPACE_VER" ]; then
    mkdir -p MoralerspaceNeonHW/400
    mkdir -p MoralerspaceNeonHW/700
    mkdir -p MoralerspaceArgonHW/400
    mkdir -p MoralerspaceArgonHW/700
    mkdir -p MoralerspaceKryptonHW/400
    mkdir -p MoralerspaceKryptonHW/700
    mkdir -p MoralerspaceRadonHW/400
    mkdir -p MoralerspaceRadonHW/700
    mkdir -p MoralerspaceXenonHW/400
    mkdir -p MoralerspaceXenonHW/700

    if ! ls MoralerspaceHW_v* > /dev/null 2>&1
    then
	wget https://github.com/yuru7/moralerspace/releases/download/v$MORALERSPACE_VER/MoralerspaceHW_v$MORALERSPACE_VER.zip
    fi

    unzip MoralerspaceHW_v$MORALERSPACE_VER.zip

    mv MoralerspaceHW_v$MORALERSPACE_VER/MoralerspaceNeonHW-Regular.ttf MoralerspaceNeonHW/400
    mv MoralerspaceHW_v$MORALERSPACE_VER/MoralerspaceNeonHW-Italic.ttf MoralerspaceNeonHW/400
    mv MoralerspaceHW_v$MORALERSPACE_VER/MoralerspaceNeonHW-Bold.ttf MoralerspaceNeonHW/700
    mv MoralerspaceHW_v$MORALERSPACE_VER/MoralerspaceNeonHW-BoldItalic.ttf MoralerspaceNeonHW/700
    mv MoralerspaceHW_v$MORALERSPACE_VER/MoralerspaceArgonHW-Regular.ttf MoralerspaceArgonHW/400
    mv MoralerspaceHW_v$MORALERSPACE_VER/MoralerspaceArgonHW-Italic.ttf MoralerspaceArgonHW/400
    mv MoralerspaceHW_v$MORALERSPACE_VER/MoralerspaceArgonHW-Bold.ttf MoralerspaceArgonHW/700
    mv MoralerspaceHW_v$MORALERSPACE_VER/MoralerspaceArgonHW-BoldItalic.ttf MoralerspaceArgonHW/700
    mv MoralerspaceHW_v$MORALERSPACE_VER/MoralerspaceKryptonHW-Regular.ttf MoralerspaceKryptonHW/400
    mv MoralerspaceHW_v$MORALERSPACE_VER/MoralerspaceKryptonHW-Italic.ttf MoralerspaceKryptonHW/400
    mv MoralerspaceHW_v$MORALERSPACE_VER/MoralerspaceKryptonHW-Bold.ttf MoralerspaceKryptonHW/700
    mv MoralerspaceHW_v$MORALERSPACE_VER/MoralerspaceKryptonHW-BoldItalic.ttf MoralerspaceKryptonHW/700
    mv MoralerspaceHW_v$MORALERSPACE_VER/MoralerspaceXenonHW-Regular.ttf MoralerspaceXenonHW/400
    mv MoralerspaceHW_v$MORALERSPACE_VER/MoralerspaceXenonHW-Italic.ttf MoralerspaceXenonHW/400
    mv MoralerspaceHW_v$MORALERSPACE_VER/MoralerspaceXenonHW-Bold.ttf MoralerspaceXenonHW/700
    mv MoralerspaceHW_v$MORALERSPACE_VER/MoralerspaceXenonHW-BoldItalic.ttf MoralerspaceXenonHW/700
    mv MoralerspaceHW_v$MORALERSPACE_VER/MoralerspaceRadonHW-Regular.ttf MoralerspaceRadonHW/400
    mv MoralerspaceHW_v$MORALERSPACE_VER/MoralerspaceRadonHW-Italic.ttf MoralerspaceRadonHW/400
    mv MoralerspaceHW_v$MORALERSPACE_VER/MoralerspaceRadonHW-Bold.ttf MoralerspaceRadonHW/700
    mv MoralerspaceHW_v$MORALERSPACE_VER/MoralerspaceRadonHW-BoldItalic.ttf MoralerspaceRadonHW/700

    rm -r MoralerspaceHW_v$MORALERSPACE_VER
else   
    continue
fi

# Clean up

if ls *.zip 1> /dev/null 2>&1; then
    rm -f *.zip
fi

```