summaryrefslogtreecommitdiffstatshomepage
path: root/makefile
blob: 38387bf56920e5eb60ff087f02c0d91a6cd0bebe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
VPATH = $(PATH)

ROOT_DIR := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
ZSH_COMP_DIR := $(HOME)/.local/share/zsh/site-functions
BASH_COMP_DIR := $(HOME)/.local/share/bash-completion/completions

ARCH := $(shell uname -m | sed s/aarch64/arm64/ | sed s/x86_64/amd64/ | sed s/armv7l/armv6/)

.PHONY: interactive stow unstow clean gpg wsl

# TODO https://github.com/andrewsardone/dotfiles/blob/master/Makefile
stow: # Install configuration files
	@stow alacritty --defer=/*
	@stow bash
	@stow bat
	@stow git
	@stow gnupg --defer=/*
	@stow lazygit
	@stow mpv
	@stow nvim
	@stow paru
	@stow scripts
	@stow sheldon
	@stow spotify
	@stow ssh
	@stow starship
	@stow streamlink
	@stow sway
	@stow tmux
	@stow zsh
	@if [ -n "$$WSL_DISTRO_NAME" ]; then stow wsl --override=/*; fi

unstow: # Uninstall configuration files
	stow --delete */

clean: # Remove all broken symbolic links from $HOME (recursivly)
	find $(HOME) -type l -not -path '$(HOME)/.cache' -exec sh -c 'for x; do [ -e "$$x" ] || rm -v "$$x"; done' _ {} +

wsl: stow # Run WSL install script
	./wsl/.local/bin/wsl-installer.sh

gpg: # Install GPG keys
	gpg --auto-key-locate keyserver --locate-keys tobyv13@gmail.com
	gpg --import-ownertrust $(HOME)/.gnupg/trustfile.txt

$(ZSH_COMP_DIR):
	mkdir -p $(ZSH_COMP_DIR)

$(BASH_COMP_DIR):
	mkdir -p $(BASH_COMP_DIR)

interactive: fzf rg # Interactive target runner
	@rg '^(\w+):(?:.*#\s*(.*)|.*)$$' 'makefile' --color always --line-number --no-heading -H --smart-case -r '$$1:$$2' \
	| fzf -0 -1 --ansi --tac --multi -d':' --with-nth 3 --header="Select target(s)" \
	--color "hl:-1:underline,hl+:-1:underline:reverse" \
	--preview 'echo; echo {3} "-" {4}; echo; bat --style=auto --color=always {..1} --highlight-line {2}' \
	--preview-window '80%,border-bottom,+{2}+3/3,~3'

cargo rust: $(ZSH_COMP_DIR) $(BASH_COMP_DIR) # Install rust
	curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --no-modify-path
	rustup completions bash >$(BASH_COMP_DIR)/rustup
	rustup completions zsh >$(ZSH_COMP_DIR)/_rustup
	rustup completions bash cargo >$(BASH_COMP_DIR)/cargo
	rustup completions zsh cargo >$(ZSH_COMP_DIR)/_cargo

cargo-quickinstall: cargo # Attempts to install prebuilt binaries, using cargo install as a fallback
	cargo install cargo-quickinstall

starship: cargo-quickinstall $(ZSH_COMP_DIR) $(BASH_COMP_DIR) # Cross shell prompt, written in rust
	cargo quickinstall starship
	starship completions bash >$(BASH_COMP_DIR)/starship
	starship completions zsh >$(ZSH_COMP_DIR)/_starship

sheldon: cargo-quickinstall $(ZSH_COMP_DIR) $(BASH_COMP_DIR) # Cross shell prompt, written in rust
	cargo quickinstall sheldon
	sheldon completions --shell bash >$(BASH_COMP_DIR)/sheldon
	sheldon completions --shell zsh >$(ZSH_COMP_DIR)/_sheldon

bat: cargo-quickinstall $(ZSH_COMP_DIR) $(BASH_COMP_DIR) # Better cat, written in rust
	cargo quickinstall bat --target $(arch())-unknown-$(os())-mus
	curl -sL https://raw.githubusercontent.com/sharkdp/bat/master/assets/completions/bat.bash.in >$(BASH_COMP_DIR)/bat
	curl -sL https://raw.githubusercontent.com/sharkdp/bat/master/assets/completions/bat.zsh.in >$(ZSH_COMP_DIR)/_bat

fd: cargo-quickinstall $(ZSH_COMP_DIR) # Better cat, written in rust
	cargo quickinstall fd-find
	curl -sL https://raw.githubusercontent.com/sharkdp/fd/master/contrib/completion/_fd >$(ZSH_COMP_DIR)/_fd

rg: cargo-quickinstall $(ZSH_COMP_DIR) # Better grep, written in rust
	cargo quickinstall ripgrep
	curl -sL https://raw.githubusercontent.com/BurntSushi/ripgrep/master/complete/_rg >$(ZSH_COMP_DIR)/_rg

chtsh: $(ZSH_COMP_DIR) $(BASH_COMP_DIR) # CLI for https://cht.sh
	curl https://cht.sh/:cht.sh >$(HOME)/.local/bin/cht.sh
	chmod +x $(HOME)/.local/bin/cht.sh
	curl https://cht.sh/:bash_completion >$(BASH_COMP_DIR)/cht
	curl https://cheat.sh/:zsh >$(ZSH_COMP_DIR)/_cht

git-open: # Open git remotes in the browser
	curl -sL "https://raw.githubusercontent.com/paulirish/git-open/master/git-open" >$(HOME)/.local/bin/git-open &&
	chmod +x $(HOME)/.local/bin/git-open

gh: $(ZSH_COMP_DIR) $(BASH_COMP_DIR) # CLI for github API
	$(eval TEMP := $(shell mktemp -d))
	$(eval TAG := $(shell curl -sI https://github.com/cli/cli/releases/latest | grep -Po 'tag\/v?\K(\S+)'))
	curl -sL https://github.com/cli/cli/releases/latest/download/gh_$(TAG)_linux_$(ARCH).tar.gz | tar -C $(TEMP) -xz
	test -x $(TEMP)/gh_$(TAG)_linux_$(ARCH)/bin/gh
	install -Dm 755 $(TEMP)/gh_$(TAG)_linux_$(ARCH)/bin/gh $(HOME)/.local/bin/gh
	rm -rf $(TEMP)
	gh completion --shell bash >$(BASH_COMP_DIR)/gh
	gh completion --shell zsh >$(ZSH_COMP_DIR)/_gh

fzf: # Fuzzy finder, written in go
	$(eval TEMP := $(shell mktemp -d))
	$(eval TAG := $(shell curl -sI https://github.com/junegunn/fzf/releases/latest | grep -Po 'tag\/v?\K(\S+)'))
	curl -sL https://github.com/junegunn/fzf/releases/latest/download/fzf-${TAG}-linux_$(ARCH).tar.gz | tar -C $(TEMP) -xz
	test -x $(TEMP)/fzf
	rm -f $(HOME)/.local/bin/fzf
	install -Dm 755 $(TEMP)/fzf $(HOME)/.local/bin/fzf
	rm -rf $(TEMP)