전체적인 파일 설정은 dotfiles를 참고하기 바란다.

Package Managers

Nix

Nix는 Homebrew와 같은 Package Manager이다. nix라는 언어를 통해서 설정할 수 있으며 간단하게 설치가 가능하다. 또한 순수 함수형 패키지 관리 시스템으로 패키지의 빌드와 설치가 독립적으로 이루어져 다른 패키지에 영향을 주지 않도록 되어있다.

Flake

Flake는 Nix 패키지의 설정을 정의하고 관리할 수 있게 해준다. 쉽게 package.json이라고 생각하면 된다.

Nix-Darwin

Nix-Darwin은 macOS에서 Nix를 사용하여 시스템 설정을 관리할 수 있도록 해주는 프로젝트이다.

Homebrew

Homebrew는 Mac에서 사용하는 Package Manager이다. Nix-homebrew를 통해서 homebrew를 통한 패키지를 관리 할 수 있다.

Usage

  # Packages
  environment.systemPackages =
 [
   pkgs.neovim
   pkgs.mkalias
   pkgs.git
   pkgs.gcc14
   pkgs.nushell
   pkgs.eza
   pkgs.fzf
   pkgs.zoxide
   pkgs.oh-my-posh
   pkgs.stow
   pkgs.lazygit
   pkgs.ripgrep
   pkgs.pnpm
   pkgs.thefuck
   pkgs.tldr
   pkgs.bat
   pkgs.rip2
   pkgs.navi
   pkgs.nodejs_22
   pkgs.pngpaste
   pkgs.gh
 ];
 
  # Homebrew
  homebrew = {
 enable = true;
 brews = [ "posting" ];
 casks = [
   "hammerspoon"
   "ghostty"
   "espanso"
   "appcleaner"
   "devtoys"
   "ollama"
   "google-chrome"
   "slack"
   # "obsidian"
   # "raycast"
 ];
 onActivation.cleanup="zap";
 onActivation.autoUpdate = true;
 onActivation.upgrade = true;
  };

위의 코드와 같이 Nix package를 통해서 패키지를 다운로드 받을 수 있으며 homebrew(nix-homebrew)를 통해서도 패키지를 다운로드 할 수 있다. 또한, 시스템 설정도 할 수 있다. 아래의 코드는 Dock에 대해서 설정한 부분이다.

  system.defaults = {
 dock.autohide = true;
 dock.persistent-apps = [
   "/Applications/Obsidian.app"
   "/Applications/Ghostty.app"
   "/Applications/Arc.app"
   "/Applications/Google Chrome.app"
   "/Applications/Espanso.app"
   "/Applications/Raycast.app"
   "/Applications/DevToys.app"
   "/Applications/Ollama.app"
   "/Applications/AppCleaner.app"
 ];
  };

업데이트는 darwin-rebuild switch --flake $HOME/dotfiles/.config/nix#$USER의 커맨드를 이용하여 업데이트 할 수 있다. 전체적인 설치나 설정은 아래의 유튜브와 dotfiles 통해서 확인하기 바란다.

References

Applications

Ghostty

GPU를 활용한 terminal emulator이며 설정도 간편하고 많은 기능들이 있다. wezterm, iterm, alacritty, kitty 등 많은 terminal emulator가 있지만 ghostty의 캐릭터가 귀엽다.

Obsidian

Open source Markdown editor인 노트 앱이다. backup은 git을 통해서 관리하고 있고 폴더 구조는 P.A.R.A를 사용하고 있다.

TIP

Obsidian.nvim을 통해서 nvim에서 obsidian을 사용할 수 있다.

Espanso

keyword를 통해서 사용자가 정의한 문장으로 변경할 수 있다.

RayCast

Mac Spotlight보다 많은 기능을 제공하는 Application Launcher로 spotlight 기본 기능뿐만 아니라 번역, AI, Window Manage 등 다양한 기능을 사용할 수 있으며, store 기능을 통해 유저들이 만든 다양한 패키지를 사용할 수 있다.

DevToys

개발자에게 필요한 기능들을 종합적으로 가지고 있는 application이다.

Ollama

Local에서 LLM을 실행할 수 있는 도구이다.

App Cleaner

Application을 제거하는 무료 도구로 관련된 파일까지 찾아서 제거해준다.

hammerspoon

lua 언어를 활용하여 macOS의 윈도우, 키맵, 마우스 포인터, 파일 시스템 등을 조작할 수 있는 도구이다. 나는 현재 키맵만 정의해서 사용하고 있는데 키맵만 변경하려고 한다면 karabiner를 추천한다.

posting

터미널에서 사용할 수 있는 API Client 도구이다. nvim에서 활용하고 싶다면 rest.nvim을 확인해 보기 바란다.

Gifski

Gifski는 비디오를 고품질 GIF로 변환하는 도구이다.

Shell tools

shell은 zsh를 사용하고 있다. 아래의 리스트는 내가 자주 사용하는 shell 도구들이다. 관심 있는 도구들을 homebrew 또는 nix를 통해서 쉽게 설치할 수 있다.

  • zsh function : zsh functions documentation.(not tool)
  • neovim : A highly configurable text editor built to enable efficient and productive text editing.
  • git : A distributed version control system for tracking changes in source code
  • gcc14 : The GNU Compiler Collection, a set of compilers for various programming languages
  • nushell : A modern shell that brings a new approach to command line usage with structured data
  • eza : A modern replacement for ls with more features and better defaults
  • fzf : A command-line fuzzy finder that enables quick searching and selection from lists
  • zoxide : A smarter cd command that tracks your most used directories
  • oh-my-posh : A prompt theme engine for any shell that helps to create beautiful command line prompts
  • stow : A symlink manager that helps to manage your dotfiles and configurations
  • lazygit : A simple terminal UI for git commands, making git easier to use
    • aicommit2 : A tool generates automatic commits, and it can use Ollama too
  • ripgrep : A line-oriented search tool that recursively searches your current directory for a regex pattern
  • pnpm : A fast, disk space-efficient package manager for JavaScript
  • thefuck : A tool that corrects your previous console commands
  • tldr : A collection of simplified and community-driven man pages
  • bat : A cat clone with syntax highlighting and Git integration
  • rip2 : A tool for converting ripgrep results into a more user-friendly format
  • navi : An interactive cheatsheet tool for the command line
  • pngpaste : Paste PNG into files on MacOS, much like pbpaste does for text
  • gh : Github CLI.
    • notify : gh ext install meiji163/gh-notify
  • shell color script : A collection of terminal color scripts

Lazyvim

Layzvim은 lazy.nvim모듈을 활용하여 쉽게 패키지를 다운로드 할 수 있고 커스터마이징이 쉬운 vim이다.

Keymaps

Lazyvim은 keymaps.lua를 통해 단축키를 커스터마이징 할 수 있다. 아래는 현재 내가 정의하여 사용하고 있는 키맵이다.

모드동작설명
Normal<C-]>: 명령어 입력을 시뮬레이션ESC 기능 대체
Normal+<C-a>숫자 증가
Normal-<C-x>숫자 감소
Normaldbvbd단어 뒤로 삭제
Normal<C-m><C-i>점프 리스트 이동
Normal<C-a>gg<S-v>G전체 선택
Normalte:tabedit새 탭 열기
Normal<tab>:tabnext<Return>다음 탭으로 이동
Normal<s-tab>:tabprev<Return>이전 탭으로 이동
Normalss:split<Return>수평 분할 창
Normalsv:vsplit<Return>수직 분할 창
Normalsh<C-w>h왼쪽 창으로 이동
Normalsk<C-w>k위쪽 창으로 이동
Normalsl<C-w>l오른쪽 창으로 이동
Normalsj<C-w>j아래쪽 창으로 이동
Normal<C-w><left><C-w><창 크기 왼쪽으로 조정
Normal<C-w><right><C-w>>창 크기 오른쪽으로 조정
Normal<C-w><up><C-w>+창 크기 위쪽으로 조정
Normal<C-w><down><C-w>-창 크기 아래쪽으로 조정
Normal<C-b>^라인 시작으로 이동
Normal<C-h>^라인 시작으로 이동
Normal<C-e>$라인 끝으로 이동
Normal<C-l>$라인 끝으로 이동
Normal<S-l>vg_비주얼 모드 라인 끝까지 선택
Normal<S-h>v_비주얼 모드 라인 시작까지 선택
Normal<leader>xnvim.diagnostic.goto_next()다음 진단으로 이동
Normal<leader>xpvim.diagnostic.goto_prev()이전 진단으로 이동
Normal<C-j><Plug>(VM-Add-Cursor-Down)멀티 커서 아래로 추가
Normal<C-k><Plug>(VM-Add-Cursor-Up)멀티 커서 위로 추가
Cmdline<C-j>pumvisible() ? "<c-n>" : "<C-j>"cmdline에서 아래로 이동 또는 <C-j> 입력
Cmdline<C-k>pumvisible() ? "<c-p>" : "<C-k>"cmdline에서 위로 이동 또는 <C-k> 입력
Cmdline<C-e><C-c>cmdline 종료

위의 키맵 말고도 Lazyvim에서 제공하는 키맵이 있다. 또한 vim의 cmdline에 WhichKey를 입력하면 키에 대한 테이블을 볼 수 있다.

LazyExtras

Lazyvim은 LazyExtra 명령어를 통해서 플러그인을 쉽게 다운로드 받을 수 있다. 다운로드하고 싶은 플러그인에 커서를 두고 x를 누르면 설치할 수 있다.

AI

Avante

Vim에서도 ai api(Cluade, Open AI, Gemini 등)를 연결하여 cursor처럼 사용할 수 있다.

Supermaven

Copilot 대체재로 나쁘지 않은 것 같다. Pro는 30일 동안 무료로 사용 가능하다. LazyExtras를 통해서 쉽게 설치할 수 있다.

Vimium

브라우저에서 제공하는 Vim 기능이다. Browser 특성에 맞게 keymap이 설정되어 있으며 커스터마이징이 가능하다.

unmap <c-u>
unmap <c-d>
unmap <c-o>
unmap <c-m>
unmap J
unmap K

map <c-d> scrollPageDown
map <c-u> scrollPageUp
map <c-o> goBack
map <c-m> goForward
map <c-p> previousTab
map <c-n> nextTab