From ed3e8f6ec6929327ab19e512ffb0d8ece12ed5a8 Mon Sep 17 00:00:00 2001 From: seraphim <18ycm9tx@anonaddy.me> Date: Sun, 23 Aug 2026 18:07:29 +0700 Subject: reorganize directories, so everything in .config --- .config/darkman/config.yaml | 3 + .config/doom/config.el | 102 +++++++ .config/doom/init.el | 201 +++++++++++++ .config/doom/packages.el | 57 ++++ .config/doom/themes/noctalia-theme.el | 360 +++++++++++++++++++++++ .config/foot/foot.ini | 26 ++ .config/gtk-3.0/settings-dark.ini | 2 + .config/gtk-3.0/settings-light.ini | 2 + .config/gtk-3.0/settings.ini | 1 + .config/matugen/config.toml | 8 + .config/matugen/templates/niri.kdl | 6 + .config/mpv/mpv.conf | 7 + .config/niri/apply-colors.sh | 84 ++++++ .config/niri/config.kdl | 321 ++++++++++++++++++++ .config/niri/set-backdrop.sh | 29 ++ .config/niri/theme-switcher.sh | 135 +++++++++ .config/nvim/init.lua | 4 + .config/nvim/lua/caelus/init.lua | 100 +++++++ .config/nvim/lua/config/keymaps.lua | 13 + .config/nvim/lua/config/options.lua | 40 +++ .config/nvim/lua/config/plugins.lua | 101 +++++++ .config/nvim/nvim-pack-lock.json | 116 ++++++++ .config/rmpc/config.ron | 84 ++++++ .config/rmpc/theme.ron | 47 +++ .config/starship.toml | 91 ++++++ .config/vicinae/settings.json | 234 +++++++++++++++ .config/wallust/templates/dbg.ini | 4 + .config/wallust/templates/foot-colors-custom.ini | 20 ++ .config/wallust/templates/nvim.lua | 306 +++++++++++++++++++ .config/wallust/templates/shell-colors.sh | 20 ++ .config/wallust/templates/vicinae-dark.toml | 78 +++++ .config/wallust/templates/vicinae-light.toml | 78 +++++ .config/wallust/wallust.toml | 11 + .config/waybar/config.jsonc | 112 +++++++ .config/waybar/kbd-layout.sh | 42 +++ .config/waybar/style.css | 166 +++++++++++ .config/waybar/theme-dark.css | 2 + .config/waybar/theme-light.css | 2 + .config/waybar/theme.css | 1 + .config/xdg-desktop-portal/portals.conf | 5 + .config/yazi/keymap.toml | 9 + .config/yazi/yazi.toml | 2 + 42 files changed, 3032 insertions(+) create mode 100644 .config/darkman/config.yaml create mode 100644 .config/doom/config.el create mode 100644 .config/doom/init.el create mode 100644 .config/doom/packages.el create mode 100644 .config/doom/themes/noctalia-theme.el create mode 100644 .config/foot/foot.ini create mode 100644 .config/gtk-3.0/settings-dark.ini create mode 100644 .config/gtk-3.0/settings-light.ini create mode 120000 .config/gtk-3.0/settings.ini create mode 100644 .config/matugen/config.toml create mode 100644 .config/matugen/templates/niri.kdl create mode 100644 .config/mpv/mpv.conf create mode 100755 .config/niri/apply-colors.sh create mode 100644 .config/niri/config.kdl create mode 100755 .config/niri/set-backdrop.sh create mode 100755 .config/niri/theme-switcher.sh create mode 100644 .config/nvim/init.lua create mode 100644 .config/nvim/lua/caelus/init.lua create mode 100755 .config/nvim/lua/config/keymaps.lua create mode 100755 .config/nvim/lua/config/options.lua create mode 100644 .config/nvim/lua/config/plugins.lua create mode 100644 .config/nvim/nvim-pack-lock.json create mode 100644 .config/rmpc/config.ron create mode 100644 .config/rmpc/theme.ron create mode 100644 .config/starship.toml create mode 100644 .config/vicinae/settings.json create mode 100644 .config/wallust/templates/dbg.ini create mode 100644 .config/wallust/templates/foot-colors-custom.ini create mode 100644 .config/wallust/templates/nvim.lua create mode 100644 .config/wallust/templates/shell-colors.sh create mode 100644 .config/wallust/templates/vicinae-dark.toml create mode 100644 .config/wallust/templates/vicinae-light.toml create mode 100644 .config/wallust/wallust.toml create mode 100644 .config/waybar/config.jsonc create mode 100755 .config/waybar/kbd-layout.sh create mode 100644 .config/waybar/style.css create mode 100644 .config/waybar/theme-dark.css create mode 100644 .config/waybar/theme-light.css create mode 120000 .config/waybar/theme.css create mode 100644 .config/xdg-desktop-portal/portals.conf create mode 100644 .config/yazi/keymap.toml create mode 100644 .config/yazi/yazi.toml (limited to '.config') diff --git a/.config/darkman/config.yaml b/.config/darkman/config.yaml new file mode 100644 index 0000000..ef00ec3 --- /dev/null +++ b/.config/darkman/config.yaml @@ -0,0 +1,3 @@ +portal: true +dbusserver: true +usegeoclue: false \ No newline at end of file diff --git a/.config/doom/config.el b/.config/doom/config.el new file mode 100644 index 0000000..ce1b792 --- /dev/null +++ b/.config/doom/config.el @@ -0,0 +1,102 @@ +;; Place your private configuration here! Remember, you do not need to run 'doom +;; sync' after modifying this file! + + +;; Some functionality uses this to identify you, e.g. GPG configuration, email +;; clients, file templates and snippets. It is optional. +;; (setq user-full-name "John Doe" +;; user-mail-address "john@doe.com") + +;; Doom exposes five (optional) variables for controlling fonts in Doom: +;; +;; - `doom-font' -- the primary font to use +;; - `doom-variable-pitch-font' -- a non-monospace font (where applicable) +;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for +;; presentations or streaming. +;; - `doom-symbol-font' -- for symbols +;; - `doom-serif-font' -- for the `fixed-pitch-serif' face +;; +;; See 'C-h v doom-font' for documentation and more examples of what they +;; accept. For example: +;; +;;(setq doom-font (font-spec :family "Fira Code" :size 12 :weight 'semi-light) +;; doom-variable-pitch-font (font-spec :family "Fira Sans" :size 13)) +;; +;; If you or Emacs can't find your font, use 'M-x describe-font' to look them +;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to +;; refresh your font settings. If Emacs still can't find your font, it likely +;; wasn't installed correctly. Font issues are rarely Doom issues! + +;; There are two ways to load a theme. Both assume the theme is installed and +;; available. You can either set `doom-theme' or manually load a theme with the +;; `load-theme' function. This is the default: +;; <----------------------------- Theme --------------------------------> +(setq doom-theme 'doom-tokyo-night) + +;; This determines the style of line numbers in effect. If set to `nil', line +;; numbers are disabled. For relative line numbers, set this to `relative'. +(setq display-line-numbers-type t) + +;; If you use `org' and don't want your org files in the default location below, +;; change `org-directory'. It must be set before org loads! +(setq org-directory "~/org/") + +;; Whenever you reconfigure a package, make sure to wrap your config in an +;; `with-eval-after-load' block, otherwise Doom's defaults may override your +;; settings. E.g. +;; +;; (with-eval-after-load 'PACKAGE +;; (setq x y)) +;; +;; The exceptions to this rule: +;; +;; - Setting file/directory variables (like `org-directory') +;; - Setting variables which explicitly tell you to set them before their +;; package is loaded (see 'C-h v VARIABLE' to look them up). +;; - Setting doom variables (which start with 'doom-' or '+'). +;; +;; Here are some additional functions/macros that will help you configure Doom. +;; +;; - `load!' for loading external *.el files relative to this one +;; - `add-load-path!' for adding directories to the `load-path', relative to +;; this file. Emacs searches the `load-path' when you load packages with +;; `require' or `use-package'. +;; - `map!' for binding new keys +;; +;; To get information about any of these functions/macros, move the cursor over +;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k'). +;; This will open documentation for it, including demos of how they are used. +;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces, +;; etc). +;; +;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how +;; Gcal setting +(setq doom-font (font-spec :family "JetBrains Mono" :size 16 :weight 'medium) + doom-variable-pitch-font (font-spec :family "JetBrains Mono" :size 16)) +(setq org-gcal-client-id "" + org-gcal-client-secret "" + org-gcal-fetch-file-alist '(("" . "~/org/gcal.org"))) +(setq org-agenda-files '("~/org/gcal.org")) + +;; Scroll fixing, 'cause it's broken a little bit. +(setq inhibit-compacting-font-caches t) +(setq scroll-conservatively 101 ; + scroll-margin 0 + auto-window-vscroll nil) + +;; Prevent PGTK 100% CPU core spinning on Wayland +;; Changed from nil to 0.001 to stop the event loop from going crazy +(when (boundp 'pgtk-wait-for-event-timeout) + (setq pgtk-wait-for-event-timeout 0.01)) + +;; Scroll settings (Consolidated) +;; Smooth scrolling is currently disabled to save CPU on your 180Hz monitor. +;; If you want smooth scrolling back, change -1 to 1 and change nil to t below. +(pixel-scroll-precision-mode -1) +(setq pixel-scroll-precision-mode nil) + +;; Reduce redraw frequency +(setq redisplay-dont-pause t + fast-but-imprecise-scrolling t) +;; (setq gc-cons-threshold 100000000) +(setq read-process-output-max (* 1024 1024)) ; 1MB diff --git a/.config/doom/init.el b/.config/doom/init.el new file mode 100644 index 0000000..91a3004 --- /dev/null +++ b/.config/doom/init.el @@ -0,0 +1,201 @@ +;;; init.el -*- lexical-binding: t; -*- + +;; This file controls what Doom modules are enabled and what order they load +;; in. Remember to run 'doom sync' after modifying it! + +;; NOTE: Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's +;; documentation. There you'll find a link to Doom's Module Index where all of +;; our modules are listed, including what flags they support. + +;; NOTE: Move your cursor over a module's name (or its flags) and press 'K' (or +;; 'C-c c k' for non-vim users) to view its documentation. This works on flags +;; as well (those symbols that start with a plus). +;; +;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its +;; directory (for easy access to its source code). + +(doom! :input + ;;bidi ; (tfel ot) thgir etirw uoy gnipleh + ;;chinese + ;;japanese + ;;layout ; auie,ctsrnm is the superior home row + + :completion + ;;company ; the ultimate code completion backend + (corfu +orderless) ; complete with cap(f), cape and a flying feather! + ;;helm ; the *other* search engine for love and life + ;;ido ; the other *other* search engine... + ;;ivy ; a search engine for love and life + vertico ; the search engine of the future + + :ui + ;;deft ; notational velocity for Emacs + doom ; what makes DOOM look the way it does + dashboard ; a nifty splash screen for Emacs + ;;doom-quit ; DOOM quit-message prompts when you quit Emacs + ;;(emoji +unicode) ; 🙂 + hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW + ;;indent-guides ; highlighted indent columns + ;;ligatures ; ligatures and symbols to make your code pretty again + ;;minimap ; show a map of the code on the side + modeline ; snazzy, Atom-inspired modeline, plus API + ;;nav-flash ; blink cursor line after big motions + ;;neotree ; a project drawer, like NERDTree for vim + ophints ; highlight the region an operation acts on + (popup +defaults) ; tame sudden yet inevitable temporary windows + ;;smooth-scroll ; So smooth you won't believe it's not butter + ;;tabs ; a tab bar for Emacs + ;;treemacs ; a project drawer, like neotree but cooler + ;;unicode ; extended unicode support for various languages + (vc-gutter +pretty) ; 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 + + :editor + (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 + ;;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 + ;;objed ; text object editing for the innocent + ;;parinfer ; turn lisp into python, sort of + ;;rotate-text ; cycle region at point between text candidates + snippets ; my elves. They type so I don't have to + (whitespace +guess +trim) ; a butler for your whitespace + ;;word-wrap ; soft wrapping with language-aware indent + + :emacs + dired ; making dired pretty [functional] + electric ; smarter, keyword-based electric-indent + ;;eww ; the internet is gross + ;;ibuffer ; interactive buffer management + tramp ; remote files at your arthritic fingertips + undo ; persistent, smarter undo for your inevitable mistakes + vc ; version-control and Emacs, sitting in a tree + + :term + ;;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 + + :checkers + syntax ; tasing you for every semicolon you forget + (spell +flyspell) ; tasing you for misspelling mispelling + grammar ; tasing grammar mistake every you make + + :tools + ;;ansible + ;;biblio ; Writes a PhD for you (citation needed) + ;;collab ; buffers with friends + ;;debugger ; stepping through code, to help you add bugs + ;;direnv + ;;docker + ;;editorconfig ; let someone else argue about tabs vs spaces + ;;ein ; tame Jupyter notebooks with emacs + (eval +overlay) ; run code, run (also, repls) + lookup ; navigate your code and its documentation + ;;llm ; when I said you needed friends, I didn't mean... + ;;(lsp +eglot) ; M-x vscode + magit ; a git porcelain for Emacs + ;;make ; run make tasks from Emacs + ;;pass ; password manager for nerds + ;;pdf ; pdf enhancements + ;;terraform ; infrastructure as code + ;;tmux ; an API for interacting with tmux + ;;tree-sitter ; syntax and parsing, sitting in a tree... + ;;upload ; map local to remote projects via ssh/ftp + + :os + (:if (featurep :system 'macos) macos) ; improve compatibility with macOS + tty ; improve the terminal Emacs experience + + :lang + ;;ada ; In strong typing we (blindly) trust + ;;(agda +local) ; types of types of types of types... + ;;beancount ; mind the GAAP + (cc +lsp) ; C > C++ == 1 + ;;clojure ; java with a lisp + ;;common-lisp ; if you've seen one lisp, you've seen them all + ;;coq ; proofs-as-programs + ;;crystal ; ruby at the speed of c + ;;csharp ; unity, .NET, and mono shenanigans + ;;data ; config/data formats + ;;(dart +flutter) ; paint ui and not much else + ;;dhall + ;;elixir ; erlang done right + ;;elm ; care for a cup of TEA? + emacs-lisp ; drown in parentheses + ;;erlang ; an elegant language for a more civilized age + ;;ess ; emacs speaks statistics + ;;factor + ;;faust ; dsp, but you get to keep your soul + ;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER) + ;;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 + ;;(graphql +lsp) ; Give queries a REST + ;;(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 + ;;json ; At least it ain't XML + ;;janet ; Fun fact: Janet is me! + ;;(java +lsp) ; the poster child for carpal tunnel syndrome + ;;javascript ; all(hope(abandon(ye(who(enter(here)))))) + ;;julia ; a better, faster MATLAB + ;;kotlin ; a better, slicker Java(Script) + ;;latex ; writing papers in Emacs has never been so fun + ;;lean ; for folks with too much to prove + ;;ledger ; be audit you can be + ;;lua ; one-based indices? one-based indices + markdown ; writing docs for people to ignore + ;;nim ; python + lisp at the speed of c + ;;nix ; I hereby declare "nix geht mehr!" + ;;ocaml ; an objective camel + ;;odin ; C, minus its footguns + (org +roam@) ; organize your plain life in plain text + ;;php ; perl's insecure younger brother + ;;plantuml ; diagrams for confusing people more + ;;graphviz ; diagrams for confusing yourself even more + ;;purescript ; javascript, but functional + python ; beautiful is better than ugly + ;;qt ; the 'cutest' gui framework ever + ;;racket ; a DSL for DSLs + ;;raku ; the artist formerly known as perl6 + ;;rest ; Emacs as a REST client + ;;rst ; ReST in peace + ;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"} + (rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap() + ;;scad ; trust the preview, regret the render + ;;scala ; java, but good + ;;(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. + ;;swift ; who asked for emoji variables? + ;;terra ; Earth and Moon in alignment for performance. + ;;web ; the tubes + ;;yaml ; JSON, but readable + ;;zig ; C, but simpler + + + :email + ;;(mu4e +org +gmail) + ;;notmuch + ;;(wanderlust +gmail) + + :app + calendar + ;;emms + ;;everywhere ; *leave* Emacs!? You must be joking + ;;irc ; how neckbeards socialize + ;;(rss +org) ; emacs as an RSS reader + + :config + ;;literate + (default +bindings +smartparens)) diff --git a/.config/doom/packages.el b/.config/doom/packages.el new file mode 100644 index 0000000..e50988d --- /dev/null +++ b/.config/doom/packages.el @@ -0,0 +1,57 @@ +;; -*- no-byte-compile: t; -*- +;;; $DOOMDIR/packages.el + +;; To install a package: +;; +;; 1. Declare them here in a `package!' statement, +;; 2. Run 'doom sync' in the shell, +;; 3. Restart Emacs. +;; +;; Use 'C-h f package\!' to look up documentation for the `package!' macro. + + +;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror: +;; (package! some-package) + +;; To install a package directly from a remote git repo, you must specify a +;; `:recipe'. You'll find documentation on what `:recipe' accepts here: +;; https://github.com/radian-software/straight.el#the-recipe-format +;; (package! another-package +;; :recipe (:host github :repo "username/repo")) + +;; If the package you are trying to install does not contain a PACKAGENAME.el +;; file, or is located in a subdirectory of the repo, you'll need to specify +;; `:files' in the `:recipe': +;; (package! this-package +;; :recipe (:host github :repo "username/repo" +;; :files ("some-file.el" "src/lisp/*.el"))) + +;; If you'd like to disable a package included with Doom, you can do so here +;; with the `:disable' property: +;; (package! builtin-package :disable t) + +;; You can override the recipe of a built in package without having to specify +;; all the properties for `:recipe'. These will inherit the rest of its recipe +;; from Doom or MELPA/ELPA/Emacsmirror: +;; (package! builtin-package :recipe (:nonrecursive t)) +;; (package! builtin-package-2 :recipe (:repo "myfork/package")) + +;; Specify a `:branch' to install a package from a particular branch or tag. +;; This is required for some packages whose default branch isn't 'master' (which +;; our package manager can't deal with; see radian-software/straight.el#279) +;; (package! builtin-package :recipe (:branch "develop")) + +;; Use `:pin' to specify a particular commit to install. +;; (package! builtin-package :pin "1a2b3c4d5e") + + +;; Doom's packages are pinned to a specific commit and updated from release to +;; release. The `unpin!' macro allows you to unpin single packages... +;; (unpin! pinned-package) +;; ...or multiple packages +;; (unpin! pinned-package another-pinned-package) +;; ...Or *all* packages (NOT RECOMMENDED; will likely break things) +;; (unpin! t) +(package! org-gcal) +(package! calfw) +(package! calfw-org) diff --git a/.config/doom/themes/noctalia-theme.el b/.config/doom/themes/noctalia-theme.el new file mode 100644 index 0000000..be14fda --- /dev/null +++ b/.config/doom/themes/noctalia-theme.el @@ -0,0 +1,360 @@ +;;; noctalia-theme.el --- Theme using Template SCSS variables -*- lexical-binding: t -*- + +;; Copyright (C) 2025 + +;; Author: Generated (Improved) +;; Version: 1.2 +;; Package-Requires: ((emacs "24.1")) +;; Keywords: faces + +;;; Commentary: + +;; A theme using Template SCSS variables with quality of life improvements: +;; - Better source block distinction +;; - Improved text visibility when selected +;; - Refined org-mode styling with hidden asterisks +;; - Enhanced contrast and readability +;; - Seamless integration of source blocks with consistent styling + +;;; Code: + +(deftheme noctalia "Theme using Template variables with quality of life improvements.") + +;; Define all the color variables (replaced by template processor) +(let* ((bg "#fef8f4") + (err "#ba1a1a") + (err-container "#ffdad6") + (on-background "#1d1b19") + (on-err "#ffffff") + (on-err-container "#93000a") + (on-primary "#ffffff") + (on-primary-container "#fffbff") + (on-secondary "#ffffff") + (on-secondary-container "#696456") + (on-surface "#1d1b19") + (on-surface-variant "#4a463d") + (on-tertiary "#ffffff") + (on-tertiary-container "#f9ffed") + (outline-color "#7b776c") + (outline-variant "#ccc6b9") + (primary "#645c3f") + (primary-container "#7e7456") + (secondary "#635e50") + (secondary-container "#eae2d0") + (shadow "#000000") + (surface "#fef8f4") + (surface-container "#f2ede9") + (surface-container-high "#ece7e3") + (surface-container-highest "#e6e2dd") + (surface-container-low "#f8f3ee") + (surface-container-lowest "#ffffff") + (surface-variant "#e9e2d4") + (tertiary "#54604a") + (tertiary-container "#6c7861") + ;; Map success colors to tertiary (as used in other templates) + (success "#54604a") + (on-success "#ffffff") + (success-container "#6c7861") + (on-success-container "#f9ffed") + ;; Map fixed colors to regular colors + (primary-fixed "#645c3f") + (primary-fixed-dim "#7e7456") + (secondary-fixed "#635e50") + (secondary-fixed-dim "#eae2d0") + (tertiary-fixed "#54604a") + (tertiary-fixed-dim "#6c7861") + (on-primary-fixed "#ffffff") + (on-primary-fixed-variant "#fffbff") + (on-secondary-fixed "#ffffff") + (on-secondary-fixed-variant "#696456") + (on-tertiary-fixed "#ffffff") + (on-tertiary-fixed-variant "#f9ffed") + ;; Map inverse colors to surface variants + (inverse-on-surface "#1d1b19") + (inverse-primary "#645c3f") + (inverse-surface "#fef8f4") + ;; ANSI terminal colors + (term0 "#e9e2d4") + (term1 "#ba1a1a") + (term2 "#645c3f") + (term3 "#635e50") + (term4 "#54604a") + (term5 "#7e7252") + (term6 "#797263") + (term7 "#1d1b19") + (term8 "#7b776c") + (term9 "#ba1a1a") + (term10 "#645c3f") + (term11 "#635e50") + (term12 "#54604a") + (term13 "#7e7252") + (term14 "#797263") + (term15 "#1d1b19")) + + (custom-theme-set-faces + 'noctalia + ;; Basic faces + `(default ((t (:background ,bg :foreground ,on-background)))) + `(cursor ((t (:background ,primary)))) + `(highlight ((t (:background ,surface-container-high)))) + `(region ((t (:background ,primary-container :foreground ,on-primary-container :extend t)))) + `(secondary-selection ((t (:background ,secondary-container :foreground ,on-secondary-container :extend t)))) + `(isearch ((t (:background ,tertiary-container :foreground ,on-tertiary-container :weight bold)))) + `(lazy-highlight ((t (:background ,secondary-container :foreground ,on-secondary-container)))) + `(vertical-border ((t (:foreground ,surface-variant)))) + `(border ((t (:background ,surface-variant :foreground ,surface-variant)))) + `(fringe ((t (:background ,surface :foreground ,outline-variant)))) + `(shadow ((t (:foreground ,outline-variant)))) + `(link ((t (:foreground ,primary :underline t)))) + `(link-visited ((t (:foreground ,tertiary :underline t)))) + `(success ((t (:foreground ,success)))) + `(warning ((t (:foreground ,secondary)))) + `(error ((t (:foreground ,err)))) + `(match ((t (:background ,secondary-container :foreground ,on-secondary-container)))) + + ;; Font-lock + `(font-lock-builtin-face ((t (:foreground ,primary)))) + `(font-lock-comment-face ((t (:foreground ,outline-color :slant italic)))) + `(font-lock-comment-delimiter-face ((t (:foreground ,outline-variant)))) + `(font-lock-constant-face ((t (:foreground ,tertiary :weight bold)))) + `(font-lock-doc-face ((t (:foreground ,on-surface-variant :slant italic)))) + `(font-lock-function-name-face ((t (:foreground ,primary :weight bold)))) + `(font-lock-keyword-face ((t (:foreground ,secondary :weight bold)))) + `(font-lock-string-face ((t (:foreground ,tertiary)))) + `(font-lock-type-face ((t (:foreground ,primary-fixed)))) + `(font-lock-variable-name-face ((t (:foreground ,on-surface)))) + `(font-lock-warning-face ((t (:foreground ,err :weight bold)))) + `(font-lock-preprocessor-face ((t (:foreground ,secondary-fixed-dim)))) + `(font-lock-negation-char-face ((t (:foreground ,tertiary-fixed)))) + + ;; Show paren + `(show-paren-match ((t (:background ,primary-container :foreground ,on-primary-container :weight bold)))) + `(show-paren-mismatch ((t (:background ,err-container :foreground ,on-err-container :weight bold)))) + + ;; Mode line - improved status bar styling + `(mode-line ((t (:background ,surface-container-high :foreground ,on-surface :box nil)))) + `(mode-line-inactive ((t (:background ,surface :foreground ,on-surface-variant :box nil)))) + `(mode-line-buffer-id ((t (:foreground ,primary :weight bold)))) + `(mode-line-emphasis ((t (:foreground ,primary :weight bold)))) + `(mode-line-highlight ((t (:foreground ,primary :box nil)))) + + ;; Improved Source blocks - make them integrated with the theme + `(org-block ((t (:background ,surface-container-low :extend t :inherit fixed-pitch)))) + `(org-block-begin-line ((t (:background ,surface-container-low :foreground ,primary-fixed-dim :extend t :slant italic :inherit fixed-pitch)))) + `(org-block-end-line ((t (:background ,surface-container-low :foreground ,primary-fixed-dim :extend t :slant italic :inherit fixed-pitch)))) + `(org-code ((t (:background ,surface-container-low :foreground ,tertiary-fixed :inherit fixed-pitch)))) + `(org-verbatim ((t (:background ,surface-container-low :foreground ,primary-fixed :inherit fixed-pitch)))) + `(org-meta-line ((t (:foreground ,outline-color :slant italic)))) + + ;; Org mode with hidden asterisks + `(org-level-1 ((t (:foreground ,primary :weight bold :height 1.2)))) + `(org-level-2 ((t (:foreground ,secondary :weight bold :height 1.1)))) + `(org-level-3 ((t (:foreground ,tertiary :weight bold)))) + `(org-level-4 ((t (:foreground ,primary :weight bold)))) + `(org-level-5 ((t (:foreground ,secondary :weight bold)))) + `(org-level-6 ((t (:foreground ,tertiary :weight bold)))) + `(org-level-7 ((t (:foreground ,primary :weight bold)))) + `(org-level-8 ((t (:foreground ,secondary :weight bold)))) + `(org-document-title ((t (:foreground ,primary :weight bold :height 1.3)))) + `(org-document-info ((t (:foreground ,primary-container)))) + `(org-todo ((t (:foreground ,err :weight bold)))) + `(org-done ((t (:foreground ,success :weight bold)))) + `(org-headline-done ((t (:foreground ,on-surface-variant)))) + `(org-hide ((t (:foreground ,bg)))) ;; Hide leading asterisks + `(org-ellipsis ((t (:foreground ,tertiary :underline nil)))) ;; Style for folded content indicator + `(org-table ((t (:foreground ,secondary-fixed :inherit fixed-pitch)))) + `(org-formula ((t (:foreground ,tertiary :inherit fixed-pitch)))) + `(org-checkbox ((t (:foreground ,primary :weight bold :inherit fixed-pitch)))) + `(org-date ((t (:foreground ,secondary-fixed :underline t)))) + `(org-special-keyword ((t (:foreground ,on-surface-variant :slant italic)))) + `(org-tag ((t (:foreground ,outline-color :weight normal)))) + + ;; Magit + `(magit-section-highlight ((t (:background ,surface-container-low)))) + `(magit-diff-hunk-heading ((t (:background ,surface-container :foreground ,on-surface-variant)))) + `(magit-diff-hunk-heading-highlight ((t (:background ,surface-container-high :foreground ,on-surface)))) + `(magit-diff-context ((t (:foreground ,on-surface-variant)))) + `(magit-diff-context-highlight ((t (:background ,surface-container-low :foreground ,on-surface)))) + `(magit-diff-added ((t (:background ,success-container :foreground ,on-success-container)))) + `(magit-diff-added-highlight ((t (:background ,success-container :foreground ,on-success-container :weight bold)))) + `(magit-diff-removed ((t (:background ,err-container :foreground ,on-err-container)))) + `(magit-diff-removed-highlight ((t (:background ,err-container :foreground ,on-err-container :weight bold)))) + `(magit-hash ((t (:foreground ,outline-color)))) + `(magit-branch-local ((t (:foreground ,tertiary :weight bold)))) + `(magit-branch-remote ((t (:foreground ,primary :weight bold)))) + + ;; Company + `(company-tooltip ((t (:background ,surface-container :foreground ,on-surface)))) + `(company-tooltip-selection ((t (:background ,primary-container :foreground ,on-primary-container)))) + `(company-tooltip-common ((t (:foreground ,primary)))) + `(company-tooltip-common-selection ((t (:foreground ,on-primary-container :weight bold)))) + `(company-tooltip-annotation ((t (:foreground ,tertiary)))) + `(company-scrollbar-fg ((t (:background ,primary)))) + `(company-scrollbar-bg ((t (:background ,surface-variant)))) + `(company-preview ((t (:foreground ,on-surface-variant :slant italic)))) + `(company-preview-common ((t (:foreground ,primary :slant italic)))) + + ;; Ido + `(ido-first-match ((t (:foreground ,primary :weight bold)))) + `(ido-only-match ((t (:foreground ,tertiary :weight bold)))) + `(ido-subdir ((t (:foreground ,secondary)))) + `(ido-indicator ((t (:foreground ,err)))) + `(ido-virtual ((t (:foreground ,outline-color)))) + + ;; Helm + `(helm-selection ((t (:background ,primary-container :foreground ,on-primary-container)))) + `(helm-match ((t (:foreground ,primary :weight bold)))) + `(helm-source-header ((t (:background ,surface-container-high :foreground ,primary :weight bold :height 1.1)))) + `(helm-candidate-number ((t (:foreground ,tertiary :weight bold)))) + `(helm-ff-directory ((t (:foreground ,primary :weight bold)))) + `(helm-ff-file ((t (:foreground ,on-surface)))) + `(helm-ff-executable ((t (:foreground ,tertiary)))) + + ;; corfu + `(corfu-default ((t (:background ,surface-container :foreground ,on-surface)))) + `(corfu-current ((t (:background ,primary-container :foreground ,on-primary-container)))) + + ;; Which-key + `(which-key-key-face ((t (:foreground ,primary :weight bold)))) + `(which-key-separator-face ((t (:foreground ,outline-variant)))) + `(which-key-command-description-face ((t (:foreground ,on-surface)))) + `(which-key-group-description-face ((t (:foreground ,secondary)))) + `(which-key-special-key-face ((t (:foreground ,tertiary :weight bold)))) + + ;; Line numbers + `(line-number ((t (:foreground ,outline-variant :inherit fixed-pitch)))) + `(line-number-current-line ((t (:foreground ,primary :weight bold :inherit fixed-pitch)))) + + ;; Parenthesis matching + `(sp-show-pair-match-face ((t (:background ,primary-container :foreground ,on-primary-container)))) + `(sp-show-pair-mismatch-face ((t (:background ,err-container :foreground ,on-err-container)))) + + ;; Rainbow delimiters + `(rainbow-delimiters-depth-1-face ((t (:foreground ,primary)))) + `(rainbow-delimiters-depth-2-face ((t (:foreground ,secondary)))) + `(rainbow-delimiters-depth-3-face ((t (:foreground ,tertiary)))) + `(rainbow-delimiters-depth-4-face ((t (:foreground ,primary-fixed)))) + `(rainbow-delimiters-depth-5-face ((t (:foreground ,secondary-fixed)))) + `(rainbow-delimiters-depth-6-face ((t (:foreground ,tertiary-fixed)))) + `(rainbow-delimiters-depth-7-face ((t (:foreground ,primary-fixed-dim)))) + `(rainbow-delimiters-depth-8-face ((t (:foreground ,secondary-fixed-dim)))) + `(rainbow-delimiters-depth-9-face ((t (:foreground ,tertiary-fixed-dim)))) + `(rainbow-delimiters-mismatched-face ((t (:foreground ,err :weight bold)))) + `(rainbow-delimiters-unmatched-face ((t (:foreground ,err :weight bold)))) + + ;; Dired + `(dired-directory ((t (:foreground ,primary :weight bold)))) + `(dired-ignored ((t (:foreground ,outline-variant)))) + `(dired-flagged ((t (:foreground ,err)))) + `(dired-marked ((t (:foreground ,tertiary :weight bold)))) + `(dired-symlink ((t (:foreground ,secondary :slant italic)))) + `(dired-header ((t (:foreground ,primary :weight bold :height 1.1)))) + + ;; Terminal colors + `(term-color-black ((t (:foreground ,term0 :background ,term0)))) + `(term-color-red ((t (:foreground ,term1 :background ,term1)))) + `(term-color-green ((t (:foreground ,term2 :background ,term2)))) + `(term-color-yellow ((t (:foreground ,term3 :background ,term3)))) + `(term-color-blue ((t (:foreground ,term4 :background ,term4)))) + `(term-color-magenta ((t (:foreground ,term5 :background ,term5)))) + `(term-color-cyan ((t (:foreground ,term6 :background ,term6)))) + `(term-color-white ((t (:foreground ,term7 :background ,term7)))) + + ;; EShell + `(eshell-prompt ((t (:foreground ,primary :weight bold)))) + `(eshell-ls-directory ((t (:foreground ,primary :weight bold)))) + `(eshell-ls-symlink ((t (:foreground ,secondary :slant italic)))) + `(eshell-ls-executable ((t (:foreground ,tertiary)))) + `(eshell-ls-archive ((t (:foreground ,on-tertiary-container)))) + `(eshell-ls-backup ((t (:foreground ,outline-variant)))) + `(eshell-ls-clutter ((t (:foreground ,err)))) + `(eshell-ls-missing ((t (:foreground ,err)))) + `(eshell-ls-product ((t (:foreground ,on-surface-variant)))) + `(eshell-ls-readonly ((t (:foreground ,on-surface-variant)))) + `(eshell-ls-special ((t (:foreground ,secondary-fixed)))) + `(eshell-ls-unreadable ((t (:foreground ,outline-variant)))) + + ;; Improved markdown mode + `(markdown-header-face ((t (:foreground ,primary :weight bold)))) + `(markdown-header-face-1 ((t (:foreground ,primary :weight bold :height 1.2)))) + `(markdown-header-face-2 ((t (:foreground ,primary-container :weight bold :height 1.1)))) + `(markdown-header-face-3 ((t (:foreground ,secondary :weight bold)))) + `(markdown-header-face-4 ((t (:foreground ,secondary-container :weight bold)))) + `(markdown-inline-code-face ((t (:foreground ,tertiary-fixed :background ,surface-container-low :inherit fixed-pitch)))) + `(markdown-code-face ((t (:background ,surface-container-low :extend t :inherit fixed-pitch)))) + `(markdown-pre-face ((t (:background ,surface-container-low :inherit fixed-pitch)))) + `(markdown-table-face ((t (:foreground ,secondary-fixed :inherit fixed-pitch)))) + + ;; Web mode + `(web-mode-html-tag-face ((t (:foreground ,primary)))) + `(web-mode-html-tag-bracket-face ((t (:foreground ,on-surface-variant)))) + `(web-mode-html-attr-name-face ((t (:foreground ,secondary)))) + `(web-mode-html-attr-value-face ((t (:foreground ,tertiary)))) + `(web-mode-css-selector-face ((t (:foreground ,primary)))) + `(web-mode-css-property-name-face ((t (:foreground ,secondary)))) + `(web-mode-css-string-face ((t (:foreground ,tertiary)))) + + ;; Flycheck + `(flycheck-error ((t (:underline (:style wave :color ,err))))) + `(flycheck-warning ((t (:underline (:style wave :color ,secondary))))) + `(flycheck-info ((t (:underline (:style wave :color ,tertiary))))) + `(flycheck-fringe-error ((t (:foreground ,err)))) + `(flycheck-fringe-warning ((t (:foreground ,secondary)))) + `(flycheck-fringe-info ((t (:foreground ,tertiary)))) + + ;; Mini-buffer customization + `(minibuffer-prompt ((t (:foreground ,primary :weight bold)))) + + ;; Improved search highlighting + `(lsp-face-highlight-textual ((t (:background ,primary-container :foreground ,on-primary-container :weight bold)))) + `(lsp-face-highlight-read ((t (:background ,secondary-container :foreground ,on-secondary-container :weight bold)))) + `(lsp-face-highlight-write ((t (:background ,tertiary-container :foreground ,on-tertiary-container :weight bold)))) + + ;; Info and help modes + `(info-title-1 ((t (:foreground ,primary :weight bold :height 1.3)))) + `(info-title-2 ((t (:foreground ,primary-container :weight bold :height 1.2)))) + `(info-title-3 ((t (:foreground ,secondary :weight bold :height 1.1)))) + `(info-title-4 ((t (:foreground ,secondary-container :weight bold)))) + `(Info-quoted ((t (:foreground ,tertiary)))) + `(info-menu-header ((t (:foreground ,primary :weight bold)))) + `(info-menu-star ((t (:foreground ,primary)))) + `(info-node ((t (:foreground ,tertiary :weight bold)))) + + ;; Tabs + `(tab-bar ((t (:background ,surface-container-high :foreground ,on-surface :box nil)))) + `(tab-bar-tab ((t (:background ,surface-container-high :foreground ,on-surface :weight bold :box nil)))) + `(tab-bar-tab-inactive ((t (:background ,surface :foreground ,on-surface-variant :box nil)))) + + `(tab-line ((t (:background ,surface-container-high :foreground ,on-surface :box nil)))) + `(tab-line-tab ((t (:background ,surface :foreground ,on-surface-variant :box nil)))) + `(tab-line-tab-current ((t (:background ,surface-container-high :foreground ,on-surface :weight bold :box nil)))) + `(tab-line-tab-inactive ((t (:background ,surface :foreground ,on-surface-variant :box nil)))) + `(tab-line-highlight ((t (:background ,surface-container-highest :foreground ,on-surface)))) + + `(centaur-tabs-default ((t (:background ,surface-container-high :foreground ,on-surface)))) + `(centaur-tabs-selected ((t (:background ,surface-container-high :foreground ,on-surface :weight bold)))) + `(centaur-tabs-unselected ((t (:background ,surface :foreground ,on-surface-variant)))) + `(centaur-tabs-selected-modified ((t (:background ,surface-container-high :foreground ,tertiary :weight bold)))) + `(centaur-tabs-unselected-modified ((t (:background ,surface :foreground ,tertiary)))) + `(centaur-tabs-active-bar-face ((t (:background ,primary)))) + + ;; Fixed-pitch faces + `(fixed-pitch ((t (:family "monospace")))) + `(fixed-pitch-serif ((t (:family "monospace serif")))) + + ;; Variable-pitch face + `(variable-pitch ((t (:family "sans serif")))) + )) + +;; Add org-mode hooks for hiding leading stars +(with-eval-after-load 'org + (setq org-hide-leading-stars t) + (setq org-startup-indented t)) + +;;;###autoload +(when load-file-name + (add-to-list 'custom-theme-load-path + (file-name-as-directory (file-name-directory load-file-name)))) + +(provide-theme 'noctalia) +;;; noctalia-theme.el ends here diff --git a/.config/foot/foot.ini b/.config/foot/foot.ini new file mode 100644 index 0000000..2a81398 --- /dev/null +++ b/.config/foot/foot.ini @@ -0,0 +1,26 @@ +[main] +include=~/.cache/wallust/foot-theme.ini +font=JetBrainsMono Nerd Font:size=13 +pad=0x0 + +# paste the rest of your theme colors here + +[cursor] +style=block +blink=yes + +[mouse] +hide-when-typing=yes + +[scrollback] +lines=10000 +multiplier=1.5 + +[key-bindings] +clipboard-copy=Control+Shift+c Control+Insert +clipboard-paste=Control+Shift+v Shift+Insert +primary-paste=none + +search-start=Control+Shift+f +spawn-terminal=Control+Shift+Return + diff --git a/.config/gtk-3.0/settings-dark.ini b/.config/gtk-3.0/settings-dark.ini new file mode 100644 index 0000000..0f580e6 --- /dev/null +++ b/.config/gtk-3.0/settings-dark.ini @@ -0,0 +1,2 @@ +[Settings] +gtk-application-prefer-dark-theme=1 \ No newline at end of file diff --git a/.config/gtk-3.0/settings-light.ini b/.config/gtk-3.0/settings-light.ini new file mode 100644 index 0000000..d9938f7 --- /dev/null +++ b/.config/gtk-3.0/settings-light.ini @@ -0,0 +1,2 @@ +[Settings] +gtk-application-prefer-dark-theme=0 \ No newline at end of file diff --git a/.config/gtk-3.0/settings.ini b/.config/gtk-3.0/settings.ini new file mode 120000 index 0000000..ef98ebb --- /dev/null +++ b/.config/gtk-3.0/settings.ini @@ -0,0 +1 @@ +settings-dark.ini \ No newline at end of file diff --git a/.config/matugen/config.toml b/.config/matugen/config.toml new file mode 100644 index 0000000..9b72eee --- /dev/null +++ b/.config/matugen/config.toml @@ -0,0 +1,8 @@ +[config] +# Disable caching so the -m light/dark mode flag is always respected. +caching = false +version_check = false + +[templates.niri] +input_path = './templates/niri.kdl' +output_path = '/home/seraphim/.cache/matugen/theme.kdl' diff --git a/.config/matugen/templates/niri.kdl b/.config/matugen/templates/niri.kdl new file mode 100644 index 0000000..afc1f04 --- /dev/null +++ b/.config/matugen/templates/niri.kdl @@ -0,0 +1,6 @@ +layout { + focus-ring { + active-color "{{ colors.primary.default.hex }}" + inactive-color "{{ colors.outline.default.hex }}" + } +} diff --git a/.config/mpv/mpv.conf b/.config/mpv/mpv.conf new file mode 100644 index 0000000..8311c18 --- /dev/null +++ b/.config/mpv/mpv.conf @@ -0,0 +1,7 @@ +volume=30 +ytdl-raw-options-append=cookies=/home/seraphim/Documents/yt-dlp-things/cookies.txt +#ytdl-raw-options-append=cookies-from-browser=chromium+gnomekeyring +ytdl-raw-options-append=write-subs= +ytdl-raw-options-append=write-auto-subs= +ytdl-raw-options-append=sub-langs=en,en-US,en-GB +slang=en,eng diff --git a/.config/niri/apply-colors.sh b/.config/niri/apply-colors.sh new file mode 100755 index 0000000..505578c --- /dev/null +++ b/.config/niri/apply-colors.sh @@ -0,0 +1,84 @@ +#!/bin/bash +# Apply a wallpaper and generate colors with wallust (16-color palette) + matugen (Material You / M3). +# Usage: apply-colors.sh [light|dark] +# Called by theme-switcher.sh and the waybar random-wallpaper click. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$(realpath "$0")")" && pwd)" +IMG="${1:-}" +MODE="${2:-auto}" +LOG="${THEME_LOG:-/tmp/theme-switcher.log}" + +log() { + printf '%s %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$*" >>"$LOG" +} + +# Record the exact failing command + line on any error. +trap 'log "apply-colors FAILED (exit $?) in ${BASH_SOURCE[0]}:$LINENO: $BASH_COMMAND"' ERR + +if [ -z "$IMG" ] || [ ! -f "$IMG" ]; then + echo "usage: $0 [light|dark]" >&2 + exit 1 +fi + +# wait for the awww daemon to be ready (it is spawned next to this script at login) +log "awww img $IMG" +for _ in $(seq 1 10); do + if awww query >/dev/null 2>&1; then + break + fi + sleep 1 +done + +# set the wallpaper FIRST and unconditionally — this is the critical, must-work +# step. Color generation below is best-effort: a failure there must never block +# the wallpaper from changing (that coupling is what froze the wallpaper before). +awww img "$IMG" || { log "awww img FAILED ($IMG)"; exit 1; } + +# blurred copy for the Overview backdrop (sibling or on-the-fly generation) +"$SCRIPT_DIR/set-backdrop.sh" "$IMG" || log "set-backdrop FAILED ($IMG)" + +# wallust: classic 16-color palette (foot, btop, ...) +# fastresize (the config default) is flaky on some images — always use resized. +# Best-effort: a wallust failure must not prevent the wallpaper from sticking. +log "wallust palette=$MODE $IMG" +case "$MODE" in +light|dark) WALLUST_PALETTE=("--palette" "$MODE") ;; +*) WALLUST_PALETTE=() ;; +esac +# wallust's `resized` backend is intermittently flaky on some images; retry a +# few times, but ultimately tolerate failure. +ok=0 +for attempt in 1 2 3; do + if wallust run -b resized "${WALLUST_PALETTE[@]}" "$IMG"; then + ok=1 + break + fi + log "wallust attempt $attempt FAILED ($IMG, mode=$MODE)" + [ "$attempt" -lt 3 ] && sleep 2 +done +if [ "$ok" -ne 1 ]; then + log "wallust FAILED after 3 attempts ($IMG, mode=$MODE) — continuing without wallust colors" +else + # foot needs bare RRGGBB, not #RRGGBB — strip the leading '#' + sed -i 's/#\([0-9a-fA-F]\)/\1/g' ~/.cache/wallust/foot-theme.ini 2>/dev/null || true +fi + +# matugen: Material You / M3 colors (niri focus ring, ...) +# --prefer is required for non-interactive runs (multiple source colors). +# Best-effort: a matugen failure (e.g. bad config after an upgrade) must not +# block the wallpaper. +log "matugen mode=$MODE $IMG" +case "$MODE" in +light) matugen image "$IMG" -m "light" --prefer saturation ;; +dark) matugen image "$IMG" -m "dark" --prefer saturation ;; +*) matugen image "$IMG" --prefer saturation ;; +esac || log "matugen FAILED ($IMG, mode=$MODE) — continuing without matugen colors" + +# reload consumers +killall -SIGUSR2 waybar 2>/dev/null || true +killall -USR1 foot 2>/dev/null || true +niri msg action load-config-file 2>/dev/null || true + +log "apply-colors OK ($IMG, $MODE)" diff --git a/.config/niri/config.kdl b/.config/niri/config.kdl new file mode 100644 index 0000000..9d7db14 --- /dev/null +++ b/.config/niri/config.kdl @@ -0,0 +1,321 @@ +include optional=true "/home/seraphim/.cache/matugen/theme.kdl" +spawn-at-startup "mako" +spawn-at-startup "xrdb" "-merge" "/home/seraphim/.Xresources" +spawn-at-startup "vicinae" "server" +spawn-at-startup "gentoo-pipewire-launcher" +spawn-at-startup "telegram-desktop" "-autostart" "--minimized" +spawn-at-startup "keepassxc" "--minimized" +spawn-at-startup "awww-daemon" +spawn-at-startup "awww-daemon" "--namespace" "backdrop" +spawn-at-startup "/usr/libexec/hyprpolkitagent" +spawn-at-startup "dbus-update-activation-environment" "WAYLAND_DISPLAY" "DISPLAY" "XDG_CURRENT_DESKTOP" +spawn-at-startup "darkman" "run" +spawn-at-startup "/home/seraphim/dotfiles-gentoo/niri/.config/niri/theme-switcher.sh" "night" +spawn-at-startup "sh" "-c" "NO_AT_BRIDGE=1 waybar" +spawn-at-startup "/usr/bin/Throne" +spawn-at-startup "mpd" +prefer-no-csd +screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png" + +environment { + OZONE_PLATFORM "wayland" + ELECTRON_OZONE_PLATFORM_HINT "auto" + XDG_CURRENT_DESKTOP "niri" +} +blur { + passes 4 + offset 5.0 + noise 0.02 + saturation 1.1 +} + +// awww-daemon --namespace backdrop: pre-blurred wallpaper shown in the +// Overview backdrop. niri cannot blur a backdrop surface itself. +layer-rule { + match namespace="^awww-daemonbackdrop$" + place-within-backdrop true +} +input { + focus-follows-mouse max-scroll-amount="100%" + + keyboard { + xkb { + layout "us,ru" + options "grp:lalt_lshift_toggle,compose:ralt,ctrl:nocaps" + } + repeat-delay 300 + repeat-rate 60 + numlock + } + + mouse { + accel-speed -0.8 + accel-profile "flat" + } +} + +output "DP-2" { + mode "2560x1440" + scale 1.5 + position x=0 y=0 +} + +output "HDMI-A-1" { + mode "1920x1080@71.910" + scale 1 +} + +layout { + gaps 0.5 + center-focused-column "never" + + preset-column-widths { + proportion 0.33333 + proportion 0.5 + proportion 0.66667 + } + + default-column-width { proportion 0.5; } + + focus-ring { + width 2 + } + + border { + off //width 0.5 + //active-color "#ffc87f" + //inactive-color "#505050" + //urgent-color "#9b0000" + } + + shadow { + off + //softness 30 + //spread 5 + //offset x=0 y=5 + //color "#0007" + } +} + +animations { + workspace-switch { + duration-ms 275 + curve "ease-out-cubic" + } + horizontal-view-movement { + spring damping-ratio=1.0 stiffness=800 epsilon=0.0001 + } + window-movement { + spring damping-ratio=1.0 stiffness=800 epsilon=0.0001 + } +// window-open { +// duration-ms 150 +// curve "ease-out-expo" +// } +// window-close { +// duration-ms 150 +// curve "ease-out-quad" +// } + window-resize { + spring damping-ratio=1.0 stiffness=800 epsilon=0.0001 + } + overview-open-close { + duration-ms 150 + curve "ease-out-quad" + } +} + +window-rule { + match app-id=r#"^org\.wezfurlong\.wezterm$"# + geometry-corner-radius 12 + clip-to-geometry true + background-effect { + xray false + } +} + +// Helium PiP fix +window-rule { + match app-id=r#"helium$"# title="^Picture-in-Picture$" + open-floating true + geometry-corner-radius 9000 + clip-to-geometry true + shadow { + off + } +} + +// Steam notifs fix +window-rule { + match app-id="steam" title=r#"^notificationtoasts_\d+_desktop$"# + open-floating true + open-focused false + default-floating-position x=16 y=16 relative-to="bottom-right" +} + +gestures { + hot-corners { + off + } +} + +cursor { + xcursor-theme "Bibata-Modern-Classic" + xcursor-size 15 +} + +overview { + zoom 0.5 + workspace-shadow { + off + //softness 15 + //spread 3 + //offset x=0 y=6 + //color "#00000080" + } +} +debug { + honor-xdg-activation-with-invalid-serial +} +binds { + // Application Launchers + Mod+Shift+T { spawn "telegram-desktop"; } + Mod+Shift+B { spawn "/opt/helium/helium" "--enable-features=UseOzonePlatform" "--ozone-platform=wayland"; } + Mod+D { spawn "vicinae" "toggle"; } + Mod+Ctrl+V { spawn "vicinae" "deeplink" "vicinae://launch/clipboard/history"; } + Mod+T hotkey-overlay-title="File Manager" { spawn "foot" "-e" "yazi"; } + Mod+Alt+R { spawn "foot" "-e" "rmpc"; } + Mod+S hotkey-overlay-title="Terminal" { spawn "foot"; } + Super+Alt+L hotkey-overlay-title="Lock Screen" { spawn "swaylock"; } + + // Audio & Media Controls + 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"; } + + 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"; } + + // universal clipboard hotkeys (super + c / v / x) + mod+c { spawn-sh "sleep 0.001 && wtype -M ctrl -k insert -m ctrl"; } + mod+v { spawn-sh "sleep 0.001 && wtype -M shift -k insert -m shift"; } + mod+x { spawn-sh "sleep 0.001 && wtype -M shift -k delete -m shift"; } + + // Window Management & Views + Mod+Tab repeat=false { toggle-overview; } + Mod+Grave repeat=false { toggle-overview; } + Mod+W repeat=false { close-window; } + Mod+F { maximize-column; } + Mod+Shift+F { fullscreen-window; } + Mod+Ctrl+F { maximize-window-to-edges; } + //Mod+Ctrl+F { expand-column-to-available-width; } + Mod+Ctrl+C { center-visible-columns; } + Mod+Shift+V { toggle-window-floating; } + Mod+Q { toggle-column-tabbed-display; } + + // Focus Navigation + Mod+Left { focus-column-left; } + Mod+Down { focus-window-down; } + Mod+Up { focus-window-up; } + Mod+Right { focus-column-right; } + Mod+H { focus-column-left; } + Mod+J { focus-window-down; } + Mod+K { focus-window-up; } + Mod+L { focus-column-right; } + Mod+Shift+WheelScrollUp { focus-monitor-left; } + Mod+Shift+WheelScrollDown { focus-monitor-right; } + + // Window Movement + Mod+Ctrl+Left { move-column-left; } + Mod+Ctrl+Down { move-window-down; } + Mod+Ctrl+Up { move-window-up; } + Mod+Ctrl+Right { move-column-right; } + Mod+Ctrl+H { move-column-left; } + Mod+Ctrl+J { move-window-down; } + Mod+Ctrl+K { move-window-up; } + Mod+Ctrl+L { move-column-right; } + + Mod+Home { focus-column-first; } + Mod+End { focus-column-last; } + Mod+Ctrl+Home { move-column-to-first; } + Mod+Ctrl+End { move-column-to-last; } + + // Monitor Focus & Movement + Mod+Shift+1 { focus-monitor-left; } + Mod+Shift+2 { focus-monitor-right; } + Mod+Shift+Left { focus-monitor-left; } + Mod+Shift+Down { focus-monitor-down; } + Mod+Shift+Up { focus-monitor-up; } + Mod+Shift+Right { focus-monitor-right; } + Mod+Shift+H { focus-monitor-left; } + Mod+Shift+J { focus-monitor-down; } + Mod+Shift+K { focus-monitor-up; } + Mod+Shift+L { focus-monitor-right; } + + Mod+Shift+Ctrl+1 { move-column-to-monitor-left; } + Mod+Shift+Ctrl+2 { move-column-to-monitor-right; } + Mod+Shift+Ctrl+Left { move-column-to-monitor-left; } + Mod+Shift+Ctrl+Down { move-column-to-monitor-down; } + Mod+Shift+Ctrl+Up { move-column-to-monitor-up; } + Mod+Shift+Ctrl+Right { move-column-to-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; } + + // Workspace Navigation + 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; } + + // Direct Workspace Switching (1-9) + 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+Ctrl+1 { move-column-to-workspace 1; } + Mod+Ctrl+2 { move-column-to-workspace 2; } + Mod+Ctrl+3 { move-column-to-workspace 3; } + Mod+Ctrl+4 { move-column-to-workspace 4; } + Mod+Ctrl+5 { move-column-to-workspace 5; } + Mod+Ctrl+6 { move-column-to-workspace 6; } + Mod+Ctrl+7 { move-column-to-workspace 7; } + Mod+Ctrl+8 { move-column-to-workspace 8; } + Mod+Ctrl+9 { move-column-to-workspace 9; } + + // Column & Window Sizing + Mod+BracketLeft { consume-or-expel-window-left; } + Mod+BracketRight { consume-or-expel-window-right; } + + Mod+R { switch-preset-column-width; } + Mod+Shift+R { switch-preset-column-width-back; } + Mod+Ctrl+Shift+R { switch-preset-window-height; } + Mod+Ctrl+R { reset-window-height; } + + Mod+Minus { set-column-width "-10%"; } + Mod+Equal { set-column-width "+10%"; } + Mod+Shift+Minus { set-window-height "-10%"; } + Mod+Shift+Equal { set-window-height "+10%"; } + + // Mouse Wheel Bindings + Mod+WheelScrollUp { focus-column-left; } + Mod+WheelScrollDown { focus-column-right; } + + // Screenshots + Print { screenshot; } + Ctrl+Print { screenshot-screen; } + Alt+Print { screenshot-window; } + + // System Control + Mod+Shift+E { quit; } +} diff --git a/.config/niri/set-backdrop.sh b/.config/niri/set-backdrop.sh new file mode 100755 index 0000000..efd02b3 --- /dev/null +++ b/.config/niri/set-backdrop.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# Push a blurred copy of a wallpaper to the awww-daemon backdrop namespace. +# Prefers a pre-made -blur. sibling; otherwise generates one into the cache. +# Used by theme-switcher.sh and apply-colors.sh for the niri Overview backdrop. + +set -euo pipefail + +IMG="${1:-}" +if [ -z "$IMG" ] || [ ! -f "$IMG" ]; then + echo "usage: $0 " >&2 + exit 1 +fi + +EXT="${IMG##*.}" +SIBLING="${IMG%.*}-blur.${EXT}" +if [ -f "$SIBLING" ]; then + BLURRED="$SIBLING" +else + CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/niri-backdrop" + mkdir -p "$CACHE_DIR" + BASE=$(basename "${IMG%.*}") + BLURRED="$CACHE_DIR/${BASE}-blur.jpg" + if [ ! -f "$BLURRED" ] || [ "$IMG" -nt "$BLURRED" ]; then + magick "$IMG" -blur 0x16 -quality 90 "$BLURRED" + fi +fi + +awww img "$BLURRED" -n backdrop +echo "$BLURRED" >/tmp/current_backdrop_state \ No newline at end of file diff --git a/.config/niri/theme-switcher.sh b/.config/niri/theme-switcher.sh new file mode 100755 index 0000000..6d1f548 --- /dev/null +++ b/.config/niri/theme-switcher.sh @@ -0,0 +1,135 @@ +#!/bin/bash + +# Day/night theme switcher + wallpaper/color applier. +# Two wallpapers: day.jpg (9:00-18:00) and night.jpg (18:00-9:00). +# +# Usage: +# ./theme-switcher.sh one-shot: apply based on current time, then exit +# ./theme-switcher.sh day|light force light theme, then exit +# ./theme-switcher.sh night|dark force dark theme, then exit +# ./theme-switcher.sh --daemon continuous time-based loop (used at login) + +WALLPAPERS="$HOME/Pictures/wallpapers" +STATE_FILE="/tmp/current_theme_state" +WALLPAPER_STATE_FILE="/tmp/current_wallpaper_state" +BACKDROP_STATE_FILE="/tmp/current_backdrop_state" +PID_FILE="/tmp/theme-switcher.daemon.pid" +LOG="/tmp/theme-switcher.log" +SCRIPT_DIR="$(cd "$(dirname "$(realpath "$0")")" && pwd)" +SET_BACKDROP="$SCRIPT_DIR/set-backdrop.sh" + +log() { + printf '%s %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$*" >>"$LOG" +} + +# Resolve TARGET_STATE / MODE / WALLPAPER. Optional $1 forces day|night. +resolve_target() { + local force="${1:-}" + if [ "$force" = "day" ] || [ "$force" = "light" ]; then + TARGET_STATE="light" + MODE="light" + WALLPAPER="$WALLPAPERS/day.jpg" + elif [ "$force" = "night" ] || [ "$force" = "dark" ]; then + TARGET_STATE="dark" + MODE="dark" + WALLPAPER="$WALLPAPERS/night.jpg" + else + local HOUR + HOUR=$(date +%H) + HOUR=$((10#$HOUR)) + if [ "$HOUR" -ge 9 ] && [ "$HOUR" -lt 18 ]; then + TARGET_STATE="light" + MODE="light" + WALLPAPER="$WALLPAPERS/day.jpg" + else + TARGET_STATE="dark" + MODE="dark" + WALLPAPER="$WALLPAPERS/night.jpg" + fi + fi +} + +# Apply the resolved target once. Returns 0 on success. +apply_target() { + if [ ! -f "$WALLPAPER" ]; then + log "wallpaper missing: $WALLPAPER" + return 1 + fi + + local CURRENT_THEME CURRENT_WALLPAPER EXPECTED_BACKDROP ACTUAL_BACKDROP + + CURRENT_THEME=$(cat "$STATE_FILE" 2>/dev/null || true) + # Already in the correct theme: don't re-run wallust/matugen every loop tick. + # Still self-heal a drifted backdrop below, then bail out. + if [ "$CURRENT_THEME" = "$TARGET_STATE" ]; then + EXPECTED_BACKDROP=$(cat "$BACKDROP_STATE_FILE" 2>/dev/null || true) + ACTUAL_BACKDROP=$(awww query -n backdrop -j 2>/dev/null | jq -r '.["backdrop"][0].displaying.image // empty') + if [ -n "$EXPECTED_BACKDROP" ] && [ "$ACTUAL_BACKDROP" != "$EXPECTED_BACKDROP" ]; then + "$SET_BACKDROP" "$WALLPAPER" + fi + return 0 + fi + CURRENT_WALLPAPER=$(cat "$WALLPAPER_STATE_FILE" 2>/dev/null || true) + + # Self-heal the Overview backdrop if it drifted from the expected image. + EXPECTED_BACKDROP=$(cat "$BACKDROP_STATE_FILE" 2>/dev/null || true) + ACTUAL_BACKDROP=$(awww query -n backdrop -j 2>/dev/null | jq -r '.["backdrop"][0].displaying.image // empty') + if [ -n "$EXPECTED_BACKDROP" ] && [ "$ACTUAL_BACKDROP" != "$EXPECTED_BACKDROP" ]; then + "$SET_BACKDROP" "$WALLPAPER" + fi + + log "switching to $TARGET_STATE ($WALLPAPER)" + if sh "$SCRIPT_DIR/apply-colors.sh" "$WALLPAPER" "$MODE"; then + if [ "$CURRENT_THEME" != "$TARGET_STATE" ]; then + darkman set "$TARGET_STATE" + fi + + ln -sf \ + "theme-${TARGET_STATE}.css" \ + "$HOME/dotfiles-gentoo/waybar/.config/waybar/theme.css" + + ln -sf \ + "settings-${TARGET_STATE}.ini" \ + "$HOME/dotfiles-gentoo/gtk/.config/gtk-3.0/settings.ini" + + echo "$TARGET_STATE" >"$STATE_FILE" + echo "$WALLPAPER" >"$WALLPAPER_STATE_FILE" + log "switched to $TARGET_STATE ($WALLPAPER)" + return 0 + else + log "FAILED to apply $TARGET_STATE ($WALLPAPER)" + return 1 + fi +} + +daemon_loop() { + # Refuse to run a second daemon instance (e.g. manual run while one is alive). + if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE" 2>/dev/null)" 2>/dev/null; then + log "daemon already running (pid $(cat "$PID_FILE")), exiting" + exit 0 + fi + echo $$ >"$PID_FILE" + + while true; do + resolve_target + apply_target || true # failure is retried on the next loop, state is left untouched + sleep 60 + done +} + +case "${1:-}" in +--daemon | -d) daemon_loop ;; +"" | day | light | night | dark) + resolve_target "${1:-}" + apply_target + exit $? + ;; +-h | --help) + echo "usage: $0 [day|night|--daemon]" >&2 + exit 0 + ;; +*) + echo "usage: $0 [day|night|--daemon]" >&2 + exit 1 + ;; +esac diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua new file mode 100644 index 0000000..6bf6f8e --- /dev/null +++ b/.config/nvim/init.lua @@ -0,0 +1,4 @@ +require("caelus.init").colorscheme() +require("config.keymaps") +require("config.options") +require("config.plugins") diff --git a/.config/nvim/lua/caelus/init.lua b/.config/nvim/lua/caelus/init.lua new file mode 100644 index 0000000..dec0a41 --- /dev/null +++ b/.config/nvim/lua/caelus/init.lua @@ -0,0 +1,100 @@ +local M = {}; + +local colors = { + bg = "#0f0f0f", + gray0 = "#141514"; + gray1 = "#1e1f1e"; + gray2 = "#272a28"; + gray3 = "#3b403c"; + gray4 = "#585f5b"; + gray5 = "#6c756f"; + gray6 = "#888e7b"; + gray7 = "#9a9c8b"; + gray8 = "#b6b69a"; + gray9 = "#d9cdb5"; + gray10 = "#e3d6c9"; + fg = "#f4decd", + red = "#f16e65"; + lred = "#ef968f"; + orange = "#ef934d"; + yellow = "#efbf71"; + green = "#7ec97e"; + lgreen = "#a4daa4"; + cyan = "#7ec9a3"; + lcyan = "#abd4bf"; + blue = "#71b4d6"; + lblue = "#b0d4e8"; + magenta = "#e28dc6"; + lmagenta = "#ebadd6"; +} + +function M.colorscheme() + vim.cmd("highlight clear") + vim.cmd("syntax reset") + + vim.o.background = "dark"; + vim.g.colors_name = "caelus"; + + local set = vim.api.nvim_set_hl + + -- ui + set(0, "Normal", { fg = colors.fg, bg = colors.bg }) + set(0, "NormalFloat", { fg = colors.fg, bg = colors.bg }) + set(0, "FloatBorder", { fg = colors.fg, bg = colors.bg }) + set(0, "CursorLine", { bg = colors.gray2 }) + set(0, "Visual", { bg = colors.gray3 }) + set(0, "Search", { fg = colors.bg, bg = colors.orange }) + set(0, "IncSearch", { fg = colors.bg, bg = colors.orange }) + set(0, "StatusLine", { bg = colors.gray2 }) + set(0, "StatusLineNC", { bg = colors.orange }) + set(0, "VertSplit", { fg = colors.gray8 }) + set(0, "WinSeparator", { fg = colors.gray8 }) + set(0, "LineNr", { fg = colors.gray6 }) + set(0, "CursorLineNr", { fg = colors.orange, bold = true }) + set(0, "SignColumn", { bg = colors.bg }) + set(0, "Folded", { fg = colors.gray8, bg = colors.gray3 }) + + -- popup + set(0, "Pmenu", { fg = colors.fg, bg = colors.gray10 }) + set(0, "PmenuSel", { fg = colors.bg, bg = colors.orange }) + set(0, "PmenuSbar", { bg = colors.gray10 }) + set(0, "PmenuThumb", { bg = colors.orange }) + + -- syntax + set(0, "Comment", { fg = colors.gray8, italic = true }) + set(0, "Constant", { fg = colors.magenta }) + set(0, "String", { fg = colors.green }) + set(0, "Identifier", { fg = colors.blue }) + set(0, "Function", { fg = colors.yellow }) + set(0, "Statement", { fg = colors.red }) + set(0, "Type", { fg = colors.cyan, bold = true }) + set(0, "Special", { fg = colors.yellow }) + set(0, "Error", { fg = colors.red, bold = true }) + set(0, "Keyword", { fg = colors.red }) + set(0, "Variable", { fg = colors.fg }) + set(0, "TSKeyword", { fg = colors.red }) + set(0, "TSFunction", { fg = colors.yellow }) + set(0, "TSVariable", { fg = colors.fg }) + set(0, "TSType", { fg = colors.cyan }) + + -- blink + set(0, "BlinkCmpMenu", { bg = colors.gray1 }) + set(0, "BlinkCmpMenuBorder", { fg = colors.gray6, bg = colors.gray1 }) + set(0, "BlinkCmpMenuSelection", { fg = colors.bg, bg = colors.orange }) + set(0, "BlinkCmpLabel", { fg = colors.fg }) + set(0, "BlinkCmpLabelDetail", { fg = colors.gray7 }) + set(0, "BlinkCmpLabelDescription",{ fg = colors.gray8 }) + set(0, "BlinkCmpLabelMatch", { fg = colors.orange, bold = true }) + set(0, "BlinkCmpKind", { fg = colors.cyan }) + set(0, "BlinkCmpDoc", { fg = colors.fg, bg = colors.gray2 }) + set(0, "BlinkCmpDocBorder", { fg = colors.gray5, bg = colors.gray2 }) + + if package.loaded['lualine'] then + require('lualine').setup({ + options = { theme = 'auto' }, + }) + end + +end + +return M diff --git a/.config/nvim/lua/config/keymaps.lua b/.config/nvim/lua/config/keymaps.lua new file mode 100755 index 0000000..e2987bc --- /dev/null +++ b/.config/nvim/lua/config/keymaps.lua @@ -0,0 +1,13 @@ +localopts = { noremap = true, silent = true } + +vim.g.mapleader = " " +vim.g.maplocalleader = " " + +vim.keymap.set({"n", "v"}, "y", '"+y', { noremap = true, silent = true }) + +vim.keymap.set("v", "J", ":m '>+1gv=gv", { desc = "moves lines down in visual selection" }) +vim.keymap.set("v", "K", ":m '<-2gv=gv", { desc = "moves lines up in visual selection" }) + +vim.keymap.set("n", "al", "term", { desc = "Open terminal" }) + +vim.keymap.set("n", "f", vim.lsp.buf.format) diff --git a/.config/nvim/lua/config/options.lua b/.config/nvim/lua/config/options.lua new file mode 100755 index 0000000..dac7c76 --- /dev/null +++ b/.config/nvim/lua/config/options.lua @@ -0,0 +1,40 @@ +vim.cmd("let g:netrw_banner = 0") +vim.cmd("set termguicolors") + +vim.opt.guicursor = "" +vim.opt.nu = true +vim.opt.relativenumber = false + +vim.opt.tabstop = 2 +vim.opt.softtabstop = 2 +vim.opt.shiftwidth = 2 +vim.opt.expandtab = true +vim.opt.autoindent = true +vim.opt.smartindent = true +vim.opt.wrap = true + +vim.opt.swapfile = false +vim.opt.backup = false +vim.opt.undofile = true + +vim.opt.incsearch = true +vim.opt.inccommand = "split" +vim.opt.ignorecase = true +vim.opt.smartcase = true + +vim.opt.termguicolors = true +vim.opt.background = "dark" +vim.opt.scrolloff = 8 +vim.opt.signcolumn = "yes" + +vim.opt.backspace = { "start", "eol", "indent" } + +vim.opt.splitright = true +vim.opt.splitbelow = true + +vim.opt.hlsearch = true + +vim.opt.mouse = "a" +vim.g.editorconfig = true + +vim.g.markdown_folding = 1 diff --git a/.config/nvim/lua/config/plugins.lua b/.config/nvim/lua/config/plugins.lua new file mode 100644 index 0000000..464a5ae --- /dev/null +++ b/.config/nvim/lua/config/plugins.lua @@ -0,0 +1,101 @@ +vim.pack.add { + 'https://github.com/ollykel/v-vim', + 'https://github.com/hrsh7th/nvim-cmp', + 'https://github.com/saghen/blink.cmp', + 'https://github.com/alaviss/nim.nvim', + 'https://github.com/stevearc/oil.nvim', + 'https://github.com/folke/trouble.nvim', + 'https://github.com/nvim-mini/mini.nvim', + 'https://github.com/jiaoshijie/undotree', + 'https://github.com/thePrimeagen/harpoon', + 'https://github.com/hrsh7th/cmp-nvim-lsp', + 'https://github.com/mason-org/mason.nvim', + 'https://github.com/nvim-orgmode/orgmode', + 'https://github.com/windwp/nvim-autopairs', + 'https://github.com/neovim/nvim-lspconfig', + 'https://github.com/nvim-lua/plenary.nvim', + 'https://github.com/mfussenegger/nvim-lint', + 'https://github.com/akinsho/org-bullets.nvim', + 'https://github.com/nvim-lualine/lualine.nvim', + 'https://github.com/norcalli/nvim-colorizer.lua', + 'https://github.com/nvim-tree/nvim-web-devicons', + 'https://github.com/rafamadriz/friendly-snippets', + 'https://github.com/nvim-telescope/telescope.nvim', + 'https://github.com/mason-org/mason-lspconfig.nvim', + 'https://github.com/nvim-treesitter/nvim-treesitter', + 'https://github.com/brenoprata10/nvim-highlight-colors', + 'https://github.com/antosha417/nvim-lsp-file-operations', + 'https://github.com/nvim-telescope/telescope-ui-select.nvim', + 'https://github.com/MeanderingProgrammer/render-markdown.nvim', +} + +-- vlang +--vim.lsp.config.vlang.setup({}) + +-- oil +-- oil +require("oil").setup({ + default_file_explorer = true, + columns = {}, + keymaps = { + ["q"] = "actions.close", + ["l"] = "actions.select", -- Opens the file or enters the directory + ["h"] = "actions.parent", -- Goes up to the parent directory + }, + delete_to_trash = true, + view_options = { + show_hidden = true, + }, + skip_confirm_for_simple_edits = true, +}) +vim.keymap.set("n", "fm", "Oil", { desc = "Open parent directory" }) + +-- harpoon +vim.keymap.set("n", "ad", function() + harpoon:list():add() +end, { desc = "Harpoon add file" }) +vim.keymap.set("n", "", function() + harpoon.ui:toggle_quick_menu(harpoon:list()) +end) + +-- mason +require("mason").setup({ + opts = { + ui = { + icons = { + package_installed = "*", + package_pending = ">", + package_uninstalled = "x" + } + } + } +}) + +-- autopairs +require("nvim-autopairs").setup({ + check_ts = true, + ts_config = { + lua = { "string" }, + javascript = { "template_string" }, + java = false, + }, +}) + +-- lspconfig +vim.keymap.set("n", "gd", function() vim.lsp.buf.definition() end, opts) +vim.keymap.set("n", "vca", function() vim.lsp.buf.code_action() end, opts) +vim.keymap.set("n", "vrn", function() vim.lsp.buf.rename() end, opts) + +-- lualine +require('lualine').setup { + options = { + icons_enabled = true, + theme = 'auto', + } +} + +-- colorizer +require("colorizer").setup() + +-- mason-lspconfig +require("mason-lspconfig").setup() diff --git a/.config/nvim/nvim-pack-lock.json b/.config/nvim/nvim-pack-lock.json new file mode 100644 index 0000000..dc69b9a --- /dev/null +++ b/.config/nvim/nvim-pack-lock.json @@ -0,0 +1,116 @@ +{ + "plugins": { + "blink.cmp": { + "rev": "679a2ffad4bae720bb12e6bcdf57b0dd8b8a80f8", + "src": "https://github.com/saghen/blink.cmp" + }, + "cmp-nvim-lsp": { + "rev": "cbc7b02bb99fae35cb42f514762b89b5126651ef", + "src": "https://github.com/hrsh7th/cmp-nvim-lsp" + }, + "friendly-snippets": { + "rev": "6cd7280adead7f586db6fccbd15d2cac7e2188b9", + "src": "https://github.com/rafamadriz/friendly-snippets" + }, + "harpoon": { + "rev": "1bc17e3e42ea3c46b33c0bbad6a880792692a1b3", + "src": "https://github.com/thePrimeagen/harpoon" + }, + "lualine.nvim": { + "rev": "47f91c416daef12db467145e16bed5bbfe00add8", + "src": "https://github.com/nvim-lualine/lualine.nvim" + }, + "mason-lspconfig.nvim": { + "rev": "25f609e7fca78af7cede4f9fa3af8a94b1c4950b", + "src": "https://github.com/mason-org/mason-lspconfig.nvim" + }, + "mason.nvim": { + "rev": "44d1e90e1f66e077268191e3ee9d2ac97cc18e65", + "src": "https://github.com/mason-org/mason.nvim" + }, + "mini.nvim": { + "rev": "3923662bf3d6ca49a9503f8d7196ea0450983e6a", + "src": "https://github.com/nvim-mini/mini.nvim" + }, + "nim.nvim": { + "rev": "9ee8fdc04ad3d7fcbd9679e0be3477543f17b9d9", + "src": "https://github.com/alaviss/nim.nvim" + }, + "nvim-autopairs": { + "rev": "59bce2eef357189c3305e25bc6dd2d138c1683f5", + "src": "https://github.com/windwp/nvim-autopairs" + }, + "nvim-cmp": { + "rev": "a1d504892f2bc56c2e79b65c6faded2fd21f3eca", + "src": "https://github.com/hrsh7th/nvim-cmp" + }, + "nvim-colorizer.lua": { + "rev": "a065833f35a3a7cc3ef137ac88b5381da2ba302e", + "src": "https://github.com/norcalli/nvim-colorizer.lua" + }, + "nvim-highlight-colors": { + "rev": "e2cb22089cc2358b2b995c09578224f142de6039", + "src": "https://github.com/brenoprata10/nvim-highlight-colors" + }, + "nvim-lint": { + "rev": "4b03656c09c1561f89b6aa0665c15d292ba9499d", + "src": "https://github.com/mfussenegger/nvim-lint" + }, + "nvim-lsp-file-operations": { + "rev": "b9c795d3973e8eec22706af14959bc60c579e771", + "src": "https://github.com/antosha417/nvim-lsp-file-operations" + }, + "nvim-lspconfig": { + "rev": "8e2084bf5e40c79c1f42210a6ef96a0a4793a763", + "src": "https://github.com/neovim/nvim-lspconfig" + }, + "nvim-treesitter": { + "rev": "539abf6da5ee8702e37b82cc953131dadd570da2", + "src": "https://github.com/nvim-treesitter/nvim-treesitter" + }, + "nvim-web-devicons": { + "rev": "d7462543c9e366c0d196c7f67a945eaaf5d99414", + "src": "https://github.com/nvim-tree/nvim-web-devicons" + }, + "oil.nvim": { + "rev": "0fcc83805ad11cf714a949c98c605ed717e0b83e", + "src": "https://github.com/stevearc/oil.nvim" + }, + "org-bullets.nvim": { + "rev": "503fe053550879cc202086a40454e46a87c41ddb", + "src": "https://github.com/akinsho/org-bullets.nvim" + }, + "orgmode": { + "rev": "1ab7b456020de8bdaed7d8135b5376a0b4419b11", + "src": "https://github.com/nvim-orgmode/orgmode" + }, + "plenary.nvim": { + "rev": "b9fd5226c2f76c951fc8ed5923d85e4de065e509", + "src": "https://github.com/nvim-lua/plenary.nvim" + }, + "render-markdown.nvim": { + "rev": "c7188a8f9d2953696b6303caccbf39c51fa2c1b1", + "src": "https://github.com/MeanderingProgrammer/render-markdown.nvim" + }, + "telescope-ui-select.nvim": { + "rev": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2", + "src": "https://github.com/nvim-telescope/telescope-ui-select.nvim" + }, + "telescope.nvim": { + "rev": "cfb85dcf7f822b79224e9e6aef9e8c794211b20b", + "src": "https://github.com/nvim-telescope/telescope.nvim" + }, + "trouble.nvim": { + "rev": "bd67efe408d4816e25e8491cc5ad4088e708a69a", + "src": "https://github.com/folke/trouble.nvim" + }, + "undotree": { + "rev": "0e6d41d55ad147407e4ba00a292973de8db0b836", + "src": "https://github.com/jiaoshijie/undotree" + }, + "v-vim": { + "rev": "1dc1388bafb89072f8349dbd96f9462ae22237cb", + "src": "https://github.com/ollykel/v-vim" + } + } +} diff --git a/.config/rmpc/config.ron b/.config/rmpc/config.ron new file mode 100644 index 0000000..765d13b --- /dev/null +++ b/.config/rmpc/config.ron @@ -0,0 +1,84 @@ +#![enable(implicit_some)] +#![enable(unwrap_newtypes)] +#![enable(unwrap_variant_newtypes)] + +( + address: "127.0.0.1:6600", + max_fps: 180, + + music_dir: "/mnt/giga/music", + lyrics_dir: "/mnt/giga/music", + theme: "~/.config/rmpc/theme.ron", + + album_art: ( + method: Sixel, + max_size_px: (width: 1600, height: 1600), + ), + lyrics: ( + fetch: true, + ), + tabs: [ + ( + name: "Player", + pane: Split( + direction: Horizontal, + panes: [ + ( + size: "40%", + pane: Split( + direction: Vertical, + panes: [ + (size: "55%", pane: Pane(AlbumArt)), + (size: "45%", pane: Pane(Lyrics)), + ] + ) + ), + ( + size: "60%", + pane: Split( + direction: Vertical, + panes: [ + (size: "1", pane: Pane(QueueHeader())), + (size: "100%", pane: Pane(Queue)), + ] + ) + ), + ], + ), + ), + (name: "Files", pane: Pane(Directories)), + (name: "Artists", pane: Pane(Artists)), + (name: "Playlists", pane: Pane(Playlists)), + (name: "Search", pane: Pane(Search)), + ], + + keybinds: ( + global: { + "1": SwitchToTab("Player"), + "2": SwitchToTab("Files"), + "3": SwitchToTab("Artists"), + "4": SwitchToTab("Playlists"), + "5": SwitchToTab("Search"), + "/": SwitchToTab("Search"), + + "": TogglePause, + "+": VolumeUp, + "-": VolumeDown, + "n": NextTrack, + "b": PreviousTrack, + + "": SeekForward, + "": SeekBack, + ">": SeekForward, + "<": SeekBack, + + "r": ToggleRepeat, + "s": ToggleSingle, + "c": ToggleConsume, + "z": ToggleRandom, + }, + navigation: { + "Enter": Select, + }, + ), +) diff --git a/.config/rmpc/theme.ron b/.config/rmpc/theme.ron new file mode 100644 index 0000000..f23418a --- /dev/null +++ b/.config/rmpc/theme.ron @@ -0,0 +1,47 @@ +#![enable(implicit_some)] +#![enable(unwrap_newtypes)] +#![enable(unwrap_variant_newtypes)] + +( + show_song_table_header: true, + + song_table_format: [ + ( + prop: (kind: Property(Position)), + width: "3", + alignment: Right, + label: "#" + ), + ( + prop: (kind: Property(Title), default: (kind: Property(Filename))), + width: "45%", + alignment: Left, + label: "Title" + ), + ( + prop: (kind: Property(Artist), default: (kind: Text("Unknown"))), + width: "35%", + alignment: Left, + label: "Artist" + ), + ( + prop: (kind: Property(Duration)), + width: "15%", + alignment: Right, + label: "Time" + ), + ], + + text_color: None, + borders_style: (fg: "#4c566a"), + + highlighted_item_style: (fg: "#81a1c1", modifiers: "Bold"), + current_item_style: (fg: "#88c0d0", modifiers: "Bold | Reversed"), + + lyrics: ( + unplayed_style: (fg: "#4c566a"), + played_style: (fg: "#88c0d0", modifiers: "Bold"), + dir: "/mnt/giga/music/", + fetch: true, + ), +) diff --git a/.config/starship.toml b/.config/starship.toml new file mode 100644 index 0000000..ab9064a --- /dev/null +++ b/.config/starship.toml @@ -0,0 +1,91 @@ +palette = "noctalia" +add_newline = true +command_timeout = 200 +format = "$username$hostname$character [$directory$git_branch$git_status]($style)" + +[username] +show_always = true +format = "[$user]($style)" +style_user = "#8C00FF" +# style_user = "bold #8C00FF" +[hostname] +disabled = false +ssh_only = false +format = "[@$hostname]($style)" +style = "#8C00FF" + +[character] +format = "$symbol" # Removes the default trailing space after # +error_symbol = "[:~✗](bold red)" +success_symbol = "[:~#](bold #8C00FF)" + +[directory] +style = "#AA40FF" +truncation_length = 2 +truncation_symbol = "///" +repo_root_style = "#AA40FF" +repo_root_format = "[$repo_root]($repo_root_style)[$path]($style)[$read_only]($read_only_style) " + +[git_branch] +symbol = "> " +format = "[$symbol$branch]($style) " +style = "italic #AA40FF" + +[git_status] +format = '[$all_status]($style)' +style = "purple" +ahead = "⇡${count} " +diverged = "⇕⇡${ahead_count}⇣${behind_count} " +behind = "⇣${count} " +conflicted = " " +up_to_date = " " +untracked = "? " +modified = " " +stashed = "" +staged = "" +renamed = "" +deleted = "" + +# >>> NOCTALIA STARSHIP PALETTE >>> +# Noctalia Starship Palette +# Generated by Noctalia - do not edit manually + +[palettes.noctalia] +# Standard colors +blue = "#54604a" +red = "#ba1a1a" +green = "#645c3f" +yellow = "#635e50" +cyan = "#797263" +magenta = "#7e7252" +white = "#1d1b19" +black = "#e9e2d4" + +# Extended palette (Catppuccin-compatible names) +rosewater = "#635e50" +flamingo = "#ba1a1a" +pink = "#7e7252" +mauve = "#7e7252" +maroon = "#ba1a1a" +peach = "#635e50" +teal = "#797263" +sky = "#797263" +sapphire = "#54604a" +lavender = "#7e7252" + +# Text shades +text = "#1d1b19" +subtext1 = "#1d1b19" +subtext0 = "#7b776c" + +# Surface shades +overlay2 = "#7b776c" +overlay1 = "#7b776c" +overlay0 = "#e9e2d4" +surface2 = "#e9e2d4" +surface1 = "#e9e2d4" +surface0 = "#fef8f4" +base = "#fef8f4" +mantle = "#fef8f4" +crust = "#fef8f4" +# <<< NOCTALIA STARSHIP PALETTE <<< diff --git a/.config/vicinae/settings.json b/.config/vicinae/settings.json new file mode 100644 index 0000000..b9a5a02 --- /dev/null +++ b/.config/vicinae/settings.json @@ -0,0 +1,234 @@ +// This configuration is merged with the default vicinae configuration file, which you can obtain by running the `vicinae config default` command. +// Every item defined in this file takes precedence over the values defined in the default config or any other imported file. +// +// You can make manual edits to this file, however you should keep in mind that this file may be written to by vicinae when a configuration change is made through the GUI. +// When that happens, any custom comments or formatting will be lost. +// +// If you want to maintain a configuration file with your own comments and formatting, you should create a separate file and add it to the 'imports' array. +// +// Learn more about configuration at https://docs.vicinae.com/config + +{ + "$schema": "https://vicinae.com/schemas/config.json", + "encrypt_sensitive_data": true, + "favicon_service": "google", + "font": { + "normal": { + "family": "JetBrains Mono ExtraBold" + } + }, + "theme": { + "light": { + "name": "vicinae-wallust-light" + }, + "dark": { + "name": "vicinae-wallust-dark", + "icon_theme": "Hicolor" + } + }, + "telemetry": { + "system_info": false + }, + "launcher_window": { + "rounding": 1, + "opacity": 1, + "client_side_decorations": { + "shadow_size": 0 + }, + "compact_mode": { + "enabled": true + } + }, + "providers": { + "applications": { + "entrypoints": { + "PEAK": { + "enabled": false + }, + "assistant": { + "enabled": false + }, + "blueman-manager": { + "enabled": false + }, + "btop": { + "enabled": false + }, + "darkman": { + "enabled": false + }, + "foot-server": { + "enabled": false + }, + "footclient": { + "enabled": false + }, + "linguist": { + "enabled": false + }, + "nvidia-settings": { + "enabled": false + }, + "qdbusviewer": { + "enabled": false + }, + "qphotorec": { + "enabled": false + }, + "rmpc": { + "enabled": false + } + } + }, + "clipboard": { + "preferences": { + "monitoring": true + } + }, + "core": { + "entrypoints": { + "about": { + "enabled": false + }, + "documentation": { + "enabled": false + }, + "keybind-settings": { + "enabled": false + }, + "list-extensions": { + "enabled": false + }, + "manage-fallback": { + "enabled": false + }, + "oauth-token-store": { + "enabled": false + }, + "open-config-file": { + "enabled": false + }, + "open-default-config": { + "enabled": false + }, + "prune-memory": { + "enabled": false + }, + "refresh-apps": { + "enabled": false + }, + "reload-scripts": { + "enabled": false + }, + "report-bug": { + "enabled": false + }, + "search-builtin-icons": { + "enabled": false + }, + "search-emojis": { + "enabled": true + }, + "settings": { + "enabled": false + }, + "show-logs": { + "enabled": false + }, + "sponsor": { + "enabled": false + }, + "store": { + "enabled": true + } + } + }, + "font": { + "enabled": false + }, + "manage-shortcuts": { + "enabled": false + }, + "power": { + "enabled": true, + "entrypoints": { + "hibernate": { + "enabled": false + }, + "lock": { + "enabled": false + }, + "logout": { + "enabled": false + }, + "power-off": { + "enabled": true + }, + "reboot": { + "enabled": true + }, + "sleep": { + "enabled": false + }, + "soft-reboot": { + "enabled": false + }, + "suspend": { + "enabled": false + } + } + }, + "snippets": { + "enabled": false + }, + "system": { + "enabled": false, + "entrypoints": { + "run": { + "enabled": false + }, + "toggle-mute": { + "enabled": false + }, + "volume-0": { + "enabled": false + }, + "volume-100": { + "enabled": false + }, + "volume-25": { + "enabled": false + }, + "volume-50": { + "enabled": false + }, + "volume-75": { + "enabled": false + }, + "volume-down": { + "enabled": false + }, + "volume-up": { + "enabled": false + } + } + }, + "wm": { + "enabled": false, + "entrypoints": { + "switch-windows": { + "enabled": false + }, + "toggle-floating": { + "enabled": false + }, + "toggle-fullscreen": { + "enabled": false + }, + "toggle-overview": { + "enabled": false + } + } + } + } +} \ No newline at end of file diff --git a/.config/wallust/templates/dbg.ini b/.config/wallust/templates/dbg.ini new file mode 100644 index 0000000..edc18bb --- /dev/null +++ b/.config/wallust/templates/dbg.ini @@ -0,0 +1,4 @@ +plain={{background}} +strip={{background.strip}} +hex={{background.hex}} +rgb={{background.rgb}} diff --git a/.config/wallust/templates/foot-colors-custom.ini b/.config/wallust/templates/foot-colors-custom.ini new file mode 100644 index 0000000..5fc7983 --- /dev/null +++ b/.config/wallust/templates/foot-colors-custom.ini @@ -0,0 +1,20 @@ +# wallust foot template — foot expects colors without '#' +[colors] +background={{background}} +foreground={{foreground}} +regular0={{color0}} +regular1={{color1}} +regular2={{color2}} +regular3={{color3}} +regular4={{color4}} +regular5={{color5}} +regular6={{color6}} +regular7={{color7}} +bright0={{color8}} +bright1={{color9}} +bright2={{color10}} +bright3={{color11}} +bright4={{color12}} +bright5={{color13}} +bright6={{color14}} +bright7={{color15}} diff --git a/.config/wallust/templates/nvim.lua b/.config/wallust/templates/nvim.lua new file mode 100644 index 0000000..be60dd7 --- /dev/null +++ b/.config/wallust/templates/nvim.lua @@ -0,0 +1,306 @@ +-- Generated by wallust from your system color scheme. Do not edit by hand. +-- Source of truth: wallust/.config/wallust/templates/nvim.lua +local bg = "{{background}}" +local fg = "{{foreground}}" +local cursor = "{{cursor}}" +local c = { + "{{color0}}", "{{color1}}", "{{color2}}", "{{color3}}", + "{{color4}}", "{{color5}}", "{{color6}}", "{{color7}}", + "{{color8}}", "{{color9}}", "{{color10}}", "{{color11}}", + "{{color12}}", "{{color13}}", "{{color14}}", "{{color15}}", +} + +-- Pick light/dark from the background luminance so plugins (diff, signs, …) behave. +local function lum(hex) + hex = hex:gsub("#", "") + local r = tonumber(hex:sub(1, 2), 16) / 255 + local g = tonumber(hex:sub(3, 4), 16) / 255 + local b = tonumber(hex:sub(5, 6), 16) / 255 + return 0.2126 * r + 0.7152 * g + 0.0722 * b +end + +vim.opt.background = lum(bg) < 0.5 and "dark" or "light" +vim.g.colors_name = "wallust" + +local set = function(name, opts) + vim.api.nvim_set_hl(0, name, opts) +end + +-- semantic aliases for the 16-color palette +local black, red, green, yellow, blue, magenta, cyan, white = + c[1], c[2], c[3], c[4], c[5], c[6], c[7], c[8] +local brblack, brred, brgreen, bryellow, brblue, brmagenta, brcyan, brwhite = + c[9], c[10], c[11], c[12], c[13], c[14], c[15], c[16] + +local panel = c[1] -- floating / panel background (near bg) +local sel = brblack -- selection / visual background +local muted = brblack -- dimmed / secondary text + +-- ── Editor ────────────────────────────────────────────────────────────── +set("Normal", { fg = fg, bg = bg }) +set("NormalFloat", { fg = fg, bg = panel }) +set("NormalNC", { fg = fg, bg = bg }) +set("ColorColumn", { bg = panel }) +set("Conceal", { fg = muted }) +set("Cursor", { fg = bg, bg = cursor }) +set("CursorIM", { fg = bg, bg = cursor }) +set("CursorLine", { bg = panel }) +set("CursorColumn", { bg = panel }) +set("CursorLineNr", { fg = fg, bg = panel }) +set("LineNr", { fg = muted }) +set("SignColumn", { fg = muted, bg = bg }) +set("WinSeparator", { fg = muted }) +set("VertSplit", { fg = muted }) +set("Directory", { fg = blue }) +set("DiffAdd", { fg = green, bg = bg }) +set("DiffChange", { fg = yellow, bg = bg }) +set("DiffDelete", { fg = red, bg = bg }) +set("DiffText", { fg = yellow, bg = panel }) +set("ErrorMsg", { fg = red, bold = true }) +set("WarningMsg", { fg = yellow, bold = true }) +set("ModeMsg", { fg = fg }) +set("MsgArea", { fg = fg }) +set("MoreMsg", { fg = green }) +set("Question", { fg = green }) +set("NonText", { fg = muted }) +set("SpecialKey", { fg = muted }) +set("Whitespace", { fg = panel }) +set("Title", { fg = yellow, bold = true }) +set("Folded", { fg = muted, bg = panel }) +set("FoldColumn", { fg = muted, bg = bg }) +set("MatchParen", { fg = yellow, bg = panel, bold = true }) +set("Search", { fg = bg, bg = yellow }) +set("IncSearch", { fg = bg, bg = magenta }) +set("CurSearch", { fg = bg, bg = magenta }) +set("QuickFixLine", { fg = bg, bg = blue }) +set("Visual", { bg = sel }) +set("VisualNOS", { bg = sel }) +set("StatusLine", { fg = fg, bg = panel }) +set("StatusLineNC", { fg = muted, bg = bg }) +set("TabLine", { fg = muted, bg = bg }) +set("TabLineFill", { fg = muted, bg = bg }) +set("TabLineSel", { fg = bg, bg = blue }) +set("WildMenu", { fg = bg, bg = blue }) +set("Winbar", { fg = fg, bg = panel }) +set("WinbarNC", { fg = muted, bg = bg }) +set("Pmenu", { fg = fg, bg = panel }) +set("PmenuSel", { fg = bg, bg = blue }) +set("PmenuSbar", { bg = panel }) +set("PmenuThumb", { bg = muted }) +set("FloatBorder", { fg = muted }) +set("FloatTitle", { fg = yellow, bg = panel }) +set("FloatFooter", { fg = muted, bg = panel }) +set("SpellBad", { undercurl = true, sp = red }) +set("SpellCap", { undercurl = true, sp = yellow }) +set("SpellLocal", { undercurl = true, sp = cyan }) +set("SpellRare", { undercurl = true, sp = magenta }) + +-- ── Legacy syntax groups ──────────────────────────────────────────────── +set("Comment", { fg = muted, italic = true }) +set("Constant", { fg = cyan }) +set("String", { fg = green }) +set("Character", { fg = green }) +set("Number", { fg = red }) +set("Boolean", { fg = red }) +set("Float", { fg = red }) +set("Identifier", { fg = brcyan }) +set("Function", { fg = blue }) +set("Statement", { fg = magenta }) +set("Conditional", { fg = magenta }) +set("Repeat", { fg = magenta }) +set("Label", { fg = magenta }) +set("Operator", { fg = fg }) +set("Keyword", { fg = magenta }) +set("Exception", { fg = magenta }) +set("PreProc", { fg = brblue }) +set("Include", { fg = brblue }) +set("Define", { fg = brblue }) +set("Macro", { fg = brblue }) +set("PreCondit", { fg = brblue }) +set("Type", { fg = yellow }) +set("StorageClass", { fg = yellow }) +set("Structure", { fg = yellow }) +set("Typedef", { fg = yellow }) +set("Special", { fg = brgreen }) +set("SpecialChar", { fg = brgreen }) +set("Tag", { fg = red }) +set("Delimiter", { fg = muted }) +set("SpecialComment", { fg = muted, italic = true }) +set("Debug", { fg = red }) +set("Underlined", { fg = blue, underline = true }) +set("Ignore", { fg = muted }) +set("Error", { fg = red, bold = true }) +set("Todo", { fg = bg, bg = yellow, bold = true }) + +-- ── Treesitter ────────────────────────────────────────────────────────── +set("@comment", { fg = muted, italic = true }) +set("@comment.lua", { fg = muted, italic = true }) +set("@error", { fg = red, undercurl = true, sp = red }) +set("@none", {}) +set("@preproc", { fg = brblue }) +set("@define", { fg = brblue }) +set("@operator", { fg = fg }) + +set("@string", { fg = green }) +set("@string.escape", { fg = red }) +set("@string.special", { fg = brgreen }) +set("@character", { fg = green }) +set("@character.special", { fg = brgreen }) + +set("@number", { fg = red }) +set("@float", { fg = red }) +set("@boolean", { fg = red }) +set("@constant", { fg = cyan }) +set("@constant.builtin", { fg = brcyan }) +set("@constant.macro", { fg = brblue }) + +set("@variable", { fg = fg }) +set("@variable.builtin", { fg = red }) +set("@variable.parameter", { fg = fg }) +set("@variable.parameter.builtin", { fg = fg }) +set("@field", { fg = fg }) +set("@property", { fg = fg }) + +set("@function", { fg = blue }) +set("@function.builtin", { fg = blue }) +set("@function.macro", { fg = brblue }) +set("@method", { fg = blue }) +set("@constructor", { fg = yellow }) + +set("@parameter", { fg = fg }) +set("@keyword", { fg = magenta }) +set("@keyword.function", { fg = magenta }) +set("@keyword.operator", { fg = magenta }) +set("@keyword.modifier", { fg = magenta }) +set("@storageclass", { fg = yellow }) +set("@structure", { fg = yellow }) +set("@namespace", { fg = blue }) + +set("@type", { fg = yellow }) +set("@type.builtin", { fg = bryellow }) +set("@type.definition", { fg = yellow }) + +set("@punctuation.delimiter", { fg = muted }) +set("@punctuation.bracket", { fg = fg }) +set("@punctuation.special", { fg = magenta }) + +set("@text", { fg = fg }) +set("@text.strong", { bold = true }) +set("@text.emphasis", { italic = true }) +set("@text.underline", { underline = true }) +set("@text.strike", { strikethrough = true }) +set("@text.title", { fg = blue, bold = true }) +set("@text.title.1", { fg = blue, bold = true }) +set("@text.title.2", { fg = cyan, bold = true }) +set("@text.title.3", { fg = green, bold = true }) +set("@text.title.4", { fg = yellow, bold = true }) +set("@text.title.5", { fg = magenta, bold = true }) +set("@text.title.6", { fg = red, bold = true }) +set("@text.literal", { fg = green }) +set("@text.uri", { fg = cyan, underline = true }) +set("@text.todo", { fg = bg, bg = yellow, bold = true }) +set("@text.note", { fg = bg, bg = blue, bold = true }) +set("@text.warning", { fg = bg, bg = yellow, bold = true }) +set("@text.danger", { fg = bg, bg = red, bold = true }) + +set("@tag", { fg = red }) +set("@tag.attribute", { fg = yellow }) +set("@tag.delimiter", { fg = muted }) + +set("@markup.heading", { fg = blue, bold = true }) +set("@markup.strong", { bold = true }) +set("@markup.italic", { italic = true }) +set("@markup.link", { fg = cyan, underline = true }) +set("@markup.link.url", { fg = cyan, underline = true }) +set("@markup.raw", { fg = green }) +set("@markup.list", { fg = magenta }) +set("@markup.quote", { fg = muted, italic = true }) + +set("@diff.add", { fg = green }) +set("@diff.delete", { fg = red }) +set("@diff.change", { fg = yellow }) + +set("@conceal", { fg = muted }) + +-- ── LSP / Diagnostics ─────────────────────────────────────────────────── +set("DiagnosticError", { fg = red }) +set("DiagnosticWarn", { fg = yellow }) +set("DiagnosticInfo", { fg = blue }) +set("DiagnosticHint", { fg = cyan }) +set("DiagnosticOk", { fg = green }) +set("DiagnosticVirtualTextError", { fg = red }) +set("DiagnosticVirtualTextWarn", { fg = yellow }) +set("DiagnosticVirtualTextInfo", { fg = blue }) +set("DiagnosticVirtualTextHint", { fg = cyan }) +set("DiagnosticUnderlineError", { undercurl = true, sp = red }) +set("DiagnosticUnderlineWarn", { undercurl = true, sp = yellow }) +set("DiagnosticUnderlineInfo", { undercurl = true, sp = blue }) +set("DiagnosticUnderlineHint", { undercurl = true, sp = cyan }) +set("DiagnosticSignError", { fg = red }) +set("DiagnosticSignWarn", { fg = yellow }) +set("DiagnosticSignInfo", { fg = blue }) +set("DiagnosticSignHint", { fg = cyan }) +set("DiagnosticFloatingError", { fg = red }) +set("DiagnosticFloatingWarn", { fg = yellow }) +set("DiagnosticFloatingInfo", { fg = blue }) +set("DiagnosticFloatingHint", { fg = cyan }) +set("DiagnosticUnnecessary", { undercurl = true, sp = muted }) + +set("LspReferenceText", { bg = sel }) +set("LspReferenceRead", { bg = sel }) +set("LspReferenceWrite", { bg = sel }) +set("LspCodeLens", { fg = muted }) +set("LspCodeLensSeparator", { fg = muted }) +set("LspSignatureActiveParameter", { fg = yellow, bold = true }) +set("LspInlayHint", { fg = muted, italic = true }) + +-- ── Git / signs ───────────────────────────────────────────────────────── +set("GitSignsAdd", { fg = green }) +set("GitSignsChange", { fg = yellow }) +set("GitSignsDelete", { fg = red }) +set("GitSignsAddLn", { fg = green }) +set("GitSignsChangeLn", { fg = yellow }) +set("GitSignsDeleteLn", { fg = red }) +set("GitSignsCurrentLineBlame", { fg = muted }) +set("SignAdd", { fg = green }) +set("SignChange", { fg = yellow }) +set("SignDelete", { fg = red }) + +-- ── Misc plugin UI ────────────────────────────────────────────────────── +set("TelescopeNormal", { fg = fg, bg = panel }) +set("TelescopeBorder", { fg = muted }) +set("TelescopePromptBorder", { fg = muted }) +set("TelescopeResultsBorder", { fg = muted }) +set("TelescopeTitle", { fg = yellow, bold = true }) +set("TelescopeSelection", { fg = bg, bg = blue }) +set("TelescopeMatching", { fg = yellow, bold = true }) + +set("WhichKey", { fg = fg }) +set("WhichKeyGroup", { fg = blue }) +set("WhichKeyDesc", { fg = fg }) +set("WhichKeySeparator", { fg = muted }) +set("WhichKeyFloat", { bg = panel }) +set("WhichKeyValue", { fg = muted }) + +set("CmpItemAbbr", { fg = fg }) +set("CmpItemAbbrDeprecated", { fg = muted, strikethrough = true }) +set("CmpItemAbbrMatch", { fg = yellow, bold = true }) +set("CmpItemKind", { fg = blue }) +set("CmpItemMenu", { fg = muted }) + +set("NvimTreeNormal", { fg = fg, bg = bg }) +set("NvimTreeIndentMarker", { fg = panel }) +set("NvimTreeFolderIcon", { fg = blue }) +set("NvimTreeOpenedFile", { fg = blue }) +set("NvimTreeGitDirty", { fg = yellow }) +set("NvimTreeGitNew", { fg = green }) +set("NvimTreeGitDeleted", { fg = red }) + +set("BufferLineFill", { bg = bg }) +set("BufferLineBackground", { fg = muted }) +set("BufferLineBufferSelected", { fg = fg, bold = true }) +set("BufferLineIndicatorSelected", { fg = blue }) +set("BufferLineTabSelected", { fg = blue, bold = true }) +set("BufferLineModified", { fg = yellow }) + +set("NeoTreeNormal", { fg = fg, bg = bg }) diff --git a/.config/wallust/templates/shell-colors.sh b/.config/wallust/templates/shell-colors.sh new file mode 100644 index 0000000..3cfb24d --- /dev/null +++ b/.config/wallust/templates/shell-colors.sh @@ -0,0 +1,20 @@ +# CUSTOM wallust shell template +color0={{color0}} +color1={{color1}} +color2={{color2}} +color3={{color3}} +color4={{color4}} +color5={{color5}} +color6={{color6}} +color7={{color7}} +color8={{color8}} +color9={{color9}} +color10={{color10}} +color11={{color11}} +color12={{color12}} +color13={{color13}} +color14={{color14}} +color15={{color15}} +background={{background}} +foreground={{foreground}} +cursor={{cursor}} diff --git a/.config/wallust/templates/vicinae-dark.toml b/.config/wallust/templates/vicinae-dark.toml new file mode 100644 index 0000000..5c2c9b3 --- /dev/null +++ b/.config/wallust/templates/vicinae-dark.toml @@ -0,0 +1,78 @@ +[meta] +name = "vicinae-wallust-dark" +description = "Wallust-generated dark theme for Vicinae" +variant = "dark" +inherits = "vicinae-dark" + +[colors.core] +accent = "{{color4}}" +accent_foreground = "{{background}}" +background = "{{background}}" +foreground = "{{foreground}}" +secondary_background = "{{color0}}" +border = "{{color8}}" + +[colors.main_window] +border = "{{color8}}" +footer = { background = "colors.core.secondary_background" } + +[colors.settings_window] +border = "{{color8}}" + +[colors.accents] +blue = "{{color4}}" +green = "{{color2}}" +magenta = "{{color5}}" +orange = "{{color1}}" +red = "{{color1}}" +yellow = "{{color3}}" +cyan = "{{color6}}" +purple = "{{color5}}" + +[colors.shortcut] +border = "colors.core.border" + +[colors.text] +default = "colors.core.foreground" +muted = "{{color7}}" +danger = "{{color1}}" +success = "{{color2}}" +placeholder = "{{color8}}" +selection = { background = "{{color4}}", foreground = "{{background}}" } + +[colors.text.links] +default = "{{color3}}" +visited = "{{color5}}" + +[colors.input] +border = "{{color8}}" +border_focus = "{{color4}}" +border_error = "{{color1}}" + +[colors.button.primary] +background = "{{color0}}" +foreground = "{{foreground}}" +hover = { background = "{{color8}}" } +focus = { outline = "colors.core.accent" } + +[colors.list.item.hover] +foreground = "{{foreground}}" +secondary_foreground = "{{color7}}" + +[colors.list.item.selection] +background = "{{color0}}" +foreground = "{{foreground}}" +secondary_background = "{{color0}}" +secondary_foreground = "{{color7}}" + +[colors.grid.item] +background = "{{color0}}" +hover = { outline = "{{foreground}}" } +selection = { outline = "{{foreground}}" } + +[colors.scrollbars] +background = "{{color8}}" + +[colors.loading] +bar = "{{color4}}" +spinner = "{{foreground}}" diff --git a/.config/wallust/templates/vicinae-light.toml b/.config/wallust/templates/vicinae-light.toml new file mode 100644 index 0000000..92516f8 --- /dev/null +++ b/.config/wallust/templates/vicinae-light.toml @@ -0,0 +1,78 @@ +[meta] +name = "vicinae-wallust-light" +description = "Wallust-generated light theme for Vicinae" +variant = "light" +inherits = "vicinae-light" + +[colors.core] +accent = "{{color4}}" +accent_foreground = "{{foreground}}" +background = "{{foreground}}" +foreground = "{{background}}" +secondary_background = "{{color7}}" +border = "{{color8}}" + +[colors.main_window] +border = "{{color8}}" +footer = { background = "colors.core.secondary_background" } + +[colors.settings_window] +border = "{{color8}}" + +[colors.accents] +blue = "{{color4}}" +green = "{{color2}}" +magenta = "{{color5}}" +orange = "{{color1}}" +red = "{{color1}}" +yellow = "{{color3}}" +cyan = "{{color6}}" +purple = "{{color5}}" + +[colors.shortcut] +border = "colors.core.border" + +[colors.text] +default = "colors.core.foreground" +muted = "{{color8}}" +danger = "{{color1}}" +success = "{{color2}}" +placeholder = "{{color7}}" +selection = { background = "{{color4}}", foreground = "{{foreground}}" } + +[colors.text.links] +default = "{{color3}}" +visited = "{{color5}}" + +[colors.input] +border = "{{color8}}" +border_focus = "{{color4}}" +border_error = "{{color1}}" + +[colors.button.primary] +background = "{{color7}}" +foreground = "{{background}}" +hover = { background = "{{color8}}" } +focus = { outline = "colors.core.accent" } + +[colors.list.item.hover] +foreground = "{{background}}" +secondary_foreground = "{{color8}}" + +[colors.list.item.selection] +background = "{{color7}}" +foreground = "{{background}}" +secondary_background = "{{color7}}" +secondary_foreground = "{{color8}}" + +[colors.grid.item] +background = "{{color7}}" +hover = { outline = "{{background}}" } +selection = { outline = "{{background}}" } + +[colors.scrollbars] +background = "{{color8}}" + +[colors.loading] +bar = "{{color4}}" +spinner = "{{background}}" diff --git a/.config/wallust/wallust.toml b/.config/wallust/wallust.toml new file mode 100644 index 0000000..d1e8925 --- /dev/null +++ b/.config/wallust/wallust.toml @@ -0,0 +1,11 @@ +backend = "fastresize" + +[templates] +nvim = { template = "nvim.lua", target = "~/.cache/wallust/colors/wallust.lua" } +foottheme = { template = "foot-colors-custom.ini", target = "~/.cache/wallust/foot-theme.ini" } +vicinae_dark = { template = "vicinae-dark.toml", target = "~/.cache/wallust/vicinae-dark.toml" } +vicinae_light = { template = "vicinae-light.toml", target = "~/.cache/wallust/vicinae-light.toml" } + +[hooks] +strip_foot_hash = "sed -i '/^[^#]/s/#//g' ~/.cache/wallust/foot-theme.ini" +symlink_vicinae = "mkdir -p ~/.local/share/vicinae/themes && ln -sf ~/.cache/wallust/vicinae-dark.toml ~/.local/share/vicinae/themes/vicinae-wallust-dark.toml && ln -sf ~/.cache/wallust/vicinae-light.toml ~/.local/share/vicinae/themes/vicinae-wallust-light.toml" diff --git a/.config/waybar/config.jsonc b/.config/waybar/config.jsonc new file mode 100644 index 0000000..c20a95c --- /dev/null +++ b/.config/waybar/config.jsonc @@ -0,0 +1,112 @@ +{ + "exclusive": true, + "reload_style_on_change": true, + "position": "top", + "margin-top": 0, + "spacing": 0, + "height": 0, + "margin-bottom": 0, + "modules-left": [ + "niri/workspaces", + "custom/separator", + "tray", + "custom/separator2", + "custom/separator5", + "custom/media", + "custom/separator6" + ], + "modules-center": ["custom/separator", "custom/clock", "custom/separator2"], + "modules-right": [ + "custom/separator", + "custom/separator3", + "custom/kbd", + "custom/separator3", + "pulseaudio", + "custom/separator3", + "memory", + "custom/separator2" + ], + "niri/workspaces": { + "disable-scroll": true, + "format": "{index}" + }, + "custom/separator": { + "format": "[", + "tooltip": false + }, + "custom/separator2": { + "format": "]", + "tooltip": false + }, + "custom/separator3": { + "format": "󰿟", + "tooltip": false + }, + "custom/separator5": { + "exec": "sh -c 'if pgrep -x cliamp >/dev/null || playerctl status 2>/dev/null | grep -qE \"Playing|Paused\"; then echo \"{\\\"text\\\":\\\"[\\\",\\\"class\\\":\\\"show\\\"}\"; else echo \"{\\\"text\\\":\\\"\\\",\\\"class\\\":\\\"hide\\\"}\"; fi'", + "return-type": "json", + "interval": 2, + "format": "{}" + }, + "custom/separator6": { + "exec": "sh -c 'if pgrep -x cliamp >/dev/null || playerctl status 2>/dev/null | grep -qE \"Playing|Paused\"; then echo \"{\\\"text\\\":\\\"]\\\",\\\"class\\\":\\\"show\\\"}\"; else echo \"{\\\"text\\\":\\\"\\\",\\\"class\\\":\\\"hide\\\"}\"; fi'", + "return-type": "json", + "interval": 2, + "format": "{}" + }, + + "memory": { + "interval": 2, + "format": "RAM {percentage:02}%", + "on-click": "foot btop", + "states": { + "warning": 50, + "critical": 80 + } + }, + "custom/kbd": { + "exec": "/home/seraphim/dotfiles-gentoo/waybar/.config/waybar/kbd-layout.sh", + "tooltip": false + }, + "custom/clock": { + "exec": "date +'%H:%M %p - %A, %b %d' | tr '[:upper:]' '[:lower:]'", + "interval": 1, + "tooltip": false + }, + "pulseaudio": { + "justify": "center", + "format": "vol {volume}%", + "on-click": "foot wiremix", + "on-click-right": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle", + "tooltip-format": "Playing at {volume}%", + "scroll-step": 5, + "format-muted": "vol muted", + "format-icons": { + "headphone": "", + "default": ["", "", ""] + }, + "states": { + "warning": 50, + "critical": 10 + } + }, + "custom/media": { + "format": "{}", + "max-length": 30, + "interval": 2, + "exec": "playerctl metadata --format '{{ artist }} - {{ title }}' 2>/dev/null || echo \"\"", + "on-click": "playerctl play-pause" + }, +"tray": { + "icon-size": 14, + "spacing": 3 + }, + "custom/analyze-theme": { + "exec": "node /home/seraphim/dotfiles-gentoo/waybar/.config/waybar/custom/analyze-theme.js", + "interval": 5, + "tooltip": true, + "format": "{}", + "return-type": "json", + "on-click": "sh -c '~/.config/niri/apply-colors.sh \"$(find ~/Pictures/wallpapers -type f | shuf -n 1)\"'" + } +} diff --git a/.config/waybar/kbd-layout.sh b/.config/waybar/kbd-layout.sh new file mode 100755 index 0000000..e81462a --- /dev/null +++ b/.config/waybar/kbd-layout.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Kill any leftover instances so reloads don't pile up. +for p in $(pgrep -f "kbd-layout.sh"); do + [ "$p" != "$$" ] && kill "$p" 2>/dev/null +done + +STATE="${XDG_RUNTIME_DIR:-/tmp}/waybar-kbd.state" +rm -f "$STATE" + +# Index of the Russian layout (from configured layouts), so we don't hardcode order. +RUS_IDX=$(niri msg keyboard-layouts 2>/dev/null | grep -i russian | grep -oE '^[ *]*[0-9]+' | tr -d ' *' | head -1) + +kbd_query() { + niri msg keyboard-layouts 2>/dev/null | grep -Fm1 '*' | grep -qi russian && echo Ru || echo En +} + +# Parse a "Keyboard layout switched: N" or "...current_idx: N" event line. +kbd_event() { + idx=$(printf '%s' "$1" | grep -oE '[0-9]+' | tail -1) + [ "$idx" = "$RUS_IDX" ] && echo Ru || echo En +} + +emit() { + v="$1"; src="$2" + echo "$v" + echo "$v" > "$STATE" +} + +# Instant path: react to niri's layout-change events. +niri msg event-stream 2>/dev/null | { + while true; do + if IFS= read -r -t 0.2 line; then + case "$line" in + *"Keyboard layout switched"*|*"Keyboard layouts changed"*) emit "$(kbd_event "$line")" event ;; + esac + else + v=$(kbd_query) + [ "$(cat "$STATE" 2>/dev/null)" != "$v" ] && emit "$v" poll + fi + done +} diff --git a/.config/waybar/style.css b/.config/waybar/style.css new file mode 100644 index 0000000..cf8dbee --- /dev/null +++ b/.config/waybar/style.css @@ -0,0 +1,166 @@ +@import "/home/seraphim/dotfiles-gentoo/waybar/.config/waybar/theme.css"; +@define-color bg @background; +@define-color fg @foreground; + +* { + border: none; + padding: 0px; + font-family: "JetBrains Mono Nerd Font"; + transition: background-color .3s ease-out; + font-weight: bold; + font-size: 12px; +} + +window#waybar { + background-color: transparent; +} + +#waybar > box { + border-radius: 0px; + border-bottom: 1.5px solid alpha(@foreground, 0.12); + margin: 0px 0px 2px 0px; + background-color: @background; + box-shadow: 0 1px 2px rgba(0, 0, 0, 1); + min-height: 25px; + transition-property: background-color; + transition-duration: .5s; +} + +.modules-left { + margin-left: 4px; +} + +.modules-right { + margin-right: 4px; +} + +#workspaces { + margin: 0px 0px; + transition: 0.1s ease-in-out; + padding: 0px 0px; +} + +#workspaces button { + all: initial; + padding: 0px 4px; + margin: 4px 2px; + min-width: 10px; + color: @foreground; + opacity: 1; + font-weight: 900; +} + +#workspaces button.active { + color: @background; + background-color: @foreground; + padding: 0px 4px; + margin: 4px 2px; + opacity: 1.0; +} + +#workspaces button.empty:hover, +#workspaces button:hover { + background: transparent; + color: alpha(@foreground, 1); + transition: all 150ms ease; + opacity: 0.75; +} + +#workspaces button.empty { + opacity: 0.4; + padding: 0px 4px; + margin: 4px 2px; + color: alpha(@foreground, 0.45); +} + +#workspaces button.empty.active { + opacity: 1; + background-color: @foreground; + color: @background; +} + +#memory, +#custom-media, +#custom-kbd, +#tray, +#cpu, +#custom-clock, +#bluetooth, +#pulseaudio { + min-width: 12px; + padding: 0 4px; + margin: 1px 3px 1px 3px; + opacity: 1; + color: @foreground; +} + +#tray { + opacity: 1; + padding-top: 2px; +} + +#custom-separator6, +#custom-separator5, +#custom-separator4, +#custom-separator3, +#custom-separator2, +#custom-separator { + opacity: 0.2; + padding-top: 2px; + padding-left: 2px; + padding-right: 2px; + font-size: 14px; +} + +tooltip { + padding: 2px; +} + +.hidden { + opacity: 0; +} + +tooltip { + padding: 4px; + background: @background; + font-size: 10px; + border: 1.5px solid alpha(@foreground, 0.6); + border-radius: 8px; +} + +tooltip label { + color: alpha(@foreground, 0.65); + font-weight: normal; +} + +#custom-media { + opacity: 1; + color: @foreground; + animation: repeat; + animation-name: blink; + animation-duration: 3s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; +} + +@keyframes blink { + to { + color: #999999; + } +} + +#pulseaudio.warning, +#memory.warning, +#cpu.warning { + color: alpha(@foreground, 0.65); + background-color: @background; +} + +#pulseaudio.critical, +#memory.critical, +#cpu.critical { + color: @foreground; + background-color: @background; + font-weight: 900; +} diff --git a/.config/waybar/theme-dark.css b/.config/waybar/theme-dark.css new file mode 100644 index 0000000..d88a91d --- /dev/null +++ b/.config/waybar/theme-dark.css @@ -0,0 +1,2 @@ +@define-color background #111111; +@define-color foreground #fafafa; diff --git a/.config/waybar/theme-light.css b/.config/waybar/theme-light.css new file mode 100644 index 0000000..b757ab6 --- /dev/null +++ b/.config/waybar/theme-light.css @@ -0,0 +1,2 @@ +@define-color background #fafafa; +@define-color foreground #111111; diff --git a/.config/waybar/theme.css b/.config/waybar/theme.css new file mode 120000 index 0000000..aea3c67 --- /dev/null +++ b/.config/waybar/theme.css @@ -0,0 +1 @@ +theme-dark.css \ No newline at end of file diff --git a/.config/xdg-desktop-portal/portals.conf b/.config/xdg-desktop-portal/portals.conf new file mode 100644 index 0000000..c651895 --- /dev/null +++ b/.config/xdg-desktop-portal/portals.conf @@ -0,0 +1,5 @@ +[preferred] +default=gtk +org.freedesktop.impl.portal.Settings=darkman +org.freedesktop.impl.portal.Screencast=wlr +org.freedesktop.impl.portal.Screenshot=wlr diff --git a/.config/yazi/keymap.toml b/.config/yazi/keymap.toml new file mode 100644 index 0000000..f275171 --- /dev/null +++ b/.config/yazi/keymap.toml @@ -0,0 +1,9 @@ +[[mgr.prepend_keymap]] +on = [ "" ] +run = 'shell -- dragon -i -T %s' +desc = "Drag and drop (dragon)" + +[[mgr.prepend_keymap]] +on = "y" +run = [ 'shell -- for path in %s; do echo "file://$path"; done | wl-copy -t text/uri-list', "yank" ] +desc = "Copy file URIs to clipboard" diff --git a/.config/yazi/yazi.toml b/.config/yazi/yazi.toml new file mode 100644 index 0000000..7f1fde1 --- /dev/null +++ b/.config/yazi/yazi.toml @@ -0,0 +1,2 @@ +[mgr] +show_hidden = true -- cgit v1.2.3