Changed dot-config to .config

This commit is contained in:
agryphus 2024-02-27 15:46:37 -05:00
parent 9ea93f8144
commit 0ab0f24015
118 changed files with 29 additions and 980 deletions

74
misc/.config/X11/xinitrc Normal file
View file

@ -0,0 +1,74 @@
#!/bin/sh
userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
sysresources=/etc/X11/xinit/.Xresources
sysmodmap=/etc/X11/xinit/.Xmodmap
# merge in defaults and keymaps
if [ -f $sysresources ]; then
xrdb -merge $sysresources
fi
if [ -f $sysmodmap ]; then
xmodmap $sysmodmap
fi
if [ -f "$userresources" ]; then
xrdb -merge "$userresources"
fi
if [ -f "$usermodmap" ]; then
xmodmap "$usermodmap"
fi
# start some nice programs
if [ -d /etc/X11/xinit/xinitrc.d ] ; then
for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do
[ -x "$f" ] && . "$f"
done
unset f
fi
#NixOS does not setup the user's D-Bus Daemon, so doing it explicitly here
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then
eval $(dbus-launch --exit-with-session --sh-syntax)
fi
syustemctl --user import-environment DISPLAY XAUTHORITY
if command -v dbus-update-activation-environment >/dev/null 2>&1; then
dbus-update-activation-environment DISPLAY XAUTHORITY
fi
# Setting any of these parameters causes issues when trying to use xrandr
# while on offload mode. Specifically, the prover named NVIDIA-G0 sets up
# the system to expect reverse-sync mode. Using --auto also does the same
# for some reason. Basically any of these commands are not needed.
# xrandr --setprovideroutputsource modesetting NVIDIA-0
# xrandr --setprovideroutputsource 0 1
# xrandr --auto
# autorandr --change
# Speed when holding down key
xset r rate 300 50
xserverauthfile=$XAUTHORITY # Stop the accumulation of ~/.serverauth.### files
# Need to source environment before starting fcitx5 so that it can
# read the *_IM_MODULE and XMODIFIER variables.
source ~/.config/zsh/.zshenv
autorandr -c -d "default"
export TERMINAL=/usr/local/bin/st
# Start important daemons
kill $(pidof fcitx5) 2>/dev/null
fcitx5 -d
picom -b
sxhkd &
killall emacs 2>/dev/null
emacs -daemon
~/.config/autorandr/postswitch
dwmblocks &
exec dwm

View file

@ -0,0 +1,8 @@
#!/usr/bin/env sh
feh --bg-scale --no-fehbg "$HOME/.config/wallpaper"
# echo "dwm.accent: $(color-picker $WALLPAPER)" > /tmp/dwm_accent
# xrdb -override -merge /tmp/dwm_accent
# rm /tmp/dwm_accent
# kill -HUP $(pidof dwm)

View file

@ -0,0 +1 @@
blue

View file

@ -0,0 +1,6 @@
envs_dirs:
- ${XDG_DATA_HOME}/conda/envs
pkgs_dirs:
- ${XDG_CACHE_HOME}/conda/pkgs
auto_activate_base: false

View file

@ -0,0 +1,4 @@
{
SKIP_HOST_UPDATE: true
}

View file

@ -0,0 +1,24 @@
/* See LICENSE file for copyright and license details. */
/* Default settings; can be overriden by command line. */
static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */
/* -fn option overrides fonts[0]; default X11 font or font set */
static const char *fonts[] = {
"monospace:size=20",
"NotoColorEmoji:size=15",
};
static const char *prompt = NULL; /* -p option; prompt to the left of input field */
static const char *colors[SchemeLast][2] = {
/* fg bg */
[SchemeNorm] = { "#bbbbbb", "#222222" },
[SchemeSel] = { "#eeeeee", "#005577" },
[SchemeOut] = { "#000000", "#00ffff" },
};
/* -l option; if nonzero, dmenu uses vertical list with given number of lines */
static unsigned int lines = 0;
/*
* Characters not considered part of a word while deleting words
* for example: " /?\"&[]"
*/
static const char worddelimiters[] = " ";

View file

@ -0,0 +1,649 @@
#+TITLE: Agryphus' Emacs Config
#+AUTHOR: agryphus
# Unfold all org headings
#+STARTUP: showeverything
# Roughly in order of least to most likely to break / necessary to fix a broken config.
* TABLE OF CONTENTS :toc_3:
- [[#general-keybinds][General Keybinds]]
- [[#quick-find-files][Quick Find Files]]
- [[#elisp-evaluation][Elisp Evaluation]]
- [[#unsetting-bindings-that-step-on-mine][Unsetting Bindings That Step on Mine]]
- [[#better-defaults][Better Defaults]]
- [[#disable-really-quit-emacs-prompt][Disable "Really Quit Emacs" Prompt]]
- [[#relative-line-numbers][Relative Line Numbers]]
- [[#scrolloff][Scrolloff]]
- [[#scratch-buffer-mode][Scratch Buffer Mode]]
- [[#evil][Evil]]
- [[#changing-keybinds][Changing Keybinds]]
- [[#changing-backspace-behavior][Changing backspace behavior]]
- [[#leave-insertvisual-modes-with-c-c][Leave insert/visual modes with C-C]]
- [[#remove-jk-escape-sequence][Remove "jk" escape sequence]]
- [[#clearing-highlight-with-c-l][Clearing highlight with C-L]]
- [[#swap-gkj-and-kj][Swap g[k/j] and k/j]]
- [[#resize-font-in-insert-mode][Resize Font in Insert Mode]]
- [[#visual-tweaks][Visual Tweaks]]
- [[#scale-line-number-size-with-buffer-text][Scale Line Number Size with Buffer Text]]
- [[#block-cursor-not-showing-in-terminal-mode][Block Cursor Not Showing in Terminal Mode]]
- [[#doom-dashboard-spacing][Doom Dashboard Spacing]]
- [[#posframe][Posframe]]
- [[#vertico-posframe][Vertico Posframe]]
- [[#company-posframe][Company Posframe]]
- [[#fonts][Fonts]]
- [[#default][Default]]
- [[#mixed-pitch-mode][Mixed Pitch Mode]]
- [[#coloring][Coloring]]
- [[#themes][Themes]]
- [[#transparency][Transparency]]
- [[#languages][Languages]]
- [[#lspcompletion-config][LSP/Completion Config]]
- [[#company-mode][Company-mode]]
- [[#make-lsp-ui-sideline-suggestions-the-same-size-as-buffer-text][Make lsp-ui sideline suggestions the same size as buffer text]]
- [[#lsp-mode-in-org-src-blocks][LSP mode in org src blocks]]
- [[#org][Org]]
- [[#variable-height-headers][Variable Height Headers]]
- [[#org-modern][Org Modern]]
- [[#special-symbolscharacters][Special symbols/characters]]
- [[#agenda][Agenda]]
- [[#svg-tags][SVG Tags]]
- [[#markdown][Markdown]]
- [[#conceal-markup][Conceal Markup]]
- [[#variable-sized-headers][Variable Sized Headers]]
- [[#list-bullets][List Bullets]]
- [[#mixed-pitch][Mixed Pitch]]
- [[#typst][Typst]]
- [[#shell][Shell]]
- [[#nix][Nix]]
- [[#miscellaneous][Miscellaneous]]
- [[#anki][Anki]]
- [[#face-explorer][Face Explorer]]
* General Keybinds
** Quick Find Files
#+begin_src emacs-lisp
(map! :leader
(:prefix ("=" . "open file")
:desc "Edit doom config.org" "c" #'(lambda () (interactive) (find-file "~/.config/doom/config.org"))
:desc "Edit doom init.el" "i" #'(lambda () (interactive) (find-file "~/.config/doom/init.el"))))
(map! "C-/" #'comment-line)
#+end_src
** Elisp Evaluation
#+begin_src emacs-lisp
(map! :leader
(:prefix ("e". "evaluate")
:desc "Evaluate elisp in buffer" "b" #'eval-buffer
:desc "Evaluate defun" "d" #'eval-defun
:desc "Evaluate elisp expression" "e" #'eval-expression
:desc "Evaluate last sexpression" "l" #'eval-last-sexp
:desc "Evaluate elisp in region" "r" #'eval-region))
#+end_src
** Unsetting Bindings That Step on Mine
#+begin_src emacs-lisp
(after! ccls! (unbind-key "M-a" c-mode-base-map))
;; The C package adds a keybind to (ccls-navigate "D"), which not
;; only steps on my binding, but is not even a provided function.
(map! :after ccls
:map (c-mode-map c++-mode-map)
:n "C-h" nil
:n "C-j" nil
:n "C-k" nil
:n "C-l" nil)
#+end_src
* Better Defaults
** Disable "Really Quit Emacs" Prompt
#+begin_src emacs-lisp
(setq confirm-kill-emacs nil)
#+end_src
** Relative Line Numbers
#+begin_src emacs-lisp
(setq display-line-numbers-type 'relative)
#+end_src
** Scrolloff
#+begin_src emacs-lisp
(setq ag/scroll-margin 8) ;; Custom var
(setq scroll-margin ag/scroll-margin)
;; Exceptions for modes that need 0 scroll margin
(add-hook 'eat-mode-hook (lambda () (setq-local scroll-margin 0)))
(add-hook 'eat-exit-hook (lambda () (setq-local scroll-margin ag/scroll-margin)))
(add-hook '+doom-dashboard-mode-hook (lambda () (setq-local scroll-margin 0)))
#+end_src
** Scratch Buffer Mode
Scratch buffer is, by default, in interactive lisp mode. Default to just plaintext.
#+begin_src emacs-lisp
(setq initial-major-mode 'text-mode)
#+end_src
* Evil
** Changing Keybinds
*** Changing backspace behavior
#+begin_src emacs-lisp
(define-key evil-insert-state-map (kbd "<backspace>") 'backward-delete-char-untabify)
#+end_src
*** Leave insert/visual modes with C-C
#+begin_src emacs-lisp
(define-key evil-insert-state-map (kbd "C-c") 'evil-normal-state)
(define-key evil-visual-state-map (kbd "C-c") 'evil-normal-state)
#+end_src
*** Remove "jk" escape sequence
By default, evil exits insert mode when "jk" is pressed in sequence. I find this to be confusing behavior.
#+begin_src emacs-lisp
(setq evil-escape-key-sequence nil)
#+end_src
*** Clearing highlight with C-L
Mimics the "redraw" signal sent to terminals for vim.
#+begin_src emacs-lisp
(define-key evil-normal-state-map (kbd "C-l") 'evil-ex-nohighlight)
#+end_src
*** Swap g[k/j] and k/j
#+begin_src emacs-lisp
(define-key evil-motion-state-map (kbd "gj") 'evil-next-line)
(define-key evil-motion-state-map (kbd "gk") 'evil-previous-line)
(define-key evil-motion-state-map (kbd "j") 'evil-next-visual-line)
(define-key evil-motion-state-map (kbd "k") 'evil-previous-visual-line)
#+end_src
** Resize Font in Insert Mode
These are the same keybinds that are able to work outside of insert mode.
#+begin_src emacs-lisp
(define-key evil-insert-state-map (kbd "C-M-=") 'doom/increase-font-size)
(define-key evil-insert-state-map (kbd "C-M--") 'doom/decrease-font-size)
(define-key evil-insert-state-map (kbd "C-=") 'text-scale-increase)
(define-key evil-insert-state-map (kbd "C--") 'text-scale-decrease)
#+end_src
* Visual Tweaks
** Scale Line Number Size with Buffer Text
#+begin_src emacs-lisp
(add-hook 'text-scale-mode-hook (lambda() (face-remap--remap-face 'line-number)))
(add-hook 'text-scale-mode-hook (lambda() (face-remap--remap-face 'line-number-current-line)))
#+end_src
** Block Cursor Not Showing in Terminal Mode
#+begin_src emacs-lisp :tangle packages.el
(package! evil-terminal-cursor-changer)
#+end_src
#+begin_src emacs-lisp
(use-package! evil-terminal-cursor-changer
:hook (tty-setup . evil-terminal-cursor-changer-activate))
#+end_src
** Doom Dashboard Spacing
I felt that the spacing between the line items in the graphical doom dashboard was too large. There did not seem to be any variable to set this, so I overrode the entire function and manually decreased the spacing
#+begin_src emacs-lisp
(defun doom-dashboard-widget-shortmenu ()
(insert "\n")
(dolist (section +doom-dashboard-menu-sections)
(cl-destructuring-bind (label &key icon action when face key) section
(when (and (fboundp action)
(or (null when)
(eval when t)))
(insert
(+doom-dashboard--center
(- +doom-dashboard--width 1)
(let ((icon (if (stringp icon) icon (eval icon t))))
(format (format "%s%%s%%-10s" (if icon "%3s\t" "%3s"))
(or icon "")
(with-temp-buffer
(insert-text-button
label
'action
`(lambda (_)
(call-interactively (or (command-remapping #',action)
#',action)))
'face (or face 'doom-dashboard-menu-title)
'follow-link t
'help-echo
(format "%s (%s)" label
(propertize (symbol-name action) 'face 'doom-dashboard-menu-desc)))
(format "%-37s" (buffer-string)))
;; Lookup command keys dynamically
(propertize
(or key
(when-let*
((keymaps
(delq
nil (list (when (bound-and-true-p evil-local-mode)
(evil-get-auxiliary-keymap +doom-dashboard-mode-map 'normal))
+doom-dashboard-mode-map)))
(key
(or (when keymaps
(where-is-internal action keymaps t))
(where-is-internal action nil t))))
(with-temp-buffer
(save-excursion (insert (key-description key)))
(while (re-search-forward "<\\([^>]+\\)>" nil t)
(let ((str (match-string 1)))
(replace-match
(upcase (if (< (length str) 3)
str
(substring str 0 3))))))
(buffer-string)))
"")
'face 'doom-dashboard-menu-desc))))
;; (if (display-graphic-p)
;; "\n\n"
;; "\n"))))))
"\n"))))) ;; Overwrote above lines so remove the extra newline in graphical mode from the doom dashboard
(remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-footer) ;; No github at bottom
#+end_src
** Posframe
*** Vertico Posframe
#+begin_src emacs-lisp :tangle packages.el
(package! vertico-posframe)
#+end_src
#+begin_src emacs-lisp
(vertico-posframe-mode 1)
(setq vertico-multiform-commands
'((consult-line
posframe
(vertico-posframe-poshandler . posframe-poshandler-frame-top-center)
(vertico-posframe-border-width . 10)
;; NOTE: This is useful when emacs is used in both in X and
;; terminal, for posframe do not work well in terminal, so
;; vertico-buffer-mode will be used as fallback at the
;; moment.
(vertico-posframe-fallback-mode . vertico-buffer-mode))
(t posframe)))
(vertico-multiform-mode 1)
#+end_src
*** Company Posframe
Company mode, by default, has its suggestions snap to the grid. When using anything other than monospaced font, this creately very glitchy looking behavior. Popping it out in a posframe makes the suggestions exist in their own graphical window.
#+begin_src emacs-lisp :tangle packages.el
(package! company-posframe)
#+end_src
#+begin_src emacs-lisp
(company-posframe-mode 1)
#+end_src
* Fonts
** Default
#+begin_src emacs-lisp
(add-to-list 'default-frame-alist '(font . "Symbols Nerd Font Mono 15"))
(add-to-list 'default-frame-alist '(font . "FiraCode 15"))
(set-face-font 'variable-pitch "Inter Display 15")
(set-fontset-font "fontset-default" 'han "Source Han Sans")
#+end_src
** Mixed Pitch Mode
#+begin_src emacs-lisp :tangle packages.el
(package! mixed-pitch)
#+end_src
* Coloring
There are four ways to start emacs with the combinations of GUI/TUI and standalone/daemon.
Unfortunately, each of these four methods requires a slightly different way to set window transparency.
** Themes
#+begin_src emacs-lisp :tangle packages.el
(package! gruber-darker-theme)
(package! no-clown-fiesta-theme)
#+end_src
#+begin_src emacs-lisp
(add-to-list 'custom-theme-load-path "~/.config/doom/themes/")
(load-theme 'some-clown-fiesta t)
#+end_src
** Transparency
#+begin_src emacs-lisp
;; GUI transparency
(set-frame-parameter nil 'alpha-background 80)
(add-to-list 'default-frame-alist '(alpha-background . 80))
;; Variable sized org headers
(custom-set-faces!
'(default :background "black"))
(defun ag/terminal-faces (frame)
(set-face-attribute 'hl-line frame :background "unspecified-bg")
(set-face-attribute 'org-block frame :background "unspecified-bg")
(set-face-attribute 'default frame :background "unspecified-bg"))
(defun window-transparency ()
(if (display-graphic-p (selected-frame))
(progn ;; $ emacs
;; Transparency for graphical session
)
(progn ;; $ emacs -nw
;; Transparency for terminal session
(ag/terminal-faces (selected-frame)))))
(unless (daemonp)
(add-hook 'window-setup-hook 'window-transparency))
(defun ag/make-client-frame (frame)
;; Called at the creation of each emacsclient frame
(if (display-graphic-p frame)
(progn ;; $ emacsclient -c
;; Transparency for specific graphical frame
)
(progn ;; $ emacsclient -nw
;; Transparency for specific terminal frame
(ag/terminal-faces frame))))
(add-hook 'after-make-frame-functions 'ag/make-client-frame)
#+end_src
Keybinds in order to increase/decrease the transparency of emacs windows in GUI mode. I try to keep these
bindings in sync with the terminal that I use, as to make the experiences of GUI and TUI emacs relatively similar.
#+begin_src emacs-lisp
(defun ag/adjust-alpha-background (delta)
"Increase or decrease the alpha-background by DELTA, not exceeding 1 or going below 0."
(interactive "p")
;; let* macro instead of let, since new-alpha relies on alpha
(let* ((current-alpha (or (frame-parameter (selected-frame) 'alpha-background) 0))
(new-alpha (+ current-alpha delta)))
(when (and (<= new-alpha 100) (>= new-alpha 0))
(set-frame-parameter (selected-frame) 'alpha-background new-alpha))))
(global-set-key (kbd "M-a") (lambda () (interactive) (ag/adjust-alpha-background 5)))
(global-set-key (kbd "M-s") (lambda () (interactive) (ag/adjust-alpha-background -5)))
#+end_src
* Languages
** LSP/Completion Config
*** Company-mode
#+begin_src emacs-lisp
(setq ag/company-idle-delay 0.0) ;; Give completion suggestions immediately
(setq company-minimum-prefix-length 1)
(setq company-idle-delay ag/company-idle-delay)
(set-company-backend!
'(text-mode
markdown-mode
gfm-mode)
'(:seperate
company-files
company-yasnippet
company-ispell))
;; "lsp-mode overrides my config and prepends company-capf to company-backends, which results in shadowing
;; the other backends. To avoid this issue we can remove the lsp added entry using lsp-after-open-hook"
;; - https://github.com/doomemacs/doomemacs/issues/4477#issuecomment-762882261
(add-hook! lsp-after-open
(setq-local company-backends '(:seperate
company-files
company-capf
company-yasnippet
company-ispell)))
(setq +lsp-company-backends '())
#+end_src
*** Make lsp-ui sideline suggestions the same size as buffer text
#+begin_src emacs-lisp
(use-package lsp-ui :commands lsp-ui-mode
:config (progn
;;
;; 2022-03-28 - fix sideline height computation
;;
(defun lsp-ui-sideline--compute-height nil
"Return a fixed size for text in sideline."
(let ((fontHeight (face-attribute 'lsp-ui-sideline-global :height)))
(if (null text-scale-mode-remapping)
'(height
(if (floatp fontHeight) fontHeight
(/ (face-attribute 'lsp-ui-sideline-global :height) 100.0)
)
;; Readjust height when text-scale-mode is used
(list 'height
(/ 1 (or (plist-get (cdr text-scale-mode-remapping) :height)
1)))))))
;;
;; 2022-03-28 - fix sideline alignment
;;
(defun lsp-ui-sideline--align (&rest lengths)
"Align sideline string by LENGTHS from the right of the window."
(list (* (window-font-width nil 'lsp-ui-sideline-global)
(+ (apply '+ lengths) (if (display-graphic-p) 1 2)))))
))
#+end_src
*** LSP mode in org src blocks
From: https://tecosaur.github.io/emacs-config/config.html
#+begin_src emacs-lisp
(cl-defmacro lsp-org-babel-enable (lang)
"Support LANG in org source code block."
(setq centaur-lsp 'lsp-mode)
(cl-check-type lang stringp)
(let* ((edit-pre (intern (format "org-babel-edit-prep:%s" lang)))
(intern-pre (intern (format "lsp--%s" (symbol-name edit-pre)))))
`(progn
(defun ,intern-pre (info)
(let ((file-name (->> info caddr (alist-get :file))))
(unless file-name
(setq file-name (make-temp-file "babel-lsp-")))
(setq buffer-file-name file-name)
(lsp-deferred)))
(put ',intern-pre 'function-documentation
(format "Enable lsp-mode in the buffer of org source block (%s)."
(upcase ,lang)))
(if (fboundp ',edit-pre)
(advice-add ',edit-pre :after ',intern-pre)
(progn
(defun ,edit-pre (info)
(,intern-pre info))
(put ',edit-pre 'function-documentation
(format "Prepare local buffer environment for org source block (%s)."
(upcase ,lang))))))))
(defvar org-babel-lang-list
'("go" "python" "ipython" "bash" "sh"))
(dolist (lang org-babel-lang-list)
(eval `(lsp-org-babel-enable ,lang)))
#+end_src
** Org
#+begin_src emacs-lisp
(add-hook 'org-mode-hook 'mixed-pitch-mode)
#+end_src
#+begin_src emacs-lisp
(setq org-src-fontify-natively t)
#+end_src
*** Variable Height Headers
#+begin_src emacs-lisp
(custom-set-faces!
'(org-document-title :height 1.5)
'(org-document-info :height 1.3)
'(org-level-1 :height 1.5)
'(org-level-2 :height 1.4)
'(org-level-3 :height 1.3)
'(org-level-4 :height 1.2)
'(org-level-5 :height 1.1)
'(org-level-6 :height 1.0)
'(org-level-7 :height 1.0)
'(org-level-8 :height 1.0))
#+end_src
*** Org Modern
#+begin_src emacs-lisp :tangle packages.el
(package! org-modern)
#+end_src
*** Special symbols/characters
#+begin_src emacs-lisp
(after! org
(setq
org-superstar-headline-bullets-list '("⁖" "◉" "•" "◦" "•" "◦" "•" "◦" "•" "◦")
org-superstar-itembullet-alist '((?+ . ?➤) (?- . ?✦)))) ; changes +/- symbols in item lists
(defun ag/prettify-me ()
(setq prettify-symbols-alist
'(("TODO" . "")
("WAIT" . "")
("NOPE" . "")
("DONE" . "")
("[ ]" . "")
("[X]" . "")
("[-]" . "")
("#+begin_src" . "")
("#+BEGIN_SRC" . "")
("#+end_src" . "")
("#+END_SRC" . "")
(":properties:" . "")
(":PROPERTIES:" . "")
("#+property:" . "")
("#+PROPERTY:" . "")
(":end:" . "―")
(":END:" . "―")
("#+options:" . "")
("#+OPTIONS:" . "")
("#+startup:" . "")
("#+STARTUP:" . "")
("#+title: " . "")
("#+TITLE: " . "")
("#+TOC:" . "󰠶")
("#+toc:" . "󰠶")
("#+results:" . "")
("#+RESULTS:" . "")
("#+name:" . "")
("#+NAME:" . "")
("#+roam_tags:" . "")
("#+ROAM_TAGS:" . "")
("#+filetags:" . "")
("#+FILETAGS:" . "")
("#+html_head:" . "")
("#+HTML_HEAD:" . "")
("#+subtitle:" . "")
("#+SUBTITLE:" . "")
("#+author:" . "󰙏")
("#+AUTHOR:" . "󰙏")
(":effort:" . "")
(":EFFORT:" . "")
("scheduled:" . "")
("SCHEDULED:" . "")
("deadline:" . "")
("DEADLINE:" . ""))))
(add-hook 'org-mode-hook 'ag/prettify-me)
;; Can probably remove duplicates with
;; (mapcan (lambda (x) (list x (cons (upcase (car x)) (cdr x))))
#+end_src
*** Agenda
#+begin_src emacs-lisp
(setq org-agenda-files
'("~/.local/share/org-agenda"))
(map! :leader :desc "Open org calendar" "o c" #'cfw:open-org-calendar)
(add-hook 'calendar-after-frame-setup-hook 'cfw:refresh-calendar-buffer)
#+end_src
*** SVG Tags
#+begin_src emacs-lisp :tangle packages.el
(package! svg-tag-mode)
#+end_src
#+begin_src emacs-lisp
(use-package! svg-tag-mode)
(setq svg-tag-tags
'((":TODO:" . ((lambda (tag) (svg-tag-make "TODO"))))
("[X]" . ((lambda (tag) (svg-tag-make "X"))))))
#+end_src
** Markdown
*** Conceal Markup
#+begin_src emacs-lisp
(add-hook 'markdown-mode-hook '(lambda () (markdown-toggle-markup-hiding)))
#+end_src
*** Variable Sized Headers
#+begin_src emacs-lisp
(custom-set-faces!
'(markdown-header-face-1 :height 1.5)
'(markdown-header-face-2 :height 1.4)
'(markdown-header-face-3 :height 1.3)
'(markdown-header-face-4 :height 1.2)
'(markdown-header-face-5 :height 1.1)
'(markdown-header-face-6 :height 1.0)
'(markdown-header-face-7 :height 1.0)
'(markdown-header-face-8 :height 1.0))
#+end_src
*** List Bullets
#+begin_src emacs-lisp
(setq markdown-list-item-bullets '("•" "◦"))
#+end_src
*** Mixed Pitch
#+begin_src emacs-lisp
(add-hook 'markdown-mode-hook '(lambda () (mixed-pitch-mode)))
#+end_src
** Typst
Download the `typst-ts-mode` package, which isn't yet in Melpa.
#+begin_src emacs-lisp :tangle packages.el
(package! typst-mode)
;; (package! typst-ts-mode :recipe (:type git
;; :host sourcehut
;; :repo "meow_king/typst-ts-mode"))
#+end_src
Configure typst-ts-mode.
#+begin_src emacs-lisp
(use-package! typst-mode)
;; (use-package! typst-ts-mode)
;; :custom
;; (typst-ts-mode-watch-options "--open")
;; (typst-ts-mode-enable-raw-blocks-highlight t)
;; (typst-ts-mode-highlight-raw-blocks-at-startup t))
;; (setq treesit-load-name-override-list
;; '((typst "libtree-sitter-typst" "tree_sitter_typst")))
;; (setq treesit-language-source-alist
;; '((typst "https://github.com/uben0/tree-sitter-typst")))
#+end_src
** Shell
#+begin_src emacs-lisp
(set-company-backend!
'(sh-mode)
'(:seperate
company-files
company-shell
company-yasnippet
company-ispell))
#+end_src
** Nix
#+begin_src emacs-lisp
(add-hook! lsp-nix-nil-after-open
(progn
;; There's a silly goofy little function called doom--setq-company-idle-delay-for-nix-mode-h that, for some reason,
;; has a hook that sets company-idle-delay to nil, which effectively removes auto completion in nix-mode. This was
;; very confusing to me and took me a bit to figure out why company-mode was buggy in nix-mode.
(setq-local company-idle-delay ag/company-idle-delay)
(setq-local company-backends nil)
(setq-local company-backends '(:separate
company-files
company-nixos-options
company-capf
company-yasnippet
company-ispell))))
#+end_src
* Miscellaneous
** Anki
#+begin_src emacs-lisp :tangle packages.el
(package! anki-connect)
(package! anki-editor)
#+end_src
** Face Explorer
#+begin_src emacs-lisp :tangle packages.el
(package! face-explorer)
#+end_src

195
misc/.config/doom/init.el Normal file
View file

@ -0,0 +1,195 @@
;;; 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
;;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
doom-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
;;hydra
;;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
;;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
;;word-wrap ; soft wrapping with language-aware indent
:emacs
dired ; making dired pretty [functional]
electric ; smarter, keyword-based electric-indent
;;ibuffer ; interactive buffer management
undo ; persistent, smarter undo for your inevitable mistakes
vc ; version-control and Emacs, sitting in a tree
: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 ; FIXME 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)
;;gist ; interacting with github gists
lookup ; navigate your code and its documentation
lsp ; M-x vscode
magit ; a git porcelain for Emacs
;;make ; run make tasks from Emacs
;;pass ; password manager for nerds
;;pdf ; pdf enhancements
;;prodigy ; FIXME managing external services & code builders
rgb ; creating color strings
;;taskrunner ; taskrunner for all your projects
;;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 IS-MAC macos) ; improve compatibility with macOS
;;tty ; improve the terminal Emacs experience
:lang
;;agda ; 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 +lsp) ; 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
;;(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 +lsp) ; I hereby declare "nix geht mehr!"
;;ocaml ; an objective camel
(org +pretty) ; organize your plain life in plain text (+pretty enables org-superstar)
;;php ; perl's insecure younger brother
;;plantuml ; diagrams for confusing people 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()
;;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
;;twitter ; twitter client https://twitter.com/vnought
:config
literate
(default +bindings +smartparens))

View file

@ -0,0 +1,490 @@
;;; some-clown-fiesta-theme.el --- Not-so-colorful-theme -*- lexical-binding: t -*-
;; URL: https://github.com/agryphus/some-clown-fiesta-theme.el
;; Author: agryphus
;;
;; Forked from:
;; URL: https://github.com/ranmaru22/no-clown-fiesta-theme.el
;; Author: ranmaru22
;;
;; This program is free software: you can redistribute it and/or modify it under
;; the terms of the GNU General Public License as published by the Free Software
;; Foundation, either version 3 of the License, or any later version.
;;
;; This program is distributed in the hope that it will be useful, but WITHOUT
;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
;; FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
;; details.
;;
;; You should have received a copy of the GNU General Public License along with
;; this program. If not, see http://www.gnu.org/licenses/.
;;; Commentary:
;; Color theme for Doom Emacs 29+ that does not look like a unicorn farted on your
;; screen. Based on no-clown-fiesta.nvim by aktersnurra, converted and extended
;; for Emacs by ranmaru22 and agryphus.
;;
;; Original nvim theme: https://github.com/aktersnurra/no-clown-fiesta.nvim
;;; Code:
(require 'autothemer)
;;;###autoload
(and (or load-file-name buffer-file-name)
(boundp 'custom-theme-load-path)
(add-to-list 'custom-theme-load-path
(file-name-as-directory
(file-name-directory
(or load-file-name buffer-file-name)))))
(autothemer-deftheme
some-clown-fiesta
"Color theme for Emacs 26+ that does not look like a clown puked up the source code."
((((class color) (min-colors #xFFFFFF))) ;; GUI only for now
;; Color palette
(fg "#E1E1E1")
(bg "#151515")
(_bg-darker "#101010")
(alt-bg "#202020")
(accent "#242424")
(white "#E1E1E1")
(true-white "#FFFFFF")
(dark-gray "#2A2A2A")
(gray "#424242")
(medium-gray "#727272")
(light-gray "#AFAFAF")
(blue "#A5D6FF")
(gray-blue "#7E97AB")
(medium-gray-blue "#A2B5C1")
(dark-gray-blue "#424952")
(cyan "#88afa2")
(red "#CC6666")
(green "#90A959")
(light-green "#77dd77")
(yellow "#F4BF75")
(orange "#FFA557")
(purple "#AA749F")
(pale-purple "#b790d4")
(_dark-purple "#2a2a66")
(magenta "#EFADF9")
(cursor-bg "#D0D0D0")
(cursor-fg "#151515")
(sign-add "#90A959")
(sign-change "#82a8c8")
(sign-delete "#AC4142")
(error-red "#AC4142")
(warning-orange "#F4BF75")
(_info-yellow "#F4BF75")
(success-green "#77dd77")
(hint-blue "#A5D6FF")
(_hint-green "#90A959")
(magit-light-green "#4f5c32")
(_magit-blue "#33424f")
(magit-green "#3f4928")
(magit-light-red "#4f2929")
(magit-red "#3f2121"))
;; Basic
((border (:background alt-bg :foreground medium-gray))
(cursor (:background cursor-bg :foreground cursor-fg))
(hl-line (:background 'unspecified))
(line-number (:foreground medium-gray))
(line-number-current-line (:foreground medium-gray))
(default (:foreground fg :background bg))
(fringe (:background 'unspecified :foreground light-gray))
(vertical-border (:background 'unspecified :foreground dark-gray))
(link (:foreground hint-blue :underline t))
(link-visited (:foreground pale-purple :underline t))
(match (:background accent))
(highlight (:background dark-gray-blue))
(shadow (:foreground gray))
(minibuffer-prompt (:foreground pale-purple))
(region (:background gray :foreground 'unspecified))
(secondary-selection (:background medium-gray :foreground 'unspecified))
(trailing-whitespace (:foreground 'unspecified :background error-red))
(tooltip (:background alt-bg :foreground fg))
(child-frame-border (:background dark-gray))
(error (:foreground error-red :weight 'bold))
(warning (:foreground warning-orange :weight 'bold))
(success (:foreground success-green :weight 'bold))
;; Term colors
(term-color-black (:foreground gray :background medium-gray))
(term-color-red (:foreground red :background error-red))
(term-color-green (:foreground green :background light-green))
(term-color-blue (:foreground gray-blue :background blue))
(term-color-yellow (:foreground orange :background yellow))
(term-color-magenta (:foreground purple :background magenta))
(term-color-cyan (:foreground cyan :background sign-change))
(term-color-white (:foreground white :background true-white))
;; ANSI colors
(ansi-color-black (:foreground gray :background gray))
(ansi-color-red (:foreground red :background red))
(ansi-color-green (:foreground green :background green))
(ansi-color-blue (:foreground gray-blue :background gray-blue))
(ansi-color-yellow (:foreground orange :background orange))
(ansi-color-magenta (:foreground purple :background purple))
(ansi-color-cyan (:foreground cyan :background cyan))
(ansi-color-gray (:foreground white :background white))
(ansi-color-bright-black (:foreground medium-gray :background medium-gray))
(ansi-color-bright-red (:foreground error-red :background error-red))
(ansi-color-bright-green (:foreground light-green :background light-green))
(ansi-color-bright-blue (:foreground blue :background blue))
(ansi-color-bright-yellow (:foreground yellow :background yellow))
(ansi-color-bright-magenta (:foreground magenta :background magenta))
(ansi-color-bright-cyan (:foreground sign-change :background sign-change))
(ansi-color-bright-gray (:foreground true-white :background true-white))
;; Pulse
(pulse-highlight-start-face (:background medium-gray :extend t))
;; Show paren
(show-paren-match (:foreground blue :weight 'bold :underline t))
(show-paren-match-expression (:foreground blue :weight 'bold :underline t))
(show-paren-mismatch (:background red :weight 'bold :underline t))
;; Rainbow delimiter
(rainbow-delimiters-base-error-face (:foreground error-red :weight 'bold))
(rainbow-delimiters-base-face (:foreground fg))
(rainbow-delimiters-depth-1-face (:foreground medium-gray-blue))
(rainbow-delimiters-depth-2-face (:foreground gray-blue))
(rainbow-delimiters-depth-3-face (:foreground cyan))
(rainbow-delimiters-depth-4-face (:foreground green))
(rainbow-delimiters-depth-5-face (:foreground medium-gray-blue))
(rainbow-delimiters-depth-6-face (:foreground gray-blue))
(rainbow-delimiters-depth-7-face (:foreground cyan))
(rainbow-delimiters-depth-8-face (:foreground green))
(rainbow-delimiters-depth-9-face (:foreground medium-gray-blue))
(rainbow-delimiters-mismatched-face (:foreground error-red :weight 'bold))
(rainbow-delimiters-unmatched-face (:foreground error-red :weight 'bold))
;; Mode-line
(mode-line (:foreground fg
:background dark-gray
:box (:line-width 4 :color dark-gray)))
(mode-line-inactive (:foreground medium-gray
:background alt-bg
:box (:line-width 4 :color alt-bg)))
;; Tab-bar
(tab-bar (:foreground medium-gray
:background dark-gray
:box (:line-width 4 :color dark-gray)))
(tab-bar-tab (:foreground fg))
(tab-bar-tab-group-current (:foreground fg :weight 'bold :underline t))
(tab-bar-tab-inactive (:foreground medium-gray))
(tab-bar-tab-ungrouped (:foreground medium-gray))
(tab-bar-tab-group-inactive (:foreground medium-gray :underline t))
;; Font lock
(font-lock-builtin-face (:foreground gray-blue))
(font-lock-comment-face (:foreground medium-gray))
(font-lock-comment-delimiter-face (:foreground medium-gray))
(font-lock-constant-face (:foreground medium-gray-blue))
(font-lock-doc-face (:foreground light-gray))
(font-lock-doc-markup-face (:foreground blue))
(font-lock-doc-string-face (:foreground medium-gray-blue))
(font-lock-function-name-face (:foreground cyan))
(font-lock-keyword-face (:foreground gray-blue :weight 'bold))
(font-lock-preprocessor-face (:foreground medium-gray-blue))
(font-lock-reference-face (:foreground blue))
(font-lock-string-face (:foreground green))
(font-lock-type-face (:foreground white :weight 'bold))
(font-lock-number-face (:foreground red))
(font-lock-variable-name-face (:foreground white))
(font-lock-warning-face (:foreground warning-orange))
;; Highlight number
(highlight-numbers-number (:foreground red))
;; HL Todo
(hl-todo (:foreground yellow :weight 'bold))
;; Treesitter
(tree-sitter-hl-face:attribute (:foreground white))
(tree-sitter-hl-face:comment (:foreground medium-gray))
(tree-sitter-hl-face:constant (:foreground white))
(tree-sitter-hl-face:constant.builtin (:foreground red))
(tree-sitter-hl-face:constructor (:foreground white))
(tree-sitter-hl-face:doc (:foreground light-gray))
(tree-sitter-hl-face:escape (:foreground medium-gray-blue))
(tree-sitter-hl-face:function (:foreground cyan))
(tree-sitter-hl-face:function.builtin (:foreground cyan))
(tree-sitter-hl-face:function.call (:foreground cyan))
(tree-sitter-hl-face:function.macro (:foreground cyan))
(tree-sitter-hl-face:function.special (:foreground cyan))
(tree-sitter-hl-face:keyword (:foreground gray-blue :weight 'bold))
(tree-sitter-hl-face:label (:foreground white))
(tree-sitter-hl-face:method (:foreground cyan))
(tree-sitter-hl-face:method.call (:foreground cyan))
(tree-sitter-hl-face:number (:foreground red))
(tree-sitter-hl-face:operator (:foreground white))
(tree-sitter-hl-face:property (:foreground white))
(tree-sitter-hl-face:property.definition (:foreground white))
(tree-sitter-hl-face:punctuation (:foreground white))
(tree-sitter-hl-face:punctuation.bracket (:foreground white))
(tree-sitter-hl-face:punctuation.delimiter (:foreground white))
(tree-sitter-hl-face:punctuation.special (:foreground medium-gray))
(tree-sitter-hl-face:string (:foreground green))
(tree-sitter-hl-face:string.special (:foreground medium-gray-blue))
(tree-sitter-hl-face:tag (:foreground pale-purple))
(tree-sitter-hl-face:type (:foreground white))
(tree-sitter-hl-face:type.argument (:foreground white))
(tree-sitter-hl-face:type.builtin (:foreground white))
(tree-sitter-hl-face:type.parameter (:foreground white))
(tree-sitter-hl-face:type.super (:foreground white))
(tree-sitter-hl-face:variable (:foreground white))
(tree-sitter-hl-face:variable.builtin (:foreground white))
(tree-sitter-hl-face:variable.parameter (:foreground white))
(tree-sitter-hl-face:variable.special (:foreground white))
;; Git
(git-commit-summary (:foreground white))
(git-commit-overlong-summary (:foreground error-red))
;; Magit
(magit-branch (:foreground cyan))
(magit-diff-hunk-header (:background alt-bg))
(magit-diff-file-header (:background alt-bg))
(magit-log-sha1 (:foreground red))
(magit-log-author (:foreground green))
(magit-diffstat-added (:foreground sign-add))
(magit-diffstat-removed (:foreground sign-delete))
(magit-diff-added (:background magit-green))
(magit-diff-removed (:background magit-red))
(magit-diff-added-highlight (:background magit-light-green))
(magit-diff-removed-highlight (:background magit-light-red))
(magit-bisect-bad (:inherit 'error))
(magit-bisect-good (:inherit 'success))
(magit-bisect-skip (:inherit 'warning))
(magit-blame-date (:foreground blue))
(magit-blame-dimmed (:inherit 'shadow))
(magit-blame-hash (:foreground orange))
(magit-blame-heading (:background alt-bg :extend t))
(magit-blame-highlight (:foreground yellow))
(magit-blame-margin (:foreground medium-gray-blue))
(magit-blame-name (:foreground magenta))
(magit-blame-summary (:foreground cyan))
(magit-branch--local (:foreground blue))
(magit-branch-remote (:foreground magenta))
(magit-branch-remote-head (:foreground magenta :box t))
(magit-branch-upstream (:inherit 'bold))
(magit-branch-warning (:inherit 'warning))
(magit-cherry-equivalent (:background alt-bg :foreground magenta))
(magit-cherry-unmatched (:background alt-bg :foreground cyan))
;; git-gutter
(git-gutter:added (:foreground sign-add))
(git-gutter:deleted (:foreground sign-delete))
(git-gutter:modified (:foreground sign-change))
;; isearch (and lazy-highlight)
(lazy-highlight (:background 'unspecified :foreground orange))
(isearch (:background 'unspecified :foreground orange :weight 'bold))
(isearch-group-1 (:foreground fg :background magenta))
(isearch-group-2 (:foreground fg :background purple))
(isearch-fail (:background error-red :foreground fg))
;; Anzu
(anzu-match-1 (:foreground orange))
(anzu-match-2 (:foreground magenta))
(anzu-match-3 (:foreground purple))
(anzu-mode-line (:foreground orange))
(anzu-mode-line-no-match (:foreground red))
(anzu-replace-highlight (:foreground orange :weight 'bold))
(anzu-replace-to (:foreground yellow))
;; Vertico
(vertico-current (:inherit 'highlight))
(vertico-group-title (:foreground medium-gray :weight 'bold))
;; Consult
(consult-line-number-prefix (:inherit 'line-number))
(consult-line-number-wrapped (:foreground gray-blue))
;; Marginalia
(marginalia-documentation (:foreground medium-gray))
(marginalia-file-name (:foreground medium-gray))
;; Orderless
(orderless-match-face-0 (:foreground orange :weight 'bold))
(orderless-match-face-1 (:foreground blue :weight 'bold))
(orderless-match-face-2 (:foreground magenta :weight 'bold))
(orderless-match-face-3 (:foreground light-green :weight 'bold))
;; Corfu
(corfu-current (:inherit 'highlight))
(corfu-bar (:background medium-gray))
(corfu-border (:background medium-gray))
(corfu-default (:background alt-bg))
(corfu-annotations (:foreground medium-gray))
(corfu-deprecated (:foreground medium-gray :strike-through t))
(corfu-echo (:foreground medium-gray))
;; Company (just for compatibility ... use Corfu instead)
(company-tooltip (:background alt-bg))
(company-tooltip-annotation (:background alt-bg))
(company-tooltip-annotation-selection (:background dark-gray))
(company-tooltip-selection (:background dark-gray))
;; Autocomplete partially typed field
(company-tooltip-common-selection (:background 'unspecified
:foreground orange))
(company-tooltip-common (:background 'unspecified
:foreground orange))
(company-scrollbar-fg (:background alt-bg))
(company-scrollbar-bg (:background medium-gray))
(company-preview (:background 'unspecified
:foreground green))
(company-preview-common (:background 'unspecified
:foreground green))
;; org-mode
(org-default (:foreground fg))
(org-block (:background "#111111"))
;; (org-block (:inherit 'fixed-pitch))
(org-level-1 (:foreground medium-gray-blue :weight 'bold))
(org-level-2 (:foreground gray-blue :weight 'bold))
(org-level-3 (:foreground cyan :weight 'bold))
(org-level-4 (:foreground green :weight 'bold))
(org-level-5 (:foreground medium-gray-blue :weight 'bold))
(org-level-6 (:foreground gray-blue :weight 'bold))
(org-level-7 (:foreground cyan :weight 'bold))
(org-level-8 (:foreground green :weight 'bold))
(org-quote (:foreground gray-blue))
(org-code (:foreground green))
(org-verbatim (:foreground blue))
(org-inline-src-block (:foreground green))
(org-todo (:foreground red))
(org-done (:foreground success-green))
(org-column (:background 'unspecified))
(org-column-title (:background 'unspecified :weight 'bold :underline t))
(org-document-info-keyword (:foreground medium-gray-blue))
(org-document-title (:foreground white :weight 'bold))
(org-document-info (:foreground white :weight 'bold))
;; Markdown
(markdown-header-face-1 (:weight 'bold
:underline (:style 'line)
:foreground medium-gray-blue :weight 'bold))
(markdown-header-face-2 (:weight 'bold
:underline (:style 'line)
:foreground gray-blue :weight 'bold))
(markdown-header-face-3 (:weight 'bold
:underline (:style 'line)
:foreground cyan :weight 'bold))
(markdown-header-face-4 (:weight 'bold
:underline (:style 'line)
:foreground green :weight 'bold))
(markdown-header-face-5 (:weight 'bold
:underline (:style 'line)
:foreground medium-gray-blue :weight 'bold))
(markdown-header-face-6 (:weight 'bold
:underline (:style 'line)
:foreground gray-blue :weight 'bold))
(markdown-header-face-7 (:weight 'bold
:underline (:style 'line)
:foreground cyan :weight 'bold))
(markdown-header-face-8 (:weight 'bold
:underline (:style 'line)
:foreground green :weight 'bold))
(markdown-list-face (:foreground medium-gray-blue))
(markdown-hr-face (:foreground medium-gray :weight 'bold))
(markdown-code-face (:background "#111111" :extend t))
;; Dired
(dired-directory (:foreground blue :weight 'bold))
(dired-ignored (:foreground gray-blue))
(dired-header (:foreground light-gray :weight 'bold :underline t))
;; Flymake
(flymake-error (:underline (:style 'wave :color error-red)))
(flymake-warning (:underline (:style 'wave :color warning-orange)))
(flymake-note (:underline (:style 'wave :color hint-blue)))
;; Flycheck
(flycheck-error (:underline (:style 'wave :color error-red)))
(flycheck-warning (:underline (:style 'wave :color warning-orange)))
(flycheck-info (:underline (:style 'wave :color hint-blue)))
(flycheck-fringe-error (:inherit 'error))
(flycheck-fringe-warning (:inherit 'warning))
(flycheck-fringe-info (:foreground hint-blue :weight 'bold))
(flycheck-error-list-error (:inherit 'error))
(flycheck-error-list-warning (:inherit 'warning))
(flycheck-error-list-info (:foreground hint-blue :weight 'bold))
;; Compilation
(compilation-info (:foreground hint-blue))
;; yasnippet
(yas-field-highlight-face (:background nil))
;; diredfl
(diredfl-compressed-file-name (:foreground gray-blue))
(diredfl-compressed-file-suffix (:foreground gray-blue))
(diredfl-date-time (:foreground medium-gray-blue))
(diredfl-deletion (:strike-through t))
(diredfl-deletion-file-name (:foreground red :strike-through t))
(diredfl-dir-heading (:foreground yellow
:weight 'bold
:underline t))
(diredfl-dir-name (:foreground cyan))
(diredfl-dir-priv (:foreground cyan))
(diredfl-exec-priv (:foreground green))
(diredfl-executable-tag (:foreground green))
(diredfl-file-name (:foreground white))
(diredfl-file-suffix (:foreground white))
(diredfl-flag-mark (:background gray-blue))
(diredfl-flag-mark-line (:background gray-blue))
(diredfl-ignored-file-name (:foreground gray))
(diredfl-link-priv (:foreground magenta))
(diredfl-no-priv (:foreground gray))
(diredfl-number (:foreground red))
(diredfl-other-priv (:foreground white))
(diredfl-rare-priv (:foreground purple))
(diredfl-read-priv (:foreground yellow))
(diredfl-symlink (:foreground magenta))
(diredfl-tagged-autofile-name (:foreground white))
(diredfl-write-priv (:foreground red))
;; Treemacs
(treemacs-directory-face (:foreground white))
(treemacs-root-face (:foreground yellow
:weight 'bold
:underline t))
(treemacs-git-added-face (:foreground green))
(treemacs-git-commit-diff-face (:foreground blue))
(treemacs-git-conflict-face (:foreground red))
(treemacs-git-ignored-face (:foreground gray))
(treemacs-git-modified-face (:foreground blue))
(treemacs-marked-file-face (:inherit 'highlight))
;; nix
(nix-builtin-face (:foreground red))
;; ERC
(erc-notice-face (:foreground purple))
(erc-timestamp-face (:foreground medium-gray-blue))
(erc-input-face (:foreground yellow))
(erc-my-nick-face (:foreground yellow)))
(custom-theme-set-variables
'some-clown-fiesta
`(pos-tip-foreground-color ,fg)
`(pos-tip-background-color ,alt-bg)
`(ansi-color-names-vector [,gray ,red ,green ,gray-blue
,orange ,purple ,cyan ,white])))
(provide-theme 'some-clown-fiesta)
;; Local Variables:
;; no-byte-compile: t
;; eval: (when (fboundp 'rainbow-mode) (rainbow-mode +1))
;; End:
;;; some-clown-fiesta-theme.el ends here.

459
misc/.config/dunst/dunstrc Normal file
View file

@ -0,0 +1,459 @@
# See dunst(5) for all configuration options
[global]
### Display ###
# Which monitor should the notifications be displayed on.
monitor = 0
# Display notification on focused monitor. Possible modes are:
# mouse: follow mouse pointer
# keyboard: follow window with keyboard focus
# none: don't follow anything
#
# "keyboard" needs a window manager that exports the
# _NET_ACTIVE_WINDOW property.
# This should be the case for almost all modern window managers.
#
# If this option is set to mouse or keyboard, the monitor option
# will be ignored.
follow = mouse
### Geometry ###
# dynamic width from 0 to 300
# width = (0, 300)
# constant width of 300
width = 300
# The maximum height of a single notification, excluding the frame.
height = 300
# Position the notification in the top right corner
origin = top-right
# Offset from the origin
offset = 10x10
# Scale factor. It is auto-detected if value is 0.
scale = 0
# Maximum number of notification (0 means no limit)
notification_limit = 20
### Progress bar ###
# Turn on the progess bar. It appears when a progress hint is passed with
# for example dunstify -h int:value:12
progress_bar = true
# Set the progress bar height. This includes the frame, so make sure
# it's at least twice as big as the frame width.
progress_bar_height = 10
# Set the frame width of the progress bar
progress_bar_frame_width = 1
# Set the minimum width for the progress bar
progress_bar_min_width = 150
# Set the maximum width for the progress bar
progress_bar_max_width = 300
# Corner radius for the progress bar. 0 disables rounded corners.
progress_bar_corner_radius = 0
# Corner radius for the icon image.
icon_corner_radius = 0
# Show how many messages are currently hidden (because of
# notification_limit).
indicate_hidden = yes
# The transparency of the window. Range: [0; 100].
# This option will only work if a compositing window manager is
# present (e.g. xcompmgr, compiz, etc.). (X11 only)
transparency = 0.7
# Draw a line of "separator_height" pixel height between two
# notifications.
# Set to 0 to disable.
# If gap_size is greater than 0, this setting will be ignored.
separator_height = 2
# Padding between text and separator.
padding = 8
# Horizontal padding.
horizontal_padding = 8
# Padding between text and icon.
text_icon_padding = 0
# Defines width in pixels of frame around the notification window.
# Set to 0 to disable.
frame_width = 3
# Defines color of the frame around the notification window.
frame_color = "#a89984"
# Size of gap to display between notifications - requires a compositor.
# If value is greater than 0, separator_height will be ignored and a border
# of size frame_width will be drawn around each notification instead.
# Click events on gaps do not currently propagate to applications below.
gap_size = 0
# Define a color for the separator.
# possible values are:
# * auto: dunst tries to find a color fitting to the background;
# * foreground: use the same color as the foreground;
# * frame: use the same color as the frame;
# * anything else will be interpreted as a X color.
separator_color = frame
# Sort messages by urgency.
sort = yes
# Don't remove messages, if the user is idle (no mouse or keyboard input)
# for longer than idle_threshold seconds.
# Set to 0 to disable.
# A client can set the 'transient' hint to bypass this. See the rules
# section for how to disable this if necessary
# idle_threshold = 120
### Text ###
font = FiraCode, Symbols Nerd Font
# The spacing between lines. If the height is smaller than the
# font height, it will get raised to the font height.
line_height = 0
# Possible values are:
# full: Allow a small subset of html markup in notifications:
# <b>bold</b>
# <i>italic</i>
# <s>strikethrough</s>
# <u>underline</u>
#
# For a complete reference see
# <https://docs.gtk.org/Pango/pango_markup.html>.
#
# strip: This setting is provided for compatibility with some broken
# clients that send markup even though it's not enabled on the
# server. Dunst will try to strip the markup but the parsing is
# simplistic so using this option outside of matching rules for
# specific applications *IS GREATLY DISCOURAGED*.
#
# no: Disable markup parsing, incoming notifications will be treated as
# plain text. Dunst will not advertise that it has the body-markup
# capability if this is set as a global setting.
#
# It's important to note that markup inside the format option will be parsed
# regardless of what this is set to.
markup = full
# The format of the message. Possible variables are:
# %a appname
# %s summary
# %b body
# %i iconname (including its path)
# %I iconname (without its path)
# %p progress value if set ([ 0%] to [100%]) or nothing
# %n progress value if set without any extra characters
# %% Literal %
# Markup is allowed
format = "<b>%s</b>\n%b"
# Alignment of message text.
# Possible values are "left", "center" and "right".
alignment = left
# Vertical alignment of message text and icon.
# Possible values are "top", "center" and "bottom".
vertical_alignment = center
# Show age of message if message is older than show_age_threshold
# seconds.
# Set to -1 to disable.
show_age_threshold = 60
# Specify where to make an ellipsis in long lines.
# Possible values are "start", "middle" and "end".
ellipsize = middle
# Ignore newlines '\n' in notifications.
ignore_newline = no
# Stack together notifications with the same content
stack_duplicates = true
# Hide the count of stacked notifications with the same content
hide_duplicate_count = false
# Display indicators for URLs (U) and actions (A).
show_indicators = yes
### Icons ###
# Recursive icon lookup. You can set a single theme, instead of having to
# define all lookup paths.
enable_recursive_icon_lookup = true
# Set icon theme (only used for recursive icon lookup)
icon_theme = Adwaita
# You can also set multiple icon themes, with the leftmost one being used first.
# icon_theme = "Adwaita, breeze"
# Align icons left/right/top/off
icon_position = left
# Scale small icons up to this size, set to 0 to disable. Helpful
# for e.g. small files or high-dpi screens. In case of conflict,
# max_icon_size takes precedence over this.
min_icon_size = 32
# Scale larger icons down to this size, set to 0 to disable
max_icon_size = 64
# Paths to default icons (only neccesary when not using recursive icon lookup)
icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
### History ###
# Should a notification popped up from history be sticky or timeout
# as if it would normally do.
sticky_history = yes
# Maximum amount of notifications kept in history
history_length = 20
### Misc/Advanced ###
# dmenu path.
dmenu = /usr/bin/dmenu -p dunst:
# Browser for opening urls in context menu.
browser = /usr/bin/xdg-open
# Always run rule-defined scripts, even if the notification is suppressed
always_run_script = true
# Define the title of the windows spawned by dunst
title = Dunst
# Define the class of the windows spawned by dunst
class = Dunst
# Define the corner radius of the notification window
# in pixel size. If the radius is 0, you have no rounded
# corners.
# The radius will be automatically lowered if it exceeds half of the
# notification height to avoid clipping text and/or icons.
corner_radius = 0
# Ignore the dbus closeNotification message.
# Useful to enforce the timeout set by dunst configuration. Without this
# parameter, an application may close the notification sent before the
# user defined timeout.
ignore_dbusclose = false
### Wayland ###
# These settings are Wayland-specific. They have no effect when using X11
# Uncomment this if you want to let notications appear under fullscreen
# applications (default: overlay)
# layer = top
# Set this to true to use X11 output on Wayland.
force_xwayland = false
### Legacy
# Use the Xinerama extension instead of RandR for multi-monitor support.
# This setting is provided for compatibility with older nVidia drivers that
# do not support RandR and using it on systems that support RandR is highly
# discouraged.
#
# By enabling this setting dunst will not be able to detect when a monitor
# is connected or disconnected which might break follow mode if the screen
# layout changes.
force_xinerama = false
### mouse
# Defines list of actions for each mouse event
# Possible values are:
# * none: Don't do anything.
# * do_action: Invoke the action determined by the action_name rule. If there is no
# such action, open the context menu.
# * open_url: If the notification has exactly one url, open it. If there are multiple
# ones, open the context menu.
# * close_current: Close current notification.
# * close_all: Close all notifications.
# * context: Open context menu for the notification.
# * context_all: Open context menu for all notifications.
# These values can be strung together for each mouse event, and
# will be executed in sequence.
mouse_left_click = close_current
mouse_middle_click = do_action, close_current
mouse_right_click = close_all
# Experimental features that may or may not work correctly. Do not expect them
# to have a consistent behaviour across releases.
[experimental]
# Calculate the dpi to use on a per-monitor basis.
# If this setting is enabled the Xft.dpi value will be ignored and instead
# dunst will attempt to calculate an appropriate dpi value for each monitor
# using the resolution and physical size. This might be useful in setups
# where there are multiple screens with very different dpi values.
per_monitor_dpi = false
[urgency_low]
# IMPORTANT: colors have to be defined in quotation marks.
# Otherwise the "#" and following would be interpreted as a comment.
background = "#222222"
foreground = "#888888"
timeout = 10
# Icon for notifications with low urgency, uncomment to enable
#default_icon = /path/to/icon
[urgency_normal]
background = "#665c5499"
foreground = "#fbf1c7"
timeout = 10
# Icon for notifications with normal urgency, uncomment to enable
#default_icon = /path/to/icon
[urgency_critical]
background = "#900000"
foreground = "#ffffff"
frame_color = "#ff0000"
timeout = 0
# Icon for notifications with critical urgency, uncomment to enable
#default_icon = /path/to/icon
# Every section that isn't one of the above is interpreted as a rules to
# override settings for certain messages.
#
# Messages can be matched by
# appname (discouraged, see desktop_entry)
# body
# category
# desktop_entry
# icon
# match_transient
# msg_urgency
# stack_tag
# summary
#
# and you can override the
# background
# foreground
# format
# frame_color
# fullscreen
# new_icon
# set_stack_tag
# set_transient
# set_category
# timeout
# urgency
# icon_position
# skip_display
# history_ignore
# action_name
# word_wrap
# ellipsize
# alignment
# hide_text
#
# Shell-like globbing will get expanded.
#
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
# GLib based applications export their desktop-entry name. In comparison to the appname,
# the desktop-entry won't get localized.
#
# SCRIPTING
# You can specify a script that gets run when the rule matches by
# setting the "script" option.
# The script will be called as follows:
# script appname summary body icon urgency
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
#
# NOTE: It might be helpful to run dunst -print in a terminal in order
# to find fitting options for rules.
# Disable the transient hint so that idle_threshold cannot be bypassed from the
# client
#[transient_disable]
# match_transient = yes
# set_transient = no
#
# Make the handling of transient notifications more strict by making them not
# be placed in history.
#[transient_history_ignore]
# match_transient = yes
# history_ignore = yes
# fullscreen values
# show: show the notifications, regardless if there is a fullscreen window opened
# delay: displays the new notification, if there is no fullscreen window active
# If the notification is already drawn, it won't get undrawn.
# pushback: same as delay, but when switching into fullscreen, the notification will get
# withdrawn from screen again and will get delayed like a new notification
#[fullscreen_delay_everything]
# fullscreen = delay
#[fullscreen_show_critical]
# msg_urgency = critical
# fullscreen = show
#[espeak]
# summary = "*"
# script = dunst_espeak.sh
#[script-test]
# summary = "*script*"
# script = dunst_test.sh
#[ignore]
# # This notification will not be displayed
# summary = "foobar"
# skip_display = true
#[history-ignore]
# # This notification will not be saved in history
# summary = "foobar"
# history_ignore = yes
#[skip-display]
# # This notification will not be displayed, but will be included in the history
# summary = "foobar"
# skip_display = yes
#[signed_on]
# appname = Pidgin
# summary = "*signed on*"
# urgency = low
#
#[signed_off]
# appname = Pidgin
# summary = *signed off*
# urgency = low
#
#[says]
# appname = Pidgin
# summary = *says*
# urgency = critical
#
#[twitter]
# appname = Pidgin
# summary = *twitter.com*
# urgency = normal
#
#[stack-volumes]
# appname = "some_volume_notifiers"
# set_stack_tag = "volume"
#
# vim: ft=cfg

View file

@ -0,0 +1,27 @@
# Vertical Candidate List
Vertical Candidate List=False
# Use Per Screen DPI
PerScreenDPI=True
# Use mouse wheel to go to prev or next page
WheelForPaging=True
# Font
Font="Sans 15"
# Menu Font
MenuFont="Sans 15"
# Tray Font
TrayFont="Sans Bold 15"
# Tray Label Outline Color
TrayOutlineColor=#000000
# Tray Label Text Color
TrayTextColor=#ffffff
# Prefer Text Icon
PreferTextIcon=False
# Show Layout Name In Icon
ShowLayoutNameInIcon=True
# Use input method language to display text
UseInputMethodLangaugeToDisplayText=True
# Theme
Theme=vince
# Force font DPI on Wayland
ForceWaylandDPI=0

View file

@ -0,0 +1,38 @@
font=FiraCode:size=15,Symbols Nerd Font Mono:size=15
bold-text-in-bright=palette-based
[colors]
alpha=0.8
background=000000
foreground=ebdbb2
# Normal/regular colors (color palette 0-7)
regular0=282828 # black
regular1=cc241d # red
regular2=98971a # green
regular3=d79921 # yellow
regular4=458588 # blue
regular5=b16286 # magenta
regular6=689d6a # cyan
regular7=a89984 # white
# Same as above
dim0=282828 # black
dim1=cc241d # red
dim2=98971a # green
dim3=d79921 # yellow
dim4=458588 # blue
dim5=b16286 # magenta
dim6=689d6a # cyan
dim7=a89984 # white
# Bright colors (color palette 8-15)
bright0=928374 # bright black
bright1=fb4934 # bright red
bright2=b8bb26 # bright green
bright3=fabd2f # bright yellow
bright4=83a598 # bright blue
bright5=d3869b # bright magenta
bright6=8ec07c # bright cyan
bright7=ebdbb2 # bright white

0
misc/.config/git/.gitignore vendored Normal file
View file

View file

@ -0,0 +1,17 @@
# DO NOT EDIT! This file will be overwritten by LXAppearance.
# Any customization should be done in ~/.gtkrc-2.0.mine instead.
include "/home/vince/.gtkrc-2.0.mine"
gtk-theme-name="gruvbox-dark"
gtk-icon-theme-name="hicolor"
gtk-font-name="Sans 10"
gtk-cursor-theme-size=0
gtk-toolbar-style=GTK_TOOLBAR_BOTH
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
gtk-button-images=1
gtk-menu-images=1
gtk-enable-event-sounds=1
gtk-enable-input-feedback-sounds=1
gtk-xft-antialias=1
gtk-xft-hinting=1
gtk-xft-hintstyle="hintfull"

View file

@ -0,0 +1,14 @@
[Settings]
gtk-application-prefer-dark-theme=1
gtk-icon-theme-name=hicolor
gtk-font-name=Sans 10
gtk-cursor-theme-size=0
gtk-toolbar-style=GTK_TOOLBAR_BOTH
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
gtk-button-images=1
gtk-menu-images=1
gtk-enable-event-sounds=1
gtk-enable-input-feedback-sounds=1
gtk-xft-antialias=1
gtk-xft-hinting=1
gtk-xft-hintstyle=hintfull

63
misc/.config/htop/htoprc Normal file
View file

@ -0,0 +1,63 @@
# Beware! This file is rewritten by htop when settings are changed in the interface.
# The parser is also very primitive, and not human-friendly.
htop_version=3.3.0-dev
config_reader_min_version=3
fields=0 48 17 18 38 39 40 2 46 47 49 1
hide_kernel_threads=1
hide_userland_threads=1
hide_running_in_container=0
shadow_other_users=0
show_thread_names=1
show_program_path=0
highlight_base_name=1
highlight_deleted_exe=1
shadow_distribution_path_prefix=0
highlight_megabytes=1
highlight_threads=1
highlight_changes=1
highlight_changes_delay_secs=5
find_comm_in_cmdline=1
strip_exe_from_cmdline=1
show_merged_command=0
header_margin=1
screen_tabs=1
detailed_cpu_time=0
cpu_count_from_one=0
show_cpu_usage=1
show_cpu_frequency=0
show_cpu_temperature=0
degree_fahrenheit=0
update_process_names=0
account_guest_in_cpu_meter=0
color_scheme=0
enable_mouse=1
delay=5
hide_function_bar=0
header_layout=two_50_50
column_meters_0=LeftCPUs2 Memory Swap
column_meter_modes_0=1 1 1
column_meters_1=RightCPUs2 Tasks LoadAverage Uptime
column_meter_modes_1=1 2 2 2
tree_view=1
sort_key=46
tree_sort_key=0
sort_direction=-1
tree_sort_direction=-1
tree_view_always_by_pid=0
all_branches_collapsed=0
screen:Main=PID USER PRIORITY NICE M_VIRT M_RESIDENT M_SHARE STATE PERCENT_CPU PERCENT_MEM TIME Command
.sort_key=PERCENT_CPU
.tree_sort_key=PID
.tree_view=1
.tree_view_always_by_pid=0
.sort_direction=-1
.tree_sort_direction=-1
.all_branches_collapsed=0
screen:I/O=PID USER IO_PRIORITY IO_RATE IO_READ_RATE IO_WRITE_RATE PERCENT_SWAP_DELAY PERCENT_IO_DELAY Command
.sort_key=IO_RATE
.tree_sort_key=PID
.tree_view=0
.tree_view_always_by_pid=0
.sort_direction=-1
.tree_sort_direction=-1
.all_branches_collapsed=0

View file

@ -0,0 +1,244 @@
# See https://wiki.hyprland.org/Configuring/Monitors/
monitor=eDP-1, 1920x1080@60Hz, 1280x1480, 1
monitor=DP-5, 1920x1080@60Hz, 1920x400, 1
monitor=DP-7, 2560x1440@60Hz, 3840x0, 1, transform, 3
monitor=DP-6, disable
# Wayland related environment variables.
env = XCURSOR_SIZE,24
env = WLR_NO_HARDWARE_CURSORS,1
env = TERMINAL,foot
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
input {
kb_layout = us
kb_variant =
kb_model =
kb_options =
kb_rules =
# Mouse settings
follow_mouse = 1
accel_profile = adaptive # Or else cannot move camera in games
sensitivity = 1
touchpad {
natural_scroll = yes
}
repeat_delay = 300
repeat_rate = 50
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
}
general {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
gaps_in = 6
gaps_out = 12
border_size = 2
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
col.inactive_border = rgba(595959aa)
layout = master
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
allow_tearing = false
}
decoration {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
rounding = 10
blur {
enabled = true
size = 3
passes = 1
}
drop_shadow = yes
shadow_range = 4
shadow_render_power = 3
col.shadow = rgba(1a1a1aee)
}
animations {
enabled = yes
# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
bezier = linear, 0.0, 0.0, 1.0, 1.0
animation = windows, 1, 7, myBezier
animation = windowsOut, 1, 7, default, popin 80%
animation = border, 1, 10, default
animation = borderangle, 1, 100, linear, loop
animation = fade, 1, 7, default
animation = workspaces, 1, 6, default
}
dwindle {
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = yes # you probably want this
}
master {
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
new_on_top = true
new_is_master = true
no_gaps_when_only = true
}
gestures {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
workspace_swipe = off
}
misc {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
force_default_wallpaper = 0 # Set to 0 to disable the anime mascot wallpapers
enable_swallow = true
swallow_regex = ^(st|foot|footclient)$
mouse_move_enables_dpms = true
}
# Window rules
windowrule = tile,title:^(VRChat)$
windowrule = tile,title:^(nsxiv)$
windowrule = rounding 0,title:^(rofi.*)$
# windowrule = opacity 0.99,title:^(Obsidian.*)$
$mainMod = SUPER
# Program spawning hotkeys
bind = CONTROL ALT, BACKSPACE, exec, foot -e zsh -c 'btop'
bind = $mainMod, RETURN, exec, foot
bind = $mainMod, W, exec, firefox
bind = $mainMod, E, exec, foot -e zsh -c 'local tmp="$(mktemp -t "yazi-cwd.XXXXX")"; yazi "$@" --cwd-file="$tmp"; if cwd="$(cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then; cd -- "$cwd"; fi; rm -f -- "$tmp"'
bind = $mainMod SHIFT, E, exec, emacsclient -c -a 'emacs'
# bind = $mainMod, C, exec, emacsclient -c -a "emacs" -n --eval '(progn (set-frame-font "FiraCode Nerd Font") (cfw:open-org-calendar))'
bind = $mainMod, C, exec, foot -e zsh -c 'khal interactive'
bind = $mainMod, M, exec, foot -e zsh -c 'neomutt'
# Menu hoykeys
bind = $mainMod, R, exec, fuzzel
# System control keybinds
binde = $mainMod, MINUS, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%-; notify-send -r 44 "$(wpctl get-volume @DEFAULT_AUDIO_SINK@)"
binde = $mainMod SHIFT, MINUS, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-; notify-send -r 44 "$(wpctl get-volume @DEFAULT_AUDIO_SINK@)"
binde = $mainMod, EQUAL, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+; notify-send -r 44 "$(wpctl get-volume @DEFAULT_AUDIO_SINK@)"
binde = $mainMod SHIFT, EQUAL, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+; notify-send -r 44 "$(wpctl get-volume @DEFAULT_AUDIO_SINK@)"
binde = ,F7, exec, change-brightness up
binde = ,XF86MonBrightnessUp, exec, change-brightness up
binde = ,F6, exec, change-brightness down
binde = ,XF86MonBrightnessDown, exec, change-brightness down
bind = $mainMod, L, exec, hyprctl dispatch dpms off; swaylock -e -c 000000
bind = $mainMod SHIFT, R, exec, pkill ags; ags
# Print area, screen, and all, respectively
bind = $mainMod, P, exec, grimblast --freeze copysave area /tmp/screenshot; mv /tmp/screenshot ~/$(rofi -dmenu -l 0 -p "Screenshot filename:" < /dev/null).png
bind = $mainMod SHIFT, P, exec, grimblast --freeze copysave output /tmp/screenshot; mv /tmp/screenshot ~/$(rofi -dmenu -l 0 -p "Screenshot filename:" < /dev/null).png
bind = $mainMod CONTROL SHIFT, P, exec, grimblast --freeze copysave screen /tmp/screenshot; mv /tmp/screenshot ~/$(rofi -dmenu -l 0 -p "Screenshot filename:" < /dev/null).png
# Launch menu scripts with Super-D keychord
bind = $mainMod, D, exec, hyprctl dispatch submap menu-submap; sleep 2; hyprctl dispatch submap reset
submap = menu-submap
bind = ,M, exec, menu-man
bind = ,M, submap, reset
bind = ,O, exec, menu-wpio sink
bind = ,O, submap, reset
bind = ,I, exec, menu-wpio source
bind = ,I, submap, reset
bind = ,L, exec, hyprmonitors menu
bind = ,L, submap, reset
bind = ,P, exec, menu-pass
bind = ,P, submap, reset
submap = reset
# Hide waybar
bind = $mainMod, B, exec, pkill -SIGUSR1 waybar
# Kill commands
bind = $mainMod CONTROL SHIFT, Q, exit,
bind = $mainMod, Q, killactive,
# Change gaps
binde = $mainMod, Z, exec, hyprgaps -i 3
binde = $mainMod, X, exec, hyprgaps -d 3
bind = $mainMod, A, exec, hyprgaps -t
bind = $mainMod SHIFT, A, exec, hyprgaps -r
# Master stack movement commands
bind = $mainMod, J, layoutmsg, cyclenext
bind = $mainMod SHIFT, J, layoutmsg, swapnext
bind = $mainMod, K, layoutmsg, cycleprev
bind = $mainMod SHIFT, K, layoutmsg, swapprev
bind = $mainMod SHIFT, L, splitratio, +0.05
bind = $mainMod SHIFT, H, splitratio, -0.05
# Changing number of masters
bind = $mainMod, O, layoutmsg, addmaster
bind = $mainMod SHIFT, O, layoutmsg, removemaster
# Change tiling direction
bind = $mainMod, T, layoutmsg, orientationleft
bind = $mainMod SHIFT, T, layoutmsg, orientationtop
# Special windows
bind = $mainMod, F, togglefloating,
bind = $mainMod SHIFT, F, fakefullscreen
bind = $mainMod, S, togglespecialworkspace, magic
bind = $mainMod SHIFT, S, movetoworkspace, special:magic
# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, exec, hyprdwm goto 1
bind = $mainMod, 2, exec, hyprdwm goto 2
bind = $mainMod, 3, exec, hyprdwm goto 3
bind = $mainMod, 4, exec, hyprdwm goto 4
bind = $mainMod, 5, exec, hyprdwm goto 5
bind = $mainMod, 6, exec, hyprdwm goto 6
bind = $mainMod, 7, exec, hyprdwm goto 7
bind = $mainMod, 8, exec, hyprdwm goto 8
bind = $mainMod, 9, exec, hyprdwm goto 9
bind = $mainMod, 0, exec, hyprdwm goto 10
# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, exec, hyprdwm moveto 1
bind = $mainMod SHIFT, 2, exec, hyprdwm moveto 2
bind = $mainMod SHIFT, 3, exec, hyprdwm moveto 3
bind = $mainMod SHIFT, 4, exec, hyprdwm moveto 4
bind = $mainMod SHIFT, 5, exec, hyprdwm moveto 5
bind = $mainMod SHIFT, 6, exec, hyprdwm moveto 6
bind = $mainMod SHIFT, 7, exec, hyprdwm moveto 7
bind = $mainMod SHIFT, 8, exec, hyprdwm moveto 8
bind = $mainMod SHIFT, 9, exec, hyprdwm moveto 9
bind = $mainMod SHIFT, 9, exec, hyprdwm moveto 10
# Moving windows between monitors
bind = $mainMod SHIFT, COMMA, movewindow, mon:l
bind = $mainMod SHIFT, LEFT, movewindow, mon:l
bind = $mainMod SHIFT, PERIOD, movewindow, mon:r
bind = $mainMod SHIFT, RIGHT, movewindow, mon:r
# Moving focus between monitors
bind = $mainMod, COMMA, exec, hyprctl dispatch focusmonitor l
bind = $mainMod, LEFT, exec, hyprctl dispatch focusmonitor l
bind = $mainMod, PERIOD, exec, hyprctl dispatch focusmonitor r
bind = $mainMod, RIGHT, exec, hyprctl dispatch focusmonitor r
# Scroll through existing workspaces with mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
exec-once = startw

View file

@ -0,0 +1,109 @@
version = "1.1.11"
[format]
# Deduplicate icons if enable.
# A superscripted counter will be added.
# dedup = false
# dedup_inactive_fullscreen = false # dedup more
# window delimiter
delim = ""
# available formatter:
# {counter_sup} - superscripted count of clients on the workspace, and simple {counter}, {delim}
# {icon}, {client}
# workspace formatter
workspace = "{id}:{delim}{clients}" # {id}, {delim} and {clients} are supported
# workspace_empty = "{id}" # {id}, {delim} and {clients} are supported
# client formatter
# client = "{icon}"
# client_active = "*{icon}*"
# deduplicate client formatter
# client_fullscreen = "[{icon}]"
# client_dup = "{client}{counter_sup}"
# client_dup_fullscreen = "[{icon}]{delim}{icon}{counter_unfocused}"
# client_dup_active = "*{icon}*{delim}{icon}{counter_unfocused}"
[class]
# Add your icons mapping
# use double quote the key and the value
# take class name from 'hyprctl clients'
"DEFAULT" = "{class}"
"(?i)Kitty" = " "
"(?i)foot" = " "
"(?i)st" = " "
"(?i)mpv" = " "
"[Ff]irefox" = " "
"(?i)slack" = "󰒱 "
"(?i)discord" = "󰊴 "
"(?i)spotify" = " "
"(?i)chromium" = " "
"(?i)emacs" = " "
"(?i)steam" = " "
"(?i)zathura" = " "
"(?i)Anki" = " "
"(?i)libreoffice-writer" = "󰷈 "
"(?i)blueman-manager-wrapped" = " "
# [class_active]
# DEFAULT = "*{icon}*"
# "(?i)ExampleOneTerm" = "<span foreground='red'>{icon}</span>"
# [initial_class]
# "DEFAULT" = "test"
# "(?i)Kitty" = "term"
# [initial_class_active]
# "(?i)Kitty" = "*TERM*"
[title_in_class."(?i)kitty"]
"(?i)neomutt" = "neomutt"
[title_in_class."(?i)foot"]
"(?i)nvim" = "nvim"
"(?i)neovim" = "neovim"
# regex captures support is supported
# "emerge: (.+?/.+?)-.*" = "{match1}"
[title_in_class_active."(?i)firefox"]
"(?i)twitch" = "<span color='purple'>{icon}</span>"
# [title_in_initial_class."(?i)kitty"]
# "(?i)neomutt" = "neomutt"
# [initial_title_in_class."(?i)kitty"]
# "(?i)neomutt" = "neomutt"
# [initial_title_in_initial_class."(?i)kitty"]
# "(?i)neomutt" = "neomutt"
# [initial_title."(?i)kitty"]
# "zsh" = "Zsh"
# [initial_title_active."(?i)kitty"]
# "zsh" = "*Zsh*"
# Add your applications that need to be exclude
# The key is the class, the value is the title.
# You can put an empty title to exclude based on
# class name only, "" make the job.
[exclude]
"" = "^$" # prevent displaying icon for empty class
"(?i)fcitx" = ".*" # will match all title for fcitx
"(?i)TestApp" = "" # will match all title for TestApp
aProgram = "^$" # will match null title for aProgram
"[Ss]team" = "^(Friends List.*)?$" # will match Steam friends list plus all popups (empty titles)
[workspaces_name]
0 = "zero"
1 = "one"
2 = "two"
3 = "three"
4 = "four"
5 = "five"
6 = "six"
7 = "seven"
8 = "eight"
9 = "nine"
10 = "ten"

0
misc/.config/ipython/.gitignore vendored Normal file
View file

View file

@ -0,0 +1,9 @@
profile default {
output eDP-1 enable position 0,0
}
profile dual-monitor-main {
output eDP-1 enable position 0,600
output DP-3 enable mode 1920x1080@143.856003Hz position 1920,0
}

4
misc/.config/lf/cleaner Executable file
View file

@ -0,0 +1,4 @@
#!/usr/bin/env sh
ueberzug cmd -s $UB_SOCKET -a remove -i PREVIEW

370
misc/.config/lf/icons Normal file
View file

@ -0,0 +1,370 @@
# vim:ft=conf
# These examples require Nerd Fonts or a compatible font to be used.
# See https://www.nerdfonts.com for more information.
# default values from lf (with matching order)
# ln l # LINK
# or l # ORPHAN
# tw t # STICKY_OTHER_WRITABLE
# ow d # OTHER_WRITABLE
# st t # STICKY
# di d # DIR
# pi p # FIFO
# so s # SOCK
# bd b # BLK
# cd c # CHR
# su u # SETUID
# sg g # SETGID
# ex x # EXEC
# fi - # FILE
# file types (with matching order)
ln  # LINK
or  # ORPHAN
tw t # STICKY_OTHER_WRITABLE
st t # STICKY
# ow  # OTHER_WRITABLE
# di  # DIR
# ow  # OTHER_WRITABLE
# di  # DIR
ow 󰝰 # OTHER_WRITABLE
di 󰝰 # DIR
pi p # FIFO
so 󰡂 # SOCK
bd b # BLK
cd c # CHR
su u # SETUID
sg g # SETGID
ex  # EXEC
fi  # FILE
# file extensions (vim-devicons)
*.styl 
*.sass 
*.scss 
*.htm 
*.html 
*.slim 
*.haml 
*.ejs 
*.css 
*.less 
*.md 
*.mdx 
*.markdown 
*.rmd 
*.json 
*.webmanifest 
*.js 
*.mjs 
*.jsx 
*.rb 
*.gemspec 
*.rake 
*.php 
*.py 
*.pyc 
*.pyo 
*.pyd 
*.coffee 
*.mustache 
*.hbs 
*.conf 
*.ini 
*.yml 
*.yaml 
*.toml 
*.bat 
*.mk 
*.twig 
*.cpp 
*.c++ 
*.cxx 
*.cc 
*.cp 
*.c 
*.cs 󰌛
*.h 
*.hh 
*.hpp 
*.hxx 
*.hs 
*.lhs 
*.nix 
*.lua 
*.java 
*.sh 
*.fish 
*.bash 
*.zsh 
*.ksh 
*.csh 
*.awk 
*.ps1 
*.ml λ
*.mli λ
*.diff 
*.db 
*.sql 
*.dump 
*.clj 
*.cljc 
*.cljs 
*.edn 
*.scala 
*.go 
*.dart 
*.xul 
*.sln 
*.suo 
*.pl 
*.pm 
*.t 
*.rss 
'*.f#' 
*.fsscript 
*.fsx 
*.fs 
*.fsi 
*.rs 
*.rlib 
*.d 
*.erl 
*.hrl 
*.ex 
*.exs 
*.eex 
*.leex 
*.heex 
*.vim 
*.ai 
*.psd 
*.psb 
*.ts 
*.tsx 
*.jl 
*.pp 
*.vue 
*.elm 
*.swift 
*.xcplayground 
*.tex 󰙩
*.r 󰟔
*.rproj 󰗆
*.sol 󰡪
# file names (vim-devicons) (case-insensitive not supported in lf)
*gruntfile.coffee 
*gruntfile.js 
*gruntfile.ls 
*gulpfile.coffee 
*gulpfile.js 
*gulpfile.ls 
*mix.lock 
*dropbox 
*.ds_store 
*.gitconfig 
*.gitignore 
*.gitattributes 
*.gitlab-ci.yml 
*.bashrc 
*.zshrc 
*.zshenv 
*.zprofile 
*.vimrc 
*.gvimrc 
*_vimrc 
*_gvimrc 
*.bashprofile 
*favicon.ico 
*license 
*node_modules 
*react.jsx 
*procfile 
*dockerfile 
*docker-compose.yml 
*rakefile 
*config.ru 
*gemfile 
*makefile 
*cmakelists.txt 
*robots.txt 󰚩
# file names (case-sensitive adaptations)
*Gruntfile.coffee 
*Gruntfile.js 
*Gruntfile.ls 
*Gulpfile.coffee 
*Gulpfile.js 
*Gulpfile.ls 
*Dropbox 
*.DS_Store 
*LICENSE 
*React.jsx 
*Procfile 
*Dockerfile 
*Docker-compose.yml 
*Rakefile 
*Gemfile 
*Makefile 
*CMakeLists.txt 
# file patterns (vim-devicons) (patterns not supported in lf)
# .*jquery.*\.js$ 
# .*angular.*\.js$ 
# .*backbone.*\.js$ 
# .*require.*\.js$ 
# .*materialize.*\.js$ 
# .*materialize.*\.css$ 
# .*mootools.*\.js$ 
# .*vimrc.* 
# Vagrantfile$ 
# file patterns (file name adaptations)
*jquery.min.js 
*angular.min.js 
*backbone.min.js 
*require.min.js 
*materialize.min.js 
*materialize.min.css 
*mootools.min.js 
*vimrc 
Vagrantfile 
# archives or compressed (extensions from dircolors defaults)
*.tar 
*.tgz 
*.arc 
*.arj 
*.taz 
*.lha 
*.lz4 
*.lzh 
*.lzma 
*.tlz 
*.txz 
*.tzo 
*.t7z 
*.zip 
*.z 
*.dz 
*.gz 
*.lrz 
*.lz 
*.lzo 
*.xz 
*.zst 
*.tzst 
*.bz2 
*.bz 
*.tbz 
*.tbz2 
*.tz 
*.deb 
*.rpm 
*.jar 
*.war 
*.ear 
*.sar 
*.rar 
*.alz 
*.ace 
*.zoo 
*.cpio 
*.7z 
*.rz 
*.cab 
*.wim 
*.swm 
*.dwm 
*.esd 
# image formats (extensions from dircolors defaults)
*.gif  # Lossless
*.bmp 
*.png 
*.tiff 
*.webp 
*.jpg  # Lossy
*.jpeg 
*.mjpg 
*.mjpeg 
*.pbm 
*.pgm 
*.ppm 
*.tga 
*.xbm 
*.xpm 
*.tif 
*.svg 
*.svgz 
*.mng 
*.pcx 
# Video formats
*.mov 
*.mpg 
*.mpeg 
*.m2v 
*.mkv 
*.webm 
*.ogm 
*.mp4 
*.m4v 
*.mp4v 
*.vob 
*.qt 
*.nuv 
*.wmv 
*.asf 
*.rm 
*.rmvb 
*.flc 
*.avi 
*.fli 
*.flv 
*.gl 
*.dl 
*.xcf 
*.xwd 
*.yuv 
*.cgm 
*.emf 
*.ogv 
*.ogx 
# audio formats (extensions from dircolors defaults)
*.aac 
*.au 
*.flac 
*.m4a 
*.mid 
*.midi 
*.mka 
*.mp3 
*.mpc 
*.ogg 
*.ra 
*.wav 
*.oga 
*.opus 
*.spx 
*.xspf 
# other formats
*.pdf 
*.tpy 󰙩
*.iso 
*.org 
*.ovpn 󰳌
*.txt 
*.pptx 󰈩
*.docx 
*.doc 
*.odt 
*.odg 󰽉
*.csv 
*.ics 
*.typ 󰙩

206
misc/.config/lf/lfrc Normal file
View file

@ -0,0 +1,206 @@
#!/usr/bin/env zsh
# https://github.com/gokcehan/lf/blob/master/doc.md
# ^ List of all options
## LF VARS
set shellopts '-eu' # Treat undefined env vars as errors. Exit upon error.
set ifs "\n"
set scrolloff 10
set icons # Use icons
set info "size"
set period 1 # Poll directory status every X seconds
set sixel true
set hiddenfiles ".*:*.aux:*.log:*.bbl:*.bcf:*.blg:*.run.xml"
set cleaner '~/.config/lf/cleaner' # Clear preview
set previewer '~/.config/lf/previewer' # Make preview
set autoquit true
set cursorpreviewfmt "" # No cursor in the directory preview pane
# set cursoractivefmt "\033[1m"
set drawbox true
## MAPPINGS
# LF control mappings
map <c-r> reload
map <c-s> set hidden!
map <enter> shell
# Spawn new terminal/lf windows
map <a-enter> $setsid -f $TERMINAL -e $SHELL >/dev/null 2>&1 &
map <a-e> $setsid -f $TERMINAL -e $SHELL -c -i "lfcd && exec $SHELL" >/dev/null 2>&1 &
# Opening commands
map l open
map L open new_window
map o $mimeopen --ask "$f"
# CRUD commands
# map D delete
map D push :delete?<space>[y/N]:<space>
map N push :mkdir<space>
map n push :touch<space>
map x push :chmod<space>
map U push :extract?<space>[y/N]:<space>
map Y $printf "%s" "$fx" | xclip -selection clipboard
# Renaming commands
map A :rename; cmd-end # at the very end
map a :rename; cmd-right # after extension
map r push A<c-u> # new rename
map i :rename # before extension
map I :rename; cmd-home # at the very beginning
map R drag-and-drop
# Fuzzy finding
map <c-f> $lf -remote "send $id select \"$(fzf)\""
map F broot_jump
map b set_bg one
map B set_bg all
## COMMAND DEFINITIONS
cmd touch %touch $1 && lf -remote "send $id load" && lf -remote "send $id select $1"
cmd mkdir %mkdir $1 && lf -remote "send $id load" && lf -remote "send $id select $1"
cmd chmod %chmod $1 "$fx" && lf -remote "send $id reload"
cmd delete? ${{
[ -v 2 ] || exit 0 # Makes sure argument was passed in
[ ! "$2" = "y" ] && exit 0 # Exit if delete not confirmed
rm -rf -- $fx
}}
cmd set_bg ${{
if [ -z "$(pidof Hyprland)" ]; then
rm -f ~/.config/wallpaper
cp "$fx" ~/.config/wallpaper
feh --bg-fill --no-fehbg "$HOME/.config/wallpaper"
exit
fi
if [ "$1" = "all" ]; then
swww img "$fx"
else
output="$(slurp -o -f "%o")"
swww img "$fx" --outputs "$output"
fi
}}
cmd drag-and-drop ${{
GKD_BACKEND=11 setsid -f dragon "$fx" >/dev/null 2>&1
}}
cmd extract? ${{
[ -v 2 ] || exit 0 # Makes sure argument was passed in
[ ! "$2" = "y" ] && exit 0 # Exit if delete not confirmed
case $(file --mime-type "$(readlink -f $f)" -b) in
application/x-rar)
unrar x $fx
;;
*)
aunpack $fx
;;
esac
}}
cmd broot_jump ${{
f=$(mktemp)
res="$(broot --outcmd $f && cat $f | sed 's/cd //')"
rm -f "$f"
if [ -f "$res" ]; then
cmd="select"
elif [ -d "$res" ]; then
cmd="cd"
fi
lf -remote "send $id $cmd \"$res\""
}}
cmd open ${{
# Set $new_window based on arguments
[ ! -z $@ ] && [ "$@" = "new_window" ] && new_window=1
function launch {
[ -v WAYLAND_DISPLAY ] && swallower="swallow" || swallower="devour"
if [ ! -v new_window ]; then
$swallower "$@" >/dev/null 2>&1
else
setsid -f "$@" >/dev/null 2>&1
fi
}
case $(file --mime-type "$(readlink -f $f)" -b) in
application/json|\
application/x-subrip|\
application/pgp-encrypted|\
inode/x-empty|\
text/*)
case "${f##*.}" in
org|typ)
# Any "document" like file ought to be in emacs
launch emacsclient -c "$fx"
exit
;;
esac
[ -v new_window ] \
&& ($TERMINAL -e $SHELL -c "$EDITOR \"$fx\"" >/dev/null 2>&1 &) \
|| ($EDITOR "$fx")
;;
audio/*|video/x-ms-asf)
launch mpv --audio-display=no "$f"
;;
video/*)
launch mpv -quiet "$f"
;;
application/epub*|\
application/octet-stream|\
application/pdf|\
application/postscript|\
application/vnd.djvu|\
image/vnd.djvu)
launch zathura "$fx"
;;
image/*)
find . -maxdepth 1 -type f -exec file -i {} \; |
grep -E 'image/.*' |
awk -F: '{ print substr($0, 1, length($0) - length($NF) - 1) }' |
rotdir $f |
launch nsxiv -aio |
while read -r file; do
[ -z "$file" ] && continue
lf -remote "send select \"$file\""
lf -remote "send toggle"
done &
;;
application/msword|\
application/octet-stream|\
application/vnd.ms-powerpoint|\
application/vnd.oasis.opendocument.database|\
application/vnd.oasis.opendocument.formula|\
application/vnd.oasis.opendocument.graphics|\
application/vnd.oasis.opendocument.graphics-template|\
application/vnd.oasis.opendocument.presentation|\
application/vnd.oasis.opendocument.presentation-template|\
application/vnd.oasis.opendocument.spreadsheet|\
application/vnd.oasis.opendocument.spreadsheet-template|\
application/vnd.oasis.opendocument.text|\
application/vnd.openxmlformats-officedocument.presentationml.presentation|\
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet|\
application/vnd.openxmlformats-officedocument.wordprocessingml.document)
launch libreoffice "$fx"
;;
*)
;;
esac
}}
cmd open_new_window ${{
new_window=1 && cmd open
}}

57
misc/.config/lf/previewer Executable file
View file

@ -0,0 +1,57 @@
#!/usr/bin/env sh
function sixel_compat() {
case "$TERM" in
"st-256color")
echo "y"
;;
*)
echo ""
;;
esac
}
image() {
chafa $([ -z "$(sixel_compat)" ] || echo "-f sixel") -s "$2x$3" --animate false "$1"
exit 1
}
CACHE="$HOME/.cache/lf/thumbnail.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | awk '{print $1}'))"
case "$(file --dereference --brief --mime-type -- "$1")" in
image/*)
image "$1" "$2" "$3" "$4" "$5" "$1"
;;
application/json|\
text/*|\
*/xml)
bat -p --terminal-width "$(($4-2))" -f "$1"
;;
audio/*|\
application/octet-stream)
mediainfo "$1" || exit 1
;;
video/* )
CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/lf/thumb.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | cut -d' ' -f1)"
[ ! -f "$CACHE" ] && ffmpegthumbnailer -i "$1" -o "$CACHE" -s 0
image "$CACHE" "$2" "$3" "$4" "$5" "$1"
;;
*/pdf)
CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/lf/thumb.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | cut -d' ' -f1)"
[ ! -f "$CACHE.jpg" ] && pdftoppm -jpeg -f 1 -singlefile "$1" "$CACHE" && convert "$CACHE.jpg" -negate "$CACHE.jpg"
image "$CACHE.jpg" "$2" "$3" "$4" "$5" "$1"
;;
application/*zip)
atool --list -- "$1"
;;
*opendocument*)
odt2txt "$1"
;;
application/pgp-encrypted) gpg -d -- "$1" ;;
*)
file -ibL "$1" | grep -q text && cat "$1" || file -Lb "$1"
;;
esac
exit 0

View file

@ -0,0 +1,32 @@
{ config, pkgs, ... }:
{
imports = [
# Do not remove
./core.nix
# Want this for bare metal
# ./hardware-configuration.nix
# Specific profiles for this machine
# ./profiles/lf.nix
# ./profiles/nvim.nix
# ./profiles/desktop_x.nix
];
networking.hostName = "nix";
time.timeZone = "America/New_York";
# Define a user account. Don't forget to set a password with passwd.
users.users.nixos = {
isNormalUser = true;
extraGroups = [ # User implicitly in "users" group
"wheel" # Sudo priviledges
];
shell = pkgs.zsh;
# Set so when mutableUsers is set to "false", the user still has a way to login.
password = "";
};
}

222
misc/.config/nixos/core.nix Normal file
View file

@ -0,0 +1,222 @@
{ config, pkgs, ... }:
{
# Nix settings
nix = {
package = pkgs.nixFlakes;
settings.auto-optimise-store = true;
gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 7d";
};
extraOptions = ''
experimental-features = nix-command flakes
'';
};
# Files to add to /etc
environment.etc = {
"zshenv.local".text = ''
export ZDOTDIR="$HOME/.config/zsh"
'';
};
environment.pathsToLink = [
"/share"
];
i18n.defaultLocale = "en_US.UTF-8";
fonts.packages = with pkgs; [
# The nerdfonts package does not allow the installation of only the
# Symbols Nerd Font. Also, the "mono" (actually double wide)
# version of this font centers the symbols which is nice.
nur.repos.bandithedoge.symbols-nerd-font
hack-font
fira-code
];
networking.networkmanager.enable = true;
# Bluetooth daemon
services.blueman.enable = true;
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = true;
# Audio daemon
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
};
# Udev service
services.udev = {
# Allows member of the "video" group to change system backlight
extraRules = ''
ACTION=="add", SUBSYSTEM=="backlight", RUN+="${pkgs.coreutils}/bin/chgrp video %S%p/brightness", RUN+="${pkgs.coreutils}/bin/chmod g+w %S%p/brightness"
'';
path = [ pkgs.coreutils ]; # For chgrp
};
# Misc services
services.udisks2.enable = true; # USB Mounting
# services.printing.enable = true; # CUPS
# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.
programs = {
gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
nix-ld.enable = true; # Run unpatched binaries
zsh.enable = true;
};
virtualisation.docker.enable = true;
# Define a user account. Don't forget to set a password with passwd.
users = {
mutableUsers = true;
users.root = {
# Disables root login, since nothing can hash to "!". Requires setting mutableUsers to "false",
# rebuilding, and then setting mutableUsers back to "true".
hashedPassword = "!";
};
};
documentation = {
# Pull in extra documentation/manpages
dev.enable = true;
# Allow whatis, apropos, and man -k to work, but breaks mandb
man.generateCaches = true;
};
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
# General programs that I like and use
bluetuith # TUI bluetooth manager
bear # Generate Clang compilation database
devour # Opens new program on top of terminal
distrobox # Easily spin up VMs of other distos
docker # Containerization
entr # Hooks for file changes
expect # Provides `unbuffer`
ffmpeg
git # Imagine not having this
grc # Generic command output colorizer
htop-vim # Process monitor, with vim bindings
imagemagick # Image conversion/processing tool
jq # Commandline JSON processor
killall # Easy way to kill a process
man-pages # Documentation
man-pages-posix # Documentation
neofetch # Aesthetic sysinfo
pass-nodmenu # CLI password store (without dmenu dependency)
pinentry-curses # Terminal-based pinentry program
python311 # Python
socat # Interact with sockets
tldr # Brief info about a command
tmux # Terminal multiplexor
udisks # Good way of dealing with USBs and similar media
# Shell
starship # Universal shell prompt
zsh
zsh-autocomplete
zsh-autosuggestions
zsh-nix-shell # Use zsh for nix build shell
zsh-syntax-highlighting # Shell syntax highlighting
# Silly programs
asciiquarium
bsdgames # Fun collection of command-line games
neo-cowsay # The cow says moo
sl # Choo choo
# Some nix specific stuff
nil # Nix LSP
nix-index # See which packages source a file
nix-output-monitor # Track dependency graph during builds
nix-prefetch-git # Like nix-prefetch-url, but for git
nvd # See diffs between builds
# Pop into an environment abiding by the Filesystem Hierarchy Standard to run
# applications which do not play nicely with NixOS.
(
let
fhs-run = pkgs.buildFHSUserEnv {
name = "fhs-run";
targetPkgs = pkgs: [];
multiPkgs = pkgs: [ pkgs.dpkg ];
runScript = pkgs.writeScript "init.sh" ''
echo "fhs-run" >> $out/etc/hostname # Give shell a hostname
eval "$@" # Execute whatever arguments
'';
};
in
fhs-run
)
# Defining an environment to run "make" with the proper libraries installed
# "make", in the main environment, references the script, which envokes the
# environment, and passes the args to gnumake.
(
let
make-shell = pkgs.buildEnv {
name = "make-shell";
paths = with pkgs; [
# Tools
gnumake
pkg-config
# Libraries
harfbuzz
xorg.libX11.dev
xorg.libXft
xorg.libXinerama
];
};
in
(pkgs.writeScriptBin "make" ''
#!/usr/bin/env sh
nix-shell -p ${make-shell} --run "make $*"
'')
)
];
nixpkgs.overlays = [
(self: super: {
asciiquarium = super.asciiquarium.overrideAttrs (oa: {
src = pkgs.fetchgit {
url = "https://github.com/nothub/asciiquarium";
rev = "204090ff4c97b2e00cd67f26b1a37ca7accd4f95";
hash = "sha256-0Y0bcsa6GfP/A+gZe6o94WNWfQNHVEtMZfMuvWVBu0c=";
};
});
})
];
nixpkgs.config.packageOverrides = pkgs: {
nur = import (builtins.fetchTarball "https://github.com/nix-community/NUR/archive/master.tar.gz") {
inherit pkgs;
};
};
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. It's perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "23.05"; # Did you read the comment?
}

View file

@ -0,0 +1,19 @@
{ config, lib, pkgs, modulesPath, ... }:
{
environment.systemPackages = with pkgs; [
emacs29-pgtk # Transparency on Wayland requires Pure GTK
# Misc
ispell # Spellchecker
fd # Find entries in filesystem. Helps doom emacs run faster.
# For vterm
cmake
libtool
## LSPs
nodePackages.pyright
];
}

View file

@ -0,0 +1,22 @@
{ config, pkgs, ... }:
{
i18n = {
inputMethod = {
# Have to install fcitx5 through here so that the binary is patched to be able to see the addons.
# If also installed through system packages, the binary without addonds will take precedence.
enabled = "fcitx5";
fcitx5.addons = with pkgs; [
fcitx5-configtool
fcitx5-rime
fcitx5-chinese-addons
];
};
};
fonts.packages = with pkgs; [
source-han-sans
source-han-serif
];
}

View file

@ -0,0 +1,27 @@
{ config, pkgs, ... }:
{
environment.systemPackages = with pkgs; [
lf
atool # Provides aunpack, to open archives. Also can list archive contents.
bat # A prettified 'cat'
broot # A slicker fzf
chafa # Display images in the terminal (supports sixel)
ffmpegthumbnailer # Get thumbnails of videos
file # Get information about a specific file
fzf # Fuzzy finder. Might fully replace with broot
imagemagick # Image conversion/processing tool
mediainfo # Get info about media
mpv # Audio and video player
nsxiv # Image viewer
odt2txt # Convert open documents to text
perl536Packages.FileMimeInfo # Provides mimeopen, to ask what program to open files in
poppler_utils # Provides pdftoppm, to turn pdfs into images
unrar-wrapper # Extract .rar files
xclip # Copy file name to clip
xdragon # Drag and drop utility
zathura # PDF viewer
];
}

View file

@ -0,0 +1,7 @@
{ config, pkgs, ... }:
{
environment.systemPackages = with pkgs; [
];
}

View file

@ -0,0 +1,17 @@
{ config, pkgs, ... }:
{
environment.systemPackages = with pkgs; [
neovim
# LSPs
clang-tools
lua-language-server
# Misc
ripgrep # Used by telescope
gcc
unzip
];
}

View file

@ -0,0 +1,11 @@
{ config, pkgs, ... }:
{
virtualisation.docker.enable = true;
virtualisation.docker.storageDriver = "btrfs";
# Implicitly downloads virtualbox
virtualisation.virtualbox.host.enable = true;
users.extraGroups.vboxusers.members = [ "user-with-access-to-virtualbox" ];
}

View file

@ -0,0 +1,69 @@
{ config, pkgs, ... }:
{
security.sudo.extraConfig = ''
%wheel ALL=(ALL:ALL) NOPASSWD: ${pkgs.systemd}/bin/systemctl restart autorandr
'';
# X Server
services.xserver = {
enable = true;
autorun = false;
autoRepeatDelay = 300;
autoRepeatInterval = 50;
# Configure keymap in X11
layout = "us";
xkbOptions = "eurosign:e,caps:escape";
# Touchpad stuff
libinput = {
enable = true;
touchpad.naturalScrolling = true;
};
displayManager = {
lightdm.enable = false;
startx.enable = true;
};
windowManager.dwm.enable = true;
};
# Monitor switching service. Allow users to restart the service without password
services.autorandr.enable = true;
environment.systemPackages = with pkgs; [
arandr # Visually move relative positions of monitors
autorandr # Save and load xrandr profiles
blueman # Bluetooth manager
dunst # Notification daemon
dwmblocks # Suckless statusbar for DWM
dwm # Suckless tiling window manager
feh # Image viewer I use for background setting
firefox # My browser of choice
libnotify # Send messages to notification daemon
libreoffice # MSOffice btfo
maim # Screenshot utility
picom # X Compositor
pinentry-rofi # Rofi frontend for pinentry program
rofi # Menu prompt program
rofi-pass # Rofi frontend for password store
st # Suckless terminal
sxhkd # Hotkey daemon
texlive.combined.scheme-full # LaTeX to create documents
typst # Cool, minimal LaTeX alternative
ungoogled-chromium # If I need a special chrome feature
xsecurelock # Session locker
# GTK Themes
lxappearance-gtk2 # Theme switcher
gruvbox-dark-gtk
# X tools
xorg.xauth
xclip
];
}

View file

@ -0,0 +1,84 @@
{ config, pkgs, ... }:
{
# Or else swaylock will not accept correct password
security.pam.services.swaylock = {};
programs = {
hyprland = { # Dynamic tiling window manager
enable = true;
enableNvidiaPatches = true;
xwayland.enable = true;
};
waybar.enable = true; # Status bar
};
systemd.user.services = {
hyprland-autoname-workspaces = {
description = "Hyprland-autoname-workspaces as systemd service";
wantedBy = [ "graphical-session.target" ];
partOf = [ "graphical-session.target" ];
script = "${pkgs.hyprland-autoname-workspaces}/bin/hyprland-autoname-workspaces";
};
network-manager-applet = {
description = "Start the network manager applet";
wantedBy = [ "default.target" ];
serviceConfig.Type = "forking";
serviceConfig.Restart = "always";
serviceConfig.RestartSec = 2;
serviceConfig.ExecStart = "${pkgs.networkmanagerapplet}/bin/nm-applet";
};
};
environment.systemPackages = with pkgs; [
blueman # Bluetooth manager
dunst # Notification daemon
eww-wayland
firefox # My browser of choice
foot # Wayland native terminal
gobble # Wayland alternative to devour
grim # Screenshot tool
grimblast # Allows freezing screen
hicolor-icon-theme # Icons
hyprland-autoname-workspaces
hyprpaper
kanshi # Autorandr substitute
libnotify # Send messages to notification daemon
libreoffice # MSOffice btfo
networkmanagerapplet # Wifi dropdown menu
pinentry-rofi # Rofi frontend for pinentry program
pyprland # Plugin manager for Hyprland
rofi # Menu prompt program
rofi-pass # Rofi frontend for password store
slurp # Screen selection utility
swaylock # Wayland session locker
swww # Sets background images
texlive.combined.scheme-full # LaTeX to create documents
typst # Cool, minimal LaTeX alternative
ungoogled-chromium # If I need a special chrome feature
wayland-utils
wdisplays # Arnadr substitute
wl-clipboard # Copy/paste utility
wlr-randr # Xrandr substitute
# GTK Themes
lxappearance-gtk2 # Theme switcher
gruvbox-dark-gtk
# Specific versions of packages
(import (builtins.fetchTarball {
url = "https://github.com/NixOS/nixpkgs/archive/9957cd48326fe8dbd52fdc50dd2502307f188b0d.tar.gz";
}) {}).hyprpicker # v0.1.1. Current verison causes segfault.
];
nixpkgs.overlays = [
(self: super: {
grimblast = super.grimblast.override (oa: {
hyprpicker = (import (builtins.fetchTarball {
url = "https://github.com/NixOS/nixpkgs/archive/9957cd48326fe8dbd52fdc50dd2502307f188b0d.tar.gz";
}) {}).hyprpicker; # v0.1.1. Current verison causes segfault.
});
})
];
}

View file

@ -0,0 +1,4 @@
{
allowUnfree = true;
}

4
misc/.config/npm/npmrc Normal file
View file

@ -0,0 +1,4 @@
prefix=${XDG_DATA_HOME}/npm
cache=${XDG_CACHE_HOME}/npm
init-module=${XDG_CONFIG_HOME}/npm/config/npm-init.js

View file

@ -0,0 +1,425 @@
#################################
# Shadows #
#################################
# Enabled client-side shadows on windows. Note desktop windows
# (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow,
# unless explicitly requested using the wintypes option.
#
# shadow = false
shadow = false;
# The blur radius for shadows, in pixels. (defaults to 12)
# shadow-radius = 12
shadow-radius = 12;
# The opacity of shadows. (0.0 - 1.0, defaults to 0.75)
# shadow-opacity = .75
# The left offset for shadows, in pixels. (defaults to -15)
# shadow-offset-x = -15
shadow-offset-x = -7;
# The top offset for shadows, in pixels. (defaults to -15)
# shadow-offset-y = -15
shadow-offset-y = -7;
# Red color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-red = 0
# Green color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-green = 0
# Blue color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-blue = 0
# Hex string color value of shadow (#000000 - #FFFFFF, defaults to #000000). This option will override options set shadow-(red/green/blue)
# shadow-color = "#000000"
# Specify a list of conditions of windows that should have no shadow.
#
# examples:
# shadow-exclude = "n:e:Notification";
#
# shadow-exclude = []
shadow-exclude = [
"name = 'Notification'",
"class_g = 'Conky'",
"class_g ?= 'Notify-osd'",
"class_g = 'Cairo-clock'",
"_GTK_FRAME_EXTENTS@:c"
];
# Specify a list of conditions of windows that should have no shadow painted over, such as a dock window.
# clip-shadow-above = []
# Specify a X geometry that describes the region in which shadow should not
# be painted in, such as a dock window region. Use
# shadow-exclude-reg = "x10+0+0"
# for example, if the 10 pixels on the bottom of the screen should not have shadows painted on.
#
# shadow-exclude-reg = ""
# Crop shadow of a window fully on a particular Xinerama screen to the screen.
# xinerama-shadow-crop = false
#################################
# Fading #
#################################
# Fade windows in/out when opening/closing and when opacity changes,
# unless no-fading-openclose is used.
# fading = false
fading = false;
# Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028)
# fade-in-step = 0.028
fade-in-step = 0.03;
# Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03)
# fade-out-step = 0.03
fade-out-step = 0.03;
# The time between steps in fade step, in milliseconds. (> 0, defaults to 10)
# fade-delta = 10
# Specify a list of conditions of windows that should not be faded.
# fade-exclude = []
# Do not fade on window open/close.
# no-fading-openclose = false
# Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc.
# no-fading-destroyed-argb = false
#################################
# Transparency / Opacity #
#################################
# Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0)
# inactive-opacity = 1
# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default)
# frame-opacity = 1.0
# Let inactive opacity set by -i override the '_NET_WM_WINDOW_OPACITY' values of windows.
# inactive-opacity-override = true
inactive-opacity-override = false;
# Default opacity for active windows. (0.0 - 1.0, defaults to 1.0)
# active-opacity = 1.0
# Dim inactive windows. (0.0 - 1.0, defaults to 0.0)
# inactive-dim = 0.0
# Specify a list of conditions of windows that should never be considered focused.
# focus-exclude = []
focus-exclude = [ "class_g = 'Cairo-clock'" ];
# Use fixed inactive dim value, instead of adjusting according to window opacity.
# inactive-dim-fixed = 1.0
# Specify a list of opacity rules, in the format `PERCENT:PATTERN`,
# like `50:name *= "Firefox"`. picom-trans is recommended over this.
# Note we don't make any guarantee about possible conflicts with other
# programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows.
# example:
# opacity-rule = [ "80:class_g = 'URxvt'" ];
#
# opacity-rule = []
#################################
# Corners #
#################################
# Sets the radius of rounded window corners. When > 0, the compositor will
# round the corners of windows. Does not interact well with
# `transparent-clipping`.
corner-radius = 0
# Exclude conditions for rounded corners.
rounded-corners-exclude = [
"window_type = 'dock'",
"window_type = 'desktop'"
];
#################################
# Background-Blurring #
#################################
# Parameters for background blurring, see the *BLUR* section for more information.
# blur-method =
blur-size = 12
blur-deviation = false
blur-strength = 50
# Blur background of semi-transparent / ARGB windows.
# Bad in performance, with driver-dependent behavior.
# The name of the switch may change without prior notifications.
#
blur-background = true
# Blur background of windows when the window frame is not opaque.
# Implies:
# blur-background
# Bad in performance, with driver-dependent behavior. The name may change.
#
blur-background-frame = false
# Use fixed blur strength rather than adjusting according to window opacity.
# blur-background-fixed = false
# Specify the blur convolution kernel, with the following format:
# example:
# blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1";
#
# blur-kern = ""
blur-kern = "7x7box";
# Exclude conditions for background blur.
# blur-background-exclude = []
blur-background-exclude = [
"window_type = 'dock'",
"window_type = 'desktop'",
"_GTK_FRAME_EXTENTS@:c"
];
#################################
# General Settings #
#################################
# Enable remote control via D-Bus. See the man page for more details.
# dbus = true
# Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers.
# daemon = false
# Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`.
# `xrender` is the default one.
#
# backend = "glx"
backend = "xrender";
# Enable/disable VSync.
# vsync = false
vsync = true;
# Enable remote control via D-Bus. See the *D-BUS API* section below for more details.
# dbus = false
# Try to detect WM windows (a non-override-redirect window with no
# child that has 'WM_STATE') and mark them as active.
#
# mark-wmwin-focused = false
mark-wmwin-focused = true;
# Mark override-redirect windows that doesn't have a child window with 'WM_STATE' focused.
# mark-ovredir-focused = false
mark-ovredir-focused = true;
# Try to detect windows with rounded corners and don't consider them
# shaped windows. The accuracy is not very high, unfortunately.
#
# detect-rounded-corners = false
detect-rounded-corners = true;
# Detect '_NET_WM_WINDOW_OPACITY' on client windows, useful for window managers
# not passing '_NET_WM_WINDOW_OPACITY' of client windows to frame windows.
#
# detect-client-opacity = false
detect-client-opacity = true;
# Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window,
# rather than listening to 'FocusIn'/'FocusOut' event. Might have more accuracy,
# provided that the WM supports it.
#
# use-ewmh-active-win = false
# Unredirect all windows if a full-screen opaque window is detected,
# to maximize performance for full-screen windows. Known to cause flickering
# when redirecting/unredirecting windows.
#
# unredir-if-possible = false
# Delay before unredirecting the window, in milliseconds. Defaults to 0.
# unredir-if-possible-delay = 0
# Conditions of windows that shouldn't be considered full-screen for unredirecting screen.
# unredir-if-possible-exclude = []
# Use 'WM_TRANSIENT_FOR' to group windows, and consider windows
# in the same group focused at the same time.
#
# detect-transient = false
detect-transient = true;
# Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same
# group focused at the same time. This usually means windows from the same application
# will be considered focused or unfocused at the same time.
# 'WM_TRANSIENT_FOR' has higher priority if detect-transient is enabled, too.
#
# detect-client-leader = false
# Resize damaged region by a specific number of pixels.
# A positive value enlarges it while a negative one shrinks it.
# If the value is positive, those additional pixels will not be actually painted
# to screen, only used in blur calculation, and such. (Due to technical limitations,
# with use-damage, those pixels will still be incorrectly painted to screen.)
# Primarily used to fix the line corruption issues of blur,
# in which case you should use the blur radius value here
# (e.g. with a 3x3 kernel, you should use `--resize-damage 1`,
# with a 5x5 one you use `--resize-damage 2`, and so on).
# May or may not work with *--glx-no-stencil*. Shrinking doesn't function correctly.
#
# resize-damage = 1
# Specify a list of conditions of windows that should be painted with inverted color.
# Resource-hogging, and is not well tested.
#
# invert-color-include = []
# GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer.
# Might cause incorrect opacity when rendering transparent content (but never
# practically happened) and may not work with blur-background.
# My tests show a 15% performance boost. Recommended.
#
glx-no-stencil = true;
# GLX backend: Avoid rebinding pixmap on window damage.
# Probably could improve performance on rapid window content changes,
# but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.).
# Recommended if it works.
#
# glx-no-rebind-pixmap = false
# Disable the use of damage information.
# This cause the whole screen to be redrawn every time, instead of the part of the screen
# has actually changed. Potentially degrades the performance, but might fix some artifacts.
# The opposing option is use-damage
#
# no-use-damage = false
use-damage = true;
# Use X Sync fence to sync clients' draw calls, to make sure all draw
# calls are finished before picom starts drawing. Needed on nvidia-drivers
# with GLX backend for some users.
#
# xrender-sync-fence = false
# GLX backend: Use specified GLSL fragment shader for rendering window
# contents. Read the man page for a detailed explanation of the interface.
#
# window-shader-fg = "default"
# Use rules to set per-window shaders. Syntax is SHADER_PATH:PATTERN, similar
# to opacity-rule. SHADER_PATH can be "default". This overrides window-shader-fg.
#
# window-shader-fg-rule = [
# "my_shader.frag:window_type != 'dock'"
# ]
# Force all windows to be painted with blending. Useful if you
# have a glx-fshader-win that could turn opaque pixels transparent.
#
# force-win-blend = false
# Do not use EWMH to detect fullscreen windows.
# Reverts to checking if a window is fullscreen based only on its size and coordinates.
#
# no-ewmh-fullscreen = false
# Dimming bright windows so their brightness doesn't exceed this set value.
# Brightness of a window is estimated by averaging all pixels in the window,
# so this could comes with a performance hit.
# Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. (default: 1.0)
#
# max-brightness = 1.0
# Make transparent windows clip other windows like non-transparent windows do,
# instead of blending on top of them.
#
# transparent-clipping = false
# Specify a list of conditions of windows that should never have transparent
# clipping applied. Useful for screenshot tools, where you need to be able to
# see through transparent parts of the window.
#
# transparent-clipping-exclude = []
# Set the log level. Possible values are:
# "trace", "debug", "info", "warn", "error"
# in increasing level of importance. Case doesn't matter.
# If using the "TRACE" log level, it's better to log into a file
# using *--log-file*, since it can generate a huge stream of logs.
#
# log-level = "debug"
log-level = "warn";
# Set the log file.
# If *--log-file* is never specified, logs will be written to stderr.
# Otherwise, logs will to written to the given file, though some of the early
# logs might still be written to the stderr.
# When setting this option from the config file, it is recommended to use an absolute path.
#
# log-file = "/path/to/your/log/file"
# Show all X errors (for debugging)
# show-all-xerrors = false
# Write process ID to a file.
# write-pid-path = "/path/to/your/log/file"
# Window type settings
#
# 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard:
# "unknown", "desktop", "dock", "toolbar", "menu", "utility",
# "splash", "dialog", "normal", "dropdown_menu", "popup_menu",
# "tooltip", "notification", "combo", and "dnd".
#
# Following per window-type options are available: ::
#
# fade, shadow:::
# Controls window-type-specific shadow and fade settings.
#
# opacity:::
# Controls default opacity of the window type.
#
# focus:::
# Controls whether the window of this type is to be always considered focused.
# (By default, all window types except "normal" and "dialog" has this on.)
#
# full-shadow:::
# Controls whether shadow is drawn under the parts of the window that you
# normally won't be able to see. Useful when the window has parts of it
# transparent, and you want shadows in those areas.
#
# clip-shadow-above:::
# Controls whether shadows that would have been drawn above the window should
# be clipped. Useful for dock windows that should have no shadow painted on top.
#
# redir-ignore:::
# Controls whether this type of windows should cause screen to become
# redirected again after been unredirected. If you have unredir-if-possible
# set, and doesn't want certain window to cause unnecessary screen redirection,
# you can set this to `true`.
#
wintypes:
{
tooltip = { fade = true; shadow = true; opacity = 1; focus = true; full-shadow = false; };
dock = { shadow = false; clip-shadow-above = true; }
dnd = { shadow = false; }
popup_menu = { opacity = 1; }
dropdown_menu = { opacity = 1; }
};

View file

@ -0,0 +1,99 @@
# permanently set alternative root dir. Use ":" to separate multiple roots
# which can be switched at runtime with shift+left/right
# root=/path/to/root
# rofi command. Make sure to have "$@" as last argument
_rofi () {
rofi -i -no-auto-select "$@"
}
# default command to generate passwords
_pwgen () {
pwgen -y "$@"
}
# image viewer to display qrcode of selected entry
# qrencode is needed to generate the image and a viewer
# that can read from pipes. Known viewers to work are feh and display
_image_viewer () {
feh -
# display
}
# xdotool needs the keyboard layout to be set using setxkbmap
# You can do this in your autostart scripts (e.g. xinitrc)
# If for some reason, you cannot do this, you can set the command here.
# and set fix_layout to true
fix_layout=false
layout_cmd () {
setxkbmap us
}
# fields to be used
URL_field='url'
USERNAME_field='user'
AUTOTYPE_field='autotype'
# delay to be used for :delay keyword
delay=2
# rofi-pass needs to close itself before it can type passwords. Set delay here.
wait=0.2
# delay between keypresses when typing (in ms)
xdotool_delay=12
## Programs to be used
# Editor
EDITOR='gvim -f'
# Browser
BROWSER='xdg-open'
## Misc settings
default_do='copyPass' # menu, autotype, copyPass, typeUser, typePass, copyUser, copyUrl, viewEntry, typeMenu, actionMenu, copyMenu, openUrl
auto_enter='false'
notify='true'
default_autotype='user :tab pass'
# color of the help messages
# leave empty for autodetection
help_color="#4872FF"
# Clipboard settings
# Possible options: primary, clipboard, both
clip=clipboard
# Seconds before clearing pass from clipboard
clip_clear=45
## Options for generating new password entries
# open new password entries in editor
edit_new_pass="true"
# default_user is also used for password files that have no user field.
#default_user="${ROFI_PASS_DEFAULT_USER-$(whoami)}"
#default_user2=mary_ann
#password_length=12
# Custom Keybindings
autotype="Alt+1"
type_user="Alt+2"
type_pass="Alt+3"
open_url="Alt+4"
copy_name="Alt+u"
copy_url="Alt+l"
copy_pass="Alt+p"
show="Alt+o"
copy_entry="Alt+2"
type_entry="Alt+1"
copy_menu="Alt+c"
action_menu="Alt+a"
type_menu="Alt+t"
help="Alt+h"
switch="Alt+x"
insert_pass="Alt+n"

View file

@ -0,0 +1,16 @@
configuration {
font: "FiraCode 12";
kb-cancel: "Super+q,Escape,Control+c";
timeout {
action: "kb-cancel";
delay: 0;
}
filebrowser {
directories-first: true;
sorting-method: "name";
}
}
@theme "theme"

View file

@ -0,0 +1,131 @@
/* ==========================================================================
File: gruvbox-common.rasi
Desc: Shared rules between all gruvbox themes
Author: bardisty <b@bah.im>
Source: https://github.com/bardisty/gruvbox-rofi
Modified: Mon Feb 12 2018 06:06:47 PST -0800
========================================================================== */
window {
background-color: @background;
border: 2;
padding: 2;
}
mainbox {
border: 0;
padding: 0;
}
message {
border: 2px 0 0;
border-color: @separatorcolor;
padding: 1px;
}
textbox {
highlight: @highlight;
text-color: @foreground;
}
listview {
border: 2px solid 0 0;
padding: 2px 0 0;
border-color: @separatorcolor;
spacing: 2px;
scrollbar: @scrollbar;
}
element {
border: 0;
padding: 2px;
}
element.normal.normal {
background-color: @normal-background;
text-color: @normal-foreground;
}
element.normal.urgent {
background-color: @urgent-background;
text-color: @urgent-foreground;
}
element.normal.active {
background-color: @active-background;
text-color: @active-foreground;
}
element.selected.normal {
background-color: @selected-normal-background;
text-color: @selected-normal-foreground;
}
element.selected.urgent {
background-color: @selected-urgent-background;
text-color: @selected-urgent-foreground;
}
element.selected.active {
background-color: @selected-active-background;
text-color: @selected-active-foreground;
}
element.alternate.normal {
background-color: @alternate-normal-background;
text-color: @alternate-normal-foreground;
}
element.alternate.urgent {
background-color: @alternate-urgent-background;
text-color: @alternate-urgent-foreground;
}
element.alternate.active {
background-color: @alternate-active-background;
text-color: @alternate-active-foreground;
}
scrollbar {
width: 4px;
border: 0;
handle-color: @scrollbar-handle;
handle-width: 8px;
padding: 0;
}
mode-switcher {
border: 2px 0 0;
border-color: @separatorcolor;
}
inputbar {
spacing: 0;
text-color: @normal-foreground;
padding: 2px;
children: [ prompt, textbox-prompt-sep, entry, case-indicator ];
}
case-indicator,
entry,
prompt,
button {
spacing: 0;
text-color: @normal-foreground;
}
button.selected {
background-color: @selected-normal-background;
text-color: @selected-normal-foreground;
}
textbox-prompt-sep {
expand: false;
str: ":";
text-color: @normal-foreground;
margin: 0 0.3em 0 0;
}
element-text, element-icon {
background-color: inherit;
text-color: inherit;
}

View file

@ -0,0 +1,63 @@
/* ==========================================================================
Rofi color theme
Based on the Gruvbox color scheme for Vim by morhetz
https://github.com/morhetz/gruvbox
File: gruvbox-dark.rasi
Desc: Gruvbox dark color theme for Rofi
Author: bardisty <b@bah.im>
Source: https://github.com/bardisty/gruvbox-rofi
Modified: Mon Feb 12 2018 04:08:43 PST -0800
========================================================================== */
* {
/* Theme settings */
highlight: bold italic;
scrollbar: true;
/* Gruvbox dark colors */
gruvbox-dark-bg0: #28282899;
gruvbox-dark-bg0-soft: #32302f00;
gruvbox-dark-bg3: #665c5499;
gruvbox-dark-fg0: #fbf1c7;
gruvbox-dark-fg1: #ebdbb2;
gruvbox-dark-red-dark: #cc241d;
gruvbox-dark-red-light: #fb4934;
gruvbox-dark-yellow-dark: #d79921;
gruvbox-dark-yellow-light: #fabd2f;
gruvbox-dark-gray: #a89984;
/* Theme colors */
background: transparent;
background-color: @gruvbox-dark-bg0;
foreground: @gruvbox-dark-fg1;
border-color: @gruvbox-dark-gray;
separatorcolor: @border-color;
scrollbar-handle: @border-color;
normal-background: @background;
normal-foreground: @foreground;
alternate-normal-background: @gruvbox-dark-bg0-soft;
alternate-normal-foreground: @foreground;
selected-normal-background: @gruvbox-dark-bg3;
selected-normal-foreground: @gruvbox-dark-fg0;
active-background: @gruvbox-dark-yellow-dark;
active-foreground: @background;
alternate-active-background: @active-background;
alternate-active-foreground: @active-foreground;
selected-active-background: @gruvbox-dark-yellow-light;
selected-active-foreground: @active-foreground;
urgent-background: @gruvbox-dark-red-dark;
urgent-foreground: @background;
alternate-urgent-background: @urgent-background;
alternate-urgent-foreground: @urgent-foreground;
selected-urgent-background: @gruvbox-dark-red-light;
selected-urgent-foreground: @urgent-foreground;
}
@import "gruvbox-common"

View file

@ -0,0 +1,9 @@
@import "gruvbox-dark-transparent"
textbox-prompt-sep {
expand: false;
str: ""; // Override default prompt colon
text-color: @normal-foreground;
margin: 0 0.3em 0 0;
}

View file

@ -0,0 +1,76 @@
# Use starship.def.toml to edit the starship configuration. There should be an entr daemon
# running which, upon changes to the file, will replace each instance of ${ACCENT_COLOR} with
# the appropriate environment variable. This hack was cobbled together because starship currently
# does not allow environment variables to be used as a style (which is dumb)
# Inserts a blank line between shell prompts
add_newline = false
format = '''
[\([$username@$hostname](bold ${ACCENT_COLOR})\)-\[$directory\](-\[$git_branch$git_metrics$git_status\])(-\[$nix_shell\])](${ACCENT_COLOR}) $cmd_duration
[$shell ](${ACCENT_COLOR})'''
# format = '''
# [\[$directory\](-\[$git_branch$git_metrics$git_status\])(-\[$nix_shell\])](${ACCENT_COLOR})[λ ](${ACCENT_COLOR} bold)
# '''
right_format = '$status'
[line_break]
disabled = false
[username]
style_user = 'bold ${ACCENT_COLOR}'
style_root = 'bold red'
format = '[$user]($style)'
disabled = false
show_always = true
[nix_shell]
symbol = '❄️'
format = '[$symbol$name](bold purple)'
[hostname]
ssh_only = false
format = '[$ssh_symbol](bold blue)$hostname'
trim_at = '.companyname.com'
disabled = false
[git_branch]
style = 'bold green'
symbol = ''
format = '[$symbol$branch(hello$banch)](bold green)'
[git_status]
modified = '[✘](bold red)'
up_to_date = 'up'
format = '$up_to_date$modified$up_to_date'
[directory]
truncation_length = 3
truncation_symbol = '…/'
truncate_to_repo = true
style = 'bold white'
format = '[$path]($style)[$read_only]($read_only_style)'
[character]
success_symbol = '[λ](bold ${ACCENT_COLOR})'
error_symbol = '[λ](bold red)'
# success_symbol = '[](bold ${ACCENT_COLOR})'
# error_symbol = '[](bold red)'
[cmd_duration]
min_time = 1_000
style = "bold dimmed yellow"
format = '◷[$duration]($style) '
[shell]
fish_indicator = '─[󰈺](bold ${ACCENT_COLOR})'
powershell_indicator = '[_](bold ${ACCENT_COLOR})'
bash_indicator = '─[\$](bold ${ACCENT_COLOR})'
zsh_indicator = '─[λ](bold ${ACCENT_COLOR})'
unknown_indicator = '─[?](bold ${ACCENT_COLOR})'
disabled = false
format = '$indicator'
[status]
disabled = false

View file

@ -0,0 +1,73 @@
# Use starship.def.toml to edit the starship configuration. There should be an entr daemon
# running which, upon changes to the file, will replace each instance of blue with
# the appropriate environment variable. This hack was cobbled together because starship currently
# does not allow environment variables to be used as a style (which is dumb)
# Inserts a blank line between shell prompts
add_newline = false
format = '''[\([$username@$hostname](bold blue)\)-\[$directory\](-\[$git_branch$git_metrics$git_status\])(-\[$nix_shell\])](blue) $cmd_duration
[](blue)[$shell](bold blue) '''
# format = '''
# [\[$directory\](-\[$git_branch$git_metrics$git_status\])(-\[$nix_shell\])](blue)[λ ](blue bold)
# '''
right_format = '$status'
[line_break]
disabled = false
[username]
format = '$user'
disabled = false
show_always = true
[nix_shell]
symbol = '❄️'
format = '[$symbol$name](bold purple)'
[hostname]
ssh_only = false
format = '[$ssh_symbol](bold blue)$hostname'
trim_at = '.companyname.com'
disabled = false
[git_branch]
style = 'bold green'
symbol = ''
format = '[$symbol$branch(hello$banch)](bold green)'
[git_status]
modified = '[✘](bold red)'
up_to_date = 'up'
format = '$up_to_date$modified$up_to_date'
[directory]
truncation_length = 3
truncation_symbol = '…/'
truncate_to_repo = true
style = 'bold white'
format = '[$path]($style)[$read_only]($read_only_style)'
[character]
success_symbol = '[λ](bold blue)'
error_symbol = '[λ](bold red)'
# success_symbol = '[](bold blue)'
# error_symbol = '[](bold red)'
[cmd_duration]
min_time = 1_000
style = "bold dimmed yellow"
format = '◷[$duration]($style) '
[shell]
fish_indicator = '󰈺'
powershell_indicator = '_'
bash_indicator = '\$'
zsh_indicator = 'λ'
unknown_indicator = '?'
disabled = false
format = '$indicator'
[status]
disabled = false

View file

@ -0,0 +1,71 @@
#!/bin/sh
# Using super as the main modifier key, so remember to check if a key conflicts with a DWM keybinding.
# Reload sxhkdrc configuration
super + shift + r
pkill -usr1 -x sxhkd; notify-send 'sxhkd' 'Reloaded config'
# Running dmenu/rofi scripts
ctrl + alt + BackSpace
st -e $SHELL -c 'htop'
super + r
menu-run
super + d; p
rofi-pass
super + d; s
menu-sink
super + grave
menu-unicode
super + d; l
menu-layout
super + d; m
menu-man
super + n
menu-norg
# Change layouts
super + C
autorandr --change --default default
# Spawn programs
super + c
emacsclient -c -a "emacs" -n --eval '(progn (set-frame-font "FiraCode Nerd Font") (cfw:open-org-calendar))'
super + u
emacsclient -c -a "emacs" -n --eval '(vterm-frame)'
super + Return
st
super + w
$BROWSER
super + e
st -e $SHELL -c 'tmp="$(mktemp)" && command lf -last-dir-path="$tmp" "$@" && test -f "$tmp" && dir="$(command cat "$tmp")" && rm -f "$tmp" && test -d "$dir" && cd "$dir" && exec $SHELL'
super + s; e
emacsclient -c -a 'emacs'
# Implementing basic control hotkeys
super + l
xsecurelock
# Print
F10
rofi -dmenu -l 0 -p "Screenshot filename" < /dev/null | xargs -I "name" maim -s ~/name
# shift + Print
shift + F10
rofi -dmenu -l 0 -p "Screenshot filename" < /dev/null | xargs -I "name" maim ~/name
super + p
rofi -dmenu -l 0 -p "Screenshot filename" < /dev/null | xargs -I "name" maim -s ~/name
super + P
rofi -dmenu -l 0 -p "Screenshot filename" < /dev/null | xargs -I "name" maim ~/name
super + minus
wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%-; notify-send -r 44 "$(wpctl get-volume @DEFAULT_AUDIO_SINK@)"
super + shift + minus
wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-; notify-send -r 44 "$(wpctl get-volume @DEFAULT_AUDIO_SINK@)"
super + equal
wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+; notify-send -r 44 "$(wpctl get-volume @DEFAULT_AUDIO_SINK@)"
super + shift + equal
wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+; notify-send -r 44 "$(wpctl get-volume @DEFAULT_AUDIO_SINK@)"
# XF86MonBrightnessUp
F7
change-brightness up
# XF86MonBrightnessDown
F6
change-brightness down

View file

@ -0,0 +1,30 @@
set -g default-terminal "tmux-256color"
set -ga terminal-overrides ",*256col*:Tc"
# Change tmux prefix
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix
set -g mouse on
#set -g mouse-resize-pane on
#set -g mouse-select-pane on
#set -g mouse-select-window on
# For newer versions of tmux:
set -g mouse on
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'select-pane -t=; copy-mode -e; #send-keys -M'"
bind -n WheelDownPane select-pane -t= \; send-keys -M
set -g status-style 'bg=#333333 fg=#5eacd3'
# Vim-like visual mode and yanking
set-window-option -g mode-keys vi
bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard'
# Vim-like pane switching
bind -r ^ last-window
bind -r k select-pane -U
bind -r j select-pane -D
bind -r h select-pane -L
bind -r l select-pane -R

View file

@ -0,0 +1,72 @@
{
"layer": "top",
"position": "top",
"height": 27,
"modules-left": ["hyprland/workspaces", "custom/scratch", "hyprland/mode", "hyprland/window"],
"modules-center": [],
"modules-right": ["memory", "pulseaudio", "battery", "tray", "clock"],
"hyprland/workspaces": {
"disable-scroll": true,
"disable-markup": true,
"format": "{name}"
},
"hyprland/window": {
"format": "{}",
"max-length": 150
},
"tray": {
"icon-size": 18,
"spacing": 15
},
"clock": {
"format": "{: %a %b%e  %R}",
"interval": 30
},
"memory": {
"interval": 5,
"format": " {used:0.1f}G/{total:0.1f}G "
},
"battery": {
"bat": "BAT0",
"states": {
"full": 99,
"good": 98,
"normal": 98,
"warning": 20,
"critical": 20
},
"format": "{icon} {capacity}%",
"format-good": "{icon} {capacity}%",
"format-full": " {capacity}%",
"format-charging": "󰂄 {capacity}%",
"format-icons": ["", "", "", "", ""],
"interval": 30
},
"network": {
"interface": "wlp0s20f3",
"format-wifi": " {essid} ",
"format-disconnected": " ",
"interval": 60
},
"pulseaudio": {
"format": " {icon} {volume}%",
"format-bluetooth": " {volume}% ",
"format-muted":"婢 Mute ",
"interval": 60,
"format-icons": {
"default": [""]
},
"on-click": "blueman-manager"
}
}

View file

@ -0,0 +1,78 @@
* {
font-family: FiraCode, Symbols Nerd Font Mono, FontAwesome;
font-size: 15px;
}
window#waybar {
background-color: rgba(0, 0, 0, 0.8);
color: #ffffff;
}
#window {
color: #ffffff;
padding: 0px 10px 0px 10px;
}
button:hover {
color: #ffffff;
border-bottom: 3px solid #ffffff;
background: rgba(150, 150, 150, 0.5);
box-shadow: inset 0 -3px #ffffff;
}
.modules-left {
padding: 0px 0px 0px 0px;
}
.modules-right {
padding: 0px 5px 0px 0px;
}
#custom-scratch {
color: #b8b8b8;
padding: 0px 9px 0px 9px;
}
#workspaces button {
padding: 0px 11px 0px 11px;
min-width: 1px;
color: #888888;
border: none;
border-radius: 0;
}
#workspaces button.active {
padding: 0px 11px 0px 11px;
color: #ffffff;
box-shadow: inset 0 -3px #ffffff;
}
#mode {
background-color: #900000;
color: #ffffff;
padding: 0px 5px 0px 5px;
border: 1px solid #2f343a;
}
#network, #temperature, #backlight, #pulseudio, #battery {
padding: 0px 15px 0px 15px;
}
#clock {
margin: 0px 15px 0px 15px;
}
#tray{
padding: 0px 8px 0px 5px;
margin: 0px 5px 0px 5px;
}
#battery.critical {
color: #ff5555;
}
#network.disconnected {
color: #ff5555;
}

View file

@ -0,0 +1,66 @@
---@diagnostic disable: undefined-global
-- Draw a full bar around window
function Manager:render(area)
self.area = area
local chunks = ui.Layout()
:direction(ui.Layout.HORIZONTAL)
:constraints({
ui.Constraint.Ratio(MANAGER.ratio.parent, MANAGER.ratio.all),
ui.Constraint.Ratio(MANAGER.ratio.current, MANAGER.ratio.all),
ui.Constraint.Ratio(MANAGER.ratio.preview, MANAGER.ratio.all),
})
:split(area)
local bar = function(c, x, y)
x, y = math.max(0, x), math.max(0, y)
return ui.Bar(ui.Rect { x = x, y = y, w = ya.clamp(0, area.w - x, 1), h = math.min(1, area.h) }, ui.Bar.TOP)
:symbol(c)
end
return ya.flat {
-- Borders
ui.Border(area, ui.Border.ALL):type(ui.Border.ROUNDED),
ui.Bar(chunks[1], ui.Bar.RIGHT),
ui.Bar(chunks[3], ui.Bar.LEFT),
bar("", chunks[1].right - 1, chunks[1].y),
bar("", chunks[1].right - 1, chunks[1].bottom - 1),
bar("", chunks[2].right, chunks[2].y),
bar("", chunks[2].right, chunks[1].bottom - 1),
-- Parent
Parent:render(chunks[1]:padding(ui.Padding.xy(1))),
-- Current
Current:render(chunks[2]:padding(ui.Padding.y(1))),
-- Preview
Preview:render(chunks[3]:padding(ui.Padding.xy(1))),
}
end
-- Show user and hostname in top bar
-- function Header:host()
-- return ui.Span(ya.user_name() .. "@" .. ya.host_name() .. ":"):fg("blue")
-- end
--
-- function Header:layout(area)
-- self.area = area
--
-- return ui.Layout()
-- :direction(ui.Layout.HORIZONTAL)
-- :constraints({ ui.Constraint.Percentage(50), ui.Constraint.Percentage(50) })
-- :split(area)
-- end
--
-- function Header:render(area)
-- local chunks = self:layout(area)
--
-- local left = ui.Line { self:host(), self:cwd() }
-- local right = ui.Line { self:tabs() }
-- return {
-- ui.Paragraph(chunks[1], { left }),
-- ui.Paragraph(chunks[2], { right }):align(ui.Paragraph.RIGHT),
-- }
-- end
--

View file

@ -0,0 +1,15 @@
# A TOML linter such as https://taplo.tamasfe.dev/ can use this schema to validate your config.
# If you encounter any issues, please make an issue at https://github.com/yazi-rs/schemas.
"$schema" = "https://yazi-rs.github.io/schemas/keymap.json"
[manager]
prepend_keymap = [
{ on = [ "l" ], exec = [ "plugin smart-enter --sync", "escape --visual --select" ], desc = "Enter the child directory, or open file." },
{ on = [ "L" ], exec = "plugin smart-enter --sync --args='detatch'", desc = "Open in new window." },
{ on = [ "n" ], exec = "create", desc = "Create a file or directory (ends with / for directories)" },
{ on = [ "=" ], exec = """
shell 'printf "Mode Bits: "; read ans; chmod $ans "$@"' --block --confirm
""", desc = "chmod" },
]

View file

@ -0,0 +1,19 @@
---@diagnostic disable: undefined-global
return {
entry = function(self, args)
local h = cx.active.current.hovered
if h and h.cha.is_dir then
ya.manager_emit("enter", {})
return
end
if #args > 0 and args[1] == "detatch" then
os.execute(string.format("opener detatch \"%s\"", h.url))
else
ya.manager_emit("open", {})
-- os.execute(string.format("opener \"%s\"", h.url))
end
end,
}

View file

@ -0,0 +1,397 @@
# A TOML linter such as https://taplo.tamasfe.dev/ can use this schema to validate your config.
# If you encounter any issues, please make an issue at https://github.com/yazi-rs/schemas.
"$schema" = "https://yazi-rs.github.io/schemas/theme.json"
# vim:fileencoding=utf-8:foldmethod=marker
# : Manager {{{
[manager]
cwd = { fg = "white", bold = true }
# Hovered
hovered = { fg = "black", bg = "lightblue" }
preview_hovered = { underline = true }
# Find
find_keyword = { fg = "yellow", italic = true }
find_position = { fg = "magenta", bg = "reset", italic = true }
# Marker
marker_selected = { fg = "lightgreen", bg = "lightgreen" }
marker_copied = { fg = "lightyellow", bg = "lightyellow" }
marker_cut = { fg = "lightred", bg = "lightred" }
# Tab
tab_active = { fg = "black", bg = "lightblue" }
tab_inactive = { fg = "white", bg = "darkgray" }
tab_width = 1
# Border
border_symbol = "│"
border_style = { fg = "gray" }
# Highlighting
syntect_theme = ""
# : }}}
# : Status {{{
[status]
separator_open = ""
separator_close = ""
separator_style = { fg = "darkgray", bg = "darkgray" }
# Mode
mode_normal = { fg = "black", bg = "lightblue", bold = true }
mode_select = { fg = "black", bg = "lightgreen", bold = true }
mode_unset = { fg = "black", bg = "lightmagenta", bold = true }
# Progress
progress_label = { bold = true }
progress_normal = { fg = "blue", bg = "black" }
progress_error = { fg = "red", bg = "black" }
# Permissions
permissions_t = { fg = "lightgreen" }
permissions_r = { fg = "lightyellow" }
permissions_w = { fg = "lightred" }
permissions_x = { fg = "lightcyan" }
permissions_s = { fg = "darkgray" }
# : }}}
# : Select {{{
[select]
border = { fg = "blue" }
active = { fg = "magenta" }
inactive = {}
# : }}}
# : Input {{{
[input]
border = { fg = "blue" }
title = {}
value = {}
selected = { reversed = true }
# : }}}
# : Completion {{{
[completion]
border = { fg = "blue" }
active = { bg = "darkgray" }
inactive = {}
# Icons
icon_file = ""
icon_folder = ""
icon_command = ""
# : }}}
# : Tasks {{{
[tasks]
border = { fg = "blue" }
title = {}
hovered = { underline = true }
# : }}}
# : Which {{{
[which]
cols = 3
mask = { bg = "black" }
cand = { fg = "lightcyan" }
rest = { fg = "darkgray" }
desc = { fg = "magenta" }
separator = "  "
separator_style = { fg = "darkgray" }
# : }}}
# : Help {{{
[help]
on = { fg = "magenta" }
exec = { fg = "cyan" }
desc = { fg = "gray" }
hovered = { bg = "darkgray", bold = true }
footer = { fg = "black", bg = "white" }
# : }}}
# : File-specific styles {{{
[filetype]
rules = [
# Images
{ mime = "image/*", fg = "magenta" },
# Videos
{ mime = "video/*", fg = "green" },
{ mime = "audio/*", fg = "green" },
# Archives
{ mime = "application/zip", fg = "red" },
{ mime = "application/gzip", fg = "red" },
{ mime = "application/x-tar", fg = "red" },
{ mime = "application/x-bzip", fg = "red" },
{ mime = "application/x-bzip2", fg = "red" },
{ mime = "application/x-7z-compressed", fg = "red" },
{ mime = "application/x-rar", fg = "red" },
{ mime = "application/xz", fg = "red" },
# Documents
# { mime = "application/doc", fg = "green" },
{ mime = "application/pdf", fg = "magenta" },
# { mime = "application/rtf", fg = "green" },
# { mime = "application/vnd.*", fg = "green" },
# Fallback
# { name = "*", fg = "white" },
{ name = "*", fg = "yellow", bold = true, is = "exec" },
{ name = "*/", fg = "blue", bold = true }
]
[icon]
rules = [
# Programming
{ name = "*.cpp" , text = "", fg = "#519aba" },
{ name = "*.css" , text = "", fg = "#42a5f5" },
{ name = "*.c" , text = "", fg = "#599eff" },
{ name = "*.fish" , text = "" },
{ name = "*.go" , text = "", fg = "#519aba" },
{ name = "*.hpp" , text = "", fg = "#a074c4" },
{ name = "*.h" , text = "", fg = "#a074c4" },
{ name = "*.htm" , text = "", fg = "#e44d26" },
{ name = "*.html" , text = "", fg = "#e44d26" },
{ name = "*.java" , text = "", fg = "#cc3e44" },
{ name = "*.js" , text = "", fg = "#F1F134" },
{ name = "*.jsx" , text = "", fg = "#20c2e3" },
{ name = "*.lua" , text = "", fg = "#51a0cf" },
{ name = "*.nix" , text = "", fg = "#7ab1db" },
{ name = "*.php" , text = "" },
{ name = "*.rb" , text = "" },
{ name = "*.rs" , text = "", fg = "#dea584" },
{ name = "*.scss" , text = "" },
{ name = "*.sh" , text = "", fg = "#4d5a5e" },
{ name = "*.swift", text = "" },
{ name = "*.ts" , text = "", fg = "#519aba" },
{ name = "*.tsx" , text = "" },
{ name = "*.vim" , text = "" },
{ name = "*.vue" , text = "󰡄" },
{ name = "*.py" , text = "", fg = "#ffbc03" },
{ name = "*.pyc" , text = "", fg = "#ffe291" },
# Text
{ name = "*.txt" , text = "", fg = "#bbbbbb" },
{ name = "*.csv" , text = "", fg = "#89e051" },
{ name = "*.json" , text = "", fg = "#cbcb41" },
{ name = "*.conf" , text = "", fg = "#6d8086" }, # Configuration
{ name = "*.ini" , text = "", fg = "#6d8086" },
{ name = "*.yaml" , text = "", fg = "#6d8086" },
{ name = "*.yml" , text = "", fg = "#6d8086" },
{ name = "*.toml" , text = "", fg = "#6d8086" },
{ name = "*.org" , text = "", fg = "#77aa99" },
{ name = "*.tex" , text = "󰙩", fg = "#3d6117" }, # Plaintext typesetting
{ name = "*.typ" , text = "󰙩", fg = "#0e606a" },
{ name = "*.markdown", text = "", fg = "#519aba" }, # Markdown
{ name = "*.md" , text = "", fg = "#519aba" },
{ name = "*.mdx" , text = "", fg = "#519aba" },
{ name = "*.rmd" , text = "", fg = "#519aba" },
# Archives
{ name = "*.7z" , text = "" },
{ name = "*.ace" , text = "" },
{ name = "*.alz" , text = "" },
{ name = "*.arc" , text = "" },
{ name = "*.arj" , text = "" },
{ name = "*.bz2" , text = "" },
{ name = "*.bz" , text = "" },
{ name = "*.cab" , text = "" },
{ name = "*.cpio", text = "" },
{ name = "*.deb" , text = "" },
{ name = "*.dwm" , text = "" },
{ name = "*.dz" , text = "" },
{ name = "*.ear" , text = "" },
{ name = "*.esd" , text = "" },
{ name = "*.gz" , text = "" },
{ name = "*.jar" , text = "" },
{ name = "*.lha" , text = "" },
{ name = "*.lrz" , text = "" },
{ name = "*.lz4" , text = "" },
{ name = "*.lzh" , text = "" },
{ name = "*.lzma", text = "" },
{ name = "*.lzo" , text = "" },
{ name = "*.lz" , text = "" },
{ name = "*.rar" , text = "" },
{ name = "*.rpm" , text = "" },
{ name = "*.rz" , text = "" },
{ name = "*.sar" , text = "" },
{ name = "*.swm" , text = "" },
{ name = "*.t7z" , text = "" },
{ name = "*.tar" , text = "" },
{ name = "*.taz" , text = "" },
{ name = "*.tbz2", text = "" },
{ name = "*.tbz" , text = "" },
{ name = "*.tgz" , text = "" },
{ name = "*.tlz" , text = "" },
{ name = "*.txz" , text = "" },
{ name = "*.tzo" , text = "" },
{ name = "*.tzst", text = "" },
{ name = "*.tz" , text = "" },
{ name = "*.war" , text = "" },
{ name = "*.wim" , text = "" },
{ name = "*.xz" , text = "" },
{ name = "*.zip" , text = "" },
{ name = "*.zoo" , text = "" },
{ name = "*.zst" , text = "" },
{ name = "*.z" , text = "" },
# Images
{ name = "*.bmp" , text = "" }, # Lossless
{ name = "*.gif" , text = "" },
{ name = "*.png" , text = "" },
{ name = "*.tiff" , text = "" },
{ name = "*.webp" , text = "" },
{ name = "*.jpeg" , text = "" }, # Lossy
{ name = "*.jpg" , text = "" },
{ name = "*.mjpeg", text = "" },
{ name = "*.mjpg" , text = "" },
{ name = "*.mng" , text = "" },
{ name = "*.pbm" , text = "" },
{ name = "*.pcx" , text = "" },
{ name = "*.pgm" , text = "" },
{ name = "*.ppm" , text = "" },
{ name = "*.svg" , text = "" },
{ name = "*.svgz" , text = "" },
{ name = "*.tga" , text = "" },
{ name = "*.tif" , text = "" },
{ name = "*.xbm" , text = "" },
{ name = "*.xpm" , text = "" },
# Movies
{ name = "*.asf" , text = "" },
{ name = "*.avi" , text = "" },
{ name = "*.cgm" , text = "" },
{ name = "*.dl" , text = "" },
{ name = "*.emf" , text = "" },
{ name = "*.flc" , text = "" },
{ name = "*.fli" , text = "" },
{ name = "*.flv" , text = "" },
{ name = "*.gl" , text = "" },
{ name = "*.m2v" , text = "" },
{ name = "*.m4v" , text = "" },
{ name = "*.mkv" , text = "" },
{ name = "*.mov" , text = "" },
{ name = "*.mp4" , text = "" },
{ name = "*.mp4v", text = "" },
{ name = "*.mpeg", text = "" },
{ name = "*.mpg" , text = "" },
{ name = "*.nuv" , text = "" },
{ name = "*.ogm" , text = "" },
{ name = "*.ogv" , text = "" },
{ name = "*.ogx" , text = "" },
{ name = "*.qt" , text = "" },
{ name = "*.rm" , text = "" },
{ name = "*.rmvb", text = "" },
{ name = "*.vob" , text = "" },
{ name = "*.webm", text = "" },
{ name = "*.wmv" , text = "" },
{ name = "*.xcf" , text = "" },
{ name = "*.xwd" , text = "" },
{ name = "*.yuv" , text = "" },
# Audio
{ name = "*.aac" , text = "" },
{ name = "*.au" , text = "" },
{ name = "*.flac", text = "" },
{ name = "*.m4a" , text = "" },
{ name = "*.mid" , text = "" },
{ name = "*.midi", text = "" },
{ name = "*.mka" , text = "" },
{ name = "*.mp3" , text = "" },
{ name = "*.mpc" , text = "" },
{ name = "*.oga" , text = "" },
{ name = "*.ogg" , text = "" },
{ name = "*.opus", text = "" },
{ name = "*.ra" , text = "" },
{ name = "*.spx" , text = "" },
{ name = "*.wav" , text = "" },
{ name = "*.xspf", text = "" },
# Documents
{ name = "*.pdf" , text = "", fg = "#b30b00" }, # Printable
{ name = "*.doc" , text = "", fg = "#185abd" }, # Non plaintext docs
{ name = "*.doct", text = "", fg = "#185abd" },
{ name = "*.docx", text = "", fg = "#185abd" },
{ name = "*.dot" , text = "", fg = "#185abd" },
{ name = "*.pom" , text = "󰈩", fg = "#cb4a32" }, # Presentations
{ name = "*.pot" , text = "󰈩", fg = "#cb4a32" },
{ name = "*.potx", text = "󰈩", fg = "#cb4a32" },
{ name = "*.ppm" , text = "󰈩", fg = "#cb4a32" },
{ name = "*.ppmx", text = "󰈩", fg = "#cb4a32" },
{ name = "*.pps" , text = "󰈩", fg = "#cb4a32" },
{ name = "*.ppsx", text = "󰈩", fg = "#cb4a32" },
{ name = "*.ppt" , text = "󰈩", fg = "#cb4a32" },
{ name = "*.pptx", text = "󰈩", fg = "#cb4a32" },
{ name = "*.xlc" , text = "" },
{ name = "*.xlm" , text = "" },
{ name = "*.xls" , text = "" },
{ name = "*.xlsm", text = "" },
{ name = "*.xlsx", text = "" },
{ name = "*.xlt" , text = "" },
{ name = "*.ods" , text = "" },
{ name = "*.ots" , text = "" },
{ name = "*.odg" , text = "󰽉" },
# Lockfiles
{ name = "*.lock", text = "", fg = "#bbbbbb" },
# Misc
{ name = "*.bin", text = "" },
{ name = "*.exe", text = "" },
{ name = "*.pkg", text = "" },
# Dotfiles
{ name = ".DS_Store" , text = "" },
{ name = ".bashprofile" , text = "" },
{ name = ".bashrc" , text = "" },
{ name = ".gitattributes", text = "" },
{ name = ".gitignore" , text = "" },
{ name = ".gitmodules" , text = "" },
{ name = ".vimrc" , text = "" },
{ name = ".zprofile" , text = "" },
{ name = ".zshenv" , text = "" },
{ name = ".zshrc" , text = "" },
# Named files
{ name = "COPYING" , text = "󰿃" },
{ name = "Containerfile", text = "󰡨", fg = "#458ee6" },
{ name = "Dockerfile" , text = "󰡨", fg = "#458ee6" },
{ name = "LICENSE" , text = "", fg = "#d0bf41" },
# Default
{ name = "*" , text = "" },
{ name = "*/", text = "󰝰", fg = "yellow" },
]
# : }}}

149
misc/.config/yazi/yazi.toml Normal file
View file

@ -0,0 +1,149 @@
# A TOML linter such as https://taplo.tamasfe.dev/ can use this schema to validate your config.
# If you encounter any issues, please make an issue at https://github.com/yazi-rs/schemas.
"$schema" = "https://yazi-rs.github.io/schemas/yazi.json"
[manager]
ratio = [ 1, 2, 3 ]
sort_by = "natural"
sort_sensitive = false
sort_reverse = false
sort_dir_first = true
linemode = "size"
show_hidden = false
show_symlink = true
[preview]
tab_size = 2
max_width = 1000
max_height = 1500
cache_dir = ""
image_filter = "triangle"
image_quality = 75
sixel_fraction = 15
ueberzug_scale = 1
ueberzug_offset = [ 0, 0, 0, 0 ]
[opener]
open = [
{ exec = 'opener "$@"', block = true, desc = "Open" },
]
[open]
rules = [
{ name = "*/", use = [ "edit", "open", "reveal" ] },
{ mime = "*", use = [ "open" ] },
]
[tasks]
micro_workers = 10
macro_workers = 25
bizarre_retry = 5
image_alloc = 536870912 # 512MB
image_bound = [ 0, 0 ]
suppress_preload = false
[plugin]
preloaders = [
{ name = "*", cond = "!mime", exec = "mime", multi = true, prio = "high" },
# Image
{ mime = "image/vnd.djvu", exec = "noop" },
{ mime = "image/*", exec = "image" },
# Video
{ mime = "video/*", exec = "video" },
# PDF
{ mime = "application/pdf", exec = "pdf" },
]
previewers = [
{ name = "*/", exec = "folder", sync = true },
# Code
{ mime = "text/*", exec = "code" },
{ mime = "*/xml", exec = "code" },
{ mime = "*/javascript", exec = "code" },
{ mime = "*/x-wine-extension-ini", exec = "code" },
# JSON
{ mime = "application/json", exec = "json" },
# Image
{ mime = "image/vnd.djvu", exec = "noop" },
{ mime = "image/*", exec = "image" },
# Video
{ mime = "video/*", exec = "video" },
# PDF
{ mime = "application/pdf", exec = "pdf" },
# Archive
{ mime = "application/zip", exec = "archive" },
{ mime = "application/gzip", exec = "archive" },
{ mime = "application/x-tar", exec = "archive" },
{ mime = "application/x-bzip", exec = "archive" },
{ mime = "application/x-bzip2", exec = "archive" },
{ mime = "application/x-7z-compressed", exec = "archive" },
{ mime = "application/x-rar", exec = "archive" },
{ mime = "application/xz", exec = "archive" },
# Fallback
{ name = "*", exec = "file" },
]
[input]
# cd
cd_title = "Change directory:"
cd_origin = "top-center"
cd_offset = [ 0, 2, 50, 3 ]
# create
create_title = "Create:"
create_origin = "top-center"
create_offset = [ 0, 2, 50, 3 ]
# rename
rename_title = "Rename:"
rename_origin = "hovered"
rename_offset = [ 0, 1, 50, 3 ]
# trash
trash_title = "Move {n} selected file{s} to trash? (y/N)"
trash_origin = "top-center"
trash_offset = [ 0, 2, 50, 3 ]
# delete
delete_title = "Delete {n} selected file{s} permanently? (y/N)"
delete_origin = "top-center"
delete_offset = [ 0, 2, 50, 3 ]
# filter
filter_title = "Filter:"
filter_origin = "top-center"
filter_offset = [ 0, 2, 50, 3 ]
# find
find_title = [ "Find next:", "Find previous:" ]
find_origin = "top-center"
find_offset = [ 0, 2, 50, 3 ]
# search
search_title = "Search via {n}:"
search_origin = "top-center"
search_offset = [ 0, 2, 50, 3 ]
# shell
shell_title = [ "Shell:", "Shell (block):" ]
shell_origin = "top-center"
shell_offset = [ 0, 2, 50, 3 ]
# overwrite
overwrite_title = "Overwrite an existing file? (y/N)"
overwrite_origin = "top-center"
overwrite_offset = [ 0, 2, 50, 3 ]
# quit
quit_title = "{n} task{s} running, sure to quit? (y/N)"
quit_origin = "top-center"
quit_offset = [ 0, 2, 50, 3 ]
[select]
open_title = "Open with:"
open_origin = "hovered"
open_offset = [ 0, 1, 50, 7 ]
[log]
enabled = false

View file

@ -0,0 +1,20 @@
set sandbox none
set statusbar-h-padding 0
set statusbar-v-padding 0
set page-padding 1
set selection-clipboard clipboard
map u scroll half-up
map d scroll half-down
map D toggle_page_mode
map r reload
map R rotate
map K zoom in
map J zoom out
map i recolor
map p print
map g goto top
set recolor true
set recolor-darkcolor "#EBDBB2"
set default-bg rgba(0,0,0,0.8)
set adjust-open width

View file

@ -0,0 +1,21 @@
# Start gpg agent
unset SSH_AGENT_PID
export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
killall gpg-agent 2>/dev/null
eval $(gpg-agent --daemon)
export PATH="$PATH:~/.local/share/cargo/bin/"
export PATH="$PATH:$JAVA_HOME/bin/"
if [ ! -z "$(grep nixos /etc/os-release)" ]; then
# NixOS does not explicitly link usr local bin
# Yes I know I'm circumventing immutability.
export PATH=/usr/local/bin:$PATH
fi
export PATH=~/.config/emacs/bin:$PATH
export PATH=~/.local/bin/overrides:$PATH # Overriding /usr/bin/*
export PATH=~/.local/bin:$PATH # Highest precedence to local bin
export PATH=sourced:$PATH # Flag to prevent setting PATH multiple times

68
misc/.config/zsh/.zshenv Normal file
View file

@ -0,0 +1,68 @@
#!/bin/zsh
# source /opt/miniconda3/etc/profile.d/conda.sh
if [ -z "$(printf $PATH | grep :sourced:)" ] && [ "$DISPLAY" = ":10.0" ]; then
# zprofile does not get sourced when logging in through an xrdp session (for some reason), even
# if I try to manually source it in ~/startwm.sh. This checks for if this is through xrdp (DISPLAY=:10.0)
# and if the :sourced: flag exists in PATH.
source ~/.config/zsh/.zprofile
fi
# Below causes discord to not launch
# export LIBVA_DRIVER_NAME=nvidia
# export GBM_BACKEND=nvidia-drm
# export __GLX_VENDOR_LIBRARY_NAME=nvidia
export BROWSER="$(which firefox)"
export EDITOR="$(which nvim)"
export MANPAGER='nvim +Man! -c "ZenMode" -c "map q :qa!<CR>"'
export PAGER=
# export GTK_THEME=gruvbox-dark
export GTK_THEME=Adwaita:dark
# Configuring input method
export QT_IM_MODULE='fcitx'
export SDL_IM_MODULE='fcitx'
export XMODIFIERS='@im=fcitx'
# Defining XDG dirs
export XDG_CACHE_HOME="$HOME/.cache"
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_DATA_HOME="$HOME/.local/share"
export XDG_RUNTIME_DIR="/run/user/$UID"
export XDG_STATE_HOME="$HOME/.local/state"
# Spring cleaning
export CARGO_HOME="$XDG_DATA_HOME/cargo"
export CUDA_CACHE_PATH="$XDG_CACHE_HOME/nv"
export EMACS_INIT_FILE="$XDG_CONFIG_HOME/emacs"
export GIT_CONFIG="$XDG_CONFIG_HOME/git/config"
export GNUPGHOME="$XDG_DATA_HOME/gnupg"
export INPUTRC="$XDG_CONFIG_HOME/readline/inputrc"
export JUPYTER_CONFIG_DIR="$XDG_CONFIG_HOME/jupyter"
export NPM_CONFIG_USERCONFIG="$XDG_CONFIG_HOME/npm/npmrc"
export PASSWORD_STORE_DIR="$XDG_DATA_HOME/password-store"
export PYTHONPYCACHEPREFIX="$XDG_CACHE_HOME/python"
export PYTHONUSERBASE="$XDG_DATA_HOME/python"
export RUSTUP_HOME="$XDG_DATA_HOME/rustup"
export SSB_HOME="$XDG_DATA_HOME/zoom"
export TEXMFVAR="$XDG_CACHE_HOME/texlive/texmf-var"
export TLDR_CACHE_DIR="$XDG_CACHE_HOME/tldr"
export TMUX_TMPDIR="$XDG_RUNTIME_DIR"
export VIMINIT='let $MYVIMRC = !has("nvim") ? "$XDG_CONFIG_HOME/vim/vimrc" : "$XDG_CONFIG_HOME/nvim/init.lua" | so $MYVIMRC'
export WINEPREFIX="$XDG_DATA_HOME/wine"
export XINITRC="$XDG_CONFIG_HOME/X11/xinitrc"
export XSERVERRC="$XDG_CONFIG_HOME/X11/xserverrc"
export JAVA_HOME="/usr/lib/jvm/default"
export XSECURELOCK_PASSWORD_PROMPT='kaomoji'
export DOOMDIR="$HOME/.config/doom"
export WALLPAPER=~/.config/wallpaper
export SUDO_PROMPT="$(cowsay $(fortune))
Sudo password: "

View file

@ -0,0 +1,25 @@
ZSH_HIGHLIGHT_STYLES[default]=none
ZSH_HIGHLIGHT_STYLES[command]=fg=none
ZSH_HIGHLIGHT_STYLES[arg0]=fg=none
ZSH_HIGHLIGHT_STYLES[precommand]=fg=none
ZSH_HIGHLIGHT_STYLES[function]=fg=none
ZSH_HIGHLIGHT_STYLES[alias]=fg=none
ZSH_HIGHLIGHT_STYLES[unknown-token]=fg=007 # Dimmed white
ZSH_HIGHLIGHT_STYLES[reserved-word]=fg=green
ZSH_HIGHLIGHT_STYLES[builtin]=none
ZSH_HIGHLIGHT_STYLES[commandseparator]=none
ZSH_HIGHLIGHT_STYLES[hashed-command]=none
ZSH_HIGHLIGHT_STYLES[path]=none
ZSH_HIGHLIGHT_STYLES[globbing]=none
ZSH_HIGHLIGHT_STYLES[history-expansion]=fg=blue
ZSH_HIGHLIGHT_STYLES[single-hyphen-option]=none
ZSH_HIGHLIGHT_STYLES[double-hyphen-option]=none
ZSH_HIGHLIGHT_STYLES[back-quoted-argument]=none
ZSH_HIGHLIGHT_STYLES[single-quoted-argument]=fg=yellow
ZSH_HIGHLIGHT_STYLES[double-quoted-argument]=fg=yellow
ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]=fg=cyan
ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]=fg=cyan
ZSH_HIGHLIGHT_STYLES[assign]=none

249
misc/.config/zsh/.zshrc Executable file
View file

@ -0,0 +1,249 @@
#!/bin/zsh
[ -n "$EAT_SHELL_INTEGRATION_DIR" ] && \
source "$EAT_SHELL_INTEGRATION_DIR/zsh"
# Get it out of here
[ -d ~/Downloads ] && [ -z "$(ls ~/Downloads)" ] && rmdir ~/Downloads/
# ZSH Configurations
unsetopt autocd # Change directory just by typing its name (hurts performance)
setopt interactivecomments # Allow comments in interactive mode
setopt complete_aliases # Allows auto-completion with aliases
setopt magicequalsubst # Enable filename expansion for arguments of the form anything=expression
setopt nonomatch # Hide error message if there is no match for the pattern
setopt notify # Report the status of background jobs immediately
setopt numericglobsort # Sort filenames numerically when it makes sense
setopt promptsubst # Enable command substitution in prompt
setopt hist_expire_dups_first # delete duplicates first when HISTFILE size exceeds HISTSIZE
setopt hist_ignore_dups # ignore duplicated commands history list
setopt hist_ignore_space # ignore commands that start with space
setopt hist_verify # show command with history expansion to user before running it
unsetopt ksharrays # 0-indexing arrays breaks highlighting
# vi mode
bindkey -v
bindkey -M vicmd -r ":"
export KEYTIMEOUT=1
# Change cursor shape for different vi modes.
function zle-keymap-select {
if [[ ${KEYMAP} == vicmd ]] ||
[[ $1 = 'block' ]]; then
echo -ne '\e[1 q'
elif [[ ${KEYMAP} == main ]] ||
[[ ${KEYMAP} == viins ]] ||
[[ ${KEYMAP} = '' ]] ||
[[ $1 = 'beam' ]]; then
echo -ne '\e[5 q'
fi
}
zle -N zle-keymap-select
zle-line-init() {
zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere)
echo -ne "\e[5 q"
}
zle -N zle-line-init
echo -ne '\e[5 q' # Use beam shape cursor on startup.
preexec() { echo -ne '\e[5 q' ;} # Use beam shape cursor for each new prompt.
## ALIASES ##
# The rice repo
alias config='git --git-dir $HOME/repos/dotfiles/ --work-tree=$HOME'
# WSL
alias wclip='/mnt/c/Windows/System32/clip.exe'
alias wclipget='/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -c Get-Clipboard'
alias s='sudo ' # Allow aliases to be passed to sudo
alias pypr='sh -c pypr'
alias asciiquarium='asciiquarium -t'
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'
alias python='python3'
alias xournal='xournalpp'
alias wget='wget --hsts-file="$XDG_CACHE_HOME/wget-hsts"'
alias sxiv='nsxiv'
alias blueman='blueman-manager'
alias spotify='dlkiller spotify'
alias zoom='dlkiller zoom'
alias tor='torbrowser-launcher'
alias emax="devour emacsclient -c -a 'emacs' 1>/dev/null"
alias em="emacsclient -nw -a 'emacs -nw'"
# Colorful output
alias ls='LC_COLLATE=C ls --color=auto --group-directories-first -hN -A'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
alias diff='diff --color=auto'
alias ip='ip --color=auto'
alias gcc='grc gcc'
alias ifconfig='grc ifconfig'
alias make='grc make'
alias netstat='grc netstat'
alias nmap='grc nmap'
alias ping='grc ping'
alias ping='grc ping'
alias uptime='grc uptime'
## FUNCTIONS ##
function colors {
for i in {0..255}; do
print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$"\n"};
done
}
function increase_opacity {
printf "\033]11;rgba:00/00/00/ff\007"
}
function decrease_opacity {
printf "\033]11;rgba:00/00/00/00\007"
}
function pwdterm {
# New terminal in the current working directory
setsid -f $TERMINAL -e $SHELL >/dev/null 2>&1 &
}
function ya() {
local tmp="$(mktemp -t "yazi-cwd.XXXXX")"
yazi "$@" --cwd-file="$tmp"
if cwd="$(cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
cd -- "$cwd"
fi
rm -f -- "$tmp"
}
function lfcd {
tmp="$(mktemp)"
command lf -last-dir-path="$tmp" "$@"
if [ -f "$tmp" ]; then
dir="$(cat "$tmp")"
rm -f "$tmp"
if [ -d "$dir" ]; then
if [ "$dir" != "$(pwd)" ]; then
cd "$dir"
fi
fi
fi
}
function nix-clean {
nix-env --delete-generations old
nix-store --gc
nix-channel --update
nix-env -u --always
for link in /nix/var/nix/gcroots/auto/*
do
rm $(readlink "$link")
done
nix-collect-garbage -d
}
# This script was automatically generated by the broot program
# More information can be found in https://github.com/Canop/broot
# This function starts broot and executes the command
# it produces, if any.
# It's needed because some shell commands, like `cd`,
# have no useful effect if executed in a subshell.
function br {
local cmd cmd_file code
cmd_file=$(mktemp)
if broot --outcmd "$cmd_file" "$@"; then
cmd=$(<"$cmd_file")
command rm -f "$cmd_file"
eval "$cmd"
else
code=$?
command rm -f "$cmd_file"
return "$code"
fi
}
function nix_shell_menu {
shell_dir="$HOME/shells"
shells=$(ls "$shell_dir")
selection=$(echo "$shells" | rofi -dmenu)
nix-shell "$shell_dir/$selection" --run "
export name=${selection%.*};
$([ "$1" = "fhs" ] && echo "fhs-run ")$([ "$1" = "sudo" ] && echo "sudo ")$SHELL
"
}
function nixstore () {
cd "$(dirname $(readlink -f $(which "$1")))"
}
# function man () {
# emacsclient -nw --eval '(progn (man "'$1'"))'
# }
## KEYBINDS ##
zle -N increase_opacity
zle -N decrease_opacity
bindkey '^[s' decrease_opacity
bindkey '^[a' increase_opacity
bindkey -s '^e' 'ya\n'
bindkey -s '^n' 'nix_shell_menu'
zle -N pwdterm
bindkey '^[^M' pwdterm
# Enable completion features
autoload -Uz compinit
compinit -d ~/.cache/zcompdump
zstyle ':completion:*:*:*:*:*' menu select
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' # case insensitive tab completion
# Remove green background of simlinks
LS_COLORS+=':ow=01;33'
# Don't consider certain characters part of the word
WORDCHARS=${WORDCHARS//\/}
# History configurations
export HISTFILE=~/.local/share/history
HISTSIZE=1000
SAVEHIST=2000
alias history="history 0" # force zsh to show the complete history
export GPG_TTY=$(tty)
if [ ! -z "$(grep nixos /etc/os-release)" ]; then
# Shell niceties
source /run/current-system/sw/share/zsh-autosuggestions/zsh-autosuggestions.zsh
source /run/current-system/sw/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
# Use zsh as default nix build shell
source /run/current-system/sw/share/zsh-nix-shell/nix-shell.plugin.zsh
nix-shell-name() {
# If hopping into a pkg subshell, the shell name should reflect the
# package linked. (i.e.: 'nix-shell -p nyancat' => 'export name=nyancat')
if [ "$1" = "-p" ]; then
nix-shell "$@" --command "export name='$2'"
else
nix-shell "$@"
fi
}
alias nix-shell=nix-shell-name
else
source ~/.config/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.plugin.zsh
fi
source ~/.config/zsh/.zshhighlighting
if [ -f ~/.config/zsh/.zshpersonalrc ]; then
source ~/.config/zsh/.zshpersonalrc
fi
accent_color="$(cat $HOME/.config/colors/accent)"
starship config format "'''[╭──\([\$username@\$hostname](bold $accent_color)\)-\[\$directory\](-\[\$git_branch\$git_metrics\$git_status\])(-\[\$nix_shell\])]($accent_color) \$cmd_duration
[╰─]($accent_color)[\$shell](bold $accent_color) '''"
eval "$(starship init zsh)"