Compare commits

...
42 Commits
Author SHA1 Message Date
Riyyi 1a2c0153c7 Config: Add author/committer distinction in git aliases" 2026-04-13 15:08:09 +02:00
Riyyi 93c1ef048d Hyprland: Start with new hyprland-start command 2026-01-24 16:20:35 +01:00
Riyyi ae8f793265 Hyprland: Disable splash rendering on top of hyprpaper 2026-01-24 16:15:27 +01:00
Riyyi c62cd37298 Hyprland: Update wallpaper.sh for new hyprpaper.sock location 2026-01-24 16:09:52 +01:00
Riyyi 0757d0ac9d Hyprland: Update config for latest version compatibility 2026-01-24 15:18:14 +01:00
Riyyi ac8ff55089 Neovim: Update packages 2025-12-25 16:58:34 +01:00
Riyyi 42be3086e2 Neovim: Update for nvim-lspconfig with Nvim 0.11 2025-12-25 17:42:47 +01:00
Riyyi 8de971278a Config: Resolve .pacnew files 2025-12-25 17:08:15 +01:00
Riyyi 5ecf4b09e7 Script: Support embedding tumbnails in playlists 2025-12-04 23:24:34 +01:00
Riyyi bc4a34cbce Firefox: Disable chatbot 2025-08-24 12:19:48 +02:00
Riyyi ea757b4185 Neovim: Fix terminal popup on Windows 2025-04-12 14:22:14 +02:00
Riyyi 9a79b23a52 Neovim: Add the terminal module 2025-04-12 12:54:43 +02:00
Riyyi 935d6d999b Neovim: Add popup terminal functionality 2025-04-12 12:50:02 +02:00
Riyyi 855732f3c1 Neovim: Finish buffer navigation, add keybinds 2025-04-11 22:57:42 +02:00
Riyyi a2148c1e19 Neovim: More Windows 2025-04-10 22:34:08 +02:00
Riyyi 679af71d41 Neovim: More Windows compatibility fixes 2025-04-10 22:31:34 +02:00
Riyyi 7bc3ec6d98 Neovim: Attempt at Windows path support 2025-04-10 17:33:33 +02:00
Riyyi 4ca12fd342 Hyprland: Change window rules to v2 exclusively 2025-04-05 09:44:35 +02:00
Riyyi b24521fd4f Firefox: Fix tab label alignment 2025-03-15 20:39:45 +01:00
Riyyi b561e7e2f3 Hyprland: Fix polkit theme 2025-03-15 20:21:43 +01:00
Riyyi b473dbbe74 Firefox: Fix hiding of the tabbar 2025-03-15 20:06:03 +01:00
Riyyi e1700384a8 Hyprland: Improve lockscreen 2025-03-03 13:04:26 +01:00
Riyyi ebc6245ea2 Waybar: Improve empty workspace hover color 2025-03-01 14:17:23 +01:00
Riyyi 5cd3ac24a1 Waybar: Improve empty workspace colors 2025-03-01 13:52:59 +01:00
Riyyi 7cef694420 Ghostty+Keepmenu: Fix clipboard notification spam, fix auto-typing
https://github.com/ghostty-org/ghostty/issues/4800
2025-02-28 18:36:46 +01:00
Riyyi ccebfdcdd5 Hyprland: Setup multi-monitors 2025-02-28 18:24:09 +01:00
Riyyi 6e50e217c3 Everywhere: Add Hyprland Wayland config 2025-02-09 22:46:46 +01:00
Riyyi f0835c1a06 Neovim: WIP on navigation workflow 2025-01-18 13:54:36 +01:00
Riyyi 98cf182406 Neovim: Improve file browsing 2024-12-12 22:53:27 +01:00
Riyyi 16321c0c4f Neovim: Update packages 2024-12-10 22:19:29 +01:00
Riyyi 9d7b1f5850 Emacs: Improve buffer group separation for projects 2024-11-25 03:14:05 +01:00
Riyyi 3c5fbbf581 Emacs: Add go-mode, fix :load-after typo in restclient 2024-11-14 22:54:27 +01:00
Riyyi a38b5d1e15 Emacs+Packages: Add Swift-mode, add hunspell packages 2024-11-13 11:44:12 +01:00
Riyyi f223178f39 Config: Fix pinentry 2024-07-16 21:51:03 +02:00
Riyyi 33f22e6471 Firefox: Fix URL bar 2024-07-15 22:15:46 +02:00
Riyyi b21b6d2462 Emacs: Add worklog org-capture templates 2024-07-13 11:25:39 +02:00
Riyyi 795f2aad5b Emacs: Append instead of prepend to startup hook 2024-05-13 21:51:13 +02:00
Riyyi cf156ca80b Emacs: Make solution for removal of (elpaca nil) semantics 2024-05-12 22:56:52 +02:00
Riyyi a282e01692 Neovim: Add rainbow-mode, improve diffview colors 2024-02-25 15:44:57 +01:00
Riyyi 88f9e2e408 Neovim: Disable tabs at the top 2024-02-24 20:41:27 +01:00
Riyyi a208f458c1 Config: Add Neovim as git diff/merge tool 2024-02-24 20:36:17 +01:00
Riyyi d488a323da Neovim: Apply custom Telescope setting to its matching layout 2024-02-24 20:30:44 +01:00
72 changed files with 2813 additions and 360 deletions
+2
View File
@@ -0,0 +1,2 @@
[General]
theme=KvArcDark
+8 -1
View File
@@ -4,8 +4,15 @@
<icon>utilities-terminal</icon>
<name>Open Terminal Here</name>
<unique-id>1594675818593070-1</unique-id>
<command>urxvt -cd %f</command>
<description>Open Terminal in the Current Directory</description>
<!-- >>> session=xorg -->
<command>urxvt -cd %f</command>
<!-- <<< -->
<!-- >>> session=wayland -->
<!-- <command>ghostty -e &quot;sh -c &apos;cd %f &amp;&amp; exec $SHELL&apos;&quot;</command> -->
<!-- <<< -->
<patterns>*</patterns>
<startup-notify/>
<directories/>
@@ -169,7 +169,7 @@
;; -----------------------------------------
;; Recentf
(elpaca nil (setup recentf ; built-in
(elpaca-nil (setup recentf ; built-in
(:require recentf)
(:when-loaded
(setq recentf-auto-cleanup 'never)
@@ -60,7 +60,7 @@
(super-save-mode)))
(elpaca nil (setup desktop ; built-in
(elpaca-nil (setup desktop ; built-in
(:require desktop)
(:when-loaded
(setq desktop-base-file-name "state")
+33 -11
View File
@@ -105,7 +105,7 @@
;; Adding to project.el project directory detection
;; https://michael.stapelberg.ch/posts/2021-04-02-emacs-project-override/
(elpaca nil (setup project ; built-in
(elpaca-nil (setup project ; built-in
(setq project-list-file (expand-file-name "projects" dot-cache-dir))
(:when-loaded
@@ -144,7 +144,11 @@
"Return project name."
(let ((project (project-current)))
(if project
(file-name-nondirectory (directory-file-name (project-root project)))
(let* ((project (file-truename (directory-file-name (project-root (project-current)))))
(parent-dir-full (file-name-directory (directory-file-name project)))
(parent-dir (file-name-nondirectory (substring parent-dir-full 0 -1)))
(filename (file-name-nondirectory project)))
(concat filename "/" parent-dir))
"-")))
(defun dot/project-save-project-buffers ()
@@ -159,12 +163,12 @@
;; Enable color escape codes.
(elpaca nil (setup ansi-color ; built-in
(elpaca-nil (setup ansi-color ; built-in
(:with-mode compilation-filter (:hook ansi-color-compilation-filter))
;; :hook (compilation-filter . ansi-color-compilation-filter)
(:when-loaded (setq ansi-color-bold-is-bright t))))
(elpaca nil (setup compile ; built-in
(elpaca-nil (setup compile ; built-in
(defun dot/compile-disable-underline () ""
(face-remap-add-relative 'underline :underline nil))
(:with-mode comint-mode (:hook dot/compile-disable-underline))
@@ -192,9 +196,11 @@
c++-mode ; clangd
php-mode ; nodejs-intelephense
csharp-mode ; omnisharp-roslyn-bin
go-mode ; gopls
kotlin-mode ; kotlin-language-server
lua-mode ; lua-language-server
latex-mode ; texlab
kotlin-mode ; kotlin-language-server
swift-mode ; swift-bin
web-mode)
(:hook lsp-deferred))
(:when-loaded
@@ -307,7 +313,7 @@
;;; C/C++
(elpaca nil (setup c-mode ; built-in
(elpaca-nil (setup c-mode ; built-in
;; C++ // line comment style in c-mode
(defun dot/c-mode-comment-style () ""
(c-toggle-comment-style -1))
@@ -323,7 +329,7 @@
;; - omnisharp-roslyn-bin
;; - netcoredbg (edit PKGBUILD to detect dotnet -6.0 dependencies)
(elpaca nil (setup csharp-mode)) ; built-in
(elpaca-nil (setup csharp-mode)) ; built-in
;;; CMake
@@ -333,7 +339,7 @@
;;; Emacs Lisp
(elpaca nil (setup emacs-lisp ; built-in
(elpaca-nil (setup emacs-lisp ; built-in
(defun dot/elisp-init () ""
(setq-local indent-tabs-mode nil))
(:hook dot/elisp-init)))
@@ -342,9 +348,15 @@
(elpaca-setup glsl-mode)
;;; Golang
(elpaca-setup go-mode)
;;; HTML
(elpaca-setup web-mode)
(elpaca-setup web-mode
(:file-match "\\.ts")
(:file-match "\\.vue"))
;;; Kotlin
@@ -363,16 +375,26 @@
(:hook dot/php-mode-init))
(elpaca-setup restclient)
(elpaca-setup restclient-jq
(:load-after restclient))
;;; Python
(elpaca nil (setup python-mode ; built-in
(elpaca-nil (setup python-mode ; built-in
(defun dot/python-mode-init () ""
(setq-local indent-tabs-mode t)
(setq-local tab-width (default-value 'tab-width))
(setq python-indent-offset (default-value 'tab-width)))
(:hook dot/python-mode-init)))
;;; Swift
(elpaca-setup swift-mode)
(elpaca-setup lsp-sourcekit
(:load-after lsp-mode)
(:when-loaded
(setq lsp-sourcekit-executable "/usr/bin/sourcekit-lsp")))
;;; YAML
(elpaca-setup yaml-mode)
@@ -424,7 +446,7 @@
;;; Flyspell
(elpaca nil (setup ispell ; built-in
(elpaca-nil (setup ispell ; built-in
(:when-loaded
(setq ispell-program-name "/usr/bin/hunspell")
(ispell-set-spellchecker-params)
+14 -6
View File
@@ -9,12 +9,12 @@
;; -----------------------------------------
;; Elpaca bootstrap
(defvar elpaca-installer-version 0.6)
(defvar elpaca-installer-version 0.9)
(defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory))
(defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory))
(defvar elpaca-repos-directory (expand-file-name "repos/" elpaca-directory))
(defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git"
:ref nil
:ref nil :depth 1 :inherit ignore
:files (:defaults "elpaca-test.el" (:exclude "extensions"))
:build (:not elpaca--activate-package)))
(let* ((repo (expand-file-name "elpaca/" elpaca-repos-directory))
@@ -26,9 +26,11 @@
(make-directory repo t)
(when (< emacs-major-version 28) (require 'subr-x))
(condition-case-unless-debug err
(if-let ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*"))
((zerop (call-process "git" nil buffer t "clone"
(plist-get order :repo) repo)))
(if-let* ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*"))
((zerop (apply #'call-process `("git" nil ,buffer t "clone"
,@(when-let* ((depth (plist-get order :depth)))
(list (format "--depth=%d" depth) "--no-single-branch"))
,(plist-get order :repo) ,repo))))
((zerop (call-process "git" nil buffer t "checkout"
(or (plist-get order :ref) "--"))))
(emacs (concat invocation-directory invocation-name))
@@ -46,8 +48,14 @@
(add-hook 'after-init-hook #'elpaca-process-queues)
(elpaca `(,@elpaca-order))
;;;###autoload
(defmacro elpaca-nil (body)
"Defer execution until all Elpaca queues have been processed."
(declare (indent 1))
`(add-hook 'elpaca-after-init-hook (lambda () (,@body)) 1))
;; Stop coping with startup time, its done loading when its done loading
(add-hook 'elpaca-after-init-hook (lambda () (setq after-init-time (current-time))))
(elpaca-nil (setq after-init-time (current-time)))
(provide 'dot-elpaca)
+1 -1
View File
@@ -81,7 +81,7 @@ Vim equivalence: >gv"
;; Evil command aliases.
(elpaca nil (setup evil-ex ; evil-ex.el is part of evil
(elpaca-nil (setup evil-ex ; evil-ex.el is part of evil
(:when-loaded
(evil-ex-define-cmd "W" "w")
(evil-ex-define-cmd "Q" "q")
+42 -35
View File
@@ -35,26 +35,27 @@
;; Disable keybinds of native modes that clash with other custom keybinds.
(elpaca nil (setup emacs
(elpaca-nil (setup emacs
(:global
"M-h" nil
"M-j" nil
"M-k" nil
"M-l" nil
"<pinch>" nil ; Do not scale text when pinching touchpad
)))
(elpaca nil (setup org
(elpaca-nil (setup org
(:bind "M-h" nil
"C-M-h" nil
)))
(elpaca nil (setup cc-mode
(elpaca-nil (setup cc-mode
(:bind-into c-mode-base-map
"M-j" nil
"C-M-h" nil
)))
(elpaca nil (setup nxml-mode
(elpaca-nil (setup nxml-mode
(:bind "M-h" nil
)))
@@ -63,16 +64,16 @@
;; Disable keybinds of installed packages that clash with other custom keybinds.
(elpaca nil (setup evil-states
(elpaca-nil (setup evil-states
(:bind-into evil-motion-state-map dot/leader-key nil
)))
(elpaca nil (setup magit
(elpaca-nil (setup magit
(:evil-bind normal
;; Do not close magit when pressing escape
"<escape>" nil)))
(elpaca nil (setup php-mode
(elpaca-nil (setup php-mode
(:bind "M-j" nil
"C-M-h" nil
)))
@@ -84,7 +85,7 @@
;;; Set Native Global Keybinds
(elpaca nil (setup emacs
(elpaca-nil (setup emacs
(:global
;; Buffers
"C-x C-b" ibuffer
@@ -111,21 +112,21 @@
;;; Set Native Mode Keybinds
;; Dired
(elpaca nil (setup dired
(elpaca-nil (setup dired
(:bind
[remap dired-find-file] dot/dired-find-file
[remap dired-up-directory] dot/dired-up-directory
)))
;; Org
(elpaca nil (setup org
(elpaca-nil (setup org
(:bind "M-c" org-edit-special
)))
(elpaca nil (setup org-src
(elpaca-nil (setup org-src
(:bind "M-c" org-edit-src-exit
"M-k" org-edit-src-abort
)))
(elpaca nil (setup org-capture
(elpaca-nil (setup org-capture
(:bind "M-c" org-capture-finalize
"M-w" org-capture-refile
"M-k" org-capture-kill
@@ -136,7 +137,7 @@
;; Set keybinds to functionality of installed packages.
(elpaca nil (setup emacs
(elpaca-nil (setup emacs
(:global
;; Buffers
"M-h" centaur-tabs-backward-tab
@@ -151,7 +152,7 @@
"M-x" dot/M-x
)))
(elpaca nil (setup company
(elpaca-nil (setup company
(:bind-into company-active-map
;; Company completion selection
"M-n" nil
@@ -163,7 +164,7 @@
"<escape>" company-abort
)))
(elpaca nil (setup evil-ex
(elpaca-nil (setup evil-ex
(:bind-into evil-ex-completion-map
;; Evil command history selection
"M-h" abort-recursive-edit
@@ -172,7 +173,7 @@
"M-l" exit-minibuffer
)))
(elpaca nil (setup emacs
(elpaca-nil (setup emacs
(:global
;; flyspell-correct
[remap ispell-word] flyspell-correct-at-point ; z=
@@ -189,26 +190,26 @@
(which-key-add-key-based-replacements "C-h o" "describe-symbol-at-point")))))
;; LSP
(elpaca nil (setup lsp-mode
(elpaca-nil (setup lsp-mode
(:bind-into lsp-signature-mode-map
"M-j" lsp-signature-next
"M-k" lsp-signature-previous
)))
;; Magit
(elpaca nil (setup magit
(elpaca-nil (setup magit
(:bind-into magit-log-select-mode-map
"M-c" magit-log-select-pick
"M-k" magit-log-select-quit
)))
;; Org-roam
(elpaca nil (setup org-roam
(elpaca-nil (setup org-roam
(:bind [down-mouse-1] org-roam-visit-thing
)))
;; Minibuffer completion selection
(elpaca nil (setup minibuffer
(elpaca-nil (setup minibuffer
(:bind-into minibuffer-local-map
"M-J" next-history-element
"M-K" previous-history-element
@@ -223,7 +224,7 @@
)))
;; with-editor
(elpaca nil (setup with-editor
(elpaca-nil (setup with-editor
(:bind
"M-c" with-editor-finish
"M-k" with-editor-cancel
@@ -231,7 +232,7 @@
;;; Global evil keymap
(elpaca nil (setup evil
(elpaca-nil (setup evil
(:bind-into evil-normal-state-map
"C-n" neotree-toggle-in-project-root
"C-S-p" evil-paste-pop-next
@@ -256,13 +257,13 @@
;;; Other evil state-related keybinds
;; Custom (M-x customize)
(elpaca nil (setup cus-edit
(elpaca-nil (setup cus-edit
(:evil-bind-into normal custom-mode-map
[down-mouse-1] widget-button-click
)))
;; Dashboard
(elpaca nil (setup dashboard
(elpaca-nil (setup dashboard
(:evil-bind normal
[down-mouse-1] widget-button-click
"g" dashboard-refresh-buffer
@@ -272,13 +273,13 @@
)))
;; Dap
(elpaca nil (setup dap-ui
(elpaca-nil (setup dap-ui
(:evil-bind-into normal dap-ui-session-mode-map
"D" dap-ui-delete-session
)))
;; Deft
(elpaca nil (setup deft
(elpaca-nil (setup deft
(:evil-bind normal
[down-mouse-1] widget-button-click
"+" deft-new-file-named
@@ -296,7 +297,7 @@
)))
;; Elfeed
(elpaca nil (setup elfeed
(elpaca-nil (setup elfeed
(:evil-bind-into normal elfeed-search-mode-map
"b" elfeed-search-browse-url
"c" elfeed-search-clear-filter
@@ -316,14 +317,14 @@
)))
;; Magit
(elpaca nil (setup magit
(elpaca-nil (setup magit
(:evil-bind (normal visual)
"{" magit-section-backward-sibling
"}" magit-section-forward-sibling
)))
;; Minibuffer
(elpaca nil (setup minibuffer
(elpaca-nil (setup minibuffer
(:evil-bind-into normal minibuffer-local-map
"TAB" vertico-insert
"j" vertico-next
@@ -336,7 +337,7 @@
)))
;; Mu4e
(elpaca nil (setup mu4e
(elpaca-nil (setup mu4e
(:evil-bind-into normal mu4e-compose-mode-map
"q" mu4e-message-kill-buffer
"M-c" message-send-and-exit
@@ -344,7 +345,7 @@
)))
;; Neotree
(elpaca nil (setup neotree
(elpaca-nil (setup neotree
(:evil-bind normal
"RET" neotree-enter
"<backtab>" neotree-collapse-all ; <S-tab>
@@ -362,7 +363,7 @@
)))
;; Org
(elpaca nil (setup org
(elpaca-nil (setup org
(:evil-bind normal
"RET" dot/org-ret-at-point
)
@@ -374,7 +375,7 @@
)))
;; Wdired
(elpaca nil (setup wdired
(elpaca-nil (setup wdired
(:evil-bind (normal insert)
"M-c" wdired-finish-edit
"M-k" wdired-abort-changes
@@ -387,7 +388,7 @@
;;; Global Leader
(elpaca nil (setup general
(elpaca-nil (setup general
(:when-loaded
(general-create-definer space-leader
:prefix dot/leader-key
@@ -485,6 +486,12 @@
"n r r" '(org-roam-buffer-toggle :which-key "Toggle buffer")
"n r s" '(org-roam-ui-mode :which-key "Toggle server")
;; Org
"o" '(:ignore t :which-key "org")
"o i" '(dot/org-clock-in :which-key "Clock in")
"o o" '(dot/org-clock-out :which-key "Clock out")
"o s" '(dot/org-switch-task :which-key "Switch task")
;; Project
"p" '(:keymap project-prefix-map :which-key "project")
"p b" '(consult-project-buffer :which-key "project-switch-buffer")
@@ -593,7 +600,7 @@
;;; Local Leader
(elpaca nil (setup general
(elpaca-nil (setup general
(:when-loaded
(general-create-definer local-leader
:prefix dot/localleader-key
+4 -4
View File
@@ -24,7 +24,7 @@
;; Key bindings
;; [https://www.djcbsoftware.nl/code/mu/mu4e/MSGV-Keybindings.html#MSGV-Keybindings]
(elpaca nil (setup mu4e ; loaded from AUR package
(elpaca-nil (setup mu4e ; loaded from AUR package
(add-to-list 'load-path "/usr/share/emacs/site-lisp/mu4e")
(:autoload mu4e mu4e-update-index)
(:when-loaded
@@ -114,7 +114,7 @@
;; Sending mail.
(elpaca nil (setup smtpmail ; built-in
(elpaca-nil (setup smtpmail ; built-in
(setq smtpmail-default-smtp-server "mail.riyyi.com")
(:load-after mu4e)
(:when-loaded
@@ -124,11 +124,11 @@
(setq smtpmail-stream-type 'starttls)
(setq smtpmail-queue-mail nil))))
(elpaca nil (setup sendmail ; built-in
(elpaca-nil (setup sendmail ; built-in
(:load-after mu4e)
(:when-loaded (setq send-mail-function 'smtpmail-send-it))))
(elpaca nil (setup message ; built-in
(elpaca-nil (setup message ; built-in
(:load-after mu4e)
(:when-loaded
(setq message-kill-buffer-on-exit t)
+58 -11
View File
@@ -9,7 +9,7 @@
;; -----------------------------------------
;; LaTeX Configuration
(elpaca nil (setup tex-mode ; built-in
(elpaca-nil (setup tex-mode ; built-in
(:when-loaded
(defun dot/tex-mode-init () ""
(setq indent-tabs-mode t)
@@ -30,7 +30,7 @@
;; Base Org.
(elpaca nil (setup org ; built-in
(elpaca-nil (setup org ; built-in
(setq org-directory (expand-file-name "documents/org" (getenv "HOME")))
(setq org-default-notes-file (expand-file-name "notes.org" org-directory))
(:with-mode before-save
@@ -46,6 +46,51 @@
(add-to-list 'org-structure-template-alist
'("el" . "src emacs-lisp"))
(defun dot/org-find-or-create-heading (heading level)
"Find or create heading"
(if (re-search-forward (format org-complex-heading-regexp-format
(regexp-quote heading))
nil t)
(beginning-of-line)
(goto-char (point-max))
(unless (bolp) (insert "\n"))
(insert (concat (make-string level ?*) " ") heading "\n")
(beginning-of-line 0)))
(defun dot/org-find-month-week-day ()
"Find or create the journal tree for the current week under current month"
(unless (derived-mode-p 'org-mode)
(error "Target buffer \"%s\" for dot/find-org-week should be in Org mode"
(current-buffer)))
(org-capture-put-target-region-and-position)
(widen)
(goto-char (point-min))
(dot/org-find-or-create-heading "Worklog" 1)
(org-narrow-to-subtree)
(dot/org-find-or-create-heading (format-time-string "%B") 2) ;; month
(org-narrow-to-subtree)
(dot/org-find-or-create-heading (format-time-string "Week %W") 3)
(org-narrow-to-subtree)
(dot/org-find-or-create-heading (format-time-string "%A") 4) ;; day
(org-end-of-subtree))
;; Capture templates
(setq org-capture-templates
`(("i" "Clock in" plain (file+function ,(expand-file-name "worklog.org" org-directory) dot/org-find-month-week-day)
"| %<%Y-%m-%d> | IN | %<%H:%M> | %^{Location|Office|Home|Office|Visit} |\n===================================%?"
:immediate-finish t)
("o" "Clock out" plain (file+function ,(expand-file-name "worklog.org" org-directory) dot/org-find-month-week-day)
"===================================\n| %<%Y-%m-%d> | OUT | %<%H:%M> |%?"
:immediate-finish t)
("s" "Switch task" plain (file+function ,(expand-file-name "worklog.org" org-directory) dot/org-find-month-week-day)
"| %<%Y-%m-%d> | %<%H:%M> | %^{Item ID} | X | %^{Description|-} |%?"
:immediate-finish t)))
;; Keybind functions
(defun dot/org-clock-in () (interactive) (org-capture nil "i"))
(defun dot/org-clock-out () (interactive) (org-capture nil "o"))
(defun dot/org-switch-task () (interactive) (org-capture nil "s"))
(with-eval-after-load 'evil-commands
(defun dot/org-ret-at-point ()
"Org return key at point.
@@ -97,7 +142,7 @@ When ANYWHERE is non-nil, search beyond the preamble."
;; Org agenda.
(elpaca nil (setup org-agenda ; built-in
(elpaca-nil (setup org-agenda ; built-in
(:load-after evil org)
(:when-loaded
(setq org-agenda-files `(,org-directory ,user-emacs-directory))
@@ -107,26 +152,26 @@ When ANYWHERE is non-nil, search beyond the preamble."
;; Org capture.
(elpaca nil (setup org-capture ; built-in
(elpaca-nil (setup org-capture ; built-in
;; Org-capture in new tab, rather than split window
(:hook delete-other-windows)))
;; Org keys.
(elpaca nil (setup org-keys ; built-in
(elpaca-nil (setup org-keys ; built-in
(:when-loaded
(setq org-return-follows-link t))))
;; Org links.
(elpaca nil (setup ol ; built-in
(elpaca-nil (setup ol ; built-in
(:when-loaded
;; Do not open links to .org files in a split window
(add-to-list 'org-link-frame-setup '(file . find-file)))))
;; Org source code blocks.
(elpaca nil (setup org-src ; built-in
(elpaca-nil (setup org-src ; built-in
(:when-loaded
(setq org-edit-src-content-indentation 0)
(setq org-src-fontify-natively t)
@@ -136,15 +181,16 @@ When ANYWHERE is non-nil, search beyond the preamble."
;; Org exporter.
(elpaca nil (setup ox ; built-in
(elpaca-nil (setup ox ; built-in
(:when-loaded
(setq org-export-coding-system 'utf-8-unix))))
;; Org latex exporter.
(elpaca nil (setup ox-latex ; built-in
(elpaca-nil (setup ox-latex ; built-in
(:when-loaded
;; Define how minted (highlighted src code) is added to src code blocks
;; Requires packages: texlive-bin, texlive-latexextra and python-pygments
(setq org-latex-listings 'minted)
(setq org-latex-minted-options '(("frame" "lines") ("linenos=true")))
;; Set 'Table of Contents' layout
@@ -176,7 +222,8 @@ When ANYWHERE is non-nil, search beyond the preamble."
;;; Org Roam
(elpaca-setup emacsql-sqlite-builtin)
(elpaca-setup emacsql
(:also-load emacsql-sqlite-builtin))
(elpaca-setup org-roam
(:autoload org-roam-node-find) ;; TODO, is this enough?
@@ -233,7 +280,7 @@ When ANYWHERE is non-nil, search beyond the preamble."
;; Enable https://www.orgroam.com/manual.html#org_002droam_002dprotocol, needed to process org-protocol:// links
(elpaca nil (setup org-roam-protocol ; org-roam-protocol.el is part of org-roam
(elpaca-nil (setup org-roam-protocol ; org-roam-protocol.el is part of org-roam
(:load-after org-roam)
(:when-loaded
+1 -1
View File
@@ -41,7 +41,7 @@
(setq vertico-previous-directory nil)))
(advice-add 'vertico--update-candidates :after #'dot/vertico-dired-goto-last-visited))
(elpaca nil (setup vertico-mouse ; vertico-mouse.el is part of vertico
(elpaca-nil (setup vertico-mouse ; vertico-mouse.el is part of vertico
(:load-after vertico)
(:when-loaded (vertico-mouse-mode))))
@@ -1,4 +1,4 @@
[redshift]
[general]
temp-day=5700
; >>> hostname=arch-desktop
@@ -14,7 +14,13 @@ brightness-day=1.0
brightness-night=0.9
location-provider=manual
; >>> session=xorg
adjustment-method=randr
; <<<
; >>> session=wayland
; adjustment-method=wayland
; <<<
[manual]
lat=51.81
+12
View File
@@ -0,0 +1,12 @@
app-notifications = no-clipboard-copy
confirm-close-surface = false
copy-on-select = clipboard
cursor-style-blink = false
font-family = DejaVuSansM Nerd Font Mono
font-size = 10
link-url = true
selection-invert-fg-bg = true
term = xterm-256color
theme = terminal-sexy
window-decoration = false
window-inherit-working-directory = true
+21
View File
@@ -0,0 +1,21 @@
palette = 0=#282a2e
palette = 1=#a54242
palette = 2=#8c9440
palette = 3=#de935f
palette = 4=#5f819d
palette = 5=#85678f
palette = 6=#5e8d87
palette = 7=#707880
palette = 8=#373b41
palette = 9=#cc6666
palette = 10=#b5bd68
palette = 11=#f0c674
palette = 12=#81a2be
palette = 13=#b294bb
palette = 14=#8abeb7
palette = 15=#c5c8c6
background = #1c1c1c
foreground = #c5c8c6
cursor-color = #c5c8c6
selection-background = #373b41
selection-foreground = #c5c8c6
+8
View File
@@ -7,3 +7,11 @@
[user]
name = Riyyi
email = riyyi3@gmail.com
[diff]
tool = nvimdiff
[merge]
tool = nvimdiff
conflictstyle = diff3
[mergetool]
prompt = false
keepBackup = false
+1 -1
View File
@@ -1,4 +1,4 @@
pinentry-program /usr/bin/pinentry
pinentry-program /usr/bin/pinentry-gtk
default-cache-ttl 900
max-cache-ttl 7200
+2 -1
View File
@@ -1,6 +1,7 @@
# DO NOT EDIT! This file will be overwritten by LXAppearance.
# DO NOT EDIT! This file will be overwritten by nwg-look.
# Any customization should be done in ~/.gtkrc-2.0.mine instead.
include "/home/rick/.gtkrc-2.0.mine"
gtk-theme-name="Arc-Dark"
gtk-icon-theme-name="Arc"
gtk-font-name="DejaVu Sans 10"
+1
View File
@@ -14,3 +14,4 @@ gtk-xft-antialias=1
gtk-xft-hinting=1
gtk-xft-hintstyle=hintslight
gtk-xft-rgba=rgb
gtk-application-prefer-dark-theme=1
+12
View File
@@ -0,0 +1,12 @@
general {
lock_cmd = pidof hyprlock || hyprlock
before_sleep_cmd = loginctl lock-session
after_sleep_cmd = hyprctl dispatch dpms on # avoid having to press a key twice to turn on display
}
# Turn the screen off after 30 seconds on the lock-screen
listener {
timeout = 30
on-timeout = pidof hyprlock && hyprctl dispatch dpms off
on-resume = hyprctl dispatch dpms on
}
+422
View File
@@ -0,0 +1,422 @@
################
### MONITORS ###
################
# See https://wiki.hyprland.org/Configuring/Monitors/
monitor = desc:Ancor Communications Inc ASUS PB298 D7LMTF059917, preferred, 0x0, auto
monitor = desc:Iiyama North America PL2492H 11511037C7430, preferred, 2560x0, auto
monitor = , preferred, auto, auto # fallback
###################
### MY PROGRAMS ###
###################
# See https://wiki.hyprland.org/Configuring/Keywords/
# Set programs that you use
$terminal = ghostty
$fileManager = thunar
$menu = rofi -show drun
#################
### AUTOSTART ###
#################
# System level
exec-once = gammastep
exec-once = systemctl --user start hyprpolkitagent
exec-once = hyprctl setcursor capitaine-cursors-light 24
exec-once = hypridle
exec-once = ydotoold
# Scripts
exec-once = ${HOME}/.local/bin/wm/wallpaper.sh
exec-once = ${HOME}/.local/bin/panel/waybar.sh
# Applications
exec-once = [workspace 1] firefox
exec-once = [workspace 2] $terminal
exec-once = [workspace 3] thunar --daemon
exec-once = [workspace 3] thunar
#############################
### ENVIRONMENT VARIABLES ###
#############################
# See https://wiki.hyprland.org/Configuring/Environment-variables/
env = XDG_CURRENT_DESKTOP,Hyprland
env = XDG_SESSION_TYPE,wayland
env = XDG_SESSION_DESKTOP,Hyprland
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
#####################
### LOOK AND FEEL ###
#####################
# Refer to https://wiki.hyprland.org/Configuring/Variables/
# https://wiki.hyprland.org/Configuring/Variables/#general
general {
gaps_in = 5
gaps_out = 10
border_size = 2
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
col.active_border = rgb(404552)
col.inactive_border = rgb(2b2e39)
# Set to true enable resizing windows by clicking and dragging on borders and gaps
resize_on_border = false
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
allow_tearing = false
layout = dwindle
}
# https://wiki.hyprland.org/Configuring/Variables/#decoration
decoration {
rounding = 0
# Change transparency of focused and unfocused windows
active_opacity = 1.0
inactive_opacity = 1.0
shadow {
enabled = false
}
# https://wiki.hyprland.org/Configuring/Variables/#blur
blur {
enabled = false
}
}
# https://wiki.hyprland.org/Configuring/Variables/#animations
animations {
enabled = true
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
bezier = easeOutQuint,0.23,1,0.32,1
bezier = easeInOutCubic,0.65,0.05,0.36,1
bezier = linear,0,0,1,1
bezier = almostLinear,0.5,0.5,0.75,1.0
bezier = quick,0.15,0,0.1,1
animation = global, 1, 10, default
animation = border, 1, 5.39, easeOutQuint
animation = windows, 1, 4.79, easeOutQuint
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
animation = windowsOut, 1, 1.49, linear, popin 87%
animation = fadeIn, 1, 1.73, almostLinear
animation = fadeOut, 1, 1.46, almostLinear
animation = fade, 1, 3.03, quick
animation = layers, 1, 3.81, easeOutQuint
animation = layersIn, 1, 4, easeOutQuint, fade
animation = layersOut, 1, 1.5, linear, fade
animation = fadeLayersIn, 1, 1.79, almostLinear
animation = fadeLayersOut, 1, 1.39, almostLinear
animation = workspaces, 1, 1.94, almostLinear, fade
animation = workspacesIn, 1, 1.21, almostLinear, fade
animation = workspacesOut, 1, 1.94, almostLinear, fade
}
# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/
# "Smart gaps" / "No gaps when only"
workspace = w[tv1], gapsout:0, gapsin:0
workspace = f[1], gapsout:0, gapsin:0
windowrule = border_size 0, match:float 0, match:workspace w[tv1]
windowrule = rounding 0, match:float 0, match:workspace w[tv1]
windowrule = border_size 0, match:float 0, match:workspace f[1]
windowrule = rounding 0, match:float 0, match:workspace f[1]
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
dwindle {
force_split = 2 # split to the bottom right
preserve_split = true
pseudotile = false
}
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
master {
new_status = master
}
# https://wiki.hyprland.org/Configuring/Variables/#misc
misc {
disable_hyprland_logo = true
vfr = true # lower amount of sent frames when nothing is happening on-screen
}
#############
### INPUT ###
#############
# https://wiki.hyprland.org/Configuring/Variables/#input
input {
kb_layout = us
kb_variant =
kb_model =
kb_options = caps:swapescape
kb_rules =
follow_mouse = 1
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
touchpad {
natural_scroll = false
}
}
# https://wiki.hyprland.org/Configuring/Variables/#gestures
gestures {
workspace_swipe_touch = false
}
# Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
device { # hyprctl devices
name = logitech-wireless-mouse-pid:4038
sensitivity = -0.5
accel_profile = flat
}
###################
### KEYBINDINGS ###
###################
# See https://wiki.hyprland.org/Configuring/Keywords/
$mainMod = SUPER # Sets "Windows" key as main modifier
# Bind docs https://wiki.hyprland.org/Configuring/Binds/
#--- Control ---#
# Reload hyprland
bind = $mainMod Control_L, r, forcerendererreload
# Close hyprland
bind = $mainMod SHIFT, M, exit,
#--- Window ---#
# Close window
bind = $mainMod, q, killactive,
#-- State/flags --#
# Toggle fullscreen mode
bind = $mainMod, f, fullscreen
# Toggle tiled/floating
bind = $mainMod, Space, togglefloating,
#-- Focus --#
# Focus window in direction
bind = $mainMod, h, movefocus, l
bind = $mainMod, j, movefocus, d
bind = $mainMod, k, movefocus, u
bind = $mainMod, l, movefocus, r
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d
# Focus previous/next window
bind = $mainMod, Tab, cyclenext
bind = $mainMod SHIFT, Tab, cyclenext, prev
# Focus workspace
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10
# Focus previous/next workspace
bind = $mainMod, equal, workspace, e+1
bind = $mainMod, minus, workspace, e-1
# Focus last workspace
bind = $mainMod, GRAVE, focuscurrentorlast
# Focus previous/next monitor
# TODO
# Special workspace (scratchpad)
bind = $mainMod, T, togglespecialworkspace, magic
#-- Move --#
# Send window to workspace
bind = $mainMod SHIFT, 1, movetoworkspacesilent, 1
bind = $mainMod SHIFT, 2, movetoworkspacesilent, 2
bind = $mainMod SHIFT, 3, movetoworkspacesilent, 3
bind = $mainMod SHIFT, 4, movetoworkspacesilent, 4
bind = $mainMod SHIFT, 5, movetoworkspacesilent, 5
bind = $mainMod SHIFT, 6, movetoworkspacesilent, 6
bind = $mainMod SHIFT, 7, movetoworkspacesilent, 7
bind = $mainMod SHIFT, 8, movetoworkspacesilent, 8
bind = $mainMod SHIFT, 9, movetoworkspacesilent, 9
bind = $mainMod SHIFT, 0, movetoworkspacesilent, 10
# Move window to previous/next workspace
bind = $mainMod SHIFT, equal, movetoworkspace, e+1
bind = $mainMod SHIFT, minus, movetoworkspace, e-1
# Move window to previous/next monitor
# TODO
# Move floating window
bind = Control_L Alt_L, h, moveactive, -30 0
bind = Control_L Alt_L, j, moveactive, 0 30
bind = Control_L Alt_L, k, moveactive, 0 -30
bind = Control_L Alt_L, l, moveactive, 30 0
bind = Control_L Alt_L, left, moveactive, -30 0
bind = Control_L Alt_L, right, moveactive, 30 0
bind = Control_L Alt_L, up, moveactive, 0 -30
bind = Control_L Alt_L, down, moveactive, 0 30
# Flip the tree from the current windows parent
bind = $mainMod Alt_L, 5, swapsplit, # dwindle
bind = $mainMod Alt_L, 6, togglesplit, # dwindle
# Special workspace (scratchpad)
bind = $mainMod SHIFT, T, movetoworkspace, special:magic
#-- Resize --#
# Resize windows
bind = $mainMod Alt_L, h, resizeactive, -10 0
bind = $mainMod Alt_L, j, resizeactive, 0 10
bind = $mainMod Alt_L, k, resizeactive, 0 -10
bind = $mainMod Alt_L, l, resizeactive, 10 0
bind = $mainMod Alt_L, left, resizeactive, -10 0
bind = $mainMod Alt_L, right, resizeactive, 10 0
bind = $mainMod Alt_L, up, resizeactive, 0 -10
bind = $mainMod Alt_L, down, resizeactive, 0 10
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
#-- Preselect node --#
bind = SUPER Control_L, h, layoutmsg, preselect left
bind = SUPER Control_L, j, layoutmsg, preselect down
bind = SUPER Control_L, k, layoutmsg, preselect up
bind = SUPER Control_L, l, layoutmsg, preselect right
bind = SUPER Control_L, left, layoutmsg, preselect left
bind = SUPER Control_L, right, layoutmsg, preselect right
bind = SUPER Control_L, up, layoutmsg, preselect up
bind = SUPER Control_L, down, layoutmsg, preselect down
#--- General ---#
# Start terminal
bind = $mainMod, Return, exec, $terminal
# Start rofi (program launcher)
bind = $mainMod, d, exec, $menu
# mpv
bind = $mainMod, m, exec, play
bind = $mainMod SHIFT, m, exec, play queue
#--- Control, compositor agnostic ---#
# Reload
bind = $mainMod Control_L, r, exec, ${HOME}/.local/bin/panel/waybar.sh
# System
bind = $mainMod SHIFT, s, exec, system
# Screen brightness
bind = $mainMod, F2, exec, brictl dec 10
bind = $mainMod, F3, exec, brictl inc 10
# Screen capture
bind = , Print, exec, printscreen
bind = Control_L, Print, exec, aliases screencast
# Laptop multimedia keys
bindel = , XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
bindel = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindel = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindel = , XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
bindel = , XF86MonBrightnessUp, exec, brictl inc 10
bindel = , XF86MonBrightnessDown, exec, brictl dec 10
bindl = , XF86AudioNext, exec, playerctl next
bindl = , XF86AudioPause, exec, playerctl play-pause
bindl = , XF86AudioPlay, exec, playerctl play-pause
bindl = , XF86AudioPrev, exec, playerctl previous
bindl = , XF86HomePage, exec, inputctl -d toggle # toggle touchpad
bindl = , XF86Search, exec, inputctl -s toggle # toggle touchscreen
#--- Notification ---#
# Notifiation
bind = Control_L, space, exec, dunstctl close
bind = Control_L SHIFT, space, exec, dunstctl close-all
bind = Control_L, grave, exec, dunstctl history-pop
bind = Control_L SHIFT, period, exec, dunstctl context
##############################
### WINDOWS AND WORKSPACES ###
##############################
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
# Ignore maximize requests from apps. You'll probably like this.
windowrule = suppress_event maximize, match:class .*
# Fix some dragging issues with XWayland
windowrule = no_focus true, match:class ^$, match:title ^$, match:xwayland true, match:float true, match:fullscreen false, match:pin false
# Set to floating
windowrule = float true, match:class feh # window rule v1 can only do either class or title, not both
windowrule = float true, match:class mpv
windowrule = float true, match:class org.pulseaudio.pavucontrol
windowrule = float true, match:class pinentry-gtk
windowrule = float true, match:class xarchiver
windowrule = float true, match:class firefox, match:title Library
windowrule = float true, match:class firefox, match:title ^About.*
windowrule = float true, match:class thunar, match:title File Operation Progress
# Resize floating windows
windowrule = size >50% >70%, match:class org.pulseaudio.pavucontrol
# Put workspaces on specific monitors
workspace = 1, monitor:desc:Ancor Communications Inc ASUS PB298 D7LMTF059917, persistent:true, default:true
workspace = 2, monitor:desc:Ancor Communications Inc ASUS PB298 D7LMTF059917, persistent:true
workspace = 3, monitor:desc:Ancor Communications Inc ASUS PB298 D7LMTF059917, persistent:true
workspace = 4, monitor:desc:Ancor Communications Inc ASUS PB298 D7LMTF059917, persistent:true
workspace = 5, monitor:desc:Ancor Communications Inc ASUS PB298 D7LMTF059917, persistent:true
workspace = 6, monitor:desc:Ancor Communications Inc ASUS PB298 D7LMTF059917, persistent:true
workspace = 7, monitor:desc:Ancor Communications Inc ASUS PB298 D7LMTF059917, persistent:true
workspace = 8, monitor:desc:Ancor Communications Inc ASUS PB298 D7LMTF059917, persistent:true
workspace = 9, monitor:desc:Iiyama North America PL2492H 11511037C7430, persistent:true, default:true
workspace = 10, monitor:desc:Iiyama North America PL2492H 11511037C7430, persistent:true
+73
View File
@@ -0,0 +1,73 @@
$font_size = 48
$font_size_small = 16
$image_size = 175
general {
hide_cursor = true
ignore_empty_input = true
}
background {
monitor =
path = screenshot
blur_passes = 2
blur_size = 2
noise = 0
}
label {
font_family = DejaVu Sans Serif
font_size = $font_size
text = $TIME12
text_align = center
position = 0, 275
halign = center
valign = center
}
label {
font_family = DejaVu Sans Serif
font_size = $font_size_small
text = cmd[] date "+%A, %B %d"
position = 0, 200
halign = center
valign = center
}
image {
monitor =
path = ~/.local/bin/wm/lock.png
size = $image_size
rounding = -1
border_size = 0
halign = center
valign = center
}
input-field {
monitor =
size = $image_size, $image_size
outline_thickness = 10
outer_color = rgba(255, 255, 255, 0.0)
inner_color = rgba(0, 0, 0, 0.0)
check_color = rgba(255, 255, 255, 1.0)
fail_color = rgba(255, 0, 0, 1.0)
font_family = DejaVu Sans Serif
font_color = rgba(255, 255, 255, 0.9)
placeholder_text =
fail_text =
hide_input = true
rounding = -1
fade_on_empty = false
halign = center
valign = center
}
+1
View File
@@ -0,0 +1 @@
splash = false
+10 -1
View File
@@ -1,13 +1,22 @@
[dmenu]
dmenu_command = /usr/bin/rofi -dmenu -i
pinentry = /usr/bin/pinentry
pinentry = /usr/bin/pinentry-gtk
[database]
database_1 = ~/documents/password.kdbx
keyfile_1 =
pw_cache_period_min = 60
autotype_default = {USERNAME}{TAB}{PASSWORD}{ENTER}
gui_editor = emacsclient
editor = vim
terminal = urxvt
# >>> session=xorg
type_library = xdotool
# <<<
# >>> session=wayland
# type_library = ydotool
# <<<
hide_groups = Recycle Bin
+1 -1
View File
@@ -31,7 +31,7 @@ sub-auto=fuzzy
sub-file-paths=ass:srt:sub:subs:subtitles:Subtitles
# [SUBTITLES LOOK] (for srt)
sub-font="Segoe UI Semibold"
sub-font="DejaVu Sans"
sub-font-size=48
sub-margin-y=36
sub-color="#FFFFFFFF"
+1
View File
@@ -6,4 +6,5 @@ require("packages").setup({
require("development"),
require("git"),
})
require("terminal").setup()
require("keybinds").setup()
+40 -36
View File
@@ -1,39 +1,43 @@
{
"Comment.nvim": { "branch": "master", "commit": "0236521ea582747b58869cb72f70ccfa967d2e89" },
"LuaSnip": { "branch": "master", "commit": "2dbef19461198630b3d7c39f414d09fb07d1fdd2" },
"auto-save.nvim": { "branch": "main", "commit": "e98cafef75271ec83dc84c933f124ab1bb675ef8" },
"cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
"cmp-nvim-lsp": { "branch": "main", "commit": "5af77f54de1b16c34b23cba810150689a3a90312" },
"cmp-nvim-lua": { "branch": "main", "commit": "f12408bdb54c39c23e67cab726264c10db33ada8" },
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
"cmp_luasnip": { "branch": "master", "commit": "05a9ab28b53f71d1aece421ef32fee2cb857a843" },
"dashboard-nvim": { "branch": "master", "commit": "04a48b2e230bc5e50dd099d839443703023b0472" },
"diffview.nvim": { "branch": "main", "commit": "3dc498c9777fe79156f3d32dddd483b8b3dbd95f" },
"friendly-snippets": { "branch": "main", "commit": "b8fae73a479ae0a1c54f5c98fa687ae8a0addc53" },
"gitsigns.nvim": { "branch": "main", "commit": "2c2463dbd82eddd7dbab881c3a62cfbfbe3c67ae" },
"lazy.nvim": { "branch": "main", "commit": "aedcd79811d491b60d0a6577a9c1701063c2a609" },
"lspkind.nvim": { "branch": "master", "commit": "1735dd5a5054c1fb7feaf8e8658dbab925f4f0cf" },
"lualine.nvim": { "branch": "master", "commit": "7d131a8d3ba5016229e8a1d08bf8782acea98852" },
"neodev.nvim": { "branch": "main", "commit": "b49b976cf2c28cd8283e9d74cb10885f6dd9e3d0" },
"neogit": { "branch": "master", "commit": "536b4cfc009fc6d8bd771f010f04d48204533fae" },
"nvim-base16": { "branch": "master", "commit": "2349e8357864bf0ef45d40f491f8e1e6465485b0" },
"nvim-cmp": { "branch": "main", "commit": "04e0ca376d6abdbfc8b52180f8ea236cbfddf782" },
"nvim-lspconfig": { "branch": "master", "commit": "41f40dc4b86f3e166cf08115f621001972565a20" },
"nvim-treesitter": { "branch": "master", "commit": "6444286cbf3a37862feaa7ff86456dd948f5cf8b" },
"nvim-treesitter-textobjects": { "branch": "master", "commit": "dd0b2036c3a27cb6e6486f8bd24188c6ca43af0b" },
"nvim-web-devicons": { "branch": "master", "commit": "7f30f2da3c3641841ceb0e2c150281f624445e8f" },
"omnisharp-extended-lsp.nvim": { "branch": "main", "commit": "4be2e8689067494ed7e5a4f1221adc31d1a07783" },
"plenary.nvim": { "branch": "master", "commit": "4f71c0c4a196ceb656c824a70792f3df3ce6bb6d" },
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
"LuaSnip": { "branch": "master", "commit": "3732756842a2f7e0e76a7b0487e9692072857277" },
"auto-save.nvim": { "branch": "main", "commit": "37c82fd548e3f5ffc2d9d020a65dac1044584f44" },
"cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" },
"cmp-nvim-lsp": { "branch": "main", "commit": "cbc7b02bb99fae35cb42f514762b89b5126651ef" },
"cmp-nvim-lua": { "branch": "main", "commit": "e3a22cb071eb9d6508a156306b102c45cd2d573d" },
"cmp-path": { "branch": "main", "commit": "c642487086dbd9a93160e1679a1327be111cbc25" },
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
"dashboard-nvim": { "branch": "master", "commit": "0775e567b6c0be96d01a61795f7b64c1758262f6" },
"diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" },
"friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" },
"gitsigns.nvim": { "branch": "main", "commit": "5813e4878748805f1518cee7abb50fd7205a3a48" },
"lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" },
"lspkind.nvim": { "branch": "master", "commit": "3ddd1b4edefa425fda5a9f95a4f25578727c0bb3" },
"lspsaga.nvim": { "branch": "main", "commit": "8efe00d6aed9db6449969f889170f1a7e43101a1" },
"lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" },
"neodev.nvim": { "branch": "main", "commit": "46aa467dca16cf3dfe27098042402066d2ae242d" },
"neogit": { "branch": "master", "commit": "d8bf9102692250193b855acd9025a826f1af2729" },
"nvim-base16": { "branch": "master", "commit": "e05bcb99951d8ae4ecbf4ae053922fd2be6263a5" },
"nvim-cmp": { "branch": "main", "commit": "d97d85e01339f01b842e6ec1502f639b080cb0fc" },
"nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" },
"nvim-lspconfig": { "branch": "master", "commit": "d696e36d5792daf828f8c8e8d4b9aa90c1a10c2a" },
"nvim-treesitter": { "branch": "main", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
"nvim-treesitter-textobjects": { "branch": "master", "commit": "5ca4aaa6efdcc59be46b95a3e876300cfead05ef" },
"nvim-web-devicons": { "branch": "master", "commit": "6788013bb9cb784e606ada44206b0e755e4323d7" },
"omnisharp-extended-lsp.nvim": { "branch": "main", "commit": "a47388e5417e7f1cfa6962cc441a23c4c5fb2151" },
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
"project.nvim": { "branch": "main", "commit": "8c6bad7d22eef1b71144b401c9f74ed01526a4fb" },
"rainbow-delimiters.nvim": { "branch": "master", "commit": "ca8d5ee2b4ee1eec491040a7601d366ddc8a2e02" },
"sqlite.lua": { "branch": "master", "commit": "b7e28c8463254c46a8e61c52d27d6a2040492fc3" },
"telescope-all-recent.nvim": { "branch": "main", "commit": "c1a83b96de07ed4c27af5a46cf8b10c8ee802973" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "6c921ca12321edaa773e324ef64ea301a1d0da62" },
"telescope-recent-files": { "branch": "main", "commit": "6893cda11625254cc7dc2ea76e0a100c7deeb028" },
"telescope.nvim": { "branch": "0.1.x", "commit": "d90956833d7c27e73c621a61f20b29fdb7122709" },
"todo-comments.nvim": { "branch": "main", "commit": "833d8dd8b07eeda37a09e99460f72a02616935cb" },
"trouble.nvim": { "branch": "main", "commit": "f1168feada93c0154ede4d1fe9183bf69bac54ea" },
"ultimate-autopair.nvim": { "branch": "development", "commit": "07c9da3e7722107163b68ecc5e0141fdd825449d" },
"vim-sleuth": { "branch": "master", "commit": "1cc4557420f215d02c4d2645a748a816c220e99b" },
"which-key.nvim": { "branch": "main", "commit": "4433e5ec9a507e5097571ed55c02ea9658fb268a" }
"rainbow-delimiters.nvim": { "branch": "master", "commit": "8aafe2cbd89cd4090f573a98cab6b20366576fde" },
"sqlite.lua": { "branch": "master", "commit": "50092d60feb242602d7578398c6eb53b4a8ffe7b" },
"telescope-all-recent.nvim": { "branch": "main", "commit": "e437f60ea468268e49ffdc0c9ed7c5ba384e63cf" },
"telescope-file-browser.nvim": { "branch": "master", "commit": "3610dc7dc91f06aa98b11dca5cc30dfa98626b7e" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "6fea601bd2b694c6f2ae08a6c6fab14930c60e2c" },
"telescope-recent-files": { "branch": "main", "commit": "eb190c0baded1cbfa9d8767c817b054377683163" },
"telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" },
"todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" },
"toggleterm.nvim": { "branch": "main", "commit": "9a88eae817ef395952e08650b3283726786fb5fb" },
"trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" },
"ultimate-autopair.nvim": { "branch": "development", "commit": "5835876b57901d81ebbeb3cd6ad71aaed66f82d7" },
"vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" },
"which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" }
}
+2
View File
@@ -1,4 +1,6 @@
require("core.leader-key")
require("core.config")
require("core.buffers")
require("core.autocommands")
require("core.globals")
require("core.filetypes")
+32 -2
View File
@@ -1,3 +1,5 @@
local F = require("core.functions")
--------------------------------------------
--- Commands ---
@@ -13,10 +15,9 @@ vim.cmd [[
--- Autocommands ---
-- Cut off trailing whitespace and trailing blank lines
local core = require("core.functions")
vim.api.nvim_create_autocmd({ "BufWritePre" }, {
pattern = "*",
callback = core.trim_buffer,
callback = F.trim_buffer,
})
-- Highlight on yank
@@ -27,3 +28,32 @@ vim.api.nvim_create_autocmd("TextYankPost", {
group = highlight_group,
callback = function() vim.highlight.on_yank() end,
})
-- Show message when autosaving
local autosave_group = vim.api.nvim_create_augroup("autosave", {})
vim.api.nvim_create_autocmd("User", {
pattern = "AutoSaveWritePost",
group = autosave_group,
callback = function(opts)
if opts.data.saved_buffer ~= nil then
local filename = vim.api.nvim_buf_get_name(opts.data.saved_buffer)
vim.notify("Wrote " .. filename, vim.log.levels.INFO)
end
end,
})
vim.api.nvim_create_autocmd("BufWinEnter", {
callback = function()
-- Buffer tracking
require("core.buffers").add_buffer()
end,
desc = "Track all full window buffers visited",
})
vim.api.nvim_create_autocmd({ "BufDelete", "BufWipeout" }, {
callback = function(opts)
-- Buffer tracking
require("core.buffers").remove_buffer(opts.match)
end,
desc = "Track all full window buffers killed",
})
+347
View File
@@ -0,0 +1,347 @@
local F = require("core.functions")
-- Module for managing buffers, these are used for navigation
local M = {}
-- Buffers, categorized into groups
-- {
-- { group = "Project", buffers = { "buffer1", "buffer2" }, active_index = 1 },
-- { group = "Other", buffers = { "buffer3", "buffer4" }, active_index = 1 },
-- }
M.buffers = {}
M.buffer_default_group = "Other"
M.buffer_matcher = {
-- match = truthy, function() -> thruthy, or string matching buffer filename
-- group = string, function() -> string
{ match = F.find_project_root, group = F.find_project_root },
{ match = true, group = "Other" }, -- default
}
--------------------------------------------
local get_buffer_name = function()
local buf = vim.api.nvim_get_current_buf()
local buffer_name = vim.api.nvim_buf_get_name(buf)
if not buffer_name or buffer_name == "" then return nil end
return buffer_name
end
M.add_buffer = function()
local buffer_name = get_buffer_name()
if not buffer_name then return end
-- Evaluate group
local eval_group = function(config_group)
if not config_group then return M.buffer_default_group end
if type(config_group) == "function" then return config_group() end
return config_group
end
-- Add if buffer does not exist yet
local add = function(config_group)
local group = eval_group(config_group)
local index
for i, buffer_group in ipairs(M.buffers) do
if buffer_group.group == group then index = i end
end
-- Group is new entirely, so we only have 1 buffer
if not index then
table.insert(M.buffers, { group = group, buffers = { buffer_name }, active_index = 1 })
return #M.buffers, 1 -- group index, buffer index
end
-- Buffer previously added, set active
for i, buffer in ipairs(M.buffers[index].buffers) do
if buffer == buffer_name then
M.buffers[index].active_index = i
return index, i -- group index, buffer index
end
end
-- Buffer is new, add it to the list
table.insert(M.buffers[index].buffers, buffer_name)
local count = #M.buffers[index].buffers
M.buffers[index].active_index = count
return index, count -- group index, buffer index
end
-- Walk matcher configuration
local matcher = M.buffer_matcher or {}
if matcher and type(matcher) == "function" then
matcher = matcher()
end
if #matcher == 0 then add(M.buffer_default_group) end
for _, config in ipairs(M.buffer_matcher) do
if type(config.match) == "function" and config.match() then
return add(config.group)
end
-- Match path's filename
if type(config.match) == "string" and config.match == buffer_name:match("([^/]+)$") then
return add(config.group)
end
if type(config.match) == "boolean" and config.match then
return add(config.group)
end
end
return add(M.buffer_default_group)
end
local get_group_from_buffer = function(buffer_name)
for i, buffer_group in ipairs(M.buffers) do
for j, buffer in ipairs(buffer_group.buffers) do
if buffer == buffer_name then
return i, j -- group index, buffer index
end
end
end
return nil
end
local focus_buffer = function(new_buffer_name)
for _, buffer in ipairs(vim.api.nvim_list_bufs()) do
if vim.api.nvim_buf_get_name(buffer) == new_buffer_name then
vim.api.nvim_set_current_buf(buffer)
break
end
end
end
M.remove_buffer = function(buffer_name)
if not buffer_name or buffer_name == "" then return end
local group_index, buffer_index = get_group_from_buffer(buffer_name)
if not group_index or not buffer_index then return end
local buffer_group = M.buffers[group_index]
-- Remove the buffer and decrease active index
table.remove(buffer_group.buffers, buffer_index)
buffer_group.active_index = math.max(buffer_group.active_index - 1, 1)
local new_buffer_name = buffer_group.buffers[buffer_group.active_index]
-- If there are now no buffers in the group, delete the group
if #buffer_group.buffers == 0 then
table.remove(M.buffers, group_index)
if #M.buffers == 0 then return end
if #M.buffers < group_index then group_index = group_index - 1 end
new_buffer_name = M.buffers[group_index].buffers[M.buffers[group_index].active_index]
end
-- Make the new index the active buffer
focus_buffer(new_buffer_name)
end
local buffer_action_in_active_group = function(action, direction)
local buffer_name = get_buffer_name()
if not buffer_name then return end
-- Get active group from the current buffer
local group_index, buffer_index = get_group_from_buffer(buffer_name)
if not group_index then group_index, buffer_index = M.add_buffer() end
-- Get buffer set
local buffers = M.buffers[group_index].buffers
if #buffers < 2 then return end
-- Determine the other index
local other_index = buffer_index + direction
if buffer_index == 1 and direction == -1 then
other_index = #buffers
elseif buffer_index == #buffers and direction == 1 then
other_index = 1
end
if action == "move" then
for _, buffer in ipairs(vim.api.nvim_list_bufs()) do
-- TODO: Probably not needed if the other autocommands are implemented
-- Remove inactive buffers
if not vim.api.nvim_buf_is_loaded(buffer) then
for i, group_buffer in ipairs(buffers) do
if buffer == group_buffer then
table.remove(buffers, i)
if i > 1 and i <= other_index then
other_index = other_index - 1
end
end
end
goto continue
end
-- Make buffer active
if vim.api.nvim_buf_get_name(buffer) == buffers[other_index] then
vim.api.nvim_set_current_buf(buffer)
M.buffers[group_index].active_index = other_index
break
end
::continue::
end
elseif action == "swap" then
local tmp = buffers[other_index]
buffers[other_index] = buffers[buffer_index]
buffers[buffer_index] = tmp
end
M.buffers[group_index].buffers = buffers
end
M.buffer_move_left = function()
buffer_action_in_active_group("move", -1)
end
M.buffer_move_right = function()
buffer_action_in_active_group("move", 1)
end
M.buffer_swap_left = function()
buffer_action_in_active_group("swap", -1)
end
M.buffer_swap_right = function()
buffer_action_in_active_group("swap", 1)
end
--------------------------------------------
-- Group move
local buffer_group_move = function(direction)
local buffer_name = get_buffer_name()
if not buffer_name then return end
-- Get active group from the current buffer
local group_index, _ = get_group_from_buffer(buffer_name)
if not group_index then group_index, _ = M.add_buffer() end
-- Check groups bounds
if #M.buffers < 2 then return end
-- Determine the other index
local other_index = group_index + direction
if group_index == 1 and direction == -1 then
other_index = #M.buffers
elseif group_index == #M.buffers and direction == 1 then
other_index = 1
end
-- Get active index from other group
local other_active_index = M.buffers[other_index].active_index
-- Make buffer active
-- TODO: What do if this buffer no longer exists?
local other_buffer = M.buffers[other_index].buffers[other_active_index]
focus_buffer(other_buffer)
end
M.buffer_group_move_up = function()
buffer_group_move(-1)
end
M.buffer_group_move_down = function()
buffer_group_move(1)
end
--------------------------------------------
-- Telescope functionss
local pick = function(title, items, entry_maker, action)
local actions = require("telescope.actions")
local action_state = require("telescope.actions.state")
local conf = require("telescope.config").values
local finders = require("telescope.finders")
local pickers = require("telescope.pickers")
pickers.new({}, {
prompt_title = title,
finder = finders.new_table {
results = items,
entry_maker = entry_maker,
},
previewer = false,
sorter = conf.generic_sorter({}),
attach_mappings = function(prompt_bufnr)
actions.select_default:replace(function()
actions.close(prompt_bufnr)
local selection = action_state.get_selected_entry()
action(selection)
end)
return true
end,
}):find()
end
M.buffer_pick_buffer = function()
local buffer_name = get_buffer_name()
if not buffer_name then return end
-- Get active group from the current buffer
local group_index, _ = get_group_from_buffer(buffer_name)
if not group_index then group_index, _ = M.add_buffer() end
-- Get all buffers from the active group
local buffers = {}
for i, buffer in ipairs(M.buffers[group_index].buffers) do
table.insert(buffers, { key = buffer, value = tostring(i) })
end
pick("Group buffers",
buffers,
function(buffer)
-- Only show last part of the path
local display = buffer.key:match("^.+/(.+)$") or buffer.key
return {
display = display, -- shown in the picker
ordinal = buffer.value, -- used for sorting/filtering
value = buffer.value, -- actual value
}
end,
function(selection)
local new_buffer_name = M.buffers[group_index].buffers[tonumber(selection.value)]
-- Make new buffer active
focus_buffer(new_buffer_name)
end
)
end
M.buffer_pick_group = function()
-- Get all groups
local groups = {}
for i, buffer_group in ipairs(M.buffers) do
table.insert(groups, { key = buffer_group.group, value = tostring(i) })
end
pick("Groups",
groups,
function(group)
-- Only show last part of the path
local display = group.key:match("^.+/(.+)$") or group.key
return {
display = display, -- shown in the picker
ordinal = group.value, -- used for sorting/filtering
value = group.value, -- actual value
}
end,
function(selection)
local buffer_group = M.buffers[tonumber(selection.value)]
local new_buffer_name = buffer_group.buffers[buffer_group.active_index]
-- Make new buffer active
focus_buffer(new_buffer_name)
end
)
end
return M
+2
View File
@@ -44,5 +44,7 @@ vim.opt.shadafile = vim.fn.stdpath("cache") .. "/netrwhist"
vim.opt.colorcolumn = "81"
vim.opt.completeopt = "menuone,noselect"
vim.opt.cursorline = true
vim.opt.fillchars = vim.opt.fillchars + "diff:"
vim.opt.showtabline = 0
vim.opt.termguicolors = true
vim.opt.title = true
+5
View File
@@ -0,0 +1,5 @@
vim.filetype.add({
extension = {
flw = "lua",
},
})
+19 -10
View File
@@ -6,13 +6,18 @@ M.is_buffer_a_file = function()
return buffer_name ~= "" and vim.fn.filereadable(buffer_name) == 1
end
M.normalize_path = function(path)
if not path then return nil end
return IS_WINDOWS() and path:gsub("\\", "/") or path
end
M.get_file_path = function()
if not M.is_buffer_a_file() then
return nil
end
local file_path = vim.fn.expand("%:p")
return vim.fn.fnamemodify(file_path, ":h") .. "/"
return M.normalize_path(vim.fn.fnamemodify(file_path, ":h")) .. "/"
end
M.get_netrw_path = function() -- b:netrw_curdir
@@ -20,26 +25,30 @@ M.get_netrw_path = function() -- b:netrw_curdir
return nil
end
return vim.fn.fnamemodify(vim.fn.bufname(), ":p")
return M.normalize_path(vim.fn.fnamemodify(vim.fn.bufname(), ":p"))
end
M.get_current_directory = function()
return M.get_file_path() or M.get_netrw_path() or vim.fn.getcwd()
return M.get_file_path() or M.get_netrw_path() or M.normalize_path(vim.fn.getcwd())
end
M.find_project_root = function()
local current_directory = M.get_current_directory()
if current_directory:match("^term://") then return nil, current_directory end
local directory = current_directory
while directory ~= "/" do
local git_directory = directory .. "/.git"
local project_file = directory .. "/.project"
if vim.fn.isdirectory(git_directory) == 1 or vim.fn.filereadable(project_file) == 1 then
return directory
while directory ~= "/" and not directory:match("^%a:[/\\]?$") do
local git_path = vim.loop.fs_stat(directory .. "/.git")
if git_path then
return M.normalize_path(directory:gsub("/$", "")) -- remove trailing slash
end
directory = vim.fn.fnamemodify(directory, ":h")
local project_file = vim.loop.fs_stat(directory .. "/.project")
if project_file and project_file.type == "file" then
return M.normalize_path(directory:gsub("/$", "")) -- remove trailing slash
end
directory = M.normalize_path(vim.fn.fnamemodify(directory, ":h"))
end
return nil, current_directory
+5 -1
View File
@@ -1,3 +1,7 @@
IS_WINDOWS = function()
return string.find(vim.loop.os_uname().sysname, "NT")
end
-- Usage:
-- :lua P("Hello World!")
P = function(v)
@@ -15,5 +19,5 @@ R = function(name)
end
LOG = function(v)
vim.fn.writefile({ vim.inspect(v) }, "/tmp/nvim-log", "a")
vim.fn.writefile({ vim.inspect(v) }, vim.fn.stdpath("cache") .. "/log", "a")
end
+44
View File
@@ -66,6 +66,8 @@ return {
{ -- https://github.com/neovim/nvim-lspconfig
"neovim/nvim-lspconfig",
dependencies = {
-- Improve the built-in LSP UI
"nvimdev/lspsaga.nvim",
-- Additional lua configuration, makes Nvim stuff amazing!
"folke/neodev.nvim",
-- C# "Goto Definition" with decompilation support
@@ -73,6 +75,7 @@ return {
},
config = function()
-- Setup neovim Lua configuration
require("lspsaga").setup() -- ?? does this do anything with doc hover
require("neodev").setup()
-- Vim process
@@ -103,6 +106,40 @@ return {
["textDocument/definition"] = require('omnisharp_extended').handler,
},
},
ts_ls = {
init_options = {
plugins = {
{
name = '@vue/typescript-plugin',
location = '/home/rick/.cache/.bun/install/global/node_modules/@vue/language-server',
languages = { 'vue' },
},
},
},
filetypes = { 'javascript', 'javascriptreact', 'javascript.jsx', 'typescript', 'typescriptreact', 'typescript.tsx', 'vue', },
-- filetypes = { 'typescript', 'javascript', 'javascriptreact', 'typescriptreact', 'vue' },
-- requires: bun install -g typescript-language-server
-- TODO: Update which-key config, maybe other packages
-- Sources:
-- https://github.com/vuejs/language-tools?tab=readme-ov-file#hybrid-mode-configuration-requires-vuelanguage-server-version-200
-- https://github.com/neovim/nvim-lspconfig/blob/master/lua/lspconfig/configs/ts_ls.lua#L4
},
-- volar = {
-- -- init_options = {
-- -- vue = {
-- -- hybridMode = false,
-- -- },
-- -- },
-- },
-- volar = {
-- -- init_options = {
-- -- typescript = {
-- -- serverPath = '/home/rick/.cache/.bun/install/global/node_modules/typescript/lib//tsserverlibrary.js'
-- -- }
-- -- },
-- -- filetypes = {'typescript', 'javascript', 'javascriptreact', 'typescriptreact', 'vue', 'json'}
-- },
vue_ls = {},
}
-- nvim-cmp supports additional completion capabilities, so broadcast that to servers
@@ -114,8 +151,15 @@ return {
capabilities = capabilities,
on_attach = require("keybinds").lspconfig_on_attach,
})
-- P(server)
-- P(opts)
if vim.lsp.config then
vim.lsp.config(server, opts)
vim.lsp.enable(server)
else
require("lspconfig")[server].setup(opts)
end
end
end,
},
-6
View File
@@ -43,12 +43,6 @@ return {
cmd = "ASToggle", -- defer, until run command
event = { "InsertLeave", "TextChanged" }, -- defer, until event trigger
opts = {
execution_message = {
enabled = true,
message = function()
return [["]] .. vim.fn.bufname() .. [[" written]]
end,
},
debounce_delay = 5000, -- delay for `defer_save`, in ms
condition = function(buf)
-- Dont save special-buffers
+1
View File
@@ -26,6 +26,7 @@ return {
"nvim-telescope/telescope.nvim",
"sindrets/diffview.nvim", -- diff integration
-- { "sindrets/diffview.nvim", opts = { enhanced_diff_hl = true } }, -- diff integration
},
opts = {},
},
+15 -11
View File
@@ -13,9 +13,9 @@ end
-- Set which-key key section description
M.wk = function(keybind, description, bufnr)
require("which-key").register({
[keybind] = { name = description, _ = "which_key_ignore" },
}, { mode = { "n", "v" }, buffer = bufnr }) -- bufnr = nil means global
require("which-key").add({
{ keybind, group = description, mode = { "n", "v" }, buffer = bufnr },
})
end
M.buffer_close = function()
@@ -33,7 +33,7 @@ end
M.file_config = function()
builtin.find_files({
prompt_title = "Nvim Config",
cwd = "~/.config/nvim",
cwd = vim.fn.stdpath("config"),
hidden = true,
no_ignore = true,
-- path_display = { "shorten" },
@@ -41,7 +41,7 @@ M.file_config = function()
end
M.file_find = function()
builtin.find_files({
telescope.extensions.file_browser.file_browser({
cwd = F.get_current_directory(),
hidden = true,
no_ignore = true,
@@ -49,18 +49,13 @@ M.file_find = function()
end
M.file_find_home = function()
builtin.find_files({
telescope.extensions.file_browser.file_browser({
cwd = "~",
hidden = true,
no_ignore = true,
})
end
M.file_find_root = function()
local cwd = F.get_current_directory():gsub("^/", "")
builtin.find_files({ default_text = cwd, cwd = "/" })
end
M.file_find_recent = function()
telescope.extensions.recent_files.pick()
end
@@ -228,6 +223,10 @@ M.search_buffer = function()
})
end
M.toggle_term = function()
vim.api.nvim_command("ToggleTerm")
end
-- TODO: Temporary copy/pasted until project_nvim exposes this function
-- https://github.com/ahmedkhalf/project.nvim/issues/145
-- TODO: Create a Telescope extension out of this, for telescope-all-recent
@@ -302,8 +301,13 @@ M.vc_select_repo = function()
end
M.vc_status = function()
if F.find_project_root() then
-- Open the repository of the current file
require("neogit").open({ cwd = "%:p:h" })
else
-- Pick a project to open
M.vc_select_repo()
end
end
return M
+66 -24
View File
@@ -1,6 +1,7 @@
local K = vim.keymap.set
local builtin
local bs = require("core.buffers")
local wk = require("which-key")
local F = require("keybind-functions")
@@ -57,6 +58,18 @@ M.setup = function()
K("i", "<BS>", F.hungry_delete_backspace())
K("i", "<Del>", F.hungry_delete())
-- Navigation
K("n", "<M-h>", bs.buffer_move_left)
K("n", "<M-j>", bs.buffer_group_move_down)
K("n", "<M-k>", bs.buffer_group_move_up)
K("n", "<M-l>", bs.buffer_move_right)
K("n", "<M-H>", bs.buffer_swap_left)
K("n", "<M-L>", bs.buffer_swap_right)
-- Terminal
K("n", "<C-\\>", F.toggle_term)
K("t", "<C-\\>", F.toggle_term)
----------------------------------------
--- Leader keys ---
@@ -64,8 +77,9 @@ M.setup = function()
K("n", "<leader><space>", builtin.commands, { desc = "Execute command" })
-- F.wk("<leader>b", "buffer/bookmark")
F.wk("<leader>b", "buffer/bookmark")
K("n", "<leader>bb", builtin.buffers, { desc = "Switch buffer" })
K("n", "<leader>bB", bs.buffer_pick_buffer, { desc = "Switch tab group buffer" })
K("n", "<leader>bd", F.buffer_dashboard, { desc = "Dashboard" })
@@ -85,7 +99,6 @@ M.setup = function()
K("n", "<leader>fc", F.file_config, { desc = "Config file" })
K("n", "<leader>ff", F.file_find, { desc = "Find file" })
K("n", "<leader>fh", F.file_find_home, { desc = "Find file in ~" })
K("n", "<leader>f/", F.file_find_root, { desc = "Find file in root" })
K("n", "<leader>fr", F.file_find_recent, { desc = "Find recent file" })
K("n", "<leader>fs", F.file_save, { desc = "Save file" })
@@ -113,35 +126,40 @@ M.setup = function()
K("n", "<leader>sq", ":nohlsearch<CR>", { desc = "Stop search", silent = true })
F.wk("<leader>t", "tabs/toggle")
K("n", "<leader>tg", bs.buffer_pick_group, { desc = "Switch tab group" })
F.wk("<leader>v", "git") -- version control
K("n", "<leader>vr", F.vc_select_repo, { desc = "Select repo" })
K("n", "<leader>vv", F.vc_status, { desc = "Neogit status" })
K({ "n", "v" }, "<leader>w", "<C-W>", { remap = true }) -- keymap and which-key should *both* be triggered
wk.register({
w = {
name = "window",
s = "Split window",
v = "Split window vertically",
w = "Switch windows",
q = "Quit a window",
o = "Close all other windows",
T = "Break out into a new tab",
x = "Swap current with next",
["-"] = "Decrease height",
["+"] = "Increase height",
["<lt>"] = "Decrease width",
[">"] = "Increase width",
["|"] = "Max out the width",
["_"] = "Max out the height",
["="] = "Equally high and wide",
h = "Go to the left window",
l = "Go to the right window",
k = "Go to the up window",
j = "Go to the down window",
wk.add({
{
mode = { "n", "v" },
{ "<leader>w", group = "window" },
{ "<leader>w+", desc = "Increase height" },
{ "<leader>w-", desc = "Decrease height" },
{ "<leader>w<", desc = "Decrease width" },
{ "<leader>w=", desc = "Equally high and wide" },
{ "<leader>w>", desc = "Increase width" },
{ "<leader>wT", desc = "Break out into a new tab" },
{ "<leader>w_", desc = "Max out the height" },
{ "<leader>wh", desc = "Go to the left window" },
{ "<leader>wj", desc = "Go to the down window" },
{ "<leader>wk", desc = "Go to the up window" },
{ "<leader>wl", desc = "Go to the right window" },
{ "<leader>wo", desc = "Close all other windows" },
{ "<leader>wq", desc = "Quit a window" },
{ "<leader>ws", desc = "Split window" },
{ "<leader>wv", desc = "Split window vertically" },
{ "<leader>ww", desc = "Switch windows" },
{ "<leader>wx", desc = "Swap current with next" },
{ "<leader>w|", desc = "Max out the width" },
},
}, { mode = { "n", "v" }, prefix = "<leader>", preset = true })
})
-- https://github.com/folke/which-key.nvim/issues/270
-- https://github.com/folke/which-key.nvim/blob/main/lua/which-key/plugins/presets/misc.lua
end
@@ -160,6 +178,9 @@ M.lspconfig_on_attach = function(_, bufnr)
nnoremap("<leader>lf", F.lsp_format_buffer, "Format buffer")
nnoremap("<leader>lr", vim.lsp.buf.rename, "Rename")
nnoremap("<leader>ld", "<cmd>Lspsaga hover_doc<CR>", "Show documentation")
-- vim.keymap.set("n", "<leader>ld", "<cmd>Lspsaga hover_doc<CR>", { desc = "Show documentation" })
F.wk("<leader>lg", "goto", bufnr)
nnoremap("<leader>lga", builtin.lsp_dynamic_workspace_symbols, "Workspace symbols")
nnoremap("<leader>lgd", vim.lsp.buf.declaration, "Declaration")
@@ -219,13 +240,34 @@ end
M.telescope_default_mappings = function()
local actions = require("telescope.actions")
return {
n = {
["<M-h>"] = actions.close,
["<M-j>"] = actions.move_selection_next,
["<M-k>"] = actions.move_selection_previous,
["<M-l>"] = actions.select_default,
},
i = {
["<M-h>"] = actions.close,
["<M-j>"] = actions.move_selection_next,
["<M-k>"] = actions.move_selection_previous,
["<M-l>"] = actions.select_default,
["<Tab>"] = actions.select_default,
}
}
end
-- Keybindings for toggleterm.nvim
M.toggleterm_nvim = function()
local keymaps = function()
local opts = { buffer = 0 }
K("t", "<Esc>", [[<C-\><C-n>]], opts)
end
vim.api.nvim_create_autocmd("TermOpen", {
pattern = "term://*toggleterm#*",
callback = keymaps,
})
end
return M
+15 -5
View File
@@ -9,12 +9,13 @@ return {
-- Fuzzy Finder Algorithm which requires local dependencies to be built.
{
"nvim-telescope/telescope-fzf-native.nvim",
build = "make",
build = IS_WINDOWS() and "mingw32-make" or "make",
cond = function()
return vim.fn.executable "make" == 1
return vim.fn.executable(IS_WINDOWS() and "mingw32-make" or "make") == 1
end,
},
-- Extensions
"nvim-telescope/telescope-file-browser.nvim",
"smartpde/telescope-recent-files",
},
extensions = {
@@ -28,7 +29,9 @@ return {
layout_strategy = "config",
layout_config = {
height = 10, -- amount of results
config = { -- apply settings to the "config" layout
search_condensed = true,
}
},
border = true,
@@ -36,10 +39,17 @@ return {
path = vim.fn.stdpath("cache") .. "/telescope_history",
},
mappings = require("keybinds").telescope_default_mappings()
mappings = require("keybinds").telescope_default_mappings(),
},
extensions = {
file_browser = {
hide_parent_dir = true, -- hide "../"
prompt_path = true, -- set path as prompt prefix
},
},
})
require("telescope").load_extension("fzf")
require("telescope").load_extension "file_browser"
require("telescope").load_extension("recent_files")
--- ┌──────────────────────────────────────────────────┐
@@ -72,7 +82,7 @@ return {
results.borderchars = { "", "", "", "", "", "", "", "" }
local bs = picker.window.border and 2 or 0
local search_condensed = bs ~= 0 and layout_config.search_condensed and 2 or 0
local search_condensed = bs ~= 0 and layout_config.config.search_condensed and 2 or 0
-- Height
prompt.height = 1
@@ -83,7 +93,7 @@ return {
-- Width
prompt.width = max_columns - (bs ~= 0 and search_condensed == 0 and bs or 0)
results.width = max_columns - (bs ~= 0 and search_condensed == 0 and bs or 0)
preview.width = math.floor(max_columns * 0.5)
preview.width = math.floor(max_columns * 0.75)
-- Line (position), coordinates start at top-left
prompt.line = max_lines - results.height + search_condensed - bs -- take overlapping border into account
+36
View File
@@ -0,0 +1,36 @@
-- Module for managing popup terminal
local M = {}
M.persistent_term = nil
local create_command = function(name, command)
if not name or type(name) ~= "string" then return end
vim.api.nvim_create_user_command(name, function()
local cmd = type(command) == "function" and command() or command
M.send_cmd_to_term(cmd)
end, {})
end
M.setup = function()
-- Setup keybinds
require("keybinds").toggleterm_nvim()
create_command("RunScript", "sleep 2 && ls /")
create_command("ScanScript", function()
local file_path = vim.fn.expand("%:p")
LOG(file_path)
return "ls"
end)
end
M.send_cmd_to_term = function(cmd)
local term = require("toggleterm.terminal").Terminal
local default = term:new({ id = 1 })
if not default:is_open() then default:open() end
default:send(cmd)
end
return M
+66 -14
View File
@@ -13,22 +13,38 @@ return {
vim.cmd.colorscheme "base16-tomorrow-night"
local colors = require("base16-colorscheme").colors
-- local blue_m1 = "#9cc4e6"
local blue = colors.base0D -- #81a2be
-- local blue_p1 = "#5f819d"
local blue_p2 = "#445666"
local blue_p3 = "#2a3640"
local cyan = colors.base0C -- #8abeb7
local fg = colors.base05 -- #c5c8c6
local green_dark = "#8c9440"
local fg_dark = "#515151"
-- local green = colors.base0B -- #b5bd68
local green_p1 = "#8c9440"
-- local green_p2 = "#5f875f"
local green_bg = "#404324"
-- local orange = colors.base09 -- #de935f
-- local magenta = colors.base0E -- #b294bb
local red = colors.base08 -- #cc6666
local red_bg = "#4e2626"
local yellow = colors.base0A -- #f0c674
-- Cursor
vim.api.nvim_command("highlight CursorLineNr guifg=" .. yellow .. " gui=bold")
-- Diffview
vim.api.nvim_command("highlight DiffviewDiffAdd guibg=" .. green_bg)
vim.api.nvim_command("highlight DiffviewDiffChange guibg=" .. blue_p3) -- Unchanged part on a change line
vim.api.nvim_command("highlight DiffviewDiffDelete guibg=" .. red_bg .. " guifg=" .. fg_dark)
vim.api.nvim_command("highlight DiffviewDiffText guibg=" .. blue_p2) -- Changed part on a change line
-- Git gutter
vim.api.nvim_command("highlight GitSignsAdd guifg=" .. green_dark)
vim.api.nvim_command("highlight GitSignsAdd guifg=" .. green_p1)
vim.api.nvim_command("highlight GitSignsChange guifg=" .. yellow)
-- Rainbow delimiters
vim.api.nvim_command("highlight RainbowDelimiterBlue guifg=" .. blue)
vim.api.nvim_command("highlight RainbowDelimiterCyan guifg=" .. cyan)
vim.api.nvim_command("highlight RainbowDelimiterGreen guifg=" .. green_dark)
vim.api.nvim_command("highlight RainbowDelimiterGreen guifg=" .. green_p1)
vim.api.nvim_command("highlight RainbowDelimiterOrange guifg=" .. fg)
vim.api.nvim_command("highlight RainbowDelimiterRed guifg=" .. red)
vim.api.nvim_command("highlight RainbowDelimiterYellow guifg=" .. yellow)
@@ -48,8 +64,21 @@ return {
globalstatus = true,
},
sections = {
lualine_b = { "branch" },
lualine_x = { "diagnostics", "encoding", "fileformat", "filetype" },
lualine_a = { "mode" },
lualine_b = { "encoding", "filename" },
lualine_c = {
{
-- TODO: nvim alternate file stuff and closing files is busted
"project",
fmt = function()
local path = require("core.functions").find_project_root() or ""
return path:match("([^/]+)$")
end,
},
},
lualine_x = { "diagnostics", "fileformat" },
lualine_y = { "filetype" },
lualine_z = { "progress", "location" },
},
},
},
@@ -64,14 +93,6 @@ return {
opts = {
config = {
header = {
-- " ",
-- " ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗ ",
-- " ████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║ ",
-- " ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║ ",
-- " ██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║ ",
-- " ██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║ ",
-- " ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝ ",
-- "____________________________________________________",
" . . ",
" ';;,. ::' ",
" ,:::;,, :ccc, ",
@@ -85,7 +106,9 @@ return {
" .;ooo: ;cclooo:. ",
" .;oc 'coo;. ",
" .' .,. ",
"____________________________________________________",
"",
" _______________________________________________________",
"",
"",
},
shortcut = {
@@ -154,4 +177,33 @@ return {
end,
},
-- Rainbow-mode
{ -- https://github.com/norcalli/nvim-colorizer.lua
"norcalli/nvim-colorizer.lua",
opts = {},
}, -- :ColorizerToggle
-- Popup terminal
{
"akinsho/toggleterm.nvim",
config = function()
vim.cmd [[let &shellcmdflag = '-s']] -- required for Windows
require("toggleterm").setup({
auto_scroll = true,
direction = "float",
float_opts = {
border = "curved",
row = function() return vim.o.lines - 4 end,
width = function() return vim.o.columns - 6 end,
height = 20,
winblend = 0,
},
hide_numbers = true,
open_mapping = nil,
persist_mode = true,
size = 20,
start_in_insert = true,
})
end,
}
}
+7
View File
@@ -0,0 +1,7 @@
{
"export-settings-ini": true,
"export-gtkrc-20": true,
"export-index-theme": true,
"export-xsettingsd": true,
"export-gtk4-symlinks": true
}
+1 -1
View File
@@ -3,7 +3,7 @@ color_scheme_path=/usr/share/qt5ct/colors/darker.conf
custom_palette=false
icon_theme=Arc
standard_dialogs=default
style=qt5gtk2
style=kvantum
[Fonts]
fixed=@Variant(\0\0\0@\0\0\0\x16\0\x44\0\x65\0j\0\x61\0V\0u\0 \0S\0\x61\0n\0s@$\0\0\0\0\0\0\xff\xff\xff\xff\x5\x1\0\x32\x10)
+3 -3
View File
@@ -3,11 +3,11 @@ color_scheme_path=/usr/share/qt6ct/colors/darker.conf
custom_palette=false
icon_theme=Arc
standard_dialogs=default
style=qt6gtk2
style=kvantum
[Fonts]
fixed=@Variant(\0\0\0@\0\0\0\x16\0\x44\0\x65\0j\0\x61\0V\0u\0 \0S\0\x61\0n\0s@$\0\0\0\0\0\0\xff\xff\xff\xff\x5\x1\0\x32\x10)
general=@Variant(\0\0\0@\0\0\0\x16\0\x44\0\x65\0j\0\x61\0V\0u\0 \0S\0\x61\0n\0s@$\0\0\0\0\0\0\xff\xff\xff\xff\x5\x1\0\x32\x10)
fixed="DejaVu Sans,10,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
general="DejaVu Sans,10,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
[Interface]
activate_item_on_single_click=1
+146
View File
@@ -0,0 +1,146 @@
// -*- mode: jsonc -*-
{
// "layer": "top", // Waybar at top layer
"position": "top",
"height": 22, // Waybar height (to be removed for auto height)
"spacing": 0, // Gaps between modules (4px)
// Choose the order of the modules
"modules-left": [
"hyprland/workspaces",
],
"modules-center": [
"hyprland/window"
],
"modules-right": [
"custom/btc",
"pulseaudio",
"backlight",
"network",
"battery",
"custom/battery-low",
"clock",
"tray",
"custom/power"
],
// Modules configuration
"hyprland/workspaces": {
"disable-scroll": false,
"on-scroll-up": "hyprctl dispatch workspace -1",
"on-scroll-down": "hyprctl dispatch workspace +1",
"all-outputs": false,
"warp-on-scroll": false,
"format": "{icon}",
"format-icons": {
"1": "一",
"2": "二",
"3": "三",
"4": "四",
"5": "五",
"6": "六",
"7": "七",
"8": "八",
"9": "九",
"10": "十",
"urgent": "",
"focused": "",
"default": ""
}
},
"custom/btc": {
"escape": false,
"exec": "$HOME/.local/bin/panel/btc.sh",
"interval": 300,
"format": " {}",
"tooltip": false
},
"pulseaudio": {
"scroll-step": 2, // %, can be a float
"format": "{icon} {volume}%",
"format-bluetooth": "{icon} {volume}%",
"format-bluetooth-muted": " {icon}",
"format-muted": " {volume}%",
"format-source": "{volume}%",
"format-source-muted": "",
"format-icons": {
"headphone": "",
"hands-free": "",
"headset": "",
"phone": "",
"portable": "",
"car": "",
"default": ["", "", ""]
},
"on-click": "pavucontrol"
},
"backlight": {
"device": "intel_backlight",
"format": "{percent}% {icon}",
"format-icons": ["", "", "", "", "", "", "", "", ""]
},
"network": {
"format-wifi": " {signalStrength}%",
"format-ethernet": "",
"tooltip-format": "{ifname}: {ipaddr}/{cidr}\n via {gwaddr}",
"tooltip-format-wifi": "{ifname}: {ipaddr}/{cidr}\n via {gwaddr}\n ssid {essid}",
"tooltip-format-disconnected": "Disconnected",
"format-linked": " (No IP)",
"format-disconnected": "<span color='#676e7d'></span>",
"on-click": "$HOME/.local/bin/panel/iface.sh"
},
"battery": {
"bat": "BAT0",
"interval": 30,
"full-at": 98,
"states": {
"good": 95,
"critical": 20
},
"format": "{icon} {capacity}% ({time})",
"format-time": "{H}:{m}",
"format-full": "{icon} {capacity}%",
"format-charging": " {capacity}%",
"format-plugged": " {capacity}%",
"format-icons": ["", "", "", "", ""]
},
"custom/battery-low": {
"exec": "$HOME/.local/bin/panel/battery.sh",
"interval": 30,
"format": "",
"tooltip": false
},
"clock": {
// "timezone": "America/New_York",
"tooltip-format": "<tt><small>{calendar}</small></tt>",
"calendar": {
"mode" : "month",
"mode-mon-col" : 3,
"weeks-pos" : "right",
"format": {
"months": "<span color='#b294bb'><b>{}</b></span>",
"days": "<span color='#fff'><b>{}</b></span>",
"weeks": "<span color='#81a2be'><b>W{}</b></span>",
"weekdays": "<span color='#8abeb7'><b>{}</b></span>",
"today": "<span color='#f0c674'><b><u>{}</u></b></span>"
}
},
"format": " {:%I:%M %p}",
"on-click": "$HOME/.local/bin/panel/date.sh"
},
"tray": {
// "icon-size": 21,
"spacing": 10
},
"custom/power": {
"format": "⏻",
"tooltip": false,
"menu": "on-click",
"menu-file": "$HOME/.config/waybar/power_menu.xml", // Menu file in resources folder
"menu-actions": {
"lock": "hyprlock",
"shutdown": "shutdown",
"reboot": "reboot",
"suspend": "systemctl suspend",
"hibernate": "systemctl hibernate"
}
}
}
+33
View File
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<object class="GtkMenu" id="menu">
<child>
<object class="GtkMenuItem" id="lock">
<property name="label">Lock</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="suspend">
<property name="label">Suspend</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="hibernate">
<property name="label">Hibernate</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="shutdown">
<property name="label">Shutdown</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="delimiter1"/>
</child>
<child>
<object class="GtkMenuItem" id="reboot">
<property name="label">Reboot</property>
</object>
</child>
</object>
</interface>
+236
View File
@@ -0,0 +1,236 @@
@define-color black #000;
@define-color red #a54242; /* 1 */
@define-color orange #de935f; /* 3 */
@define-color blue #5f819d; /* 4 */
@define-color green #b5bd68; /* 10 */
@define-color bgcolor #404552;
@define-color bgcolor-inactive #2b2e39;
@define-color bgcolor-urgent #dc7a43;
@define-color fgcolor #fff;
@define-color fgcolor-inactive #676e7d;
* {
/* `otf-font-awesome` is required to be installed for icons */
font-family: FontAwesome, DejaVu Sans Serif;
font-size: 12px;
}
window#waybar {
background-color: @bgcolor-inactive;
color: @fgcolor;
transition-property: background-color;
transition-duration: .5s;
}
window#waybar.hidden {
opacity: 0.2;
}
button {
/* Use box-shadow instead of border so the text isn't offset */
box-shadow: inset 0 -3px transparent;
/* Avoid rounded borders under each button name */
border: none;
border-radius: 0;
}
/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
button:hover {
background: inherit;
box-shadow: inset 0 -3px @fgcolor;
}
#custom-btc,
#pulseaudio,
#wireplumber,
#custom-media,
#backlight,
#network,
#battery,
#clock,
#tray,
#custom-power {
padding: 0 6px;
color: @fgcolor;
}
#window,
#workspaces {
margin: 0 4px;
}
@keyframes blink {
to {
background-color: @fgcolor;
color: @black;
}
}
label:focus {
background-color: @black;
}
/* -------------------------------------- */
/* Workspaces module */
#workspaces button {
padding: 0 5px;
background-color: transparent;
color: @fgcolor-inactive;
box-shadow: none;
}
#workspaces button:hover,
#workspaces button.empty:hover {
background-color: @bgcolor;
color: @fgcolor-inactive;
}
#workspaces button.active,
#workspaces button.active.empty {
background-color: @bgcolor;
box-shadow: inset 0 -3px @blue;
color: @fgcolor;
}
#workspaces button.empty {
background-color: transparent;
color: @bgcolor;
}
#workspaces button.focused {
background-color: @bgcolor;
}
#workspaces button.urgent {
background-color: @bgcolor-urgent;
}
/* If workspaces is the leftmost module, omit left margin */
.modules-left > widget:first-child > #workspaces {
margin-left: 0;
}
/* If workspaces is the rightmost module, omit right margin */
.modules-right > widget:last-child > #workspaces {
margin-right: 0;
}
/* -------------------------------------- */
/* BTC module */
#custom-btc:hover {
background-color: @bgcolor;
}
/* -------------------------------------- */
/* Media modules */
#pulseaudio, #wireplumber {
color: @fgcolor;
}
#pulseaudio:hover, #wireplumber:hover {
background-color: @bgcolor;
}
#pulseaudio.muted, #wireplumber.muted {
color: @fgcolor-inactive
}
#custom-media {
color: @green;
min-width: 100px;
}
#custom-media.custom-spotify {
color: @green;
}
#custom-media.custom-vlc {
color: @orange;
}
/* -------------------------------------- */
/* Backlight module */
#backlight:hover {
background-color: @bgcolor;
}
/* -------------------------------------- */
/* Network module */
#network:hover {
background-color: @bgcolor;
}
#network.disconnected {
background-color: @bgcolor-inactive;
}
/* -------------------------------------- */
/* Battery module */
#battery:hover {
background-color: @bgcolor;
}
#battery.good {
color: @green;
}
/* Using steps() instead of linear as a timing function to limit cpu usage */
#battery.critical:not(.charging) {
background-color: @bgcolor-urgent;
animation-name: blink;
animation-duration: 2s;
animation-timing-function: steps(3);
animation-iteration-count: infinite;
animation-direction: alternate;
}
/* -------------------------------------- */
/* Clock module */
#clock:hover {
background-color: @bgcolor;
}
/* -------------------------------------- */
/* Tray module */
#tray:hover {
background-color: @bgcolor;
}
#tray > .passive {
-gtk-icon-effect: dim;
}
#tray > .needs-attention {
-gtk-icon-effect: highlight;
background-color: @bgcolor-urgent;
}
/* -------------------------------------- */
/* Power module */
#custom-power {
color: @red;
}
#custom-power:hover {
background-color: @bgcolor;
}
/* If power module is the leftmost module, set left margin */
.modules-left > widget:first-child > #custom-power {
margin-left: 6px;
}
/* If power module is the rightmost module, set right margin */
.modules-right > widget:last-child > #custom-power {
margin-right: 6px;
}
@@ -1,20 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.1" encoding="UTF-8"?>
<channel name="thunar" version="1.0">
<property name="last-view" type="string" value="ThunarDetailsView"/>
<property name="last-icon-view-zoom-level" type="string" value="THUNAR_ZOOM_LEVEL_LARGEST"/>
<property name="last-window-width" type="int" value="3000"/>
<property name="last-window-height" type="int" value="1962"/>
<property name="last-window-maximized" type="bool" value="false"/>
<property name="last-separator-position" type="int" value="400"/>
<property name="last-window-maximized" type="bool" value="true"/>
<property name="last-separator-position" type="int" value="209"/>
<property name="misc-single-click" type="bool" value="false"/>
<property name="misc-volume-management" type="bool" value="true"/>
<property name="last-details-view-zoom-level" type="string" value="THUNAR_ZOOM_LEVEL_SMALLEST"/>
<property name="last-details-view-column-widths" type="string" value="50,241,50,50,1757,50,50,160,440"/>
<property name="last-details-view-column-widths" type="string" value="50,241,136,50,85,352,50,160,744,50,50,63,50,108"/>
<property name="last-show-hidden" type="bool" value="true"/>
<property name="last-sort-column" type="string" value="THUNAR_COLUMN_NAME"/>
<property name="last-sort-order" type="string" value="GTK_SORT_ASCENDING"/>
<property name="last-side-pane" type="string" value="ThunarShortcutsPane"/>
<property name="last-side-pane" type="string" value="THUNAR_SIDEPANE_TYPE_SHORTCUTS"/>
<property name="last-location-bar" type="string" value="ThunarLocationEntry"/>
<property name="hidden-bookmarks" type="array">
<value type="string" value="network:///"/>
+9
View File
@@ -0,0 +1,9 @@
Net/ThemeName "Arc-Dark"
Net/IconThemeName "Arc"
Gtk/CursorThemeName "capitaine-cursors-light"
Net/EnableEventSounds 1
EnableInputFeedbackSounds 1
Xft/Antialias 1
Xft/Hinting 1
Xft/HintStyle "hintslight"
Xft/RGBA "rgb"
+4
View File
@@ -1,3 +1,7 @@
XORG_USER='rick'
if [ "$WAYLAND" = true ]; then
[ "$USER" = "$XORG_USER" ] && [ "$(tty)" = "/dev/tty1" ] && exec start-hyprland > /dev/null 2>&1
else
[ "$USER" = "$XORG_USER" ] && [ "$(tty)" = "/dev/tty1" ] && exec xinit -- vt1 > /dev/null 2>&1
fi
+15 -1
View File
@@ -24,6 +24,11 @@ export R_ENVIRON_USER="$XDG_CONFIG_HOME/R/Renviron"
# export HIDPI=true
# <<<
# Wayland
# >>> system=wayland
# export WAYLAND=true
# <<<
#--- Program Specific ---#
# Android
@@ -79,7 +84,12 @@ if [ "$HIDPI" = true ]; then
export QT_AUTO_SCREEN_SCALE_FACTOR=0
export QT_SCREEN_SCALE_FACTORS=2
fi
export QT_QPA_PLATFORMTHEME="qt5gtk2"
if [ "$WAYLAND" = true ]; then
export QT_QPA_PLATFORM="wayland"
fi
export QT_QPA_PLATFORMTHEME="qt5ct"
export QT_WAYLAND_DISABLE_WINDOWDECORATION="1"
export QT_STYLE_OVERRIDE="kvantum"
# Rust
export CARGO_HOME="$XDG_DATA_HOME/cargo"
@@ -104,7 +114,11 @@ export WGETRC="$XDG_CONFIG_HOME/wget/wgetrc"
export WINEPREFIX="$XDG_DATA_HOME/wine"
# WM
if [ "$WAYLAND" = true ]; then
export WM="hyprland"
else
export WM="bspwm"
fi
# Xorg
export XINITRC="$XDG_CONFIG_HOME/xorg/xinitrc"
+11 -3
View File
@@ -73,12 +73,20 @@ zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey '\eOc' forward-word # ctrl-right
bindkey '\e[1;5C' forward-word # ctrl-right
bindkey '\eOd' backward-word # ctrl-left
bindkey '\e[1;5D' backward-word # ctrl-left
bindkey '\e[3~' delete-char # del
bindkey '\e[7~' beginning-of-line # home
bindkey '\e[H' beginning-of-line # home
bindkey '\eOH' beginning-of-line # home
bindkey '\e[8~' end-of-line # end
bindkey '\e[F' end-of-line # end
bindkey '\eOF' end-of-line # end
bindkey '\e[A' history-beginning-search-backward-end # up
bindkey '\eOA' history-beginning-search-backward-end # up
bindkey '\e[B' history-beginning-search-forward-end # down
bindkey '\eOB' history-beginning-search-forward-end # down
bindkey '\e[Z' reverse-menu-complete # shift-tab
bindkey '\eh' kill-whole-line # meta-h
bindkey '\ej' history-beginning-search-forward-end # meta-j
@@ -169,8 +177,8 @@ alias gd="git diff"
alias gdc="git diff --cached"
alias gds="git diff --staged"
alias gf="git fetch"
alias gl="git log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%ai%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d %C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all"
alias gle="git log --graph --stat --format=format:'%C(bold blue)commit %H%C(reset)%C(bold yellow)%d %C(reset)%nAuthor: %C(dim white)%an <%ae>%C(reset)%nDate: %C(bold cyan)%ai%C(reset) %C(bold green)(%ar)%C(reset)%n%n%w(64,4,4)%B'"
alias gl="git log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%ai%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d %C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an <%cn>%C(reset)' --all"
alias gle="git log --graph --stat --format=format:'%C(bold blue)commit %H%C(reset)%C(bold yellow)%d %C(reset)%nAuthor: %C(dim white)%an <%ae>%C(reset)%nCommitter: %C(dim white)%cn <%ce>%C(reset)%nDate: %C(bold cyan)%ai%C(reset) %C(bold green)(%ar)%C(reset)%n%n%w(64,4,4)%B'"
alias gm="git merge"
alias gp="git pull"
alias gps='git push || git push origin $(git branch --show-current)'
@@ -178,7 +186,7 @@ alias gpsa='git remote | xargs -I remotes git push remotes $(git branch --show-c
alias gpsaf='git remote | xargs -I remotes git push --force remotes $(git branch --show-current)'
alias gr="git reset"
alias gs="git status"
alias gsh="git show --format=format:'%C(bold blue)commit %H%C(reset) %C(bold yellow)%d %C(reset)%nAuthor: %C(dim white)%an <%ae>%C(reset)%nDate: %C(bold cyan)%ai%C(reset) %C(bold green)(%ar)%C(reset)%n%n%w(64,4,4)%B'"
alias gsh="git show --format=format:'%C(bold blue)commit %H%C(reset) %C(bold yellow)%d %C(reset)%nAuthor: %C(dim white)%an <%ae>%C(reset)%nCommitter: %C(dim white)%cn <%ce>%C(reset)%nDate: %C(bold cyan)%ai%C(reset) %C(bold green)(%ar)%C(reset)%n%n%w(64,4,4)%B'"
alias gt='git ls-tree -r --name-only $(git branch --show-current) .'
# Scripts
+5
View File
@@ -0,0 +1,5 @@
# This file is written by nwg-look. Do not edit.
[Icon Theme]
Name=Default
Comment=Default Cursor Theme
Inherits=capitaine-cursors-light
+9 -4
View File
@@ -74,10 +74,14 @@ done
embedAudioThumbnail()
{
# Get file name
fileName="$(youtube-dl --get-filename "$1")"
# Get file names
youtube-dl --get-filename "$1" |
while IFS= read -r fileName; do
fileName="${fileName%.*}"
# Skip if no thumbnail
[ ! -f "${fileName}.webp" ] && [ ! -f "${fileName}.jpg" ] && continue
# Convert thumbnail to actually be a jpg
yes y | ffmpeg -i "${fileName}.webp" "${fileName}_converted.jpg" > /dev/null 2>&1
yes y | ffmpeg -i "${fileName}.jpg" "${fileName}_converted.jpg" > /dev/null 2>&1
@@ -90,8 +94,9 @@ embedAudioThumbnail()
"${fileName}_embed.mp3" > /dev/null 2>&1
# Remove left over files
rm -f "./${fileName}_converted.jpg" "./${fileName}.jpg" "./${fileName}.mp3"
mv "${fileName}_embed.mp3" "${fileName}.mp3"
rm -f "./${fileName}_converted.jpg" "./${fileName}.jpg" "./${fileName}.webp"
mv -f "${fileName}_embed.mp3" "${fileName}.mp3"
done
}
downloadAudio()
+6 -1
View File
@@ -1,6 +1,6 @@
#!/bin/sh
file="/tmp/polybar-btc-module"
file="/tmp/panel-btc-module"
# Enable mathematics in POSIX shell
calc() { awk "BEGIN { printf(\"%.2f\", $*) }"; }
@@ -27,7 +27,12 @@ output() {
fi
# Result
# >>> session=xorg
echo "%{F$color}$symbol $difference%%{F$COLOR15}"
# <<<
# >>> session=wayland
# echo "<span color='$color'>$symbol $difference%</span>"
# <<<
}
if [ ! -f "$file" ]; then
+7
View File
@@ -0,0 +1,7 @@
#!/bin/sh
# Kill existing panel
pkill --exact --signal 9 waybar
# Start panel
setsid -f waybar
+10
View File
@@ -237,7 +237,12 @@ if [ $qualityOption -eq 1 ]; then
fi
# Set url to clipboard if none provided
# >>> session=xorg
clip="$(xclip -selection clipboard -out)"
# <<<
# >>> session=wayland
# clip="$(wl-paste)"
# <<<
if [ "$#" -eq 0 ]; then
eval set -- "$clip"
fi
@@ -257,7 +262,12 @@ elif [ $queueOption -eq 1 ]; then
queue "$*"
else
if [ "$*" = "" ]; then
# >>> session=xorg
play "$(xclip -o)"
# <<<
# >>> session=wayland
# play "$(wl-paste)"
# <<<
else
for url in "$@"; do
play "$url"
+13 -2
View File
@@ -1,12 +1,17 @@
#!/bin/sh
# Take a screenshot with the configured program
# Depends: scrot / maim, xdotool / magick, xdotool
# Depends: rofi and scrot / maim, xdotool / magick, xdotool / grim, slurp, jq
# User-config---------------------------
# scrot / maim / magick import
# scrot / maim / magick import / grim
# >>> session=xorg
screenshotter="maim"
# <<<
# >>> session=wayland
# screenshotter="grim"
# <<<
# --------------------------------------
@@ -25,6 +30,12 @@ elif [ "$screenshotter" = "magick import" ] || [ "$screenshotter" = "import" ];
selection=""
activeWindow="-window \$(xdotool getactivewindow)"
filename="$CAPTURE/$(date '+%Y-%m-%d-%H%M%S')_import.png"
elif [ "$screenshotter" = "grim" ]; then
screenshotter="" # start of command needs to be overwritten
fullscreen="grim"
selection="slurp | grim -g -"
activeWindow="hyprctl -j activewindow | jq -r '\"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])\"' | grim -g -"
filename="$CAPTURE/$(date '+%Y-%m-%d-%H%M%S')_grim.png"
else
echo "Printscreen configuration is invalid"
exit 1
+2
View File
@@ -6,6 +6,8 @@ if [ "$WM" = "bspwm" ]; then
logout="bspc quit"
elif [ "$WM" = "i3" ]; then
logout="i3-msg exit"
elif [ "$WM" = "hyprland" ]; then
logout="hyprctl dispatch exit"
fi
commands="\
+5
View File
@@ -2,6 +2,11 @@
LOCK="$XDG_CACHE_HOME/lock.png"
if [ "$WM" = "hyprland" ]; then
hyprlock
exit 0
fi
# Cache the lock image
if [ ! -f "$LOCK" ]; then
touch "$LOCK"
+18 -2
View File
@@ -1,7 +1,23 @@
#!/bin/sh
WALLPAPER="$HOME/pictures/wallpaper.jpg"
# Overwrite wallpaper with new image if provided
[ -n "$1" ] && cp "$1" "$HOME/pictures/wallpaper.jpg"
[ -n "$1" ] && cp "$1" "$WALLPAPER"
# Set wallpaper
feh --no-fehbg --bg-fill "$HOME/pictures/wallpaper.jpg"
if [ "$WAYLAND" = true ]; then
pkill hyprpaper
setsid -f hyprpaper
# Wait until hyprpaper is available
while [ -z "$(find "$XDG_RUNTIME_DIR/hypr" -name ".hyprpaper.sock")" ]; do
sleep 0.1
done
sleep 0.1
hyprctl hyprpaper preload "$WALLPAPER"
hyprctl hyprpaper wallpaper ",$WALLPAPER"
else
feh --no-fehbg --bg-fill "$WALLPAPER"
fi
+2 -2
View File
@@ -31,7 +31,7 @@ Tree Style Tab style rules.
}
.tab {
height: 23px;
height: 25px;
margin-bottom: 1px;
background: #404552;
border: 0px;
@@ -39,7 +39,7 @@ Tree Style Tab style rules.
}
.tab .label {
line-height: 1.15;
line-height: 1.75;
margin-bottom: 1px;
margin-left: 0.25em;
}
@@ -1,7 +1,7 @@
@-moz-document url(chrome://browser/content/browser.xhtml) {
/* Hide Firefox top tab bar */
#TabsToolbar {
visibility: hidden !important;
display: none !important;
}
/* Remove titlebar */
@@ -42,8 +42,9 @@
}
/* Url bar color */
#urlbar {
#urlbar-background {
background: #404552 !important;
border-radius: 0;
}
/* Hide ... button in URL bar */
@@ -55,13 +56,6 @@
display: none;
}
/* Unzoom URL bar */
#urlbar[breakout-extend] {
top: calc((var(--urlbar-toolbar-height) - var(--urlbar-height)) / 2) !important;
left: calc((var(--urlbar-toolbar-width) - var(--urlbar-width)) / 2) !important;
width: 100% !important;
}
#urlbar[breakout-extend] #urlbar-input-container {
height: calc(var(--tab-min-height) - 3px) !important;
padding: 0px !important;
+16 -1
View File
@@ -1,6 +1,12 @@
// This option has a memory leak
user_pref("accessibility.force_disabled", 1);
// Download directory
user_pref("browser.download.dir", "~/downloads");
// Disable LLM
user_pref("browser.ml.chat.enabled", false);
// Display a blank new tab
user_pref("browser.newtabpage.enabled", false);
user_pref("browser.newtab.url", "about:blank");
@@ -8,18 +14,27 @@ user_pref("browser.newtab.url", "about:blank");
// Disable Ctrl+q browser close shortcut
user_pref("browser.quitShortcut.disabled", true);
// Resume session at the next application start, but not again
user_pref("browser.sessionstore.resume_session_once", true);
// Old style URL bar
user_pref("browser.urlbar.openViewOnFocus", false);
user_pref("browser.urlbar.update1", false);
user_pref("browser.urlbar.update1.interventions", false);
user_pref("browser.urlbar.update1.searchTips", false);
// VPN ad
user_pref("browser.vpn_promo.enabled", false);
// Disable extension recommendations
user_pref("extensions.htmlaboutaddons.recommendations.enabled", false);
// No full screen warning
user_pref("full-screen-api.warning.timeout", 0);
// Enable middle-click scrolling
user_pref("general.autoScroll", true);
// Disable video autoplay
user_pref("media.autoplay.blocking_policy", 2);
user_pref("media.autoplay.default", 5);
@@ -44,7 +59,7 @@ user_pref("ui.key.menuAccessKeyFocuses", false);
user_pref("ui.prefersReducedMotion", true);
// Fix dark GTK themes
user_pref("widget.content.gtk-theme-override", "Arc");
user_pref("widget.content.gtk-theme-override", "Arc-Dark");
// Disable tracking
user_pref("privacy.resistFingerprinting", true);
+1 -1
View File
@@ -1,7 +1,7 @@
#+TITLE: Dotfiles
#+OPTIONS: toc:nil
This is a collection of dotfiles and scripts for my i3/bspwm setup, previewed below:
This is a collection of dotfiles and scripts for my i3/bspwm/hyprland setup, previewed below:
[[screenshot.png]]
+3
View File
@@ -0,0 +1,3 @@
# Resolver configuration file.
# See resolv.conf(5) for details.
nameserver 192.168.0.1
+8 -5
View File
@@ -6,16 +6,18 @@
# any later version.
#
# Entries in this file show the compile time defaults. Local configuration
# should be created by either modifying this file, or by creating "drop-ins" in
# the journald.conf.d/ subdirectory. The latter is generally recommended.
# Defaults can be restored by simply deleting this file and all drop-ins.
# should be created by either modifying this file (or a copy of it placed in
# /etc/ if the original file is shipped in /usr/), or by creating "drop-ins" in
# the /etc/systemd/journald.conf.d/ directory. The latter is generally
# recommended. Defaults can be restored by simply deleting the main
# configuration file and all drop-ins located in /etc/.
#
# Use 'systemd-analyze cat-config systemd/journald.conf' to display the full config.
#
# See journald.conf(5) for details.
[Journal]
#Storage=auto
#Storage=persistent
#Compress=yes
#Seal=yes
#SplitMode=uid
@@ -30,7 +32,7 @@ SystemMaxUse=256M
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxRetentionSec=0
MaxFileSec=2week
#ForwardToSyslog=no
#ForwardToKMsg=no
@@ -42,6 +44,7 @@ MaxFileSec=2week
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
#MaxLevelSocket=debug
#LineMax=48K
#ReadKMsg=yes
#Audit=yes
+16 -6
View File
@@ -6,9 +6,11 @@
# any later version.
#
# Entries in this file show the compile time defaults. Local configuration
# should be created by either modifying this file, or by creating "drop-ins" in
# the logind.conf.d/ subdirectory. The latter is generally recommended.
# Defaults can be restored by simply deleting this file and all drop-ins.
# should be created by either modifying this file (or a copy of it placed in
# /etc/ if the original file is shipped in /usr/), or by creating "drop-ins" in
# the /etc/systemd/logind.conf.d/ directory. The latter is generally
# recommended. Defaults can be restored by simply deleting the main
# configuration file and all drop-ins located in /etc/.
#
# Use 'systemd-analyze cat-config systemd/logind.conf' to display the full config.
#
@@ -22,14 +24,19 @@
#KillExcludeUsers=root
#InhibitDelayMaxSec=5
#UserStopDelaySec=10
#SleepOperation=suspend-then-hibernate suspend
HandlePowerKey=ignore
#HandlePowerKeyLongPress=ignore
#HandleRebootKey=reboot
#HandleRebootKeyLongPress=poweroff
#HandleSuspendKey=suspend
#HandleSuspendKeyLongPress=hibernate
#HandleHibernateKey=hibernate
#HandleHibernateKeyLongPress=ignore
#HandleLidSwitch=suspend
#HandleLidSwitchExternalPower=suspend
#HandleLidSwitchDocked=ignore
#HandleRebootKey=reboot
#HandleRebootKeyLongPress=poweroff
#HandleSecureAttentionKey=secure-attention-key
#PowerKeyIgnoreInhibited=no
#SuspendKeyIgnoreInhibited=no
#HibernateKeyIgnoreInhibited=no
@@ -39,7 +46,10 @@ HandlePowerKey=ignore
#IdleAction=ignore
#IdleActionSec=30min
#RuntimeDirectorySize=10%
#RuntimeDirectoryInodesMax=400k
#RuntimeDirectoryInodesMax=
#RemoveIPC=yes
#InhibitorsMax=8192
#SessionsMax=8192
#StopIdleSessionSec=infinity
#DesignatedMaintenanceTime=
#WallMessages=yes
+637
View File
@@ -0,0 +1,637 @@
# ----------------------------------------------------------------------------
# /etc/tlp.conf - TLP user configuration (version 1.9.0)
# See full explanation: https://linrunner.de/tlp/settings
#
# Copyright (c) 2025 Thomas Koch <linrunner at gmx.net> and others.
# SPDX-License-Identifier: GPL-2.0-or-later
#
# Settings are read in the following order:
#
# 1. Intrinsic defaults
# 2. /etc/tlp.d/*.conf - Drop-in customization snippets
# 3. /etc/tlp.conf - User configuration (this file)
#
# Power Profiles: a part of TLP's parameters is divided into two or three
# groups:
# - performance: parameters ending in _AC are used when AC power is
# connected or when the command 'tlp performance' is run.
# - balanced: parameters ending in _BAT are used when operating
# on battery power or when the command 'tlp balanced' is run.
# - power-saver: parameters ending in _SAV are used when the command
# 'tlp power-saver' is run. If there is no _SAV parameter available
# for a feature, the _BAT parameter will be used instead.
# - Any remaining parameters not divided apply to all power profiles.
#
# Please note:
# - If parameters are specified more than once, the last occurrence takes
# precedence. This also means that any parameters defined here will take
# precedence over any drop-ins.
# - You can however, append values to a parameter already defined as intrinsic
# default or in a previously read file: use PARAMETER+="add values".
# - Important: all parameters are disabled here. Remove the leading '#' if you
# want to enable a feature without a default or if you want to set a value
# other than the default.
# - Parameters must always be specified for all power profiles, i.e. in the
# AC, BAT and SAV category (where applicable). If you omit one of them,
# the missing profile will receive its value from another profile, since
# a change will only occur if different values are defined.
# - To completely disable a parameter, use PARAMETER="".
# Legend for defaults:
# - Default *: intrinsic default that is effective when the parameter is
# missing or the line has a leading #'.
# - Default <none>: do nothing or use kernel/hardware defaults.
#
# ----------------------------------------------------------------------------
# tlp - Parameters for power saving
# Set to 0 to disable, 1 to enable TLP.
# Default: 1
#TLP_ENABLE=1
# Set to 1 to deactivate all intrinsic defaults of TLP. This means that
# TLP only applies settings that have been explicitly activated i.e.
# parameters without a leading '#'.
# Notes:
# - Helpful if one wants to use only selected features of TLP
# - After activation, use tlp-stat -c to display your effective configuration
#TLP_DISABLE_DEFAULTS=1
# Control how warnings about invalid settings are issued:
# 0=disabled
# 1=background tasks (boot, resume, change of power source) report to syslog
# 2=shell commands report to the terminal (stderr)
# 3=combination of 1 and 2
# Default: 3
#TLP_WARN_LEVEL=3
# Colorize error, warning, notice and success messages. Colors are specified
# with ANSI codes:
# 1=bold black, 90=grey, 91=red, 92=green, 93=yellow, 94=blue, 95=magenta,
# 96=cyan, 97=white.
# Other colors are possible, refer to:
# https://en.wikipedia.org/wiki/ANSI_escape_code#3-bit_and_4-bit
# Colors must be specified in the order
# "<error> <warning> <notice> <success>".
# By default, errors are shown in red, warnings in yellow, notices in bold
# and success in green.
# Default: "91 93 1 92"
#TLP_MSG_COLORS="91 93 1 92"
# Control automatic switching of the power profile when connecting or removing
# the charger, when booting the system or when executing 'tlp start':
# 0=disabled - never switch, use TLP_DEFAULT_MODE if configured
# 1=auto - always switch, select performance on AC and
# balanced on battery power.
# 2=smart - do not switch if the following profiles were active previously:
# power-saver or balanced on AC resp.
# power-saver or performance on battery power.
# Note: the same applies if the charger was connected/removed during suspend.
# Default: 2
#TLP_AUTO_SWITCH=2
# Power profile to use when automatic switching is disabled
# (TLP_AUTO_SWITCH=0), profile is locked (TLP_PERSISTENT_DEFAULT=1)
# or no power supply is detected:
# PRF=performance, BAL=balanced, SAV=power-saver.
# Note: legacy values AC and BAT continue to work. They are mapped to
# PRF and BAL, respectively.
# Default: <none>
#TLP_DEFAULT_MODE=BAL
# Lock power profile:
# 0=profile depends on automatic switching,
# 1=profile is locked to TLP_DEFAULT_MODE (TLP_AUTO_SWITCH is ignored).
# Default: 0
#TLP_PERSISTENT_DEFAULT=0
# Power supply classes to ignore when determining power profile:
# AC, USB, BAT.
# Separate multiple classes with spaces.
# Note: try on laptops where operation mode AC/BAT is incorrectly detected.
# Default: <none>
#TLP_PS_IGNORE="BAT"
# Seconds laptop mode has to wait after the disk goes idle before doing a
# sync. Non-zero value enables, zero disables laptop mode.
# Default: 0 (AC), 2 (BAT)
#DISK_IDLE_SECS_ON_AC=0
#DISK_IDLE_SECS_ON_BAT=2
# Dirty page values (timeouts in secs).
# Default: 15 (AC), 60 (BAT)
#MAX_LOST_WORK_SECS_ON_AC=15
#MAX_LOST_WORK_SECS_ON_BAT=60
# Select a CPU scaling driver operation mode.
# Intel CPU with intel_pstate driver:
# active, passive.
# AMD Zen 2 or newer CPU with amd-pstate driver as of kernel 6.3/6.4(*):
# active, passive, guided(*).
# Default: <none>
#CPU_DRIVER_OPMODE_ON_AC=active
#CPU_DRIVER_OPMODE_ON_BAT=active
#CPU_DRIVER_OPMODE_ON_SAV=active
# Select a CPU frequency scaling governor.
# Intel CPU with intel_pstate driver or
# AMD CPU with amd-pstate driver in active mode ('amd-pstate-epp'):
# performance, powersave(*).
# Intel CPU with intel_pstate driver in passive mode ('intel_cpufreq') or
# AMD CPU with amd-pstate driver in passive or guided mode ('amd-pstate') or
# Intel, AMD and other CPU brands with acpi-cpufreq driver:
# conservative, ondemand(*), userspace, powersave, performance, schedutil(*)
# Use tlp-stat -p to show the active driver and available governors.
# Important:
# Governors marked (*) above are power efficient for *almost all* workloads
# and therefore kernel and most distributions have chosen them as defaults.
# You should have done your research about advantages/disadvantages *before*
# changing the governor.
# Default: <none>
#CPU_SCALING_GOVERNOR_ON_AC=performance
#CPU_SCALING_GOVERNOR_ON_BAT=powersave
#CPU_SCALING_GOVERNOR_ON_SAV=powersave
# Set the min/max frequency available for the scaling governor.
# Possible values depend on your CPU. For available frequencies see
# the output of tlp-stat -p.
# Notes:
# - Min/max frequencies must always be specified for both AC *and* BAT
# - Not recommended for use with the intel_pstate driver, use
# CPU_MIN/MAX_PERF_ON_AC/BAT below instead
# Default: <none>
#CPU_SCALING_MIN_FREQ_ON_AC=0
#CPU_SCALING_MAX_FREQ_ON_AC=0
#CPU_SCALING_MIN_FREQ_ON_BAT=0
#CPU_SCALING_MAX_FREQ_ON_BAT=0
#CPU_SCALING_MIN_FREQ_ON_SAV=0
#CPU_SCALING_MAX_FREQ_ON_SAV=0
# Set CPU energy/performance policies EPP and EPB:
# performance, balance_performance, default, balance_power, power.
# Values are given in order of increasing power saving.
# Requires:
# * Intel CPU
# EPP: Intel Core i 6th gen. or newer CPU with intel_pstate driver
# EPB: Intel Core i 2nd gen. or newer CPU with intel_pstate driver
# EPP and EPB are mutually exclusive: when EPP is available, Intel CPUs
# will not honor EPB. Only the matching feature will be applied by TLP.
# * AMD Zen 2 or newer CPU
# EPP: amd-pstate driver in active mode ('amd-pstate-epp') as of kernel 6.3
# Default: balance_performance (AC), balance_power (BAT), power (SAV)
#CPU_ENERGY_PERF_POLICY_ON_AC=balance_performance
#CPU_ENERGY_PERF_POLICY_ON_BAT=balance_power
#CPU_ENERGY_PERF_POLICY_ON_SAV=power
# Set Intel CPU P-state performance: 0..100 (%).
# Limit the max/min P-state to control the power dissipation of the CPU.
# Values are stated as a percentage of the available performance.
# Requires Intel Core i 2nd gen. or newer CPU with intel_pstate driver.
# Default: <none>
#CPU_MIN_PERF_ON_AC=0
#CPU_MAX_PERF_ON_AC=100
#CPU_MIN_PERF_ON_BAT=0
#CPU_MAX_PERF_ON_BAT=80
#CPU_MIN_PERF_ON_SAV=0
#CPU_MAX_PERF_ON_SAV=60
# Set the CPU "turbo boost" (Intel) or "core performance boost" (AMD) feature:
# 0=disable, 1=allow.
# Allows to raise the maximum frequency/P-state of some cores if the
# CPU chip is not fully utilized and below it's intended thermal budget.
# Note: a value of 1 does *not* activate boosting, it just allows it.
# Default: <none>
#CPU_BOOST_ON_AC=1
#CPU_BOOST_ON_BAT=1
#CPU_BOOST_ON_SAV=0
# Set CPU dynamic boost feature:
# 0=disable, 1=enable.
# Improve performance by increasing minimum P-state limit dynamically
# whenever a task previously waiting on I/O is selected to run.
# Requires Intel Core i 6th gen. or newer CPU with intel_pstate driver
# in active mode.
# Note: AMD CPUs currently have no tunable for this.
# Default: <none>
#CPU_HWP_DYN_BOOST_ON_AC=1
#CPU_HWP_DYN_BOOST_ON_BAT=1
#CPU_HWP_DYN_BOOST_ON_SAV=0
# Kernel NMI Watchdog:
# 0=disable (default, saves power), 1=enable (for kernel debugging only).
# Default: 0
#NMI_WATCHDOG=0
# Select platform profile:
# performance, balanced, low-power.
# Controls system operating characteristics around power/performance levels,
# thermal and fan speed. Values are given in order of increasing power saving.
# Note: check the output of tlp-stat -p to determine availability on your
# hardware and additional profiles such as: balanced-performance, quiet, cool.
# Default: performance (AC), balanced (BAT), low-power (SAV)
#PLATFORM_PROFILE_ON_AC=performance
#PLATFORM_PROFILE_ON_BAT=balanced
#PLATFORM_PROFILE_ON_SAV=low-power
# System suspend mode:
# s2idle: Idle standby - a pure software, light-weight, system sleep state,
# deep: Suspend to RAM - the whole system is put into a low-power state,
# except for memory, usually resulting in higher savings than s2idle.
# CAUTION: changing suspend mode may lead to system instability and even
# data loss. As for the availability of different modes on your system,
# check the output of tlp-stat -s. If unsure, stick with the system default
# by not enabling this.
# Default: <none>
#MEM_SLEEP_ON_AC=s2idle
#MEM_SLEEP_ON_BAT=deep
# Define disk devices on which the following DISK/AHCI_RUNTIME parameters act.
# Separate multiple devices with spaces.
# Devices can be specified by disk ID also (lookup with: tlp diskid).
# Default: "nvme0n1 sda"
#DISK_DEVICES="nvme0n1 sda"
# Disk advanced power management level: 1..254, 255 (max saving, min, off).
# Levels 1..127 may spin down the disk; 255 allowable on most drives.
# Separate values for multiple disks with spaces. Use the special value 'keep'
# to keep the hardware default for the particular disk.
# Default: 254 (AC), 128 (BAT)
#DISK_APM_LEVEL_ON_AC="254 254"
#DISK_APM_LEVEL_ON_BAT="128 128"
# Exclude disk classes from advanced power management (APM):
# sata, ata, usb, ieee1394.
# Separate multiple classes with spaces.
# CAUTION: USB and IEEE1394 disks may fail to mount or data may get corrupted
# with APM enabled. Be careful and make sure you have backups of all affected
# media before removing 'usb' or 'ieee1394' from the denylist!
# Default: "usb ieee1394"
#DISK_APM_CLASS_DENYLIST="usb ieee1394"
# Hard disk spin down timeout:
# 0: spin down disabled
# 1..240: timeouts from 5s to 20min (in units of 5s)
# 241..251: timeouts from 30min to 5.5 hours (in units of 30min)
# See 'man hdparm' for details.
# Separate values for multiple disks with spaces. Use the special value 'keep'
# to keep the hardware default for the particular disk.
# Default: <none>
#DISK_SPINDOWN_TIMEOUT_ON_AC="0 0"
#DISK_SPINDOWN_TIMEOUT_ON_BAT="0 0"
# Select I/O scheduler for the disk devices.
# Multi queue (blk-mq) schedulers:
# mq-deadline(*), none, kyber, bfq
# Single queue schedulers:
# deadline(*), cfq, bfq, noop
# (*) recommended.
# Separate values for multiple disks with spaces. Use the special value 'keep'
# to keep the kernel default scheduler for the particular disk.
# Notes:
# - Multi queue (blk-mq) may need kernel boot option 'scsi_mod.use_blk_mq=1'
# and 'modprobe mq-deadline-iosched|kyber|bfq' on kernels < 5.0
# - Single queue schedulers are legacy now and were removed together with
# the old block layer in kernel 5.0
# Default: keep
#DISK_IOSCHED="mq-deadline mq-deadline"
# AHCI link power management (ALPM) for SATA disks:
# min_power, med_power_with_dipm(*), medium_power, max_performance.
# (*) recommended.
# Multiple values separated with spaces are tried sequentially until success.
# Default: med_power_with_dipm (AC & BAT)
#SATA_LINKPWR_ON_AC="med_power_with_dipm"
#SATA_LINKPWR_ON_BAT="med_power_with_dipm"
# Exclude SATA links from AHCI link power management (ALPM).
# SATA links are specified by their host. Refer to the output of
# tlp-stat -d to determine the host; the format is "hostX".
# Separate multiple hosts with spaces.
# Default: <none>
#SATA_LINKPWR_DENYLIST="host1"
# Runtime Power Management for NVMe, SATA, ATA and USB disks
# as well as SATA ports:
# on=disable, auto=enable.
# Note: SATA controllers are PCIe bus devices and handled by RUNTIME_PM
# further down.
# Default: on (AC), auto (BAT)
#AHCI_RUNTIME_PM_ON_AC=on
#AHCI_RUNTIME_PM_ON_BAT=auto
# Seconds of inactivity before disk is suspended.
# Note: effective only when AHCI_RUNTIME_PM_ON_AC/BAT is activated.
# Default: 15
#AHCI_RUNTIME_PM_TIMEOUT=15
# Power off optical drive in UltraBay/MediaBay: 0=disable, 1=enable.
# Drive can be powered on again by releasing (and reinserting) the eject lever
# or by pressing the disc eject button on newer models.
# Note: an UltraBay/MediaBay hard disk is never powered off.
# Default: 0
#BAY_POWEROFF_ON_AC=0
#BAY_POWEROFF_ON_BAT=0
# Optical drive device to power off
# Default: sr0
#BAY_DEVICE="sr0"
# Set the min/max/turbo frequency for the Intel GPU.
# Possible values depend on your hardware. For available frequencies see
# the output of tlp-stat -g.
# Default: <none>
#INTEL_GPU_MIN_FREQ_ON_AC=0
#INTEL_GPU_MIN_FREQ_ON_BAT=0
#INTEL_GPU_MAX_FREQ_ON_AC=0
#INTEL_GPU_MAX_FREQ_ON_BAT=0
#INTEL_GPU_BOOST_FREQ_ON_AC=0
#INTEL_GPU_BOOST_FREQ_ON_BAT=0
# AMD GPU power management.
# Performance level (DPM): auto, low, high; auto is recommended.
# Note: requires amdgpu or radeon driver.
# Default: auto
#RADEON_DPM_PERF_LEVEL_ON_AC=auto
#RADEON_DPM_PERF_LEVEL_ON_BAT=auto
# Dynamic power management method (DPM): balanced, battery, performance.
# Note: radeon driver only.
# Default: <none>
#RADEON_DPM_STATE_ON_AC=performance
#RADEON_DPM_STATE_ON_BAT=battery
# Display panel adaptive backlight modulation (ABM) level: 0(off), 1..4.
# Values 1..4 control the maximum brightness reduction allowed by the ABM
# algorithm, where 1 represents the least and 4 the most power saving.
# Notes:
# - Requires AMD Vega or newer GPU with amdgpu driver as of kernel 6.9
# - Savings are made at the expense of color balance
# Default: 0 (AC), 1 (BAT), 3 (SAV)
#AMDGPU_ABM_LEVEL_ON_AC=0
#AMDGPU_ABM_LEVEL_ON_BAT=1
#AMDGPU_ABM_LEVEL_ON_SAV=3
# Wi-Fi power saving mode: on=enable, off=disable.
# Default: off (AC), on (BAT)
#WIFI_PWR_ON_AC=off
#WIFI_PWR_ON_BAT=on
# Disable Wake-on-LAN: Y/N.
# Default: Y
#WOL_DISABLE=Y
# Enable audio power saving for Intel HDA, AC97 devices (timeout in secs).
# A value of 0 disables, >= 1 enables power saving.
# Note: 1 is recommended for Linux desktop environments with PulseAudio,
# systems without PulseAudio may require 10.
# Default: 1
# >>> hostname=arch-desktop
SOUND_POWER_SAVE_ON_AC=1
SOUND_POWER_SAVE_ON_BAT=1
# <<<
# >>> hostname=arch-laptop
# SOUND_POWER_SAVE_ON_AC=0
# SOUND_POWER_SAVE_ON_BAT=0
# <<<
# Disable controller too (HDA only): Y/N.
# Note: effective only when SOUND_POWER_SAVE_ON_AC/BAT is activated.
# Default: Y
#SOUND_POWER_SAVE_CONTROLLER=Y
# PCIe Active State Power Management (ASPM):
# default(*), performance, powersave, powersupersave.
# (*) keeps BIOS ASPM defaults (recommended)
# Default: <none>
#PCIE_ASPM_ON_AC=default
#PCIE_ASPM_ON_BAT=default
# Runtime Power Management for PCIe bus devices: on=disable, auto=enable.
# Default: on (AC), auto (BAT)
#RUNTIME_PM_ON_AC=on
#RUNTIME_PM_ON_BAT=auto
# Exclude listed PCIe device adresses from Runtime PM.
# Note: this preserves the kernel driver default, to force a certain state
# use RUNTIME_PM_ENABLE/DISABLE instead.
# Separate multiple addresses with spaces.
# Use lspci to get the adresses (1st column).
# Default: <none>
#RUNTIME_PM_DENYLIST="11:22.3 44:55.6"
# Exclude PCIe devices assigned to the listed drivers from Runtime PM.
# Note: this preserves the kernel driver default, to force a certain state
# use RUNTIME_PM_ENABLE/DISABLE instead.
# Separate multiple drivers with spaces.
# Default: "mei_me nouveau radeon xhci_hcd", use "" to disable completely.
#RUNTIME_PM_DRIVER_DENYLIST="mei_me nouveau radeon xhci_hcd"
# Permanently enable/disable Runtime PM for listed PCIe device addresses
# (independent of the power source). This has priority over all preceding
# Runtime PM settings. Separate multiple addresses with spaces.
# Use lspci to get the adresses (1st column).
# Default: <none>
#RUNTIME_PM_ENABLE="11:22.3"
#RUNTIME_PM_DISABLE="44:55.6"
# Set to 0 to disable, 1 to enable USB autosuspend feature.
# Default: 1
#USB_AUTOSUSPEND=1
# Exclude listed devices from USB autosuspend (separate with spaces).
# Use lsusb to get the ids.
# Note: input devices (usbhid) and libsane-supported scanners are excluded
# automatically.
# Default: <none>
#USB_DENYLIST="1111:2222 3333:4444"
# Exclude audio devices from USB autosuspend:
# 0=do not exclude, 1=exclude.
# Default: 1
#USB_EXCLUDE_AUDIO=1
# Exclude bluetooth devices from USB autosuspend:
# 0=do not exclude, 1=exclude.
# Default: 0
#USB_EXCLUDE_BTUSB=0
# Exclude phone devices from USB autosuspend:
# 0=do not exclude, 1=exclude (enable charging).
# Default: 0
#USB_EXCLUDE_PHONE=0
# Exclude printers from USB autosuspend:
# 0=do not exclude, 1=exclude.
# Default: 1
#USB_EXCLUDE_PRINTER=1
# Exclude WWAN devices from USB autosuspend:
# 0=do not exclude, 1=exclude.
# Default: 0
#USB_EXCLUDE_WWAN=0
# Allow USB autosuspend for listed devices even if already denylisted or
# excluded above (separate with spaces). Use lsusb to get the ids.
# Default: 0
#USB_ALLOWLIST="1111:2222 3333:4444"
# Restore radio device state (Bluetooth, WiFi, WWAN) from previous shutdown
# on system startup: 0=disable, 1=enable.
# Note: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below
# are ignored when this is enabled.
# Default: 0
#RESTORE_DEVICE_STATE_ON_STARTUP=0
# Radio devices to disable on startup: bluetooth, nfc, wifi, wwan.
# Separate multiple devices with spaces.
# Default: <none>
#DEVICES_TO_DISABLE_ON_STARTUP="bluetooth nfc wifi wwan"
# Radio devices to enable on startup: bluetooth, nfc, wifi, wwan.
# Separate multiple devices with spaces.
# Default: <none>
#DEVICES_TO_ENABLE_ON_STARTUP="wifi"
# Radio devices to enable on AC: bluetooth, nfc, wifi, wwan.
# Default: <none>
#DEVICES_TO_ENABLE_ON_AC="bluetooth nfc wifi wwan"
# Radio devices to disable on battery: bluetooth, nfc, wifi, wwan.
# Default: <none>
#DEVICES_TO_DISABLE_ON_BAT="bluetooth nfc wifi wwan"
# Radio devices to disable on battery when not in use (not connected):
# bluetooth, nfc, wifi, wwan.
# Default: <none>
#DEVICES_TO_DISABLE_ON_BAT_NOT_IN_USE="bluetooth nfc wifi wwan"
# Battery Care -- Charge thresholds
# Charging starts when the charger is connected and the charge level
# is below the start threshold. Charging stops when the charge level
# is above the stop threshold.
# Required hardware: Lenovo ThinkPads and other laptop brands are driven
# via specific plugins:
# - Use the tlp-stat -b command to see if a plugin for your hardware is
# active and to look up vendor-specific threshold values. Some
# laptops support only 1 (on)/0 (off) instead of a percentage level.
# - If your hardware supports a start *and* a stop threshold, you must
# specify both, otherwise TLP will refuse to apply the single threshold.
# - If your hardware supports only a stop threshold, set the start
# value to 0.
# - The names of the batteries shown by tlp-stat -b don't have to match
# the _BAT0 or _BAT1 parameter qualifiers. Please refer to [2]
# to see which qualifier applies to which battery.
# For further explanation and all vendor specific details refer to
# [1] https://linrunner.de/tlp/settings/battery.html
# [2] https://linrunner.de/tlp/settings/bc-vendors.html
# BAT0: Main battery
# Default: <none>
# Battery charge level below which charging will begin.
#START_CHARGE_THRESH_BAT0=75
# Battery charge level above which charging will stop.
#STOP_CHARGE_THRESH_BAT0=80
# BAT1: Secondary battery (primary on some laptops)
# Default: <none>
# Battery charge level below which charging will begin.
#START_CHARGE_THRESH_BAT1=75
# Battery charge level above which charging will stop.
#STOP_CHARGE_THRESH_BAT1=80
# Restore charge thresholds when AC is unplugged: 0=disable, 1=enable.
# Default: 0
#RESTORE_THRESHOLDS_ON_BAT=1
# ----------------------------------------------------------------------------
# tlp-rdw - Radio Device Wizard
# Note: requires installation of the optional package tlp-rdw.
# Possible devices: bluetooth, wifi, wwan.
# Separate multiple radio devices with spaces.
# Default: <none> (for all parameters below)
# Radio devices to disable on connect.
#DEVICES_TO_DISABLE_ON_LAN_CONNECT="wifi wwan"
#DEVICES_TO_DISABLE_ON_WIFI_CONNECT="wwan"
#DEVICES_TO_DISABLE_ON_WWAN_CONNECT="wifi"
# Radio devices to enable on disconnect.
#DEVICES_TO_ENABLE_ON_LAN_DISCONNECT="wifi wwan"
#DEVICES_TO_ENABLE_ON_WIFI_DISCONNECT=""
#DEVICES_TO_ENABLE_ON_WWAN_DISCONNECT=""
# Radio devices to enable/disable when docked.
# Note: not all docks can be recognized, especially USB-C docks. If a LAN
# cable is connected to the dock, use DEVICES_TO_DISABLE_ON_LAN_CONNECT
# and DEVICES_TO_ENABLE_ON_LAN_DISCONNECT instead.
#DEVICES_TO_ENABLE_ON_DOCK=""
#DEVICES_TO_DISABLE_ON_DOCK=""
# Radio devices to enable/disable when undocked.
#DEVICES_TO_ENABLE_ON_UNDOCK="wifi"
#DEVICES_TO_DISABLE_ON_UNDOCK=""
+9 -70
View File
@@ -1,18 +1,14 @@
acpi
adobe-source-han-sans-jp-fonts
alsa-utils
android-studio
android-tools
arandr
arc-gtk-theme
archlinux-keyring
arc-icon-theme
aria2
aspell-en
aspell-nl
autorandr
base
base-devel
brightnessctl
bspwm
capitaine-cursors
checkbashisms
chromium
@@ -21,32 +17,23 @@ cmake
dhcpcd
dialog
dnsmasq
domoticz-git
dos2unix
downgrade
doxygen
duf
dunst
ebtables
edk2-ovmf
efibootmgr
emacs-nativecomp
evtest
exfat-utils
feh
ffmpegthumbnailer
firefox
frei0r-plugins
fritzing
gdb
gedit
ghc
git
gnome-calculator
gnome-keyring
gnome-themes-extra
gparted
graphviz
gst-plugins-good
gucharmap
gvfs
@@ -54,32 +41,22 @@ gvfs-gphoto2
gvfs-mtp
gvim
htop
i3lock-color-git
hunspell
hunspell-en_us
hunspell-nl
imagemagick
inetutils
inkscape
intel-media-driver
intel-media-sdk
intel-ucode
isync
iw
jdk11-openjdk
jdownloader2
jq
kcachegrind
kdenlive
keepmenu-git
kolourpaint
kotlin-language-server-git
krita
lib32-alsa-lib
lib32-alsa-plugins
lib32-glibc
lib32-libpulse
lib32-openal
lib32-vulkan-intel
libmtp
libnotify-id
libvirt
linux
linux-firmware
@@ -87,17 +64,11 @@ linux-headers
linux-lts
linux-lts-headers
llvm
lua-language-server-git
lvm2
lxappearance
maim
manafiles-git
man-db
man-pages
mariadb
mdadm
mesa-demos
minted
mkvtoolnix-cli
moka-icon-theme-git
mpv
@@ -106,10 +77,9 @@ mysql-workbench
namcap
ncdu
neofetch
nerd-fonts-dejavu-complete
neovim
netctl
nlohmann-json
nodejs-intelephense
ntfs-3g
openssh
otf-font-awesome
@@ -118,12 +88,7 @@ pacman-contrib
pamixer
pavucontrol
pdfjs
platformio
polkit-kde-agent
polybar
poppler-glib
pulseaudio
pulseaudio-alsa
python-adblock
python-beautifulsoup4
python-certifi
@@ -131,46 +96,33 @@ python-filelock
python-flask
python-google-api-python-client
python-google-auth-oauthlib
python-image
python-matplotlib
python-opengl
python-pycurl
python-pyqt5
python-pyusb
python-tqdm
python-watchdog
python-zstandard
qbittorrent
qemu
qemu-arch-extra
qt5ct
qt5-serialport
qt5-tools
qt5ct
qt5gtk2
qt6ct
qt6gtk2
r
redshift
reflector
renderdoc-bin
rofi
rsync
rtmpdump
rxvt-unicode
signal-desktop
smartmontools
socat
sqlitebrowser
sshfs
stalonetray
streamlink
sxhkd
syncthing
synergy2-bin
sysfsutils
texlab
texlive-bibtexextra
texlive-core
texlive-fontsextra
texlive-formatsextra
texlive-games
@@ -190,8 +142,8 @@ tokei
tree
trizen
ttf-dejavu
ttf-dejavu-nerd
ttf-joypixels
ttf-ms-win10
tumbler
tumbler-extra-thumbnailers
unrar
@@ -199,27 +151,14 @@ unzip
usbutils
valgrind
ventoy-bin
vim-spell-en
vim-spell-nl
virt-manager
vulkan-intel
wget
wine-staging
wpa_supplicant
x264
x86_energy_perf_policy
xarchiver
xclip
xdo
xdotool
xf86-input-wacom
xfsprogs
xorg-server
xorg-xev
xorg-xinit
xorg-xinput
xorg-xprop
xorg-xrandr
xorg-xsetroot
yt-dlp
yt-dlp-drop-in
zathura
+51
View File
@@ -0,0 +1,51 @@
arandr
autorandr
bspwm
doxygen
ebtables
emacs-nativecomp
frei0r-plugins
fritzing
ghc
graphviz
i3lock-color-git
intel-media-driver
intel-media-sdk
intel-ucode
lib32-vulkan-intel
libmtp
libnotify-id
lxappearance
maim
mdadm
minted
platformio
polkit-kde-agent
polybar
python-image
python-tqdm
qemu
qemu-arch-extra
qt5gtk2
qt6gtk2
redshift
rofi
rxvt-unicode
stalonetray
sxhkd
synergy2-bin
texlive-core
ttf-ms-win10
vulkan-intel
x264
xarchiver
xclip
xdo
xdotool
xorg-server
xorg-xev
xorg-xinit
xorg-xinput
xorg-xprop
xorg-xrandr
xorg-xsetroot
+32
View File
@@ -0,0 +1,32 @@
amd-ucode
ark
dxvk-bin
emacs-wayland
gamescope
gammastep
ghostty
grim
hypridle
hyprland
hyprlock
hyprpaper
hyprpolkitagent
kvantum
kvantum-qt5
lib32-mesa
lib32-vkd3d-proton-git
lib32-vulkan-radeon
nwg-look
pipewire-alsa
pipewire-pulse
rofi-wayland
rtkit
slurp
steam
sunshine-bin
vkd3d-proton-bin
vulkan-radeon
waybar
wl-clipboard
xdg-desktop-portal-hyprland
ydotool