From ed6632c47a1bb0cc6b9cdc0d24ed96447e23db2f Mon Sep 17 00:00:00 2001 From: pali112 Date: Sun, 12 Jan 2025 16:31:09 +0100 Subject: [PATCH] Emacs init --- copyInit.txt | 240 +++++++++++++++++++++++++++ init.el | 449 ++++++++++++++++++++++++++++++++++++++++++++++++++ init.el~ | 452 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1141 insertions(+) create mode 100644 copyInit.txt create mode 100644 init.el create mode 100644 init.el~ diff --git a/copyInit.txt b/copyInit.txt new file mode 100644 index 0000000..6864a0d --- /dev/null +++ b/copyInit.txt @@ -0,0 +1,240 @@ +;; ---------------------------- +;; 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-pylsp-plugins-flake8-ignore ["F405" "F403" "E231" "E303" "E302" "E305" "E501"]) ;; Ignorowanie błędów w flake8 + + ;; Ścieżka do interpretera Python + (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) + + +;; 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. + ) diff --git a/init.el b/init.el new file mode 100644 index 0000000..795054f --- /dev/null +++ b/init.el @@ -0,0 +1,449 @@ +;; ---------------------------- +;; Podstawowa konfiguracja pakietów i MELPA +;; ---------------------------- + +(require 'package) + +;; Dodaj repozytoria +(setq package-archives '(("melpa" . "https://melpa.org/packages/") + ("gnu" . "https://elpa.gnu.org/packages/") + ("org" . "https://orgmode.org/elpa/"))) + +;; Inicjalizuj system pakietów +(package-initialize) + +;; Odśwież listę pakietów, jeśli jest pusta +(unless package-archive-contents + (package-refresh-contents)) + + +;; Funkcja do instalowania pakietów +(defun ensure-package-installed (&rest packages) + "Ensure that the given PACKAGES are installed. +Missing packages are automatically installed." + (dolist (package packages) + (unless (package-installed-p package) + (package-install package)))) + + + + + +;; Instalacja wymaganych pakietów +(ensure-package-installed + 'use-package + 'magit + 'blacken + 'lsp-mode + 'lsp-ui + 'flycheck + 'company + 'jupyter + 'treemacs + 'winum + 'lsp-treemacs) + +;; Wczytaj i skonfiguruj `use-package` +(unless (package-installed-p 'use-package) + (package-install 'use-package)) +(require 'use-package) +(setq use-package-always-ensure t) + + + +;; Przełączanie się między oknami +(use-package winum + :ensure t + :config + (winum-mode)) + + + + + +;; ---------------------------- +;; Konfiguracja org-mode +;; ---------------------------- + +;; Definicja ścieżek dla Windows i Linux +(setq my-org-agenda-windows-path "C:/Users/TwojaNazwaUżytkownika/Documents/org/") +(setq my-org-agenda-linux-path "~/Nextcloud/todo/") + +;; Definicja ścieżek do pliku todo.org +(setq my-todo-file-windows "C:/Users/TwojaNazwaUżytkownika/Documents/org/todo.org") +(setq my-todo-file-linux "~/Nextcloud/todo/todo.org") + +;; Funkcja ustawiająca odpowiednią ścieżkę na podstawie systemu +(defun my-set-org-agenda-files () + "Ustaw pliki agendy Org w zależności od systemu operacyjnego." + (setq org-agenda-files + (directory-files-recursively + (if (eq system-type 'windows-nt) + my-org-agenda-windows-path + my-org-agenda-linux-path) + "\\.org$"))) + +;; Wywołaj funkcję przy starcie Emacs +(my-set-org-agenda-files) + +;; Funkcja otwierająca plik todo.org +(defun my-open-todo-file () + "Otwórz plik todo.org w zależności od systemu operacyjnego." + (interactive) + (let ((todo-file (if (eq system-type 'windows-nt) + my-todo-file-windows + my-todo-file-linux))) + (if (file-exists-p todo-file) + (find-file todo-file) + (message "Plik todo.org nie istnieje: %s" todo-file)))) + +;; Włącz org-mode automatycznie dla plików .org +(add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode)) + +;; Włącz folding w org-mode (skróty klawiszowe) +(setq org-startup-folded t) ;; Start with folded headlines +(setq org-hide-leading-stars t) ;; Ukrywanie gwiazdek poza pierwszym poziomem +(setq org-ellipsis "⤵") ;; Znak na końcu zwiniętych sekcji + + +;; Ustawienia klawisza TAB w org-mode przy użyciu Evil +(add-hook 'org-mode-hook + (lambda () + (evil-define-key 'normal org-mode-map (kbd "TAB") 'org-cycle) + (evil-define-key 'normal org-mode-map (kbd "S-TAB") 'org-shifttab))) + + +;; Podświetlanie składni i elementów w org-mode +(setq org-fontify-whole-heading-line t) ;; Podświetlaj cały nagłówek +(setq org-fontify-done-headline t) ;; Podświetlaj ukończone nagłówki +(setq org-fontify-quote-and-verse-blocks t) ;; Podświetlaj bloki cytatów i wierszy + +;; Automatyczne podświetlanie kodu w blokach źródłowych +(setq org-src-fontify-natively t) +(setq org-src-tab-acts-natively t) + +;; Wsparcie dla hierarchicznego folding w org-mode +(setq org-cycle-separator-lines 2) ;; Próg zwijania między sekcjami + +;; Wygląd i czytelność w org-mode +(setq org-hide-emphasis-markers t) ;; Ukryj znaki formatowania (*bold*, /italic/) +(setq org-pretty-entities t) ;; Wyświetl symbole matematyczne jako unicode +(setq org-highlight-latex-and-related '(latex script entities)) ;; Podświetlaj LaTeX + +;; Współpraca z tytułami i nagłówkami +(setq org-startup-indented t) ;; Włącz automatyczne wcięcia +(setq org-indent-mode-turns-on-hiding-stars t) ;; Ukryj gwiazdki w nagłówkach + +;; Funkcje dodatkowe +(setq org-log-done 'time) ;; Zapisuj czas oznaczenia zadania jako DONE +(setq org-return-follows-link t) ;; ENTER podąża za linkami + + + +;; ---------------------------- +;; 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-diagnostics-provider :none) ;; Wyłącz diagnostykę LSP na rzecz Flycheck + (setq lsp-pylsp-plugins-flake8-enabled nil) ;; Użyj flake8 zamiast pyflakes + (setq lsp-pylsp-plugins-ruff-enabled t) ;; Użyj flake8 zamiast pyflakes + + + ;; Ścieżka do interpretera Python + (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 + (if (eq system-type 'windows-nt) + "/Scripts/flake8.exe" ; Ścieżka na Windows + "/bin/flake8"))) ; Ścieżka na Linux/Mac + (pylint-path (concat pyvenv-virtual-env + (if (eq system-type 'windows-nt) + "/Scripts/pylint.exe" ; Ścieżka na Windows + "/bin/pylint")))) ; Ścieżka na Linux/Mac + (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 + "o o" 'my-open-todo-file + "o f" 'org-overview + "o l" 'org-agenda-list + "o i" 'org-clock-in + "o s" 'org-clock-out + "o r" 'org-clock-report + "g a" 'magit-remote-add + "f f" 'find-file + "b b" 'switch-to-buffer + "b m" 'buffer-menu + "b w" 'buffer-menu-open + "t t" 'treemacs + "t a" 'treemacs-add-project-to-workspace + "t r" 'treemacs-remove-project-from-workspace + "t c" 'treemacs-copy-file + "t f" 'treemacs-create-file + "t m" 'treemacs-rename-file + "l l" 'toggle-truncate-lines + "l n" 'display-line-numbers-mode + "j s" 'jupyter-run-server-repl + "j a" 'jupyter-repl-associate-buffer + "e e" 'eshell + "n n" 'narrow-to-region + "n w" 'widen + "a" 'mark-whole-buffer + "TAB" (lambda () (interactive) (switch-to-buffer (other-buffer))) + "1" 'winum-select-window-1 + "2" 'winum-select-window-2 + "3" 'winum-select-window-3 + "4" 'winum-select-window-4 + "5" 'winum-select-window-5)) + +(which-key-add-key-based-replacements + " g" "Magit" + " n" "Narrow" + " f" "Files" + " b" "Buffers" + " t" "Treemacs" + " l" "Lines" + " j" "Jupyter" + " e" "Eshell" + " o" "Org" + ) + + +;; Utwórz mapę klawiszy dla "SPC" +(define-prefix-command 'my-space-prefix) +(define-key evil-normal-state-map (kbd "SPC") 'my-space-prefix) + +;; Dodaj mapowanie "SPC 0" do Treemacs +(define-key my-space-prefix (kbd "0") 'my-treemacs-select-or-open) + +;; Funkcja, która przełącza się na okno Treemacs lub je otwiera +(defun my-treemacs-select-or-open () + "Przełącz się na okno Treemacs lub otwórz Treemacs, jeśli nie jest aktywne." + (interactive) + (if (treemacs-get-local-window) + (treemacs-select-window) + (treemacs))) + +;; ---------------------------- +;; 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 75)) + + +;; ---------------------------- +;; 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") 'flycheck-list-errors) + +(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 SPC o 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 flycheck 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. + ) +(put 'narrow-to-region 'disabled nil) diff --git a/init.el~ b/init.el~ new file mode 100644 index 0000000..9170644 --- /dev/null +++ b/init.el~ @@ -0,0 +1,452 @@ +;; ---------------------------- +;; Podstawowa konfiguracja pakietów i MELPA +;; ---------------------------- + +(require 'package) + +;; Dodaj repozytoria +(setq package-archives '(("melpa" . "https://melpa.org/packages/") + ("gnu" . "https://elpa.gnu.org/packages/") + ("org" . "https://orgmode.org/elpa/"))) + +;; Inicjalizuj system pakietów +(package-initialize) + +;; Odśwież listę pakietów, jeśli jest pusta +(unless package-archive-contents + (package-refresh-contents)) + + +;; Funkcja do instalowania pakietów +(defun ensure-package-installed (&rest packages) + "Ensure that the given PACKAGES are installed. +Missing packages are automatically installed." + (dolist (package packages) + (unless (package-installed-p package) + (package-install package)))) + + + + + +;; Instalacja wymaganych pakietów +(ensure-package-installed + 'use-package + 'magit + 'blacken + 'lsp-mode + 'lsp-ui + 'flycheck + 'company + 'jupyter + 'treemacs + 'winum + 'lsp-treemacs) + +;; Wczytaj i skonfiguruj `use-package` +(unless (package-installed-p 'use-package) + (package-install 'use-package)) +(require 'use-package) +(setq use-package-always-ensure t) + + + +;; Przełączanie się między oknami +(use-package winum + :ensure t + :config + (winum-mode)) + + + + + +;; ---------------------------- +;; Konfiguracja org-mode +;; ---------------------------- + +;; Definicja ścieżek dla Windows i Linux +(setq my-org-agenda-windows-path "C:/Users/TwojaNazwaUżytkownika/Documents/org/") +(setq my-org-agenda-linux-path "~/Nextcloud/todo/") + +;; Definicja ścieżek do pliku todo.org +(setq my-todo-file-windows "C:/Users/TwojaNazwaUżytkownika/Documents/org/todo.org") +(setq my-todo-file-linux "~/Nextcloud/todo/todo.org") + +;; Funkcja ustawiająca odpowiednią ścieżkę na podstawie systemu +(defun my-set-org-agenda-files () + "Ustaw pliki agendy Org w zależności od systemu operacyjnego." + (setq org-agenda-files + (directory-files-recursively + (if (eq system-type 'windows-nt) + my-org-agenda-windows-path + my-org-agenda-linux-path) + "\\.org$"))) + +;; Wywołaj funkcję przy starcie Emacs +(my-set-org-agenda-files) + +;; Funkcja otwierająca plik todo.org +(defun my-open-todo-file () + "Otwórz plik todo.org w zależności od systemu operacyjnego." + (interactive) + (let ((todo-file (if (eq system-type 'windows-nt) + my-todo-file-windows + my-todo-file-linux))) + (if (file-exists-p todo-file) + (find-file todo-file) + (message "Plik todo.org nie istnieje: %s" todo-file)))) + +;; Włącz org-mode automatycznie dla plików .org +(add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode)) + +;; Włącz folding w org-mode (skróty klawiszowe) +(setq org-startup-folded t) ;; Start with folded headlines +(setq org-hide-leading-stars t) ;; Ukrywanie gwiazdek poza pierwszym poziomem +(setq org-ellipsis "⤵") ;; Znak na końcu zwiniętych sekcji + + +;; Ustawienia klawisza TAB w org-mode przy użyciu Evil +(add-hook 'org-mode-hook + (lambda () + (evil-define-key 'normal org-mode-map (kbd "TAB") 'org-cycle) + (evil-define-key 'normal org-mode-map (kbd "S-TAB") 'org-shifttab))) + + +;; Podświetlanie składni i elementów w org-mode +(setq org-fontify-whole-heading-line t) ;; Podświetlaj cały nagłówek +(setq org-fontify-done-headline t) ;; Podświetlaj ukończone nagłówki +(setq org-fontify-quote-and-verse-blocks t) ;; Podświetlaj bloki cytatów i wierszy + +;; Automatyczne podświetlanie kodu w blokach źródłowych +(setq org-src-fontify-natively t) +(setq org-src-tab-acts-natively t) + +;; Wsparcie dla hierarchicznego folding w org-mode +(setq org-cycle-separator-lines 2) ;; Próg zwijania między sekcjami + +;; Wygląd i czytelność w org-mode +(setq org-hide-emphasis-markers t) ;; Ukryj znaki formatowania (*bold*, /italic/) +(setq org-pretty-entities t) ;; Wyświetl symbole matematyczne jako unicode +(setq org-highlight-latex-and-related '(latex script entities)) ;; Podświetlaj LaTeX + +;; Współpraca z tytułami i nagłówkami +(setq org-startup-indented t) ;; Włącz automatyczne wcięcia +(setq org-indent-mode-turns-on-hiding-stars t) ;; Ukryj gwiazdki w nagłówkach + +;; Funkcje dodatkowe +(setq org-log-done 'time) ;; Zapisuj czas oznaczenia zadania jako DONE +(setq org-return-follows-link t) ;; ENTER podąża za linkami + + + +;; ---------------------------- +;; 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-diagnostics-provider :none) ;; Wyłącz diagnostykę LSP na rzecz Flycheck + (setq lsp-pylsp-plugins-flake8-enabled nil) ;; Użyj flake8 zamiast pyflakes + (setq lsp-pylsp-plugins-ruff-enabled t) ;; Użyj flake8 zamiast pyflakes + + + ;; Ścieżka do interpretera Python + (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 + (if (eq system-type 'windows-nt) + "/Scripts/flake8.exe" ; Ścieżka na Windows + "/bin/flake8"))) ; Ścieżka na Linux/Mac + (pylint-path (concat pyvenv-virtual-env + (if (eq system-type 'windows-nt) + "/Scripts/pylint.exe" ; Ścieżka na Windows + "/bin/pylint")))) ; Ścieżka na Linux/Mac + (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 + "o o" 'my-open-todo-file + "o l" 'org-agenda-list + "o i" 'org-clock-in + "o s" 'org-clock-out + "o r" 'org-clock-report + "g a" 'magit-remote-add + "f f" 'find-file + "b b" 'switch-to-buffer + "b m" 'buffer-menu + "b w" 'buffer-menu-open + "t t" 'treemacs + "t a" 'treemacs-add-project-to-workspace + "t r" 'treemacs-remove-project-from-workspace + "t c" 'treemacs-copy-file + "t f" 'treemacs-create-file + "t m" 'treemacs-rename-file + "l l" 'toggle-truncate-lines + "l n" 'display-line-numbers-mode + "j s" 'jupyter-run-server-repl + "j a" 'jupyter-repl-associate-buffer + "e e" 'eshell + "n n" 'narrow-to-region + "n w" 'widen + "a" 'mark-whole-buffer + "TAB" (lambda () (interactive) (switch-to-buffer (other-buffer))) + "1" 'winum-select-window-1 + "2" 'winum-select-window-2 + "3" 'winum-select-window-3 + "4" 'winum-select-window-4 + "5" 'winum-select-window-5)) + +(which-key-add-key-based-replacements + " g" "Magit" + " n" "Narrow" + " f" "Files" + " b" "Buffers" + " t" "Treemacs" + " l" "Lines" + " j" "Jupyter" + " e" "Eshell" + " o" "Org" + ) + + +;; Utwórz mapę klawiszy dla "SPC" +(define-prefix-command 'my-space-prefix) +(define-key evil-normal-state-map (kbd "SPC") 'my-space-prefix) + +;; Dodaj mapowanie "SPC 0" do Treemacs +(define-key my-space-prefix (kbd "0") 'my-treemacs-select-or-open) + +;; Funkcja, która przełącza się na okno Treemacs lub je otwiera +(defun my-treemacs-select-or-open () + "Przełącz się na okno Treemacs lub otwórz Treemacs, jeśli nie jest aktywne." + (interactive) + (if (treemacs-get-local-window) + (treemacs-select-window) + (treemacs))) + + + + + +;; ---------------------------- +;; 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 75)) + + +;; ---------------------------- +;; 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") 'flycheck-list-errors) + +(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 SPC o 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 flycheck 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. + ) +(put 'narrow-to-region 'disabled nil)