From d10e1e581f8dc887d4ae7d60c3457d4c00563ab2 Mon Sep 17 00:00:00 2001 From: Kenichi Kamiya Date: Tue, 22 Aug 2023 15:00:27 +0900 Subject: [PATCH] Rewrite registry editing scripts in windows with golang --- .vscode/settings.json | 3 ++ cmd/add_nix_channels/main.go | 2 ++ cmd/deps/main.go | 2 ++ cmd/disable_windows_beeps/main.go | 25 ++++++++++++++ cmd/enable_nix_login_shells/main.go | 2 ++ .../main.go | 33 +++++++++++++++++++ cmd/fmt/main.go | 2 ++ cmd/lint/main.go | 2 ++ cmd/setup_wsl/main.go | 1 - windows/README.md | 14 ++++++++ windows/scripts/disable_beeps.ps1 | 3 -- .../scripts/enable_verbose_context_menu.ps1 | 2 -- 12 files changed, 85 insertions(+), 6 deletions(-) create mode 100644 cmd/disable_windows_beeps/main.go create mode 100644 cmd/enable_windows_verbose_context_menu/main.go delete mode 100644 windows/scripts/disable_beeps.ps1 delete mode 100644 windows/scripts/enable_verbose_context_menu.ps1 diff --git a/.vscode/settings.json b/.vscode/settings.json index 5cd26682..715f1115 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -19,5 +19,8 @@ "nil": { "formatting": { "command": ["nixpkgs-fmt"] } } + }, + "gopls": { + "build.buildFlags": ["-tags=linux,windows,darwin"] } } diff --git a/cmd/add_nix_channels/main.go b/cmd/add_nix_channels/main.go index e65ce064..6eea395f 100644 --- a/cmd/add_nix_channels/main.go +++ b/cmd/add_nix_channels/main.go @@ -1,3 +1,5 @@ +//go:build linux || darwin + package main import ( diff --git a/cmd/deps/main.go b/cmd/deps/main.go index f139bdca..b2ecfba8 100644 --- a/cmd/deps/main.go +++ b/cmd/deps/main.go @@ -1,3 +1,5 @@ +//go:build linux || darwin + package main import ( diff --git a/cmd/disable_windows_beeps/main.go b/cmd/disable_windows_beeps/main.go new file mode 100644 index 00000000..e74420d4 --- /dev/null +++ b/cmd/disable_windows_beeps/main.go @@ -0,0 +1,25 @@ +//go:build windows + +package main + +import ( + "log" + + "golang.org/x/sys/windows/registry" +) + +// # https://github.com/kachick/times_kachick/issues/214 +func main() { + key, err := registry.OpenKey(registry.CURRENT_USER, `Control Panel\Sound`, registry.SET_VALUE) + if err != nil { + log.Fatalf("Failed to open registry key: %+v", err) + } + defer key.Close() + + err = key.SetStringValue("Beep", "no") + if err != nil { + log.Fatalf("Failed to update registry: %+v", err) + } + + log.Println("Completed to disable beeps, you need to restart Windows to activate settings") +} diff --git a/cmd/enable_nix_login_shells/main.go b/cmd/enable_nix_login_shells/main.go index d3bf5df0..d5be05c4 100644 --- a/cmd/enable_nix_login_shells/main.go +++ b/cmd/enable_nix_login_shells/main.go @@ -1,3 +1,5 @@ +//go:build linux || darwin + package main import ( diff --git a/cmd/enable_windows_verbose_context_menu/main.go b/cmd/enable_windows_verbose_context_menu/main.go new file mode 100644 index 00000000..ceec37c9 --- /dev/null +++ b/cmd/enable_windows_verbose_context_menu/main.go @@ -0,0 +1,33 @@ +//go:build windows + +package main + +import ( + "log" + + "golang.org/x/sys/windows/registry" +) + +func main() { + key, err := registry.OpenKey(registry.CURRENT_USER, `Software\Classes\CLSID`, registry.CREATE_SUB_KEY) + if err != nil { + log.Fatalf("Failed to open registry key: %+v", err) + } + defer key.Close() + + newKey, isExists, err := registry.CreateKey(key, `{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32`, registry.SET_VALUE) + if err != nil { + log.Fatalf("Failed to update registry: %+v", err) + } + if isExists { + log.Println("Skipped to create registry key, because it is already exists") + return + } + + err = newKey.SetStringValue("", "") + if err != nil { + log.Fatalf("Failed to set empty default value, may need to fallback manually: %+v", err) + } + + log.Println("Completed to enable classic style of context menu, you need to restart all explorer.exe processes to activate settings") +} diff --git a/cmd/fmt/main.go b/cmd/fmt/main.go index 7421b75f..794676d9 100644 --- a/cmd/fmt/main.go +++ b/cmd/fmt/main.go @@ -1,3 +1,5 @@ +//go:build linux || darwin + package main import ( diff --git a/cmd/lint/main.go b/cmd/lint/main.go index ad9dce0e..33cc9c79 100644 --- a/cmd/lint/main.go +++ b/cmd/lint/main.go @@ -1,3 +1,5 @@ +//go:build linux || darwin + package main import ( diff --git a/cmd/setup_wsl/main.go b/cmd/setup_wsl/main.go index 0fcf2cce..7cbf6705 100644 --- a/cmd/setup_wsl/main.go +++ b/cmd/setup_wsl/main.go @@ -1,5 +1,4 @@ //go:build linux -// +build linux package main diff --git a/windows/README.md b/windows/README.md index 67ede63e..af8395ad 100644 --- a/windows/README.md +++ b/windows/README.md @@ -13,6 +13,20 @@ 1. Exclude the `$PROFILE\Profile.ps1` from Anti Virus detection as Microsoft Defender 1. Enable Bitlocker and backup the restore key +## How to run go scripts in this repo? + +After installed golang with winget + +```console +Administrator in ~ psh +> go run github.com/kachick/dotfiles/cmd/disable_windows_beeps@0ed52e4341624d7216d0b97a9b9bbab3719a8377 +2023/08/22 15:34:18 Completed to disable beeps, you need to restart Windows to activate settings +> go run github.com/kachick/dotfiles/cmd/disable_windows_beeps@0ed52e4341624d7216d0b97a9b9bbab3719a8377 +2023/08/22 15:40:42 Skipped to create registry key, because it is already exists +``` + +Specifying with branch name with the @ref may use cache, then specify commit ref + ## How to install WSL2? winget does not support it, run as follows diff --git a/windows/scripts/disable_beeps.ps1 b/windows/scripts/disable_beeps.ps1 deleted file mode 100644 index d36515da..00000000 --- a/windows/scripts/disable_beeps.ps1 +++ /dev/null @@ -1,3 +0,0 @@ -# https://github.com/kachick/times_kachick/issues/214 -reg add "HKCU\Control Panel\Sound" /v Beep /t REG_SZ /d "no" /f -Write-Output 'Completed, you need to restart Windows' diff --git a/windows/scripts/enable_verbose_context_menu.ps1 b/windows/scripts/enable_verbose_context_menu.ps1 deleted file mode 100644 index d01d25de..00000000 --- a/windows/scripts/enable_verbose_context_menu.ps1 +++ /dev/null @@ -1,2 +0,0 @@ -reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /ve /f -Write-Output 'Completed, you need to close and restart all "explorer" processes'