diff --git a/config/bashrc b/.config/bashrc similarity index 100% rename from config/bashrc rename to .config/bashrc diff --git a/config/git/config b/.config/git/config similarity index 100% rename from config/git/config rename to .config/git/config diff --git a/config/git/config.ghe b/.config/git/config.ghe similarity index 100% rename from config/git/config.ghe rename to .config/git/config.ghe diff --git a/config/git/config.github_hpeprod b/.config/git/config.github_hpeprod similarity index 100% rename from config/git/config.github_hpeprod rename to .config/git/config.github_hpeprod diff --git a/config/git/ignore b/.config/git/ignore similarity index 100% rename from config/git/ignore rename to .config/git/ignore diff --git a/config/git/message b/.config/git/message similarity index 100% rename from config/git/message rename to .config/git/message diff --git a/config/inputrc b/.config/inputrc similarity index 100% rename from config/inputrc rename to .config/inputrc diff --git a/.config/mise/config.toml b/.config/mise/config.toml new file mode 100644 index 00000000..feecaa2a --- /dev/null +++ b/.config/mise/config.toml @@ -0,0 +1,122 @@ +redactions = ["MISE_GITHUB_TOKEN"] + +[settings] +color_theme = "catppuccin" +install_before = "7d" + +[bootstrap.packages] +"apt:build-essential" = "latest" +"apt:git" = "latest" +"apt:gnupg" = "latest" +"apt:tar" = "latest" + +[settings.dotfiles] +root = "~/.dotfiles" +default_mode = "symlink" + +[bootstrap.hooks.pre-dotfiles] +run = """ +mkdir -p -m 700 ~/.ssh +mkdir -p ~/{bin,ghe,github,github_hpeprod,work,docker,namespace} +mkdir -p ~/ghe/{hpe,yoshio-sugiyama} +mkdir -p ~/github/{HPE-TA,IMOKURI,others} +mkdir -p ~/github_hpeprod/yoshio-sugiyama_hpeprod +""" + +[dotfiles] +"~/.vimrc" = {} +"~/.config/*" = {} + +[bootstrap.repos] +"~/src/bashmarks" = { url = "https://github.com/huyng/bashmarks.git" } +"~/src/cat-bat" = { url = "https://github.com/catppuccin/bat.git" } + +[tasks.bootstrap] +depends = ["bashrc", "mise-token", "ssh", "bashmarks", "bat-themes"] +run = """ +echo "Bootstrap tasks completed." +""" + +[tasks.bashrc] +run = """ +#!/usr/bin/env bash +if ! grep -q '.config/bashrc' "${HOME}/.bashrc"; then echo -e "\nif [[ -f ~/.config/bashrc ]]; then\n . ~/.config/bashrc\nfi" >> "${HOME}/.bashrc"; fi +""" + +[tasks.mise-token] +run = """ +#!/usr/bin/env bash +if ! grep -q 'export MISE_GITHUB_TOKEN=' "${HOME}/.bashrc"; then echo 'export MISE_GITHUB_TOKEN="{{env.MISE_GITHUB_TOKEN}}"' >> "${HOME}/.bashrc"; fi +""" + +[tasks.ssh] +run = """ +#!/usr/bin/env bash +touch ~/.ssh/config +if ! grep -q 'Include ~/.config/ssh/' "${HOME}/.ssh/config"; then echo -e "\nInclude ~/.config/ssh/*.conf" >> "${HOME}/.ssh/config"; fi +""" + +[tasks.bashmarks] +run = """ +cd ~/src/bashmarks && make install +sed -i 's/^alias l=/# &/' ${HOME}/.bashrc +""" + +[tasks.bat-themes] +run = """ +mkdir -p "$(bat --config-dir)/themes" +cp -f ~/src/cat-bat/themes/*.tmTheme "$(bat --config-dir)/themes" +bat cache --build +""" + +[settings.npm] +package_manager = "bun" + +[tools] +bat = "latest" +bun = "latest" +fd = "latest" +fzf = "latest" +git-lfs = "latest" +github-cli = "latest" +helm = "latest" +helmfile = "latest" +jq = "latest" +kubectl = "latest" +lazygit = "latest" +lua-language-server = "latest" +neovim = "latest" +node = "lts" +packer = "latest" +pnpm = "latest" +python = "3.14" +ripgrep = "latest" +shfmt = "latest" +starship = "latest" +stern = "latest" +stylua = "latest" +terraform = "latest" +uv = "latest" +wrangler = "latest" +yarn = "latest" +yq = "latest" + +# "asdf:richin13/asdf-neovim" = "latest" + +"npm:bash-language-server" = "latest" +"npm:dockerfile-language-server-nodejs" = "latest" +"npm:doctoc" = "latest" +"npm:mcp-hub" = "latest" +"npm:prettier" = "latest" +"npm:tree-sitter-cli" = "latest" +"npm:@astrojs/language-server" = "latest" +"npm:@github/copilot" = "latest" +"npm:@upstash/context7-mcp" = "latest" + +"pipx:ansible-core" = { version = "latest", uvx_args = "--with ansible --with cryptography --with kubernetes --with passlib" } +"pipx:huggingface-hub" = "latest" +"pipx:kaggle" = "latest" +"pipx:markitdown" = "latest" +"pipx:ruff" = "latest" +"pipx:ty" = "latest" +"pipx:wandb" = "latest" diff --git a/config/nvim/after/ftplugin/astro.lua b/.config/nvim/after/ftplugin/astro.lua similarity index 100% rename from config/nvim/after/ftplugin/astro.lua rename to .config/nvim/after/ftplugin/astro.lua diff --git a/config/nvim/after/ftplugin/gitcommit.lua b/.config/nvim/after/ftplugin/gitcommit.lua similarity index 100% rename from config/nvim/after/ftplugin/gitcommit.lua rename to .config/nvim/after/ftplugin/gitcommit.lua diff --git a/config/nvim/after/ftplugin/javascript.lua b/.config/nvim/after/ftplugin/javascript.lua similarity index 100% rename from config/nvim/after/ftplugin/javascript.lua rename to .config/nvim/after/ftplugin/javascript.lua diff --git a/config/nvim/after/ftplugin/json.lua b/.config/nvim/after/ftplugin/json.lua similarity index 100% rename from config/nvim/after/ftplugin/json.lua rename to .config/nvim/after/ftplugin/json.lua diff --git a/config/nvim/after/ftplugin/markdown.lua b/.config/nvim/after/ftplugin/markdown.lua similarity index 100% rename from config/nvim/after/ftplugin/markdown.lua rename to .config/nvim/after/ftplugin/markdown.lua diff --git a/config/nvim/after/ftplugin/toml.lua b/.config/nvim/after/ftplugin/toml.lua similarity index 100% rename from config/nvim/after/ftplugin/toml.lua rename to .config/nvim/after/ftplugin/toml.lua diff --git a/config/nvim/after/ftplugin/yaml.lua b/.config/nvim/after/ftplugin/yaml.lua similarity index 100% rename from config/nvim/after/ftplugin/yaml.lua rename to .config/nvim/after/ftplugin/yaml.lua diff --git a/config/nvim/filetype.lua b/.config/nvim/filetype.lua similarity index 100% rename from config/nvim/filetype.lua rename to .config/nvim/filetype.lua diff --git a/config/nvim/init.lua b/.config/nvim/init.lua similarity index 100% rename from config/nvim/init.lua rename to .config/nvim/init.lua diff --git a/config/nvim/lua/ftplugin/gitcommit.lua b/.config/nvim/lua/ftplugin/gitcommit.lua similarity index 100% rename from config/nvim/lua/ftplugin/gitcommit.lua rename to .config/nvim/lua/ftplugin/gitcommit.lua diff --git a/config/nvim/lua/imokuri/lazy.lua b/.config/nvim/lua/imokuri/lazy.lua similarity index 100% rename from config/nvim/lua/imokuri/lazy.lua rename to .config/nvim/lua/imokuri/lazy.lua diff --git a/config/nvim/lua/imokuri/plugin/completion.lua b/.config/nvim/lua/imokuri/plugin/completion.lua similarity index 100% rename from config/nvim/lua/imokuri/plugin/completion.lua rename to .config/nvim/lua/imokuri/plugin/completion.lua diff --git a/config/nvim/lua/imokuri/plugin/edit.lua b/.config/nvim/lua/imokuri/plugin/edit.lua similarity index 100% rename from config/nvim/lua/imokuri/plugin/edit.lua rename to .config/nvim/lua/imokuri/plugin/edit.lua diff --git a/config/nvim/lua/imokuri/plugin/filetype.lua b/.config/nvim/lua/imokuri/plugin/filetype.lua similarity index 100% rename from config/nvim/lua/imokuri/plugin/filetype.lua rename to .config/nvim/lua/imokuri/plugin/filetype.lua diff --git a/config/nvim/lua/imokuri/plugin/lsp.lua b/.config/nvim/lua/imokuri/plugin/lsp.lua similarity index 100% rename from config/nvim/lua/imokuri/plugin/lsp.lua rename to .config/nvim/lua/imokuri/plugin/lsp.lua diff --git a/config/nvim/lua/imokuri/plugin/snacks.lua b/.config/nvim/lua/imokuri/plugin/snacks.lua similarity index 100% rename from config/nvim/lua/imokuri/plugin/snacks.lua rename to .config/nvim/lua/imokuri/plugin/snacks.lua diff --git a/config/nvim/lua/imokuri/plugin/terminal.lua b/.config/nvim/lua/imokuri/plugin/terminal.lua similarity index 100% rename from config/nvim/lua/imokuri/plugin/terminal.lua rename to .config/nvim/lua/imokuri/plugin/terminal.lua diff --git a/config/nvim/lua/imokuri/plugin/treesitter.lua b/.config/nvim/lua/imokuri/plugin/treesitter.lua similarity index 100% rename from config/nvim/lua/imokuri/plugin/treesitter.lua rename to .config/nvim/lua/imokuri/plugin/treesitter.lua diff --git a/config/nvim/lua/imokuri/plugin/ui.lua b/.config/nvim/lua/imokuri/plugin/ui.lua similarity index 100% rename from config/nvim/lua/imokuri/plugin/ui.lua rename to .config/nvim/lua/imokuri/plugin/ui.lua diff --git a/config/nvim/lua/imokuri/rc/autocmd.lua b/.config/nvim/lua/imokuri/rc/autocmd.lua similarity index 100% rename from config/nvim/lua/imokuri/rc/autocmd.lua rename to .config/nvim/lua/imokuri/rc/autocmd.lua diff --git a/config/nvim/lua/imokuri/rc/mapping.lua b/.config/nvim/lua/imokuri/rc/mapping.lua similarity index 100% rename from config/nvim/lua/imokuri/rc/mapping.lua rename to .config/nvim/lua/imokuri/rc/mapping.lua diff --git a/config/nvim/lua/imokuri/rc/option.lua b/.config/nvim/lua/imokuri/rc/option.lua similarity index 100% rename from config/nvim/lua/imokuri/rc/option.lua rename to .config/nvim/lua/imokuri/rc/option.lua diff --git a/config/nvim/lua/imokuri/util.lua b/.config/nvim/lua/imokuri/util.lua similarity index 100% rename from config/nvim/lua/imokuri/util.lua rename to .config/nvim/lua/imokuri/util.lua diff --git a/config/nvim/snippets/_.snippets b/.config/nvim/snippets/_.snippets similarity index 100% rename from config/nvim/snippets/_.snippets rename to .config/nvim/snippets/_.snippets diff --git a/config/nvim/snippets/codecompanion.snippets b/.config/nvim/snippets/codecompanion.snippets similarity index 100% rename from config/nvim/snippets/codecompanion.snippets rename to .config/nvim/snippets/codecompanion.snippets diff --git a/config/nvim/snippets/make.snippets b/.config/nvim/snippets/make.snippets similarity index 100% rename from config/nvim/snippets/make.snippets rename to .config/nvim/snippets/make.snippets diff --git a/config/nvim/snippets/markdown.snippets b/.config/nvim/snippets/markdown.snippets similarity index 100% rename from config/nvim/snippets/markdown.snippets rename to .config/nvim/snippets/markdown.snippets diff --git a/config/nvim/templates/make/base-commands.make b/.config/nvim/templates/make/base-commands.make similarity index 100% rename from config/nvim/templates/make/base-commands.make rename to .config/nvim/templates/make/base-commands.make diff --git a/config/nvim/templates/make/snip-docker-compose.make b/.config/nvim/templates/make/snip-docker-compose.make similarity index 100% rename from config/nvim/templates/make/snip-docker-compose.make rename to .config/nvim/templates/make/snip-docker-compose.make diff --git a/config/nvim/templates/make/snip-docker.make b/.config/nvim/templates/make/snip-docker.make similarity index 100% rename from config/nvim/templates/make/snip-docker.make rename to .config/nvim/templates/make/snip-docker.make diff --git a/config/nvim/templates/make/snip-helm.make b/.config/nvim/templates/make/snip-helm.make similarity index 100% rename from config/nvim/templates/make/snip-helm.make rename to .config/nvim/templates/make/snip-helm.make diff --git a/config/nvim/templates/markdown/base-post.md b/.config/nvim/templates/markdown/base-post.md similarity index 100% rename from config/nvim/templates/markdown/base-post.md rename to .config/nvim/templates/markdown/base-post.md diff --git a/config/nvim/templates/markdown/base-readme.md b/.config/nvim/templates/markdown/base-readme.md similarity index 100% rename from config/nvim/templates/markdown/base-readme.md rename to .config/nvim/templates/markdown/base-readme.md diff --git a/config/nvim/templates/python/base-kaggle-run.py b/.config/nvim/templates/python/base-kaggle-run.py similarity index 100% rename from config/nvim/templates/python/base-kaggle-run.py rename to .config/nvim/templates/python/base-kaggle-run.py diff --git a/config/nvim/templates/python/snip-arg.py b/.config/nvim/templates/python/snip-arg.py similarity index 100% rename from config/nvim/templates/python/snip-arg.py rename to .config/nvim/templates/python/snip-arg.py diff --git a/config/ssh/github.conf b/.config/ssh/github.conf similarity index 100% rename from config/ssh/github.conf rename to .config/ssh/github.conf diff --git a/config/starship.toml b/.config/starship.toml similarity index 100% rename from config/starship.toml rename to .config/starship.toml diff --git a/config/uv/uv.toml b/.config/uv/uv.toml similarity index 100% rename from config/uv/uv.toml rename to .config/uv/uv.toml diff --git a/.github/workflows/e2e_test.yml b/.github/workflows/e2e_test.yml index 255d5c58..a58dae36 100644 --- a/.github/workflows/e2e_test.yml +++ b/.github/workflows/e2e_test.yml @@ -24,7 +24,7 @@ jobs: - name: Install requirements run: | apt-get update - apt-get install -y curl gcc git gnupg make tar + apt-get install -y curl - uses: actions/checkout@v6 diff --git a/vimrc b/.vimrc similarity index 100% rename from vimrc rename to .vimrc diff --git a/Makefile b/Makefile index c461608a..1f6d1c79 100644 --- a/Makefile +++ b/Makefile @@ -1,98 +1,13 @@ -.PHONY: install -.DEFAULT_GOAL := help - SHELL := /bin/bash +.DEFAULT_GOAL := help -# Define banner style -COL := 120 -BANNER := \033[38;2;101;178;255m -CLEAR_COLOR := \033[0m - -# List up dotfiles -DOTFILES_XDG_CONFIG := $(shell ls config) - -# Define path -DOTPATH := $(HOME)/.dotfiles -BASHMARKS := $(HOME)/src/bashmarks -CAT_BAT := $(HOME)/src/cat-bat - -define banner - @sep="$$(for ((i = 1; i < $(COL); i++)); do printf '='; done)"; \ - printf "\n$(BANNER)%s %s$(CLEAR_COLOR)\n\n" "$(1)" "$${sep:$${#1}}" -endef - -define repo - @if [[ -d "$1" ]]; then \ - cd $1 && git pull && git submodule update --init --recursive; \ - else \ - git clone --depth 1 --recursive https://github.com/$2 "$1"; \ - fi -endef - -list: ## Show file/directory list for deployment - @$(foreach val, $(DOTFILES_XDG_CONFIG), ls -dF config/$(val);) - -install: link shell-setup mise bashmarks bat-theme ## Do installation process - -link: ## Create symlink - $(call banner,Create symlinks...) - @mkdir -p $(HOME)/.local/bin - @mkdir -p $(HOME)/{bin,.config,ghe,github,github_hpeprod,work,docker,namespace} - @mkdir -p $(HOME)/ghe/{hpe,yoshio-sugiyama} - @mkdir -p $(HOME)/github/{HPE-TA,IMOKURI,others} - @mkdir -p $(HOME)/github_hpeprod/yoshio-sugiyama_hpeprod - @$(foreach val, $(DOTFILES_XDG_CONFIG), ln -sfnv $(abspath config/$(val)) $(HOME)/.config/$(val);) - -shell-setup: ## Setup shell and SSH settings - $(call banner,Setup shell and SSH settings...) - @if ! grep -q '.config/bashrc' "$(HOME)/.bashrc"; then \ - echo -e "\nif [[ -f ~/.config/bashrc ]]; then\n . ~/.config/bashrc\nfi" >>"$(HOME)/.bashrc"; \ - fi - @if ! grep -q 'export MISE_GITHUB_TOKEN=' "$(HOME)/.bashrc"; then \ - echo 'export MISE_GITHUB_TOKEN="$(MISE_GITHUB_TOKEN)"' >> "$(HOME)/.bashrc"; \ - fi - @mkdir -p -m 700 ~/.ssh - @touch ~/.ssh/config - @if ! grep -q 'Include ~/.config/ssh/' "$(HOME)/.ssh/config"; then \ - echo -e "\nInclude ~/.config/ssh/*.conf" >>"$(HOME)/.ssh/config"; \ - fi - -mise: ## Setup Mise - $(call banner,Setup Mise...) - @if [[ -f $(HOME)/.local/bin/mise ]]; then \ - mise self-update -y; \ - mise upgrade; \ - mise prune -y; \ - else \ - curl https://mise.run | sh; \ - mise install; \ - fi - -bashmarks: ## Setup Bashmarks - $(call banner,Setup Bashmarks...) - @$(MAKE) update-bashmarks build-bashmarks - -update-bashmarks: ## Update Bashmarks repository - $(call repo,$(BASHMARKS),huyng/bashmarks) - -build-bashmarks: ## Build Bashmarks - @cd $(BASHMARKS) && \ - make install && \ - sed -i 's/^alias l=/# &/' $(HOME)/.bashrc - -bat-theme: ## Setup Bat theme - $(call banner,Setup Bat theme...) - @$(MAKE) update-bat-theme build-bat-theme - -update-bat-theme: ## Update Bat theme repository - $(call repo,$(CAT_BAT),catppuccin/bat) - -build-bat-theme: ## Build Bat theme - @cd $(CAT_BAT) && \ - mkdir -p "$(shell bat --config-dir)/themes" && \ - cp -f themes/*.tmTheme "$(shell bat --config-dir)/themes" && \ - bat cache --build +.PHONY: update +update: ## Bootstrap + mise self-update --yes + mise upgrade + mise prune --yes +.PHONY: help help: ## Show this help @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / \ {printf "\033[38;2;98;209;150m%-20s\033[0m %s\n", $$1, $$2}' \ diff --git a/README.md b/README.md index 2ce37e16..a691e597 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Dotfiles that can be installed by one command - Clone dotfiles repository. - Create symbolic links to dotfile. -- Install Neovim and development tools via Mise. +- Install Neovim and development tools. ## Platforms @@ -21,13 +21,13 @@ Dotfiles that can be installed by one command ## Requirements ```bash -sudo apt install -y curl gcc git gnupg make tar +sudo apt install -y curl ``` Create a GitHub token without any scope from [here](https://github.com/settings/tokens). ```bash -export MISE_GITHUB_TOKEN="your_github_token" +export MISE_GITHUB_TOKEN="" ``` ## Installation @@ -35,3 +35,27 @@ export MISE_GITHUB_TOKEN="your_github_token" ```bash bash -c "$(curl -fsSL https://git.io/imokuri)" ``` + +## Testing + +
+Test in Docker + +```bash +docker run -it --rm ubuntu:24.04 bash + +apt update +apt install curl git -y + +export MISE_GITHUB_TOKEN="" + +git clone https://github.com/IMOKURI/dotfiles.git ~/.dotfiles +cd ~/.dotfiles + +# Optional: Change the branch to test +git checkout + +bash install +``` + +
diff --git a/config/mise/config.toml b/config/mise/config.toml deleted file mode 100644 index 58a6b906..00000000 --- a/config/mise/config.toml +++ /dev/null @@ -1,55 +0,0 @@ -[settings] -color_theme = "catppuccin" -install_before = "7d" - -[settings.npm] -package_manager = "bun" - -[tools] -bat = "latest" -bun = "latest" -fd = "latest" -fzf = "latest" -git-lfs = "latest" -github-cli = "latest" -helm = "latest" -helmfile = "latest" -jq = "latest" -kubectl = "latest" -lazygit = "latest" -lua-language-server = "latest" -neovim = "latest" -node = "lts" -packer = "latest" -pnpm = "latest" -python = "3.14" -ripgrep = "latest" -shfmt = "latest" -starship = "latest" -stern = "latest" -stylua = "latest" -terraform = "latest" -uv = "latest" -wrangler = "latest" -yarn = "latest" -yq = "latest" - -# "asdf:richin13/asdf-neovim" = "latest" - -"npm:bash-language-server" = "latest" -"npm:dockerfile-language-server-nodejs" = "latest" -"npm:doctoc" = "latest" -"npm:mcp-hub" = "latest" -"npm:prettier" = "latest" -"npm:tree-sitter-cli" = "latest" -"npm:@astrojs/language-server" = "latest" -"npm:@github/copilot" = "latest" -"npm:@upstash/context7-mcp" = "latest" - -"pipx:ansible-core" = { version = "latest", uvx_args = "--with ansible --with cryptography --with kubernetes --with passlib" } -"pipx:huggingface-hub" = "latest" -"pipx:kaggle" = "latest" -"pipx:markitdown" = "latest" -"pipx:ruff" = "latest" -"pipx:ty" = "latest" -"pipx:wandb" = "latest" diff --git a/install b/install index 495e5b03..e44d549f 100755 --- a/install +++ b/install @@ -28,16 +28,17 @@ _banner "Download Dotfiles..." if [[ ! -d "${DOTPATH}" ]]; then git clone --recursive https://github.com/IMOKURI/dotfiles.git "${DOTPATH}" + mkdir -p ${HOME}/.config + ln -sfnv "${DOTPATH}/.config/mise" "${HOME}/.config/mise" fi -##### Setup dotfiles ######################################################### +##### Bootstrap ############################################################## -_banner "Setup dotfiles..." +_banner "Install mise..." +curl https://mise.run | sh -pushd "$(pwd)" -cd "${DOTPATH}" -make install -popd +_banner "Bootstrap..." +mise bootstrap --yes ##### Instruct next steps #####################################################