My dotfiles based on Makefile
Clone or download
Latest commit 7c6503c Jan 22, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.config Add script to apply .Xresources at GUI startup Oct 15, 2018
.emacs.d Fix to move go-langserver Jan 22, 2019
.mlterm Fix input_method Mar 28, 2018
.mutt Add mine types Dec 22, 2017
Dropbox/sample Update Jan 19, 2019
archlinux Update package Jan 22, 2019
etc Add php.ini Nov 30, 2018
usr/share/applications Add command that toggle between emacs and chromium Oct 16, 2018
.Xresources Fix typo Mar 30, 2018
.aspell.conf test Jul 7, 2017 Add xdotool Oct 15, 2018
.bashrc Delete Cask Apr 2, 2018
.gitconfig Delete git undo Sep 3, 2018
.gitignore Add .gitignore Jul 31, 2018
.lesskey Fix keybind Dec 12, 2017
.muttrc Add editor Apr 7, 2018
.myclirc Add .myclirc Nov 14, 2017
.npmrc Add .npmrc Nov 3, 2017
.screenrc Update .screenrc Oct 28, 2017
.tern-config Update .tern-config Nov 8, 2017
.tmux.conf Delete tmux plugin Mar 26, 2018 Fix priority of emacs when toggle Oct 17, 2018
.vimrc Set noswapfile for vim Mar 28, 2018
.xinitrc Update .xinitrc Oct 27, 2017
.zshrc Fix sdk Dec 8, 2018
Dockerfile Change yaourt to yay Aug 16, 2018
LICENSE Add LICENSE Apr 10, 2017
Makefile Add mermaid Jan 21, 2019 Add mermaid Jan 21, 2019

My dotfiles based on Makefile




Let's build environment with Makefile

This dotfiles is for Arch linux. Since there is no such as a distribution without make, if you make Makefile, you can correspond to any distribution. Let's make a Makefile immediately.

With Makefile, such a good thing

Easy to build development environment with this command.

make install

I never have to worry about setting my laptop again.

Deploying dotfiles can be done in a moment

After make install you can deploy dotfiles with this command.

make init

With Makefile, you will be able to recover your usual environment in 1 hour


make backup

The ArchLinux package list installed by this command is backed up in the archlinux directory.

Commands for allinstall

make allinstall

You can install all with this command. You can install anything written after allinstall in the makefile. Keep Dropbox synchronized before doing make allinstall.

make allbackup

You can backup packages all with this command.

make allupdate

You can update packages all with this command.

Criteria of things managed by Dropbox

  • What can not be placed on github

    Public key in .ssh etc.

  • Because it makes a lot of update file, it is troublesome to synchronize with github

    .zsh_history .mozc

  • Those that can not be opened but need to protect data

    Sylpheed configuration file and mail data etc. As mail arrives, it will be synchronized to dropbox so you don't have to think about backup.

Don't forget to make dropbox 2 factor authentication.

Arch Linux install

Why Arch linux?

  • Unless your laptop breaks, arch linux is a rolling release so you don't have to reinstall it. Even if it gets broken, I made a Makefile so I can return in 1 hour and it's unbeatable.

  • Arch linux is good because it is difficult for my development environment to be old packages.

  • I like customization but if customization is done too much, it is not good because it can not receive the benefit of the community. Since Arch linux is unsuitable for excessive customization, it is fit to me. In principle the package of Arch linux is a policy to build from the source of vanilla (Vanilla means that it does not apply its own patch for arch linux) It is good because Arch linux unique problems are unlikely.

  • Arch linux is lightweight because there is no extra thing.


Download Arch linux.

Create USB installation media. Run the following command, replacing /dev/sdx with your drive, e.g. /dev/sdb. (Do not append a partition number, so do not use something like /dev/sdb1)

dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress oflag=sync


SSD has only 120 G, but it is sufficient for the environment that uses arch linux and emacs.

Boot in USB memory

Change it to boot usb in BIOS and boot.


  • UEFI can not use thinkpad so BIOS

    Choose according to your hardware.

  • Since it is GPT, it is partition / only

    '/ Only' may be easier.

  • With SSD it's 8G memory so there's no swap

gdisk /dev/sda

1 sda1  BIOS boot partition(EF02) 1007KB
2 sda2 / All remaining

Format and mount with ext4

mkfs.ext4 /dev/sda2
mount /dev/sda2 /mnt

Connect internet with wifi

ip link
rfkill list
rfkill unblock 0
wifi-menu wlp0s29f7u1

Make sure the earliest mirror is selected. Write the closest mirror on the top.

vi /etc/pacman.d/mirrorlist

Install bese bese-devel of arch

pacstrap /mnt base base-devel

Generate fstab

genfstab -U -p /mnt >> /mnt/etc/fstab

Mount and log in as bash login shell

arch-chroot /mnt /bin/bash

Set the host name

echo thinkpad > /etc/hostname

vi /etc/locale.gen

en_US.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8

Next execute


Shell is in English environment

export LANG=C

This neighborhood will be UTF-8

echo LANG=ja_JP.UTF-8 > /etc/locale.conf

Time zone example

ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
ln -sf /usr/share/zoneinfo/US/Pacific /etc/localtime

Time adjustment

hwclock --systohc --utc

Generate kernel image

mkinitcpio -p linux

Generate user

useradd -m -G wheel -s /bin/bash ${USER}

Set password

passwd ${USER}

Set groups and permissions

pacman -S vim

Uncomment comment out following

Defaults env_keep += “ HOME ”
%wheel ALL=(ALL) ALL

Set boot loader

pacman -S grub
grub-install --recheck /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

Prepare drivers and Xorg Gnome

Install drivers that match your environment

lspci | grep VGA
pacman -S xf86-video-intel libva-intel-driver
pacman -S xorg-server xorg-apps

Gnome can be put as small as necessary

pacman -S gnome-backgrounds
pacman -S gnome-control-center
pacman -S gnome-keyring
pacman -S nautilus

Terminal uses urxvt and xterm

sudo pacman -S rxvt-unicode urxvt-perls
sudo pacman -S xterm

Enable graphical login with gdm

pacman -S gdm
systemctl enable gdm.service

Preparing the net environment

pacman -S networkmanager
systemctl disable dhcpcd.service
systemctl enable NetworkManager.service
pacman -S otf-ipafont

Login with ${USER} to arrange home directory

sudo pacman -S xdg-user-dirs
LANG=C xdg-user-dirs-update --force
sudo pacman -S zsh git
sudo pacman -S noto-fonts noto-fonts-cjk chromium

Install yay

mkdir -p ~/src/
cd src/
git clone
cd yay
makepkg -si

Install dropbox and sync

yay -S dropbox
yay -S nautilus-dropbox

Preparing dotfiles

mkdir -p ~/src/
cd src/
git clone
cd dotfiles
make install
make init

# after set-url git
git remote set-url origin

# Below is for posting images of github
cd ~/Pictures
git clone -b image

dconf setting

sudo pacman -S dconf-editor

dconf-editor /org/gnome/desktop/input-sources/xkb-options 'ctrl:swapcaps'
dconf-editor /org/gnome/desktop/interface/gtk-key-theme 'Emacs'
dconf-editor /org/gnome/desktop/interface/enable-animations 'False'
dconf-editor /org/gnome/desktop/interface/gtk-theme 'Arc-Dark'
dconf-editor /org/gnome/desktop/interface/clock-show-date 'True'
dconf-editor /org/gnome/settings-daemon/plugins/color/night-light-temperature '5500'

You can make install from here

Development environment install

Install using pacman

sudo pacman -S firefox firefox-i18n-ja fping xdotool
sudo pacman -S sylpheed emacs curl xsel openssh tmux
sudo pacman -S zsh-completions keychain syncthing
sudo pacman -S powertop gimp unrar gnome-screenshot
sudo pacman -S file-roller xclip atool evince inkscape
sudo pacman -S cifs-utils gvfs gvfs-smb eog lhasa lzop
sudo pacman -S seahorse the_silver_searcher zeal vimiv
sudo pacman -S cups-pdf htop neovim go pkgfile rsync elixir
sudo pacman -S nodejs whois nmap poppler-data ffmpeg 
sudo pacman -S aspell aspell-en httperf asciidoc sbcl
sudo pacman -S gdb hub wmctrl gpaste pkgstats ripgrep
sudo pacman -S linux-docs pwgen gauche screen ipcalc
sudo pacman -S arch-install-scripts ctags parallel
sudo pacman -S pandoc texlive-langjapanese texlive-latexextra
sudo pacman -S shellcheck php cscope typescript packer
sudo pacman -S noto-fonts-cjk arc-gtk-theme jq dnsmasq
sudo pacman -S docker zsh-syntax-highlighting terraform
sudo pacman -S npm llvm llvm-libs lldb hdparm rxvt-unicode 
sudo pacman -S mariadb-clients postgresql-libs tig lsof fzf
sudo pacman -S debootstrap tcpdump pdfgrep sshfs stunnel
sudo pacman -S alsa-utils mlocate traceroute hugo mpv jhead
sudo pacman -S nethogs optipng jpegoptim noto-fonts-emoji
sudo pacman -S debian-archive-keyring tree rclone gnome-tweaks
sudo pacman -S mathjax strace valgrind phantomjs p7zip unace
sudo pacman -S yarn geckodriver w3m neomutt iperf redis
sudo pacman -S highlight lynx elinks mediainfo cpio flameshot
sudo pacman -S oath-toolkit imagemagick peek sshuttle
sudo pacman -S bookworm ruby ruby-rdoc pacman-contrib ncdu
sudo pacman -S sxiv nnn php-fpm nginx adapta-gtk-theme



Activities> Settings> Search

Turn it all off

Activities> Settings> Keyboard> Shortcut

Display System - Activity screen [Alt + Space]


If you make a mistake on the keyboard, erase all with Ctrl-u

Install using yay

yay -S discord
yay -S drone-cli
yay -S git-secrets
yay -S global
yay -S google-cloud-sdk
yay -S goobook-git
yay -S ibus-mozc
yay -S mozc
yay -S nkf
yay -S nodenv
yay -S pencil
yay -S rbenv
yay -S rtags
yay -S ruby-build
yay -S screenkey
yay -S sequeler-git
yay -S yay
Install using pip
mkdir -p ${HOME}/.local
curl -o
python --user
pip install --user --upgrade pip
pip install --user ansible
pip install --user ansible-container
pip install --user ansible-lint
pip install --user autopep8
pip install --user awscli
pip install --user cheat
pip install --user docker-compose
pip install --user faker
pip install --user flake8
pip install --user graph-cli
pip install --user httpie
pip install --user importmagic
pip install --user ipywidgets
pip install --user jedi
pip install --user jupyter
pip install --user jupyterlab
pip install --user jupyterthemes
pip install --user litecli
pip install --user matplotlib
pip install --user mps-youtube
pip install --user mycli
pip install --user neovim
pip install --user pandas
pip install --user pgcli
pip install --user pipenv
pip install --user progressbar2
pip install --user pydoc_utils
pip install --user pyflakes
pip install --user pygments
pip install --user pylint
pip install --user python-language-server
pip install --user ranger-fm
pip install --user redis
pip install --user rope
pip install --user rtv
pip install --user scikit-learn
pip install --user scipy
pip install --user scrapy
pip install --user seaborn
pip install --user selenium
pip install --user speedtest-cli
pip install --user streamlink
pip install --user tldr
pip install --user trash-cli
pip install --user truffleHog
pip install --user virtualenv
pip install --user virtualenvwrapper
pip install --user yapf
pip install --user youtube-dl

Install using golang

mkdir -p ${HOME}/{bin,src}
go get -u -v
go get -u -v
go get -u -v
go get -u -v
go get -u -v
go get -u -v
go get -u -v
go get -u -v

Install using yarn

mkdir -p ${HOME}/.node_modules
yarn global add babel-eslint
yarn global add bash-language-server
yarn global add cloc
yarn global add create-component-app
yarn global add create-nuxt-app
yarn global add create-react-app
yarn global add eslint
yarn global add eslint-cli
yarn global add eslint-plugin-react
yarn global add firebase-tools
yarn global add fx
yarn global add gulp
yarn global add heroku
yarn global add indium
yarn global add javascript-typescript-langserver
yarn global add jshint
yarn global add logo.svg
yarn global add mermaid
yarn global add mermaid.cli
yarn global add netlify-cli
yarn global add ngrok
yarn global add npm
yarn global add prettier
yarn global add tern
yarn global add vscode-css-languageserver-bin
yarn global add vue-cli
yarn global add vue-language-server
yarn global add webpack

rbenv rails

yay -S rbenv
yay -S ruby-build
rbenv install 2.5.1

Create rails app

rbenv global 2.5.1
rbenv rehash
mkdir -p ${HOME}/src/
cd ${HOME}/src/
rbenv local 2.5.1
bundle init
echo "gem 'rails', '~> 5.2.0'" >> Gemfile
bundle install --path vendor/bundle
bundle exec rails new -B --webpack=react --database=mysql --skip-test .
bundle install
bundle exec rails webpacker:install

Install using rust

sudo pacman -S cmake
mkdir -p ${HOME}/.cargo
curl -sSf | sh
cargo install cargo-edit
cargo install cargo-script
cargo install cargo-update
cargo install exa
cargo install fd-find
cargo install hyperfine
cargo install skim
cargo install tztail
cargo install xsv
rustup component add rls-preview rust-analysis rust-src



Terminal uses urxvt


Reduce power consumption to save energy.

sudo pacman -S powertop

Since it becomes invalid when restarting, It will set the following.

sudo powertop --calibrate

sudo vim /etc/systemd/system/powertop.service

[Unit] Description=PowerTOP auto tune

[Service] Type=idle Environment="TERM=dumb" ExecStart=/usr/sbin/powertop --auto-tune


sudo systemctl enable powertop


Succeed if all of this tab is Good

Enable DNS cache

Install dnsmasq

sudo pacman -S dnsmasq



When restarting NetworkManager, dnsmasq is set to be automatically usable.

sudo systemctl restart NetworkManager




Make input sources mozc only for region and language. Because I use a US keyboard Japanese conversion is control + space. Since I am useing emacs, I use mozc with shift + Space. My key setting is based on Kotoeri (closest to emacs key binding).

「Input before conversion」「Shift+Space」「Disable IME」 「Converting」「Shift+Space」「Disable IME」 「Direct input」「Shift+Space」「Enable IME」 「No input character」「Shift+Space」「Disable IME」 Delete other Shift-space entangled shortcuts. 「Converting」cansel Ctrl-g


Once mozc is set up

ln -sfn ~/Dropbox/mozc/.mozc ~/.mozc

And set the mozc setting to dropbox. With this it will not have to be set again.

How to test Makefile

When using Makefile

Test this Makefile using docker

make test

Test this Makefile using docker without Dropbox

make testsimple

When executing manually

1.Build this Dockerfile

docker build -t dotfiles /home/${USER}/src/

2.Run 'docker run' mounting the dropbox directory

docker run -t -i -v /home/${USER}/Dropbox:/home/${USER}/Dropbox:cached --name arch dotfiles /bin/bash

3.Execute the following command in the docker container

cd /home/${USER}/src/
make install
make init