Compare commits

...

24 Commits

Author SHA1 Message Date
cho
4d04b14349 add screen recording scripts 2024-01-31 19:09:01 +07:00
cho
f93d2a6558 add boom script 2024-01-31 19:08:20 +07:00
cho
cd7428e975 bugfix: HDMI monitor not enabled using wlopm on sway 2024-01-31 19:06:43 +07:00
cho
914a103b10 use river colors 2024-01-31 19:05:24 +07:00
cho
0b8154037e add unused android tools variables 2024-01-31 19:04:59 +07:00
cho
cf31104779 add mpc bindings 2024-01-31 19:04:13 +07:00
cho
e21550bc6f add used modules 2024-01-31 19:03:18 +07:00
cho
9ceb9dbd33 *
*
2024-01-27 16:13:34 +07:00
cho
0e6199ab8b remove .config/doom
rewrite doom config in .doom.d
add doom termux .config
2024-01-27 15:30:02 +07:00
cho
6c35aed2c6 extensive update: some cleanup, todo/agenda changes, publishing system, swayfx, WIPs, etc. 2023-12-17 05:51:21 +07:00
cho
50bd201ece delete load file, concat org-download filename, disable flyspell 2023-10-03 20:00:06 +07:00
cho
e088ea533f add org-roam shortcut to school and org-screenshot binding 2023-09-28 22:17:39 +07:00
cho
8a62c5280c delete custom.el 2023-09-28 20:18:15 +07:00
cho
79225406e8 update 2023-09-28 20:18:15 +07:00
cho
25665457f4 Revert "Revert "add org-download and config""
This reverts commit 617c86d44b7579e5c9c755e57a38933638f4e355.
2023-09-28 20:18:15 +07:00
cho
f2aa8f935c Revert "add org-download and config"
This reverts commit 09167cd5c42916472115b6fa0fb2a36ebbefa24d.
2023-09-28 20:18:15 +07:00
cho
8a61a535b9 add org-download and config, update other configs 2023-09-28 20:17:15 +07:00
cho
d9b03108b1 add mpv config 2023-09-05 20:44:34 +07:00
cho
8bdd17332f update 2023-09-05 20:43:34 +07:00
cho
3aa5120c24 properly kill emacs instead of using kill 2023-09-05 20:41:22 +07:00
cho
186f9af806 add syncplay.desktop 2023-09-05 20:40:57 +07:00
cho
a83355aa32 update settings, costumize org-capture and roam capture. etc. 2023-09-05 20:34:18 +07:00
cho
e01793f1bf fix sc-im opens neovim after exit 2023-09-05 20:27:22 +07:00
cho
5547096020 fix for org-roam on termux 2023-09-05 20:26:46 +07:00
84 changed files with 7548 additions and 830 deletions

8
.gitignore vendored
View File

@ -10,4 +10,12 @@ home/default/.config/mpd/mpd.state
home/default/.config/gtk-3.0/bookmarks
home/default/.config/zsh/.zcompdump
home/default/.local/bin/start-tasks
home/default/.local/sec
home/default/.config/newsboat/urls
home/default/.config/doom/bookmarks
home/default/.config/doom/custom.el
home/default/.config/doom/config/+priv-config.el
home/default/.config/sway/priv
home/default/.config/river/init-priv
home/default/.doom.d/bookmarks
home/default/.doom.d/custom.el

1252
docs/instructions.html Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,180 +0,0 @@
;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
;; Place your private configuration here! Remember, you do not need to run 'doom
;; sync' after modifying this file!
;; Some functionality uses this to identify you, e.g. GPG configuration, email
;; clients, file templates and snippets. It is optional.
(setq user-full-name "John Doe"
user-mail-address "john@doe.com")
;; Doom exposes five (optional) variables for controlling fonts in Doom:
;;
;; - `doom-font' -- the primary font to use
;; - `doom-variable-pitch-font' -- a non-monospace font (where applicable)
;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for
;; presentations or streaming.
;; - `doom-unicode-font' -- for unicode glyphs
;; - `doom-serif-font' -- for the `fixed-pitch-serif' face
;;
;; See 'C-h v doom-font' for documentation and more examples of what they
;; accept. For example:
;;
(setq doom-variable-pitch-font (font-spec :family "Libertinus Serif" :size 13))
;;
;; If you or Emacs can't find your font, use 'M-x describe-font' to look them
;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to
;; refresh your font settings. If Emacs still can't find your font, it likely
;; wasn't installed correctly. Font issues are rarely Doom issues!
;; There are two ways to load a theme. Both assume the theme is installed and
;; available. You can either set `doom-theme' or manually load a theme with the
;; `load-theme' function. This is the default:
(setq doom-theme 'doom-tomorrow-night)
;(setq doom-theme 'doom-one)
;(setq doom-theme 'doom-wilmersdorf)
;(setq doom-theme 'doom-plain-dark)
;(setq doom-theme 'doom-plain)
;(setq doom-theme 'doom-flatwhite)
;; This determines the style of line numbers in effect. If set to `nil', line
;; numbers are disabled. For relative line numbers, set this to `relative'.
(setq display-line-numbers-type t)
;; If you use `org' and don't want your org files in the default location below,
;; change `org-directory'. It must be set before org loads!
(setq org-directory "~/notebook/")
;; Whenever you reconfigure a package, make sure to wrap your config in an
;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
;;
;; (after! PACKAGE
;; (setq x y))
;;
;; The exceptions to this rule:
;;
;; - Setting file/directory variables (like `org-directory')
;; - Setting variables which explicitly tell you to set them before their
;; package is loaded (see 'C-h v VARIABLE' to look up their documentation).
;; - Setting doom variables (which start with 'doom-' or '+').
;;
;; Here are some additional functions/macros that will help you configure Doom.
;;
;; - `load!' for loading external *.el files relative to this one
;; - `use-package!' for configuring packages
;; - `after!' for running code after a package has loaded
;; - `add-load-path!' for adding directories to the `load-path', relative to
;; this file. Emacs searches the `load-path' when you load packages with
;; `require' or `use-package'.
;; - `map!' for binding new keys
;;
;; To get information about any of these functions/macros, move the cursor over
;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k').
;; This will open documentation for it, including demos of how they are used.
;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces,
;; etc).
;;
;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
;; they are implemented.
;;; agenda files
(setq org-agenda-files '("~/housekeeping/calendar.org"
"~/notebook/ag/"
"~/notebook/refile.org"))
(after! org
(setq org-log-done 'time)
(use-package! org-journal
:init
(setq org-journal-dir "~/diary"
org-journal-date-prefix "#+TITLE: "
org-journal-time-prefix "+ "
org-journal-date-format "%a, %Y-%m-%d"
org-journal-file-format "%Y-%m-%d.org"
)
)
(use-package! org-books
:init
(setq org-books-file "~/notebook/readinglist.org")
)
;; NOTIFICATIONS CONFIGURATION REFERENCE
;;; note : it's probably better to add this after
;;; setting org-agenda-files.
;;; use this under (!after org ...
;;; else it would't work
;
;(use-package! org-wild-notifier
; :defer t
; :init
; (add-hook 'doom-post-init-hook (org-wild-notifier-mode))
; :config
; (setq alert-default-style 'libnotify)
;;; set to libnotify or notifications or osx-notifier
; (setq org-wild-notifier-alert-time '(60 30))
;;; alert time defaults to '(10) if not set
; (setq org-wild-notifier-keyword-whitelist nil))
; (setq org-wild-notifier-keyword-blacklist '("DONE"))
(use-package! org-wild-notifier
:defer t
:init
(add-hook 'doom-post-init-hook (org-wild-notifier-mode))
:config
(setq alert-default-style 'libnotify)
(setq org-wild-notifier-alert-time '(10 0))
(setq org-wild-notifier-keyword-whitelist nil))
(setq org-wild-notifier-keyword-blacklist '("DONE"))
(use-package! org-roam
:ensure t
:custom
(setq org-roam-directory "~/notebook/roam/")
:config
(org-roam-setup))
)
;;; end of (!after org ...
;;; for testing
(defun org-wild-notifier-debug ()
"Collect debug information for org-wild-notifier"
(interactive)
(save-window-excursion
(let ((org-agenda-use-time-grid nil)
(org-agenda-compact-blocks t)
(org-agenda-window-setup 'current-window)
(org-agenda-buffer-name nil)
(org-agenda-buffer-tmp-name org-wild-notifier--agenda-buffer-name))
(org-agenda-list 2)
(message "registered events: %s \n blacklist: %s \n whitelist: %s \n"
(org-wild-notifier--retrieve-events)
org-wild-notifier-keyword-blacklist
org-wild-notifier-keyword-whitelist)
(message "filtered events: %s"
(->> (org-wild-notifier--retrieve-events)
(-map 'org-wild-notifier--check-event)))
(kill-buffer))))
(defun org-wild-notifier-alert-test ()
(interactive)
(alert "test")
)
;;; end
(defun agenda/hide-daily-schedule-1 (&optional arg)
(interactive "P")
(let ((org-agenda-tag-filter-preset '("-habits")))
(org-agenda arg "a")))
(bind-key "<f5>" 'agenda/hide-daily-schedule-1)

View File

@ -4,6 +4,7 @@
<alias>
<family>monospace</family>
<prefer>
<family>DejaVu Sans Mono</family>
<family>Noto Sans Mono</family>
<family>Unifont-JP</family>
<family>Unifont Upper</family>
@ -12,6 +13,13 @@
<family>Liberation Mono</family>
<family>FontAwesome</family>
<family>Braille</family>
<family>Symbols Nerd Font Mono</family>
</prefer>
</alias>
<alias>
<family>sans-serif</family>
<prefer>
<family>Symbols Nerd Font</family>
</prefer>
</alias>
</fontconfig>

View File

@ -3,30 +3,123 @@
font=monospace:size=10
dpi-aware=no
pad= 8x8
pad= 16x16
[url]
launch=xdg-open ${url}
# Catpuccin (with grey background)
# Tomorrow Light
##[cursor]
##color=373b41
#[colors]
#foreground=373b41
#background=ffffff
#regular0=1d1f21
#regular1=cc6666
#regular2=b5bd68
#regular3=f0c674
#regular4=81a2be
#regular5=b294bb
#regular6=8abeb7
#regular7=c5c8c6
#bright0=969896
#bright1=cc6666
#bright2=b5bd68
#bright3=f0c674
#bright4=81a2be
#bright5=b294bb
#bright6=8abeb7
#bright7=ffffff
#
#color16=#de935f
#color17=#a3685a
#color18=#282a2e
#color19=#373b41
#color20=#b4b7b4
#color21=#e0e0e0
# Tomorrow Night (grey background)
[cursor]
color=1A1826 D9E0EE
#color=c5c8c6
[colors]
alpha=0.85
foreground=ffffff
background=222222
regular0=6E6C7E # black
regular1=F28FAD # red
regular2=ABE9B3 # green
regular3=FAE3B0 # yellow
regular4=96CDFB # blue
regular5=F5C2E7 # magenta
regular6=89DCEB # cyan
regular7=D9E0EE # white
bright0=988BA2 # bright black
bright1=F28FAD # bright red
bright2=ABE9B3 # bright green
bright3=FAE3B0 # bright yellow
bright4=96CDFB # bright blue
bright5=F5C2E7 # bright magenta
bright6=89DCEB # bright cyan
bright7=D9E0EE # bright white
#alpha=0.80
# tomorrow night default
background=1d1f21
#background=000000
# grey
#background=161616
foreground=c5c8c6
regular0=1d1f21
regular1=cc6666
regular2=b5bd68
regular3=f0c674
regular4=81a2be
regular5=b294bb
regular6=8abeb7
regular7=c5c8c6
bright0=969896
bright1=cc6666
bright2=b5bd68
bright3=f0c674
bright4=81a2be
bright5=b294bb
bright6=8abeb7
bright7=ffffff
# Catpuccin (with grey background)
#[cursor]
#color=1A1826 D9E0EE
#
#[colors]
##alpha=0.85
#foreground=ffffff
##background=000000
#background=222222
#regular0=6E6C7E # black
#regular1=F28FAD # red
#regular2=ABE9B3 # green
#regular3=FAE3B0 # yellow
#regular4=96CDFB # blue
#regular5=F5C2E7 # magenta
#regular6=89DCEB # cyan
#regular7=D9E0EE # white
#bright0=988BA2 # bright black
#bright1=F28FAD # bright red
#bright2=ABE9B3 # bright green
#bright3=FAE3B0 # bright yellow
#bright4=96CDFB # bright blue
#bright5=F5C2E7 # bright magenta
#bright6=89DCEB # bright cyan
#bright7=D9E0EE # bright white
# PaperColorDark
# Palette based on https://github.com/NLKNguyen/papercolor-theme
#[cursor]
# color=1c1c1c eeeeee
#
#[colors]
##alpha=0.80
# background=1c1c1c
# foreground=eeeeee
# regular0=1c1c1c # black
# regular1=af005f # red
# regular2=5faf00 # green
# regular3=d7af5f # yellow
# regular4=5fafd7 # blue
# regular5=808080 # magenta
# regular6=d7875f # cyan
# regular7=d0d0d0 # white
# bright0=bcbcbc # bright black
# bright1=5faf5f # bright red
# bright2=afd700 # bright green
# bright3=af87d7 # bright yellow
# bright4=ffaf00 # bright blue
# bright5=ff5faf # bright magenta
# bright6=00afaf # bright cyan
# bright7=5f8787 # bright white

View File

@ -1,18 +0,0 @@
# DO NOT EDIT! This file will be overwritten by LXAppearance.
# Any customization should be done in ~/.gtkrc-2.0.mine instead.
include "/home/default/.gtkrc-2.0.mine"
gtk-theme-name="Materia-dark"
gtk-icon-theme-name="Papirus-Dark"
gtk-font-name="Sans 10"
gtk-cursor-theme-name="Adwaita"
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,22 @@
/* No (default) titlebar on wayland */
/*headerbar.titlebar.default-decoration {
background: transparent;
padding: 0;
margin: 0 0 -17px 0;
border: 0;
min-height: 0;
font-size: 0;
box-shadow: none;
}*/
/* rm -rf window shadows */
/*window.csd, /* gtk4? */
/*window.csd decoration { /* gtk3 */
/* box-shadow: none;
}*/
.titlebar, .css, headerbar {
background-image:none;
background-color:transparent;
margin-top:-100px;
margin-bottom:50px;
}

View File

@ -1,16 +0,0 @@
[Settings]
gtk-theme-name=Materia-dark
gtk-icon-theme-name=Papirus-Dark
gtk-font-name=Sans 10
gtk-cursor-theme-name=Adwaita
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
gtk-application-prefer-dark-theme=1

View File

@ -1,7 +1,7 @@
profile {
output HDMI-A-1 scale 1 mode 1366x768 position 0,0
output DVI-D-1 scale 1 mode 1280x1024 position 1366,0
output HDMI-A-1 enable scale 1 mode 1920x1080 position 0,0
output DVI-D-1 enable scale 1 mode 1280x1024 position 1920,0
}
profile {
output HDMI-A-1 scale 1 mode 1366x768
output HDMI-A-1 enable scale 1 mode 1920x1080
}

View File

@ -0,0 +1,7 @@
profile {
output HDMI-A-1 enable scale 1 mode 1920x1080 position 0,0
output DVI-D-1 disable
}
profile {
output HDMI-A-1 enable scale 1 mode 1920x1080
}

View File

@ -16,8 +16,8 @@ cmd open ${{
case "$(printf "%s\n" "$f" | awk '{print tolower($0)}')" in
*.kra|*.krz|*.ora) setsid -f krita $f >/dev/null 2>&1 && exit 0 ;;
*.xlsx) setsid -f libreoffice $f >/dev/null 2>&1 && exit 0 ;;
*.sc) sc-im $f ;;
*.org) setsid -f em $f >/dev/null 2>&1 && exit 0 ;;
*.sc) sc-im $f && exit 0;;
#*.org) setsid -f $EDITOR $f >/dev/null 2>&1 && exit 0 ;;
esac
case $(file --mime-type "$(readlink -f $f)" -b) in
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet) localc $fx ;;
@ -36,6 +36,7 @@ cmd open ${{
video/*|application/vnd.rn-realmedia) setsid -f mpv $f -quiet >/dev/null 2>&1 ;;
application/pdf|application/vnd.djvu) setsid -f zathura $fx >/dev/null 2>&1 ;;
application/epub*) setsid -f com.github.johnfactotum.Foliate $fx >/dev/null 2>&1 ;;
#application/epub*) setsid -f mupdf -U ~/epub.css $fx >/dev/null 2>&1 ;;
application/pgp-encrypted) $EDITOR $fx ;;
application/vnd.openxmlformats-officedocument.wordprocessingml.document|application/vnd.oasis.opendocument.text) setsid -f lowriter $fx >/dev/null 2>&1 ;;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet|application/octet-stream|application/vnd.oasis.opendocument.spreadsheet|application/vnd.oasis.opendocument.spreadsheet-template) setsid -f localc $fx >/dev/null 2>&1 ;;
@ -124,9 +125,7 @@ map V push :!nvim<space>
map W $setsid -f $TERMINAL >/dev/null 2>&1
map Y $printf "%s" "$fx" | xclip -selection clipboard
#map Y $printf "%s" "$fx" | xclip -selection clipboard
map Y $wl-copy < "$fx"
map <c-f> $setsid -f thunar . ; kill @#
# Source Bookmarks
source "~/.config/lf/shortcutrc"

View File

@ -53,7 +53,8 @@ case "$(file --dereference --brief --mime-type -- "$1")" in
mediainfo "$1";;
text/html) lynx -width="$4" -display_charset=utf-8 -dump "$1" ;;
text/troff) man ./ "$1" | col -b ;;
text/* | */xml | application/json) bat -p --terminal-width "$(($4-2))" -f "$1" ;;
text/* | */xml | application/json) highlight --out-format=ansi --width "$(($4-2))" "$1" ;;
#text/* | */xml | application/json) 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)"

View File

@ -1,31 +0,0 @@
map Ccac cd "/home/default/.cache"
map Ccf cd "/home/default/.config"
map CD cd "/home/default/Downloads"
map Cd cd "/home/default/Documents"
map Cdt cd "/home/default/.local/share"
map Crr cd "/home/default/.local/src"
map Ch cd "/home/default"
map Cm cd "/home/default/Music"
map Cmn cd "/mnt"
map Cpp cd "/home/default/Pictures"
map Csc cd "/home/default/.local/bin"
map Csrc cd "/home/default/.local/src"
map Cvv cd "/home/default/Videos"
map Ebf $$EDITOR "/home/default/.config/shell/bm-files"
map Ebd $$EDITOR "/home/default/.config/shell/bm-dirs"
map Ecfx $$EDITOR "/home/default/.config/x11/xresources"
map Ecfs $$EDITOR "/home/default/.config/sway/config"
map Ecfb $$EDITOR "/home/default/.config/waybar/config"
map EcfB $$EDITOR "/home/default/.config/waybar/style.css"
map Ecfv $$EDITOR "/home/default/.config/nvim/init.vim"
map Ecfz $$EDITOR "/home/default/.config/zsh/.zshrc"
map Ecfa $$EDITOR "/home/default/.config/shell/aliasrc"
map Ecfp $$EDITOR "/home/default/.config/shell/profile"
map Ecfm $$EDITOR "/home/default/.config/mutt/muttrc"
map Ecfn $$EDITOR "/home/default/.config/newsboat/config"
map Ecfu $$EDITOR "/home/default/.config/newsboat/urls"
map Ecfmb $$EDITOR "/home/default/.config/ncmpcpp/bindings"
map Ecfmc $$EDITOR "/home/default/.config/ncmpcpp/config"
map Ecfl $$EDITOR "/home/default/.config/lf/lfrc"
map EcfL $$EDITOR "/home/default/.config/lf/scope"
map EcfX $$EDITOR "/home/default/.config/nsxiv/exec/key-handler"

View File

@ -1,21 +1,26 @@
[Default Applications]
# xdg-open will use these settings to determine how to open filetypes.
# These .desktop entries can also be seen and changed in ~/.local/share/applications/
text/x-shellscript=text.desktop;
x-scheme-handler/magnet=torrent.desktop;
application/x-bittorrent=torrent.desktop;
x-scheme-handler/mailto=mail.desktop;
text/plain=text.desktop;
application/postscript=pdf.desktop;
application/pdf=pdf.desktop;
application/vnd.comicbook+zip=pdf.desktop;
application/vnd.comicbook-rar=pdf.desktop;
image/png=img.desktop;
image/jpeg=img.desktop;
image/gif=img.desktop;
image/jpeg=img.desktop
image/png=img.desktop
image/x-png=img.desktop
image/gif=img.desktop
text/x-shellscript=text.desktop
x-scheme-handler/magnet=torrent.desktop
application/x-bittorrent=torrent.desktop
x-scheme-handler/mailto=mail.desktop
text/plain=text.desktop
application/postscript=pdf.desktop
application/pdf=pdf.desktop
application/vnd.comicbook+zip=pdf.desktop
application/vnd.comicbook-rar=pdf.desktop
image/png=img.desktop
image/x-png=img.desktop
image/jpg=img.desktop
image/jpeg=img.desktop
image/gif=img.desktop
application/rss+xml=rss.desktop
video/x-matroska=video.desktop
video/mp4=video.desktop
@ -23,5 +28,5 @@ x-scheme-handler/lbry=lbry.desktop
inode/directory=file.desktop
# other
x-scheme-handler/https=librewolf.desktop;
x-scheme-handler/http=librewolf.desktop;
x-scheme-handler/https=io.gitlab.librewolf-community.desktop
x-scheme-handler/http=io.gitlab.librewolf-community.desktop

View File

@ -1,7 +1,7 @@
# mpd.conf
music_directory "~/Music"
playlist_directory "~/.config/mpd/playlists"
playlist_directory "~/Music/playlists"
pid_file "~/.config/mpd/mpd.pid"
db_file "~/.config/mpd/mpd.db"
state_file "~/.config/mpd/mpd.state"

View File

@ -0,0 +1,4 @@
l seek 5
h seek -5
j seek -60
k seek 60

View File

@ -0,0 +1 @@
save-position-on-quit

View File

@ -7,6 +7,7 @@ message_delay_time = "1"
visualizer_type = "spectrum"
song_list_format = {$4%a - }{%t}|{$8%f$9}$R{$3(%l)$9}
song_status_format = $b{{$8"%t"}} $3by {$4%a{ $3in $7%b{ (%y)}} $3}|{$8%f}
#song_status_format = $b{{$8"%t"}} $8by {$8%a{ $8in $8%b{ (%y)}} $8}|{$8%f}
song_library_format = {%n - }{%t}|{%f}
alternative_header_first_line_format = $b$1$aqqu$/a$9 {%t}|{%f} $1$atqq$/a$9$/b
alternative_header_second_line_format = {{$4$b%a$/b$9}{ - $7%b$9}{ ($4%y$9)}}|{%D}
@ -31,3 +32,6 @@ progressbar_elapsed_color = blue:b
statusbar_color = red
statusbar_time_color = cyan:b
allow_for_physical_item_deletion = "yes"
#main_window_color = black
#song_status_format = $b{{$1"%t"}} $3by {$4%a{ $3in $7%b{ (%y)}} $3}|{$1%f}

View File

@ -1,8 +1,9 @@
#show-read-feeds no
auto-reload yes
external-url-viewer "urlscan -dc -r 'linkhandler {}'"
#external-url-viewer "urlscan -dc -r 'linkhandler {}'"
## vim bindings
bind-key j down
bind-key k up
bind-key j next articlelist
@ -18,31 +19,79 @@ bind-key h quit
bind-key a toggle-article-read
bind-key n next-unread
bind-key N prev-unread
bind-key D pb-download
bind-key U show-urls
bind-key x pb-delete
#bind-key D pb-download
#bind-key x pb-delete
browser linkhandler
macro , open-in-browser
#macro t set browser "qndl" ; open-in-browser ; set browser linkhandler
#macro a set browser "tsp yt-dlp --embed-metadata --embed-thumbnail -xc -f bestaudio/best --restrict-filenames" ; open-in-browser ; set browser linkhandler
#macro v set browser "setsid -f mpv" ; open-in-browser ; set browser linkhandler
#macro w set browser "lynx" ; open-in-browser ; set browser linkhandler
#macro d set browser "dmenuhandler" ; open-in-browser ; set browser linkhandler
#macro c set browser "echo %u | xclip -r -sel c" ; open-in-browser ; set browser linkhandler
#macro C set browser "setsid -f $TERMINAL -e pipe-viewer --comments=%u" ; open-in-browser ; set browser linkhandler
#macro p set browser "peertubetorrent %u 480" ; open-in-browser ; set browser linkhandler
#macro P set browser "peertubetorrent %u 1080" ; open-in-browser ; set browser linkhandler
#macro y set browser "setsid -f flatpak run io.freetubeapp.FreeTube %u >/dev/null 2>&1" ; open-in-browser ; set browser linkhandler
# random
#color background white black
#color listnormal color244 black
#color listfocus default red
#color listnormal_unread white default
#color listfocus_unread default red
#color info black yellow
#color article white black
# gruvbox
#color listnormal cyan default
#color listfocus black yellow standout bold
#color listnormal_unread blue default
#color listfocus_unread yellow default bold
#color info red black bold
#color article white default bold
color info white default bold
#color listfocus white color8
#color listfocus_unread white color8 bold
color listnormal cyan default
color listfocus black yellow standout bold
color listnormal_unread blue default
color listfocus_unread yellow default bold
#color info red black bold
color info red default
color article white default bold
browser linkhandler
macro , open-in-browser
macro t set browser "qndl" ; open-in-browser ; set browser linkhandler
macro a set browser "tsp yt-dlp --embed-metadata --embed-thumbnail -xc -f bestaudio/best --restrict-filenames" ; open-in-browser ; set browser linkhandler
macro v set browser "setsid -f mpv" ; open-in-browser ; set browser linkhandler
macro w set browser "lynx" ; open-in-browser ; set browser linkhandler
macro d set browser "dmenuhandler" ; open-in-browser ; set browser linkhandler
macro c set browser "echo %u | xclip -r -sel c" ; open-in-browser ; set browser linkhandler
macro C set browser "setsid -f $TERMINAL -e pipe-viewer --comments=%u" ; open-in-browser ; set browser linkhandler
macro p set browser "peertubetorrent %u 480" ; open-in-browser ; set browser linkhandler
macro P set browser "peertubetorrent %u 1080" ; open-in-browser ; set browser linkhandler
macro y set browser "setsid -f flatpak run io.freetubeapp.FreeTube %u >/dev/null 2>&1" ; open-in-browser ; set browser linkhandler
#color info white color8
#color listnormal white black
#color listnormal_unread white black bold
#color article white black
#color listfocus white color8
#color listfocus_unread color8 black bold
#color listfocus cyan color8 bold
#color listfocus_unread cyan color8 bold
#color listnormal cyan default
#color listfocus black yellow standout bold
#color listnormal_unread blue default
#color listfocus_unread yellow default bold
#color info red black bold
##color info white color8
#color article white default
#color listnormal cyan default
#color listnormal_unread blue default
#color listnormal white default bold
#color listnormal_unread color8 default
highlight all "--.*--" white
highlight all "---.*---" yellow
highlight feedlist ".*(0/0))" black
highlight article "(^Feed:.*|^Title:.*|^Author:.*)" cyan default bold
@ -55,3 +104,4 @@ highlight article "\\[embedded flash: [0-9][0-9]*\\]" green default bold
highlight article ":.*\\(link\\)$" cyan default
highlight article ":.*\\(image\\)$" blue default
highlight article ":.*\\(embedded flash\\)$" magenta default

View File

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

View File

@ -1,33 +1,12 @@
#!/bin/sh
# todo: import to wayland
while read -r file
do
case "$1" in
"w") change-background "$file" & ;;
"c")
[ -z "$destdir" ] && destdir="$(sed "s/#.*$//;/^\s*$/d" ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | awk '{print $2}' | rofi -dmenu -l 20 -i -p "Copy file(s) to where?" | sed "s|~|$HOME|g")"
[ ! -d "$destdir" ] && notify-send "$destdir is not a directory, cancelled." && exit
cp "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file copied to $destdir." &
;;
"m")
[ -z "$destdir" ] && destdir="$(sed "s/#.*$//;/^\s*$/d" ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | awk '{print $2}' | rofi -dmenu -l 20 -i -p "Move file(s) to where?" | sed "s|~|$HOME|g")"
[ ! -d "$destdir" ] && notify-send "$destdir is not a directory, cancelled." && exit
mv "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file moved to $destdir." &
;;
"r")
convert -rotate 90 "$file" "$file" ;;
"R")
convert -rotate -90 "$file" "$file" ;;
"f")
convert -flop "$file" "$file" ;;
"y")
printf "%s" "$file" | tr -d '\n' | xclip -selection clipboard &&
notify-send "$file copied to clipboard" & ;;
"Y")
readlink -f "$file" | tr -d '\n' | xclip -selection clipboard &&
notify-send "$(readlink -f "$file") copied to clipboard" & ;;
"b") change-background "$file" & ;;
"y") wl-copy < $file ;;
"d")
[ "$(printf "No\\nYes" | rofi -dmenu -i -p "Really delete $file?")" = "Yes" ] && rm "$file" && notify-send "$file deleted." ;;
#[ "$(printf "No\\nYes" | rofi -dmenu -i -p "Really delete $file?")" = "Yes" ] && rm "$file" && notify-send "$file deleted." ;;
[ "$(printf "No\\nYes" | wofi --insensitive --show dmenu --prompt="Really delete $file?")" = "Yes" ] && rm "$file" && notify-send "$file deleted." ;;
"g") setsid -f gimp "$file" ;;
"i") notify-send "File information" "$(mediainfo "$file" | sed "s/[ ]\+:/:/g;s/: /: <b>/;s/$/<\/b>/" | grep "<b>")" ;;
esac

View File

@ -0,0 +1,108 @@
vim.opt.clipboard="unnamed,unnamedplus"
vim.g.mapleader = ' '
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({
"git",
"clone",
"--filter=blob:none",
"https://github.com/folke/lazy.nvim.git",
"--branch=stable", -- latest stable release
lazypath,
})
end
vim.opt.rtp:prepend(lazypath)
require("lazy").setup({
"nyoom-engineering/oxocarbon.nvim",
{"nvim-treesitter/nvim-treesitter", build = ":TSUpdate"},
{
'nvim-orgmode/orgmode',
dependencies = {
{ 'nvim-treesitter/nvim-treesitter', lazy = true },
},
event = 'VeryLazy',
config = function()
-- Load treesitter grammar for org
require('orgmode').setup_ts_grammar()
-- Setup treesitter
require('nvim-treesitter.configs').setup({
highlight = {
enable = false,
additional_vim_regex_highlighting = { 'org' },
},
ensure_installed = { 'org' },
})
-- Setup orgmode -- NOTE (to self) THAT I ONLY USE THIS FOR CAPTURING CODE
-- AND CHANGING Todo STATES in todo.org FOR CODING
-- for simplicity's sake
require('orgmode').setup({
--org_agenda_files = '~/orgfiles/**/*',
org_agenda_files = '~/notebook/ag/*',
org_default_notes_file = '~/notebook/ag/todo.org',
org_log_done = 'time',
org_log_into_drawer = 'LOGBOOK',
--org_todo_keywords = {'TODO(t)', 'NEXT(n)', '|', 'DONE(d)'},
org_todo_keywords = {"TODO(t)", "PROJ(p)", "LOOP(r)", "STRT(s)", "WAIT(w)", "HOLD(h)", "IDEA(i)", "|", "DONE(d)", "KILL(k)"},
org_capture_templates = {
t = {
description = 'todo with link',
template = '* TODO %?\n%i\n%a',
target = '~/notebook/ag/todo.org',
headline = 'todo',
},
T = {
description = 'todo no link',
template = '* TODO %?\n%i\n%a',
target = '~/notebook/ag/todo.org',
headline = 'todo',
},
},
mappings = { -- make as close to doom
--disable_all = true,
global = {
org_agenda = {'<Leader>oa'},
org_capture = '<Leader>x',
},
agenda = {
org_agenda_todo = '<Leader>mt',
org_agenda_schedule = '<Leader>mds',
org_agenda_deadline = '<Leader>mdd',
org_agenda_ = '<Leader>mds',
},
org = {
org_todo = '<Leader>mt',
org_priority = '<Leader>mpp',
--org_move_subtree_up = '<ALT-k>',
--org_move_subtree_down = '<ALT-j>',
org_schedule = '<Leader>mds',
org_deadline = '<Leader>mdd',
org_time_stamp = '<Leader>mdt',
org_time_stamp_inactive = '<Leader>mdT',
},
},
})
end,
},
{
'nvim-telescope/telescope.nvim', tag = '0.1.5',
-- or , branch = '0.1.x',
dependencies = { 'nvim-lua/plenary.nvim' }
},
})
--vim.opt.background = "dark" -- set this to dark or light
--vim.cmd("colorscheme oxocarbon")
--keybinds
vim.keymap.set("n", "<leader>.", vim.cmd.Ex)
vim.keymap.set("n", "<leader>ff", vim.cmd.Ex)
local builtin = require('telescope.builtin')
vim.keymap.set('n', '<leader><leader>', builtin.find_files, {})
--vim.keymap.set('n', '<leader>fg', builtin.live_grep, {})
--vim.keymap.set('n', '<leader>fb', builtin.buffers, {})
--vim.keymap.set('n', '<leader>fh', builtin.help_tags, {})

View File

@ -1,2 +0,0 @@
let mapleader =","
set clipboard+=unnamedplus

275
home/default/.config/river/init Executable file
View File

@ -0,0 +1,275 @@
#!/bin/sh
# TODO
# This is the example configuration file for river.
#
# If you wish to edit this, you will probably want to copy it to
# $XDG_CONFIG_HOME/river/init or $HOME/.config/river/init first.
#
# See the river(1), riverctl(1), and rivertile(1) man pages for complete
# documentation.
# Note: the "Super" modifier is also known as Logo, GUI, Windows, Mod4, etc.
# Super+Return to start an instance of foot (https://codeberg.org/dnkl/foot)
riverctl map normal Super Return spawn $TERMINAL
riverctl map normal Super E spawn "emacsclient -c -a ''"
riverctl map normal Super D spawn "wofi --show drun"
riverctl map normal Super+Shift D spawn "wofi --show run"
riverctl map normal Super W spawn $BROWSER
riverctl map normal Super M spawn "$TERMINAL -e ncmpcpp"
riverctl map normal Super R spawn "$TERMINAL -e lf"
riverctl map normal Super+Shift N spawn "$TERMINAL -e newsboat"
riverctl map normal Super T spawn "swaync-client -t"
riverctl map normal Super+Control P spawn "$TERMINAL -e pulsemixer"
riverctl map normal Super B spawn "emacsclient -c -a '' ~/notebook/bookmarks.org"
riverctl map normal Super+Shift B spawn "bookmark"
# riverctl map normal Super Insert spawn 'wtype "$(grep -v '^#' ~/notebook/bookmarks.org | dmenu -l 50 | cut -d' ' -f1)"' # TODO broken?
riverctl map normal Print spawn 'screenshot.sh output'
riverctl map normal Super Print spawn 'screenshot.sh active'
riverctl map normal Super+Shift Print spawn 'screenshot.sh window'
riverctl map normal Super+Control u spawn 'screenshot.sh output'
riverctl map normal Super u spawn 'screenshot.sh active'
riverctl map normal Super+Shift u spawn 'screenshot.sh window'
riverctl map normal Super Equal spawn 'wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+'
riverctl map normal Super Minus spawn 'wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-'
riverctl map normal Super+Shift Equal spawn 'wpctl set-volume @DEFAULT_AUDIO_SINK@ 15%+'
riverctl map normal Super+Shift Minus spawn 'wpctl set-volume @DEFAULT_AUDIO_SINK@ 15%-'
riverctl map normal Super+Shift m spawn 'wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle'
riverctl map normal Super P spawn 'mpc toggle'
riverctl map normal Super O spawn 'mpc next'
riverctl map normal Super I spawn 'mpc prev'
# Super+Q to close the focused view
riverctl map normal Super Q close
# Super+Shift+Backspace to exit river
riverctl map normal Super+Shift Backspace exit
# riverctl map normal Super+Shift Backspace 'prompt "Do you really wont to exit river? This will end your Wayland session" "riverctl exit"'
riverctl map normal Super+Shift R spawn "$HOME/.config/river/init"
riverctl map normal Super Backspace spawn sysact
# Super+X to toggle waybar
riverctl map normal Super X spawn 'killall -SIGUSR1 waybar'
# Super+J and Super+K to focus the next/previous view in the layout stack
riverctl map normal Super J focus-view next
riverctl map normal Super K focus-view previous
# Super+Shift+J and Super+Shift+K to swap the focused view with the next/previous
# view in the layout stack
riverctl map normal Super+Shift J swap next
riverctl map normal Super+Shift K swap previous
# Super+Period and Super+Comma to focus the next/previous output
riverctl map normal Super Period focus-output next
riverctl map normal Super Comma focus-output previous
riverctl map normal Super Right focus-output next
riverctl map normal Super Left focus-output previous
# Super+Shift+{Period,Comma} to send the focused view to the next/previous output
#riverctl map normal Super+Shift Period send-to-output -current-tags next
#riverctl map normal Super+Shift Comma send-to-output -current-tags previous
riverctl map normal Super+Shift Period spawn "riverctl send-to-output -current-tags previous && riverctl focus-output previous"
riverctl map normal Super+Shift Comma spawn "riverctl send-to-output -current-tags next && riverctl focus-output next"
riverctl map normal Super+Shift Right spawn "riverctl send-to-output -current-tags previous && riverctl focus-output previous"
riverctl map normal Super+Shift Left spawn "riverctl send-to-output -current-tags next && riverctl focus-output next"
# Same but with alt
#riverctl map normal Super+Alt Period send-to-output -current-tags next
#riverctl map normal Super+Alt Comma send-to-output -current-tags previous
riverctl map normal Super+Alt Period spawn "riverctl send-to-output -current-tags previous && riverctl focus-output previous"
riverctl map normal Super+Alt Comma spawn "riverctl send-to-output -current-tags next && riverctl focus-output next"
riverctl map normal Super+Alt Right send-to-output next
riverctl map normal Super+Alt Left send-to-output previous
# Super+Return to bump the focused view to the top of the layout stack
riverctl map normal Super+Shift Return zoom
riverctl map normal Super Space zoom
# Super+H and Super+L to decrease/increase the main ratio of rivertile(1)
riverctl map normal Super H send-layout-cmd rivertile "main-ratio -0.05"
riverctl map normal Super L send-layout-cmd rivertile "main-ratio +0.05"
# Super+Shift+H and Super+Shift+L to increment/decrement the main count of rivertile(1)
riverctl map normal Super+Shift H send-layout-cmd rivertile "main-count +1"
riverctl map normal Super+Shift L send-layout-cmd rivertile "main-count -1"
# Super+Alt+{H,J,K,L} to move views
riverctl map normal Super+Alt H move left 100
riverctl map normal Super+Alt J move down 100
riverctl map normal Super+Alt K move up 100
riverctl map normal Super+Alt L move right 100
# Super+Alt+Control+{H,J,K,L} to snap views to screen edges
riverctl map normal Super+Alt+Control H snap left
riverctl map normal Super+Alt+Control J snap down
riverctl map normal Super+Alt+Control K snap up
riverctl map normal Super+Alt+Control L snap right
# Super+Alt+Shift+{H,J,K,L} to resize views (default by 100)
riverctl map normal Super+Alt+Shift H resize horizontal -50
riverctl map normal Super+Alt+Shift J resize vertical 50
riverctl map normal Super+Alt+Shift K resize vertical -50
riverctl map normal Super+Alt+Shift L resize horizontal 50
# Super + Left Mouse Button to move views
riverctl map-pointer normal Super BTN_LEFT move-view
# Super + Right Mouse Button to resize views
riverctl map-pointer normal Super BTN_RIGHT resize-view
for i in $(seq 1 9)
do
tags=$((1 << ($i - 1)))
# Super+[1-9] to focus tag [0-8]
riverctl map normal Super $i set-focused-tags $tags
# Super+Shift+[1-9] to tag focused view with tag [0-8]
riverctl map normal Super+Shift $i set-view-tags $tags
# Super+Ctrl+[1-9] to toggle focus of tag [0-8]
riverctl map normal Super+Control $i toggle-focused-tags $tags
# Super+Shift+Ctrl+[1-9] to toggle tag [0-8] of focused view
riverctl map normal Super+Shift+Control $i toggle-view-tags $tags
done
# Super+0 to focus all tags
# Super+Shift+0 to tag focused view with all tags
all_tags=$(((1 << 32) - 1))
riverctl map normal Super 0 set-focused-tags $all_tags
riverctl map normal Super+Shift 0 set-view-tags $all_tags
# Super+Shift+Space to toggle float
riverctl map normal Super+Shift Space toggle-float
# Super+F to toggle fullscreen
riverctl map normal Super F toggle-fullscreen
# Super+{Up,Right,Down,Left} to change layout orientation
riverctl map normal Super Up send-layout-cmd rivertile "main-location top"
riverctl map normal Super Right send-layout-cmd rivertile "main-location right"
riverctl map normal Super Down send-layout-cmd rivertile "main-location bottom"
riverctl map normal Super Left send-layout-cmd rivertile "main-location left"
# Declare a passthrough mode. This mode has only a single mapping to return to
# normal mode. This makes it useful for testing a nested wayland compositor
riverctl declare-mode passthrough
# Super+F11 to enter passthrough mode
riverctl map normal Super F11 enter-mode passthrough
# Super+F11 to return to normal mode
riverctl map passthrough Super F11 enter-mode normal
# Various media key mapping examples for both normal and locked mode which do
# not have a modifier
for mode in normal locked
do
# Eject the optical drive (well if you still have one that is)
riverctl map $mode None XF86Eject spawn 'eject -T'
# Control pulse audio volume with pamixer (https://github.com/cdemoulins/pamixer)
riverctl map $mode None XF86AudioRaiseVolume spawn 'wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+'
riverctl map $mode None XF86AudioLowerVolume spawn 'wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-'
riverctl map $mode None XF86AudioMute spawn 'wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle'
riverctl map $mode None XF86AudioMicMute spawn 'wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle'
# Control MPRIS aware media players with playerctl (https://github.com/altdesktop/playerctl)
riverctl map $mode None XF86AudioMedia spawn 'playerctl play-pause'
riverctl map $mode None XF86AudioPlay spawn 'playerctl play-pause'
riverctl map $mode None XF86AudioPrev spawn 'playerctl previous'
riverctl map $mode None XF86AudioNext spawn 'playerctl next'
# Control screen backlight brightness with light (https://github.com/haikarainen/light)
riverctl map $mode None XF86MonBrightnessUp spawn 'brightnessctl set 10%+'
riverctl map $mode None XF86MonBrightnessDown spawn 'brightnessctl set 10%-'
done
# Set background and border color
riverctl background-color 0x002b36
riverctl border-color-focused 0x93a1a1
riverctl border-color-unfocused 0x586e75
## Autostart
riverctl spawn swaync
riverctl spawn 'killall waybar'
riverctl spawn 'sleep 2 && waybar -c ~/.config/waybar/config-river'
riverctl spawn change-background
riverctl spawn 'sleep 5 && xrdb -load $HOME/.config/x11/xresources'
#riverctl spawn mpd
#riverctl spawn fcitx5
#riverctl spawn deluged
riverctl spawn "setsid -f syncthing --no-browser"
riverctl spawn "sleep 10 && kanshi"
riverctl spawn 'killall swayidle ; sleep 3 && idle'
#riverctl spawn 'gammastep -P -l <lat>:<long> -t 6500:5000'
riverctl spawn '~/.config/river/init-priv'
riverctl spawn "systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=river"
riverctl spawn "dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=river"
# Set keyboard repeat rate
riverctl set-repeat 30 300
# Make certain views start floating
riverctl float-filter-add app-id float
riverctl float-filter-add title "popup title with spaces"
#riverctl rule-add -app-id "*" ssd
riverctl rule-add -app-id "emacs" ssd
riverctl rule-add -app-id "LibreWolf" ssd
riverctl rule-add -app-id "deluge" ssd
riverctl rule-add -app-id "steam" ssd
riverctl rule-add -app-id "im.dino.Dino" ssd
# Make all views with an app-id that starts with "float" and title "foo" start floating.
riverctl rule-add -app-id 'float*' -title 'foo' float
# Make all views with app-id "bar" and any title use client-side decorations
riverctl rule-add -app-id "bar" csd
# Set app-ids and titles of views which should use client side decorations
riverctl csd-filter-add app-id "gedit"
# Set the default layout generator to be rivertile and start it.
# River will send the process group of the init executable SIGTERM on exit.
riverctl default-layout rivertile
rivertile -view-padding 15 -outer-padding 15
# default 6
#: Performance tuning {{{
#repaint_delay 0
#: Delay (in milliseconds) between screen updates. Decreasing it,
#: increases frames-per-second (FPS) at the cost of more CPU usage.
#: The default value yields ~100 FPS which is more than sufficient for
#: most uses. Note that to actually achieve 100 FPS you have to either
#: set sync_to_monitor to no or use a monitor with a high refresh
#: rate. Also, to minimize latency when there is pending input to be
#: processed, repaint_delay is ignored.
#input_delay 0
#: Delay (in milliseconds) before input from the program running in
#: the terminal is processed. Note that decreasing it will increase
#: responsiveness, but also increase CPU usage and might cause flicker
#: in full screen programs that redraw the entire screen on each loop,
#: because kitty is so fast that partial screen updates will be drawn.
sync_to_monitor no
#: Sync screen updates to the refresh rate of the monitor. This
#: prevents tearing (https://en.wikipedia.org/wiki/Screen_tearing)
#: when scrolling. However, it limits the rendering speed to the
#: refresh rate of your monitor. With a very high speed mouse/high
#: keyboard repeat rate, you may notice some slight input latency. If
#: so, set this to no.
#: }}}

View File

@ -0,0 +1,163 @@
#!/bin/sh
# This is the example configuration file for river.
#
# If you wish to edit this, you will probably want to copy it to
# $XDG_CONFIG_HOME/river/init or $HOME/.config/river/init first.
#
# See the river(1), riverctl(1), and rivertile(1) man pages for complete
# documentation.
# Note: the "Super" modifier is also known as Logo, GUI, Windows, Mod4, etc.
# Super+Shift+Return to start an instance of foot (https://codeberg.org/dnkl/foot)
riverctl map normal Super+Shift Return spawn foot
# Super+Q to close the focused view
riverctl map normal Super Q close
# Super+Shift+E to exit river
riverctl map normal Super+Shift E exit
# Super+J and Super+K to focus the next/previous view in the layout stack
riverctl map normal Super J focus-view next
riverctl map normal Super K focus-view previous
# Super+Shift+J and Super+Shift+K to swap the focused view with the next/previous
# view in the layout stack
riverctl map normal Super+Shift J swap next
riverctl map normal Super+Shift K swap previous
# Super+Period and Super+Comma to focus the next/previous output
riverctl map normal Super Period focus-output next
riverctl map normal Super Comma focus-output previous
# Super+Shift+{Period,Comma} to send the focused view to the next/previous output
riverctl map normal Super+Shift Period send-to-output -current-tags next
riverctl map normal Super+Shift Comma send-to-output -current-tagsjprevious
# Super+Return to bump the focused view to the top of the layout stack
riverctl map normal Super Return zoom
# Super+H and Super+L to decrease/increase the main ratio of rivertile(1)
riverctl map normal Super H send-layout-cmd rivertile "main-ratio -0.05"
riverctl map normal Super L send-layout-cmd rivertile "main-ratio +0.05"
# Super+Shift+H and Super+Shift+L to increment/decrement the main count of rivertile(1)
riverctl map normal Super+Shift H send-layout-cmd rivertile "main-count +1"
riverctl map normal Super+Shift L send-layout-cmd rivertile "main-count -1"
# Super+Alt+{H,J,K,L} to move views
riverctl map normal Super+Alt H move left 100
riverctl map normal Super+Alt J move down 100
riverctl map normal Super+Alt K move up 100
riverctl map normal Super+Alt L move right 100
# Super+Alt+Control+{H,J,K,L} to snap views to screen edges
riverctl map normal Super+Alt+Control H snap left
riverctl map normal Super+Alt+Control J snap down
riverctl map normal Super+Alt+Control K snap up
riverctl map normal Super+Alt+Control L snap right
# Super+Alt+Shift+{H,J,K,L} to resize views
riverctl map normal Super+Alt+Shift H resize horizontal -100
riverctl map normal Super+Alt+Shift J resize vertical 100
riverctl map normal Super+Alt+Shift K resize vertical -100
riverctl map normal Super+Alt+Shift L resize horizontal 100
# Super + Left Mouse Button to move views
riverctl map-pointer normal Super BTN_LEFT move-view
# Super + Right Mouse Button to resize views
riverctl map-pointer normal Super BTN_RIGHT resize-view
# Super + Middle Mouse Button to toggle float
riverctl map-pointer normal Super BTN_MIDDLE toggle-float
for i in $(seq 1 9)
do
tags=$((1 << ($i - 1)))
# Super+[1-9] to focus tag [0-8]
riverctl map normal Super $i set-focused-tags $tags
# Super+Shift+[1-9] to tag focused view with tag [0-8]
riverctl map normal Super+Shift $i set-view-tags $tags
# Super+Control+[1-9] to toggle focus of tag [0-8]
riverctl map normal Super+Control $i toggle-focused-tags $tags
# Super+Shift+Control+[1-9] to toggle tag [0-8] of focused view
riverctl map normal Super+Shift+Control $i toggle-view-tags $tags
done
# Super+0 to focus all tags
# Super+Shift+0 to tag focused view with all tags
all_tags=$(((1 << 32) - 1))
riverctl map normal Super 0 set-focused-tags $all_tags
riverctl map normal Super+Shift 0 set-view-tags $all_tags
# Super+Space to toggle float
riverctl map normal Super Space toggle-float
# Super+F to toggle fullscreen
riverctl map normal Super F toggle-fullscreen
# Super+{Up,Right,Down,Left} to change layout orientation
riverctl map normal Super Up send-layout-cmd rivertile "main-location top"
riverctl map normal Super Right send-layout-cmd rivertile "main-location right"
riverctl map normal Super Down send-layout-cmd rivertile "main-location bottom"
riverctl map normal Super Left send-layout-cmd rivertile "main-location left"
# Declare a passthrough mode. This mode has only a single mapping to return to
# normal mode. This makes it useful for testing a nested wayland compositor
riverctl declare-mode passthrough
# Super+F11 to enter passthrough mode
riverctl map normal Super F11 enter-mode passthrough
# Super+F11 to return to normal mode
riverctl map passthrough Super F11 enter-mode normal
# Various media key mapping examples for both normal and locked mode which do
# not have a modifier
for mode in normal locked
do
# Eject the optical drive (well if you still have one that is)
riverctl map $mode None XF86Eject spawn 'eject -T'
# Control pulse audio volume with pamixer (https://github.com/cdemoulins/pamixer)
riverctl map $mode None XF86AudioRaiseVolume spawn 'pamixer -i 5'
riverctl map $mode None XF86AudioLowerVolume spawn 'pamixer -d 5'
riverctl map $mode None XF86AudioMute spawn 'pamixer --toggle-mute'
# Control MPRIS aware media players with playerctl (https://github.com/altdesktop/playerctl)
riverctl map $mode None XF86AudioMedia spawn 'playerctl play-pause'
riverctl map $mode None XF86AudioPlay spawn 'playerctl play-pause'
riverctl map $mode None XF86AudioPrev spawn 'playerctl previous'
riverctl map $mode None XF86AudioNext spawn 'playerctl next'
# Control screen backlight brightness with light (https://github.com/haikarainen/light)
riverctl map $mode None XF86MonBrightnessUp spawn 'light -A 5'
riverctl map $mode None XF86MonBrightnessDown spawn 'light -U 5'
done
# Set background and border color
riverctl background-color 0x002b36
riverctl border-color-focused 0x93a1a1
riverctl border-color-unfocused 0x586e75
# Set keyboard repeat rate
riverctl set-repeat 50 300
# Make all views with an app-id that starts with "float" and title "foo" start floating.
riverctl rule-add -app-id 'float*' -title 'foo' float
# Make all views with app-id "bar" and any title use client-side decorations
riverctl rule-add -app-id "bar" csd
# Set the default layout generator to be rivertile and start it.
# River will send the process group of the init executable SIGTERM on exit.
riverctl default-layout rivertile
rivertile -view-padding 6 -outer-padding 6 &

View File

@ -0,0 +1 @@
set copy_to_clipboard_delimited_tab=1

View File

@ -1,67 +1,51 @@
#!/bin/sh
# Use neovim for vim if present.
[ -x "$(command -v nvim)" ] && alias vim="nvim" vimdiff="nvim -d"
# Use $XINITRC variable if file exists.
[ -f "$XINITRC" ] && alias startx="startx $XINITRC"
[ -f "$MBSYNCRC" ] && alias mbsync="mbsync -c $MBSYNCRC"
# sudo not required for some system commands
for command in mount umount sv pacman updatedb su shutdown poweroff reboot ; do
for command in mount umount updatedb su shutdown poweroff reboot ; do
alias $command="sudo $command"
done; unset command
se() { cd ~/.local/bin; $EDITOR $(fzf) ;}
# Verbosity and settings that you pretty much just always are going to want.
alias \
e="emacsclient -tty -a ''" \
emc="setsid -f emacsclient -c -a '' >/dev/null 2>&1" \
emo="emacsclient" \
kem="emacsclient -e '(kill-emacs)'" \
vimdiff="nvim -d" \
cp="cp -iv" \
mv="mv -iv" \
rm="rm -vI" \
bc="bc -ql" \
pg="ps -aux | grep --color=auto" \
mkd="mkdir -pv" \
ffmpeg="ffmpeg -hide_banner"
wedit(){
which $@ >/dev/null 2>&1 && [ -n "$1" ] && vim $(which $@) && exit 0
printf "file doesn't exist.\n"
}
# Colorize commands when possible.
alias \
ffmpeg="ffmpeg -hide_banner" \
ls="ls -hN --color=auto --group-directories-first" \
grep="grep --color=auto" \
diff="diff --color=auto" \
ccat="highlight --out-format=ansi" \
ip="ip -color=auto"
# These common commands are just too long! Abbreviate them.
alias \
ip="ip -color=auto" \
ka="killall" \
g="git" \
sdn="shutdown -h now" \
e="$EDITOR" \
v="nvim" \
z="zathura" \
i="nsxiv -a"
alias \
magit="nvim -c MagitOnly" \
ref="shortcuts >/dev/null; source ${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc ; source ${XDG_CONFIG_HOME:-$HOME/.config}/shell/zshnameddirrc" \
weath="curl wttr.in"
# misc
alias \
ytmus="yt-dlp --embed-metadata --embed-thumbnail -xc -f bestaudio/best --restrict-filenames" \
d="sdcv" \
i="nsxiv -a" \
pg="ps -aux | grep --color=auto" \
weath="curl wttr.in" \
ytmus="yt-dlp --embed-metadata --embed-thumbnail -xc -f 'bestaudio[ext=m4a]'" \
ytvid="yt-dlp --embed-metadata --embed-thumbnail --embed-chapters --write-auto-subs -f bestvideo'[height<=1080]''[ext=mp4]'+bestaudio'[ext=m4a]'/best'[ext=mp4]'/best" \
t="todo.sh -t -d $HOME/notebook/todo/todo.cfg" \
fj="firejail --profile=$HOME/.config/firejail/game.profile" \
dj="dijo" \
hgs="hugo server --noHTTPCache --disableFastRender"
hgs="hugo server --noHTTPCache --disableFastRender" \
left='uxnemu ~/.local/uxn/left.rom' \
bouc='uxnemu ~/.local/uxn/bouc.rom' \
catclock='uxnemu ~/.local/uxn/catclock.rom' \
b='$BROWSER'\
sc='sc-im'\
l='ledger -f ~/notebook/ac/ac.ledger'
# ytfzf
alias \
ytfzf="ytfzf --thumb-viewer=imv" \
ytfzf-video="ytfzf --detach -t" \
ytfzf-audio="ytfzf -m" \
ytfzf-history="ytfzf --detach -H"
wedit(){
which $@ >/dev/null 2>&1 && [ -n "$1" ] && $EDITOR $(which $@) || printf "file doesn't exist.\n"
}

View File

@ -1,14 +0,0 @@
# You can add comments to these files with #
cac ${XDG_CACHE_HOME:-$HOME/.cache}
cf ${XDG_CONFIG_HOME:-$HOME/.config}
D ${XDG_DOWNLOAD_DIR:-$HOME/Downloads}
d ${XDG_DOCUMENTS_DIR:-$HOME/Documents}
dt ${XDG_DATA_HOME:-$HOME/.local/share}
rr $HOME/.local/src
h $HOME
m ${XDG_MUSIC_DIR:-$HOME/Music}
mn /mnt
pp ${XDG_PICTURES_DIR:-$HOME/Pictures}
sc $HOME/.local/bin
src $HOME/.local/src
vv ${XDG_VIDEOS_DIR:-$HOME/Videos}

View File

@ -1,20 +0,0 @@
# keys filename description
bf ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-files # This file, a list of bookmarked files
bd ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs # A list of bookmarked directories similar to this file
cfx ${XDG_CONFIG_HOME:-$HOME/.config}/x11/xresources # Colors, themes and variables for X11
cfs ${XDG_CONFIG_HOME:-$HOME/.config}/sway/config
cfb ${XDG_CONFIG_HOME:-$HOME/.config}/waybar/config
cfB ${XDG_CONFIG_HOME:-$HOME/.config}/waybar/style.css
cfv ${XDG_CONFIG_HOME:-$HOME/.config}/nvim/init.vim # vim/neovim config
cfz $ZDOTDIR/.zshrc # zsh (shell) config
cfa ${XDG_CONFIG_HOME:-$HOME/.config}/shell/aliasrc # aliases used by zsh (and potentially other shells)
cfp ${XDG_CONFIG_HOME:-$HOME/.config}/shell/profile # profile file for login settings for zsh
cfm ${XDG_CONFIG_HOME:-$HOME/.config}/mutt/muttrc # mutt (email client) config
cfn ${XDG_CONFIG_HOME:-$HOME/.config}/newsboat/config # newsboat (RSS reader)
cfu ${XDG_CONFIG_HOME:-$HOME/.config}/newsboat/urls # RSS urls for newsboat
cfmb ${XDG_CONFIG_HOME:-$HOME/.config}/ncmpcpp/bindings # ncmpcpp (music player) keybinds file
cfmc ${XDG_CONFIG_HOME:-$HOME/.config}/ncmpcpp/config # ncmpcpp (music player) config
cfl ${XDG_CONFIG_HOME:-$HOME/.config}/lf/lfrc # lf (file browser) config
cfL ${XDG_CONFIG_HOME:-$HOME/.config}/lf/scope # lf's scope/preview file
cfX ${XDG_CONFIG_HOME:-$HOME/.config}/nsxiv/exec/key-handler # sxiv (image viewer) key/script handler

View File

@ -1,56 +1,62 @@
#!/bin/zsh
#!/bin/sh
# shellcheck disable=SC2155
# profile file. Runs on login. Environmental variables are set here.
# If you don't plan on reverting to bash, you can remove the link in ~/.profile
# to clean up.
# paths
# Paths
export PATH="$PATH:$HOME/.local/bin"
export PATH="$PATH:$HOME/.local/uxn"
export PATH="$PATH:$HOME/.local/sec"
export PATH="$PATH:$HOME/.emacs.d/bin"
export PATH="$PATH:/var/lib/flatpak/exports/bin"
export PATH="$PATH:$HOME/.local/share/go/bin"
export PATH="$PATH:$HOME/.local/share/cargo/bin"
export PATH="$PATH:$HOME/.emacs.d/bin"
unsetopt PROMPT_SP
unsetopt PROMPT_SP 2>/dev/null
# Default programs:
export EDITOR="nvim"
export TERMINAL="foot"
export BROWSER="librewolf"
export BROWSER="io.gitlab.librewolf-community"
# ~/ Clean-up:
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_DATA_HOME="$HOME/.local/share"
export XDG_CACHE_HOME="$HOME/.cache"
export XINITRC="${XDG_CONFIG_HOME:-$HOME/.config}/x11/xinitrc"
export XINITRC="$XDG_CONFIG_HOME/x11/xinitrc"
#export XAUTHORITY="$XDG_RUNTIME_DIR/Xauthority" # This line will break some DMs.
export NOTMUCH_CONFIG="${XDG_CONFIG_HOME:-$HOME/.config}/notmuch-config"
export GTK2_RC_FILES="${XDG_CONFIG_HOME:-$HOME/.config}/gtk-2.0/gtkrc-2.0"
export LESSHISTFILE="-"
export WGETRC="${XDG_CONFIG_HOME:-$HOME/.config}/wget/wgetrc"
export INPUTRC="${XDG_CONFIG_HOME:-$HOME/.config}/shell/inputrc"
export ZDOTDIR="${XDG_CONFIG_HOME:-$HOME/.config}/zsh"
#export ALSA_CONFIG_PATH="$XDG_CONFIG_HOME/alsa/asoundrc"
#export GNUPGHOME="${XDG_DATA_HOME:-$HOME/.local/share}/gnupg"
export WINEPREFIX="${XDG_DATA_HOME:-$HOME/.local/share}/wineprefixes/default"
export KODI_DATA="${XDG_DATA_HOME:-$HOME/.local/share}/kodi"
export PASSWORD_STORE_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/password-store"
export NOTMUCH_CONFIG="$XDG_CONFIG_HOME/notmuch-config"
export GTK2_RC_FILES="$XDG_CONFIG_HOME/gtk-2.0/gtkrc-2.0"
export WGETRC="$XDG_CONFIG_HOME/wget/wgetrc"
export INPUTRC="$XDG_CONFIG_HOME/shell/inputrc"
export ZDOTDIR="$XDG_CONFIG_HOME/zsh"
#export GNUPGHOME="$XDG_DATA_HOME/gnupg"
export WINEPREFIX="$XDG_DATA_HOME/wineprefixes/default"
export KODI_DATA="$XDG_DATA_HOME/kodi"
export PASSWORD_STORE_DIR="$XDG_DATA_HOME/password-store"
export TMUX_TMPDIR="$XDG_RUNTIME_DIR"
export ANDROID_SDK_HOME="${XDG_CONFIG_HOME:-$HOME/.config}/android"
export CARGO_HOME="${XDG_DATA_HOME:-$HOME/.local/share}/cargo"
export GOPATH="${XDG_DATA_HOME:-$HOME/.local/share}/go"
export ANSIBLE_CONFIG="${XDG_CONFIG_HOME:-$HOME/.config}/ansible/ansible.cfg"
export UNISON="${XDG_DATA_HOME:-$HOME/.local/share}/unison"
export HISTFILE="${XDG_DATA_HOME:-$HOME/.local/share}/history"
export WEECHAT_HOME="${XDG_CONFIG_HOME:-$HOME/.config}/weechat"
export MBSYNCRC="${XDG_CONFIG_HOME:-$HOME/.config}/mbsync/config"
export ELECTRUMDIR="${XDG_DATA_HOME:-$HOME/.local/share}/electrum"
export ANDROID_SDK_HOME="$XDG_CONFIG_HOME/android"
#export ANDROID_SDK_HOME="$HOME/android_sdk"
#export ANDROID_SDK="$HOME/android_sdk"
#export ANDROID_NDK="$HOME/android_sdk/ndk-bundle"
#export PATH="$PATH:$ANDROID_SDK/platform-tools:$ANDROID_SDK/cmdline_tools/bin"
export CARGO_HOME="$XDG_DATA_HOME/cargo"
export GOPATH="$XDG_DATA_HOME/go"
export GOMODCACHE="$XDG_CACHE_HOME/go/mod"
export ANSIBLE_CONFIG="$XDG_CONFIG_HOME/ansible/ansible.cfg"
export UNISON="$XDG_DATA_HOME/unison"
export HISTFILE="$XDG_DATA_HOME/history"
export MBSYNCRC="$XDG_CONFIG_HOME/mbsync/config"
export ELECTRUMDIR="$XDG_DATA_HOME/electrum"
export PYTHONSTARTUP="$XDG_CONFIG_HOME/python/pythonrc"
export SQLITE_HISTORY="$XDG_DATA_HOME/sqlite_history"
export NPM_CONFIG_USERCONFIG="$XDG_CONFIG_HOME/npm/npmrc"
export RUSTUP_HOME="$XDG_DATA_HOME/rustup"
# Other program settings:
export DICS="/usr/share/stardict/dic/"
export SUDO_ASKPASS="$HOME/.local/bin/dmenupass"
export FZF_DEFAULT_OPTS="--layout=reverse --height 40%"
export LESS=-R
export LESS="R"
export LESS_TERMCAP_mb="$(printf '%b' '')"
export LESS_TERMCAP_md="$(printf '%b' '')"
export LESS_TERMCAP_me="$(printf '%b' '')"
@ -59,30 +65,32 @@ export LESS_TERMCAP_se="$(printf '%b' '')"
export LESS_TERMCAP_us="$(printf '%b' '')"
export LESS_TERMCAP_ue="$(printf '%b' '')"
export LESSOPEN="| /usr/bin/highlight -O ansi %s 2>/dev/null"
export QT_QPA_PLATFORMTHEME="gtk2" # Have QT use gtk2 theme.
export MOZ_USE_XINPUT2="1" # Mozilla smooth scrolling/touchpads.
export AWT_TOOLKIT="MToolkit wmname LG3D" #May have to install wmname
export _JAVA_AWT_WM_NONREPARENTING=1 # Fix for Java applications in dwm
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export SDL_IM_MODULE=fcitx
export GLFW_IM_MODULE=ibus
#export QT_STYLE_OVERRIDE=adwaita-dark
export QT_QPA_PLATFORMTHEME="gtk2" # Have QT use gtk2 theme.
#export MOZ_USE_XINPUT2=1 # Mozilla smooth scrolling/touchpads.
export AWT_TOOLKIT="MToolkit wmname LG3D" # May have to install wmname
export GTK_IM_MODULE="fcitx"
export QT_IM_MODULE="fcitx"
export XMODIFIERS=@im="fcitx"
export SDL_IM_MODULE="fcitx"
export GLFW_IM_MODULE="ibus"
#export QT_STYLE_OVERRIDE=Materia-dark
export GTK_THEME="Materia-dark"
#wayland
#export QT_QPA_PLATFORM=wayland
#export XDG_CURRENT_DESKTOP=river
#export XDG_SESSION_DESKTOP=river
#export XDG_CURRENT_SESSION_TYPE=wayland
#export QT_QPA_PLATFORM="wayland"
#export XDG_CURRENT_DESKTOP="river"
#export XDG_SESSION_DESKTOP="river"
#export XDG_CURRENT_SESSION_TYPE="wayland"
#export GDK_BACKEND="wayland,x11"
export MOZ_ENABLE_WAYLAND=1
#export WLR_RENDERER=vulkan
[ ! -f ${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc ] && setsid shortcuts >/dev/null 2>&1
export GDK_BACKEND="wayland"
#export MOZ_ENABLE_WAYLAND="1"
#export WLR_RENDERER="vulkan"
if [ -z $DISPLAY ] && [ "$(tty)" = "/dev/tty1" ]; then
export WINDOW_MANAGER=sway
exec /usr/bin/sway
fi
if [ -z $DISPLAY ] && [ "$(tty)" = "/dev/tty3" ]; then
export WINDOW_MANAGER=river
exec /usr/local/bin/river
fi

View File

@ -1,4 +1,4 @@
### sway settings
### sway(fx) settings
# logo key. Use Mod1 for Alt.
@ -13,8 +13,8 @@ set $right l
set $term $TERMINAL
set $browser $BROWSER
set $editor $EDITOR
#set $menu dmenu_path | dmenu | xargs swaymsg exec --
set $menu rofi -show combi | xargs swaymsg exec --
set $menu wofi -i --show drun | xargs swaymsg exec --
set $dmenu wofi -i --show run | xargs swaymsg exec --
# wallpaper
exec change-background
@ -30,7 +30,7 @@ exec swaync
exec --no-startup-id kanshi
# input method
exec fcitx5
#exec fcitx5
# night light
#exec sleep 3 && gammastep -l LAT:LON
@ -39,22 +39,27 @@ exec fcitx5
exec mpd
# xresources (nsxiv theme, and other programs)
exec xrdb $HOME/.config/x11/xresources
exec sleep 5 && xrdb -load $HOME/.config/x11/xresources
# Syncthing (sync daemon)
exec syncthing --no-browser
# polkit
exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
exec --no-startup-id /usr/libexec/polkit-gnome-authentication-agent-1
# emacs daemon
exec /usr/bin/emacs --daemon
# sworkstyle
#exec sworkstyle &> /tmp/sworkstyle.log
#assign [app_id="librewolf"] 2
#assign [app_id="firefox"] 2
#assign [app_id="mumble"] 9
#assign [app_id="dino"] 9
#assign [app_id="deluge"] 10
#for_window [app_id=".*"] floating enable
for_window [app_id="uxnemu"] floating enable
for_window [app_id="uxnemu"] border pixel 0
assign [app_id="librewolf"] 2
assign [app_id="firefox"] 2
assign [app_id="mumble"] 9
assign [app_id="dino"] 9
assign [app_id="deluge"] 10
#exec_always autotiling
exec systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway
@ -63,19 +68,39 @@ exec dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DE
# behavior
focus_follows_mouse no
hide_edge_borders smart
workspace_auto_back_and_forth no
show_marks yes
# looks
font pango: monospace 8
#gaps inner 25
gaps inner 25
default_border pixel 2
hide_edge_borders smart
bindsym $mod+Control+y border toggle
set $cl_high #333333
set $cl_indi #333333
set $cl_back #222222
# swayfx specific
blur enable
blur_xray enable
blur_passes 1
# 2
blur_radius 1
# 3
#corner_radius 20
shadows disable
#set $cl_high #333333
#set $cl_indi #333333
#set $cl_back #222222
#set $cl_high #000000
#set $cl_indi #000000
#set $cl_back #999999
# river colors
set $cl_high #93a1a1
set $cl_indi #586e75
set $cl_back #002b36
set $cl_fore #d9d8d8
set $cl_urge #FF0000
@ -84,12 +109,12 @@ client.focused_inactive $cl_back $cl_back $cl_fore $cl_back $cl_back
client.unfocused $cl_back $cl_back $cl_fore $cl_back $cl_back
client.urgent $cl_urge $cl_urge $cl_fore $cl_urge $cl_urge
set $gnome-schema org.gnome.desktop.interface
exec_always {
gsettings set $gnome-schema gtk-theme 'Materia-dark'
gsettings set $gnome-schema icon-theme 'Papirus-Dark'
gsettings set $gnome-schema color-scheme 'prefer-dark'
}
#set $gnome-schema org.gnome.desktop.interface
# exec_always {
# gsettings set $gnome-schema gtk-theme 'Materia-dark'
# gsettings set $gnome-schema icon-theme 'Papirus-Dark'
# gsettings set $gnome-schema color-scheme 'prefer-dark'
#}
### Idle configuration
@ -108,7 +133,7 @@ bindsym $mod+q kill
# start your launcher
bindsym $mod+d exec $menu
bindsym $mod+Shift+d exec dmenu_path | dmenu | xargs swaymsg exec
bindsym $mod+Shift+d exec $dmenu
# drag floating windows by holding down $mod and left mouse button.
@ -151,26 +176,20 @@ bindsym $mod+Control+u exec screenshot.sh output
bindsym $mod+u exec screenshot.sh active
bindsym $mod+Shift+u exec screenshot.sh window
# app switcher
#bindsym $mod+Tab exec sway-select-window
bindsym $mod+Tab exec ss.sh
### programs
# files
bindsym $mod+F1 exec em ~/.config/sway/config
bindsym $mod+F2 exec em ~/.dotroot/packages.txt
bindsym $mod+F3 exec em ~/.dotroot/instructions.org
bindsym $mod+F4 exec em ~/notebook/studies/college.org
bindsym $mod+F5 exec em ~/notebook/ag/habits.org
bindsym $mod+F6 exec em ~/notebook/ag/todo.org
# browser
bindsym $mod+w exec $browser
# agenda
bindsym $mod+c exec emacsclient --eval '(org-agenda-list)' || emacs --eval '(org-agenda-list)'
bindsym $mod+c exec emacsclient -c -a '' --eval '(org-agenda-list)'
# notebook
bindsym $mod+n exec $term -e $editor ~/notebook/index.org
bindsym $mod+v exec em ~/notebook/refile.org
# org-capture
bindsym $mod+Shift+c exec ~/.emacs.d/bin/org-capture
# newsboat (rss)
bindsym $mod+Shift+n exec $term -e newsboat
@ -182,34 +201,33 @@ bindsym $mod+t exec swaync-client -t
bindsym $mod+r exec $term -e lf
# emacs
bindsym $mod+e exec emacsclient -c || emacs
bindsym $mod+e exec emacsclient -c -a ''
# mail
#bindsym $mod+e exec $term -e neomutt
# start tasks in dmenu
bindsym $mod+Control+d exec start-tasks
bindsym $mod+Shift+x exec start-tasks
#bindsym $mod+e exec thunderbird-wayland
# bookmarks
bindsym $mod+b exec em ~/notebook/bookmarks.org
# open
bindsym $mod+b exec emacsclient -c -a '' ~/notebook/bookmarks.org
# open bookmarks
bindsym $mod+shift+b exec bookmark
# insert
bindsym $mod+Insert exec wtype "$(grep -v '^#' ~/notebook/bookmarks.org | dmenu -l 50 | cut -d' ' -f1)"
# kaomiji?
bindsym $mod+z exec dmenukaomoji
# bindsym $mod+z exec dmenukaomoji
# keepass dmenu
bindsym $mod+shift+Insert exec keepmenu
bindsym $mod+shift+Insert exec keepmenu
# download script
bindsym $mod+Control+m exec musdl
# youtube client
# open youtube link in ft
bindsym $mod+y exec io.freetubeapp.FreeTube $(wl-paste)
# games
bindsym $mod+g exec taverner
# bindsym $mod+g exec taverner
# workspace names
set $wp1 1
@ -225,6 +243,18 @@ set $wp10 10
# binding workspace to monitors
# main monitor on right
#workspace $wp1 output DVI-D-1
#workspace $wp2 output DVI-D-1
#workspace $wp3 output DVI-D-1
#workspace $wp4 output DVI-D-1
#workspace $wp5 output DVI-D-1
#workspace $wp6 output HDMI-A-1
#workspace $wp7 output HDMI-A-1
#workspace $wp8 output HDMI-A-1
#workspace $wp9 output HDMI-A-1
#workspace $wp10 output HDMI-A-1
# main monitor on left
workspace $wp1 output HDMI-A-1
workspace $wp2 output HDMI-A-1
workspace $wp3 output HDMI-A-1
@ -237,28 +267,28 @@ workspace $wp9 output DVI-D-1
workspace $wp10 output DVI-D-1
# switch to workspace
bindsym $mod+1 workspace $wp1
bindsym $mod+2 workspace $wp2
bindsym $mod+3 workspace $wp3
bindsym $mod+4 workspace $wp4
bindsym $mod+5 workspace $wp5
bindsym $mod+6 workspace $wp6
bindsym $mod+7 workspace $wp7
bindsym $mod+8 workspace $wp8
bindsym $mod+9 workspace $wp9
bindsym $mod+0 workspace $wp10
bindsym $mod+1 workspace number $wp1
bindsym $mod+2 workspace number $wp2
bindsym $mod+3 workspace number $wp3
bindsym $mod+4 workspace number $wp4
bindsym $mod+5 workspace number $wp5
bindsym $mod+6 workspace number $wp6
bindsym $mod+7 workspace number $wp7
bindsym $mod+8 workspace number $wp8
bindsym $mod+9 workspace number $wp9
bindsym $mod+0 workspace number $wp10
# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace $wp1
bindsym $mod+Shift+2 move container to workspace $wp2
bindsym $mod+Shift+3 move container to workspace $wp3
bindsym $mod+Shift+4 move container to workspace $wp4
bindsym $mod+Shift+5 move container to workspace $wp5
bindsym $mod+Shift+6 move container to workspace $wp6
bindsym $mod+Shift+7 move container to workspace $wp7
bindsym $mod+Shift+8 move container to workspace $wp8
bindsym $mod+Shift+9 move container to workspace $wp9
bindsym $mod+Shift+0 move container to workspace $wp10
bindsym $mod+Shift+1 move container to workspace number $wp1
bindsym $mod+Shift+2 move container to workspace number $wp2
bindsym $mod+Shift+3 move container to workspace number $wp3
bindsym $mod+Shift+4 move container to workspace number $wp4
bindsym $mod+Shift+5 move container to workspace number $wp5
bindsym $mod+Shift+6 move container to workspace number $wp6
bindsym $mod+Shift+7 move container to workspace number $wp7
bindsym $mod+Shift+8 move container to workspace number $wp8
bindsym $mod+Shift+9 move container to workspace number $wp9
bindsym $mod+Shift+0 move container to workspace number $wp10
# move focused container to workspace
# with comma/period (</>)
@ -340,7 +370,7 @@ mode "resize" {
# status bar
#include $HOME/.config/sway/bar
exec_always killall waybar
exec_always sleep 2 && waybar
exec_always sleep 3 && waybar
### special keys
@ -386,4 +416,4 @@ bindsym $mod+m exec $term -e ncmpcpp
bindsym $mod+Shift+s exec ~/.config/sway/scripts/sway-select-window
include /etc/sway/config.d/*
include ~/syncthing/default/config.d/sway/*
include ~/.config/sway/priv

View File

@ -0,0 +1,78 @@
{
"$schema": "/etc/xdg/swaync/configSchema.json",
"positionX": "right",
"positionY": "top",
"layer": "overlay",
"control-center-layer": "overlay",
"layer-shell": true,
"cssPriority": "application",
"control-center-margin-top": 0,
"control-center-margin-bottom": 0,
"control-center-margin-right": 0,
"control-center-margin-left": 0,
"notification-2fa-action": true,
"notification-inline-replies": false,
"notification-icon-size": 64,
"notification-body-image-height": 100,
"notification-body-image-width": 200,
"timeout": 10,
"timeout-low": 5,
"timeout-critical": 0,
"fit-to-screen": true,
"control-center-width": 500,
"control-center-height": 600,
"notification-window-width": 500,
"keyboard-shortcuts": true,
"image-visibility": "when-available",
"transition-time": 200,
"hide-on-clear": false,
"hide-on-action": true,
"script-fail-notify": true,
"scripts": {
"example-script": {
"exec": "echo 'Do something...'",
"urgency": "Normal"
},
"example-action-script": {
"exec": "echo 'Do something actionable!'",
"urgency": "Normal",
"run-on": "action"
}
},
"notification-visibility": {
"example-name": {
"state": "muted",
"urgency": "Low",
"app-name": "Spotify"
}
},
"widgets": [
"inhibitors",
"title",
"dnd",
"notifications"
],
"widget-config": {
"inhibitors": {
"text": "Inhibitors",
"button-text": "Clear All",
"clear-all-button": true
},
"title": {
"text": "Notifications",
"clear-all-button": true,
"button-text": "Clear All"
},
"dnd": {
"text": "Do Not Disturb"
},
"label": {
"max-lines": 5,
"text": "Label Text"
},
"mpris": {
"image-size": 96,
"image-radius": 12
}
}
}

View File

@ -0,0 +1,295 @@
/*#303446*/
/*#222222*/
@define-color main-bg #222222;
/*#414559*/
/*#333333*/
@define-color box-fg #222222;
/*#c6d0f5*/
/*#ffffff*/
/*#c5c8c6*/
@define-color text-color #c5c8c6;
/*#a5adce*/
/*#ffffff*/
/*#8c8c8c*/
@define-color text-color-inbox #8c8c8c;
/*#e78284*/
@define-color close-button-bg #e78284;
/*#51576d*/
/*#555555*/
@define-color border-color #333333;
/*#51576d*/
/*#222222*/
@define-color button-fg #333333;
/*#737994*/
@define-color button-border #555555;
* {
all: unset;
font-size: 14px;
font-family: "Ubuntu Nerd Font";
transition: 200ms;
}
.floating-notifications.background .notification-row .notification-background {
box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.8), inset 0 0 0 1px @box-fg;
border-radius: 12.6px;
margin: 18px;
background-color: @main-bg;
color: @text-color;
padding: 0;
}
.floating-notifications.background .notification-row .notification-background .notification {
padding: 7px;
border-radius: 12.6px;
}
.floating-notifications.background .notification-row .notification-background .notification.critical {
box-shadow: inset 0 0 7px 0 @close-button-bg;
}
.floating-notifications.background .notification-row .notification-background .notification .notification-content {
margin: 7px;
}
.floating-notifications.background .notification-row .notification-background .notification .notification-content .summary {
color: @text-color;
}
.floating-notifications.background .notification-row .notification-background .notification .notification-content .time {
color: @text-color-inbox;
}
.floating-notifications.background .notification-row .notification-background .notification .notification-content .body {
color: @text-color;
}
.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * {
min-height: 3.4em;
}
.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action {
border-radius: 7px;
color: @text-color;
background-color: @box-fg;
box-shadow: inset 0 0 0 1px @border-color;
margin: 7px;
}
.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action:hover {
box-shadow: inset 0 0 0 1px @border-color;
background-color: @box-fg;
color: @text-color;
}
.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action:active {
box-shadow: inset 0 0 0 1px @border-color;
background-color: #85c1dc;
color: @text-color;
}
.floating-notifications.background .notification-row .notification-background .close-button {
margin: 7px;
padding: 2px;
border-radius: 6.3px;
color: @main-bg;
background-color: @close-button-bg;
}
.floating-notifications.background .notification-row .notification-background .close-button:hover {
background-color: #ea999c;
color: @main-bg;
}
.floating-notifications.background .notification-row .notification-background .close-button:active {
background-color: @close-button-bg;
color: @main-bg;
}
.control-center {
box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.8), inset 0 0 0 1px @box-fg;
border-radius: 12.6px;
margin: 18px;
background-color: @main-bg;
color: @text-color;
padding: 14px;
}
.control-center .widget-title {
color: @text-color;
font-size: 1.3em;
}
.control-center .widget-title button {
border-radius: 7px;
color: @text-color;
background-color: @box-fg;
box-shadow: inset 0 0 0 1px @border-color;
padding: 8px;
}
.control-center .widget-title button:hover {
box-shadow: inset 0 0 0 1px @border-color;
background-color: #626880;
color: @text-color;
}
.control-center .widget-title button:active {
box-shadow: inset 0 0 0 1px @border-color;
background-color: #85c1dc;
color: @main-bg;
}
.control-center .notification-row .notification-background {
border-radius: 7px;
color: @text-color;
background-color: @box-fg;
box-shadow: inset 0 0 0 1px @border-color;
margin-top: 14px;
}
.control-center .notification-row .notification-background .notification {
padding: 7px;
border-radius: 7px;
}
.control-center .notification-row .notification-background .notification.critical {
box-shadow: inset 0 0 7px 0 @close-button-bg;
}
.control-center .notification-row .notification-background .notification .notification-content {
margin: 7px;
}
.control-center .notification-row .notification-background .notification .notification-content .summary {
color: @text-color;
}
.control-center .notification-row .notification-background .notification .notification-content .time {
color: @text-color-inbox;
}
.control-center .notification-row .notification-background .notification .notification-content .body {
color: @text-color;
}
.control-center .notification-row .notification-background .notification > *:last-child > * {
min-height: 3.4em;
}
.control-center .notification-row .notification-background .notification > *:last-child > * .notification-action {
border-radius: 7px;
color: @text-color;
background-color: #232634;
box-shadow: inset 0 0 0 1px @border-color;
margin: 7px;
}
.control-center .notification-row .notification-background .notification > *:last-child > * .notification-action:hover {
box-shadow: inset 0 0 0 1px @border-color;
background-color: @box-fg;
color: @text-color;
}
.control-center .notification-row .notification-background .notification > *:last-child > * .notification-action:active {
box-shadow: inset 0 0 0 1px @border-color;
background-color: #85c1dc;
color: @text-color;
}
.control-center .notification-row .notification-background .close-button {
margin: 7px;
padding: 2px;
border-radius: 6.3px;
color: @main-bg;
background-color: #ea999c;
}
.control-center .notification-row .notification-background .close-button:hover {
background-color: @close-button-bg;
color: @main-bg;
}
.control-center .notification-row .notification-background .close-button:active {
background-color: @close-button-bg;
color: @main-bg;
}
.control-center .notification-row .notification-background:hover {
box-shadow: inset 0 0 0 1px @border-color;
background-color: #838ba7;
color: @text-color;
}
.control-center .notification-row .notification-background:active {
box-shadow: inset 0 0 0 1px @border-color;
background-color: #85c1dc;
color: @text-color;
}
progressbar,
progress,
trough {
border-radius: 12.6px;
}
progressbar {
box-shadow: inset 0 0 0 1px @border-color;
}
.notification.critical progress {
background-color: @close-button-bg;
}
.notification.low progress,
.notification.normal progress {
background-color: #8caaee;
}
trough {
background-color: @box-fg;
}
.control-center trough {
background-color: @button-fg;
}
.control-center-dnd {
margin-top: 5px;
border-radius: 8px;
background: @box-fg;
border: 1px solid @border-color;
box-shadow: none;
}
.control-center-dnd:checked {
background: @box-fg;
}
.control-center-dnd slider {
background: @button-fg;
border-radius: 8px;
}
.widget-dnd {
margin: 0px;
font-size: 1.1rem;
}
.widget-dnd > switch {
font-size: initial;
border-radius: 8px;
background: @box-fg;
border: 1px solid @border-color;
box-shadow: none;
}
.widget-dnd > switch:checked {
background: @box-fg;
}
.widget-dnd > switch slider {
background: @button-fg;
border-radius: 8px;
border: 1px solid @button-border;
}

View File

@ -0,0 +1,361 @@
/*
* vim: ft=less
*/
@define-color cc-bg rgba(0, 0, 0, 0.7);
@define-color noti-border-color rgba(255, 255, 255, 0.15);
@define-color noti-bg rgb(48, 48, 48);
@define-color noti-bg-darker rgb(38, 38, 38);
@define-color noti-bg-hover rgb(56, 56, 56);
@define-color noti-bg-focus rgba(68, 68, 68, 0.6);
@define-color noti-close-bg rgba(255, 255, 255, 0.1);
@define-color noti-close-bg-hover rgba(255, 255, 255, 0.15);
@define-color text-color rgb(255, 255, 255);
@define-color text-color-disabled rgb(150, 150, 150);
@define-color bg-selected rgb(0, 128, 255);
.notification-row {
outline: none;
}
.notification-row:focus,
.notification-row:hover {
background: @noti-bg-focus;
}
.notification {
border-radius: 12px;
margin: 6px 12px;
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), 0 1px 3px 1px rgba(0, 0, 0, 0.7),
0 2px 6px 2px rgba(0, 0, 0, 0.3);
padding: 0;
}
/* Uncomment to enable specific urgency colors
.low {
background: yellow;
padding: 6px;
border-radius: 12px;
}
.normal {
background: green;
padding: 6px;
border-radius: 12px;
}
.critical {
background: red;
padding: 6px;
border-radius: 12px;
}
*/
.notification-content {
background: transparent;
padding: 6px;
border-radius: 12px;
}
.close-button {
background: @noti-close-bg;
color: @text-color;
text-shadow: none;
padding: 0;
border-radius: 100%;
margin-top: 10px;
margin-right: 16px;
box-shadow: none;
border: none;
min-width: 24px;
min-height: 24px;
}
.close-button:hover {
box-shadow: none;
background: @noti-close-bg-hover;
transition: all 0.15s ease-in-out;
border: none;
}
.notification-default-action,
.notification-action {
padding: 4px;
margin: 0;
box-shadow: none;
background: @noti-bg;
border: 1px solid @noti-border-color;
color: @text-color;
transition: all 0.15s ease-in-out;
}
.notification-default-action:hover,
.notification-action:hover {
-gtk-icon-effect: none;
background: @noti-bg-hover;
}
.notification-default-action {
border-radius: 12px;
}
/* When alternative actions are visible */
.notification-default-action:not(:only-child) {
border-bottom-left-radius: 0px;
border-bottom-right-radius: 0px;
}
.notification-action {
border-radius: 0px;
border-top: none;
border-right: none;
}
/* add bottom border radius to eliminate clipping */
.notification-action:first-child {
border-bottom-left-radius: 10px;
}
.notification-action:last-child {
border-bottom-right-radius: 10px;
border-right: 1px solid @noti-border-color;
}
.inline-reply {
margin-top: 8px;
}
.inline-reply-entry {
background: @noti-bg-darker;
color: @text-color;
caret-color: @text-color;
border: 1px solid @noti-border-color;
border-radius: 12px;
}
.inline-reply-button {
margin-left: 4px;
background: @noti-bg;
border: 1px solid @noti-border-color;
border-radius: 12px;
color: @text-color;
}
.inline-reply-button:disabled {
background: initial;
color: @text-color-disabled;
border: 1px solid transparent;
}
.inline-reply-button:hover {
background: @noti-bg-hover;
}
.image {
}
.body-image {
margin-top: 6px;
background-color: white;
border-radius: 12px;
}
.summary {
font-size: 16px;
font-weight: bold;
background: transparent;
color: @text-color;
text-shadow: none;
}
.time {
font-size: 16px;
font-weight: bold;
background: transparent;
color: @text-color;
text-shadow: none;
margin-right: 18px;
}
.body {
font-size: 15px;
font-weight: normal;
background: transparent;
color: @text-color;
text-shadow: none;
}
.control-center {
background: @cc-bg;
}
.control-center-list {
background: transparent;
}
.control-center-list-placeholder {
opacity: 0.5;
}
.floating-notifications {
background: transparent;
}
/* Window behind control center and on all other monitors */
.blank-window {
background: alpha(black, 0.25);
}
/*** Widgets ***/
/* Title widget */
.widget-title {
margin: 8px;
font-size: 1.5rem;
}
.widget-title > button {
font-size: initial;
color: @text-color;
text-shadow: none;
background: @noti-bg;
border: 1px solid @noti-border-color;
box-shadow: none;
border-radius: 12px;
}
.widget-title > button:hover {
background: @noti-bg-hover;
}
/* DND widget */
.widget-dnd {
margin: 8px;
font-size: 1.1rem;
}
.widget-dnd > switch {
font-size: initial;
border-radius: 12px;
background: @noti-bg;
border: 1px solid @noti-border-color;
box-shadow: none;
}
.widget-dnd > switch:checked {
background: @bg-selected;
}
.widget-dnd > switch slider {
background: @noti-bg-hover;
border-radius: 12px;
}
/* Label widget */
.widget-label {
margin: 8px;
}
.widget-label > label {
font-size: 1.1rem;
}
/* Mpris widget */
.widget-mpris {
/* The parent to all players */
}
.widget-mpris-player {
padding: 8px;
margin: 8px;
}
.widget-mpris-title {
font-weight: bold;
font-size: 1.25rem;
}
.widget-mpris-subtitle {
font-size: 1.1rem;
}
/* Buttons widget */
.widget-buttons-grid {
padding: 8px;
margin: 8px;
border-radius: 12px;
background-color: @noti-bg;
}
.widget-buttons-grid>flowbox>flowboxchild>button{
background: @noti-bg;
border-radius: 12px;
}
.widget-buttons-grid>flowbox>flowboxchild>button:hover {
background: @noti-bg-hover;
}
/* Menubar widget */
.widget-menubar>box>.menu-button-bar>button {
border: none;
background: transparent;
}
/* .AnyName { Name defined in config after #
background-color: @noti-bg;
padding: 8px;
margin: 8px;
border-radius: 12px;
}
.AnyName>button {
background: transparent;
border: none;
}
.AnyName>button:hover {
background-color: @noti-bg-hover;
} */
.topbar-buttons>button { /* Name defined in config after # */
border: none;
background: transparent;
}
/* Volume widget */
.widget-volume {
background-color: @noti-bg;
padding: 8px;
margin: 8px;
border-radius: 12px;
}
.widget-volume>box>button {
background: transparent;
border: none;
}
.per-app-volume {
background-color: @noti-bg-alt;
padding: 4px 8px 8px 8px;
margin: 0px 8px 8px 8px;
border-radius: 12px
}
/* Backlight widget */
.widget-backlight {
background-color: @noti-bg;
padding: 8px;
margin: 8px;
border-radius: 12px;
}
/* Title widget */
.widget-inhibitors {
margin: 8px;
font-size: 1.5rem;
}
.widget-inhibitors > button {
font-size: initial;
color: @text-color;
text-shadow: none;
background: @noti-bg;
border: 1px solid @noti-border-color;
box-shadow: none;
border-radius: 12px;
}
.widget-inhibitors > button:hover {
background: @noti-bg-hover;
}

View File

@ -0,0 +1,370 @@
/*
* vim: ft=less
*/
/*@define-color cc-bg rgba(0, 0, 0, 0.7);*/
@define-color cc-bg #161616;
@define-color noti-border-color rgba(255, 255, 255, 0.15);
/*@define-color noti-bg rgb(48, 48, 48);*/
@define-color noti-bg rgb(0, 0, 0);
@define-color noti-bg-darker rgb(38, 38, 38);
@define-color noti-bg-hover rgb(56, 56, 56);
/*@define-color noti-bg-focus rgba(68, 68, 68, 0.6);*/
@define-color noti-bg-focus rgba(33, 33, 33, 0.6);
@define-color noti-close-bg rgba(255, 255, 255, 0.1);
@define-color noti-close-bg-hover rgba(255, 255, 255, 0.15);
@define-color text-color rgb(255, 255, 255);
@define-color text-color-disabled rgb(150, 150, 150);
@define-color bg-selected rgb(0, 128, 255);
.notification-row {
outline: none;
}
.notification-row:focus,
.notification-row:hover {
background: @noti-bg-focus;
}
.notification {
/*border-radius: 12px;*/
border-radius: 0px;
/*margin: 6px 12px;*/
margin: 6px 12px;
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), 0 1px 3px 1px rgba(0, 0, 0, 0.7),
0 2px 6px 2px rgba(0, 0, 0, 0.3);
padding: 0;
}
/* Uncomment to enable specific urgency colors
.low {
background: yellow;
padding: 6px;
border-radius: 12px;
}
.normal {
background: green;
padding: 6px;
border-radius: 12px;
}
.critical {
background: red;
padding: 6px;
border-radius: 12px;
}
*/
.notification-content {
background: transparent;
padding: 6px;
/*border-radius:12px;*/
border-radius: 0px;
}
.close-button {
background: @noti-close-bg;
color: @text-color;
text-shadow: none;
padding: 0;
border-radius: 100%;
margin-top: 10px;
margin-right: 16px;
box-shadow: none;
border: none;
min-width: 24px;
min-height: 24px;
}
.close-button:hover {
box-shadow: none;
background: @noti-close-bg-hover;
transition: all 0.15s ease-in-out;
border: none;
}
.notification-default-action,
.notification-action {
padding: 4px;
margin: 0;
box-shadow: none;
background: @noti-bg;
border: 1px solid @noti-border-color;
color: @text-color;
transition: all 0.15s ease-in-out;
}
.notification-default-action:hover,
.notification-action:hover {
-gtk-icon-effect: none;
background: @noti-bg-hover;
}
.notification-default-action {
border-radius: 0px;
}
/* When alternative actions are visible */
.notification-default-action:not(:only-child) {
border-bottom-left-radius: 0px;
border-bottom-right-radius: 0px;
}
.notification-action {
border-radius: 0px;
border-top: none;
border-right: none;
}
/* add bottom border radius to eliminate clipping */
.notification-action:first-child {
/*border-bottom-left-radius: 10px;*/
border-bottom-left-radius: 0px;
}
.notification-action:last-child {
/*border-bottom-right-radius: 10px;*/
border-bottom-right-radius: 0px;
padding-bottom: 1px;
border-right: 1px solid @noti-border-color;
}
.inline-reply {
margin-top: 8px;
}
.inline-reply-entry {
background: @noti-bg-darker;
color: @text-color;
caret-color: @text-color;
border: 1px solid @noti-border-color;
border-radius: 0px;
}
.inline-reply-button {
margin-left: 4px;
background: @noti-bg;
border: 1px solid @noti-border-color;
border-radius: 0px;
color: @text-color;
}
.inline-reply-button:disabled {
background: initial;
color: @text-color-disabled;
border: 1px solid transparent;
}
.inline-reply-button:hover {
background: @noti-bg-hover;
}
.image {
}
.body-image {
margin-top: 6px;
background-color: white;
border-radius: 0px;
}
.summary {
font-size: 16px;
font-weight: bold;
background: transparent;
color: @text-color;
text-shadow: none;
}
.time {
font-size: 16px;
font-weight: bold;
background: transparent;
color: @text-color;
text-shadow: none;
margin-right: 18px;
}
.body {
font-size: 15px;
font-weight: normal;
background: transparent;
color: @text-color;
text-shadow: none;
}
.control-center {
background: @cc-bg;
}
.control-center-list {
background: transparent;
}
.control-center-list-placeholder {
opacity: 0.5;
}
.floating-notifications {
background: transparent;
}
/* Window behind control center and on all other monitors */
.blank-window {
background: alpha(black, 0.25);
}
/*** Widgets ***/
/* Title widget */
.widget-title {
margin: 8px;
font-size: 1.1rem;
}
.widget-title > button {
font-size: initial;
color: @text-color;
text-shadow: none;
background: @noti-bg;
border: 1px solid @noti-border-color;
box-shadow: none;
border-radius: 12px;
}
.widget-title > button:hover {
background: @noti-bg-hover;
}
/* DND widget */
.widget-dnd {
margin: 8px;
font-size: 1.1rem;
}
.widget-dnd > switch {
font-size: initial;
border-radius: 12px;
background: @noti-bg;
border: 1px solid @noti-border-color;
box-shadow: none;
}
.widget-dnd > switch:checked {
background: @bg-selected;
}
.widget-dnd > switch slider {
background: @noti-bg-hover;
border-radius: 12px;
}
/* Label widget */
.widget-label {
margin: 8px;
}
.widget-label > label {
font-size: 1.1rem;
}
/* Mpris widget */
.widget-mpris {
/* The parent to all players */
}
.widget-mpris-player {
padding: 8px;
margin: 8px;
}
.widget-mpris-title {
font-weight: bold;
font-size: 1.25rem;
}
.widget-mpris-subtitle {
font-size: 1.1rem;
}
/* Buttons widget */
.widget-buttons-grid {
padding: 8px;
margin: 8px;
border-radius: 0px;
background-color: @noti-bg;
}
.widget-buttons-grid>flowbox>flowboxchild>button{
background: @noti-bg;
border-radius: 0px;
}
.widget-buttons-grid>flowbox>flowboxchild>button:hover {
background: @noti-bg-hover;
}
/* Menubar widget */
.widget-menubar>box>.menu-button-bar>button {
border: none;
background: transparent;
}
/* .AnyName { Name defined in config after #
background-color: @noti-bg;
padding: 8px;
margin: 8px;
border-radius:12px;
}
.AnyName>button {
background: transparent;
border: none;
}
.AnyName>button:hover {
background-color: @noti-bg-hover;
} */
.topbar-buttons>button { /* Name defined in config after # */
border: none;
background: transparent;
}
/* Volume widget */
.widget-volume {
background-color: @noti-bg;
padding: 8px;
margin: 8px;
border-radius: 0px;
}
.widget-volume>box>button {
background: transparent;
border: none;
}
.per-app-volume {
background-color: @noti-bg-alt;
padding: 4px 8px 8px 8px;
margin: 0px 8px 8px 8px;
border-radius: 0px
}
/* Backlight widget */
.widget-backlight {
background-color: @noti-bg;
padding: 8px;
margin: 8px;
border-radius: 0px;
}
/* Title widget */
.widget-inhibitors {
margin: 8px;
font-size: 1.5rem;
}
.widget-inhibitors > button {
font-size: initial;
color: @text-color;
text-shadow: none;
background: @noti-bg;
border: 1px solid @noti-border-color;
box-shadow: none;
border-radius: 0px;
}
.widget-inhibitors > button:hover {
background: @noti-bg-hover;
}

View File

@ -0,0 +1,361 @@
/*
* vim: ft=less
*/
@define-color cc-bg rgba(0, 0, 0, 0.7);
@define-color noti-border-color rgba(255, 255, 255, 0.15);
@define-color noti-bg rgb(48, 48, 48);
@define-color noti-bg-darker rgb(38, 38, 38);
@define-color noti-bg-hover rgb(56, 56, 56);
@define-color noti-bg-focus rgba(68, 68, 68, 0.6);
@define-color noti-close-bg rgba(255, 255, 255, 0.1);
@define-color noti-close-bg-hover rgba(255, 255, 255, 0.15);
@define-color text-color rgb(255, 255, 255);
@define-color text-color-disabled rgb(150, 150, 150);
@define-color bg-selected rgb(0, 128, 255);
.notification-row {
outline: none;
}
.notification-row:focus,
.notification-row:hover {
background: @noti-bg-focus;
}
.notification {
border-radius: 12px;
margin: 6px 12px;
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), 0 1px 3px 1px rgba(0, 0, 0, 0.7),
0 2px 6px 2px rgba(0, 0, 0, 0.3);
padding: 0;
}
/* Uncomment to enable specific urgency colors
.low {
background: yellow;
padding: 6px;
border-radius: 12px;
}
.normal {
background: green;
padding: 6px;
border-radius: 12px;
}
.critical {
background: red;
padding: 6px;
border-radius: 12px;
}
*/
.notification-content {
background: transparent;
padding: 6px;
border-radius: 12px;
}
.close-button {
background: @noti-close-bg;
color: @text-color;
text-shadow: none;
padding: 0;
border-radius: 100%;
margin-top: 10px;
margin-right: 16px;
box-shadow: none;
border: none;
min-width: 24px;
min-height: 24px;
}
.close-button:hover {
box-shadow: none;
background: @noti-close-bg-hover;
transition: all 0.15s ease-in-out;
border: none;
}
.notification-default-action,
.notification-action {
padding: 4px;
margin: 0;
box-shadow: none;
background: @noti-bg;
border: 1px solid @noti-border-color;
color: @text-color;
transition: all 0.15s ease-in-out;
}
.notification-default-action:hover,
.notification-action:hover {
-gtk-icon-effect: none;
background: @noti-bg-hover;
}
.notification-default-action {
border-radius: 12px;
}
/* When alternative actions are visible */
.notification-default-action:not(:only-child) {
border-bottom-left-radius: 0px;
border-bottom-right-radius: 0px;
}
.notification-action {
border-radius: 0px;
border-top: none;
border-right: none;
}
/* add bottom border radius to eliminate clipping */
.notification-action:first-child {
border-bottom-left-radius: 10px;
}
.notification-action:last-child {
border-bottom-right-radius: 10px;
border-right: 1px solid @noti-border-color;
}
.inline-reply {
margin-top: 8px;
}
.inline-reply-entry {
background: @noti-bg-darker;
color: @text-color;
caret-color: @text-color;
border: 1px solid @noti-border-color;
border-radius: 12px;
}
.inline-reply-button {
margin-left: 4px;
background: @noti-bg;
border: 1px solid @noti-border-color;
border-radius: 12px;
color: @text-color;
}
.inline-reply-button:disabled {
background: initial;
color: @text-color-disabled;
border: 1px solid transparent;
}
.inline-reply-button:hover {
background: @noti-bg-hover;
}
.image {
}
.body-image {
margin-top: 6px;
background-color: white;
border-radius: 12px;
}
.summary {
font-size: 16px;
font-weight: bold;
background: transparent;
color: @text-color;
text-shadow: none;
}
.time {
font-size: 16px;
font-weight: bold;
background: transparent;
color: @text-color;
text-shadow: none;
margin-right: 18px;
}
.body {
font-size: 15px;
font-weight: normal;
background: transparent;
color: @text-color;
text-shadow: none;
}
.control-center {
background: @cc-bg;
}
.control-center-list {
background: transparent;
}
.control-center-list-placeholder {
opacity: 0.5;
}
.floating-notifications {
background: transparent;
}
/* Window behind control center and on all other monitors */
.blank-window {
background: alpha(black, 0.25);
}
/*** Widgets ***/
/* Title widget */
.widget-title {
margin: 8px;
font-size: 1.5rem;
}
.widget-title > button {
font-size: initial;
color: @text-color;
text-shadow: none;
background: @noti-bg;
border: 1px solid @noti-border-color;
box-shadow: none;
border-radius: 12px;
}
.widget-title > button:hover {
background: @noti-bg-hover;
}
/* DND widget */
.widget-dnd {
margin: 8px;
font-size: 1.1rem;
}
.widget-dnd > switch {
font-size: initial;
border-radius: 12px;
background: @noti-bg;
border: 1px solid @noti-border-color;
box-shadow: none;
}
.widget-dnd > switch:checked {
background: @bg-selected;
}
.widget-dnd > switch slider {
background: @noti-bg-hover;
border-radius: 12px;
}
/* Label widget */
.widget-label {
margin: 8px;
}
.widget-label > label {
font-size: 1.1rem;
}
/* Mpris widget */
.widget-mpris {
/* The parent to all players */
}
.widget-mpris-player {
padding: 8px;
margin: 8px;
}
.widget-mpris-title {
font-weight: bold;
font-size: 1.25rem;
}
.widget-mpris-subtitle {
font-size: 1.1rem;
}
/* Buttons widget */
.widget-buttons-grid {
padding: 8px;
margin: 8px;
border-radius: 12px;
background-color: @noti-bg;
}
.widget-buttons-grid>flowbox>flowboxchild>button{
background: @noti-bg;
border-radius: 12px;
}
.widget-buttons-grid>flowbox>flowboxchild>button:hover {
background: @noti-bg-hover;
}
/* Menubar widget */
.widget-menubar>box>.menu-button-bar>button {
border: none;
background: transparent;
}
/* .AnyName { Name defined in config after #
background-color: @noti-bg;
padding: 8px;
margin: 8px;
border-radius: 12px;
}
.AnyName>button {
background: transparent;
border: none;
}
.AnyName>button:hover {
background-color: @noti-bg-hover;
} */
.topbar-buttons>button { /* Name defined in config after # */
border: none;
background: transparent;
}
/* Volume widget */
.widget-volume {
background-color: @noti-bg;
padding: 8px;
margin: 8px;
border-radius: 12px;
}
.widget-volume>box>button {
background: transparent;
border: none;
}
.per-app-volume {
background-color: @noti-bg-alt;
padding: 4px 8px 8px 8px;
margin: 0px 8px 8px 8px;
border-radius: 12px
}
/* Backlight widget */
.widget-backlight {
background-color: @noti-bg;
padding: 8px;
margin: 8px;
border-radius: 12px;
}
/* Title widget */
.widget-inhibitors {
margin: 8px;
font-size: 1.5rem;
}
.widget-inhibitors > button {
font-size: initial;
color: @text-color;
text-shadow: none;
background: @noti-bg;
border: 1px solid @noti-border-color;
box-shadow: none;
border-radius: 12px;
}
.widget-inhibitors > button:hover {
background: @noti-bg-hover;
}

View File

@ -0,0 +1,270 @@
* {
all: unset;
font-size: 14px;
font-family: "Ubuntu Nerd Font";
transition: 200ms;
}
.floating-notifications.background .notification-row .notification-background {
box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.8), inset 0 0 0 1px #ccd0da;
border-radius: 12.6px;
margin: 18px;
background-color: #eff1f5;
color: #4c4f69;
padding: 0;
}
.floating-notifications.background .notification-row .notification-background .notification {
padding: 7px;
border-radius: 12.6px;
}
.floating-notifications.background .notification-row .notification-background .notification.critical {
box-shadow: inset 0 0 7px 0 #d20f39;
}
.floating-notifications.background .notification-row .notification-background .notification .notification-content {
margin: 7px;
}
.floating-notifications.background .notification-row .notification-background .notification .notification-content .summary {
color: #4c4f69;
}
.floating-notifications.background .notification-row .notification-background .notification .notification-content .time {
color: #6c6f85;
}
.floating-notifications.background .notification-row .notification-background .notification .notification-content .body {
color: #4c4f69;
}
.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * {
min-height: 3.4em;
}
.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action {
border-radius: 7px;
color: #4c4f69;
background-color: #ccd0da;
box-shadow: inset 0 0 0 1px #bcc0cc;
margin: 7px;
}
.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action:hover {
box-shadow: inset 0 0 0 1px #bcc0cc;
background-color: #ccd0da;
color: #4c4f69;
}
.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action:active {
box-shadow: inset 0 0 0 1px #bcc0cc;
background-color: #209fb5;
color: #4c4f69;
}
.floating-notifications.background .notification-row .notification-background .close-button {
margin: 7px;
padding: 2px;
border-radius: 6.3px;
color: #eff1f5;
background-color: #d20f39;
}
.floating-notifications.background .notification-row .notification-background .close-button:hover {
background-color: #e64553;
color: #eff1f5;
}
.floating-notifications.background .notification-row .notification-background .close-button:active {
background-color: #d20f39;
color: #eff1f5;
}
.control-center {
box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.8), inset 0 0 0 1px #ccd0da;
border-radius: 12.6px;
margin: 18px;
background-color: #eff1f5;
color: #4c4f69;
padding: 14px;
}
.control-center .widget-title {
color: #4c4f69;
font-size: 1.3em;
}
.control-center .widget-title button {
border-radius: 7px;
color: #4c4f69;
background-color: #ccd0da;
box-shadow: inset 0 0 0 1px #bcc0cc;
padding: 8px;
}
.control-center .widget-title button:hover {
box-shadow: inset 0 0 0 1px #bcc0cc;
background-color: #acb0be;
color: #4c4f69;
}
.control-center .widget-title button:active {
box-shadow: inset 0 0 0 1px #bcc0cc;
background-color: #209fb5;
color: #eff1f5;
}
.control-center .notification-row .notification-background {
border-radius: 7px;
color: #4c4f69;
background-color: #ccd0da;
box-shadow: inset 0 0 0 1px #bcc0cc;
margin-top: 14px;
}
.control-center .notification-row .notification-background .notification {
padding: 7px;
border-radius: 7px;
}
.control-center .notification-row .notification-background .notification.critical {
box-shadow: inset 0 0 7px 0 #d20f39;
}
.control-center .notification-row .notification-background .notification .notification-content {
margin: 7px;
}
.control-center .notification-row .notification-background .notification .notification-content .summary {
color: #4c4f69;
}
.control-center .notification-row .notification-background .notification .notification-content .time {
color: #6c6f85;
}
.control-center .notification-row .notification-background .notification .notification-content .body {
color: #4c4f69;
}
.control-center .notification-row .notification-background .notification > *:last-child > * {
min-height: 3.4em;
}
.control-center .notification-row .notification-background .notification > *:last-child > * .notification-action {
border-radius: 7px;
color: #4c4f69;
background-color: #dce0e8;
box-shadow: inset 0 0 0 1px #bcc0cc;
margin: 7px;
}
.control-center .notification-row .notification-background .notification > *:last-child > * .notification-action:hover {
box-shadow: inset 0 0 0 1px #bcc0cc;
background-color: #ccd0da;
color: #4c4f69;
}
.control-center .notification-row .notification-background .notification > *:last-child > * .notification-action:active {
box-shadow: inset 0 0 0 1px #bcc0cc;
background-color: #209fb5;
color: #4c4f69;
}
.control-center .notification-row .notification-background .close-button {
margin: 7px;
padding: 2px;
border-radius: 6.3px;
color: #eff1f5;
background-color: #e64553;
}
.control-center .notification-row .notification-background .close-button:hover {
background-color: #d20f39;
color: #eff1f5;
}
.control-center .notification-row .notification-background .close-button:active {
background-color: #d20f39;
color: #eff1f5;
}
.control-center .notification-row .notification-background:hover {
box-shadow: inset 0 0 0 1px #bcc0cc;
background-color: #8c8fa1;
color: #4c4f69;
}
.control-center .notification-row .notification-background:active {
box-shadow: inset 0 0 0 1px #bcc0cc;
background-color: #209fb5;
color: #4c4f69;
}
progressbar,
progress,
trough {
border-radius: 12.6px;
}
progressbar {
box-shadow: inset 0 0 0 1px #bcc0cc;
}
.notification.critical progress {
background-color: #d20f39;
}
.notification.low progress,
.notification.normal progress {
background-color: #1e66f5;
}
trough {
background-color: #ccd0da;
}
.control-center trough {
background-color: #bcc0cc;
}
.control-center-dnd {
margin-top: 5px;
border-radius: 8px;
background: #ccd0da;
border: 1px solid #bcc0cc;
box-shadow: none;
}
.control-center-dnd:checked {
background: #ccd0da;
}
.control-center-dnd slider {
background: #bcc0cc;
border-radius: 8px;
}
.widget-dnd {
margin: 0px;
font-size: 1.1rem;
}
.widget-dnd > switch {
font-size: initial;
border-radius: 8px;
background: #ccd0da;
border: 1px solid #bcc0cc;
box-shadow: none;
}
.widget-dnd > switch:checked {
background: #ccd0da;
}
.widget-dnd > switch slider {
background: #bcc0cc;
border-radius: 8px;
border: 1px solid #9ca0b0;
}

View File

@ -0,0 +1,270 @@
* {
all: unset;
font-size: 14px;
font-family: "Ubuntu Nerd Font";
transition: 200ms;
}
.floating-notifications.background .notification-row .notification-background {
box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.8), inset 0 0 0 1px #414559;
border-radius: 12.6px;
margin: 18px;
background-color: #303446;
color: #c6d0f5;
padding: 0;
}
.floating-notifications.background .notification-row .notification-background .notification {
padding: 7px;
border-radius: 12.6px;
}
.floating-notifications.background .notification-row .notification-background .notification.critical {
box-shadow: inset 0 0 7px 0 #e78284;
}
.floating-notifications.background .notification-row .notification-background .notification .notification-content {
margin: 7px;
}
.floating-notifications.background .notification-row .notification-background .notification .notification-content .summary {
color: #c6d0f5;
}
.floating-notifications.background .notification-row .notification-background .notification .notification-content .time {
color: #a5adce;
}
.floating-notifications.background .notification-row .notification-background .notification .notification-content .body {
color: #c6d0f5;
}
.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * {
min-height: 3.4em;
}
.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action {
border-radius: 7px;
color: #c6d0f5;
background-color: #414559;
box-shadow: inset 0 0 0 1px #51576d;
margin: 7px;
}
.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action:hover {
box-shadow: inset 0 0 0 1px #51576d;
background-color: #414559;
color: #c6d0f5;
}
.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action:active {
box-shadow: inset 0 0 0 1px #51576d;
background-color: #85c1dc;
color: #c6d0f5;
}
.floating-notifications.background .notification-row .notification-background .close-button {
margin: 7px;
padding: 2px;
border-radius: 6.3px;
color: #303446;
background-color: #e78284;
}
.floating-notifications.background .notification-row .notification-background .close-button:hover {
background-color: #ea999c;
color: #303446;
}
.floating-notifications.background .notification-row .notification-background .close-button:active {
background-color: #e78284;
color: #303446;
}
.control-center {
box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.8), inset 0 0 0 1px #414559;
border-radius: 12.6px;
margin: 18px;
background-color: #303446;
color: #c6d0f5;
padding: 14px;
}
.control-center .widget-title {
color: #c6d0f5;
font-size: 1.3em;
}
.control-center .widget-title button {
border-radius: 7px;
color: #c6d0f5;
background-color: #414559;
box-shadow: inset 0 0 0 1px #51576d;
padding: 8px;
}
.control-center .widget-title button:hover {
box-shadow: inset 0 0 0 1px #51576d;
background-color: #626880;
color: #c6d0f5;
}
.control-center .widget-title button:active {
box-shadow: inset 0 0 0 1px #51576d;
background-color: #85c1dc;
color: #303446;
}
.control-center .notification-row .notification-background {
border-radius: 7px;
color: #c6d0f5;
background-color: #414559;
box-shadow: inset 0 0 0 1px #51576d;
margin-top: 14px;
}
.control-center .notification-row .notification-background .notification {
padding: 7px;
border-radius: 7px;
}
.control-center .notification-row .notification-background .notification.critical {
box-shadow: inset 0 0 7px 0 #e78284;
}
.control-center .notification-row .notification-background .notification .notification-content {
margin: 7px;
}
.control-center .notification-row .notification-background .notification .notification-content .summary {
color: #c6d0f5;
}
.control-center .notification-row .notification-background .notification .notification-content .time {
color: #a5adce;
}
.control-center .notification-row .notification-background .notification .notification-content .body {
color: #c6d0f5;
}
.control-center .notification-row .notification-background .notification > *:last-child > * {
min-height: 3.4em;
}
.control-center .notification-row .notification-background .notification > *:last-child > * .notification-action {
border-radius: 7px;
color: #c6d0f5;
background-color: #232634;
box-shadow: inset 0 0 0 1px #51576d;
margin: 7px;
}
.control-center .notification-row .notification-background .notification > *:last-child > * .notification-action:hover {
box-shadow: inset 0 0 0 1px #51576d;
background-color: #414559;
color: #c6d0f5;
}
.control-center .notification-row .notification-background .notification > *:last-child > * .notification-action:active {
box-shadow: inset 0 0 0 1px #51576d;
background-color: #85c1dc;
color: #c6d0f5;
}
.control-center .notification-row .notification-background .close-button {
margin: 7px;
padding: 2px;
border-radius: 6.3px;
color: #303446;
background-color: #ea999c;
}
.control-center .notification-row .notification-background .close-button:hover {
background-color: #e78284;
color: #303446;
}
.control-center .notification-row .notification-background .close-button:active {
background-color: #e78284;
color: #303446;
}
.control-center .notification-row .notification-background:hover {
box-shadow: inset 0 0 0 1px #51576d;
background-color: #838ba7;
color: #c6d0f5;
}
.control-center .notification-row .notification-background:active {
box-shadow: inset 0 0 0 1px #51576d;
background-color: #85c1dc;
color: #c6d0f5;
}
progressbar,
progress,
trough {
border-radius: 12.6px;
}
progressbar {
box-shadow: inset 0 0 0 1px #51576d;
}
.notification.critical progress {
background-color: #e78284;
}
.notification.low progress,
.notification.normal progress {
background-color: #8caaee;
}
trough {
background-color: #414559;
}
.control-center trough {
background-color: #51576d;
}
.control-center-dnd {
margin-top: 5px;
border-radius: 8px;
background: #414559;
border: 1px solid #51576d;
box-shadow: none;
}
.control-center-dnd:checked {
background: #414559;
}
.control-center-dnd slider {
background: #51576d;
border-radius: 8px;
}
.widget-dnd {
margin: 0px;
font-size: 1.1rem;
}
.widget-dnd > switch {
font-size: initial;
border-radius: 8px;
background: #414559;
border: 1px solid #51576d;
box-shadow: none;
}
.widget-dnd > switch:checked {
background: #414559;
}
.widget-dnd > switch slider {
background: #51576d;
border-radius: 8px;
border: 1px solid #737994;
}

View File

@ -0,0 +1,109 @@
# https://www.nerdfonts.com/cheat-sheet
# https://fontawesome.com/icons
fallback = ''
separator = ' '
[matching]
## partials
'/GitHub/' = ''
'/GitLab/' = ''
'/NVIM ?\w*/' = ''
'/npm/' = ''
'/node/' = ''
'/yarn/' = '󰄛'
'/Stack Overflow/' = ''
"/layer02.net/" = ""
"/WhatsApp/" = ""
"/Org Agenda/" = ""
## browsers
'google-chrome' = ''
'Google-chrome' = ''
'Google-chrome-unstable' = ''
'google-chrome-unstable' = ''
'Google-chrome-beta' = ''
'google-chrome-beta' = ''
'chromium' = ''
'firefox' = ''
'firefoxdeveloperedition' = ''
'vivaldi-stable' = ''
'LibreWolf' = ''
'librewolf-default' = ''
## default applications
'foot' = ''
'/foot/' = ''
'floating_shell' = ''
'pcmanfm' = ''
'pamac-manager' = ''
'/Bluetooth/' = ''
'file-roller' = '󰀼'
'swappy' = '󰄄'
## email
'Thunderbird' = ''
'thunderbird' = ''
'thunderbird-beta' = ''
'evolution' = ''
## ide
'code' = ''
'Code' = ''
'/- Visual Studio Code/' = ''
'/IntelliJ/' = ''
'code-url-handler' = ''
'emacs' = ''
# messenger
'whatsapp-for-linux' = ''
'Slack' = ''
'/Telegram/' = ''
'org.telegram.desktop' = ''
'/Microsoft Teams/' = ''
'Signal' = '󰍡'
'discord' = '󰙯'
'im.dino.Dino' = ''
'dino' = ''
"SchildiChat" = "󰳗"
## auth
'polkit-gnome-authentication-agent-1' = ''
'Keybase' = '󱕴'
## additional applications
'balena-etcher' = ''
'Steam' = ''
'steam' = ''
'cs2' = ''
'rpcs3' = ''
'Ryujinx' = ''
'vlc' = '󰕼'
'org.qbittorrent.qBittorrent' = ''
'transmission-gtk' = ''
'Insomnia' = ''
'Bitwarden' = ''
'org.keepassxc.KeePassXC' = ''
'Spotify' = ''
'YouTube Music' = '󰝚'
'Alacritty' = ''
'kitty' = ''
'font-manager' = ''
'lutris' = ''
'/Wine/' = ''
'Arctype' = ''
'Around' = '󰍫'
'org.wezfurlong.wezterm' = ''
'mpv' = ''
"xdg-desktop-portal-gtk" = "󱧊"
"bottles" = "󰡔"
"youtube" = ""
"FreeTube" = "󰗃"
"com.github.tchx84.Flatseal" = "󱛟"
"deluge" = "󱑢"
"Nsxiv" = "󰄄"
"info.mumble.Mumble" = ""
"Vintage Story" = ""
"com.github.wwmm.easyeffects" = ''

View File

@ -1,43 +1,91 @@
{
// "layer": "top", // Waybar at top layer
"position": "bottom", // Waybar position (top|bottom|left|right)
"position": "top", // Waybar position (top|bottom|left|right)
"height": 20, // Waybar height (to be removed for auto height)
// "width": 1280, // Waybar width
// Choose the order of the modules
"modules-left": ["sway/workspaces", "sway/mode", "custom/media"],
"modules-center": [],
"modules-right": ["idle_inhibitor", "mpd", "pulseaudio", "network", "cpu", "memory", "temperature", "battery", "clock", "tray", "custom/swaync", "custom/emacsstatus"],
//"modules-center": [],
//"modules-right": ["idle_inhibitor", "mpd", "pulseaudio", "network", "cpu", "memory", "temperature", "battery", "custom/scratchpad_indicator", "clock", "tray", "custom/swaync", "custom/emacsstatus" ],
"modules-right": ["pulseaudio", "network", "battery", "custom/scratchpad_indicator", "custom/neralie", "tray", "custom/swaync", "custom/emacsstatus" ],
"river/tags": {
"num-tags": 5,
"tag-labels": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
}
},
"sway/workspaces": {
"disable-scroll-wraparound": true
},
// Modules configuration
"sway/workspaces": {
"persistent_workspaces": {
"1": ["HDMI-A-1"],
"2": ["HDMI-A-1"],
"3": ["HDMI-A-1"],
"4": ["HDMI-A-1"],
"5": ["HDMI-A-1"],
"6": ["DVI-D-1"],
"7": ["DVI-D-1"],
"8": ["DVI-D-1"],
"9": ["DVI-D-1"],
"10": ["DVI-D-1"]
// "1": ["DVI-D-1"],
// "2": ["DVI-D-1"],
// "3": ["DVI-D-1"],
// "4": ["DVI-D-1"],
// "5": ["DVI-D-1"],
// "6": ["HDMI-A-1"],
// "7": ["HDMI-A-1"],
// "8": ["HDMI-A-1"],
// "9": ["HDMI-A-1"],
// "10": ["HDMI-A-1"],
//"1": ["HDMI-A-1"],
//"2": ["HDMI-A-1"],
//"3": ["HDMI-A-1"],
//"4": ["HDMI-A-1"],
//"5": ["HDMI-A-1"],
//"6": ["DVI-D-1"],
//"7": ["DVI-D-1"],
//"8": ["DVI-D-1"],
//"9": ["DVI-D-1"],
//"10": ["DVI-D-1"]
},
// "disable-scroll": true,
"all-outputs": false,
"format": "{icon}",
"format": "{name}",
//"format": "{icon}",
"format-icons": {
"1": "1-em", // emacs
"2": "2-se", // search/web
"3": "3-tm", // terminal
"4": "4-gm",
"5": "5",
"6": "6",
"7": "7",
"8": "8-sch", // schedule
"9": "9-comms",
"10": "10-mon", // monitor
"1": "+",
"2": "+",
"3": "+",
"4": "+",
"5": "+",
"6": "+",
"7": "+",
"8": "+",
"9": "+",
"10": "+",
// "1": "1",
// "2": "2",
// "3": "3-sch", // schedule
// "4": "4-comms",
// "5": "5-mon", // monitor
// "6": "6-em", // emacs
// "7": "7-se", // search/web
// "8": "8-tm", // terminal
// "9": "9-gm",
// "10": "10",
//"1": "1-em", // emacs
//"2": "2-se", // search/web
//"3": "3-tm", // terminal
//"4": "4-gm",
//"5": "5",
//"6": "6",
//"7": "7",
//"8": "8-sch", // schedule
//"9": "9-comms",
//"10": "10-mon", // monitor
}
},
"keyboard-state": {
@ -66,9 +114,12 @@
"clock": {
// "timezone": "America/New_York",
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
"format": "{:%Y-%m-%d %H:%M:%S}",
"format": "{:%H:%M}",
//"format": "{:%Y-%m-%d %H:%M:%S}",
//"format": "{:%Y-%m-%d %I:%M:%S %p}",
"interval": 1
//"format": "day # {:%j}",
"interval": 1,
"on-click": "uxnemu ~/.local/uxn/catclock.rom"
},
"cpu": {
"format": " {usage}%",
@ -96,7 +147,8 @@
"format-ethernet": " {ifname}: {ipaddr}/{cidr}",
"format-linked": " {ifname} (No IP)",
"format-disconnected": "⚠ Disconnected",
"format-alt": "{ifname}: {ipaddr}/{cidr}"
"format-alt": "{ifname}: {ipaddr}/{cidr}",
"on-click": "$TERMINAL -e nmtui"
},
"pulseaudio": {
// "scroll-step": 1, // %, can be a float
@ -164,8 +216,23 @@
"restart-interval": 1
},
"custom/emacsstatus": {
"return-type": "json",
"exec": "~/.config/waybar/scripts/emacs-status.sh",
"on-click": "emacsclient -c || emacs",
"on-click": "emacsclient -c -a ''",
"format": "{}",
"restart-interval": 3
}
},
"custom/scratchpad_indicator": {
"interval": 1,
"return-type": "json",
"exec": "swaymsg -t get_tree | jq --unbuffered --compact-output '( select(.name == \"root\") | .nodes[] | select(.name == \"__i3\") | .nodes[] | select(.name == \"__i3_scratch\") | .focus) as $scratch_ids | [.. | (.nodes? + .floating_nodes?) // empty | .[] | select(.id |IN($scratch_ids[]))] as $scratch_nodes | { text: \"\\($scratch_nodes | length)\", tooltip: $scratch_nodes | map(\"\\(.app_id // .window_properties.class) (\\(.id)): \\(.name)\") | join(\"\\n\") }'",
"format": " {}",
"on-click": "exec swaymsg 'scratchpad show'",
"on-click-right": "exec swaymsg 'move scratchpad'"
},
"custom/neralie": {
"exec": "~/.local/bin/neralie",
"on-click": "uxnemu ~/.local/uxn/catclock.rom",
"restart-interval": 1
},
}

View File

@ -0,0 +1,239 @@
{
// "layer": "top", // Waybar at top layer
"position": "top", // Waybar position (top|bottom|left|right)
"height": 20, // Waybar height (to be removed for auto height)
// "width": 1280, // Waybar width
// Choose the order of the modules
//"modules-left": ["sway/workspaces", "sway/mode", "custom/media"],
"modules-left": ["river/tags", "custom/media"],
//"modules-center": [],
//"modules-right": ["idle_inhibitor", "mpd", "pulseaudio", "network", "cpu", "memory", "temperature", "battery", "custom/scratchpad_indicator", "clock", "tray", "custom/swaync", "custom/emacsstatus" ],
"modules-right": ["pulseaudio", "network", "battery", "custom/neralie", "tray", "custom/swaync", "custom/emacsstatus" ],
"river/tags": {
"num-tags": 5,
"tag-labels": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
}
},
"sway/workspaces": {
"disable-scroll-wraparound": true
},
// Modules configuration
"sway/workspaces": {
"persistent_workspaces": {
// "1": ["DVI-D-1"],
// "2": ["DVI-D-1"],
// "3": ["DVI-D-1"],
// "4": ["DVI-D-1"],
// "5": ["DVI-D-1"],
// "6": ["HDMI-A-1"],
// "7": ["HDMI-A-1"],
// "8": ["HDMI-A-1"],
// "9": ["HDMI-A-1"],
// "10": ["HDMI-A-1"],
//"1": ["HDMI-A-1"],
//"2": ["HDMI-A-1"],
//"3": ["HDMI-A-1"],
//"4": ["HDMI-A-1"],
//"5": ["HDMI-A-1"],
//"6": ["DVI-D-1"],
//"7": ["DVI-D-1"],
//"8": ["DVI-D-1"],
//"9": ["DVI-D-1"],
//"10": ["DVI-D-1"]
},
// "disable-scroll": true,
"all-outputs": false,
"format": "{name}",
//"format": "{icon}",
"format-icons": {
"1": "+",
"2": "+",
"3": "+",
"4": "+",
"5": "+",
"6": "+",
"7": "+",
"8": "+",
"9": "+",
"10": "+",
// "1": "1",
// "2": "2",
// "3": "3-sch", // schedule
// "4": "4-comms",
// "5": "5-mon", // monitor
// "6": "6-em", // emacs
// "7": "7-se", // search/web
// "8": "8-tm", // terminal
// "9": "9-gm",
// "10": "10",
//"1": "1-em", // emacs
//"2": "2-se", // search/web
//"3": "3-tm", // terminal
//"4": "4-gm",
//"5": "5",
//"6": "6",
//"7": "7",
//"8": "8-sch", // schedule
//"9": "9-comms",
//"10": "10-mon", // monitor
}
},
"keyboard-state": {
"numlock": true,
"capslock": true,
"format": "{name} {icon}",
"format-icons": {
"locked": "",
"unlocked": ""
}
},
"sway/mode": {
"format": "<span style=\"italic\">{}</span>"
},
"idle_inhibitor": {
"format": "{icon}",
"format-icons": {
"activated": "",
"deactivated": ""
}
},
"tray": {
"icon-size": 15,
"spacing": 10
},
"clock": {
// "timezone": "America/New_York",
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
"format": "{:%H:%M}",
//"format": "{:%Y-%m-%d %H:%M:%S}",
//"format": "{:%Y-%m-%d %I:%M:%S %p}",
//"format": "day # {:%j}",
"interval": 1,
"on-click": "uxnemu ~/.local/uxn/catclock.rom"
},
"cpu": {
"format": " {usage}%",
// "tooltip": false
},
"memory": {
"format": " {}%"
},
"battery": {
"states": {
"good": 95,
"warning": 30,
"critical": 15
},
"format": "{icon} {capacity}% ({time})",
"format-charging": " {capacity}%",
"format-plugged": " {capacity}%",
// "format-good": "", // An empty format will hide the module
// "format-full": "",
"format-icons": ["", "", "", "", ""]
},
"network": {
// "interface": "wlp2*", // (Optional) To force the use of this interface
"format-wifi": " {essid} ({signalStrength}%)",
"format-ethernet": " {ifname}: {ipaddr}/{cidr}",
"format-linked": " {ifname} (No IP)",
"format-disconnected": "⚠ Disconnected",
"format-alt": "{ifname}: {ipaddr}/{cidr}",
"on-click": "$TERMINAL -e nmtui"
},
"pulseaudio": {
// "scroll-step": 1, // %, can be a float
"format": "{icon} {volume}%",
"format-bluetooth": "{volume}% {format_source}",
"format-bluetooth-muted": " {icon} {format_source}",
"format-muted": " {volume}%",
// "format-source": "{volume}% ",
// "format-source-muted": "",
"format-icons": {
"headphone": "",
"hands-free": "",
"headset": "",
"phone": "",
"portable": "",
"car": "",
"default": ["", "", ""]
},
"on-click": "$TERMINAL -e pulsemixer"
// "on-click": "pavucontrol"
},
"mpd": {
"server": "localhost",
"port": 6600,
"format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon} {artist} | {title} | {elapsedTime:%M:%S}/{totalTime:%M:%S}",
// "max-length": 200,
"format-disconnected": "-",
"format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped",
"interval": 2,
"consume-icons": {
"on": " " // Icon shows only when "consume" is on
},
"random-icons": {
"off": "<span color=\"#f53c3c\"></span> ", // Icon grayed out when "random" is off
"on": " "
},
"repeat-icons": {
"on": " "
},
"single-icons": {
"on": "1 "
},
"state-icons": {
"paused": "",
"playing": ""
},
"tooltip-format": "MPD (connected)",
"tooltip-format-disconnected": "MPD (disconnected)"
},
"custom/media": {
"format": "{icon} {}",
"return-type": "json",
"max-length": 40,
"format-icons": {
"spotify": "",
"default": "🎜"
},
"escape": true,
"exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder
// "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name
},
"custom/swaync": {
"exec": "~/.config/waybar/scripts/notifications.sh",
"on-click": "swaync-client -t",
"restart-interval": 1
},
"custom/emacsstatus": {
"return-type": "json",
"exec": "~/.config/waybar/scripts/emacs-status.sh",
"on-click": "emacsclient -c -a ''",
"format": "{}",
"restart-interval": 3
},
"custom/scratchpad_indicator": {
"interval": 1,
"return-type": "json",
"exec": "swaymsg -t get_tree | jq --unbuffered --compact-output '( select(.name == \"root\") | .nodes[] | select(.name == \"__i3\") | .nodes[] | select(.name == \"__i3_scratch\") | .focus) as $scratch_ids | [.. | (.nodes? + .floating_nodes?) // empty | .[] | select(.id |IN($scratch_ids[]))] as $scratch_nodes | { text: \"\\($scratch_nodes | length)\", tooltip: $scratch_nodes | map(\"\\(.app_id // .window_properties.class) (\\(.id)): \\(.name)\") | join(\"\\n\") }'",
"format": " {}",
"on-click": "exec swaymsg 'scratchpad show'",
"on-click-right": "exec swaymsg 'move scratchpad'"
},
"custom/neralie": {
"exec": "~/.local/bin/neralie",
"on-click": "uxnemu ~/.local/uxn/catclock.rom",
"restart-interval": 1
},
}

View File

@ -1,7 +1,15 @@
inactive="{
\"text\": \"x\",
\"tooltip\": \"emacs is not running.\"
}\n"
active="{
\"text\": \"e+\",
\"tooltip\": \"emacs is running.\"
}\n"
pgrep emacs >/dev/null
if [ $? -eq 1 ]
then
echo 'X'
echo $inactive
else
echo 'e+'
echo $active
fi

View File

@ -0,0 +1,8 @@
#!/bin/sh
while true
do
neralie
sleep .5
neralie
sleep .5
done

View File

@ -1,44 +1,70 @@
/* white */
/*
@define-color bg white;
@define-color button black;
@define-color button-occupied black;
@define-color button-selected black;
@define-color button-box lightgrey;
@define-color widget black;
@define-color widget-border-right transparent;
@define-color border-bottom rgba(100, 114, 125, 0.5);
*/
/* black */
/*@define-color bg black;
@define-color button grey;
@define-color button-occupied grey;
@define-color button-selected grey;
@define-color button-box #424242;
@define-color widget grey;
@define-color border-bottom transparent;
@define-color widget-border-right #424242;*/
/* grey */
/*
@define-color bg #222222;
@define-color button #bbbbbb;
@define-color button-occupied #bbbbbb;
@define-color button-selected #bbbbbb;
@define-color button-box #424242;
@define-color widget #999999;
@define-color widget-border-right #424242;
@define-color border-bottom transparent;*/
/* Tomorrow Night (#161616 bg) */
@define-color border-bottom transparent;
@define-color widget-border-right transparent;
@define-color button #444444;
@define-color button-occupied #c5c8c6;
@define-color button-selected grey;
@define-color button-box #424242;
@define-color bg rgba(22,22,22,0.9);
@define-color widget #c5c8c6;
@define-color border-bottom #333333;
/*@define-color bg rgba(19,19,19,1);*/
* {
border: none;
border-radius: 0;
font-family: IBMPlexMono, monospace;
/* Cozette */
font-family: 'IBM Plex Mono', 'Symbols Nerd Font';
font-size: 10px;
/*font-size: 14px;*/
min-height: 0;
}
#workspaces {
margin: 0 4px;
}
#workspaces button {
/*background-color: #6B313D;*/
/*color: #bbbbbb;*/
background-color: #444444;
color: #bbbbbb;
padding: 0 8px;
min-width: 0;
}
#workspaces button.persistent {
/*background-color: #000000;*/
background-color: #222222;
color: #bbbbbb;
}
#workspaces button.focused {
color: #000000;
background-color: #888888;
}
#workspaces button.visible {
color: #000000;
background-color: #888888;
}
#workspaces button.urgent {
background-color: #eb4d4b;
}
window#waybar {
/*background-color: #000;*/
background-color: #222222;
color: #ffffff;
/* background colors:
* #000
* #222222 *def*
* #161616
*/
/* colors
* #999999 def
* #bbbbbb
* #ffffff
*/
background-color: @bg;
border-bottom: 2px solid @border-bottom;
/*transition-property: background-color;*/
/*transition-duration: .5s;*/
}
@ -65,6 +91,66 @@ window#waybar.chromium {
border: none;
}
/*background-color: #6B313D;*/
#workspaces button.persistent {
background-color: transparent;
color: @button;
}
#workspaces button {
transition: none;
/*
* background colors:
* transparent
* #444444
*/
background-color: transparent;
/* colors:
* #bbbbbb
*/
color: @button-occupied;
padding: 0 8px;
min-width: 0;
}
/*#workspaces button.active {
background-color: #444444;
color: #bbbbbb;
}*/
#workspaces button.visible {
/*color: #000000;
background-color: #888888;*/
/*
* box shadow colors
* #424242 *def*
* #555555
*/
box-shadow: inset 2px 2px @button-box, inset -2px -2px @button-box;
color:@button-selected;
}
#workspaces button.urgent {
background-color: #eb4d4b;
}
/* river tags */
#tags button {
color: @button; /*#444444*/
padding: 0 8px;
min-width: 0;
}
#tags button.occupied {
color: @button-occupied /*#6B313D*/
}
#tags button.focused {
color: @button-selected; /*#9EA68F*/
box-shadow: inset 2px 2px @button-box, inset -2px -2px @button-box;
}
#tags button.urgent {
color: red /* def red */
}
#mode {
background-color: #64727D;
@ -85,20 +171,37 @@ window#waybar.chromium {
#idle_inhibitor,
#bluetooth,
#custom-swaync,
#custom-scratchpad_indicator,
#custom-emacsstatus,
#custom-neralie,
#mpd {
padding: 0 6px;
border-right: 2px solid #424242;
color: #999999;
/*color: #ffffff*/
/*padding-right: 10px;*/
/*
* border colors
* #424242 *def*
*
*/
border-right: 2px solid @widget-border-right;
/*
* colors
* #999999 *def*
* #bbbbbb
* #ffffff
*/
color: @widget
}
/* im using this near the right edge */
#custom-emacsstatus {
/* test {
padding: 0 6px;
color: #999999;
}
}*/
#window,
#workspaces {
margin: 0 4px;
}
/* If workspaces is the leftmost module, omit left margin */
.modules-left > widget:first-child > #workspaces {
@ -141,11 +244,11 @@ window#waybar.chromium {
#battery.critical:not(.charging) {
background-color: #f53c3c;
color: #ffffff;
/*animation-name: blink;
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;*/
animation-direction: alternate;
}
label:focus {

View File

@ -0,0 +1,20 @@
prompt=X
allow_markup=true
dmenu-parse_action=true
stylesheet=style.css
watch_css=true
#colors=colors
#width=400
#width=300
#lines=17
#height=100%
#image_size=20
allow_images=false
hide_scroll=true
#gtk_dark=true
layer=overlay
#location=9

View File

@ -0,0 +1,52 @@
* {
font-family: "Noto Sans", sans-serif;
font-size: 12px;
}
window {
box-shadow: inset 0 0 0 1px #333333;
background-color: transparent;
border-radius: 0px; /*12.6px*/
}
#input {
border: none;
background-color: rgba(0,0,0,.2); /* #444444 rgba(0,0,0,.2) */
color: #c5c8c6; /* white */
/*border: 2px solid #161616;*/
border-radius: 0px; /*7px*/
}
#inner-box {
/*background-color: #161616;*/
}
#outer-box {
margin: 1px;
padding: 3px; /* 10px */
background-color: rgba(29, 31, 33,0.9); /* #222222 rgba(22,22,22,0.9) rgba(29, 31, 33,0.9) */
border-radius: 0px; /*12.6px*/
/*filter: blur(1.5em)*/
}
#scroll {
/*margin: 5px;*/
}
#text {
padding: 4px;
color: grey; /* probably c5c8c6 */
}
#text:selected {
color: #c5c8c6;
}
/*#entry:nth-child(even){
background-color: #161719;
}*/
#entry:selected {
background-color: transparent; /* #222222 */
/*border-radius: 7px;*/
/*box-shadow: inset 0 0 0 1px #333333;*/
}

View File

@ -0,0 +1,7 @@
set default-bg "#1d1f21"
set statusbar-bg "#161719"
set statusbar-fg "#c5c5c5"
set notification-bg "#1d1f21"
set notification-fg "#c5c5c5"
set selection-clipboard clipboard

View File

@ -11,11 +11,9 @@ setopt interactive_comments
# History in cache directory:
HISTSIZE=10000000
SAVEHIST=10000000
[ -f "${XDG_CONFIG_HOME:-$HOME/.cache}/zsh/" ] && mkdir ${XDG_CACHE_HOME:-$HOME/.cache}/zsh/
[ -d "${XDG_CONFIG_HOME:-$HOME/.cache}/zsh/" ] || mkdir ${XDG_CACHE_HOME:-$HOME/.cache}/zsh/
HISTFILE="${XDG_CACHE_HOME:-$HOME/.cache}/zsh/history"
# Load aliases and shortcuts if existent.
[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc"
[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/aliasrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/aliasrc"
[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/privrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/privrc"
[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/zshnameddirrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/zshnameddirrc"
@ -92,7 +90,8 @@ function osc7 {
autoload -Uz add-zsh-hook
add-zsh-hook -Uz chpwd osc7
[ ! -f ${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc ] && setsid shortcuts >/dev/null 2>&1
# reverse searching
bindkey '^R' history-incremental-search-backward
# Load syntax highlighting; should be last.
source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh 2>/dev/null

View File

@ -0,0 +1,576 @@
;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
;; Place your private configuration here! Remember, you do not need to run 'doom
;; sync' after modifying this file!
;; Some functionality uses this to identify you, e.g. GPG configuration, email
;; clients, file templates and snippets. It is optional.
;; (setq user-full-name "John Doe"
;; user-mail-address "john@doe.com")
;; Doom exposes five (optional) variables for controlling fonts in Doom:
;;
;; - `doom-font' -- the primary font to use
;; - `doom-variable-pitch-font' -- a non-monospace font (where applicable)
;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for
;; presentations or streaming.
;; - `doom-symbol-font' -- for symbols
;; - `doom-serif-font' -- for the `fixed-pitch-serif' face
;;
;; See 'C-h v doom-font' for documentation and more examples of what they
;; accept. For example:
;;
;;(setq doom-font (font-spec :family "Fira Code" :size 12 :weight 'semi-light)
;; doom-variable-pitch-font (font-spec :family "Fira Sans" :size 13))
;;
;; If you or Emacs can't find your font, use 'M-x describe-font' to look them
;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to
;; refresh your font settings. If Emacs still can't find your font, it likely
;; wasn't installed correctly. Font issues are rarely Doom issues!
;; There are two ways to load a theme. Both assume the theme is installed and
;; available. You can either set `doom-theme' or manually load a theme with the
;; `load-theme' function. This is the default:
;(setq doom-theme 'doom-one)
;; This determines the style of line numbers in effect. If set to `nil', line
;; numbers are disabled. For relative line numbers, set this to `relative'.
;(setq display-line-numbers-type t)
;; If you use `org' and don't want your org files in the default location below,
;; change `org-directory'. It must be set before org loads!
;(setq org-directory "~/org/")
;; Whenever you reconfigure a package, make sure to wrap your config in an
;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
;;
;; (after! PACKAGE
;; (setq x y))
;;
;; The exceptions to this rule:
;;
;; - Setting file/directory variables (like `org-directory')
;; - Setting variables which explicitly tell you to set them before their
;; package is loaded (see 'C-h v VARIABLE' to look up their documentation).
;; - Setting doom variables (which start with 'doom-' or '+').
;;
;; Here are some additional functions/macros that will help you configure Doom.
;;
;; - `load!' for loading external *.el files relative to this one
;; - `use-package!' for configuring packages
;; - `after!' for running code after a package has loaded
;; - `add-load-path!' for adding directories to the `load-path', relative to
;; this file. Emacs searches the `load-path' when you load packages with
;; `require' or `use-package'.
;; - `map!' for binding new keys
;;
;; To get information about any of these functions/macros, move the cursor over
;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k').
;; This will open documentation for it, including demos of how they are used.
;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces,
;; etc).
;;
;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
;; they are implemented.
(setq doom-font (font-spec :family "DejaVu Sans Mono" :size 12)
doom-variable-pitch-font (font-spec :family "Libertinus Serif" :size 15))
;; theme
; my eyes won't accept anything else than tomorrow night
(setq doom-theme 'doom-tomorrow-night )
;(setq doom-theme 'doom-meltbus ) ; depressed, muted colors.
;(setq doom-theme 'doom-plain-dark ) ; themes for writing
;(setq doom-theme 'doom-plain )
;; splash
(setq fancy-splash-image (expand-file-name "img/camcorder.jpeg" doom-user-dir)
+doom-dashboard-banner-padding '(0 . 0))
;; doom dashboard
;; remove useless dashboard info
(remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-shortmenu)
(remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-footer)
(add-hook! '+doom-dashboard-mode-hook (hide-mode-line-mode 1) (hl-line-mode -1))
(setq-hook! '+doom-dashboard-mode-hook evil-normal-state-cursor (list nil))
;; opacity
;(set-frame-parameter (selected-frame) 'alpha-background 90) (add-to-list 'default-frame-alist '(alpha-background . 90))
(after! org
(setq display-line-numbers-type nil
org-hide-emphasis-markers t
org-pretty-entities t
org-ellipsis ""
org-image-actual-width 600))
(setq display-line-numbers-type nil)
;; disable flyspell-mode
(after! flyspell
(setq-default spell-checking-enable-by-default nil))
;; disable gutter for org-mode
(after! git-gutter
(setq git-gutter:disabled-modes '(fundamental-mode image-mode pdf-view-mode org-mode)))
(after! org-journal
(setq org-journal-dir "~/diary"
org-journal-date-prefix "#+TITLE: "
org-journal-time-prefix "+ "
org-journal-date-format "%a, %Y-%m-%d"
org-journal-file-format "%Y-%m-%d.org"))
(use-package! org-books
:defer t
:config
(setq org-books-file "~/notebook/readinglist.org"))
(after! org
(setq org-log-done 'time
org-log-into-drawer t
;About the 2 elisp lines below: If you want to send items without explicit
;priorities to the bottom of the list you have to set org-default-priority to the
;value of org-lowest-priority). I did this to make recognize that: PRIORITY=0 are
;items without explicit priorities (not A, B or C, but just TODO)
org-lowest-priority ?E
org-default-priority ?E)
(defun jethro/org-archive-done-tasks ()
"Archive all done tasks."
(interactive)
(org-map-entries 'org-archive-subtree "/DONE" 'file)))
(setq org-directory "~/notebook/"
bookmark-default-file "~/.doom.d/bookmarks")
(setq org-agenda-files '("~/housekeeping/calendar.org"
"~/notebook/ag/habits.org"
"~/notebook/ag/todo.org"
"~/notebook/ag/projects.org"
"~/notebook/ag/refile.org"
"~/notebook/ag/pomodoro.org"
"~/notebook/ag/events/birthdays.org"
"~/notebook/refile.org"
))
(after! org-agenda
(setq org-agenda-sticky t)) ; dont kill agendas
(use-package! org-super-agenda
:after org-agenda
:init
(setq org-agenda-skip-scheduled-if-done t
org-agenda-skip-deadline-if-done t
org-agenda-include-deadlines t
org-agenda-block-separator nil
org-agenda-compact-blocks t
org-agenda-start-day nil ;; i.e. today
org-agenda-span 1
org-agenda-start-on-weekday nil)
(add-to-list 'org-agenda-custom-commands
'("c" "Super view"
((agenda "" ((org-agenda-overriding-header "")
(org-super-agenda-groups
'((:name "Soon"
:deadline future
:order 3)
(:name "Today"
:time-grid t
:date today
:order 2)
(:name "Due today"
:deadline today
:scheduled today
:order 2)
(:name "Overdue"
:deadline past
:scheduled past
:order 1)))))
(alltodo "" ((org-agenda-overriding-header "")
(org-super-agenda-groups
'(;(:name "Future"
; :scheduled future)
(:discard (:anything t)))))))))
:config
(org-super-agenda-mode))
(setq org-agenda-prefix-format '(
(agenda . " %?-12t% s")
(todo . " %i %-12:c")
(tags . " %i %-12:c")
(search . " %i %-12:c")))
;; hide tags
(after! org-agenda
(setq org-agenda-hide-tags-regexp
(concat org-agenda-hide-tags-regexp "\\|sometag")))
;; org-pomodoro
(setq org-pomodoro-ask-upon-killing t
org-pomodoro-keep-killed-pomodoro-time t
org-pomodoro-length 25
org-pomodoro-manual-break t)
(defun +org-pomodoro/3-5 ()
"Set Pomodoro intervals to 3-5"
(interactive)
(setq org-pomodoro-length 3)
(setq org-pomodoro-short-break-length 5)
(message "Pomodoro set to 3-5" (buffer-name)))
(defun +org-pomodoro/5-5 ()
"Set Pomodoro intervals to 5-5"
(interactive)
(setq org-pomodoro-length 5)
(setq org-pomodoro-short-break-length 5)
(message "Pomodoro set to 3-5" (buffer-name)))
(defun +org-pomodoro/10-5 ()
"Set Pomodoro intervals to 10-5"
(interactive)
(setq org-pomodoro-length 10)
(setq org-pomodoro-short-break-length 5)
(message "Pomodoro set to 10-5" (buffer-name)))
(defun +org-pomodoro/15-5 ()
"Set Pomodoro intervals to 15-5"
(interactive)
(setq org-pomodoro-length 15)
(setq org-pomodoro-short-break-length 5)
(message "Pomodoro set to 15-5" (buffer-name)))
(defun +org-pomodoro/25-5 ()
"Set Pomodoro intervals to 25-5"
(interactive)
(setq org-pomodoro-length 25)
(setq org-pomodoro-short-break-length 5)
(message "Pomodoro set to 25-5" (buffer-name)))
(defun +org-pomodoro/30-10 ()
"Set Pomodoro intervals to 30-10"
(interactive)
(setq org-pomodoro-length 30)
(setq org-pomodoro-short-break-length 10)
(message "Pomodoro set to 30-10" (buffer-name)))
(defun +org-pomodoro/50-10 ()
"Set Pomodoro intervals to 50-10"
(interactive)
(setq org-pomodoro-length 50)
(setq org-pomodoro-short-break-length 10)
(message "Pomodoro set to 50-10" (buffer-name)))
;; eisenhower matrix
(after! org-agenda
(add-to-list 'org-agenda-custom-commands
'("1" "Eisenhower matrix"
((tags-todo
"+PRIORITY=\"A\"-habits+todo"
((org-agenda-overriding-header "Urgent and important"))))
nil))
(add-to-list 'org-agenda-custom-commands
'("2" "Eisenhower matrix"
((tags-todo
"+PRIORITY=\"B\"-habits+todo"
((org-agenda-overriding-header "Important but not urgent"))))
nil))
(add-to-list 'org-agenda-custom-commands
'("3" "Eisenhower matrix"
((tags-todo
"+PRIORITY=\"C\"-habits+todo"
((org-agenda-overriding-header "Urgent but not important"))))
nil))
(add-to-list 'org-agenda-custom-commands
'("4" "Eisenhower matrix"
((tags-todo
"+PRIORITY=0-PRIORITY=\"A\"-PRIORITY=\"B\"-PRIORITY=\"C\"-habits+todo"
;"+PRIORITY=0+PRIORITY=\"D\"-habits+todo"
((org-agenda-overriding-header "Neither important nor urgent"))))
nil))
;;; same but using lists
(add-to-list 'org-agenda-custom-commands
'("x" "Eisenhower Matrix (list)"
((tags-todo
"+PRIORITY=\"A\"-habits+todo"
((org-agenda-overriding-header "Urgent and important")))
(tags-todo
"+PRIORITY=\"B\"-habits+todo"
((org-agenda-overriding-header "Important but not urgent")))
(tags-todo
"+PRIORITY=\"C\"-habits+todo"
((org-agenda-overriding-header "Urgent but not important")))
(tags-todo
"+PRIORITY=0-PRIORITY=\"A\"-PRIORITY=\"B\"-PRIORITY=\"C\"-habits+todo"
((org-agenda-overriding-header "Neither important nor urgent"))))
nil)))
;; eisenhower matrix grid
(defun +eisenhower-matrix/agenda-1 () (interactive) (org-agenda nil "1"))
(defun +eisenhower-matrix/agenda-2 () (interactive) (org-agenda nil "2"))
(defun +eisenhower-matrix/agenda-3 () (interactive) (org-agenda nil "3"))
(defun +eisenhower-matrix/agenda-4 () (interactive) (org-agenda nil "4"))
(defun split-4-ways () (interactive) (delete-other-windows) (split-window-right) (split-window-below) (windmove-right) (split-window-below) (windmove-left))
(defun +eisenhower-matrix/redo-all-agenda-buffers ()
(interactive)
(dolist (buffer (buffer-list))
(with-current-buffer buffer
(when (derived-mode-p 'org-agenda-mode)
(org-agenda-redo t)))))
(defun +eisenhower-matrix/make-agendas ()
(interactive)
(+eisenhower-matrix/agenda-1)
(hide-mode-line-mode)
(+eisenhower-matrix/agenda-2)
(hide-mode-line-mode)
(+eisenhower-matrix/agenda-3)
(hide-mode-line-mode)
(+eisenhower-matrix/agenda-4)
(hide-mode-line-mode)
)
(defun +eisenhower-matrix/make-eisenhower-matrix ()
(interactive)
(+eisenhower-matrix/make-agendas)
(split-4-ways)
(switch-to-buffer "*Org Agenda(1)*")
(windmove-right)
(switch-to-buffer "*Org Agenda(2)*")
(windmove-down)
(switch-to-buffer "*Org Agenda(4)*")
(windmove-left)
(switch-to-buffer "*Org Agenda(3)*")
)
;; workspaces
;;; Commentary: provides 2 grid workspaces via function;
;;; +todo-workspaces/make-todo-workspace
;;; +todo-workspaces/make-todo-workspace-min
(defun +todo-workspaces/agenda1 () (org-agenda nil "a"))
(defun +todo-workspaces/agenda2 () (org-agenda nil "x"))
(defun +todo-workspaces/make-todo-agendas () (+todo-workspaces/agenda1) (hide-mode-line-mode) (+todo-workspaces/agenda2) (hide-mode-line-mode))
(defun +todo-workspaces/split-todo-workspace ()
(delete-other-windows)
(split-window-below)
(windmove-down)
(split-window-right)
(windmove-up))
(defun +todo-workspaces/split-todo-workspace-min ()
(delete-other-windows)
(split-window-below))
(defun +todo-workspaces/redo-all-agenda-buffers ()
(interactive)
(dolist (buffer (buffer-list))
(with-current-buffer buffer
(when (derived-mode-p 'org-agenda-mode)
(org-agenda-redo t)))))
(defun +todo-workspaces/make-todo-workspace ()
(interactive)
;(+todo-workspaces/redo-all-agenda-buffers)
(+todo-workspaces/make-todo-agendas)
(+todo-workspaces/split-todo-workspace)
(switch-to-buffer "*Org Agenda(a)*")
(windmove-down)
(switch-to-buffer "*Org Agenda(x)*")
(windmove-right)
(find-file "~/notebook/ag/todo.org"))
(defun +todo-workspaces/make-todo-workspace-min ()
(interactive)
;(+todo-workspaces/redo-all-agenda-buffers)
(+todo-workspaces/make-todo-agendas)
(+todo-workspaces/split-todo-workspace-min)
(switch-to-buffer "*Org Agenda(a)*")
(windmove-down)
(switch-to-buffer "*Org Agenda(x)*"))
(map! :leader
(:prefix-map ("o" . "open")
(:prefix-map ("w" . "workspaces")
:desc "Eisenhower Matrix" "e" #'+eisenhower-matrix/make-eisenhower-matrix ;; classic eisenhower matrix
:desc "Schedule/Eisenhower-list/todo" "t" #'+todo-workspaces/make-todo-workspace
:desc "Schedule/Eisenhower-list" "s" #'+todo-workspaces/make-todo-workspace-min)
(:prefix ("a" . "org agenda")
:desc "Eisenhower Matrix" "e" #'+eisenhower-matrix/make-eisenhower-matrix ;; classic eisenhower matrix
:desc "Rebuild All agendas" "r" #'+eisenhower-matrix/redo-all-agenda-buffers
:desc "Schedule/Eisenhower-list/todo" "t" #'+todo-workspaces/make-todo-workspace ;; todo list is useless
:desc "Schedule/Eisenhower-list" "s" #'+todo-workspaces/make-todo-workspace-min)))
;; org-roam configurations
(use-package! org-roam
:init
:custom
(org-roam-directory "~/notebook/roam/" )
(org-roam-dailies-capture-templates
'(("d" "default" entry "* %<%I:%M %p>: %?"
:if-new (file+head "%<%Y-%m-%d>.org" "#+title: %<%Y-%m-%d>\n")))))
;; looks
(cl-defmethod org-roam-node-type ((node org-roam-node))
"Return the TYPE of NODE."
(condition-case nil
(file-name-nondirectory
(directory-file-name
(file-name-directory
(file-relative-name (org-roam-node-file node) org-roam-directory))))
(error "")))
(setq org-roam-node-display-template
(concat "${type:15} ${title:30} " (propertize "${tags:10}" 'face 'org-tag)))
(setq org-roam-capture-templates
'(("d" "default" plain "%?"
:target (file+head "%<%Y%m%d%H%M%S>-${slug}.org"
"#+title: ${title}\n")
:unnarrowed t)
; main things
("l" "literature" plain "%?"
:if-new
(file+head "literature/%<%Y%m%d%H%M%S>-${title}.org" "#+title: ${title}\n")
:immediate-finish t
:unnarrowed t)
("p" "permanent" plain "%?"
:if-new
(file+head "permanent/%<%Y%m%d%H%M%S>-${title}.org" "#+title: ${title}\n")
:immediate-finish t
:unnarrowed t)
; now using inbox.org via org-capture
("f" "fleeting" plain "%?"
:if-new
(file+head "fleeting/%<%Y%m%d%H%M%S>-${title}.org" "#+title: ${title}\n")
:immediate-finish t
:unnarrowed t)
("s" "school" plain "%?"
:if-new
(file+head "school/%<%Y%m%d%H%M%S>-${title}.org" "#+title: ${title}\n")
:immediate-finish t
:unnarrowed t)))
;; org-capture
(after! org
;; examples: file:~/.emacs.d/modules/lang/org/config.el
;; file:~/.emacs.d/modules/lang/org/autoload/org-capture.el
;; set locations personal and centralized files
(defvar +org-capture-refile-file "ag/refile.org")
(defun +org-capture-refile-file ()
(expand-file-name +org-capture-refile-file org-directory))
(defvar +org-capture-todo-custom-file "ag/todo.org")
(defun +org-capture-todo-custom-file ()
(expand-file-name +org-capture-todo-custom-file org-directory))
(defvar +org-capture-custom-projects-file "ag/projects.org")
(defun +org-capture-custom-central-project-todo-file ()
"TODO"
(+org--capture-central-file
+org-capture-custom-projects-file (projectile-project-name)))
(defun +org-capture-custom-central-project-notes-file ()
"TODO"
(+org--capture-central-file
+org-capture-custom-projects-file (projectile-project-name)))
(defun +org-capture-custom-central-project-changelog-file ()
"TODO"
(+org--capture-central-file
+org-capture-custom-projects-file (projectile-project-name)))
;(add-to-list 'org-capture-templates
; '(("s" "Slipbox" entry (file "braindump/org/inbox.org")
; "* %?\n")
; ("t" "Personal todo" entry
; (file+headline +org-capture-todo-file "Inbox")
; "* [ ] %?\n%i\n%a" :prepend t)
; )
(setq org-capture-templates
'(("t" "Personal todo" entry
(file+headline +org-capture-todo-custom-file "todo")
"* TODO %?\n%i\n%a" :prepend t)
("T" "Personal todo (no link)" entry
(file+headline +org-capture-todo-custom-file "todo")
"* TODO %?\n" :prepend t)
;;; i never use this
;("n" "Personal notes" entry
;(file+headline +org-capture-notes-file "Inbox")
;"* %u %?\n%i\n%a" :prepend t)
("r" "Personal refile file" entry
(file +org-capture-refile-file)
"* %u %?\n%i\n%a" :prepend t)
;; using org-journal atm, i will likely never use this
;("j" "Journal" entry
;(file+olp+datetree +org-capture-journal-file)
;"* %U %?\n%i\n%a" :prepend t)
;; Will use {project-root}/{todo,notes,changelog}.org, unless a
;; {todo,notes,changelog}.org file is found in a parent directory.
;; Uses the basename from `+org-capture-todo-file',
;; `+org-capture-changelog-file' and `+org-capture-notes-file'.
("p" "Templates for projects")
("pt" "Project-local todo" entry ; {project-root}/todo.org
(file+headline +org-capture-project-todo-file "Inbox")
"* TODO %?\n%i\n%a" :prepend t)
("pn" "Project-local notes" entry ; {project-root}/notes.org
(file+headline +org-capture-project-notes-file "Inbox")
"* %U %?\n%i\n%a" :prepend t)
("pc" "Project-local changelog" entry ; {project-root}/changelog.org
(file+headline +org-capture-project-changelog-file "Unreleased")
"* %U %?\n%i\n%a" :prepend t)
;; reference for function: [[file:~/.emacs.d/modules/lang/org/autoload/org-capture.el::defun +org--capture-central-file (file project]]
;; Will use {org-directory}/{+org-capture-projects-file} and store
;; these under {ProjectName}/{Tasks,Notes,Changelog} headings. They
;; support `:parents' to specify what headings to put them under, e.g.
;; :parents ("Projects")
("o" "Centralized templates for projects")
("ot" "Project todo" entry
(function +org-capture-custom-central-project-todo-file)
"* TODO %?\n %i\n %a"
:heading "Tasks"
:prepend nil)
("on" "Project notes" entry
(function +org-capture-custom-central-project-notes-file)
"* %U %?\n %i\n %a"
:heading "Notes"
:prepend t)
("oc" "Project changelog" entry
(function +org-capture-custom-central-project-changelog-file)
"* %U %?\n %i\n %a"
:heading "Changelog"
:prepend t)
;; org books / general logging
("b" "Book log / General log (org)" item (function org-books-visit-book-log)
"- %U %?" :prepend t)
;; zettelkasten
("s" "Slipbox" entry (file "roam/inbox.org")
"* %U %?\n")
("S" "Slipbox link" entry (file "roam/inbox.org")
"* %U %?\n %i\n %a"))))
(use-package! org-wild-notifier
:init
(add-hook 'doom-post-init-hook (org-wild-notifier-mode))
:config
(require 'org-duration)
;(setq alert-default-style 'libnotify)
(setq org-wild-notifier-alert-time '(10 0))
(setq org-wild-notifier-keyword-whitelist nil)
(setq org-wild-notifier-keyword-blacklist '("DONE"))
(alert-add-rule :category "org-wild-notifier"
:style (cond (alert-libnotify-command
'libnotify)
(alert-default-style))))
;;; play audio for for alerts
(defun +org-wild-notifier/play-sound () (interactive) (start-process-shell-command "org-wild-notifier-audio-player" nil "mpg123 -f 23000 ~/resources/sounds/alerts/metal-gear-item-drop.mp3")) (defadvice org-wild-notifier--notify (after org-wild-notifier--play-sound-after-notify activate) (+org-wild-notifier/play-sound))
;;; for testing notifications
(defun org-wild-notifier-alert-test ()
(interactive)
(alert "test" :category 'org-wild-notifier))

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -0,0 +1,207 @@
;;; 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
+dictionary)
;;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
cc
;;clojure ; java with a lisp
;;common-lisp ; if you've seen one lisp, you've seen them all
;;coq ; proofs-as-programs
;;crystal ; ruby at the speed of c
;;csharp ; unity, .NET, and mono shenanigans
;;data ; config/data formats
;;(dart +flutter) ; paint ui and not much else
;;dhall
;;elixir ; erlang done right
;;elm ; care for a cup of TEA?
emacs-lisp ; drown in parentheses
;;erlang ; an elegant language for a more civilized age
;;ess ; emacs speaks statistics
;;factor
;;faust ; dsp, but you get to keep your soul
;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
;;fsharp ; ML stands for Microsoft's Language
;;fstar ; (dependent) types and (monadic) effects and Z3
;;gdscript ; the language you waited for
;;(go +lsp) ; the hipster dialect
;;(graphql +lsp) ; Give queries a REST
;;(haskell +lsp) ; a language that's lazier than I am
;;hy ; readability of scheme w/ speed of python
;;idris ; a language you can depend on
;;json ; At least it ain't XML
;;(java +lsp) ; the poster child for carpal tunnel syndrome
java
;;javascript ; all(hope(abandon(ye(who(enter(here))))))
;;julia ; a better, faster MATLAB
;;kotlin ; a better, slicker Java(Script)
;;latex ; writing papers in Emacs has never been so fun
;;lean ; for folks with too much to prove
ledger ; be audit you can be
;;lua ; one-based indices? one-based indices
markdown ; writing docs for people to ignore
;;nim ; python + lisp at the speed of c
;;nix ; I hereby declare "nix geht mehr!"
;;ocaml ; an objective camel
(org
+journal
+habit
+roam2
+dragndrop
+pomodoro
+publish
;+pretty
) ; organize your plain life in plain text
;;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()
rust
;;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

@ -1,11 +1,12 @@
;;; org-wild-notifier.el --- Customizable org-agenda notifications -*- lexical-binding: t -*-
;; Copyright (C) 2017 Artem Khramov
;; Author: Artem Khramov <akhramov+emacs@pm.me>
;; Created: 6 Jan 2017
;; Version: 0.4.1
;; Package-Requires: ((alert "1.2") (async "1.9.3") (dash "2.18.0") (emacs "24.4"))
;; Version: 0.5.0
;; Package-Requires: ((alert "1.2") (async "1.9.3") (dash "2.18.0") (emacs "26.1"))
;; Keywords: notification alert org org-agenda agenda
;; URL: https://github.com/akhramov/org-wild-notifier.el
@ -48,7 +49,7 @@
(require 'async)
(require 'org-agenda)
(require 'cl-lib)
(require 'org-duration)
(defgroup org-wild-notifier nil
"org-wild-notifier customization options"
@ -81,7 +82,7 @@ to an event."
:group 'org-wild-notifier
:type 'string)
(defcustom org-wild-notifier-keyword-whitelist '("TODO")
(defcustom org-wild-notifier-keyword-whitelist nil
"Receive notifications for these keywords only.
Leave this variable blank if you do not want to filter anything."
:package-version '(org-wild-notifier . "0.2.2")
@ -107,6 +108,38 @@ Leave this variable blank if you do not want to filter anything."
:group 'org-wild-notifier
:type '(repeat string))
(defcustom org-wild-notifier-display-time-format-string "%I:%M %p"
"The format string that should be passed to `format-time-string' to display a time."
:package-version '(org-wild-notifier . "0.5.0")
:group 'org-wild-notifier
:type 'string)
(defcustom org-wild-notifier-predicate-whitelist nil
"Receive notifications for events matching these predicates only.
Each function should take an event POM and return non-nil iff that event should
trigger a notification. Leave this variable blank if you do not want to filter
anything."
:package-version '(org-wild-notifier . "0.5.0")
:group 'org-wild-notifier
:type '(function))
(defcustom org-wild-notifier-additional-environment-regexes nil
"Additional regular expressions that should be provided to
`async-inject-environment' before running the async command to
check notifications."
:package-version '(org-wild-notifier . "0.5.0")
:group 'org-wild-notifier
:type '(string))
(defcustom org-wild-notifier-predicate-blacklist
'(org-wild-notifier-done-keywords-predicate)
"Never receive notifications for events matching these predicates.
Each function should take an event POM and return non-nil iff that event should
not trigger a notification."
:package-version '(org-wild-notifier . "0.5.0")
:group 'org-wild-notifier
:type '(function))
(defcustom org-wild-notifier--alert-severity 'medium
"Severity of the alert.
options: 'high 'medium 'low"
@ -115,8 +148,23 @@ options: 'high 'medium 'low"
:type 'symbol
:options '(high medium low))
(defvar org-wild-notifier--day-wide-events nil
"If truthy, notifies about day-wide events.")
(defcustom org-wild-notifier-extra-alert-plist nil
"Additional arguments that should be passed to invocations of `alert'."
:package-version "v0.5.0"
:group 'org-wild-notifier
:type 'plist)
(defcustom org-wild-notifier-day-wide-alert-times nil
"A list of time of day strings at which alerts for day wide events should trigger."
:package-version '(org-wild-notifier . "0.5.0")
:group 'org-wild-notifier
:type 'string)
(defcustom org-wild-notifier-show-any-overdue-with-day-wide-alerts t
"Show any overdue TODO items along with day wide alerts whenever they are shown."
:package-version '(org-wild-notifier . "0.5.0")
:group 'org-wild-notifier
:type 'string)
(defvar org-wild-notifier--timer nil
"Timer value.")
@ -145,16 +193,6 @@ in order to ignore seconds."
(apply 'encode-time
(append '(0 0 0) (nthcdr 3 (decode-time (current-time))))))
(defun org-wild-notifier--always-notify-p (event)
"Check that notification for the EVENT should be done regardless of time.
For now, the only case that handled is day-wide events."
(when org-wild-notifier--day-wide-events
(let ((today (org-wild-notifier--today)))
;; SPIKE: Org timestamps without "time" section are shorter than
;; 16 characters.
(--any-p (and (<= (length (car it)) 16) (equal today (cdr it)))
(cadr (assoc 'times event))))))
(defun org-wild-notifier--timestamp-within-interval-p (timestamp interval)
"Check whether TIMESTAMP is within notification INTERVAL."
(org-wild-notifier--time=
@ -163,14 +201,22 @@ For now, the only case that handled is day-wide events."
(defun org-wild-notifier--notifications (event)
"Get notifications for given EVENT.
Returns a list of notification intervals."
(if (org-wild-notifier--always-notify-p event)
'(-1)
Returns a list of time information interval pairs."
(->> (list
(org-wild-notifier--filter-day-wide-events (cadr (assoc 'times event)))
(cdr (assoc 'intervals event)))
(apply '-table-flat (lambda (ts int) (list ts int)))
;; When no values are provided for table flat, we get the second values
;; paired with nil.
(--filter (not (null (car it))))
(--filter (org-wild-notifier--timestamp-within-interval-p (cdar it) (cadr it)))))
(->> `(,(cadr (assoc 'times event)) ,(cdr (assoc 'intervals event)))
(apply '-table-flat (lambda (ts int) `(,(cdr ts) ,int)))
(--filter (apply 'org-wild-notifier--timestamp-within-interval-p it))
(-map 'cadr))))
(defun org-wild-notifier--has-timestamp (s)
(string-match org-ts-regexp0 s)
(match-beginning 7))
(defun org-wild-notifier--filter-day-wide-events (times)
(--filter (org-wild-notifier--has-timestamp (car it)) times))
(defun org-wild-notifier--time-left (seconds)
"Human-friendly representation for SECONDS."
@ -184,9 +230,9 @@ Returns a list of notification intervals."
(defun org-wild-notifier--get-hh-mm-from-org-time-string (time-string)
"Convert given org time-string TIME-STRING into string with 'hh:mm' format."
(if (>= (length time-string) 22)
(substring time-string 16 21)
"00:00"))
(format-time-string
org-wild-notifier-display-time-format-string
(encode-time (org-parse-time-string time-string))))
(defun org-wild-notifier--notification-text (str-interval event)
"For given STR-INTERVAL list and EVENT get notification wording."
@ -195,12 +241,64 @@ Returns a list of notification intervals."
(org-wild-notifier--get-hh-mm-from-org-time-string (car str-interval))
(org-wild-notifier--time-left (* 60 (cdr str-interval)))))
(defun org-wild-notifier-get-minutes-into-day (time)
(org-duration-to-minutes (org-get-time-of-day time t)))
(defun org-wild-notifier-get-hours-minutes-from-time (time-string)
(let ((total-minutes (truncate (org-wild-notifier-get-minutes-into-day time-string))))
(list (/ total-minutes 60)
(mod total-minutes 60))))
(defun org-wild-notifier-set-hours-minutes-for-time (time hours minutes)
(cl-destructuring-bind (_s _m _h day month year dow dst utcoff) (decode-time time)
(encode-time 0 minutes hours day month year dow dst utcoff)))
(defun org-wild-notifier-current-time-matches-time-of-day-string (time-of-day-string)
(let ((now (current-time)))
(org-wild-notifier--time=
now
(apply 'org-wild-notifier-set-hours-minutes-for-time
now
(org-wild-notifier-get-hours-minutes-from-time time-of-day-string)))))
(defun org-wild-notifier-current-time-is-day-wide-time ()
(--any (org-wild-notifier-current-time-matches-time-of-day-string it)
org-wild-notifier-day-wide-alert-times))
(defun org-wild-notifier-day-wide-notifications (events)
(->> events
(-filter 'org-wild-notifier-display-as-day-wide-event)
(-map 'org-wild-notifier--day-wide-notification-text)
(-uniq)))
(defun org-wild-notifier-display-as-day-wide-event (event)
;; `org-wild-notifier-event-has-any-passed-time' event is a requirement,
;; regardless of whether
;; `org-wild-notifier-show-any-overdue-with-day-wide-alerts' is set because
;; the events list can include events scheduled tomorrow. We only want to
;; alert for things scheduled today.
(and (org-wild-notifier-event-has-any-passed-time event)
(or org-wild-notifier-show-any-overdue-with-day-wide-alerts
(org-wild-notifier-event-has-any-day-wide-timestamp event))))
(defun org-wild-notifier-event-has-any-day-wide-timestamp (event)
(--any (not (org-wild-notifier--has-timestamp (car it)))
(car (cdr (assoc 'times event)))))
(defun org-wild-notifier-event-has-any-passed-time (event)
(--any (time-less-p (cdr it) (current-time))
(car (cdr (assoc 'times event )))))
(defun org-wild-notifier--day-wide-notification-text (event)
"For given STR-INTERVAL list and EVENT get notification wording."
(format "%s is due or scheduled today"
(cdr (assoc 'title event))))
(defun org-wild-notifier--check-event (event)
"Get notifications for given EVENT.
Returns a list of notification messages"
(->> (org-wild-notifier--notifications event)
(--zip-with (cons (car it) other) (cadr (assoc 'times event)))
(--map (org-wild-notifier--notification-text it event))))
(--map (org-wild-notifier--notification-text `(,(caar it) . ,(cadr it)) event))))
(defun org-wild-notifier--get-tags (marker)
"Retrieve tags of MARKER."
@ -217,7 +315,11 @@ Returns a list of notification messages"
[,org-wild-notifier-tags-whitelist
(lambda (it)
(-intersection org-wild-notifier-tags-whitelist
(org-wild-notifier--get-tags it)))])
(org-wild-notifier--get-tags it)))]
[,org-wild-notifier-predicate-whitelist
(lambda (marker)
(--some? (funcall it marker) org-wild-notifier-predicate-whitelist))])
(--filter (aref it 0))
(--map (aref it 1))))
@ -230,10 +332,20 @@ Returns a list of notification messages"
[,org-wild-notifier-tags-blacklist
(lambda (it)
(-intersection org-wild-notifier-tags-blacklist
(org-wild-notifier--get-tags it)))])
(org-wild-notifier--get-tags it)))]
[,org-wild-notifier-predicate-blacklist
(lambda (marker)
(--some? (funcall it marker) org-wild-notifier-predicate-blacklist))])
(--filter (aref it 0))
(--map (aref it 1))))
(defun org-wild-notifier-done-keywords-predicate (marker)
(save-excursion
(set-buffer (marker-buffer marker))
(goto-char (marker-position marker))
(member (nth 2 (org-heading-components)) org-done-keywords)))
(defun org-wild-notifier--apply-whitelist (markers)
"Apply whitelist to MARKERS."
(-if-let (whitelist-predicates (org-wild-notifier--whitelist-predicates))
@ -248,51 +360,62 @@ Returns a list of notification messages"
(-remove markers))
markers))
(defconst org-wild-notifier-default-environment-regex
(macroexpand
`(rx string-start
(or ,@(mapcar (lambda (literal) (list 'literal literal))
(list
"org-agenda-files"
"load-path"
"org-todo-keywords"
"org-wild-notifier-alert-time"
"org-wild-notifier-keyword-whitelist"
"org-wild-notifier-keyword-blacklist"
"org-wild-notifier-tags-whitelist"
"org-wild-notifier-tags-blacklist"
"org-wild-notifier-predicate-whitelist"
"org-wild-notifier-predicate-blacklist")))
string-end)))
(defun org-wild-notifier-environment-regex ()
(macroexpand
`(rx (or
,@(mapcar (lambda (regexp) (list 'regexp regexp))
(cons org-wild-notifier-default-environment-regex
org-wild-notifier-additional-environment-regexes))))))
(defun org-wild-notifier--retrieve-events ()
"Get events from agenda view."
(let ((agenda-files (-filter 'file-exists-p (org-agenda-files)))
;; Some package managers manipulate `load-path` variable.
(my-load-path load-path)
(todo-keywords org-todo-keywords)
(alert-time org-wild-notifier-alert-time)
(keyword-whitelist org-wild-notifier-keyword-whitelist)
(keyword-blacklist org-wild-notifier-keyword-blacklist)
(tags-whitelist org-wild-notifier-tags-whitelist)
(tags-blacklist org-wild-notifier-tags-blacklist))
(lambda ()
(setf org-agenda-use-time-grid nil)
(setf org-agenda-compact-blocks t)
(setf org-agenda-files agenda-files)
(setf load-path my-load-path)
(setf org-todo-keywords todo-keywords)
(setf org-wild-notifier-alert-time alert-time)
(setf org-wild-notifier-keyword-whitelist keyword-whitelist)
(setf org-wild-notifier-keyword-blacklist keyword-blacklist)
(setf org-wild-notifier-tags-whitelist tags-whitelist)
(setf org-wild-notifier-tags-blacklist tags-blacklist)
`(lambda ()
(setf org-agenda-use-time-grid nil)
(setf org-agenda-compact-blocks t)
,(async-inject-variables (org-wild-notifier-environment-regex))
(package-initialize)
(require 'org-wild-notifier)
(package-initialize)
(require 'org-wild-notifier)
(org-agenda-list 2
(org-read-date nil nil "today"))
(org-agenda-list 2 (org-read-date nil nil "today"))
(->> (org-split-string (buffer-string) "\n")
(--map (plist-get
(org-fix-agenda-info (text-properties-at 0 it))
'org-marker))
(-non-nil)
(org-wild-notifier--apply-whitelist)
(org-wild-notifier--apply-blacklist)
(-map 'org-wild-notifier--gather-info)))))
(->> (org-split-string (buffer-string) "\n")
(--map (plist-get
(org-fix-agenda-info (text-properties-at 0 it))
'org-marker))
(-non-nil)
(org-wild-notifier--apply-whitelist)
(org-wild-notifier--apply-blacklist)
(-map 'org-wild-notifier--gather-info))))
(defun org-wild-notifier--notify (event-msg)
"Notify about an event using `alert' library.
EVENT-MSG is a string representation of the event."
(alert event-msg
:icon org-wild-notifier-notification-icon
:title org-wild-notifier-notification-title
:severity org-wild-notifier--alert-severity))
(apply
'alert event-msg
:icon org-wild-notifier-notification-icon
:title org-wild-notifier-notification-title
:severity org-wild-notifier--alert-severity
:category 'org-wild-notifier
org-wild-notifier-extra-alert-plist))
(defun org-wild-notifier--timestamp-parse (timestamp)
(let ((parsed (org-parse-time-string timestamp))
@ -307,8 +430,7 @@ EVENT-MSG is a string representation of the event."
;; so we have to add the minutes too
(+ (* (decoded-time-hour parsed) 3600)
(* (decoded-time-minute parsed) 60))))
2)
))
2)))
(defun org-wild-notifier--extract-time (marker)
"Extract timestamps from MARKER.
@ -359,36 +481,38 @@ MARKER acts like event's identifier."
Timer is scheduled on the beginning of every minute, so for
smoother experience this function also runs a check without timer."
(org-wild-notifier--stop)
(let ((org-wild-notifier--day-wide-events t))
(org-wild-notifier-check))
(org-wild-notifier-check)
(--> (format-time-string "%H:%M" (time-add (current-time) 60))
(run-at-time it 60 'org-wild-notifier-check)
(setf org-wild-notifier--timer it)))
(defun org-wild-notifier--check-events (events)
(setq org-wild-notifier--process nil)
(-each
(->> events
(-map 'org-wild-notifier--check-event)
(-flatten)
(-uniq))
'org-wild-notifier--notify)
(when (org-wild-notifier-current-time-is-day-wide-time)
(-map 'org-wild-notifier--notify
(org-wild-notifier-day-wide-notifications events)))
(setq org-wild-notifier--last-check-time (current-time)))
;;;###autoload
(defun org-wild-notifier-check ()
"Parse agenda view and notify about upcoming events.
Do nothing if a check is already in progress in the background."
(interactive)
(unless (and org-wild-notifier--process
(process-live-p org-wild-notifier--process))
(setq org-wild-notifier--process
(let ((default-directory user-emacs-directory))
(async-start
(org-wild-notifier--retrieve-events)
(lambda (events)
(setq org-wild-notifier--process nil)
(-each
(->> events
(-map 'org-wild-notifier--check-event)
(-flatten)
(-uniq))
'org-wild-notifier--notify)
(setq org-wild-notifier--last-check-time (current-time))))))))
'org-wild-notifier--check-events)))))
;;;###autoload
(define-minor-mode org-wild-notifier-mode

View File

@ -0,0 +1,66 @@
;; -*- no-byte-compile: t; -*-
;;; $DOOMDIR/packages.el
;; To install a package with Doom you must declare them here and run 'doom sync'
;; on the command line, then restart Emacs for the changes to take effect -- or
;; use 'M-x doom/reload'.
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
;; (package! some-package)
;; To install a package directly from a remote git repo, you must specify a
;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
;; https://github.com/radian-software/straight.el#the-recipe-format
;; (package! another-package
;; :recipe (:host github :repo "username/repo"))
;; If the package you are trying to install does not contain a PACKAGENAME.el
;; file, or is located in a subdirectory of the repo, you'll need to specify
;; `:files' in the `:recipe':
;; (package! this-package
;; :recipe (:host github :repo "username/repo"
;; :files ("some-file.el" "src/lisp/*.el")))
;; If you'd like to disable a package included with Doom, you can do so here
;; with the `:disable' property:
;; (package! builtin-package :disable t)
;; You can override the recipe of a built in package without having to specify
;; all the properties for `:recipe'. These will inherit the rest of its recipe
;; from Doom or MELPA/ELPA/Emacsmirror:
;; (package! builtin-package :recipe (:nonrecursive t))
;; (package! builtin-package-2 :recipe (:repo "myfork/package"))
;; Specify a `:branch' to install a package from a particular branch or tag.
;; This is required for some packages whose default branch isn't 'master' (which
;; our package manager can't deal with; see radian-software/straight.el#279)
;; (package! builtin-package :recipe (:branch "develop"))
;; Use `:pin' to specify a particular commit to install.
;; (package! builtin-package :pin "1a2b3c4d5e")
;; Doom's packages are pinned to a specific commit and updated from release to
;; release. The `unpin!' macro allows you to unpin single packages...
;; (unpin! pinned-package)
;; ...or multiple packages
;; (unpin! pinned-package another-pinned-package)
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
;; (unpin! t)
(package! org-books)
;(package! nov)
;(package! org-modern) ;; try
(package! org-wild-notifier
:recipe (:local-repo "lisp/org-wild-notifier"))
;(package! focus) ;; try
;(package! dimmer) ;; try
;(package! minions) ;; try
;(package! mini-frame) ;; try
(package! solaire-mode :disable t)
;(package! simple-httpd)
;(package! htmlize)
;(package! esxml)
;(package! webfeeder)
(package! org-super-agenda)

View File

@ -0,0 +1,125 @@
;;; doom-tomorrow-night-b-theme.el --- One of the dark variants of Tomorrow -*- lexical-binding: t; no-byte-compile: t; -*-
;;
;; Added: May 14, 2017 (4c981f2cccf3)
;; Author: Henrik Lissner <https://github.com/hlissner>
;; Maintainer:
;; Source: https://github.com/ChrisKempson/Tomorrow-Theme
;;
;;; Commentary:
;;; Code:
(require 'doom-themes)
;;
;;; Variables
(defgroup doom-tomorrow-night-b-theme nil
"Options for the `doom-tomorrow-night-b' theme."
:group 'doom-themes)
(defcustom doom-tomorrow-night-b-padded-modeline doom-themes-padded-modeline
"If non-nil, adds a 4px padding to the mode-line. Can be an integer to
determine the exact padding."
:group 'doom-tomorrow-night-b-theme
:type '(choice integer boolean))
;;
;;; Theme definition
(def-doom-theme doom-tomorrow-night-b
"A theme based off of Chris Kempson's Tomorrow Dark."
;; name gui 256 16
;((bg '("#1d1f21" nil nil ))
((bg '("#000000" nil nil ))
;(bg-alt '("#161719" nil nil ))
(bg-alt '("#000000" nil nil ))
(base0 '("#0d0d0d" "black" "black" ))
(base1 '("#1b1b1b" "#1b1b1b" ))
(base2 '("#212122" "#1e1e1e" ))
(base3 '("#292b2b" "#292929" "brightblack"))
(base4 '("#3f4040" "#3f3f3f" "brightblack"))
(base5 '("#5c5e5e" "#525252" "brightblack"))
(base6 '("#757878" "#6b6b6b" "brightblack"))
(base7 '("#969896" "#979797" "brightblack"))
(base8 '("#ffffff" "#ffffff" "white" ))
(fg '("#c5c8c6" "#c5c5c5" "white"))
(fg-alt (doom-darken fg 0.4))
(grey '("#5a5b5a" "#5a5a5a" "brightblack"))
(red '("#cc6666" "#cc6666" "red"))
(orange '("#de935f" "#dd9955" "brightred"))
(yellow '("#f0c674" "#f0c674" "yellow"))
(green '("#b5bd68" "#b5bd68" "green"))
(blue '("#81a2be" "#88aabb" "brightblue"))
(dark-blue '("#41728e" "#41728e" "blue"))
(teal blue) ; FIXME replace with real teal
(magenta '("#c9b4cf" "#c9b4cf" "magenta"))
(violet '("#b294bb" "#b294bb" "brightmagenta"))
(cyan '("#8abeb7" "#8abeb7" "cyan"))
(dark-cyan (doom-darken cyan 0.4))
;; face categories
(highlight blue)
(vertical-bar base0)
(selection `(,(car (doom-lighten bg 0.1)) ,@(cdr base4)))
(builtin blue)
(comments grey)
(doc-comments (doom-lighten grey 0.14))
(constants orange)
(functions blue)
(keywords violet)
(methods blue)
(operators fg)
(type yellow)
(strings green)
(variables red)
(numbers orange)
(region selection)
(error red)
(warning yellow)
(success green)
(vc-modified fg-alt)
(vc-added green)
(vc-deleted red)
;; custom categories
(modeline-bg `(,(doom-darken (car bg-alt) 0.3) ,@(cdr base3)))
(modeline-bg-alt `(,(car bg) ,@(cdr base1)))
(modeline-fg base8)
(modeline-fg-alt comments)
(-modeline-pad
(when doom-tomorrow-night-b-padded-modeline
(if (integerp doom-tomorrow-night-b-padded-modeline)
doom-tomorrow-night-b-padded-modeline
4))))
;; --- faces ------------------------------
(((line-number &override) :foreground base4)
((line-number-current-line &override) :foreground blue :bold bold)
(mode-line
:background modeline-bg :foreground modeline-fg
:box (if -modeline-pad `(:line-width ,-modeline-pad :color ,modeline-bg)))
(mode-line-inactive
:background modeline-bg-alt :foreground modeline-fg-alt
:box (if -modeline-pad `(:line-width ,-modeline-pad :color ,modeline-bg-alt)))
;;;; rainbow-delimiters
(rainbow-delimiters-depth-1-face :foreground violet)
(rainbow-delimiters-depth-2-face :foreground blue)
(rainbow-delimiters-depth-3-face :foreground orange)
(rainbow-delimiters-depth-4-face :foreground green)
(rainbow-delimiters-depth-5-face :foreground magenta)
(rainbow-delimiters-depth-6-face :foreground yellow)
(rainbow-delimiters-depth-7-face :foreground teal)
;;;; doom-modeline
(doom-modeline-buffer-path :foreground violet :bold bold)
(doom-modeline-buffer-major-mode :inherit 'doom-modeline-buffer-path))
;; --- variables --------------------------
;; ()
)
;;; doom-tomorrow-night-b-theme.el ends here

View File

@ -0,0 +1,125 @@
;;; doom-tomorrow-night-r-theme.el --- One of the dark variants of Tomorrow -*- lexical-binding: t; no-byte-compile: t; -*-
;;
;; Added: May 14, 2017 (4c981f2cccf3)
;; Author: Henrik Lissner <https://github.com/hlissner>
;; Maintainer:
;; Source: https://github.com/ChrisKempson/Tomorrow-Theme
;;
;;; Commentary:
;;; Code:
(require 'doom-themes)
;;
;;; Variables
(defgroup doom-tomorrow-night-r-theme nil
"Options for the `doom-tomorrow-night-r' theme."
:group 'doom-themes)
(defcustom doom-tomorrow-night-r-padded-modeline doom-themes-padded-modeline
"If non-nil, adds a 4px padding to the mode-line. Can be an integer to
determine the exact padding."
:group 'doom-tomorrow-night-r-theme
:type '(choice integer boolean))
;;
;;; Theme definition
(def-doom-theme doom-tomorrow-night-r
"A theme based off of Chris Kempson's Tomorrow Dark."
;; name gui 256 16
;((bg '("#1d1f21" nil nil ))
((bg '("#161616" nil nil ))
;(bg-alt '("#161719" nil nil ))
(bg-alt '("#161616" nil nil ))
(base0 '("#0d0d0d" "black" "black" ))
(base1 '("#1b1b1b" "#1b1b1b" ))
(base2 '("#212122" "#1e1e1e" ))
(base3 '("#292b2b" "#292929" "brightblack"))
(base4 '("#3f4040" "#3f3f3f" "brightblack"))
(base5 '("#5c5e5e" "#525252" "brightblack"))
(base6 '("#757878" "#6b6b6b" "brightblack"))
(base7 '("#969896" "#979797" "brightblack"))
(base8 '("#ffffff" "#ffffff" "white" ))
(fg '("#c5c8c6" "#c5c5c5" "white"))
(fg-alt (doom-darken fg 0.4))
(grey '("#5a5b5a" "#5a5a5a" "brightblack"))
(red '("#cc6666" "#cc6666" "red"))
(orange '("#de935f" "#dd9955" "brightred"))
(yellow '("#f0c674" "#f0c674" "yellow"))
(green '("#b5bd68" "#b5bd68" "green"))
(blue '("#81a2be" "#88aabb" "brightblue"))
(dark-blue '("#41728e" "#41728e" "blue"))
(teal blue) ; FIXME replace with real teal
(magenta '("#c9b4cf" "#c9b4cf" "magenta"))
(violet '("#b294bb" "#b294bb" "brightmagenta"))
(cyan '("#8abeb7" "#8abeb7" "cyan"))
(dark-cyan (doom-darken cyan 0.4))
;; face categories
(highlight blue)
(vertical-bar base0)
(selection `(,(car (doom-lighten bg 0.1)) ,@(cdr base4)))
(builtin blue)
(comments grey)
(doc-comments (doom-lighten grey 0.14))
(constants orange)
(functions blue)
(keywords violet)
(methods blue)
(operators fg)
(type yellow)
(strings green)
(variables red)
(numbers orange)
(region selection)
(error red)
(warning yellow)
(success green)
(vc-modified fg-alt)
(vc-added green)
(vc-deleted red)
;; custom categories
(modeline-bg `(,(doom-darken (car bg-alt) 0.3) ,@(cdr base3)))
(modeline-bg-alt `(,(car bg) ,@(cdr base1)))
(modeline-fg base8)
(modeline-fg-alt comments)
(-modeline-pad
(when doom-tomorrow-night-r-padded-modeline
(if (integerp doom-tomorrow-night-r-padded-modeline)
doom-tomorrow-night-r-padded-modeline
4))))
;; --- faces ------------------------------
(((line-number &override) :foreground base4)
((line-number-current-line &override) :foreground blue :bold bold)
(mode-line
:background modeline-bg :foreground modeline-fg
:box (if -modeline-pad `(:line-width ,-modeline-pad :color ,modeline-bg)))
(mode-line-inactive
:background modeline-bg-alt :foreground modeline-fg-alt
:box (if -modeline-pad `(:line-width ,-modeline-pad :color ,modeline-bg-alt)))
;;;; rainbow-delimiters
(rainbow-delimiters-depth-1-face :foreground violet)
(rainbow-delimiters-depth-2-face :foreground blue)
(rainbow-delimiters-depth-3-face :foreground orange)
(rainbow-delimiters-depth-4-face :foreground green)
(rainbow-delimiters-depth-5-face :foreground magenta)
(rainbow-delimiters-depth-6-face :foreground yellow)
(rainbow-delimiters-depth-7-face :foreground teal)
;;;; doom-modeline
(doom-modeline-buffer-path :foreground violet :bold bold)
(doom-modeline-buffer-major-mode :inherit 'doom-modeline-buffer-path))
;; --- variables --------------------------
;; ()
)
;;; doom-tomorrow-night-r-theme.el ends here

4
home/default/.local/bin/boom Executable file
View File

@ -0,0 +1,4 @@
#!/bin/sh
notify-send 'boom' 'boom.mp3'
mpg123 $HOME/resources/sounds/alerts/boom.mp3

View File

@ -0,0 +1,11 @@
#!/bin/sh
wl-paste -t image > /tmp/convert-paste-png.data
#convert /tmp/convert-paste-png.data -format png "$1"
case "$(file --dereference --brief --mime-type -- "/tmp/convert-paste-png.data")" in
image/jpg|image/jpeg) convert /tmp/convert-paste-png.data -format png "$1" ;;
image/png) wl-paste -t image/png > "$1" ;;
esac
rm /tmp/convert-paste-png.data

51
home/default/.local/bin/dark.sh Executable file
View File

@ -0,0 +1,51 @@
#!/bin/sh
[ -z "$1" ] && printf "Usage: screenshot.sh [output|active|window] \n" && exit 0
dark() {
cp -f ~/.config/swaync/style.mocha.css ~/.config/swaync/style.css
setsid -f killall swaync >/dev/null 2>&1
sleep 2 && setsid -f swaync >/dev/null 2>&1
echo 'swaync set'
# TODO
cat ~/.config/foot/foot.ini >> ~/.config/foot/foot.ini
echo 'foot terminal set, reopen to change'
# TODO emacs
# TODO gtk
# TODO gtk flatpak
sudo flatpak override --env GTK_THEME=Materia-dark
# TODO browser
}
light() {
cp -f ~/.config/swaync/style.latte.css ~/.config/swaync/style.css
setsid -f killall swaync >/dev/null 2>&1
sleep 2 && setsid -f swaync >/dev/null 2>&1
echo 'swaync set'
# TODO
cat ~/.config/foot/foot.ini >> ~/.config/foot/foot.ini
echo 'foot terminal set, reopen to change'
# TODO emacs
# TODO gtk
# TODO gtk flatpak
sudo flatpak override --env GTK_THEME=Materia
# TODO browser
}
if [[ -n "$1" ]]; then
case "$1" in
dark) dark
*)
echo $@ is not an argument
break
;;
esac
fi

View File

@ -1,2 +0,0 @@
#!/bin/sh
setsid -f emacsclient --alternate-editor='emacs' $@ >/dev/null 2>&1

View File

@ -1,2 +0,0 @@
#!/bin/sh
emacsclient -nw -c --alternate-editor='emacs -nw' $@

View File

@ -1,10 +1,20 @@
#!/bin/zsh
if [[ -z "$1" ]]; then
if [[ -z "$1" ]] && [[ "$WINDOW_MANAGER" == "river" ]] ; then
swayidle -w \
timeout 310 'swaylock' \
timeout 300 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on"' \
before-sleep "swaylock"
timeout 300 'wlopm --off "*"' resume 'wlopm --on "*"' \
before-sleep "swaylock"
fi
if [[ -z "$1" ]] && [[ "$WINDOW_MANAGER" == "sway" ]] ; then
swayidle -w \
timeout 310 'swaylock' \
timeout 300 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on"' \
before-sleep "swaylock"
fi
#timeout 300 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on"' \
if [[ $1 == "-k" ]]; then
killall swayidle
exit 0

View File

@ -15,10 +15,10 @@ fi
case "$url" in
*mkv|*webm|*mp4|*hooktube.com*|*bitchute.com*|*videos.lukesmith.xyz*|*odysee.com*)
setsid -f mpv -quiet "$url" >/dev/null 2>&1 ;;
*youtube.com/watch*|*youtube.com/playlist*|*youtube.com/shorts*|*youtu.be*)
*youtube.com/watch*|*youtube.com/playlist*|*youtube.com/shorts*|*youtu.be*|*youtube-nocookie.com/embed*)
setsid -f flatpak run io.freetubeapp.FreeTube "$url" >/dev/null 2>&1 ;;
*png|*jpg|*jpe|*jpeg|*gif)
curl -sL "$url" > "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" && sxiv -a "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" >/dev/null 2>&1 & ;;
*png|*jpg|*jpe|*jpeg|*gif|*webp|*PNG|*JPG|*JPE|*JPEG|*GIF|*WEBP)
curl -sL "$url" > "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" && nsxiv -a "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" >/dev/null 2>&1 & ;;
*pdf|*cbz|*cbr)
curl -sL "$url" > "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" && zathura "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" >/dev/null 2>&1 & ;;
*epub)

View File

@ -6,7 +6,9 @@ directory="$HOME/Music"
case "$file" in
*youtube.com*|*youtu.be*|*bandcamp.com*|*soundcloud.com*)
notify-send "Downloading" "$file"
cd $directory && yt-dlp --embed-metadata --embed-thumbnail -xc -f bestaudio/best --restrict-filenames "$file" && notify-send "Music added!" "$file is now saved to the music directory."
cd $directory && yt-dlp --embed-metadata --embed-thumbnail -xc -f 'bestaudio[ext=m4a]' "$file" && notify-send "Music added!" "$file is now saved to the music directory."
# --restrict-filenames
# -f bestaudio/best
;;
*mp3|*flac|*opus|*mp3?source*)
notify-send "⏳ Queuing $file..."

4
home/default/.local/bin/pind Executable file
View File

@ -0,0 +1,4 @@
#!/bin/sh
[ -z "$1" ] && echo 'usage: pind <url>' && exit 1
read url < <(curl -Ls "$1" | pup 'img attr{src}')
curl -LO --no-clobber $url && echo "$url downloaded"

View File

@ -0,0 +1,6 @@
#!/bin/sh
# record video
dir=~/Videos/recordings
(cd $dir && wf-recorder -g "$(slurp)" --audio --file=$(date +%Y-%m-%d_%H-%m-%s).mp4)
xdg-open $dir

View File

@ -0,0 +1,6 @@
#!/bin/sh
# record video
dir=~/Videos/recordings
(cd $dir && wf-recorder -g "$(slurp)" --file="$(date +%Y-%m-%d_%H-%m-%s).mp4")
xdg-open $dir

View File

@ -27,6 +27,7 @@ fi
if [[ -N $file ]]; then
echo "screenshot saved."
notify-send "screenshot saved." -i $file
update-recentf.py $file
exit 0
else
echo "screenshot failed."

View File

@ -1,43 +0,0 @@
#!/bin/sh
bmdirs="${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs"
bmfiles="${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-files"
# Output locations. Unactivated progs should go to /dev/null.
shell_shortcuts="${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc"
zsh_named_dirs="${XDG_CONFIG_HOME:-$HOME/.config}/shell/zshnameddirrc"
lf_shortcuts="${XDG_CONFIG_HOME:-$HOME/.config}/lf/shortcutrc"
vim_shortcuts="${XDG_CONFIG_HOME:-$HOME/.config}/nvim/shortcuts.vim"
ranger_shortcuts="/dev/null"
qute_shortcuts="/dev/null"
fish_shortcuts="/dev/null"
vifm_shortcuts="/dev/null"
# Remove, prepare files
rm -f "$lf_shortcuts" "$ranger_shortcuts" "$qute_shortcuts" "$zsh_named_dirs" "$vim_shortcuts" 2>/dev/null
printf "# vim: filetype=sh\\n" > "$fish_shortcuts"
printf "# vim: filetype=sh\\nalias " > "$shell_shortcuts"
printf "\" vim: filetype=vim\\n" > "$vifm_shortcuts"
# Format the `directories` file in the correct syntax and sent it to all three configs.
eval "echo \"$(cat "$bmdirs")\"" | \
awk "!/^\s*#/ && !/^\s*\$/ {gsub(\"\\\s*#.*$\",\"\");
printf(\"%s=\42cd %s && ls -a\42 \\\\\n\",\$1,\$2) >> \"$shell_shortcuts\" ;
printf(\"hash -d %s=%s \n\",\$1,\$2) >> \"$zsh_named_dirs\" ;
printf(\"abbr %s \42cd %s; and ls -a\42\n\",\$1,\$2) >> \"$fish_shortcuts\" ;
printf(\"map g%s :cd %s<CR>\nmap t%s <tab>:cd %s<CR><tab>\nmap M%s <tab>:cd %s<CR><tab>:mo<CR>\nmap Y%s <tab>:cd %s<CR><tab>:co<CR> \n\",\$1,\$2, \$1, \$2, \$1, \$2, \$1, \$2) >> \"$vifm_shortcuts\" ;
printf(\"config.bind(';%s', \42set downloads.location.directory %s ;; hint links download\42) \n\",\$1,\$2) >> \"$qute_shortcuts\" ;
printf(\"map g%s cd %s\nmap t%s tab_new %s\nmap m%s shell mv -v %%s %s\nmap Y%s shell cp -rv %%s %s \n\",\$1,\$2,\$1,\$2, \$1, \$2, \$1, \$2) >> \"$ranger_shortcuts\" ;
printf(\"map C%s cd \42%s\42 \n\",\$1,\$2) >> \"$lf_shortcuts\" ;
printf(\"cmap ;%s %s\n\",\$1,\$2) >> \"$vim_shortcuts\" }"
# Format the `files` file in the correct syntax and sent it to both configs.
eval "echo \"$(cat "$bmfiles")\"" | \
awk "!/^\s*#/ && !/^\s*\$/ {gsub(\"\\\s*#.*$\",\"\");
printf(\"%s=\42\$EDITOR %s\42 \\\\\n\",\$1,\$2) >> \"$shell_shortcuts\" ;
printf(\"hash -d %s=%s \n\",\$1,\$2) >> \"$zsh_named_dirs\" ;
printf(\"abbr %s \42\$EDITOR %s\42 \n\",\$1,\$2) >> \"$fish_shortcuts\" ;
printf(\"map %s :e %s<CR> \n\",\$1,\$2) >> \"$vifm_shortcuts\" ;
printf(\"map %s shell \$EDITOR %s \n\",\$1,\$2) >> \"$ranger_shortcuts\" ;
printf(\"map E%s \$\$EDITOR \42%s\42 \n\",\$1,\$2) >> \"$lf_shortcuts\" ;
printf(\"cmap ;%s %s\n\",\$1,\$2) >> \"$vim_shortcuts\" }"

View File

@ -0,0 +1,293 @@
#!/usr/bin/env bash
# https://gitlab.com/wef/dotfiles/-/blob/master/bin/sway-select-window
# shellcheck disable=SC2034
TIME_STAMP="20230129.084152"
# Copyright (C) 2019-2023 Bob Hepple <bob dot hepple at gmail dot com>
# 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 (at
# your option) 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/>.
# CUSTOMISE HERE IF YOU'RE NOT GETTING ALL YOUR ICONS:
# This array contains my most commonly used apps on f34, cached here
# for speed. If they don't work for you, you can either just remove
# these entries and rely on on-the-fly lookup of icons (which may be
# slow). Or, for speedier operation, you can:
# 1. get all your common apps running
# 2. remove the entries in the array
# 3. run the script from the CLI
# 4. copy-paste the list of "[app]=icon" lines into the array
# Also, if all else fails, you can hardcode your app here:
declare -A icons=(
[floating-kitty]=/usr/share/icons/hicolor/256x256/apps/kitty.png
[kitty]=/usr/share/icons/hicolor/256x256/apps/kitty.png
[foot]=/usr/share/icons/hicolor/48x48/apps/foot.png
[emacs]=/usr/share/icons/breeze/apps/48/emacs.svg
[firefox]=/usr/share/icons/hicolor/48x48/apps/firefox.png
[mythfrontend]=/usr/share/pixmaps/mythfrontend.png
[kitty]=/usr/share/icons/hicolor/256x256/apps/kitty.png
[Gdcalc]=/usr/share/pixmaps/HP-16C-48.xpm
[pavucontrol]=/usr/share/icons/gnome/48x48/apps/multimedia-volume-control.png
[pulseeffects]=/usr/share/icons/hicolor/scalable/apps/pulseeffects.svg
[blueman-manager]=/usr/share/icons/hicolor/scalable/apps/blueman.svg
[gnome-system-monitor]=/usr/share/icons/hicolor/scalable/apps/org.gnome.SystemMonitor.svg
[gnome-disks]=/usr/share/icons/hicolor/scalable/apps/org.gnome.DiskUtility.svg
[org.gnome.Weather]=/usr/share/icons/hicolor/scalable/apps/org.gnome.Weather.svg
[xfce4-appfinder]=/usr/share/icons/hicolor/scalable/apps/org.xfce.appfinder.svg
[LibreWolf]=/var/lib/flatpak/exports/share/icons/hicolor/128x128/apps/io.gitlab.librewolf-community.png
[firefox]=/var/lib/flatpak/exports/share/icons/hicolor/128x128/apps/org.mozilla.firefox.png
)
KEYBOARD_DEVICE="/dev/input/event4"
verbose=""
PROG=$( basename "$0" )
case "$1" in
-h|--help)
echo "Usage: $PROG"
echo
echo "show running programs and select one to display (uses wofi)."
echo "If evtest(1) is installed and sudo is available then you can press"
echo "Shift-Enter to move the window here rather than move to"
echo "the windows workspace. You may need to change KEYBOARD_DEVICE above."
exit 0
;;
-v|--verbose)
verbose="set"
shift
;;
esac
jq_get_windows='
# descend to workspace or scratchpad
.nodes[].nodes[]
# save workspace name as .w
| {"w": .name} + (
if (.nodes|length) > 0 then # workspace
[recurse(.nodes[])]
else # scratchpad
[]
end
+ .floating_nodes
| .[]
# select nodes with no children (windows)
| select(.nodes==[])
)'
jq_windows_to_tsv='
[
(.id | tostring),
# remove markup and index from workspace name, replace scratch with "[S]"
(.w | gsub("<[^>]*>|:$"; "") | sub("__i3_scratch"; "[S]")),
# get app name (or window class if xwayland)
(.app_id // .window_properties.class),
(.name),
(.pid)
]
| @tsv'
get_fs_win_in_ws() {
id="${1:?}"
swaymsg -t get_tree |
jq -e -r --argjson id "$id" "
[ $jq_get_windows ]
| (.[]|select(.id == \$id)) as \$selected_workspace
| .[]
| select( .w == \$selected_workspace.w and .fullscreen_mode == 1 )
| $jq_windows_to_tsv
"
}
get_hardcoded_icon() {
icon="${icons[$1]}"
echo "$icon"
}
get_desktop() {
app="$1"
p="/usr/share/applications"
# fast and easy cases first:
for prefix in "" org.kde. org.gnome. org.freedesktop.; do
d="$p/$prefix$app.desktop"
[[ -r "$d" ]] && echo "$d" && return
done
# maybe lowercase
for prefix in "" org.kde. org.gnome. org.freedesktop.; do
d="$p/$prefix${app,,}.desktop"
[[ -r "$d" ]] && echo "$d" && return
done
# this is fairly reliable but slow:
# look for a .desktop file with Exec=$app eg
# gnome-disks (but exclude gnome-disk-image-writer.desktop)
# gnome-font-viewer
GREP='egrep -r'
type rg &>/dev/null && GREP=rg
d=$( $GREP -il "^exec=$app( %u)*[[:space:]]*$" $p | head -n 1)
[[ -r "$d" ]] && echo "$d" && return
# desperation - weird apps like com.github.wwmm.pulseeffects.desktop!!
# shellcheck disable=SC2012
d=$( ls "$p/"*".$app.desktop" 2>/dev/null | head -n 1 )
[[ -r "$d" ]] && echo "$d" && return
}
get_icon() {
icon_locations=(
icons/hicolor/scalable/apps
icons/hicolor/48x48/apps
icons/hicolor/128x128/apps
icons/hicolor/256x256/apps
icons/gnome/48x48/apps
icons/gnome/48x48/devices
pixmaps
)
app="$1"
icon=$( get_hardcoded_icon "$app_name" )
[[ "$icon" && -r "$icon" ]] && echo "$icon" && return
# let's go poke in the .desktop files:
icon_name=""
dt=$( get_desktop "$app" )
# sometimes we get the 'class' rather than the exe - so try this:
[[ "$dt" ]] || {
app=$( tr '\0' '\n' < "/proc/$pid/cmdline" | head -n 1 )
dt=$( get_desktop "$( basename "$app" )" )
}
[[ "$dt" ]] && {
icon_name=$( awk -v IGNORECASE="set" -F"=" '/^icon/ {print $2}' "$dt" )
[[ "$icon_name" ]] && {
for d in "${icon_locations[@]}"; do
for s in .svg .png ""; do
icon=/usr/share/$d/$icon_name$s
[[ -r $icon ]] && echo "$icon" && return
done
done
}
}
# desperation street:
icon=$( find /usr/share/icons /usr/share/pixmaps | grep -E -i "/$app.(png|svg)" | head -n 1 )
[[ "$icon" && -r "$icon" ]] && echo "$icon" && return
# failed:
#echo "/usr/share/icons/Adwaita/32x32/status/image-missing-symbolic.symbolic.png"
echo "$HOME/.local/share/icons/img-missing-sym.png"
}
focus_window() {
id="${1}"
ws_name="${2}"
app_name="${3}"
win_title="${4}"
[[ "$verbose" ]] && printf "focusing window (in workspace %s): [%s] (%s) \`%s\`\n" "$ws_name" "$id" "$app_name" "$win_title" >&2
# look for fullscreen among other windows in selected window's workspace
if fs_win_tsv="$( get_fs_win_in_ws "$id" )" ; then
read -r win_id ws_name app_name win_title <<<"$fs_win_tsv"
if [ "$win_id" != "$id" ] ; then
[[ "$verbose" ]] && printf 'found fullscreen window in target workspace (%s): [%s] (%s) "%s"\n' "$ws_name" "$win_id" "$app_name" "$win_title" >&2
swaymsg "[con_id=$win_id] fullscreen disable"
fi
fi
swaymsg "[con_id=$id]" focus
}
id_fmt='<span stretch="ultracondensed" size="xx-small">%s</span>'
ws_fmt='<span size="small">%s</span>'
app_fmt='<span weight="bold">%s</span>'
title_fmt='<span style="italic">%s</span>'
#id_fmt='%s'
#ws_fmt='%s'
#app_fmt='%s'
#title_fmt='%s'
# allow Alt+Tab etc to not be caught by sway:
trap 'swaymsg "mode default"' EXIT
swaymsg "mode passthrough"
swaymsg -t get_tree |
# get list of windows as tab-separated columns
jq -r "$jq_get_windows | $jq_windows_to_tsv" |
# align columns w/ spaces (keep tab as separator)
column -s $'\t' -o $'\t' -t |
# pango format the window list
while IFS=$'\t' read -r win_id ws_name app_name win_title pid; do
shopt -s extglob
app_name="${app_name%%*( )}"
icon=$( get_icon "$app_name" "$pid" )
[[ "$verbose" ]] && printf "[%s]=>%s\n" "$app_name" "$icon" >&2
# shellcheck disable=SC2059
# hide win_id for now
#win_id=""
# simplify ws_name instead of Scratch
#(( ${#ws_name} > 8 )) && ws_name="${ws_name:0:1}"
printf "img:$icon:text:${id_fmt}\t${ws_fmt}\t${app_fmt}\t${title_fmt}\n" \
"$win_id" \
"$ws_name" \
"$app_name" \
"$win_title"
done |
# sort by workspace name and then app_name:
sort -k2 -k3 |
# defeat the initial cache in order to preserve the order:
wofi -m --cache-file=/dev/null --insensitive --allow-images --show dmenu --prompt='Focus a window' | {
FS=$'\t' read -r win_id ws_name app_name win_title
# printf "win_id='$win_id' ws_name='$ws_name' app_name='$app_name' win_title='$win_title'" >&2
# use evtest (if installed) to detect the state of the left shift
# key and if it's 'down' then move the window here rather than move
# to the window's workspace. Should be safe if evtest or sudo are
# not available.
## i've disabled this
type evtest && sudo evtest --query $KEYBOARD_DEVICE EV_KEY KEY_LEFTSHIFT
SHIFT_STATE=$?
if [[ "$win_id" ]]; then
if (( SHIFT_STATE == 10 )); then
# bring the window here
swaymsg "[con_id=$win_id] move window to workspace current, focus"
else
focus_window "$win_id" "$ws_name" "$app_name" "$win_title"
fi
fi
}
exit 0
# this is the example documented in 'man 7 wofi' but it doesn't understand the scratchpad:
swaymsg -t get_tree |
jq -r '.nodes[].nodes[] | if .nodes then [recurse(.nodes[])] else [] end + .floating_nodes | .[] | select(.nodes==[]) | ((.id | tostring) + " " + .name)' |
wofi --show dmenu | {
read -r id name
swaymsg "[con_id=$id]" focus
}
# Local Variables:
# mode: shell-script
# time-stamp-pattern: "4/TIME_STAMP=\"%:y%02m%02d.%02H%02M%02S\""
# eval: (add-hook 'before-save-hook 'time-stamp)
# End:

View File

@ -1,31 +1,48 @@
#!/bin/sh
# A dmenu wrapper script for system functions.
export WM=$XDG_CURRENT_DESKTOP
#export WM=$XDG_CURRENT_DESKTOP
if [ "$WINDOW_MANAGER" == "sway" ]; then WM="sway" ; fi
if [ "$WINDOW_MANAGER" == "river" ]; then WM="river" ; fi
case "$(readlink -f /sbin/init)" in
*systemd*) ctl='systemctl' ;;
*) ctl='loginctl' ;;
esac
case "$(printf "🔒 lock\n🚪 leave $WM\n♻ renew $WM\n🐻 hibernate\n🔃 reboot\n🖥 shutdown\n💤 sleep\n📺 display off\n set background\n start idle\n kill swayidle\n fcitx5\n kill fcitx5\n start emacs daemon\n kill emacs daemon\n restart emacs daemon" | rofi -dmenu -i -l 16 -p 'action')" in
#case "$(printf "🔒 lock\n🚪 leave $WM\n♻ renew $WM\n🐻 hibernate\n🔃 reboot\n🖥 shutdown\n💤 sleep\n📺 display off\n set background\n start idle\n kill swayidle\n fcitx5\n kill fcitx5\n start emacs daemon\n kill emacs daemon\n restart emacs daemon" | rofi -dmenu -i -l 16 -p 'action')" in
case "$(printf "🔒 lock\n🚪 leave $WM\n♻ renew $WM\n🐻 hibernate\n🔃 reboot\n🖥 shutdown\n💤 sleep\n📺 display off\n set background\n start idle\n kill swayidle\n fcitx5\n kill fcitx5\n start emacs daemon\n kill emacs daemon\n restart emacs daemon\ntoggle sworkstyle" | wofi -L 17 --cache-file=/dev/null --show=dmenu -i -p 'action')" in
'🔒 lock')
setsid -f swaylock
setsid -f sleep 2 && swayidle -w timeout 1 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on" && kill $#'
if [ "$WINDOW_MANAGER" == "river" ]; then setsid -f sleep 2 && swayidle -w timeout 1 'wlopm --off "*"' resume 'wlopm --on "*" && kill $#' ; fi
if [ "$WINDOW_MANAGER" == "sway" ]; then setsid -f sleep 2 && swayidle -w timeout 1 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on" && kill $#' ; fi
;;
"🚪 leave $WM")
if [ "$WINDOW_MANAGER" == "sway" ]; then swaymsg exit ; fi
if [ "$WINDOW_MANAGER" == "river" ]; then riverctl exit ; fi
;;
"♻️ renew $WM")
if [ "$WINDOW_MANAGER" == "sway" ]; then swaymsg reload ; fi
if [ "$WINDOW_MANAGER" == "river" ]; then $HOME/.config/river/init ; fi
;;
"🚪 leave $WM") swaymsg exit ;;
"♻️ renew $WM") swaymsg reload ;;
'🐻 hibernate') $ctl hibernate -i ;;
'💤 sleep') $ctl suspend -i ;;
'🔃 reboot') $ctl reboot -i ;;
'🖥️ shutdown') $ctl poweroff -i ;;
'📺 display off') swayidle -w timeout 1 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on" && kill $#' ;;
#'📺 display off') swayidle -w timeout 1 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on" && kill $#' ;;
'📺 display off')
if [ "$WINDOW_MANAGER" == "river" ]; then setsid -f sleep 2 && swayidle -w timeout 1 'wlopm --off "*"' resume 'wlopm --on "*" && kill $#' ; fi
if [ "$WINDOW_MANAGER" == "sway" ]; then setsid -f sleep 2 && swayidle -w timeout 1 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on" && kill $#' ; fi
;;
' set background') change-background ;;
' start idle') killall swayidle && sleep 1; setsid -f idle && notify-send 'idle started.';;
' kill swayidle') killall swayidle && notify-send 'idle killed.';;
' fcitx5') fcitx5 ;;
' kill fcitx5') killall fcitx5 ;;
#' start emacs daemon') emacs --daemon && emacsclient -c ;;
#' kill emacs daemon') emacsclient -e '(kill-emacs)' ;;
#' restart emacs daemon') emacsclient -e '(kill-emacs)' ; emacs --daemon && emacsclient -c ;;
' start emacs daemon') emacs --daemon && notify-send 'emacs daemon started' ;;
' kill emacs daemon') killall emacs && notify-send 'emacs daemon killed' ;;
' restart emacs daemon') killall emacs && notify-send 'emacs daemon killed' ; emacs --daemon && notify-send 'emacs daemon started' ;;
' kill emacs daemon') emacsclient -e '(kill-emacs)' && notify-send 'emacs daemon killed' ;;
' restart emacs daemon') emacsclient -e '(kill-emacs)' && notify-send 'emacs daemon killed' ; emacs --daemon && notify-send 'emacs daemon started' ;;
*) exit 1 ;;
esac

View File

@ -0,0 +1,13 @@
#!/usr/bin/python3
import gi, sys
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gio, GLib
rec_mgr = Gtk.RecentManager.get_default()
for arg in sys.argv[1:]:
rec_mgr.add_item(Gio.File.new_for_path(arg).get_uri())
GLib.idle_add(Gtk.main_quit)
Gtk.main()

View File

@ -0,0 +1,4 @@
[Desktop Entry]
Type=Application
Name=Cat Clock
Exec=/home/default/.local/uxn/uxnemu /home/default/.local/uxn/catclock.rom

View File

@ -1,12 +0,0 @@
[Desktop Entry]
Name=Emacs Client
GenericName=Text Editor
Comment=Edit text
MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
Exec=emacsclient -c -a 'emacs' %F
Icon=emacs
Type=Application
Terminal=false
Categories=Development;TextEditor;
StartupNotify=true
StartupWMClass=Emacs

View File

@ -0,0 +1,4 @@
[Desktop Entry]
Type=Application
Name=Left editor
Exec=/home/default/.local/uxn/uxnemu /home/default/.local/uxn/left.rom

View File

@ -0,0 +1,4 @@
[Desktop Entry]
Type=Application
Name=Syncplay
Exec=/home/default/.local/bin/syncplay

View File

@ -1,4 +1,4 @@
[Desktop Entry]
Type=Application
Name=Whatsapp
Exec=/usr/bin/librewolf -P wa https://web.whatsapp.com
Exec=io.gitlab.librewolf-community -P whatsapp --new-window https://web.whatsapp.com

Binary file not shown.

After

Width:  |  Height:  |  Size: 546 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 546 B

View File

@ -1,6 +1,8 @@
#+title: Instructions
setting up the system and packages
** information :info:
This org document is a list of instructions on how to install the whole setup of my personal system, including installation of standalone programs.
** installing fedora minimal with btrfs snapshots (snapper)
@ -33,20 +35,22 @@ sha256sum -c *-CHECKSUM
differences/notes before continuing with the installation:
1. some dependencies aren't available with 'fedora custom operating system'. before installing snapper make sure to install these packages:
1. some dependencies aren't available with 'fedora custom operating system'. before installing snapper install these packages:
#+BEGIN_SRC sh
sudo dnf install neovim sway firefox locate git bzip2
#+END_SRC
a) neovim is the text editor of my choice
b) install a browser such as firefox to follow along guide
c) locate, git, bzip2 are the missing dependencies not included in the guide.
- ~neovim~: a text editor to edit files
- ~firefox~: a browser to follow along guide
- ~locate~, ~git~, ~bzip2~: missing dependencies not included in the guide.
2. software selection will be 'fedora custom operating system'
2. software selection will be =fedora custom operating system=
boot your fedora installer media and follow this guide, make sure to boot with EUFI mode:
https://sysguides.com/install-fedora-38-with-snapshot-and-rollback-support/
or for full disk encryption
https://sysguides.com/install-fedora-38-with-full-disk-encryption-snapshot-and-rollback-support/
** how to make new user and add to wheel
@ -65,7 +69,7 @@ for building/installing packages, also some dependencies for doomemacs, and zsh.
sudo dnf install curl ca-certificates make automake gcc gcc-c++ kernel-devel git util-linux-user zsh ntpsec dnf-plugins-core golang flatpak cmake libevdev-devel systemd-devel yaml-cpp-devel boost-devel ripgrep fd-find ShellCheck tar pip npm
#+END_SRC
** get dotfiles
** installing dotfiles
#+BEGIN_SRC sh
# getting dotfiles
@ -82,6 +86,7 @@ mkdir -p ~/.config/shell
mkdir -p ~/.config/mpd
mkdir -p ~/.config/zsh
mkdir -p ~/.config/newsboat
mkdir -p ~/.config/nvim
cd ~/.dots/home/ && stow default --target=$HOME/
#+END_SRC
@ -92,7 +97,7 @@ cd ~/.dots/home/ && stow default --target=$HOME/
cd ~/.dots/home/ && stow -D default --target=$HOME/
#+END_SRC
** rpmfusion
** setting up rpmfusion
from https://rpmfusion.org/Configuration and https://rpmfusion.org/Howto/Multimedia
@ -128,14 +133,21 @@ the other dependency not included in packages.txt is `pup` (included in a sectio
sudo dnf install -y $(cat ~/.dots/packages.txt)
#+END_SRC
** sudoers
** installing swayfx (window manager)
#+begin_src sh
sudo dnf copr enable swayfx/swayfx
sudo dnf install
#+end_src
** configuring sudoers
Allow wheel users to sudo with password and allow several system commands
(like `shutdown` to run without password).
#+BEGIN_SRC shell
echo "%wheel ALL=(ALL:ALL) ALL" >/etc/sudoers.d/00-wheel-can-sudo
echo "%wheel ALL=(ALL:ALL) NOPASSWD: /usr/bin/shutdown,/usr/bin/reboot,/usr/bin/systemctl suspend,/usr/bin/wifi-menu,/usr/bin/mount,/usr/bin/umount,/usr/bin/dnf update,/usr/bin/dnf update -y,/usr/bin/loadkeys" >/etc/sudoers.d/01-cmds-without-password
echo "%wheel ALL=(ALL:ALL) NOPASSWD: /usr/bin/shutdown,/usr/bin/reboot,/usr/bin/systemctl suspend,/usr/bin/wifi-menu,/usr/bin/mount,/usr/bin/umount,/usr/bin/dnf update,/usr/bin/dnf update -y,/usr/bin/dnf upgrade,/usr/bin/dnf upgrade,/usr/bin/dnf makecache,/usr/bin/dnf makecache -y,/usr/bin/loadkeys" >/etc/sudoers.d/01-cmds-without-password
echo "Defaults editor=/usr/bin/nvim" >/etc/sudoers.d/02-visudo-editor
#+END_SRC
@ -164,15 +176,44 @@ sudo dnf install librewolf
*** plugins, etc
https://github.com/ranmaru22/firefox-vertical-tabs
https://addons.mozilla.org/en-US/firefox/addon/multi-account-containers/
https://addons.mozilla.org/en-US/firefox/addon/nicothin-dark-theme/
https://addons.mozilla.org/en-US/firefox/addon/tomorrow-theme-night
https://support.mozilla.org/en-US/kb/compact-mode-workaround-firefox
** doom emacs
first we need marked for markdown support
first we need to install marked for markdown support
#+BEGIN_SRC sh
sudo npm install -g marked
#+END_SRC
then install emacs
#+begin_src sh
sudo dnf install emacs
#+end_src
alternatively build emacs with native compilation and pgtk for better compatibility with wayland
#+begin_src sh
## clone the emacs repository
git clone git://git.savannah.gnu.org/emacs.git
## install dependencies
sudo dnf install gcc atk-devel cairo-devel freetype-devel fontconfig-devel dbus-devel giflib-devel glibc-devel libgccjit-devel libpng-devel libjpeg-turbo-devel libjpeg-turbo libtiff-devel libX11-devel libXau-devel libXdmcp-devel libXrender-devel libXt-devel libXpm-devel ncurses-devel xorg-x11-proto-devel zlib-devel gnutls-devel librsvg2-devel m17n-lib-devel libotf-devel libselinux-devel alsa-lib-devel gpm-devel liblockfile-devel libxml2-devel autoconf bzip2 cairo texinfo gzip desktop-file-utils libacl-devel harfbuzz-devel jansson-devel systemd-devel lcms2-devel systemd-rpm-macros libtree-sitter-devel gtk3-devel webkit2gtk3-devel gnupg2 sysprof-devel
## build emacs 29.1
cd emacs
git checkout emacs-29.1.90
./autogen.sh
./configure --with-dbus --with-gif --with-jpeg --with-png --with-rsvg \
--with-tiff --with-xft --with-xpm --with-gpm=no \
--with-xwidgets --with-modules --with-harfbuzz --with-cairo --with-json \
--with-tree-sitter --with-pgtk --with-native-compilation
make -j$(nproc)
sudo make install
#+end_src
install doom emacs:
#+BEGIN_SRC sh
git clone https://github.com/doomemacs/doomemacs ~/.emacs.d
~/.emacs.d/bin/doom install
@ -191,7 +232,7 @@ mkdir -p $HOME/.cache/lf
** interception tools (keyboard input mappings)
change caps lock to escape (pressed) and mod (held down)
change caps lock to escape (when pressed) and mod (when held down)
INSTALL FROM SOURCE
@ -234,19 +275,51 @@ dnf copr enable erikreider/SwayNotificationCenter
dnf install SwayNotificationCenter
#+END_SRC
** autotiling in sway
** autotiling in sway (optional)
#+BEGIN_SRC sh
pip install i3ipc
pip install autotiling==1.8
#+END_SRC
** sworkstyle (workspace icons) (optional)
this is disabled by default within sway config, but compatible with waybar and sway
installing this needs cargo, to install go here: [[*installing cargo]]
this also needs [[install icon fonts (Nerd Fonts)]]
#+begin_src sh
cargo install sworkstyle
#+end_src
*** install icon fonts (Nerd Fonts)
for sworkstyle icons in waybar
#+begin_src sh
mkdir ~/.local/share/fonts
curl -LOv https://github.com/ryanoasis/nerd-fonts/releases/download/v3.1.1/NerdFontsSymbolsOnly.tar.xz --output-dir /tmp/
tar -xvf /tmp/NerdFontsSymbolsOnly.tar.xz -C ~/.local/share/fonts/
#+end_src
** uxn
installing this just for catclock
#+begin_src sh
cd Downloads/
curl -LOv https://rabbits.srht.site/uxn/uxn-essentials-lin64.tar.gz
tar xvf uxn-essentials-lin64.tar.gz
mv uxn ~/.local/
#+end_src
** sc-im (terminal spreadsheet)
from https://github.com/andmarti1424/sc-im/wiki/Installing-on-Fedora-36--(packaged)
I'm using this for sc files
from https://github.com/andmarti1424/sc-im/wiki/Installing-on-Fedora-27
#+BEGIN_SRC sh
sudo dnf copr enable marcusmueller/sc-im
sudo dnf install sc-im
sudo dnf install libzip libzip-devel libxml2-devel ncurses-devel byacc git gcc gnuplot
git clone https://github.com/andmarti1424/sc-im.git
cd sc-im/src/
make
sudo make install
#+END_SRC
** nsxiv (image viewer)
@ -256,7 +329,7 @@ dnf copr enable mamg22/nsxiv
dnf install nsxiv
#+END_SRC
** pip
** pip packages
*** keepmenu (dmenu keepassxc client)
https://github.com/firecat53/keepmenu/blob/main/docs/install.md#install-recommended
@ -279,13 +352,32 @@ pip install termdown
** go packages
*** pup
needed for rssadd RSS scanning to work, it's optional if you don't really need it.
needed for rssadd RSS scanning to work
#+BEGIN_SRC sh
go install github.com/ericchiang/pup@latest
#+END_SRC
** packages from source/binaries
*** simple-mtpfs (for mounting usb)
install dependencies:
#+begin_src sh
sudo dnf install libgcc fuse-devel libmtp-devel autoconf-archive
#+end_src
https://github.com/phatina/simple-mtpfs#installation
#+begin_src sh
git clone https://github.com/phatina/simple-mtpfs
cd simple-mtpfs
./autogen.sh
mkdir build && cd build
../configure
make
sudo make install
#+end_src
*** mpvpaper
animated wallpapers (used by `change-background`)
@ -319,7 +411,23 @@ tar -xvf ../<filename>.tar.xz
sudo cp 7zz /usr/local/bin/
#+END_SRC
#+RESULTS:
** AppImages
*** syncplay
from https://syncplay.pl/download/
#+begin_src sh
curl -LOv https://github.com/Syncplay/syncplay/releases/download/v1.7.0/Syncplay-1.7.0-x86_64.AppImage
chmod +x Syncplay-*.AppImage
mv Syncplay-*.AppImage ~/.local/bin/syncplay
#+end_src
** installing cargo
https://doc.rust-lang.org/cargo/getting-started/installation.html
when asked, choose to customize installation, and then choose `no` when it asks to modify PATH variable. (it's already set in ~~/config/shell/profile~)
#+BEGIN_SRC shell
curl https://sh.rustup.rs -sSf | sh
#+END_SRC
** setting up flatpak
@ -337,7 +445,7 @@ sudo usermod -a -G vboxusers default
** flatpak packages
remember to set permissions, especially access to personal files according to what you want the software to have before launching them.
remember to set permissions with Flatseal, especially access to personal files according to what you want the software to have before launching them.
*** flatseal
@ -354,16 +462,18 @@ flatpak install flathub com.unity.UnityHub
*** Foliate (Epub reader)
#+BEGIN_SRC sh
flatpak install com.github.johnfactotum.Foliate
flatpak install flathub com.github.johnfactotum.Foliate
#+END_SRC
*** bottles and dependencies
- gamescope
- mangohud
- OBS VkCapture tools
- OBS VkCapture plugin
#+BEGIN_SRC sh
flatpak install -y com.valvesoftware.Steam.Utility.gamescope com.usebottles.bottles org.freedesktop.Platform.VulkanLayer.MangoHud
flatpak install -y com.valvesoftware.Steam.Utility.gamescope com.usebottles.bottles org.freedesktop.Platform.VulkanLayer.MangoHud org.freedesktop.Platform.VulkanLayer.OBSVkCapture obs-studio-plugin-vkcapture com.obsproject.Studio
#+END_SRC
*** steam
@ -404,16 +514,8 @@ flatpak install flathub io.github.hrkfdn.ncspot
flatpak install flathub com.spotify.Client
#+END_SRC
** installing cargo
https://doc.rust-lang.org/cargo/getting-started/installation.html
#+BEGIN_SRC shell
curl https://sh.rustup.rs -sSf | sh
# choose to customize installation, and choose `no` when it asks to modify PATH variable.
#+END_SRC
** other
*** crashes with wayland under amd gpus
* fixes
** crashes with wayland under amd gpus
see https://bbs.archlinux.org/viewtopic.php?id=270468
https://forum.manjaro.org/t/graphics-glitches-freeze-up-with-new-comp-error-ring-gfx-timeout/55979/6
@ -429,10 +531,82 @@ power_dpm_state: performance
power_dpm_force_performance_level: high
#+END_SRC
* todos
** TODO remove Virtual Box
** TODO remove autotiling
** TODO write dependencies and programs to separate files
** add packages
*** TODO add simple-mtpfs
dnf package unmaintained
*** TODO add syncplay
the copr repository batmanfeynman/syncplay is unmaintained
** add packages / other
*** installing bubblejail (WIP)
#+begin_src sh
git clone https://github.com/igo95862/bubblejail
cd bubblejail
git checkout tags/0.8.1
sudo dnf install scdoc
sudo dnf install python3
sudo dnf install python3-jinja2
sudo dnf install python3-tomli-w
sudo dnf install python3-tomli
sudo dnf install libseccomp
sudo dnf install python3-pyqt6
sudo dnf install python3-pyxdg
sudo dnf install bubblewrap
sudo dnf install xdg-dbus-proxy
meson setup build
cd build
meson compile
sudo meson install
#+end_src
** setting up termux (WIP)
1. install termux-api and termux-styling from fdroid
2. install these packages
#+begin_src sh
pkg install termux-api fd ripgrep git emacs neovim shellcheck rsync nodejs lf man ffmpeg jq pup recode python-pip clang fontconfig-utils which
#+end_src
3. setup storage
#+begin_src sh
termux-setup-storage
#+end_src
3. install doom emacs
#+BEGIN_SRC sh
sudo npm install -g marked
git clone https://github.com/doomemacs/doomemacs ~/.emacs.d
~/.emacs.d/bin/doom install
#+END_SRC
4. yt-dlp
#+begin_src sh
pip install yt-dlp
#+end_src
** ryujinx (WIP)
sudo sysctl -w vm.max_map_count=524288
** setup flatpak env variable for theme
#+begin_src
flatpak install org.gtk.Gtk3theme.Materia-dark
flatpak install org.gtk.Gtk3theme.Materia
sudo flatpak override --env GTK_THEME=Materia-dark
#+end_src
** wlrobs
#+begin_src sh
sudo dnf install wayland-devel obs-studio-devel pkg-config meson
#+end_src
#+begin_src sh
hg clone https://hg.sr.ht/~scoopta/wlrobs
cd wlrobs
meson setup build
ninja -C build
#+end_src
https://github.com/pystardust/ani-cli#tier-1-support-linux-mac-android

View File

@ -26,6 +26,7 @@ tar
pip
npm
polkit
polkit-gnome
fontawesome-fonts
chafa
bc
@ -59,6 +60,7 @@ abook
unzip
lynx
zathura-plugins-all
zathura-pdf-mupdf
krita
poppler
mediainfo
@ -70,7 +72,6 @@ task-spooler
htop
waybar
dmenu
sway
swaylock
swaybg
swayidle
@ -124,9 +125,40 @@ tmux
gamescope
dotnet
mono-devel
VirtualBox
virtualbox-guest-additions
@virtualization
texlive-scheme-basic
texlive-scheme-full
texlive-dvipng
rofi
kanshi
gvfs-mtp
usbutils
android-tools
java-1.8.0-openjdk
java-17-openjdk
easyeffects
java-latest-openjdk-devel
picard
chromaprint-tools
rhythmbox
python-sphinx
wofi
nautilus
mpg123
highlight
clang
clang-tools-extra
sdcv
obs-studio-plugin-vkcapture
languagetool
android-file-transfer
ruby-devel
zlib-devel
"C Development Tools and Libraries"
perl-Image-ExifTool
zig
minisign
wlopm
urlscan
wlr-randr
figlet
ledger

32
termux.txt Normal file
View File

@ -0,0 +1,32 @@
neovim
shellcheck
nodejs before marked
lf
fd-find > fd
termux-setup-storage
sync-*
.bashrc
.termux
rsync
df -H | grep -o "/storage/....-...."
ln -s /storage/... ~/sdcard
ln -s ~/storage/shared/notebook .
cp -rv ~/git/cho@gitea.bubbletea.dev/dotfiles/home/default/.config/nvim ~/.config
fontconfig-utils
which
sync-* mkdir
clang
python-pip
yt-dlp
ln -s ~/storage...-.../media .
man
ffmpeg
cargo install aio-cli
jq pup recode
install rustup :
ln -s termux.txt
ln -s housekeeping
ln -s ~/storage/shared/scripts .
sc-im
exiftool
ani-cli

543
termux/.doom.d/config.el Normal file
View File

@ -0,0 +1,543 @@
;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
;; Place your private configuration here! Remember, you do not need to run 'doom
;; sync' after modifying this file!
;; Some functionality uses this to identify you, e.g. GPG configuration, email
;; clients, file templates and snippets. It is optional.
;; (setq user-full-name "John Doe"
;; user-mail-address "john@doe.com")
;; Doom exposes five (optional) variables for controlling fonts in Doom:
;;
;; - `doom-font' -- the primary font to use
;; - `doom-variable-pitch-font' -- a non-monospace font (where applicable)
;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for
;; presentations or streaming.
;; - `doom-symbol-font' -- for symbols
;; - `doom-serif-font' -- for the `fixed-pitch-serif' face
;;
;; See 'C-h v doom-font' for documentation and more examples of what they
;; accept. For example:
;;
;;(setq doom-font (font-spec :family "Fira Code" :size 12 :weight 'semi-light)
;; doom-variable-pitch-font (font-spec :family "Fira Sans" :size 13))
;;
;; If you or Emacs can't find your font, use 'M-x describe-font' to look them
;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to
;; refresh your font settings. If Emacs still can't find your font, it likely
;; wasn't installed correctly. Font issues are rarely Doom issues!
;; There are two ways to load a theme. Both assume the theme is installed and
;; available. You can either set `doom-theme' or manually load a theme with the
;; `load-theme' function. This is the default:
;(setq doom-theme 'doom-one)
;; This determines the style of line numbers in effect. If set to `nil', line
;; numbers are disabled. For relative line numbers, set this to `relative'.
;(setq display-line-numbers-type t)
;; If you use `org' and don't want your org files in the default location below,
;; change `org-directory'. It must be set before org loads!
;(setq org-directory "~/org/")
;; Whenever you reconfigure a package, make sure to wrap your config in an
;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
;;
;; (after! PACKAGE
;; (setq x y))
;;
;; The exceptions to this rule:
;;
;; - Setting file/directory variables (like `org-directory')
;; - Setting variables which explicitly tell you to set them before their
;; package is loaded (see 'C-h v VARIABLE' to look up their documentation).
;; - Setting doom variables (which start with 'doom-' or '+').
;;
;; Here are some additional functions/macros that will help you configure Doom.
;;
;; - `load!' for loading external *.el files relative to this one
;; - `use-package!' for configuring packages
;; - `after!' for running code after a package has loaded
;; - `add-load-path!' for adding directories to the `load-path', relative to
;; this file. Emacs searches the `load-path' when you load packages with
;; `require' or `use-package'.
;; - `map!' for binding new keys
;;
;; To get information about any of these functions/macros, move the cursor over
;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k').
;; This will open documentation for it, including demos of how they are used.
;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces,
;; etc).
;;
;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
;; they are implemented.
(setq browse-url-browser-function 'browse-url-generic
browse-url-generic-program "termux-open"
alert-default-style 'termux
org-pomodoro-audio-player nil) ;; VERY LOUD! DISABLE.
(set-default 'truncate-lines nil)
(after! org-pomodoro
(alert-add-rule :category "org-pomodoro"
:style (cond (alert-termux-command
'termux)
(alert-default-style))))
;; theme
(setq doom-theme 'doom-tomorrow-night )
;(setq doom-theme 'doom-meltbus )
;(setq doom-theme 'doom-plain-dark )
;(setq doom-theme 'doom-plain )
(after! org
(setq display-line-numbers-type nil
org-hide-emphasis-markers t
org-pretty-entities t
org-ellipsis ""
org-image-actual-width 600))
(setq display-line-numbers-type nil)
(after! org-journal
(setq org-journal-dir "~/diary"
org-journal-date-prefix "#+TITLE: "
org-journal-time-prefix "+ "
org-journal-date-format "%a, %Y-%m-%d"
org-journal-file-format "%Y-%m-%d.org"))
(use-package! org-books
:defer t
:config
(setq org-books-file "~/notebook/readinglist.org"))
(after! org
(setq org-log-done 'time
org-log-into-drawer t
;About the 2 elisp lines below: If you want to send items without explicit
;priorities to the bottom of the list you have to set org-default-priority to the
;value of org-lowest-priority). I did this to make recognize that: PRIORITY=0 are
;items without explicit priorities (not A, B or C, but just TODO)
org-lowest-priority ?E
org-default-priority ?E)
(defun jethro/org-archive-done-tasks ()
"Archive all done tasks."
(interactive)
(org-map-entries 'org-archive-subtree "/DONE" 'file)))
(setq org-directory "~/notebook/"
bookmark-default-file "~/.doom.d/bookmarks")
(setq org-agenda-files '("~/housekeeping/calendar.org"
"~/notebook/ag/habits.org"
"~/notebook/ag/todo.org"
"~/notebook/ag/projects.org"
"~/notebook/ag/refile.org"
"~/notebook/ag/pomodoro.org"
"~/notebook/ag/events/birthdays.org"
"~/notebook/refile.org"
))
(after! org-agenda
(setq org-agenda-sticky t)) ; dont kill agendas
(use-package! org-super-agenda
:after org-agenda
:init
(setq org-agenda-skip-scheduled-if-done t
org-agenda-skip-deadline-if-done t
org-agenda-include-deadlines t
org-agenda-block-separator nil
org-agenda-compact-blocks t
org-agenda-start-day nil ;; i.e. today
org-agenda-span 1
org-agenda-start-on-weekday nil)
(add-to-list 'org-agenda-custom-commands
'("c" "Super view"
((agenda "" ((org-agenda-overriding-header "")
(org-super-agenda-groups
'((:name "Soon"
:deadline future
:order 3)
(:name "Today"
:time-grid t
:date today
:order 2)
(:name "Due today"
:deadline today
:scheduled today
:order 2)
(:name "Overdue"
:deadline past
:scheduled past
:order 1)))))
(alltodo "" ((org-agenda-overriding-header "")
(org-super-agenda-groups
'(;(:name "Future"
; :scheduled future)
(:discard (:anything t)))))))))
:config
(org-super-agenda-mode))
(setq org-agenda-prefix-format '(
(agenda . " %?-12t% s")
(todo . " %i %-12:c")
(tags . " %i %-12:c")
(search . " %i %-12:c")))
;; hide tags
(after! org-agenda
(setq org-agenda-hide-tags-regexp
(concat org-agenda-hide-tags-regexp "\\|sometag")))
;; org-pomodoro
(setq org-pomodoro-ask-upon-killing t
org-pomodoro-keep-killed-pomodoro-time t
org-pomodoro-length 25
org-pomodoro-manual-break t)
(defun +org-pomodoro/3-5 ()
"Set Pomodoro intervals to 3-5"
(interactive)
(setq org-pomodoro-length 3)
(setq org-pomodoro-short-break-length 5)
(message "Pomodoro set to 3-5" (buffer-name)))
(defun +org-pomodoro/5-5 ()
"Set Pomodoro intervals to 5-5"
(interactive)
(setq org-pomodoro-length 5)
(setq org-pomodoro-short-break-length 5)
(message "Pomodoro set to 3-5" (buffer-name)))
(defun +org-pomodoro/10-5 ()
"Set Pomodoro intervals to 10-5"
(interactive)
(setq org-pomodoro-length 10)
(setq org-pomodoro-short-break-length 5)
(message "Pomodoro set to 10-5" (buffer-name)))
(defun +org-pomodoro/15-5 ()
"Set Pomodoro intervals to 15-5"
(interactive)
(setq org-pomodoro-length 15)
(setq org-pomodoro-short-break-length 5)
(message "Pomodoro set to 15-5" (buffer-name)))
(defun +org-pomodoro/25-5 ()
"Set Pomodoro intervals to 25-5"
(interactive)
(setq org-pomodoro-length 25)
(setq org-pomodoro-short-break-length 5)
(message "Pomodoro set to 25-5" (buffer-name)))
(defun +org-pomodoro/30-10 ()
"Set Pomodoro intervals to 30-10"
(interactive)
(setq org-pomodoro-length 30)
(setq org-pomodoro-short-break-length 10)
(message "Pomodoro set to 30-10" (buffer-name)))
(defun +org-pomodoro/50-10 ()
"Set Pomodoro intervals to 50-10"
(interactive)
(setq org-pomodoro-length 50)
(setq org-pomodoro-short-break-length 10)
(message "Pomodoro set to 50-10" (buffer-name)))
;; eisenhower matrix
(after! org-agenda
(add-to-list 'org-agenda-custom-commands
'("1" "Eisenhower matrix"
((tags-todo
"+PRIORITY=\"A\"-habits+todo"
((org-agenda-overriding-header "Urgent and important"))))
nil))
(add-to-list 'org-agenda-custom-commands
'("2" "Eisenhower matrix"
((tags-todo
"+PRIORITY=\"B\"-habits+todo"
((org-agenda-overriding-header "Important but not urgent"))))
nil))
(add-to-list 'org-agenda-custom-commands
'("3" "Eisenhower matrix"
((tags-todo
"+PRIORITY=\"C\"-habits+todo"
((org-agenda-overriding-header "Urgent but not important"))))
nil))
(add-to-list 'org-agenda-custom-commands
'("4" "Eisenhower matrix"
((tags-todo
"+PRIORITY=0-PRIORITY=\"A\"-PRIORITY=\"B\"-PRIORITY=\"C\"-habits+todo"
;"+PRIORITY=0+PRIORITY=\"D\"-habits+todo"
((org-agenda-overriding-header "Neither important nor urgent"))))
nil))
;;; same but using lists
(add-to-list 'org-agenda-custom-commands
'("x" "Eisenhower Matrix (list)"
((tags-todo
"+PRIORITY=\"A\"-habits+todo"
((org-agenda-overriding-header "Urgent and important")))
(tags-todo
"+PRIORITY=\"B\"-habits+todo"
((org-agenda-overriding-header "Important but not urgent")))
(tags-todo
"+PRIORITY=\"C\"-habits+todo"
((org-agenda-overriding-header "Urgent but not important")))
(tags-todo
"+PRIORITY=0-PRIORITY=\"A\"-PRIORITY=\"B\"-PRIORITY=\"C\"-habits+todo"
((org-agenda-overriding-header "Neither important nor urgent"))))
nil)))
;; eisenhower matrix grid
(defun +eisenhower-matrix/agenda-1 () (interactive) (org-agenda nil "1"))
(defun +eisenhower-matrix/agenda-2 () (interactive) (org-agenda nil "2"))
(defun +eisenhower-matrix/agenda-3 () (interactive) (org-agenda nil "3"))
(defun +eisenhower-matrix/agenda-4 () (interactive) (org-agenda nil "4"))
(defun split-4-ways () (interactive) (delete-other-windows) (split-window-right) (split-window-below) (windmove-right) (split-window-below) (windmove-left))
(defun +eisenhower-matrix/redo-all-agenda-buffers ()
(interactive)
(dolist (buffer (buffer-list))
(with-current-buffer buffer
(when (derived-mode-p 'org-agenda-mode)
(org-agenda-redo t)))))
(defun +eisenhower-matrix/make-agendas ()
(interactive)
(+eisenhower-matrix/agenda-1)
(hide-mode-line-mode)
(+eisenhower-matrix/agenda-2)
(hide-mode-line-mode)
(+eisenhower-matrix/agenda-3)
(hide-mode-line-mode)
(+eisenhower-matrix/agenda-4)
(hide-mode-line-mode)
)
(defun +eisenhower-matrix/make-eisenhower-matrix ()
(interactive)
(+eisenhower-matrix/make-agendas)
(split-4-ways)
(switch-to-buffer "*Org Agenda(1)*")
(windmove-right)
(switch-to-buffer "*Org Agenda(2)*")
(windmove-down)
(switch-to-buffer "*Org Agenda(4)*")
(windmove-left)
(switch-to-buffer "*Org Agenda(3)*")
)
;; workspaces
;;; Commentary: provides 2 grid workspaces via function;
;;; +todo-workspaces/make-todo-workspace
;;; +todo-workspaces/make-todo-workspace-min
(defun +todo-workspaces/agenda1 () (org-agenda nil "a"))
(defun +todo-workspaces/agenda2 () (org-agenda nil "x"))
(defun +todo-workspaces/make-todo-agendas () (+todo-workspaces/agenda1) (hide-mode-line-mode) (+todo-workspaces/agenda2) (hide-mode-line-mode))
(defun +todo-workspaces/split-todo-workspace ()
(delete-other-windows)
(split-window-below)
(windmove-down)
(split-window-right)
(windmove-up))
(defun +todo-workspaces/split-todo-workspace-min ()
(delete-other-windows)
(split-window-below))
(defun +todo-workspaces/redo-all-agenda-buffers ()
(interactive)
(dolist (buffer (buffer-list))
(with-current-buffer buffer
(when (derived-mode-p 'org-agenda-mode)
(org-agenda-redo t)))))
(defun +todo-workspaces/make-todo-workspace ()
(interactive)
;(+todo-workspaces/redo-all-agenda-buffers)
(+todo-workspaces/make-todo-agendas)
(+todo-workspaces/split-todo-workspace)
(switch-to-buffer "*Org Agenda(a)*")
(windmove-down)
(switch-to-buffer "*Org Agenda(x)*")
(windmove-right)
(find-file "~/notebook/ag/todo.org"))
(defun +todo-workspaces/make-todo-workspace-min ()
(interactive)
;(+todo-workspaces/redo-all-agenda-buffers)
(+todo-workspaces/make-todo-agendas)
(+todo-workspaces/split-todo-workspace-min)
(switch-to-buffer "*Org Agenda(a)*")
(windmove-down)
(switch-to-buffer "*Org Agenda(x)*"))
(map! :leader
(:prefix-map ("o" . "open")
(:prefix-map ("w" . "workspaces")
:desc "Eisenhower Matrix" "e" #'+eisenhower-matrix/make-eisenhower-matrix ;; classic eisenhower matrix
:desc "Schedule/Eisenhower-list/todo" "t" #'+todo-workspaces/make-todo-workspace
:desc "Schedule/Eisenhower-list" "s" #'+todo-workspaces/make-todo-workspace-min)
(:prefix ("a" . "org agenda")
:desc "Eisenhower Matrix" "e" #'+eisenhower-matrix/make-eisenhower-matrix ;; classic eisenhower matrix
:desc "Rebuild All agendas" "r" #'+eisenhower-matrix/redo-all-agenda-buffers
(:prefix-map ("w" . "workspaces")
:desc "Eisenhower Matrix" "e" #'+eisenhower-matrix/make-eisenhower-matrix ;; classic eisenhower matrix
:desc "Schedule/Eisenhower-list/todo" "t" #'+todo-workspaces/make-todo-workspace
:desc "Schedule/Eisenhower-list" "s" #'+todo-workspaces/make-todo-workspace-min)
)))
;; org-roam configurations
(use-package! org-roam
:init
:custom
(org-roam-directory "~/notebook/roam/" )
(org-roam-dailies-capture-templates
'(("d" "default" entry "* %<%I:%M %p>: %?"
:if-new (file+head "%<%Y-%m-%d>.org" "#+title: %<%Y-%m-%d>\n")))))
;; looks
(cl-defmethod org-roam-node-type ((node org-roam-node))
"Return the TYPE of NODE."
(condition-case nil
(file-name-nondirectory
(directory-file-name
(file-name-directory
(file-relative-name (org-roam-node-file node) org-roam-directory))))
(error "")))
(setq org-roam-node-display-template
(concat "${type:15} ${title:30} " (propertize "${tags:10}" 'face 'org-tag)))
(setq org-roam-capture-templates
'(("d" "default" plain "%?"
:target (file+head "%<%Y%m%d%H%M%S>-${slug}.org"
"#+title: ${title}\n")
:unnarrowed t)
; main things
("l" "literature" plain "%?"
:if-new
(file+head "literature/%<%Y%m%d%H%M%S>-${title}.org" "#+title: ${title}\n")
:immediate-finish t
:unnarrowed t)
("p" "permanent" plain "%?"
:if-new
(file+head "permanent/%<%Y%m%d%H%M%S>-${title}.org" "#+title: ${title}\n")
:immediate-finish t
:unnarrowed t)
; now using inbox.org via org-capture
("f" "fleeting" plain "%?"
:if-new
(file+head "fleeting/%<%Y%m%d%H%M%S>-${title}.org" "#+title: ${title}\n")
:immediate-finish t
:unnarrowed t)
("s" "school" plain "%?"
:if-new
(file+head "school/%<%Y%m%d%H%M%S>-${title}.org" "#+title: ${title}\n")
:immediate-finish t
:unnarrowed t)))
;; org-capture
(after! org
;; examples: file:~/.emacs.d/modules/lang/org/config.el
;; file:~/.emacs.d/modules/lang/org/autoload/org-capture.el
;; set locations personal and centralized files
(defvar +org-capture-refile-file "ag/refile.org")
(defun +org-capture-refile-file ()
(expand-file-name +org-capture-refile-file org-directory))
(defvar +org-capture-todo-custom-file "ag/todo.org")
(defun +org-capture-todo-custom-file ()
(expand-file-name +org-capture-todo-custom-file org-directory))
(defvar +org-capture-custom-projects-file "ag/projects.org")
(defun +org-capture-custom-central-project-todo-file ()
"TODO"
(+org--capture-central-file
+org-capture-custom-projects-file (projectile-project-name)))
(defun +org-capture-custom-central-project-notes-file ()
"TODO"
(+org--capture-central-file
+org-capture-custom-projects-file (projectile-project-name)))
(defun +org-capture-custom-central-project-changelog-file ()
"TODO"
(+org--capture-central-file
+org-capture-custom-projects-file (projectile-project-name)))
;(add-to-list 'org-capture-templates
; '(("s" "Slipbox" entry (file "braindump/org/inbox.org")
; "* %?\n")
; ("t" "Personal todo" entry
; (file+headline +org-capture-todo-file "Inbox")
; "* [ ] %?\n%i\n%a" :prepend t)
; )
(setq org-capture-templates
'(("t" "Personal todo" entry
(file+headline +org-capture-todo-custom-file "todo")
"* TODO %?\n%i\n%a" :prepend t)
("T" "Personal todo (no link)" entry
(file+headline +org-capture-todo-custom-file "todo")
"* TODO %?\n" :prepend t)
;;; i never use this
;("n" "Personal notes" entry
;(file+headline +org-capture-notes-file "Inbox")
;"* %u %?\n%i\n%a" :prepend t)
("r" "Personal refile file" entry
(file +org-capture-refile-file)
"* %u %?\n%i\n%a" :prepend t)
;; using org-journal atm, i will likely never use this
;("j" "Journal" entry
;(file+olp+datetree +org-capture-journal-file)
;"* %U %?\n%i\n%a" :prepend t)
;; Will use {project-root}/{todo,notes,changelog}.org, unless a
;; {todo,notes,changelog}.org file is found in a parent directory.
;; Uses the basename from `+org-capture-todo-file',
;; `+org-capture-changelog-file' and `+org-capture-notes-file'.
("p" "Templates for projects")
("pt" "Project-local todo" entry ; {project-root}/todo.org
(file+headline +org-capture-project-todo-file "Inbox")
"* TODO %?\n%i\n%a" :prepend t)
("pn" "Project-local notes" entry ; {project-root}/notes.org
(file+headline +org-capture-project-notes-file "Inbox")
"* %U %?\n%i\n%a" :prepend t)
("pc" "Project-local changelog" entry ; {project-root}/changelog.org
(file+headline +org-capture-project-changelog-file "Unreleased")
"* %U %?\n%i\n%a" :prepend t)
;; reference for function: [[file:~/.emacs.d/modules/lang/org/autoload/org-capture.el::defun +org--capture-central-file (file project]]
;; Will use {org-directory}/{+org-capture-projects-file} and store
;; these under {ProjectName}/{Tasks,Notes,Changelog} headings. They
;; support `:parents' to specify what headings to put them under, e.g.
;; :parents ("Projects")
("o" "Centralized templates for projects")
("ot" "Project todo" entry
(function +org-capture-custom-central-project-todo-file)
"* TODO %?\n %i\n %a"
:heading "Tasks"
:prepend nil)
("on" "Project notes" entry
(function +org-capture-custom-central-project-notes-file)
"* %U %?\n %i\n %a"
:heading "Notes"
:prepend t)
("oc" "Project changelog" entry
(function +org-capture-custom-central-project-changelog-file)
"* %U %?\n %i\n %a"
:heading "Changelog"
:prepend t)
;; org books / general logging
("b" "Book log / General log (org)" item (function org-books-visit-book-log)
"- %U %?" :prepend t)
;; zettelkasten
("s" "Slipbox" entry (file "roam/inbox.org")
"* %U %?\n")
("S" "Slipbox link" entry (file "roam/inbox.org")
"* %U %?\n %i\n %a"))))

View File

@ -50,7 +50,7 @@
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
;;zen ; distraction-free coding or writing
:editor
(evil +everywhere); come to the dark side, we have cookies
@ -74,19 +74,20 @@
vc ; version-control and Emacs, sitting in a tree
:term
eshell ; the elisp shell that works everywhere
;;eshell ; the elisp shell that works everywhere
;;shell ; simple shell REPL for Emacs
;;term ; basic terminal emulator for Emacs
vterm ; the best terminal emulation in Emacs
:checkers
syntax ; tasing you for every semicolon you forget
(spell +flyspell) ; tasing you for misspelling mispelling
grammar ; tasing grammar mistake every you make
;;(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
@ -101,7 +102,7 @@
;;pass ; password manager for nerds
;;pdf ; pdf enhancements
;;prodigy ; FIXME managing external services & code builders
rgb ; creating color strings
;;rgb ; creating color strings
;;taskrunner ; taskrunner for all your projects
;;terraform ; infrastructure as code
;;tmux ; an API for interacting with tmux
@ -110,7 +111,7 @@
:os
(:if IS-MAC macos) ; improve compatibility with macOS
;;tty ; improve the terminal Emacs experience
tty ; improve the terminal Emacs experience
:lang
;;agda ; types of types of types of types...
@ -142,12 +143,13 @@
;;idris ; a language you can depend on
;;json ; At least it ain't XML
;;(java +lsp) ; the poster child for carpal tunnel syndrome
java
;;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
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
@ -157,6 +159,8 @@
+journal
+habit
+roam2
;+dragndrop
+pomodoro
) ; organize your plain life in plain text
;;php ; perl's insecure younger brother
;;plantuml ; diagrams for confusing people more
@ -169,6 +173,7 @@
;;rst ; ReST in peace
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
;;(rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
rust
;;scala ; java, but good
;;(scheme +guile) ; a fully conniving family of lisps
sh ; she sells {ba,z,fi}sh shells on the C xor

View File

@ -7,51 +7,48 @@
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
;(package! some-package)
;; (package! some-package)
;; To install a package directly from a remote git repo, you must specify a
;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
;; https://github.com/radian-software/straight.el#the-recipe-format
;(package! another-package
; :recipe (:host github :repo "username/repo"))
;; (package! another-package
;; :recipe (:host github :repo "username/repo"))
;; If the package you are trying to install does not contain a PACKAGENAME.el
;; file, or is located in a subdirectory of the repo, you'll need to specify
;; `:files' in the `:recipe':
;(package! this-package
; :recipe (:host github :repo "username/repo"
; :files ("some-file.el" "src/lisp/*.el")))
;; (package! this-package
;; :recipe (:host github :repo "username/repo"
;; :files ("some-file.el" "src/lisp/*.el")))
;; If you'd like to disable a package included with Doom, you can do so here
;; with the `:disable' property:
;(package! builtin-package :disable t)
;; (package! builtin-package :disable t)
;; You can override the recipe of a built in package without having to specify
;; all the properties for `:recipe'. These will inherit the rest of its recipe
;; from Doom or MELPA/ELPA/Emacsmirror:
;(package! builtin-package :recipe (:nonrecursive t))
;(package! builtin-package-2 :recipe (:repo "myfork/package"))
;; (package! builtin-package :recipe (:nonrecursive t))
;; (package! builtin-package-2 :recipe (:repo "myfork/package"))
;; Specify a `:branch' to install a package from a particular branch or tag.
;; This is required for some packages whose default branch isn't 'master' (which
;; our package manager can't deal with; see radian-software/straight.el#279)
;(package! builtin-package :recipe (:branch "develop"))
;; (package! builtin-package :recipe (:branch "develop"))
;; Use `:pin' to specify a particular commit to install.
;(package! builtin-package :pin "1a2b3c4d5e")
;; (package! builtin-package :pin "1a2b3c4d5e")
;; Doom's packages are pinned to a specific commit and updated from release to
;; release. The `unpin!' macro allows you to unpin single packages...
;(unpin! pinned-package)
;; (unpin! pinned-package)
;; ...or multiple packages
;(unpin! pinned-package another-pinned-package)
;; (unpin! pinned-package another-pinned-package)
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
;(unpin! t)
;; (unpin! t)
;(package! org-wild-notifier :disable t) ;; currently using a customized version loaded locally
(package! org-books)
;;; customized to support repeated tasks, see https://github.com/akhramov/org-wild-notifier.el/issues/41
(package! org-wild-notifier
:recipe (:local-repo "~/.config/doom/lisp/org-wild-notifier"))
(package! org-super-agenda)