Power to Powershell!
TL; DR
- 파워셸의 힘으로 윈도11을 폼나게 써보자.
Not in this Post
- 파워셸 이용법
- 윈도11 설치하기
What in this Post
- 파워셸을 이용해 주요 소프트웨어 설치
- conda, ohmyposh 설정하기
Powershell을 써야 하는 이유
파워셸(이하 PS)은 원래 윈도의 CLI 도구였으나, 현재는 OS에 상관 없이 범용으로 활용할 수 있는 형태로 진화했다. PS를 반드시 써야만 하는 것은 아니지만, 적어도 윈도를 쓴다면 피할 이유도 없다. 윈도11부터 MS에서 “앱 설치 관리자”라는 녀석을 제공하는데, 이 녀석을 쓰면 macos의 brew
, Ubuntu의 apt
와 같은 스타일로 winget
을 통해 셸을 통해 패키지 관리를 할 수 있다. 다소 아쉬운 대목이 있지만 윈도의 거의 모든 프로그램을 winget
을 통해 관리하면 꽤 편리하다. 윈도에서 셸을 쓰게 된다면, PS를 한번 써보면 어떨까?
이 글은 어쩌다가 윈도11을 다시 깔게 된 나 놈을 위해 남기는 글이다. 훗날 현재 과정을 기억하지 못하게 될 것이기 때문에…
Install
Prelim
윈도11을 갓 설치했다고 하자. 여기에는 “Windows Powershell”이 설치되어 있다. 이 녀석을 계속 쓰지는 않을 것이다. 우선 아래의 두 개 도구를 확인하도록 하자. 설치하는 방법은 구글링을 하면 되겠다.
- Windows Terminal: “명령 프롬프트” 대신 쓸 터미널 앱
- “앱 설치 관리자”:
winget
활성화
둘 모두 MS Store에서 찾아 설치하면 된다. 이왕이면 기본 터미널 앱 자체를 “명령 프롬프트”에서 이 녀석으로 바꾸도록 하자.
설치
이제 터미널로 들어가서 “명령 프롬프트” 혹은 “Windows Powershell” 둘 중 하나에서 파워셸을 깔아보자.
> winget install --id=Microsoft.PowerShell -e
Post-job
설치가 완료된 이후 “설정” 항목에서 몇 가지 후처리를 하면 좋다.
- 기본 프로필을 “Windows Powershell”에서 “Powershell”로 바꾸자.
- 최신 버전에서는 “관리자 권한 실행” 옵션이 있다. 이 녀석도 켜도록 하자.
- “모양” 항목을 찾아서 몇 가지 폰트 설정을 해줘야 한다. 폰트 선택은 취향을 따르면 된다. 내가 쓰는 폰트는 아래와 같다.
Install Apps
이제 필요한 앱들을 명령을 통해 설치하면 된다. json을 만들어서 일괄 설치할 수도 있지만 문제가 생기면 대응이 필요하니 필요한 앱을 일단 하나씩 까는 것도 괜찮다. 아래는 내가 쓰는 앱들이다.
--id=Microsoft.PowerToys -e
winget install --id=Git.Git -e
winget install --id=GitHub.GitHubDesktop -e
winget install --id=Anaconda.Miniconda3 -e
winget install --id=JanDeDobbeleer.OhMyPosh -e
winget install --id=Microsoft.VisualStudioCode -e
winget install --id=Obsidian.Obsidian -e
winget install --id=Posit.Quarto -e winget install
금새 눈치 챘겠지만 install
명령어 뒤에 해당 앱의 id를 넣어 주는 식으로 구성되어 있다. 내게 필요한 앱이 winget
을 통한 설치 경로를 제공하는지 알고 싶다면 여기를 방문해서 검색하면 된다.
설치 파일을 다운받아서 깔았던 거의 대부분의 앱들을 winget
을 통해 설치할 수 있다.
Conda 설정
다른 것들은 설치 이후에 대체로 쓰던대로 쓰면 된다. 별도의 언급이 필요한 두 개가 miniconda와 OhMyPosh이다. 하나씩 살펴보자. 이왕 터미널을 쓸 바에야 anaconda 대신 miniconda3를 쓰는 것이 낫다. 아래에서는 미니콘다를 콘다로 부르도록 하자.
콘다를 설치한 이후 초기화가 필요하다. 설치 이후 터미널을 재시작하고 아래와 같이 입력한다.
> conda init powershell
이 부분은 여기를 참고했다.
콘다가 터미널의 종류 별로 필요한 설정을 생성한다. 화면에 표시되는 정보 중에서 아래 두 줄이 개인 프로필 관련 설정이 담김 폴더이다. 해당 폴더가 제대로 설정되어 있는지 확인하려면 아래를 실행하자.
> test-path $profile
여기서 false
가 뜬다면 프로필을 로드하는 경로에 문제가 생긴 것이다. conda init powershell
을 다시 실행해보자. 자세히 보면(아마도 맨 끝에 두 개), .PS1
을 로드하는 경로 중에 깨진 것이 존재할 것이다. 이 경우 $profle
을 로드하는 경로를 강제로 설정해줘야 한다. 이 문제 해결은 옆의 link의 내용을 참고하면 된다. $profile
의 경로를 강제로 설정한 후 conda init powershell
을 다시 실행하자. 만일 경로에 문제가 없다면 PS로 돌아와서 가상 환경이 잘 설정되어 있는지 확인하면 된다.
해당 위치에 프로필 파일이 여러 개 있어도 된다. 파일 이름이 달라도 .ps1
확장자를 지닐 경우 PS로드 시 읽어온다. conda init powershell
로 설정한 프로필 파일은 profile.ps1
으로 저장된다. 파일을 노트패드 등으로 열어보자. conda 관련 설정 스크립트가 들어 있다. 만일 여전히 가상환경이 잘 보이지 않는다면 profile.ps1의 내용이 제대로 로드되지 않은 것이다. conda init
은 셸 별로 필요한 스크립트를 생성하는 과정이다. 내용을 참고해서 적절한 조치를 취해주면 된다. conda 설치 자체에 문제가 있는 것은 아니다.
Oh-my-posh 설정
winget으로 설치한 이후 필요한 테마를 테스트하면 된다.
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/jandedobbeleer.omp.json" | Invoke-Expression
테마가 잘 먹는지 일단 확인해볼 수 있다. 원하는 테마를 항상 띄우려면 프로필을 하나 생성해주면 된다.
> notepad $profile
파일이 없으면 생성된다. 여기에 필요한 테마를 올려주면 된다. 예를 들어 나는 “powerlevel10k_modern” 테마를 좋아한다. 그러면 해당 프로필 파일에 아래와 같이 넣으면 된다.
> oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/powerlevel10k_modern.omp.json" | Invoke-Expression
만일 $env:POSH_THEMES_PATH
를 쓰지 않고 특정한 디렉토리의 설정 json 파일을 가져오고 싶다면, 해당 디렉토리를 직접 지정하면 된다.
업데이트 시 테마가 초기화되는 문제
$env:POSH_THEMES_PATH
의 위치에 따라서 업데이트 시 테마까지 함께 업데이트가 된다. 만일 해당 테마의 json 파일을 바꾸었다면 업데이트가 되면서 초기화된다. 어차피 테마 파일의 위치는 자유롭게 바꿀 수 있으니까 자신이 커스텀한 테마 파일의 위치를 바꾸고 녀석을 로드하면 된다.
Python 가상 환경이 안보이는 경우
테마에서 conda, python의 가상 환경이 안보일 때가 있다. 테마에서 python을 표현하는 부분에 이 부분이 빠져 있어서 그렇다. 해당 테마의 json
파일에서 python이 표시되는 분을 찾는다. 적당한 부분에 아래 코드를 넣자.
"properties": {
"fetch_virtual_env": true,
"display_mode": "environment",
"home_enabled": true
},
"template": "\ue235 {{ if .Error }}{{ .Error }}{{ else }}{{ if .Venv }}{{ .Venv }} {{ end }}{{ .Full }}{{ end }}",
"trailing_diamond": "\ue0b4 ",
"type": "python"
properties
가 중요한 부분이고 나머지 템플릿은 적당히 바꾸면 된다.
사후 관리
winget
으로 설치한 패키지를 업데이트하고 싶다면
> winget update --all # or
> winget update --all --include-unknown
이렇게 하면 알아서 업데이트가 진행된다.