From 145d10213fa05bd345f393c4d497c3e9a1549aac Mon Sep 17 00:00:00 2001 From: Kenichi Kamiya Date: Fri, 28 Jul 2023 12:33:20 +0900 Subject: [PATCH] Rewrite symlink generator with go --- .gitignore | 1 + Makefile.toml | 7 +++++- README.md | 2 +- cmd/mksym/main.go | 48 ++++++++++++++++++++++++++++++++++++++ scripts/make_symlink.bash | 6 ----- scripts/make_symlinks.bash | 16 ------------- 6 files changed, 56 insertions(+), 24 deletions(-) create mode 100644 cmd/mksym/main.go delete mode 100755 scripts/make_symlink.bash delete mode 100755 scripts/make_symlinks.bash diff --git a/.gitignore b/.gitignore index 7293ae15..2d07165d 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ .config/fish/config.fish dist/ +tmp/ diff --git a/Makefile.toml b/Makefile.toml index 7b77d7df..9beeeee6 100644 --- a/Makefile.toml +++ b/Makefile.toml @@ -35,13 +35,18 @@ args = [ './cmd/print-deps', ] +[tasks.prepare-build] +command = 'mkdir' +args = ['-p', 'dist'] + [tasks.test-race] +dependencies = ['prepare-build'] command = 'go' args = [ 'build', '-v', '-race', '-o', - 'dist/print-deps', + 'dist', './...', ] diff --git a/README.md b/README.md index 928cb1e9..47390e21 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ If you backed to 🚼 from some reasons, See [Wiki](https://github.com/kachick/d 1. Install [nix-community/home-manager](https://github.com/nix-community/home-manager) 1. Set `XDG_*` into current env. `. ./home/.bashrc` 1. Make sure `$XDG_CONFIG_HOME/home-manager/home.nix` does not exists. If not, check the content and remove -1. `./scripts/make_symlinks.bash` +1. Run `go run ./cmd/mksym --linker path-from --linked path-to` if needed 1. `home-manager switch` 1. (optional) Install [jdxcode/rtx](https://github.com/jdxcode/rtx) to manage subdivided versions diff --git a/cmd/mksym/main.go b/cmd/mksym/main.go new file mode 100644 index 00000000..754542bf --- /dev/null +++ b/cmd/mksym/main.go @@ -0,0 +1,48 @@ +package main + +import ( + "flag" + "log" + "os" + "path/filepath" +) + +func main() { + linkerFlag := flag.String("linker", "", "path - from") + linkedFlag := flag.String("linked", "", "path - to") + + flag.Parse() + + linker := *linkerFlag + linked := *linkedFlag + + if linker == "" || linked == "" { + flag.Usage() + log.Fatalln("empty path is given") + } + + linked, err := filepath.Abs(linked) + if err != nil { + log.Fatalln(err) + } + + _, err = os.Stat(linked) + if err != nil { + log.Fatalf("target does not exist, fix `linked` option - %v\n", err) + } + _, err = os.Stat(linker) + if err == nil || !os.IsNotExist(err) { + log.Fatalf("this script does not override existing symlinker files, fix `linker` option or manually remove the file - %v\n", err) + } + + parent := filepath.Dir(linker) + err = os.MkdirAll(parent, 0755) + if err != nil { + log.Fatalln(err) + } + + err = os.Symlink(linked, linker) + if err != nil { + log.Fatalln(err) + } +} diff --git a/scripts/make_symlink.bash b/scripts/make_symlink.bash deleted file mode 100755 index 9b2d15a8..00000000 --- a/scripts/make_symlink.bash +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -set -euxo pipefail - -# https://linuxjm.osdn.jp/info/GNU_coreutils/coreutils-ja_86.html -ln --symbolic --verbose --backup --relative --no-dereference --target-directory="$1" "$2" diff --git a/scripts/make_symlinks.bash b/scripts/make_symlinks.bash deleted file mode 100755 index aaa36a42..00000000 --- a/scripts/make_symlinks.bash +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -set -euxo pipefail - -# https://stackoverflow.com/a/24112741/1212807 -parent_path=$( - cd "$(dirname "${BASH_SOURCE[0]}")" - pwd -P -) - -fd --hidden --type file --max-depth 1 '.' ./home | xargs -I{} "$parent_path/make_symlink.bash" "$HOME" '{}' -# TODO: Update in #142 -mkdir -p "$HOME/.stack" -"$parent_path/make_symlink.bash" "$HOME/.stack" './home/.stack/config.yaml' - -fd --hidden --max-depth 1 '.' ./.config | xargs -I{} "$parent_path/make_symlink.bash" "$XDG_CONFIG_HOME" '{}'