;; ---------------------------- ;; Podstawowa konfiguracja pakietów i MELPA ;; ---------------------------- (require 'package) (setq package-archives '(("melpa" . "https://melpa.org/packages/") ("gnu" . "https://elpa.gnu.org/packages/"))) (package-initialize) (unless package-archive-contents (package-refresh-contents)) ;; ---------------------------- ;; Instalacja i konfiguracja LSP dla Python ;; ---------------------------- (use-package lsp-mode :ensure t :hook ((python-mode . lsp)) ;; Automatyczne uruchamianie LSP w Python-mode :commands lsp :config ;; Ustawienia LSP (setq lsp-headerline-breadcrumb-enable t) ;; Breadcrumb w nagłówku (setq lsp-completion-provider :capf) ;; Włączenie podpowiedzi capf (setq lsp-enable-snippet t) ;; Włączenie snippetów w podpowiedziach (setq lsp-pyright-auto-import-completions t) ;; Automatyczne podpowiedzi importów (setq lsp-pyright-diagnostic-mode "workspace") ;; Diagnostyka w kontekście projektu (setq lsp-pylsp-plugins-pyflakes-enabled nil) ;; Wyłącz pyflakes (setq lsp-pylsp-plugins-flake8-enabled t) ;; Użyj flake8 zamiast pyflakes (setq lsp-diagnostics-provider :none) ;; Wyłącz diagnostykę LSP na rzecz Flycheck (setq lsp-pylsp-plugins-flake8-ignore ["F405" "F403" "E231" "E303" "E302" "E305" "E501" "D100"]) ;; Ignorowanie błędów w flake8 ;; Ścieżka do interpretera Python ;; Ignorowanie błędów w pylint (setq lsp-pylsp-plugins-pylint-args [ "--disable=wrong-import-order,missing-module-docstring,invalid-name" ]) (setq lsp-pyright-python-executable-cmd "python3")) (use-package lsp-ui :ensure t :hook (lsp-mode . lsp-ui-mode) :config ;; Ustawienia lsp-ui (setq lsp-ui-doc-enable t) ;; Dokumentacja w wyskakującym oknie (setq lsp-ui-doc-position 'at-point) (setq lsp-ui-sideline-enable t) ;; Diagnostyka w wierszu kodu (setq lsp-ui-sideline-show-hover t) ;; Podpowiedzi w wierszu (setq lsp-ui-sideline-show-code-actions t)) ;; Akcje kodu ;; ;; ---------------------------- ;; ;; Flycheck - konfiguracja diagnostyki ;; ;; ---------------------------- (use-package flycheck :ensure t :hook (lsp-mode . flycheck-mode) :config ;; Priorytet diagnostyki LSP (setq flycheck-check-syntax-automatically '(save mode-enabled)) (setq flycheck-highlighting-mode 'lines) (setq flycheck-indication-mode 'right-fringe)) (use-package lsp-ui-flycheck :after (lsp-mode flycheck) :ensure nil) (defun set-flycheck-executables () "Set Flycheck executables to use from the active Python virtual environment." (when (and (boundp 'pyvenv-virtual-env) pyvenv-virtual-env) (let ((flake8-path (concat pyvenv-virtual-env "/Scripts/flake8.exe")) ; Ścieżka na Windows (pylint-path (concat pyvenv-virtual-env "/Scripts/pylint.exe"))) ; Ścieżka na Windows (when (file-executable-p flake8-path) (flycheck-set-checker-executable 'python-flake8 flake8-path)) (when (file-executable-p pylint-path) (flycheck-set-checker-executable 'python-pylint pylint-path))))) (add-hook 'flycheck-before-syntax-check-hook #'set-flycheck-executables) ;; Obsługa wirtualnych środowisk Python (pyvenv) ;; ---------------------------- (use-package pyvenv :ensure t :config ;; Automatyczna aktywacja środowiska venv w katalogu projektu (defun my-auto-activate-venv () "Automatycznie aktywuj venv w bieżącym katalogu projektu." (let ((venv-path (locate-dominating-file default-directory "venv"))) (when venv-path (pyvenv-activate (expand-file-name "venv" venv-path)) (setq lsp-pyright-python-executable-cmd (expand-file-name "bin/python" venv-path))))) (add-hook 'python-mode-hook #'my-auto-activate-venv) ;; Dodanie informacji o aktywnym venv do modeline (defun my-get-current-venv () "Zwraca nazwę aktywnego środowiska wirtualnego." (if (and (boundp 'pyvenv-virtual-env) pyvenv-virtual-env) (propertize (concat "venv: " (file-name-nondirectory (directory-file-name pyvenv-virtual-env))) 'face '(:foreground "green")) "No venv")) (setq-default mode-line-format (append mode-line-format '((:eval (my-get-current-venv)))))) ;; Skróty klawiszowe dla pyvenv (global-set-key (kbd "C-c v a") 'pyvenv-activate) ;; Aktywuj środowisko (global-set-key (kbd "C-c v d") 'pyvenv-deactivate) ;; Dezaktywuj środowisko (global-set-key (kbd "C-c v w") 'pyvenv-workon) ;; Przełącz środowisko (workon) ;; ---------------------------- ;; System podpowiedzi: Company ;; ---------------------------- (use-package company :ensure t :hook (lsp-mode . company-mode) :config (setq company-idle-delay 0.2) ;; Opóźnienie podpowiedzi (setq company-minimum-prefix-length 1) ;; Minimalna długość prefiksu dla podpowiedzi (setq company-selection-wrap-around t)) ;; Zawijanie w menu podpowiedzi ;; ---------------------------- ;; Magit i zarządzanie projektami ;; ---------------------------- (use-package magit :ensure t :config (setq magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1)) (use-package treemacs :ensure t :config (global-set-key (kbd "C-c t") 'treemacs) ;; Skrót do otwierania Treemacs (setq treemacs-position 'right) ;; Pozycja drzewa po prawej stronie (setq treemacs-follow-mode t) ;; Automatyczne śledzenie otwartego pliku (setq treemacs-filewatch-mode t) ;; Automatyczne odświeżanie (setq treemacs-git-mode 'deferred)) ;; Obsługa Git w Treemacs (use-package lsp-treemacs :ensure t :after (lsp-mode treemacs) :config (lsp-treemacs-sync-mode 1)) ;; ---------------------------- ;; Ulepszenia interfejsu: which-key ;; ---------------------------- (use-package which-key :ensure t :config (which-key-mode) (setq which-key-idle-delay 0.5) ;; Opóźnienie wyświetlania podpowiedzi (setq which-key-idle-secondary-delay 0.1)) ;; ---------------------------- ;; Konfiguracja Evil i lidera (leader key) ;; ---------------------------- (use-package evil :ensure t :config (evil-mode 1)) (use-package evil-leader :ensure t :config (global-evil-leader-mode) (evil-leader/set-leader "") (evil-leader/set-key "g g" 'magit-status "f f" 'find-file "b b" 'switch-to-buffer "b m" 'buffer-menu "t t" 'treemacs "t a" 'treemacs-add-project-to-workspace "t r" 'treemacs-remove-project-from-workspace "t c" 'treemacs-copy-file )) ;; ---------------------------- ;; Dodanie obsługi komentowania za pomocą "gc" ;; ---------------------------- (use-package evil-commentary :ensure t :after evil :config (evil-commentary-mode)) ;; ---------------------------- ;; Wygląd: Motyw i minimalistyczny interfejs ;; ---------------------------- (use-package gruvbox-theme :ensure t :config (load-theme 'gruvbox-dark-medium t)) (tool-bar-mode -1) (menu-bar-mode -1) (scroll-bar-mode -1) (setq inhibit-startup-message t) ;; ---------------------------- ;; Formatowanie kodu z Black ;; ---------------------------- (use-package blacken :ensure t :hook (python-mode . blacken-mode) :config (setq blacken-line-length 88)) ;; ---------------------------- ;; Podsumowanie i test ;; ---------------------------- (recentf-mode 1) (setq recentf-max-menu-items 25) ;; Maksymalna liczba plików na liście (global-set-key (kbd "C-c r") 'recentf-open-files) ;; Skrót do ostatnich plików ;; ---------------------------- ;; Other keys ;; ---------------------------- (global-set-key (kbd "C-c e") 'eshell) (global-set-key (kbd "C-c d") 'flymake-show-buffer-diagnostics) (global-set-key (kbd "C-c j s") 'jupyter-run-server-repl) ;; Połącz się z serwerem (global-set-key (kbd "C-c j a") 'jupyter-repl-associate-buffer) ;; Powiąż bufor z REPL (global-set-key (kbd "C-c j b") 'jupyter-eval-buffer) ;; Wykonaj cały bufor (setq initial-scratch-message (concat ";; Aby otworzyć org daj na C-c o\n" ";; Aby otworzyć ostatnie pliki daj na C-c r\n" ";; Aby otworzyć treemacs daj na C-c t \n" ";; Aktywacja środowiska pyenv C-c v a \n" ";; Eshell C-c e \n" ";; Pokaż błędy flymake C-c d \n" "\n" ";;Jupyter \n" ";;Wykonaj Połącz się z serwerem C-c j s \n" ";;Powiazanie bufora REPL C-c j a \n" ";;Wykonaj cały bufor C-c j b \n" ";;Wykkonaj region C-c C-c \n")) (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(package-selected-packages '(evil-commentary yasnippet which-key vterm request pyvenv polymode neotree magit lsp-ui lsp-treemacs jupyter highlight-indentation gruvbox-theme evil-org evil-leader deferred company anaphora))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. )