Compare commits

40 Commits

Author SHA1 Message Date
622b723ae8 Merge branch 'master' of git.opal.sh:opal/opalfiles 2026-03-12 09:05:22 -07:00
30d2facbbc zsh chage 2026-03-12 09:04:09 -07:00
a8dd455576 changed lock 2026-03-09 18:32:22 -07:00
37d4dd8a0b updated gitignore 2026-03-09 14:45:58 -07:00
67525324f0 added rofi back 2026-03-09 14:43:09 -07:00
c714c0d946 Merge branch 'master' of git.opal.sh:opal/opalfiles 2026-03-04 08:26:48 -08:00
d26642e949 stoof 2026-03-04 08:26:03 -08:00
499a0153c3 niri edp1 2026-02-24 07:39:43 -08:00
8db99f83de adding stoof 2026-02-23 20:30:39 -08:00
e2c94ea82e created apply func 2026-02-22 10:08:26 -08:00
8e1b0376c5 beeg beeg one 2026-02-22 08:57:47 -08:00
f6e4a4e209 stoof 2026-01-29 18:10:18 -08:00
1cb71e6356 switch back to ff 2025-12-16 09:01:03 -08:00
ea135fa66c fixed fonts, packages, simplified doom config 2025-12-16 08:37:55 -08:00
da94e1d7fb thing 2025-12-15 18:00:13 -08:00
53d9cbc5bd Merge branch 'master' of git.opal.sh:opal/opalfiles 2025-12-14 08:38:12 -08:00
d46b62c623 doing a thing 2025-12-14 08:36:50 -08:00
93850623dd fixes 2025-12-03 13:50:17 -08:00
b04cbd578f woop 2025-11-13 13:53:51 -08:00
5b5320f04f vc-ignore stuff 2025-11-11 09:37:45 -08:00
9c678e33a0 safe themes? 2025-11-10 20:05:00 -08:00
e8d127bb68 stoof 2025-11-10 20:04:44 -08:00
c3711f7428 stoof 2025-11-05 19:36:09 -08:00
c32d03310d web wartcher 2025-11-03 16:34:43 -08:00
59d5824e04 changed theme 2025-11-03 16:34:27 -08:00
87b4714dbb stoof 2025-11-03 13:11:05 -08:00
6b3ed10862 Merge branch 'master' of git.opal.sh:opal/opalfiles 2025-11-03 09:23:44 -08:00
6ad750b3bf Merge branch 'master' of git.opal.sh:opal/opalfiles 2025-11-03 09:07:53 -08:00
41cb8a1b9d woop woop 2025-11-03 09:07:49 -08:00
1e6c05b893 bumping hypridle stuff 2025-10-23 08:43:50 -07:00
6323954dd1 bloop 2025-10-21 19:54:54 -07:00
5e857055e4 making webwatcher better hopefully 2025-10-17 11:47:19 -07:00
b39d96f4a0 adding webwatcher and some git aliases to zsh 2025-10-17 11:10:17 -07:00
59c0a91b14 Merge branch 'master' of git.opal.sh:opal/opalfiles 2025-10-15 17:26:48 -07:00
d4f0467df9 edited stoof 2025-10-15 17:26:29 -07:00
1f8882950c extending time before suspend + locking before 2025-10-15 17:13:56 -07:00
d27ac95464 fixed wlogout? 2025-10-14 21:51:48 -07:00
685d35f825 more stoof 2025-10-14 21:48:59 -07:00
2671dfefd2 more stoof 2025-10-14 21:46:29 -07:00
2e6802f327 more hypr stuff 2025-10-14 21:44:05 -07:00
46 changed files with 1070 additions and 172 deletions

View File

@@ -5,15 +5,15 @@ TERM = "xterm-256color"
size = 16
[font.normal]
family = "Monospace"
style = "Regular"
family = "VictorMono Nerd Font"
style = "Medium"
[font.offset]
x = 0
y = 0
[window]
opacity = 0.9
opacity = 0.95
[general]
import = ["/home/opal/.config/alacritty/theme.toml"]
import = ["/home/opal/.config/alacritty/gruvbox-material-hard-dark.toml"]

View File

@@ -0,0 +1,31 @@
[colors.primary]
background = '#10140f'
foreground = '#e0e4db'
[colors.selection]
text = '#e0e4db'
background = '#1b5e20'
[colors.cursor]
text = '#10140f'
cursor = '#4caf50'
[colors.normal]
black = '#10140f'
red = '#c96a4c'
green = '#4daf4c'
yellow = '#dacb52'
blue = '#35a639'
magenta = '#005103'
cyan = '#4caf50'
white = '#abb7ab'
[colors.bright]
black = '#717b71'
red = '#eca088'
green = '#80d27e'
yellow = '#fff39a'
blue = '#63c067'
magenta = '#89e38d'
cyan = '#b6f4b9'
white = '#f6fdf6'

View File

@@ -1,28 +1,27 @@
# Colors (Gruvbox Material Hard Dark)
# Colors (Custom Light Theme)
# Default colors
[colors.primary]
background = '#1d2021'
foreground = '#d4be98'
background = '#e5dfd3'
foreground = '#4a5353'
# Normal colors
[colors.normal]
black = '#32302f'
red = '#ea6962'
green = '#a9b665'
yellow = '#d8a657'
blue = '#7daea3'
magenta = '#d3869b'
cyan = '#89b482'
white = '#d4be98'
black = '#4a5353'
red = '#896d6d'
green = '#6d896d'
yellow = '#89896d'
blue = '#6d6d89'
magenta = '#896d89'
cyan = '#6d8989'
white = '#8a8175'
# Bright colors (same as normal colors)
# Bright colors
[colors.bright]
black = '#32302f'
red = '#ea6962'
green = '#a9b665'
yellow = '#d8a657'
blue = '#7daea3'
magenta = '#d3869b'
cyan = '#89b482'
white = '#d4be98'
black = '#4a5353'
red = '#a38989'
green = '#89a389'
yellow = '#a3a389'
blue = '#8989a3'
magenta = '#a389a3'
cyan = '#89a3a3'
white = '#6a6155'

View File

@@ -1,6 +1,8 @@
directory: /mnt/media/music/slsk/to-sort
directory: /mnt/storage/music/slsk/to-sort
library: ~/.config/beets/beets-library.db
plugins: musicbrainz
import:
move: yes

View File

@@ -16,6 +16,19 @@
(exec-path-from-shell-initialize)
(exec-path-from-shell-copy-envs '("SSH_AUTH_SOCK" "SSH_AGENT_PID")))
(setq vc-ignore-dir-regexp
(format "\\(%s\\)\\|\\(%s\\)"
vc-ignore-dir-regexp
tramp-file-name-regexp))
;; Disable projectile with remote files
(defun opal/maybe-disable-projectile ()
"Disable projectile-mode for remote files."
(when (file-remote-p default-directory)
(projectile-mode -1)))
(add-hook 'find-file-hook #'opal/maybe-disable-projectile)
;; Set name & e-mail
(setq user-full-name "opal"
user-mail-address "ry.orlando@proton.me")
@@ -31,15 +44,13 @@
;; Remove line numbers from specific modes
(dolist (mode '(org-mode-hook
term-mode-hook
shell-mode-hook
eshell-mode-hook))
(add-hook mode (lambda () (display-line-numbers-mode 0))))
;; Font configuration
(set-face-attribute 'default nil :font "Monospace" :height 170)
(set-face-attribute 'fixed-pitch nil :font "Monospace" :height 1.0)
(set-face-attribute 'variable-pitch nil :font "ETBembo" :height 1.0)
;; Font Config
(setq doom-font (font-spec :family "VictorMono Nerd Font" :size 22 :weight 'medium)
doom-variable-pitch-font (font-spec :family "VictorMono Nerd Font" :size 22 :weight 'medium :slant 'italic))
(defun opal/org-font-setup ()
;; Replace list hyphen with dot
@@ -47,8 +58,7 @@
'(("^ *\\([-]\\) "
(0 (prog1 () (compose-region (match-beginning 1) (match-end 1)
""))))))
;; Set faces for heading levels
;; Set heading sizes only
(dolist (face '((org-level-1 . 1.2)
(org-level-2 . 1.1)
(org-level-3 . 1.05)
@@ -57,36 +67,27 @@
(org-level-6 . 1.1)
(org-level-7 . 1.1)
(org-level-8 . 1.1)))
(set-face-attribute (car face) nil :font "ETBembo" :weight 'regular :height (cdr face)))
(set-face-attribute (car face) nil :height (cdr face)))
;; Set properties and scheduling faces to inherit variable-pitch and be smaller
;; Comment out these lines because mixed-pitch-mode will handle these.
(set-face-attribute 'org-property-value nil :inherit 'variable-pitch :height 150)
(set-face-attribute 'org-special-keyword nil :inherit 'variable-pitch :height 150)
(set-face-attribute 'org-scheduled-today nil :inherit 'variable-pitch :height 150)
(set-face-attribute 'org-drawer nil :inherit 'variable-pitch :height 150)
(set-face-attribute 'org-date nil :inherit 'variable-pitch :height 150)
;; Ensure that all agenda items use fixed-pitch font
;; Ensure that all agenda items inherit default
(custom-set-faces
'(org-agenda-date-today ((t (:inherit fixed-pitch :weight bold))))
'(org-agenda-date ((t (:inherit fixed-pitch))))
'(org-agenda-date-weekend ((t (:inherit fixed-pitch :weight bold))))
'(org-agenda-done ((t (:inherit fixed-pitch :strike-through t))))
'(org-agenda-dimmed-todo-face ((t (:inherit fixed-pitch))))
'(org-agenda-structure ((t (:inherit fixed-pitch))))
'(org-scheduled ((t (:inherit fixed-pitch))))
'(org-scheduled-today ((t (:inherit fixed-pitch))))
'(org-scheduled-previously ((t (:inherit fixed-pitch))))
'(org-upcoming-deadline ((t (:inherit fixed-pitch))))
'(org-deadline-announce ((t (:inherit fixed-pitch))))
'(org-time-grid ((t (:inherit fixed-pitch)))))
)
'(org-agenda-date-today ((t (:inherit default :weight bold))))
'(org-agenda-date ((t (:inherit default))))
'(org-agenda-date-weekend ((t (:inherit default :weight bold))))
'(org-agenda-done ((t (:inherit default :strike-through t))))
'(org-agenda-dimmed-todo-face ((t (:inherit default))))
'(org-agenda-structure ((t (:inherit default))))
'(org-scheduled ((t (:inherit default))))
'(org-scheduled-today ((t (:inherit default))))
'(org-scheduled-previously ((t (:inherit default))))
'(org-upcoming-deadline ((t (:inherit default))))
'(org-deadline-announce ((t (:inherit default))))
'(org-time-grid ((t (:inherit default))))))
(defun opal/org-mode-setup ()
(org-indent-mode)
(visual-line-mode 1)
(mixed-pitch-mode 1))
(variable-pitch-mode 1))
(use-package org
:commands (org-capture org-agenda)
@@ -96,10 +97,10 @@
(setq org-agenda-start-with-log-mode t)
(setq org-log-done 'time)
(setq org-log-into-drawer t)
(setq org-startup-folded t)
;;(setq org-startup-folded t)
(setq org-indent-indentation-per-level 2)
(setq org-hide-emphasis-markers t)
(setq org-agenda-files (directory-files-recursively "~/sync/org/agenda/" "\\.org$"))
(setq org-agenda-files (directory-files-recursively "~/Sync/org/agenda/" "\\.org$"))
(setq org-agenda-todo-ignore-scheduled 'future)
(require 'org-habit)
@@ -119,8 +120,6 @@
("EASY" . (:foreground "MediumSeaGreen" :weight bold))
("DONE" . (:foreground "ForestGreen" :weight bold))))
(add-hook 'org-mode-hook #'org-make-toc-mode)
(setq org-agenda-custom-commands
'(("d" "GTD Dashboard"
;; Begin list of blocks:
@@ -167,18 +166,18 @@
;; Create capture templates
(setq org-capture-templates
`(("t" "Tasks")
("tw" "Work Task" entry (file+headline "~/sync/org/agenda/work.org" "Inbox")
("tw" "Work Task" entry (file+headline "~/Sync/org/agenda/work.org" "Inbox")
"* TODO %?\n %U\n %i" :empty-lines 1)
("tp" "Personal Task" entry (file+headline "~/sync/org/agenda/personal.org" "Inbox")
("tp" "Personal Task" entry (file+headline "~/Sync/org/agenda/personal.org" "Inbox")
"* TODO %?\n %U\n %i" :empty-lines 1)))
;; Tell Org to stop indenting inside of org source blocks.
(setq org-edit-src-content-indentation 0)
;; Set org agenda dir
(setq org-directory "~/sync/org/agenda")
(setq org-directory "~/Sync/org/agenda")
(setq org-agenda-include-diary t)
(setq diary-file "~/sync/org/diary")
(setq diary-file "~/Sync/org/diary")
(require 'org-tempo)
(dolist (template '(("sh" . "src shell")
@@ -238,12 +237,12 @@
(eww-browse-url link)
(message "No link to open."))))
(defun opal/elfeed-open-in-librewolf ()
"Open the current Elfeed entry link in LibreWolf."
(defun opal/elfeed-open-in-firefox()
"Open the current Elfeed entry link in firefox."
(interactive)
(let ((link (elfeed-entry-link (elfeed-search-selected :single))))
(if link
(let ((browse-url-generic-program "librewolf"))
(let ((browse-url-generic-program "firefox"))
(browse-url-generic link))
(message "No link to open."))))
@@ -284,7 +283,7 @@
(use-package elfeed-org
:ensure t
:config
(setq rmh-elfeed-org-files '("~/sync/org/elfeed/feeds.org")))
(setq rmh-elfeed-org-files '("~/Sync/org/elfeed/feeds.org")))
(after! osm
(set-popup-rule! "^\\*osm\\*" :ignore t))
@@ -370,6 +369,11 @@
(setq browse-url-generic-program "librewolf")
(setq browse-url-browser-function 'browse-url-generic)
;; Attempt to fix slow Tramp issues
(remove-hook 'evil-insert-state-exit-hook #'doom-modeline-update-buffer-file-name)
(remove-hook 'find-file-hook #'doom-modeline-update-buffer-file-name)
(remove-hook 'find-file-hook 'forge-bug-reference-setup)
(use-package! tramp
:init
;; TRAMP optimizations

View File

@@ -7,14 +7,28 @@
["#282c34" "#ff6c6b" "#98be65" "#ECBE7B" "#51afef" "#c678dd" "#46D9FF" "#bbc2cf"])
'(auth-source-save-behavior nil)
'(custom-safe-themes
'("d9a947788a4c5f7051c4ad3a3e0e9d76218209899683d3e9ed1e2aa6cd10d462" "b00cb300c114f3b971370c9ef9b6b8a347fa02b1af2aa4c02dab47eaa0ad930b" "d6d4e0512dcaae663f7bd304557d6bc8b78c576be5af9c0b62b8447fb79b5fde" "13096a9a6e75c7330c1bc500f30a8f4407bd618431c94aeab55c9855731a95e1" "48042425e84cd92184837e01d0b4fe9f912d875c43021c3bcb7eeb51f1be5710" "c5878086e65614424a84ad5c758b07e9edcf4c513e08a1c5b1533f313d1b17f1" "10e5d4cc0f67ed5cafac0f4252093d2119ee8b8cb449e7053273453c1a1eb7cc" "ffafb0e9f63935183713b204c11d22225008559fa62133a69848835f4f4a758c" "7964b513f8a2bb14803e717e0ac0123f100fb92160dcf4a467f530868ebaae3e" "f053f92735d6d238461da8512b9c071a5ce3b9d972501f7a5e6682a90bf29725" "944d52450c57b7cbba08f9b3d08095eb7a5541b0ecfb3a0a9ecd4a18f3c28948" "dad40020beea412623b04507a4c185079bff4dcea20a93d8f8451acb6afc8358" "a0415d8fc6aeec455376f0cbcc1bee5f8c408295d1c2b9a1336db6947b89dd98" "a9a67b318b7417adbedaab02f05fa679973e9718d9d26075c6235b1f0db703c8" "1704976a1797342a1b4ea7a75bdbb3be1569f4619134341bd5a4c1cfb16abad4" "b5803dfb0e4b6b71f309606587dd88651efe0972a5be16ece6a958b197caeed8" default))
'("02d422e5b99f54bd4516d4157060b874d14552fe613ea7047c4a5cfa1288cf4f"
"58440185e94d5c28dbcc2b5720c88a5c1f4420bf87936a62f8a47d8cf20730e9"
"d9a947788a4c5f7051c4ad3a3e0e9d76218209899683d3e9ed1e2aa6cd10d462"
"b00cb300c114f3b971370c9ef9b6b8a347fa02b1af2aa4c02dab47eaa0ad930b"
"d6d4e0512dcaae663f7bd304557d6bc8b78c576be5af9c0b62b8447fb79b5fde"
"13096a9a6e75c7330c1bc500f30a8f4407bd618431c94aeab55c9855731a95e1"
"48042425e84cd92184837e01d0b4fe9f912d875c43021c3bcb7eeb51f1be5710"
"c5878086e65614424a84ad5c758b07e9edcf4c513e08a1c5b1533f313d1b17f1"
"10e5d4cc0f67ed5cafac0f4252093d2119ee8b8cb449e7053273453c1a1eb7cc"
"ffafb0e9f63935183713b204c11d22225008559fa62133a69848835f4f4a758c"
"7964b513f8a2bb14803e717e0ac0123f100fb92160dcf4a467f530868ebaae3e"
"f053f92735d6d238461da8512b9c071a5ce3b9d972501f7a5e6682a90bf29725"
"944d52450c57b7cbba08f9b3d08095eb7a5541b0ecfb3a0a9ecd4a18f3c28948"
"dad40020beea412623b04507a4c185079bff4dcea20a93d8f8451acb6afc8358"
"a0415d8fc6aeec455376f0cbcc1bee5f8c408295d1c2b9a1336db6947b89dd98"
"a9a67b318b7417adbedaab02f05fa679973e9718d9d26075c6235b1f0db703c8"
"1704976a1797342a1b4ea7a75bdbb3be1569f4619134341bd5a4c1cfb16abad4"
"b5803dfb0e4b6b71f309606587dd88651efe0972a5be16ece6a958b197caeed8" default))
'(exwm-floating-border-color "#191b20")
'(fci-rule-color "#5B6268")
'(highlight-tail-colors
((("#333a38" "#99bb66" "green")
. 0)
(("#2b3d48" "#46D9FF" "brightcyan")
. 20)))
((("#333a38" "#99bb66" "green") . 0) (("#2b3d48" "#46D9FF" "brightcyan") . 20)))
'(jdee-db-active-breakpoint-face-colors (cons "#1B2229" "#51afef"))
'(jdee-db-requested-breakpoint-face-colors (cons "#1B2229" "#98be65"))
'(jdee-db-spec-breakpoint-face-colors (cons "#1B2229" "#3f444a"))
@@ -25,25 +39,12 @@
["#282c34" "#ff6c6b" "#98be65" "#ECBE7B" "#51afef" "#c678dd" "#46D9FF" "#bbc2cf"])
'(vc-annotate-background "#282c34")
'(vc-annotate-color-map
(list
(cons 20 "#98be65")
(cons 40 "#b4be6c")
(cons 60 "#d0be73")
(cons 80 "#ECBE7B")
(cons 100 "#e6ab6a")
(cons 120 "#e09859")
(cons 140 "#da8548")
(cons 160 "#d38079")
(cons 180 "#cc7cab")
(cons 200 "#c678dd")
(cons 220 "#d974b7")
(cons 240 "#ec7091")
(cons 260 "#ff6c6b")
(cons 280 "#cf6162")
(cons 300 "#9f585a")
(cons 320 "#6f4e52")
(cons 340 "#5B6268")
(cons 360 "#5B6268")))
(list (cons 20 "#98be65") (cons 40 "#b4be6c") (cons 60 "#d0be73")
(cons 80 "#ECBE7B") (cons 100 "#e6ab6a") (cons 120 "#e09859")
(cons 140 "#da8548") (cons 160 "#d38079") (cons 180 "#cc7cab")
(cons 200 "#c678dd") (cons 220 "#d974b7") (cons 240 "#ec7091")
(cons 260 "#ff6c6b") (cons 280 "#cf6162") (cons 300 "#9f585a")
(cons 320 "#6f4e52") (cons 340 "#5B6268") (cons 360 "#5B6268")))
'(vc-annotate-very-old-color nil))
(custom-set-faces
;; custom-set-faces was added by Custom.

View File

@@ -10,7 +10,7 @@
;;layout ; auie,ctsrnm is the superior home row
:completion
company ; the ultimate code completion backend
;;company ; the ultimate code completion backend
;;helm ; the *other* search engine for love and life
;;ido ; the other *other* search engine...
;;ivy ; a search engine for love and life
@@ -35,8 +35,8 @@
tabs ; a tab bar for Emacs
;;treemacs ; a project drawer, like neotree but cooler
;;unicode ; extended unicode support for various languages
vc-gutter ; vcs diff in the fringe
vi-tilde-fringe ; fringe tildes to mark beyond EOB
;;vc-gutter ; vcs diff in the fringe
;;vi-tilde-fringe ; fringe tildes to mark beyond EOB
;;window-select ; visually switch windows
workspaces ; tab emulation, persistence & separate workspaces
;;zen ; distraction-free coding or writing
@@ -45,7 +45,7 @@
(evil +everywhere); come to the dark side, we have cookies
file-templates ; auto-snippets for empty files
fold ; (nigh) universal code folding
(format +onsave) ; automated prettiness
;;(format +onsave) ; automated prettiness
;;god ; run Emacs commands without modifier keys
;;lispy ; vim for lisp, for people who don't like vim
;;multiple-cursors ; editing in many places at once
@@ -60,10 +60,10 @@
electric ; smarter, keyword-based electric-indent
;;ibuffer ; interactive buffer management
undo ; persistent, smarter undo for your inevitable mistakes
vc ; version-control and Emacs, sitting in a tree
;;vc ; version-control and Emacs, sitting in a tree
:term
eshell ; the elisp shell that works everywhere
;;eshell ; the elisp shell that works everywhere
;;shell ; simple shell REPL for Emacs
;;term ; basic terminal emulator for Emacs
vterm ; the best terminal emulation in Emacs
@@ -74,7 +74,7 @@
;;grammar ; tasing grammar mistake every you make
:tools
ansible
;;ansible
;;biblio ; Writes a PhD for you (citation needed)
;;debugger ; FIXME stepping through code, to help you add bugs
;;direnv
@@ -125,7 +125,7 @@
;;fsharp ; ML stands for Microsoft's Language
;;fstar ; (dependent) types and (monadic) effects and Z3
;;gdscript ; the language you waited for
;;(go +lsp) ; the hipster dialect
(go +lsp) ; the hipster dialect
;;(haskell +lsp) ; a language that's lazier than I am
;;hy ; readability of scheme w/ speed of python
;;idris ; a language you can depend on
@@ -155,7 +155,7 @@
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
;;rust ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
;;scala ; java, but good
(scheme +guile) ; a fully conniving family of lisps
;;(scheme +guile) ; a fully conniving family of lisps
sh ; she sells {ba,z,fi}sh shells on the C xor
;;sml
;;solidity ; do you need a blockchain? No.

View File

@@ -2,15 +2,12 @@
(package! exec-path-from-shell)
(package! org-bullets)
(package! visual-fill-column)
(package! org-make-toc)
(package! ef-themes)
(package! org-drill)
(package! pomm)
(package! mixed-pitch)
(package! guess-language)
(package! nov)
(package! google-translate)
(package! org-roam)
;; Remove
(package! dirvish :disable t)

View File

@@ -1,34 +0,0 @@
[Added Associations]
video/mp4=org.videolan.VLC.deskop;mpv.desktop;
video/quicktime=org.videolan.VLC.deskop;mpv.desktop;
video/x-matroska=mpv.desktop;org.videolan.VLC.desktop;
application/vnd.rar=xarchiver.desktop;userapp-p7zipForFilemanager-FIKDV2.desktop;
image/jpeg=userapp-lximage-qt-KLEC62.desktop;
application/x-7z-compressed=xarchiver.desktop;userapp-p7zipForFilemanager-D7VDC3.desktop;
video/webm=mpv.desktop;
video/mpeg=mpv.desktop;
image/png=userapp-lximage-qt-KLEC62.desktop;
application/zip=xarchiver.desktop;
application/x-zerosize=userapp-lximage-qt-KLEC62.desktop;
image/webp=org.gnome.gThumb.desktop;
application/pdf=org.pwmt.zathura-pdf-poppler.desktop;
[Default Applications]
video/mp4=mpv.desktop
video/quicktime=mpv.desktop
text/html=librewolf.desktop
application/xhtml+xml=librewolf.desktop
application/xml=librewolf.desktop
text/xml=librewolf.desktop
text/xsl=librewolf.desktop
application/rss+xml=librewolf.desktop
application/atom+xml=librewolf.desktop
x-scheme-handler/http=librewolf.desktop
x-scheme-handler/https=librewolf.desktop
x-scheme-handler/ftp=librewolf.desktop
x-scheme-handler/chrome=librewolf.desktop
x-scheme-handler/about=librewolf.desktop
x-scheme-handler/mailto=librewolf.desktop
image/jpeg=userapp-lximage-qt-KLEC62.desktop
application/x-zerosize=userapp-lximage-qt-KLEC62.desktop
application/pdf=org.pwmt.zathura-pdf-poppler.desktop

624
.config/niri/config.kdl Normal file
View File

@@ -0,0 +1,624 @@
// This config is in the KDL format: https://kdl.dev
// "/-" comments out the following node.
// Input device configuration.
// Find the full list of options on the wiki:
// https://yalter.github.io/niri/Configuration:-Input
input {
keyboard {
xkb {
// You can set rules, model, layout, variant and options.
// For more information, see xkeyboard-config(7).
// For example:
layout "us(altgr-intl)"
options "caps:escape"
// If this section is empty, niri will fetch xkb settings
// from org.freedesktop.locale1. You can control these using
// localectl set-x11-keymap.
}
repeat-rate 45
repeat-delay 250
// Enable numlock on startup, omitting this setting disables it.
numlock
}
// Next sections include libinput settings.
// Omitting settings disables them, or leaves them at their default values.
// All commented-out settings here are examples, not defaults.
touchpad {
// off
// tap
// dwt
// dwtp
// drag false
// drag-lock
// natural-scroll
// accel-speed 0.2
// accel-profile "flat"
// scroll-method "two-finger"
// disabled-on-external-mouse
}
mouse {
// off
// natural-scroll
// accel-speed 0.2
// accel-profile "flat"
// scroll-method "no-scroll"
}
trackpoint {
// off
// natural-scroll
// accel-speed 0.2
// accel-profile "flat"
// scroll-method "on-button-down"
// scroll-button 273
// scroll-button-lock
// middle-emulation
}
// Uncomment this to make the mouse warp to the center of newly focused windows.
// warp-mouse-to-focus
// Focus windows and outputs automatically when moving the mouse into them.
// Setting max-scroll-amount="0%" makes it work only on windows already fully on screen.
focus-follows-mouse max-scroll-amount="0%"
}
// You can configure outputs by their name, which you can find
// by running `niri msg outputs` while inside a niri instance.
// The built-in laptop monitor is usually called "eDP-1".
// Find more information on the wiki:
// https://yalter.github.io/niri/Configuration:-Outputs
// Remember to uncomment the node by removing "/-"!
output "DP-4" {
mode "2560x1440@179.959"
position x=0 y=0
}
output "DP-5" {
mode "2560x2880@59"
position x=2560 y=0
}
output "eDP-1" {
// Uncomment this line to disable this output.
// off
// Resolution and, optionally, refresh rate of the output.
// The format is "<width>x<height>" or "<width>x<height>@<refresh rate>".
// If the refresh rate is omitted, niri will pick the highest refresh rate
// for the resolution.
// If the mode is omitted altogether or is invalid, niri will pick one automatically.
// Run `niri msg outputs` while inside a niri instance to list all outputs and their modes.
mode "1920x1200@60"
// You can use integer or fractional scale, for example use 1.5 for 150% scale.
scale 1
// Transform allows to rotate the output counter-clockwise, valid values are:
// normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270.
transform "normal"
// Position of the output in the global coordinate space.
// This affects directional monitor actions like "focus-monitor-left", and cursor movement.
// The cursor can only move between directly adjacent outputs.
// Output scale and rotation has to be taken into account for positioning:
// outputs are sized in logical, or scaled, pixels.
// For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080,
// so to put another output directly adjacent to it on the right, set its x to 1920.
// If the position is unset or results in an overlap, the output is instead placed
// automatically.
// position x=1280 y=0
}
// Settings that influence how windows are positioned and sized.
// Find more information on the wiki:
// https://yalter.github.io/niri/Configuration:-Layout
layout {
// Set gaps around windows in logical pixels.
gaps 16
// When to center a column when changing focus, options are:
// - "never", default behavior, focusing an off-screen column will keep at the left
// or right edge of the screen.
// - "always", the focused column will always be centered.
// - "on-overflow", focusing a column will center it if it doesn't fit
// together with the previously focused column.
center-focused-column "never"
// You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between.
preset-column-widths {
// Proportion sets the width as a fraction of the output width, taking gaps into account.
// For example, you can perfectly fit four windows sized "proportion 0.25" on an output.
// The default preset widths are 1/3, 1/2 and 2/3 of the output.
proportion 0.33333
proportion 0.5
proportion 0.66667
// Fixed sets the width in logical pixels exactly.
// fixed 1920
}
// You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between.
// preset-window-heights { }
// You can change the default width of the new windows.
default-column-width { proportion 0.5; }
// If you leave the brackets empty, the windows themselves will decide their initial width.
// default-column-width {}
// By default focus ring and border are rendered as a solid background rectangle
// behind windows. That is, they will show up through semitransparent windows.
// This is because windows using client-side decorations can have an arbitrary shape.
//
// If you don't like that, you should uncomment `prefer-no-csd` below.
// Niri will draw focus ring and border *around* windows that agree to omit their
// client-side decorations.
//
// Alternatively, you can override it with a window rule called
// `draw-border-with-background`.
// You can change how the focus ring looks.
focus-ring {
// Uncomment this line to disable the focus ring.
// off
// How many logical pixels the ring extends out from the windows.
width 4
// Colors can be set in a variety of ways:
// - CSS named colors: "red"
// - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa"
// - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others.
// Color of the ring on the active monitor.
active-color "#7fc8ff"
// Color of the ring on inactive monitors.
//
// The focus ring only draws around the active window, so the only place
// where you can see its inactive-color is on other monitors.
inactive-color "#505050"
// You can also use gradients. They take precedence over solid colors.
// Gradients are rendered the same as CSS linear-gradient(angle, from, to).
// The angle is the same as in linear-gradient, and is optional,
// defaulting to 180 (top-to-bottom gradient).
// You can use any CSS linear-gradient tool on the web to set these up.
// Changing the color space is also supported, check the wiki for more info.
//
// active-gradient from="#80c8ff" to="#c7ff7f" angle=45
// You can also color the gradient relative to the entire view
// of the workspace, rather than relative to just the window itself.
// To do that, set relative-to="workspace-view".
//
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
}
// You can also add a border. It's similar to the focus ring, but always visible.
border {
// The settings are the same as for the focus ring.
// If you enable the border, you probably want to disable the focus ring.
off
width 4
active-color "#ffc87f"
inactive-color "#505050"
// Color of the border around windows that request your attention.
urgent-color "#9b0000"
// Gradients can use a few different interpolation color spaces.
// For example, this is a pastel rainbow gradient via in="oklch longer hue".
//
// active-gradient from="#e5989b" to="#ffb4a2" angle=45 relative-to="workspace-view" in="oklch longer hue"
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
}
// You can enable drop shadows for windows.
shadow {
// Uncomment the next line to enable shadows.
// on
// By default, the shadow draws only around its window, and not behind it.
// Uncomment this setting to make the shadow draw behind its window.
//
// Note that niri has no way of knowing about the CSD window corner
// radius. It has to assume that windows have square corners, leading to
// shadow artifacts inside the CSD rounded corners. This setting fixes
// those artifacts.
//
// However, instead you may want to set prefer-no-csd and/or
// geometry-corner-radius. Then, niri will know the corner radius and
// draw the shadow correctly, without having to draw it behind the
// window. These will also remove client-side shadows if the window
// draws any.
//
// draw-behind-window true
// You can change how shadows look. The values below are in logical
// pixels and match the CSS box-shadow properties.
// Softness controls the shadow blur radius.
softness 30
// Spread expands the shadow.
spread 5
// Offset moves the shadow relative to the window.
offset x=0 y=5
// You can also change the shadow color and opacity.
color "#0007"
}
// Struts shrink the area occupied by windows, similarly to layer-shell panels.
// You can think of them as a kind of outer gaps. They are set in logical pixels.
// Left and right struts will cause the next window to the side to always be visible.
// Top and bottom struts will simply add outer gaps in addition to the area occupied by
// layer-shell panels and regular gaps.
struts {
// left 64
// right 64
// top 64
// bottom 64
}
}
// Add lines like this to spawn processes at startup.
// Note that running niri as a session supports xdg-desktop-autostart,
// which may be more convenient to use.
// See the binds section below for more spawn examples.
spawn-at-startup "bash" "~/.local/bin/start-keyring.sh"
// This line starts waybar, a commonly used bar for Wayland compositors.
// spawn-at-startup "waybar"
// To run a shell command (with variables, pipes, etc.), use spawn-sh-at-startup:
// spawn-sh-at-startup "qs -c ~/source/qs/MyAwesomeShell"
hotkey-overlay {
// Uncomment this line to disable the "Important Hotkeys" pop-up at startup.
// skip-at-startup
}
// Uncomment this line to ask the clients to omit their client-side decorations if possible.
// If the client will specifically ask for CSD, the request will be honored.
// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners.
// This option will also fix border/focus ring drawing behind some semitransparent windows.
// After enabling or disabling this, you need to restart the apps for this to take effect.
prefer-no-csd
// You can change the path where screenshots are saved.
// A ~ at the front will be expanded to the home directory.
// The path is formatted with strftime(3) to give you the screenshot date and time.
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
// You can also set this to null to disable saving screenshots to disk.
// screenshot-path null
// Animation settings.
// The wiki explains how to configure individual animations:
// https://yalter.github.io/niri/Configuration:-Animations
animations {
// Uncomment to turn off all animations.
// off
// Slow down all animations by this factor. Values below 1 speed them up instead.
// slowdown 3.0
}
// Window rules let you adjust behavior for individual windows.
// Find more information on the wiki:
// https://yalter.github.io/niri/Configuration:-Window-Rules
// Work around WezTerm's initial configure bug
// by setting an empty default-column-width.
window-rule {
// This regular expression is intentionally made as specific as possible,
// since this is the default config, and we want no false positives.
// You can get away with just app-id="wezterm" if you want.
match app-id=r#"^org\.wezfurlong\.wezterm$"#
default-column-width {}
}
// Open the Firefox picture-in-picture player as floating by default.
window-rule {
// This app-id regular expression will work for both:
// - host Firefox (app-id is "firefox")
// - Flatpak Firefox (app-id is "org.mozilla.firefox")
match app-id=r#"firefox$"# title="^Picture-in-Picture$"
open-floating true
}
// Example: block out two password managers from screen capture.
// (This example rule is commented out with a "/-" in front.)
/-window-rule {
match app-id=r#"^org\.keepassxc\.KeePassXC$"#
match app-id=r#"^org\.gnome\.World\.Secrets$"#
block-out-from "screen-capture"
// Use this instead if you want them visible on third-party screenshot tools.
// block-out-from "screencast"
}
// Example: enable rounded corners for all windows.
// (This example rule is commented out with a "/-" in front.)
/-window-rule {
geometry-corner-radius 12
clip-to-geometry true
}
binds {
// Keys consist of modifiers separated by + signs, followed by an XKB key name
// in the end. To find an XKB name for a particular key, you may use a program
// like wev.
//
// "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
// when running as a winit window.
//
// Most actions that you can bind here can also be invoked programmatically with
// `niri msg action do-something`.
// Mod-Shift-/, which is usually the same as Mod-?,
// shows a list of important hotkeys.
Mod+Shift+Slash { show-hotkey-overlay; }
// Suggested binds for running programs: terminal, app launcher, screen locker.
Mod+Return hotkey-overlay-title="Open a Terminal: alacritty" { spawn "alacritty"; }
Mod+D hotkey-overlay-title="Run an Application: rofi" { spawn "~/.config/rofi/launchers/type-7/launcher.sh"; }
Ctrl+Shift+L hotkey-overlay-title="Lock the Screen" { spawn "dms" "ipc" "call" "lock" "lock"; }
// Use spawn-sh to run a shell command. Do this if you need pipes, multiple commands, etc.
// Note: the entire command goes as a single argument. It's passed verbatim to `sh -c`.
// For example, this is a standard bind to toggle the screen reader (orca).
// Super+Alt+S allow-when-locked=true hotkey-overlay-title=null { spawn-sh "pkill orca || exec orca"; }
Mod+Shift+E allow-when-locked=false hotkey-overlay-title=null { spawn-sh "~/.local/bin/emoji_insert.sh"; }
// Super+Alt+S allow-when-locked=true hotkey-overlay-title=null { spawn-sh "pkill orca || exec orca"; }
// Example volume keys mappings for PipeWire & WirePlumber.
// The allow-when-locked=true property makes them work even when the session is locked.
// Using spawn-sh allows to pass multiple arguments together with the command.
// "-l 1.0" limits the volume to 100%.
XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+ -l 1.0"; }
XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1-"; }
XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; }
XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; }
// Example media keys mapping using playerctl.
// This will work with any MPRIS-enabled media player.
XF86AudioPlay allow-when-locked=true { spawn-sh "playerctl play-pause"; }
XF86AudioStop allow-when-locked=true { spawn-sh "playerctl stop"; }
XF86AudioPrev allow-when-locked=true { spawn-sh "playerctl previous"; }
XF86AudioNext allow-when-locked=true { spawn-sh "playerctl next"; }
// Example brightness key mappings for brightnessctl.
// You can use regular spawn with multiple arguments too (to avoid going through "sh"),
// but you need to manually put each argument in separate "" quotes.
XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "+10%"; }
XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "10%-"; }
// Open/close the Overview: a zoomed-out view of workspaces and windows.
// You can also move the mouse into the top-left hot corner,
// or do a four-finger swipe up on a touchpad.
Mod+O repeat=false { toggle-overview; }
Mod+Shift+Q repeat=false { close-window; }
Mod+H { focus-column-left; }
Mod+J { focus-window-down; }
Mod+K { focus-window-up; }
Mod+L { focus-column-right; }
Mod+Shift+H { move-column-left; }
Mod+Shift+J { move-window-down; }
Mod+Shift+K { move-window-up; }
Mod+Shift+L { move-column-right; }
// Alternative commands that move across workspaces when reaching
// the first or last window in a column.
// Mod+J { focus-window-or-workspace-down; }
// Mod+K { focus-window-or-workspace-up; }
// Mod+Ctrl+J { move-window-down-or-to-workspace-down; }
// Mod+Ctrl+K { move-window-up-or-to-workspace-up; }
Mod+Home { focus-column-first; }
Mod+End { focus-column-last; }
Mod+Ctrl+Home { move-column-to-first; }
Mod+Ctrl+End { move-column-to-last; }
Mod+Ctrl+H { focus-monitor-left; }
Mod+Ctrl+J { focus-monitor-down; }
Mod+Ctrl+K { focus-monitor-up; }
Mod+Ctrl+L { focus-monitor-right; }
Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
// Alternatively, there are commands to move just a single window:
// Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
// ...
// And you can also move a whole workspace to another monitor:
// Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; }
// ...
Mod+Page_Down { focus-workspace-down; }
Mod+Page_Up { focus-workspace-up; }
Mod+U { focus-workspace-down; }
Mod+I { focus-workspace-up; }
Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
Mod+Ctrl+U { move-column-to-workspace-down; }
Mod+Ctrl+I { move-column-to-workspace-up; }
// Alternatively, there are commands to move just a single window:
// Mod+Ctrl+Page_Down { move-window-to-workspace-down; }
// ...
Mod+Shift+Page_Down { move-workspace-down; }
Mod+Shift+Page_Up { move-workspace-up; }
Mod+Shift+U { move-workspace-down; }
Mod+Shift+I { move-workspace-up; }
// You can bind mouse wheel scroll ticks using the following syntax.
// These binds will change direction based on the natural-scroll setting.
//
// To avoid scrolling through workspaces really fast, you can use
// the cooldown-ms property. The bind will be rate-limited to this value.
// You can set a cooldown on any bind, but it's most useful for the wheel.
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
Mod+WheelScrollRight { focus-column-right; }
Mod+WheelScrollLeft { focus-column-left; }
Mod+Ctrl+WheelScrollRight { move-column-right; }
Mod+Ctrl+WheelScrollLeft { move-column-left; }
// Usually scrolling up and down with Shift in applications results in
// horizontal scrolling; these binds replicate that.
Mod+Shift+WheelScrollDown { focus-column-right; }
Mod+Shift+WheelScrollUp { focus-column-left; }
Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
// Similarly, you can bind touchpad scroll "ticks".
// Touchpad scrolling is continuous, so for these binds it is split into
// discrete intervals.
// These binds are also affected by touchpad's natural-scroll, so these
// example binds are "inverted", since we have natural-scroll enabled for
// touchpads by default.
// Mod+TouchpadScrollDown { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02+"; }
// Mod+TouchpadScrollUp { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02-"; }
// You can refer to workspaces by index. However, keep in mind that
// niri is a dynamic workspace system, so these commands are kind of
// "best effort". Trying to refer to a workspace index bigger than
// the current workspace count will instead refer to the bottommost
// (empty) workspace.
//
// For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on
// will all refer to the 3rd workspace.
Mod+1 { focus-workspace 1; }
Mod+2 { focus-workspace 2; }
Mod+3 { focus-workspace 3; }
Mod+4 { focus-workspace 4; }
Mod+5 { focus-workspace 5; }
Mod+6 { focus-workspace 6; }
Mod+7 { focus-workspace 7; }
Mod+8 { focus-workspace 8; }
Mod+9 { focus-workspace 9; }
Mod+Shift+1 { move-column-to-workspace 1; }
Mod+Shift+2 { move-column-to-workspace 2; }
Mod+Shift+3 { move-column-to-workspace 3; }
Mod+Shift+4 { move-column-to-workspace 4; }
Mod+Shift+5 { move-column-to-workspace 5; }
Mod+Shift+6 { move-column-to-workspace 6; }
Mod+Shift+7 { move-column-to-workspace 7; }
Mod+Shift+8 { move-column-to-workspace 8; }
Mod+Shift+9 { move-column-to-workspace 9; }
// Alternatively, there are commands to move just a single window:
// Mod+Ctrl+1 { move-window-to-workspace 1; }
// Switches focus between the current and the previous workspace.
Mod+Tab { focus-workspace-previous; }
// The following binds move the focused window in and out of a column.
// If the window is alone, they will consume it into the nearby column to the side.
// If the window is already in a column, they will expel it out.
Mod+BracketLeft { consume-or-expel-window-left; }
Mod+BracketRight { consume-or-expel-window-right; }
// Consume one window from the right to the bottom of the focused column.
Mod+Comma { consume-window-into-column; }
// Expel the bottom window from the focused column to the right.
Mod+Period { expel-window-from-column; }
Mod+R { switch-preset-column-width; }
// Cycling through the presets in reverse order is also possible.
// Mod+R { switch-preset-column-width-back; }
Mod+Shift+R { switch-preset-window-height; }
Mod+Ctrl+R { reset-window-height; }
Mod+F { maximize-column; }
Mod+Shift+F { fullscreen-window; }
// Expand the focused column to space not taken up by other fully visible columns.
// Makes the column "fill the rest of the space".
Mod+Ctrl+F { expand-column-to-available-width; }
Mod+C { center-column; }
// Center all fully visible columns on screen.
Mod+Ctrl+C { center-visible-columns; }
// Finer width adjustments.
// This command can also:
// * set width in pixels: "1000"
// * adjust width in pixels: "-5" or "+5"
// * set width as a percentage of screen width: "25%"
// * adjust width as a percentage of screen width: "-10%" or "+10%"
// Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
// set-column-width "100" will make the column occupy 200 physical screen pixels.
Mod+Minus { set-column-width "-10%"; }
Mod+Equal { set-column-width "+10%"; }
// Finer height adjustments when in column with other windows.
Mod+Shift+Minus { set-window-height "-10%"; }
Mod+Shift+Equal { set-window-height "+10%"; }
// Move the focused window between the floating and the tiling layout.
Mod+V { toggle-window-floating; }
Mod+Shift+V { switch-focus-between-floating-and-tiling; }
// Toggle tabbed column display mode.
// Windows in this column will appear as vertical tabs,
// rather than stacked on top of each other.
Mod+W { toggle-column-tabbed-display; }
// Actions to switch layouts.
// Note: if you uncomment these, make sure you do NOT have
// a matching layout switch hotkey configured in xkb options above.
// Having both at once on the same hotkey will break the switching,
// since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
// Mod+Space { switch-layout "next"; }
// Mod+Shift+Space { switch-layout "prev"; }
Alt+P { screenshot; }
Ctrl+Print { screenshot-screen; }
Alt+Print { screenshot-window; }
// Applications such as remote-desktop clients and software KVM switches may
// request that niri stops processing the keyboard shortcuts defined here
// so they may, for example, forward the key presses as-is to a remote machine.
// It's a good idea to bind an escape hatch to toggle the inhibitor,
// so a buggy application can't hold your session hostage.
//
// The allow-inhibiting=false property can be applied to other binds as well,
// which ensures niri always processes them, even when an inhibitor is active.
Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
// The quit action will show a confirmation dialog to avoid accidental exits.
// Mod+Shift+E { quit; }
// Ctrl+Alt+Delete { quit; }
// Powers off the monitors. To turn them back on, do any input like
// moving the mouse or pressing any other key.
Mod+Shift+P { power-off-monitors; }
}
include "dms/outputs.kdl"

View File

@@ -2,6 +2,9 @@
vim.o.number = true
vim.o.relativenumber = true
vim.o.clipboard = "unnamedplus"
vim.cmd('colorscheme default')
vim.cmd('syntax on')
vim.o.background = 'dark'
vim.cmd [[highlight Normal guibg=NONE ctermbg=NONE]]
vim.cmd [[highlight NormalNC guibg=NONE ctermbg=NONE]]

View File

@@ -0,0 +1,91 @@
return {
{
"RRethy/base16-nvim",
priority = 1000,
config = function()
require('base16-colorscheme').setup({
base00 = '#10140f',
base01 = '#10140f',
base02 = '#717b71',
base03 = '#717b71',
base04 = '#abb7ab',
base05 = '#f6fdf6',
base06 = '#f6fdf6',
base07 = '#f6fdf6',
base08 = '#eca088',
base09 = '#eca088',
base0A = '#63c067',
base0B = '#80d27e',
base0C = '#b6f4b9',
base0D = '#63c067',
base0E = '#89e38d',
base0F = '#89e38d',
})
vim.api.nvim_set_hl(0, 'Visual', {
bg = '#717b71',
fg = '#f6fdf6',
bold = true
})
vim.api.nvim_set_hl(0, 'Statusline', {
bg = '#63c067',
fg = '#10140f',
})
vim.api.nvim_set_hl(0, 'LineNr', { fg = '#717b71' })
vim.api.nvim_set_hl(0, 'CursorLineNr', { fg = '#b6f4b9', bold = true })
vim.api.nvim_set_hl(0, 'Statement', {
fg = '#89e38d',
bold = true
})
vim.api.nvim_set_hl(0, 'Keyword', { link = 'Statement' })
vim.api.nvim_set_hl(0, 'Repeat', { link = 'Statement' })
vim.api.nvim_set_hl(0, 'Conditional', { link = 'Statement' })
vim.api.nvim_set_hl(0, 'Function', {
fg = '#63c067',
bold = true
})
vim.api.nvim_set_hl(0, 'Macro', {
fg = '#63c067',
italic = true
})
vim.api.nvim_set_hl(0, '@function.macro', { link = 'Macro' })
vim.api.nvim_set_hl(0, 'Type', {
fg = '#b6f4b9',
bold = true,
italic = true
})
vim.api.nvim_set_hl(0, 'Structure', { link = 'Type' })
vim.api.nvim_set_hl(0, 'String', {
fg = '#80d27e',
italic = true
})
vim.api.nvim_set_hl(0, 'Operator', { fg = '#abb7ab' })
vim.api.nvim_set_hl(0, 'Delimiter', { fg = '#abb7ab' })
vim.api.nvim_set_hl(0, '@punctuation.bracket', { link = 'Delimiter' })
vim.api.nvim_set_hl(0, '@punctuation.delimiter', { link = 'Delimiter' })
vim.api.nvim_set_hl(0, 'Comment', {
fg = '#717b71',
italic = true
})
local current_file_path = vim.fn.stdpath("config") .. "/lua/plugins/dankcolors.lua"
if not _G._matugen_theme_watcher then
local uv = vim.uv or vim.loop
_G._matugen_theme_watcher = uv.new_fs_event()
_G._matugen_theme_watcher:start(current_file_path, {}, vim.schedule_wrap(function()
local new_spec = dofile(current_file_path)
if new_spec and new_spec[1] and new_spec[1].config then
new_spec[1].config()
print("Theme reload")
end
end))
end
end
}
}

View File

@@ -0,0 +1 @@
/usr/lib/systemd/user/dms.service

View File

@@ -0,0 +1,7 @@
[Unit]
Description=WebWatcher - scan a site and notify on new regex matches
After=network-online.target
[Service]
Type=oneshot
ExecStart=/home/opal/.local/bin/webwatcher.py --url https://shop.nwnprod.com --pattern "beherit" --flags i

View File

@@ -0,0 +1,10 @@
[Unit]
Description=Run WebWatcher periodically
[Timer]
OnBootSec=2m
OnUnitActiveSec=5m
Persistent=true
[Install]
WantedBy=timers.target

View File

@@ -1,16 +0,0 @@
# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run.
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
#
XDG_DESKTOP_DIR="$HOME/desktop"
XDG_DESKTOP_DIR="$HOME/"
XDG_DOWNLOAD_DIR="$HOME/dls"
XDG_TEMPLATES_DIR="$HOME/"
XDG_PUBLICSHARE_DIR="$HOME/"
XDG_DOCUMENTS_DIR="$HOME/docs"
XDG_MUSIC_DIR="$HOME/music"
XDG_PICTURES_DIR="$HOME/pics"
XDG_VIDEOS_DIR="$HOME/"

View File

@@ -1,6 +1,6 @@
{
"label" : "lock",
"action" : "swaylock",
"action" : "hyprlock",
"text" : "Lock",
"keybind" : "l"
}
@@ -14,7 +14,7 @@
{
"label" : "suspend",
"action" : "swaylock -f && systemctl suspend",
"action" : "hyprlock & disown && systemctl suspend",
"text" : "Suspend",
"keybind" : "u"
}

View File

@@ -14,6 +14,14 @@ compinit
export EDITOR="nvim"
HISTFILE=$ZDOTDIR/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
# Options to make history nicer
setopt HIST_IGNORE_DUPS HIST_IGNORE_SPACE
#######################################################
# PROMPT
#######################################################
@@ -108,10 +116,18 @@ alias tbr='trans :pt-BR'
# ncmpcpp
alias ncmpcpp='ncmpcpp -b ~/.config/ncmpcpp/bindings'
# Aliases
# ls
alias ll='ls -l --color=auto'
alias la='ls -la --color=auto'
# git
alias gs='git status'
alias ga='git add'
alias gpull='git pull'
alias gcom='git commit -m'
alias h='history 1'
#######################################################
# FUNCTIONS
#######################################################
@@ -152,3 +168,27 @@ keys()
}
keys
apply() {
(cd ~/Code/arch-ansible && ansible-playbook -i inventory/hosts.yml site.yml -K "$@")
}
apply-aur() {
(cd ~/Code/arch-ansible/scripts && bash aur-pkg-install.sh)
}
shred-dir() {
local dir="${1:?Usage: shred-dir <directory>}"
local passes="${2:-7}"
[[ ! -d "$dir" ]] && { echo "Not a directory: '$dir'"; return 1; }
echo "Shred '$dir' with $passes passes? [y/N]"
read -r confirm
[[ "$confirm" != [yY] ]] && { echo "Aborted."; return 1; }
find "$dir" -type f -exec shred -uz -n "$passes" {} \;
rm -rf "$dir"
echo "Done."
}

1
.gitignore vendored
View File

@@ -14,3 +14,4 @@ lazy-lock.json
flycheck-packages.el
*.log
.config/zsh/.zcompdump
.local/bin/claude

View File

@@ -0,0 +1,4 @@
#!/bin/bash
# ~/.local/bin/start-keyring.sh
eval $(gnome-keyring-daemon --start --components=secrets)
export GNOME_KEYRING_CONTROL

40
.local/bin/webwatcher.py Executable file
View File

@@ -0,0 +1,40 @@
#!/usr/bin/env python3
import os, re, json, subprocess
from urllib.request import urlopen, Request
URL = "https://shop.nwnprod.com" # page to watch
STATE = os.path.expanduser("~/.local/state/webwatch_beherit.json")
USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) " "Gecko/20100101 Firefox/128.0"
# --- fetch html ---
req = Request(URL, headers={"User-Agent": USER_AGENT})
html = urlopen(req, timeout=15).read().decode("utf-8", "ignore")
# --- find product IDs and titles that contain 'Beherit' ---
pattern = re.compile(
r"product_id=(\d+)[^>]*>([^<]*Beherit[^<]*)</a>", re.IGNORECASE | re.DOTALL
)
products = {
pid: re.sub(r"\s+", " ", title).strip() for pid, title in pattern.findall(html)
}
# --- load previous seen IDs ---
seen = set()
if os.path.exists(STATE):
with open(STATE) as f:
seen = set(json.load(f))
# --- notify for new Beherit items ---
new = [(pid, title) for pid, title in products.items() if pid not in seen]
for pid, title in new:
subprocess.run(
["notify-send", "-u", "critical", "-t", "0", "Beherit Alert", title],
check=False,
)
print(f"New Beherit item: {title}")
# --- update state file ---
if new:
with open(STATE, "w") as f:
json.dump(sorted(products.keys()), f)

View File

@@ -0,0 +1,13 @@
[Desktop Entry]
Type=Application
Name=Signal
Comment=Signal - Private Messenger
Comment[de]=Signal - Sicherer Messenger
Icon=signal-desktop
Exec=/usr/bin/signal-desktop --password-store=kwallet6 -- %u
Terminal=false
Categories=Network;InstantMessaging;
StartupWMClass=signal
MimeType=x-scheme-handler/sgnl;x-scheme-handler/signalcaptcha;
Keywords=sgnl;chat;im;messaging;messenger;security;privat;
X-GNOME-UsesNotifications=true

View File

@@ -1,8 +1 @@
export ZDOTDIR="$HOME/.config/zsh"
HISTFILE=$ZDOTDIR/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
# Options to make history nicer
setopt HIST_IGNORE_DUPS HIST_IGNORE_SPACE

View File

@@ -0,0 +1,23 @@
# ~/.config/hypr/hypridle.conf
general {
before_sleep_cmd = hyprlock
after_sleep_cmd = hyprctl dispatch dpms on
}
listener {
timeout = 600 # 10 minutes
on-timeout = hyprlock
on-resume = hyprctl dispatch dpms on
}
listener {
timeout = 900 # 15 minutes
on-timeout = hyprctl dispatch dpms off
on-resume = hyprctl dispatch dpms on
}
listener {
timeout = 7200 # 2 hours
on-timeout = hyprlock & disown && systemctl suspend
}

View File

@@ -2,8 +2,9 @@
### MONITORS ###
################
monitor=HDMI-A-1,3840x2160,0x0,1.5
monitor=DP-2,2560x2880,2560x0,1.6
monitor=DP-2,3840x2160,0x0,1.5
monitor=DP-1,2560x2880,2560x0,1.6
monitor=DP-3,2560x2880,2560x0,1.6
#monitor=DP-1,2560x2880,0x0,2.0
monitor=eDP-1,1920x1200,6400x0,1.0
@@ -12,10 +13,9 @@ monitor=eDP-1,1920x1200,6400x0,1.0
###################
$terminal = alacritty
$fileManager = dolphin
$fileManager = pcmanfm
$menu = ~/.config/rofi/launchers/type-7/launcher.sh
#################
### AUTOSTART ###
#################
@@ -25,9 +25,11 @@ $menu = ~/.config/rofi/launchers/type-7/launcher.sh
# exec-once = nm-applet &
# exec-once = waybar & hyprpaper & firefox
exec-once = waybar &
exec = hyprpaper
exec-once = wlsunset -l 47.6 -L -122.3 -t 3500 -T 6000
exec-once = keepassxc
exec-once = waybar &
exec-once = hypridle &
exec-once = hyprsunset
exec-once = /usr/bin/udiskie &
exec-once = /usr/bin/nm-applet &
exec-once = /usr/bin/blueman-applet &
@@ -118,7 +120,11 @@ animations {
# windowrulev2 = bordersize 0, floating:0, onworkspace:f[1]
# windowrulev2 = rounding 0, floating:0, onworkspace:f[1]
windowrulev2 = size 50% 50%, floating:1
# Apply to ALL floating windows except Steam
#windowrule = center, class:negative:^(?i)steam$, floating:1
windowrule = maxsize 80% 80%, class:negative:^(?i)steam$, floating:1
#windowrule = minsize 360 240, class:negative:^(?i)steam$, floating:1
dwindle {
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
@@ -148,6 +154,7 @@ input {
touchpad {
natural_scroll = false
tap-to-click = false
}
}
@@ -156,6 +163,20 @@ device {
sensitivity = -0.5
}
# Set trackpoint sensitivity on laptop
device {
name = TPPS/2 Elan TrackPoint
sensitivity = 1.0
accel_profile = flat
}
# Set trackpoint sensitivity on Tex Shinobi USB
device {
name = USB-HID Keyboard Mouse
sensitivity = 0.3
accel_profile = flat
}
###################
### KEYBINDINGS ###
@@ -223,6 +244,9 @@ bind = $mainMod SHIFT, 0, movetoworkspacesilent, 10
bind = $mainMod, Space, togglespecialworkspace, magic
bind = $mainMod SHIFT, Space, movetoworkspacesilent, special:magic
# Lock
bind = $mainMod, ESCAPE, exec, hyprlock
# Control windows
bind = $mainMod, equal, splitratio, 0.05 # make focused split wider
bind = $mainMod, minus, splitratio, -0.05 # make focused split narrower
@@ -292,6 +316,10 @@ windowrulev2 = suppressevent maximize, class:.*
# Fix some dragging issues with XWayland
windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
# For KeePassXC
windowrulev2 = float, class:^(org.keepassxc.KeePassXC)$
windowrulev2 = center, class:^(org.keepassxc.KeePassXC)$
xwayland {
force_zero_scaling = true
use_nearest_neighbor = true

View File

@@ -0,0 +1,25 @@
background {
monitor =
path = screenshot
blur_passes = 3
brightness = 0.8
}
input-field {
monitor =
size = 300, 50
outline_thickness = 2
position = 0, -100
rounding = 5
inner_color = rgba(0, 0, 0, 0.5)
outer_color = rgba(255, 255, 255, 0.2)
font_color = rgba(255,255,255,1)
}
label {
monitor =
text = Welcome back, $USER
position = 0, 150
font_size = 22
color = rgba(255,255,255,0.8)
}

View File

@@ -0,0 +1,11 @@
max-gamma = 200
profile {
time = 7:00
identity = true
}
profile {
time = 18:00
temperature = 3000
}