Initial Colemak Setup

This commit is contained in:
js0ny 2024-10-30 15:54:45 +00:00
parent ffcb1082b4
commit 0f456019d2
15 changed files with 611 additions and 210 deletions

3
.gitignore vendored
View file

@ -16,4 +16,5 @@ test.*
*.tar
*.zip
*.tgz
WindowsTerminal.json
WindowsTerminal.json
PowerToys/

2
.npmrc
View file

@ -1 +1 @@
registry=https://registry.npmmirror.com
# registry=https://registry.npmmirror.com

View file

@ -1,42 +1,24 @@
" Put this in OBSIDIAN_VAULT/.obsidian.vimrc
" Colemak 方向键映射 (hnei
nnoremap k n
nnoremap K N
nnoremap j e
vnoremap j e
nnoremap l i
nnoremap N J
nnoremap E K
nnoremap I L
nnoremap J E
vnoremap J E
nnoremap L I
nnoremap k n
nnoremap K N
nnoremap j e
vnoremap j e
nnoremap l i
nnoremap N J
nnoremap E K
nnoremap I L
nnoremap J E
vnoremap J E
nnoremap L I
" 方向键映射
noremap n <Down> " 向下
noremap e <Up> " 向上
noremap i <Right> " 向右
""" Word wrap cursor movement
nmap j gj
nmap k gk
nmap Y y$ " Use Y to yank to the EOL
set clipboard=unnamed " Sync with System Clipboard
" Word wrap
noremap n gj
noremap e gk
noremap i l
" Similar position to i
noremap l i
noremap L I
" ne[k]st
noremap k n
noremap K N
" [j]ump
noremap j e
noremap J E
" Y to yank to end of line
noremap Y y$
""" Visual mode surrounding
exmap addbold obcommand editor:toogle-bold
exmap additalic obcommand editor:toogle-italic
@ -61,7 +43,7 @@ exmap vsplit obcommand workspace:split-vertical
exmap hsplit obcommand workspace:split-horizontal
map <Space>| :vsplit<CR>
map <Space>- :hsplit<CR>
map <Space>bd
" map <Space>bd
exmap chat obcommand obsidian-custom-frames:open-custom-frames-chatgpt
map <Space>ai :chat<CR>
@ -69,6 +51,9 @@ map <Space>ai :chat<CR>
exmap omnisearch obcommand omnisearch:show-modal
map <Space><Space> :omnisearch<CR>
exmap command-palette obcommand command-palette:open
map <Space>: :command-palette<CR>
""" g-commands
exmap tsource obcommand editor:toggle-source
nnoremap gs :tsource<CR>

View file

@ -11,7 +11,7 @@ Get-ChildItem -Path $DOTFILES\powershell_private -Filter *.ps1 | ForEach-Object
# PowerShell Equivalents #
Set-Alias "curl" "Invoke-WebRequest"
# Set-Alias "curl" "Invoke-WebRequest"
Set-Alias "man" "Get-Help"
Set-Alias "kill" "Stop-Process"
Set-Alias "open" "Invoke-Item" # Use ii instead of open

25
powershell/keymap.ps1 Normal file
View file

@ -0,0 +1,25 @@
# aka PSReadLine
# PSReadLineOptions
Set-PSReadLineOption -EditMode vi # Vi Keybindings
Set-PSReadLineOption -PredictionViewStyle ListView
Set-PSReadLineOption -PredictionSource HistoryAndPlugin
Set-PSReadLineOption -ContinuationPrompt "`e[36m CR > "
# PSReadLineKeyHandlers
## Colemak hnei
Set-PSReadLineKeyHandler -Chord "n" -Function NextHistory -ViMode Command
Set-PSReadLineKeyHandler -Chord "e" -Function PreviousHistory -ViMode Command
Set-PSReadLineKeyHandler -Chord "i" -Function ViForwardChar -ViMode Command
## Similar position to [i] in QWERTY
Set-PSReadLineKeyHandler -Chord "l" -Function ViInsertMode -ViMode Command
Set-PSReadlineKeyHandler -Chord "L" -Function ViInsertAtBegining -ViMode Command
## Ne{[k]s}t
Set-PSReadLineKeyHandler -Chord "k" -Function RepeatSearch -ViMode Command
Set-PSReadLineKeyHandler -Chord "K" -Function RepeatSearchBackward -ViMode Command
## [j]ump
Set-PSReadLineKeyHandler -Chord "j" -Function NextWordEnd -ViMode Command
Set-PSReadLineKeyHandler -Chord "J" -Function ViEndOfGlob -ViMode Command
## Use N to Join
Set-PSReadLineKeyHandler -Chord "N" -Function ViJoinLines -ViMode Command
Set-PSReadLineKeyHandler -Chord "Control+Oem4" -Function ViCommandMode -ViMode Insert # ^[ to Escape
Set-PSReadLineKeyHandler -Chord "Ctrl+a" -Function BeginningOfLine
Set-PSReadLineKeyHandler -Chord "Ctrl+e" -Function EndOfLine

9
powershell/modules.ps1 Normal file
View file

@ -0,0 +1,9 @@
Import-Module -Name Terminal-Icons
Import-Module -Name CompletionPredictor
if ($IsWindows) {
# Chocolatey
$ChocolateyProfile = "$env:ChocolateyInstall\helpers\chocolateyProfile.psm1"
if (Test-Path($ChocolateyProfile)) { Import-Module "$ChocolateyProfile" }
# WinGet
Import-Module -Name Microsoft.WinGet.CommandNotFound #f45873b3-b655-43a6-b217-97c00aa0db58
}

86
powershell/prompt.ps1 Normal file
View file

@ -0,0 +1,86 @@
$promptTime = $true
# $promptWeather = $false
function prompt {
$prompt = "`e[35m"
# Time
if ($promptTime) {
$promptTime = Get-Date -Format HH:mm
$prompt += "`[$promptTime]"
}
# UserInfo
$prompt += " $Env:Username @ $Env:Userdomain"
# Directory
$promptCurrentDirectory = $(PWD).Path
$promptCurrentDirectory = $promptCurrentDirectory.Replace("$HOME", "~")
$prompt += "`e[0m in `e[33m$promptCurrentDirectory "
# Git
if ($(git rev-parse --is-inside-work-tree 2> $null) -eq "true") {
$prompt += "`e[32m`u{e702} $(git branch --show-current)"
}
# Conda
if ( $Env:CONDA_PROMPT_MODIFIER ) {
$promptConda = $Env:CONDA_PROMPT_MODIFIER.Replace("`(","").Replace(")","")
$pythonVersion = $(python --version).Split(" ")[1]
$prompt += " `e[33m`u{e73c} $promptConda $pythonVersion"
}
# Programming Language (by Get-ChildItem)
## Python
if (Test-Path -Path "$PWD\pyproject.toml") {
$pythonVersion = $(python --version).Split(" ")[1]
$prompt += " `e[33m`u{e73c} $pythonVersion"
}
## Node.js
if (Test-Path -Path "$PWD\package.json") {
$nodeVersion = $(node --version)
$prompt += " `e[32m`u{e3a0} $nodeVersion"
# Locked
if (Test-Path -Path "$PWD\yarn.lock" || Test-Path -Path "$PWD\package-lock.json") {
$prompt += "`u{f023}"
}
}
## .NET
### C Sharp
if (Test-Path -Path "$PWD\*.csproj") {
$dotnetVersion = $(dotnet --version)
$prompt += " `e[34m`u{e648} $dotnetVersion"
}
### F Sharp
if (Test-Path -Path "$PWD\*.fsproj") {
$dotnetVersion = $(dotnet --version)
$prompt += " `e[35m`u{e65a} $dotnetVersion"
}
## Rust
if (Test-Path -Path "$PWD\Cargo.toml") {
$rustVersion = $(cargo --version).Split(" ")[1]
$prompt += " `e[31m`u{e7a8} $rustVersion"
}
## Java
if (Test-Path -Path "$PWD\pom.xml" || Test-Path -Path "$PWD\build.gradle") {
$javaVersion = $(java --version).Split(" ")[1]
$prompt += " `e[31m`u{e738} $javaVersion"
}
## Makefile
if (Test-Path -Path "$PWD\Makefile") {
$prompt += " `e[32m`u{e673}"
}
if (Test-Path -Path "$PWD\CMakeLists.txt") {
$prompt += " `e[32m `u{e61d}"
}
# Docker
if (Test-Path -Path "$PWD\Dockerfile" || Test-Path -Path "$PWD\docker-compose.yml") {
$prompt += " `e[33m`u{f21f}"
}
# Weather
# if ( $global:promptWeather ) {
# $prompt += $(Write-WeatherCurrent -City "Edinburgh" -Country "UK" -Unit "metric" -Inline -Apikey $Env:WEATHER_API_KEY)
# }
# Error on last command
## TODO: Seems does not work
if ($?) {
$prompt += "`n`e[32m PS > `e[0m"
} else {
$prompt += "`n`e[31m PS > `e[0m"
}
return $prompt
}

View file

@ -1,32 +1,16 @@
### PSReadLine ###
Set-PSReadLineOption -EditMode vi # Vi Keybindings
Set-PSReadLineOption -PredictionViewStyle ListView
Set-PSReadLineOption -PredictionSource HistoryAndPlugin
Set-PSReadLineOption -ContinuationPrompt "`e[36m CR > "
### Keybindings ###
Set-PSReadLineKeyHandler -Chord "Ctrl+Shift+f" -Function ForwardWord
Set-PSReadLineKeyHandler -Chord "Ctrl+Shift+b" -Function BackwardWord
Set-PSReadLineKeyHandler -Chord "Alt+f" -Function ForwardChar
Set-PSReadLineKeyHandler -Chord "Ctrl+b" -Function BackwardChar
Set-PSReadLineKeyHandler -Chord "Ctrl+p" -Function HistorySearchBackward
Set-PSReadLineKeyHandler -Chord "Ctrl+n" -Function HistorySearchForward
Set-PSReadLineKeyHandler -Chord "Ctrl+a" -Function BeginningOfLine
Set-PSReadLineKeyHandler -Chord "Ctrl+e" -Function EndOfLine
### VARIABLES ###
$EDITOR = "code"
### Navigator ###
# Relative navigation #
# ${function:~} = { Set-Location -Path ~ } cd is better
${function:...} = { Set-Location -Path ..\.. }
${function:....} = { Set-Location -Path ..\..\.. }
${function:.....} = { Set-Location -Path ..\..\..\.. }
${function:......} = { Set-Location -Path ..\..\..\..\.. }
# Absolute navigation #
# Absolute navigation
${function:docs} = { Set-Location -Path ~/Documents }
${function:down} = { Set-Location -Path ~/Downloads }
${function:dt} = { Set-Location -Path ~/Desktop }
@ -37,25 +21,21 @@ ${function:doku} = { Set-Location -Path ~/doku && Get-ChildItem }
### Alias ###
# Shell Equivalents #
Set-Alias "touch" "New-Item"
${function:ll} = { Get-ChildItem -Force }
# Shell Configurations #
${function:shcfg} = { code $PROFILE }
Set-Alias "pwshcfg" "shcfg"
${function:reload} = { . $PROFILE }
${function:pulldots} = { Set-Location -Path $DOTFILES && git pull }
# Editors #
Set-Alias "v" "nvim"
Set-Alias "c" "code"
Set-Alias "gvi" "neovide"
# File Creation #
function mkcd { param ( [string] $dirname) mkdir $dirname && Set-Location $dirname }
function tc { param ( [string] $filename) New-Item $filename && code $filename }
function tv { param ( [string] $filename) New-Item $filename && nvim $filename }
@ -64,13 +44,12 @@ function cdls { param( [string] $dirname) Set-Location $dirname && Get-ChildItem
### Dev ###
# .NET #
${function:csi} = { dotnet repl --default-kernel csharp}
${function:fsi} = { dotnet repl --default-kernel fsharp}
# Python & Conda #
Set-Alias "py" "python"
Set-Alias "ipy" "ipython"
${function:pyact} = { conda activate $args[0] }
${function:pydact} = { conda deactivate }
${function:pylsenvs} = { conda env list }
@ -79,8 +58,3 @@ ${function:pyrmenv} = { conda remove --name $args[0] --all }
# C & C++ #
### Modules ###
Import-Module CompletionPredictor

View file

@ -1,4 +1,6 @@
// Paste this into surfingkeys advanced settings
// or use:
// Load settings from: https://raw.githubusercontent.com/js0ny/dotfiles/refs/heads/master/surfingkeys.js
/** Examples
@ -17,29 +19,90 @@ api.unmap('<ctrl-i>');
*/
// Settings
settings.language = "zh-CN" ;
settings.showModeStatus = true;
// Colemak hjkl (hnei)
// map('h', 'h') // left no change
api.map('n', 'j') // down
api.vmap('n', 'j') // down
api.map('e', 'k') // up
api.vmap('e', 'k') // up
api.map('i', 'l') // right
api.vmap('i', 'l') // right
// DELETED map j -> e : use j to scroll up half page
api.vmap('j', 'e') // end of word
api.map('k', 'n') // search next word (Original Position of n)
api.vmap('k', 'n') // search next word (Original Position of n)
api.map('l', 'i') // insert mode, similar position to original i
api.vmap('l', 'i') // insert mode, similar position to original i
api.map('L', 'I') // insert mode with vim popup, similar pos to I
settings.showModeStatus = false;
// Keymap, reference https://github.com/texiwustion/colemak_config_for_surfingkeys/tree/main
const forward = {
add: function (key) { // 转发即将被 unmap 的键
return api.map(`for${key}`, key)
},
cancel: function (key) { // 删除转发生成的键
api.unmap(`for${key}`)
api.unmap(key)
},
use: function (key) {
return `for${key}`
}
}
const colemak = {
forward: function (key) { // 转发即将被 unmap 的键
api.map(key, `col${key}`)
api.unmap(`col${key}`)
},
use: function (key) {
return `col${key}`
},
map: function (a, b) {
api.map(colemak.use(a), forward.use(b))
}
}
const forwardFactory = {
push: function (mapLists) { // forward original keys
for (let key in mapLists) {
forward.add(mapLists[key])
}
},
map: function (mapLists) {
for (let key in mapLists) {
colemak.map(key, mapLists[key])
}
},
pull: function (mapLists) {
for (let key in mapLists) {
forward.cancel(mapLists[key])
}
for (let key in mapLists) {
colemak.forward(key)
}
}
}
const mapLists = {
/// scroll page
// Arrow
'n': 'j',
'e': 'k',
'i': 'l',
// l <-> i
'l': 'i',
'L': 'I',
// k <-> n
'k': 'n',
'K': 'N',
// j <-> e
'j': 'e',
'J': 'E',
// 缩放
'zu': 'zi',
'zo': 'ze',
'zz': 'zr',
}
forwardFactory.push(mapLists)
api.unmap('t')
forwardFactory.map(mapLists)
// 鼠标点击
api.unmap('gi')
api.unmap('[[')
api.unmap(']]')
api.unmap(';m')
api.unmap(';fs')
api.unmap('O')
api.unmap('C')
forwardFactory.pull(mapLists)
// Prev/Next Page (WASD-like left-hand navigation)
api.map('A', 'E')
api.map('S', 'R')
// map('d', 'd') for scroll down half page
api.map('j', 'u') //scrool up half page
api.map('T', 'C') // Open in new tab
// Search Alias
api.addSearchAlias('f', 'Felo', 'https://felo.ai/search?q=', 's', 'https://duckduckgo.com/ac/?q=', function(response) {
@ -62,42 +125,236 @@ api.addSearchAlias('r', 'Raindrop', 'https://app.raindrop.io/my/0/', 's', 'https
});
// Theme
// Theme, reference to https://github.com/Foldex/surfingkeys-config
api.Hints.style('border: solid 2px #4C566A; color:#A3BE8C; background: initial; background-color: #3B4252;');
api.Hints.style("border: solid 2px #4C566A !important; padding: 1px !important; color: #E5E9F0 !important; background: #3B4252 !important;", "text");
api.Visual.style('marks', 'background-color: #A3BE8C99;');
api.Visual.style('cursor', 'background-color: #88C0D0;');
settings.theme = `
fg: #E5E9F0;
bg: #3B4252;
bg-dark: #2E3440;
border: #4C566A;
main-fg: #88C0D0;
accent-fg: #A3BE8C;
info-fg: #5E81AC;
select: #4C566A;
/* ---------- Generic ---------- */
.sk_theme {
font-family: Input Sans Condensed, Charcoal, sans-serif;
font-size: 10pt;
background: #24272e;
color: #abb2bf;
background: var(--bg);
color: var(--fg);
background-color: var(--bg);
border-color: var(--border);
font-family: var(--font);
font-size: var(--font-size);
font-weight: var(--font-weight);
}
input {
font-family: var(--font);
font-weight: var(--font-weight);
}
.sk_theme tbody {
color: #fff;
color: var(--fg);
}
.sk_theme input {
color: #d0d0d0;
color: var(--fg);
}
/* Hints */
#sk_hints .begin {
color: var(--accent-fg) !important;
}
#sk_tabs .sk_tab {
background: var(--bg-dark);
border: 1px solid var(--border);
}
#sk_tabs .sk_tab_title {
color: var(--fg);
}
#sk_tabs .sk_tab_url {
color: var(--main-fg);
}
#sk_tabs .sk_tab_hint {
background: var(--bg);
border: 1px solid var(--border);
color: var(--accent-fg);
}
.sk_theme #sk_frame {
background: var(--bg);
opacity: 0.2;
color: var(--accent-fg);
}
/* ---------- Omnibar ---------- */
/* Uncomment this and use settings.omnibarPosition = 'bottom' for Pentadactyl/Tridactyl style bottom bar */
/* .sk_theme#sk_omnibar {
width: 100%;
left: 0;
} */
.sk_theme .title {
color: var(--accent-fg);
}
.sk_theme .url {
color: #61afef;
color: var(--main-fg);
}
.sk_theme .annotation {
color: #56b6c2;
color: var(--accent-fg);
}
.sk_theme .omnibar_highlight {
color: #528bff;
color: var(--accent-fg);
}
.sk_theme .omnibar_timestamp {
color: #e5c07b;
color: var(--info-fg);
}
.sk_theme .omnibar_visitcount {
color: #98c379;
color: var(--accent-fg);
}
.sk_theme #sk_omnibarSearchResult ul li:nth-child(odd) {
background: #303030;
background: var(--bg-dark);
}
.sk_theme #sk_omnibarSearchResult ul li.focused {
background: #3e4452;
background: var(--border);
}
#sk_status, #sk_find {
font-size: 20pt;
.sk_theme #sk_omnibarSearchArea {
border-top-color: var(--border);
border-bottom-color: var(--border);
}
.sk_theme #sk_omnibarSearchArea input,
.sk_theme #sk_omnibarSearchArea span {
font-size: var(--font-size);
}
.sk_theme .separator {
color: var(--accent-fg);
}
/* ---------- Popup Notification Banner ---------- */
#sk_banner {
font-family: var(--font);
font-size: var(--font-size);
font-weight: var(--font-weight);
background: var(--bg);
border-color: var(--border);
color: var(--fg);
opacity: 0.9;
}
/* ---------- Popup Keys ---------- */
#sk_keystroke {
background-color: var(--bg);
}
.sk_theme kbd .candidates {
color: var(--info-fg);
}
.sk_theme span.annotation {
color: var(--accent-fg);
}
/* ---------- Popup Translation Bubble ---------- */
#sk_bubble {
background-color: var(--bg) !important;
color: var(--fg) !important;
border-color: var(--border) !important;
}
#sk_bubble * {
color: var(--fg) !important;
}
#sk_bubble div.sk_arrow div:nth-of-type(1) {
border-top-color: var(--border) !important;
border-bottom-color: var(--border) !important;
}
#sk_bubble div.sk_arrow div:nth-of-type(2) {
border-top-color: var(--bg) !important;
border-bottom-color: var(--bg) !important;
}
/* ---------- Search ---------- */
#sk_status,
#sk_find {
font-size: var(--font-size);
border-color: var(--border);
}
.sk_theme kbd {
background: var(--bg-dark);
border-color: var(--border);
box-shadow: none;
color: var(--fg);
}
.sk_theme .feature_name span {
color: var(--main-fg);
}
/* ---------- ACE Editor ---------- */
#sk_editor {
background: var(--bg-dark) !important;
height: 50% !important;
/* Remove this to restore the default editor size */
}
.ace_dialog-bottom {
border-top: 1px solid var(--bg) !important;
}
.ace-chrome .ace_print-margin,
.ace_gutter,
.ace_gutter-cell,
.ace_dialog {
background: var(--bg) !important;
}
.ace-chrome {
color: var(--fg) !important;
}
.ace_gutter,
.ace_dialog {
color: var(--fg) !important;
}
.ace_cursor {
color: var(--fg) !important;
}
.normal-mode .ace_cursor {
background-color: var(--fg) !important;
border: var(--fg) !important;
opacity: 0.7 !important;
}
.ace_marker-layer .ace_selection {
background: var(--select) !important;
}
.ace_editor,
.ace_dialog span,
.ace_dialog input {
font-family: var(--font);
font-size: var(--font-size);
font-weight: var(--font-weight);
}`;
// click `Save` button to make above settings to take effect.</ctrl-i></ctrl-y>

View file

@ -1,29 +1,21 @@
"vim.vimrc.path": "$HOME/.vscode.vimrc", // from vscode settings.json
" Put this in ~/.vscode.vimrc
" And go to vscode vim setting:
"vim.vimrc.path": "$HOME/.vscode.vimrc",
" Colemak 方向键映射 (hnei
nnoremap k n
nnoremap K N
nnoremap j e
vnoremap j e
nnoremap l i
nnoremap N J
nnoremap E K
nnoremap I L
nnoremap J E
vnoremap J E
nnoremap L I
nnoremap k n
nnoremap K N
nnoremap j e
vnoremap j e
nnoremap l i
nnoremap N J
nnoremap E K
nnoremap I L
nnoremap J E
vnoremap J E
nnoremap L I
" 方向键映射
noremap n <Down> " 向下
noremap e <Up> " 向上
noremap i <Right> " 向右
" Word wrap
noremap n gj
noremap e gk
noremap i l
" Similar position to i
noremap l i
noremap L I
" ne[k]st
noremap k n
noremap K N
" [j]ump
noremap j e
noremap J E
" Y to yank to end of line
noremap Y y$

View file

@ -1,11 +1,10 @@
; [wsl2]
; networkingMode=mirrored
; dnsTunneling=true
; firewall=true
; autoProxy=true
[wsl2]
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
; [experimental]
; # requires dnsTunneling but are also OPTIONAL
; bestEffortDnsParsing=true
; useWindowsDnsCache=true
; hostAddressLoopback=true
[experimental]
# requires dnsTunneling but are also OPTIONAL
bestEffortDnsParsing=true
hostAddressLoopback=true

View file

@ -1,60 +1,33 @@
### Variables ###
$DOTFILES = "$HOME\Documents\.dotfiles"
### Load Configs ###
$DOTFILES = "$HOME\.dotfiles"
Get-ChildItem -Path $DOTFILES\powershell -Filter *.ps1 | ForEach-Object {. $_}
Get-ChildItem -Path $DOTFILES\powershell_private -Filter *.ps1 | ForEach-Object {. $_}
### Aliases ###
# Shell Equivalents #
Set-Alias "open" "Invoke-Item" # Use ii instead of explorer.exe
Set-Alias "grep" "Select-String"
${function:which} = { (Get-Command $args[0]).Path }
# Shell Configurations #
${function:shcfg} = { code $PROFILE }
${function:reload} = { . $PROFILE }
${function:reload} = { & $PROFILE }
${function:pulldots} = { Set-Location -Path $DOTFILES && git pull }
Set-Alias "pwshcfg" "shcfg"
# C & C++ #
# Set-Alias "cl" "clang"
# Set-Alias "clpp" "clang++"
# ${function:clang} = { clang -std=c99 $args[0] }
# ${function:clang++} = { clang -std=c++2b $args[0] }
# Python & Conda #
Set-Alias "python3" "python"
Set-Alias "pip3" "pip"
# Git #
# Set-Alias "g" "git"
# Set-Alias "ginit" "git init"
# Set-Alias "ga" "git add"
# Set-Alias "gaa" "git add --all"
# Set-Alias "gc" "git commit --message"
# Set-Alias "gca" "git commit --all --message"
# Set-Alias "gcl" "git clone"
# Set-Alias "gclnh" "git clone --depth 1"
# Set-Alias "gs" "git status"
# Set-Alias "gpl" "git pull"
# Set-Alias "gps" "git push"
# WSL #
${function:wsl1} = {wsl.exe --distribution Debian}
${function:wsl2} = {wsl.exe --distribution Ubuntu-22.04}
New-PSDrive -Name WSL -PSProvider FileSystem -Root \\wsl.localhost\Ubuntu-22.04
# Search Software #
function Get-AppPackageListRemote {
function Find-AppPackageListRemote {
param(
[string]$Name
)
@ -68,16 +41,14 @@ function Get-AppPackageListRemote {
Write-Host "=== choco ==="
choco search $Name
}
Set-Alias "pkgsearch" "Get-AppPackageListRemote"
function Get-AppPackageListLocal {
winget list
choco list
scoop list
}
# Toggle Theme #
# Toggle Theme #
function Set-SystemTheme {
$regPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize"
$currentMode = Get-ItemProperty -Path $regPath -Name "AppsUseLightTheme"
@ -90,27 +61,14 @@ function Set-SystemTheme {
Write-Host "已切换到浅色模式"
}
}
Set-Alias "theme" "Set-SystemTheme"
# Miscs #
### Modules ###
Import-Module -Name Microsoft.WinGet.CommandNotFound #f45873b3-b655-43a6-b217-97c00aa0db58
Import-Module CompletionPredictor
# Import-Module syntax-highlighting # Buggy
### Misc ###
${function:qwen} = "ollama run qwen2.5:14b"
# ## Oh-My-Posh ##
# Oh-My-Posh init pwsh --config "$HOME\AppData\Local\Programs\oh-my-posh\themes\tokyonight_storm.omp.json" | Invoke-Expression
## Conda ##
#region conda initialize
# !! Contents within this block are managed by 'conda init' !!
If (Test-Path "$HOME\miniconda3\Scripts\conda.exe") {
@ -134,12 +92,6 @@ if (-not ($__lastStartup -eq $_currentDate)) {
# 记录当前日期到日志文件
$_currentDate | Out-File -FilePath $SystemlogFilePath -Append
}
Remove-Variable SystemlogFilePath
Remove-Variable __lastStartup
Remove-Variable _currentDate
## Chocolatey ##
$ChocolateyProfile = "$env:ChocolateyInstall\helpers\chocolateyProfile.psm1"
if (Test-Path($ChocolateyProfile)) { Import-Module "$ChocolateyProfile" }
Remove-Variable _currentDate

View file

@ -1,8 +1 @@
# Configs for Windows
## Navigator
- [WSL Config](./.wslconfig)
- [Windows Terminal Config](./WindowsTerminal.json)
- [PowerShell Config](./Microsoft.PowerShell_profile.ps1)
- [Neovide](./neovide.toml)
# Windows dotfiles

128
win/setup_win.ps1 Normal file
View file

@ -0,0 +1,128 @@
#!C:\Program Files\WindowsApps\Microsoft.PowerShell_7.4.6.0_x64__8wekyb3d8bbwe\pwsh.EXE
# Run with PowerShell 7
# Use PowerShell as Administrator
winget install -e --id Git.Git
git clone https://github.com/js0ny/dotfiles.git ~\.dotfiles
Set-Location -Path ~\.dotfiles
Remove-Item -Force $PROFILE
$DOTFILES = "$HOME\.dotfiles"
New-Item -ItemType SymbolicLink -Path $PROFILE -Target "$DOTFILES\win\Microsoft.PowerShell_profile.ps1"
. $PROFILE
# Install Scoop
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
# Install Chocolatey
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
# Set Dotfiles
New-Item -ItemType SymbolicLink -Path "~\.condarc" -Target "$DOTFILES\.condarc"
New-Item -ItemType SymbolicLink -Path "~\.gitconfig" -Target "$DOTFILES\.gitconfig"
New-Item -ItemType SymbolicLink -Path "~\.haskline" -Target "$DOTFILES\.haskline"
New-Item -ItemType SymbolicLink -Path "~\.ideavimrc" -Target "$DOTFILES\.ideavimrc"
New-Item -ItemType SymbolicLink -Path "~\.markdownlint.json" -Target "$DOTFILES\.markdownlint.json"
New-Item -ItemType SymbolicLink -Path "~\.npmrc" -Target "$DOTFILES\.npmrc"
New-Item -ItemType SymbolicLink -Path "~\.pip.conf" -Target "$DOTFILES\.pip.conf"
New-Item -ItemType SymbolicLink -Path "~\.wslconfig" -Target "$DOTFILES\win\.wslconfig"
New-Item -ItemType SymbolicLink -Path "~\.vscode.vimrc" -Target "$DOTFILES\vscode\vscode.vimrc"
Get-ChildItem -Force -Filter .* | ForEach-Object { $_.Attributes += "Hidden" } # Hide dotfiles
# Windows Terminal
if (Get-Command wt -ErrorAction SilentlyContinue) {
Write-Output "Windows Terminal (wt) installed"
} else {
winget install -e --id Microsoft.WindowsTerminal
}
# Uninstall Windows Apps
Get-AppxPackage *solit* | Remove-AppxPackage # 纸牌
Get-AppxPackage *sound* | Remove-AppxPackage # 錄音機
Get-AppxPackage *camera* | Remove-AppxPackage # 相機
Get-AppxPackage *weather* | Remove-AppxPackage # 天氣
Get-AppxPackage *Map* | Remove-AppxPackage # 地圖
# Get-AppxPackage *clipchamp* | Remove-AppxPackage # 其實這個還行
# Added Packages
scoop add bucket nerd-fonts
scoop add bucket extras
# CLI Tools
winget install -e --id GnuWin32.Grep
winget install -e --id GnuWin32.Make
winget install -e --id GnuWin32.Which
winget install -e --id junegunn.fzf
winget install -e --id BurntSushi.ripgrep.MSVC
winget install -e --id JernejSimoncic.Wget
winget install -e --id GNU.Wget2
# File Management
winget install -e --id voidtools.Everything
winget install -e --id 7zip.7zip
winget install -e --id Bandisoft.Bandizip
winget install -e --id JohnMacFarlane.Pandoc
winget install -e --id SumatraPDF.SumatraPDF
winget install -e --id Google.GoogleDrive
# System Enhancements
winget install -e --id Rem0o.FanControl
winget install -e --id Microsoft.PowerToys
winget install -e --id Guru3D.Afterburner
winget install -e --id Yuanli.uTools
winget install -e --id GeekUninstaller.GeekUninstaller
# winget install -e --id Flow-Launcher.Flow-Launcher
winget install -e --id AutoHotkey.AutoHotkey
winget install -e --id Mactype.Mactype
# winget install -e --id Nilesoft.Shell
# scoop install umi-ocr-paddle
# Editor
winget install -e --id vim.vim
winget install -e --id Neovim.Neovim
winget install -e --id VSCodium.VSCodium
winget install -e --id Microsoft.VisualStudioCode
winget install -e --id Neovide.Neovide
# Security
winget install -e --id Bitwarden.Bitwarden
# PKM
winget install -e --id Obsidian.Obsidian
winget install -e --id B3log.SiYuan
winget install -e --id appmakes.Typora
winget install -e --id DigitalScholar.Zotero
winget install -e --id Anki.Anki
winget install -e --id Notion.Notion
# Browser
winget install -e --id TheBrowserCompany.Arc
winget install -e --id Mozilla.Firefox.Nightly
# Programming Languages
winget install -e --id Python.Python.3.12
winget install -e --id Anaconda.Miniconda3
winget install -e --id OpenJS.NodeJS
winget install -e --id Rustlang.Rustup
winget install -e --id Microsoft.DotNet.SDK.8
# Dev/IDE
winget install -e --id Docker.DockerDesktop
winget install -e --id JesseDuffield.lazygit
# Gaming
winget install -e --id Valve.Steam
# IME
winget install -e --id Rime.Weasel
# Social
winget install -e --id 9N97ZCKPD60Q --source msstore # Unigram (Telegram client)
winget install -e --id Tencent.QQ.NT
winget install -e --id Tencent.WeChat
# Others
winget install -e --id Appest.TickTick
# Fonts
scoop install FiraCode-NF
scoop install CascadiaCode-NF
scoop install LXGWWenKai # 霞鹜文楷
scoop install LXGWWenKaiMono # 霞鹜文楷Mono

0
win/setup_win_full.ps1 Normal file
View file