Power to Powershell!

computer-tool
pc-install
윈도11에서 PS 잘 쓰기
Author

JS HUHH

Published

May 11, 2023

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”이 설치되어 있다. 이 녀석을 계속 쓰지는 않을 것이다. 우선 아래의 두 개 도구를 확인하도록 하자. 설치하는 방법은 구글링을 하면 되겠다.

  1. Windows Terminal: “명령 프롬프트” 대신 쓸 터미널 앱
  2. “앱 설치 관리자”: winget 활성화

둘 모두 MS Store에서 찾아 설치하면 된다. 이왕이면 기본 터미널 앱 자체를 “명령 프롬프트”에서 이 녀석으로 바꾸도록 하자.

설치

이제 터미널로 들어가서 “명령 프롬프트” 혹은 “Windows Powershell” 둘 중 하나에서 파워셸을 깔아보자.

> winget install --id=Microsoft.PowerShell  -e

Post-job

설치가 완료된 이후 “설정” 항목에서 몇 가지 후처리를 하면 좋다.

  1. 기본 프로필을 “Windows Powershell”에서 “Powershell”로 바꾸자.
  2. 최신 버전에서는 “관리자 권한 실행” 옵션이 있다. 이 녀석도 켜도록 하자.
  3. “모양” 항목을 찾아서 몇 가지 폰트 설정을 해줘야 한다. 폰트 선택은 취향을 따르면 된다. 내가 쓰는 폰트는 아래와 같다.

Hack Nerd, D2Coding Nerd

Install Apps

이제 필요한 앱들을 명령을 통해 설치하면 된다. json을 만들어서 일괄 설치할 수도 있지만 문제가 생기면 대응이 필요하니 필요한 앱을 일단 하나씩 까는 것도 괜찮다. 아래는 내가 쓰는 앱들이다.

winget install --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

금새 눈치 챘겠지만 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 설정

Home | 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

이렇게 하면 알아서 업데이트가 진행된다.