Compare commits

...

47 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
cho
46a97e6543 add org-roam 2023-08-04 22:32:05 +07:00
cho
b3eb87f5ac add neovim config 2023-08-04 22:29:44 +07:00
cho
35d490e7fb update instructions and packages list 2023-08-04 11:27:06 +07:00
cho
a542cb199b update
update

update
2023-07-31 18:19:20 +07:00
cho
20e21fbc3a update 2023-07-01 18:55:00 +07:00
cho
3ff0f1ecb2 update 2023-07-01 18:47:19 +07:00
cho
8104fbe6a6 typo 2023-07-01 18:45:43 +07:00
cho
f88f04c58e update 2023-06-29 22:26:51 +07:00
cho
db21668969 add instructions.org and packages.txt 2023-06-29 22:26:03 +07:00
cho
0e1adcd65d gitignore typo & fix 2023-06-29 21:21:59 +07:00
cho
ffa5843046 update everything to current config 2023-06-29 21:12:35 +07:00
cho
f88cda4a67 add .gitignore 2023-06-29 21:11:44 +07:00
cho
d917cec616 set theme to adwaita-dark 2023-06-23 18:31:58 +07:00
cho
264eec4c48 add notifications and emacs-status widget 2023-06-18 20:55:44 +07:00
cho
5523e74082 update lfrc 2023-06-18 20:47:47 +07:00
cho
29d0270e76 moving workspaces doesn't really work. revert 2023-06-18 20:35:53 +07:00
cho
a557035b41 update rssadd 2023-06-18 20:27:38 +07:00
cho
6203f3833a update change-background 2023-06-18 20:27:20 +07:00
cho
2f977782b5 add mimeapps.list and desktop files 2023-06-18 20:06:32 +07:00
cho
2edfb81c35 $DOOMDIR doesn't work, use absolute path 2023-06-18 18:33:48 +07:00
cho
5b6224fa8f add doom emacs config 2023-06-18 18:14:39 +07:00
cho
08d5de8ada update sysact 2023-06-18 17:39:43 +07:00
cho
7a8a14bb1c enable wayland for mozilla apps 2023-06-18 17:31:17 +07:00
106 changed files with 9989 additions and 585 deletions

21
.gitignore vendored Normal file
View File

@ -0,0 +1,21 @@
home/default/.config/shell/zshnameddirrc
home/default/.config/shell/shortcutrc
home/default/.config/shell/privrc
*.log
notes.org
home/default/.config/mpd/mpd.db
home/default/.config/mpd/mpd.pid
home/default/.config/mpd/sticker.sql
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

@ -0,0 +1,14 @@
# lives under /etc/interception/dual-function-keys/keyboard.yaml
TIMING:
TAP_MILLISEC: 200
DOUBLE_TAP_MILLISEC: 100
MAPPINGS:
- KEY: KEY_CAPSLOCK
TAP: KEY_ESC
HOLD: KEY_RIGHTMETA
- KEY: KEY_ESC
TAP: KEY_CAPSLOCK
HOLD: KEY_CAPSLOCK

View File

@ -0,0 +1,9 @@
# lives under /etc/interception/udevmon.yaml
#
# Keyboard configuration. Important parts are `NAME:` and `EV_KEY`. Get the name of the devices you want this to apply to by using the command `evtest`, you should see the name of your keyboard somewhere, type the number and follow the instructions.
- JOB: "intercept -g $DEVNODE | dual-function-keys -c /etc/interception/dual-function-keys/keyboard.yaml | uinput -d $DEVNODE"
DEVICE:
NAME: .*[Kk]eyboard.*
EVENTS:
EV_KEY: [KEY_CAPSLOCK, KEY_ENTER, KEY_LEFTSHIFT, KEY_RIGHTSHIFT, KEY_LEFTCTRL, KEY_RIGHTCTRL, KEY_TAB]

View File

@ -0,0 +1,12 @@
[Unit]
Description=Control Radeon Card
After=getty.target
[Service]
Restart=on-failure
Type=simple
RestartSec=10
ExecStart=/usr/local/bin/radcard-autoset.sh
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,10 @@
[Unit]
Description=udevmon
Wants=systemd-udev-settle.service
After=systemd-udev-settle.service
[Service]
ExecStart=/usr/bin/nice -n 20 udevmon -c /etc/interception/udevmon.yaml
[Install]
WantedBy=multi-user.target

View File

@ -4,14 +4,22 @@
<alias>
<family>monospace</family>
<prefer>
<family>Terminus</family>
<family>DejaVu Sans Mono</family>
<family>Noto Sans Mono</family>
<family>Unifont-JP</family>
<family>Unifont Upper</family>
<family>Unifont CSUR</family>
<family>Noto Sans Mono</family>
<family>Terminus</family>
<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

@ -1,188 +1,125 @@
# -*- conf -*-
# shell=$SHELL (if set, otherwise user's default shell from /etc/passwd)
# term=foot (or xterm-256color if built with -Dterminfo=disabled)
# login-shell=no
# app-id=foot
# title=foot
# locked-title=no
font=monospace:size=12
# font-bold=<bold variant of regular font>
# font-italic=<italic variant of regular font>
# font-bold-italic=<bold+italic variant of regular font>
# line-height=<font metrics>
# letter-spacing=0
# horizontal-letter-offset=0
# vertical-letter-offset=0
# underline-offset=<font metrics>
# box-drawings-uses-font-glyphs=yes
font=monospace:size=10
dpi-aware=no
# initial-window-size-pixels=700x500 # Or,
# initial-window-size-chars=<COLSxROWS>
# initial-window-mode=windowed
pad= 8x8 # optionally append 'center'
# resize-delay-ms=100
# notify=notify-send -a ${app-id} -i ${app-id} ${title} ${body}
# bold-text-in-bright=no
# word-delimiters=,│`|:"'()[]{}<>
# selection-target=primary
# workers=<number of logical CPUs>
[environment]
# name=value
[bell]
# urgent=no
# notify=no
# command=
# command-focused=no
[scrollback]
# lines=1000
# multiplier=3.0
# indicator-position=relative
# indicator-format=
pad= 8x8
pad= 16x16
[url]
launch=xdg-open ${url}
# label-letters=sadfjklewcmpgh
# osc8-underline=url-mode
# protocols=http, https, ftp, ftps, file, gemini, gopher
# uri-characters=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,~:;/?#@!$&%*+="'()[]
# Tomorrow Light
##[cursor]
##color=373b41
## dimmed colors (see foot.ini(5) man page)
# dim0=<not set>
# ...
# dim7=<not-set>
#[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
## The remaining 256-color palette
# 16 = <256-color palette #16>
# ...
# 255 = <256-color palette #255>
## Misc colors
# selection-foreground=<inverse foreground/background>
# selection-background=<inverse foreground/background>
# jump-labels=<regular0> <regular3> # black-on-yellow
# scrollback-indicator=<regular0> <bright4> # black-on-bright-blue
# search-box-no-match=<regular0> <regular1> # black-on-red
# search-box-match=<regular0> <regular3> # black-on-yellow
# urls=<regular3>
[csd]
# preferred=server
# size=26
# font=<primary font>
# color=<foreground color>
# hide-when-typing=no
# border-width=0
# border-color=<csd.color>
# button-width=26
# button-color=<background color>
# button-minimize-color=<regular4>
# button-maximize-color=<regular2>
# button-close-color=<regular1>
[key-bindings]
# scrollback-up-page=Shift+Page_Up
# scrollback-up-half-page=none
# scrollback-up-line=none
# scrollback-down-page=Shift+Page_Down
# scrollback-down-half-page=none
# scrollback-down-line=none
# clipboard-copy=Control+Shift+c XF86Copy
# clipboard-paste=Control+Shift+v XF86Paste
# primary-paste=Shift+Insert
# search-start=Control+Shift+r
# font-increase=Control+plus Control+equal Control+KP_Add
# font-decrease=Control+minus Control+KP_Subtract
# font-reset=Control+0 Control+KP_0
# spawn-terminal=Control+Shift+n
# minimize=none
# maximize=none
# fullscreen=none
# pipe-visible=[sh -c "xurls | fuzzel | xargs -r firefox"] none
# pipe-scrollback=[sh -c "xurls | fuzzel | xargs -r firefox"] none
# pipe-selected=[xargs -r firefox] none
# show-urls-launch=Control+Shift+u
# show-urls-copy=none
# show-urls-persistent=none
# prompt-prev=Control+Shift+z
# prompt-next=Control+Shift+x
# unicode-input=none
# noop=none
[search-bindings]
# cancel=Control+g Control+c Escape
# commit=Return
# find-prev=Control+r
# find-next=Control+s
# cursor-left=Left Control+b
# cursor-left-word=Control+Left Mod1+b
# cursor-right=Right Control+f
# cursor-right-word=Control+Right Mod1+f
# cursor-home=Home Control+a
# cursor-end=End Control+e
# delete-prev=BackSpace
# delete-prev-word=Mod1+BackSpace Control+BackSpace
# delete-next=Delete
# delete-next-word=Mod1+d Control+Delete
# extend-to-word-boundary=Control+w
# extend-to-next-whitespace=Control+Shift+w
# clipboard-paste=Control+v Control+Shift+v Control+y XF86Paste
# primary-paste=Shift+Insert
# unicode-input=none
[url-bindings]
# cancel=Control+g Control+c Control+d Escape
# toggle-url-visible=t
[text-bindings]
# \x03=Mod4+c # Map Super+c -> Ctrl+c
[mouse-bindings]
# selection-override-modifiers=Shift
# primary-paste=BTN_MIDDLE
# select-begin=BTN_LEFT
# select-begin-block=Control+BTN_LEFT
# select-extend=BTN_RIGHT
# select-extend-character-wise=Control+BTN_RIGHT
# select-word=BTN_LEFT-2
# select-word-whitespace=Control+BTN_LEFT-2
# select-row=BTN_LEFT-3
# vim: ft=dosini
# -*- conf -*-
# Rose-Piné (with black background)
# Tomorrow Night (grey background)
[cursor]
color=191724 e0def4
#color=c5c8c6
[colors]
background=000000
foreground=e0def4
regular0=26233a # black
regular1=eb6f92 # red
regular2=31748f # green
regular3=f6c177 # yellow
regular4=9ccfd8 # blue
regular5=c4a7e7 # magenta
regular6=ebbcba # cyan
regular7=e0def4 # white
#alpha=0.80
# tomorrow night default
background=1d1f21
#background=000000
# grey
#background=161616
foreground=c5c8c6
bright0=6e6a86 # bright black
bright1=eb6f92 # bright red
bright2=31748f # bright green
bright3=f6c177 # bright yellow
bright4=9ccfd8 # bright blue
bright5=c4a7e7 # bright magenta
bright6=ebbcba # bright cyan
bright7=e0def4 # bright white
alpha=0.9
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

@ -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,27 +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
exec swaymsg workspace 1, move workspace to HDMI-A-1
exec swaymsg workspace 2, move workspace to HDMI-A-1
exec swaymsg workspace 3, move workspace to HDMI-A-1
exec swaymsg workspace 4, move workspace to HDMI-A-1
exec swaymsg workspace 5, move workspace to HDMI-A-1
exec swaymsg workspace 6, move workspace to DVI-D-1
exec swaymsg workspace 7, move workspace to DVI-D-1
exec swaymsg workspace 8, move workspace to DVI-D-1
exec swaymsg workspace 9, move workspace to DVI-D-1
exec swaymsg workspace 10, move workspace to DVI-D-1
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
exec swaymsg workspace 1, move workspace to HDMI-A-1
exec swaymsg workspace 2, move workspace to HDMI-A-1
exec swaymsg workspace 3, move workspace to HDMI-A-1
exec swaymsg workspace 4, move workspace to HDMI-A-1
exec swaymsg workspace 5, move workspace to HDMI-A-1
exec swaymsg workspace 6, move workspace to HDMI-A-1
exec swaymsg workspace 7, move workspace to HDMI-A-1
exec swaymsg workspace 8, move workspace to HDMI-A-1
exec swaymsg workspace 9, move workspace to HDMI-A-1
exec swaymsg workspace 10, move workspace to HDMI-A-1
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

@ -9,14 +9,16 @@ set icons
set period 1
set hiddenfiles ".*:*.aux:*.log:*.bbl:*.bcf:*.blg:*.run.xml"
set previewer '~/.config/lf/scope'
set autoquit on
set autoquit true
# cmds/functions
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|*.sc) setsid -f libreoffice $f >/dev/null 2>&1 && exit 0 ;;
esac
*.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 && 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 ;;
image/vnd.djvu|application/pdf|application/octet-stream|application/postscript) setsid -f zathura $fx >/dev/null 2>&1 ;;
@ -32,7 +34,9 @@ cmd open ${{
;;
audio/*) mpv --audio-display=no $f ;;
video/*|application/vnd.rn-realmedia) setsid -f mpv $f -quiet >/dev/null 2>&1 ;;
application/pdf|application/vnd.djvu|application/epub*) setsid -f zathura $fx >/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 ;;
@ -121,7 +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"
# Source Bookmarks
source "~/.config/lf/shortcutrc"
map <c-f> $setsid -f thunar . ; kill @#

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

@ -0,0 +1,32 @@
[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/
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
x-scheme-handler/lbry=lbry.desktop
inode/directory=file.desktop
# other
x-scheme-handler/https=io.gitlab.librewolf-community.desktop
x-scheme-handler/http=io.gitlab.librewolf-community.desktop

View File

@ -0,0 +1,27 @@
# mpd.conf
music_directory "~/Music"
playlist_directory "~/Music/playlists"
pid_file "~/.config/mpd/mpd.pid"
db_file "~/.config/mpd/mpd.db"
state_file "~/.config/mpd/mpd.state"
sticker_file "~/.config/mpd/sticker.sql"
log_file "syslog"
auto_update "yes"
bind_to_address "localhost"
port "6600"
volume_normalization "yes"
audio_output {
type "pulse"
name "pulse"
#type "alsa"
#name "ALSA"
}
audio_output {
type "fifo"
name "Visualizer feed"
path "/tmp/mpd.fifo"
format "44100:16:2"
}

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

@ -0,0 +1,479 @@
##############################################################
## This is the example bindings file. Copy it to ##
## ~/.ncmpcpp/bindings or $XDG_CONFIG_HOME/ncmpcpp/bindings ##
## and set up your preferences ##
##############################################################
#
#def_key "mouse"
# mouse_event
#
#def_key "up"
# scroll_up
#
#def_key "shift-up"
# select_item
# scroll_up
#
#def_key "down"
# scroll_down
#
#def_key "shift-down"
# select_item
# scroll_down
#
#def_key "["
# scroll_up_album
#
#def_key "]"
# scroll_down_album
#
#def_key "{"
# scroll_up_artist
#
#def_key "}"
# scroll_down_artist
#
#def_key "page_up"
# page_up
#
#def_key "page_down"
# page_down
#
#def_key "home"
# move_home
#
#def_key "end"
# move_end
#
#def_key "insert"
# select_item
#
#def_key "enter"
# enter_directory
#
#def_key "enter"
# toggle_output
#
#def_key "enter"
# run_action
#
#def_key "enter"
# play_item
#
#def_key "space"
# add_item_to_playlist
#
#def_key "space"
# toggle_lyrics_update_on_song_change
#
#def_key "space"
# toggle_visualization_type
#
#def_key "delete"
# delete_playlist_items
#
#def_key "delete"
# delete_browser_items
#
#def_key "delete"
# delete_stored_playlist
#
#def_key "right"
# next_column
#
#def_key "right"
# slave_screen
#
#def_key "right"
# volume_up
#
#def_key "+"
# volume_up
#
#def_key "left"
# previous_column
#
#def_key "left"
# master_screen
#
#def_key "left"
# volume_down
#
#def_key "-"
# volume_down
#
#def_key ":"
# execute_command
#
#def_key "tab"
# next_screen
#
#def_key "shift-tab"
# previous_screen
#
#def_key "f1"
# show_help
#
#def_key "1"
# show_playlist
#
#def_key "2"
# show_browser
#
#def_key "2"
# change_browse_mode
#
#def_key "3"
# show_search_engine
#
#def_key "3"
# reset_search_engine
#
#def_key "4"
# show_media_library
#
#def_key "4"
# toggle_media_library_columns_mode
#
#def_key "5"
# show_playlist_editor
#
#def_key "6"
# show_tag_editor
#
#def_key "7"
# show_outputs
#
#def_key "8"
# show_visualizer
#
#def_key "="
# show_clock
#
#def_key "@"
# show_server_info
#
#def_key "s"
# stop
#
#def_key "p"
# pause
#
#def_key ">"
# next
#
#def_key "<"
# previous
#
#def_key "ctrl-h"
# jump_to_parent_directory
#
#def_key "ctrl-h"
# replay_song
#
#def_key "backspace"
# jump_to_parent_directory
#
#def_key "backspace"
# replay_song
#
#def_key "f"
# seek_forward
#
#def_key "b"
# seek_backward
#
#def_key "r"
# toggle_repeat
#
#def_key "z"
# toggle_random
#
#def_key "y"
# save_tag_changes
#
#def_key "y"
# start_searching
#
#def_key "y"
# toggle_single
#
#def_key "R"
# toggle_consume
#
#def_key "Y"
# toggle_replay_gain_mode
#
#def_key "T"
# toggle_add_mode
#
#def_key "|"
# toggle_mouse
#
#def_key "#"
# toggle_bitrate_visibility
#
#def_key "Z"
# shuffle
#
#def_key "x"
# toggle_crossfade
#
#def_key "X"
# set_crossfade
#
#def_key "u"
# update_database
#
#def_key "ctrl-s"
# sort_playlist
#
#def_key "ctrl-s"
# toggle_browser_sort_mode
#
#def_key "ctrl-s"
# toggle_media_library_sort_mode
#
#def_key "ctrl-r"
# reverse_playlist
#
#def_key "ctrl-f"
# apply_filter
#
#def_key "ctrl-_"
# select_found_items
#
#def_key "/"
# find
#
#def_key "/"
# find_item_forward
#
#def_key "?"
# find
#
#def_key "?"
# find_item_backward
#
#def_key "."
# next_found_item
#
#def_key ","
# previous_found_item
#
#def_key "w"
# toggle_find_mode
#
#def_key "e"
# edit_song
#
#def_key "e"
# edit_library_tag
#
#def_key "e"
# edit_library_album
#
#def_key "e"
# edit_directory_name
#
#def_key "e"
# edit_playlist_name
#
#def_key "e"
# edit_lyrics
#
#def_key "i"
# show_song_info
#
#def_key "I"
# show_artist_info
#
#def_key "g"
# jump_to_position_in_song
#
#def_key "l"
# show_lyrics
#
#def_key "ctrl-v"
# select_range
#
#def_key "v"
# reverse_selection
#
#def_key "V"
# remove_selection
#
#def_key "B"
# select_album
#
#def_key "a"
# add_selected_items
#
#def_key "c"
# clear_playlist
#
#def_key "c"
# clear_main_playlist
#
#def_key "C"
# crop_playlist
#
#def_key "C"
# crop_main_playlist
#
#def_key "m"
# move_sort_order_up
#
#def_key "m"
# move_selected_items_up
#
#def_key "n"
# move_sort_order_down
#
#def_key "n"
# move_selected_items_down
#
#def_key "M"
# move_selected_items_to
#
#def_key "A"
# add
#
#def_key "S"
# save_playlist
#
#def_key "o"
# jump_to_playing_song
#
#def_key "G"
# jump_to_browser
#
#def_key "G"
# jump_to_playlist_editor
#
#def_key "~"
# jump_to_media_library
#
#def_key "E"
# jump_to_tag_editor
#
#def_key "U"
# toggle_playing_song_centering
#
#def_key "P"
# toggle_display_mode
#
#def_key "\\"
# toggle_interface
#
#def_key "!"
# toggle_separators_between_albums
#
#def_key "L"
# toggle_lyrics_fetcher
#
#def_key "F"
# fetch_lyrics_in_background
#
#def_key "alt-l"
# toggle_fetching_lyrics_in_background
#
#def_key "ctrl-l"
# toggle_screen_lock
#
#def_key "`"
# toggle_library_tag_type
#
#def_key "`"
# refetch_lyrics
#
#def_key "`"
# add_random_items
#
#def_key "ctrl-p"
# set_selected_items_priority
#
#def_key "q"
# quit
#
#
#def_key "f"
# find
#def_key "f"
# find_item_forward
def_key "+"
show_clock
def_key "="
volume_up
def_key "j"
scroll_down
def_key "k"
scroll_up
def_key "ctrl-u"
page_up
#push_characters "kkkkkkkkkkkkkkk"
def_key "ctrl-d"
page_down
#push_characters "jjjjjjjjjjjjjjj"
def_key "u"
page_up
#push_characters "kkkkkkkkkkkkkkk"
def_key "d"
page_down
#push_characters "jjjjjjjjjjjjjjj"
def_key "h"
previous_column
def_key "l"
next_column
def_key "."
show_lyrics
def_key "n"
next_found_item
def_key "N"
previous_found_item
# not used but bound
def_key "J"
move_sort_order_down
def_key "K"
move_sort_order_up
def_key "h"
jump_to_parent_directory
def_key "l"
enter_directory
def_key "l"
run_action
def_key "l"
play_item
def_key "m"
show_media_library
def_key "m"
toggle_media_library_columns_mode
def_key "t"
show_tag_editor
def_key "v"
show_visualizer
def_key "G"
move_end
def_key "g"
move_home
#jump_to_position_in_song
def_key "U"
update_database
def_key "s"
reset_search_engine
def_key "s"
show_search_engine
def_key "f"
show_browser
def_key "f"
change_browse_mode
def_key "x"
delete_playlist_items
def_key "P"
show_playlist

View File

@ -0,0 +1,37 @@
# vim: filetype=conf
ncmpcpp_directory = "~/.config/ncmpcpp"
lyrics_directory = "~/.local/share/lyrics"
mpd_music_dir = "~/Music"
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}
current_item_prefix = $(cyan)$r$b
current_item_suffix = $/r$(end)$/b
current_item_inactive_column_prefix = $(magenta)$r
current_item_inactive_column_suffix = $/r$(end)
playlist_display_mode = columns
browser_display_mode = columns
progressbar_look = ->
media_library_primary_tag = album_artist
media_library_albums_split_by_date = no
startup_screen = "media_library"
display_volume_level = no
ignore_leading_the = yes
external_editor = nvim
use_console_editor = yes
empty_tag_color = magenta
main_window_color = white
progressbar_color = black:b
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,30 +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 black bold
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
@ -54,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

@ -0,0 +1,13 @@
#!/bin/sh
while read -r file
do
case "$1" in
"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" | 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
done

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, {})

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,8 @@
configuration {
modi: "combi";
font: "hack 10";
combi-modi: "window,drun,ssh";
show-icons: true;
}
@theme "/usr/share/rofi/themes/Arc-Dark.rasi"

View File

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

View File

@ -1,66 +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" \
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="emnw"
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,27 +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_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
[ ! -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,17 +0,0 @@
# Read `man 5 sway-bar` for more information about this section.
bar {
position bottom
# When the status_command prints a new line to stdout, swaybar updates.
# The default just shows the current date and time.
#status_command while date +'%Y-%m-%d %I:%M:%S %p'; do sleep 1; done
status_command while ~/.config/sway/status.sh; do sleep 1; done
colors {
statusline #888888
background #000000
focused_workspace #888888 #888888 #000000
active_workspace #888888 #888888 #000000
inactive_workspace #6B313D #6B313D #bbbbbb
}
}

View File

@ -1,4 +1,5 @@
### sway settings
### sway(fx) settings
# logo key. Use Mod1 for Alt.
set $mod Mod4
@ -12,23 +13,24 @@ set $right l
set $term $TERMINAL
set $browser $BROWSER
set $editor $EDITOR
set $menu dmenu_path | dmenu | xargs swaymsg exec --
set $menu wofi -i --show drun | xargs swaymsg exec --
set $dmenu wofi -i --show run | xargs swaymsg exec --
# wallpaper
output "*" background ~/.local/share/bg fill
exec change-background
### daemons
# autotype
exec ydotoold
# notifications
exec swaync
# display orientation
exec --no-startup-id kanshi
# input method
exec fcitx5
#exec fcitx5
# night light
#exec sleep 3 && gammastep -l LAT:LON
@ -37,36 +39,68 @@ 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
exec_always autotiling
#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
#exec_always autotiling
exec systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway
exec dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway
# 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
default_border pixel 2
hide_edge_borders smart
bindsym $mod+Control+y border toggle
#set $cl_high #F5C2E7
set $cl_high #1C242D
set $cl_indi #1C242D
set $cl_back #1E1D2F
# 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
@ -75,6 +109,13 @@ 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'
#}
### Idle configuration
# timeout
@ -92,7 +133,8 @@ bindsym $mod+q kill
# start your launcher
bindsym $mod+d exec $menu
bindsym $mod+Shift+d exec wofi --show drun
bindsym $mod+Shift+d exec $dmenu
# drag floating windows by holding down $mod and left mouse button.
# resize them with right mouse button + $mod.
@ -105,7 +147,7 @@ floating_modifier $mod normal
bindsym $mod+Shift+r reload
# toggle waybar
bindsym $mod+Shift+x exec killall -SIGUSR1 waybar
bindsym $mod+x exec killall -SIGUSR1 waybar
# exit sway (logs you out of your wayland session)
bindsym $mod+Shift+backspace exec prompt "Do you really wont to exit sway? This will end your Wayland session" "swaymsg exit"
@ -126,69 +168,67 @@ bindsym $mod+Shift+$up move up
bindsym $mod+Shift+$right move right
# screenshot
bindsym Print exec grimshot save output $HOME/Pictures/Screenshots/$(date +'%Y-%m-%d_%H.%M.%S_%Z').png
bindsym $mod+Print exec grimshot save active $HOME/Pictures/Screenshots/$(date +'%Y-%m-%d_%H.%M.%S_%Z').png
bindsym $mod+Shift+Print exec grimshot save window $HOME/Pictures/Screenshots/$(date +'%Y-%m-%d_%H.%M.%S_%Z').png
bindsym Print exec screenshot.sh output
bindsym $mod+Print exec screenshot.sh active
bindsym $mod+Shift+Print exec screenshot.sh window
# alternative keybind
bindsym $mod+Control+u exec grimshot save output $HOME/pictures/Screenshots/$(date +'%Y-%m-%d_%H.%M.%S_%Z').png
bindsym $mod+u exec grimshot save active $HOME/pictures/Screenshots/$(date +'%Y-%m-%d_%H.%M.%S_%Z').png
bindsym $mod+Shift+u exec grimshot save window $HOME/pictures/Screenshots/$(date +'%Y-%m-%d_%H.%M.%S_%Z').png
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
# sway config
bindsym $mod+F1 exec $term -e $editor ~/.config/sway/config
# browser
bindsym $mod+w exec $browser
# agenda
bindsym $mod+c exec $term -e $editor --eval '(org-agenda-list)'
bindsym $mod+c exec emacsclient -c -a '' --eval '(org-agenda-list)'
# diary
bindsym $mod+Control+n $term -e $editor --eval '(org-journal-new-entry 1)'
# notebook
bindsym $mod+n exec $term -e $editor ~/notebook/index.org
bindsym $mod+Control+r $term -e $editor ~/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
# notifications tab
bindsym $mod+Shift+t exec $term -e swaync-client -t
bindsym $mod+t exec swaync-client -t
# file manager
bindsym $mod+r exec $term -e lf
# emacs
bindsym $mod+e exec $term -e $editor
bindsym $mod+Shift+e exec em
bindsym $mod+e exec emacsclient -c -a ''
# mail
#bindsym $mod+e exec $term -e neomutt
# start tasks in dmenu
bindsym $mod+x exec start-tasks
#bindsym $mod+e exec thunderbird-wayland
# bookmarks
bindsym $mod+b exec $term -e $editor ~/notebook/bookmarks.org
# open
bindsym $mod+b exec emacsclient -c -a '' ~/notebook/bookmarks.org
# open bookmarks
bindsym $mod+shift+b exec bookmark
bindsym $mod+Insert exec ydotool type "$(grep -v '^#' ~/notebook/bookmarks/bookmarks.org | dmenu -l 50 | cut -d' ' -f1)"
# 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
# workspace names
set $wp1 1
set $wp2 2
@ -201,29 +241,54 @@ set $wp8 8
set $wp9 9
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
workspace $wp4 output HDMI-A-1
workspace $wp5 output HDMI-A-1
workspace $wp6 output DVI-D-1
workspace $wp7 output DVI-D-1
workspace $wp8 output DVI-D-1
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 (</>)
@ -255,9 +320,9 @@ bindsym $mod+Alt+down move workspace to output down
bindsym $mod+s sticky toggle
# switch the current container between different layout styles
# bindsym $mod+s layout stacking
# bindsym $mod+w layout tabbed
# bindsym $mod+e layout toggle split
#bindsym $mod+Shift+s layout stacking
bindsym $mod+Shift+w layout tabbed
bindsym $mod+Shift+e layout toggle split
# make the current focus fullscreen
bindsym $mod+f fullscreen
@ -305,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
@ -348,5 +413,7 @@ bindsym $mod+m exec $term -e ncmpcpp
#bindsym $mod+Shift+o exec mpc repeat
#bindsym $mod+Shift+i exec mpc seek 0%
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

@ -1,23 +0,0 @@
# The Sway configuration file in ~/.config/sway/config calls this script.
# You should see changes to the status bar after saving this script.
# If not, do "killall swaybar" and $mod+Shift+c to reload the configuration.
# Produces "21 days", for example
uptime_formatted=$(uptime | cut -d ',' -f1 | cut -d ' ' -f4,5)
# The abbreviated weekday (e.g., "Sat"), followed by the ISO-formatted date
# like 2018-10-06 and the time (e.g., 14:01)
#date_formatted=$(date "+%d-%m-%Y %I:%M:%S %p")
date_formatted=$(date "+%Y-%m-%d %H:%M %p")
# Returns the battery status: "Full", "Discharging", or "Charging".
battery_status=$(cat /sys/class/power_supply/BAT0/status)
# Returns the battery capacity: n%
battery_capacity="$(cat /sys/class/power_supply/BAT0/capacity)%"
# Volume
vol="$(pamixer --get-volume)"
unread="$(find "${XDG_DATA_HOME:-$HOME/.local/share}"/mail/*/[Ii][Nn][Bb][Oo][Xx]/new/* -type f | wc -l 2>/dev/null)"
echo $uptime vol-"$vol%" \| $date_formatted \| mail-$unread

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,31 +1,93 @@
{
// "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", "bluetooth", "network", "cpu", "memory", "temperature", "battery", "clock", "tray"],
//"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": {
"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": true,
// "format": "{name}: {icon}",
// "format-icons": {
// "1": "",
// "2": "",
// "3": "",
// "4": "",
// "5": "",
// "urgent": "",
// "focused": "",
// "default": ""
// }
// },
"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,
@ -52,8 +114,12 @@
"clock": {
// "timezone": "America/New_York",
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
"format": "{:%Y-%m-%d %I:%M:%S %p}",
"interval": 1
"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}%",
@ -81,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
@ -100,12 +167,15 @@
"car": "",
"default": ["", "", ""]
},
"on-click": "pavucontrol"
"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": "Disconnected",
"format-disconnected": "-",
"format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped",
"interval": 2,
"consume-icons": {
@ -139,6 +209,30 @@
"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

@ -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

@ -0,0 +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 $inactive
else
echo $active
fi

View File

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

View File

@ -0,0 +1,6 @@
#!/bin/sh
#
count="$(swaync-client -c)"
none="-"
if [ "$count" == "0" ]; then echo "$none" ; fi
if [ "$count" != "0" ]; then echo "$count" ; fi

View File

@ -1,16 +1,72 @@
/* 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;
font-size: 12px;
/* Cozette */
font-family: 'IBM Plex Mono', 'Symbols Nerd Font';
font-size: 10px;
/*font-size: 14px;*/
min-height: 0;
}
window#waybar {
background-color: #000;
color: #ffffff;
transition-property: background-color;
transition-duration: .5s;
/* 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;*/
}
window#waybar.hidden {
@ -35,24 +91,67 @@ 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;
background-color: #6B313D;
color: #bbbbbb;
min-width: 0;
}
/*#workspaces button.active {
background-color: #444444;
color: #bbbbbb;
}*/
#workspaces button.focused {
color: #000000;
background-color: #888888;
/*box-shadow: inset 2px 2px #555555, inset -2px -2px #555555;*/
}
#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;
}
@ -71,12 +170,34 @@ window#waybar.chromium {
#mode,
#idle_inhibitor,
#bluetooth,
#custom-swaync,
#custom-scratchpad_indicator,
#custom-emacsstatus,
#custom-neralie,
#mpd {
padding: 0 6px;
border-right: 2px solid #424242;
color: #999999;
/*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 */
/* test {
padding: 0 6px;
color: #999999;
}*/
#window,
#workspaces {
margin: 0 4px;
@ -208,7 +329,7 @@ label:focus {
}
#mpd.disconnected {
background-color: #f53c3c;
/*background-color: #f53c3c;*/
}
#mpd.stopped {

View File

@ -0,0 +1 @@
hsts-file=~/.cache/wget-hsts

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

@ -2,10 +2,8 @@
# Enable colors and change prompt:
autoload -U colors && colors # Load colors
#PS1="%B%{$fg[red]%}[%{$fg[yellow]%}%n%{$fg[green]%}@%{$fg[blue]%}%M %{$fg[magenta]%}%~%{$fg[red]%}]%{$reset_color%}$%b "
#PS1="[%n@%M %~]$ "
#PS1=" %~ $ "
PS1=" %{$fg[magenta]%}%~%{$fg[red]%} %{$reset_color%}λ%b " # minimal
source /usr/share/git-core/contrib/completion/git-prompt.sh
setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '
setopt autocd # Automatically cd into typed directory.
stty stop undef # Disable ctrl-s to freeze terminal.
setopt interactive_comments
@ -13,11 +11,11 @@ setopt interactive_comments
# History in cache directory:
HISTSIZE=10000000
SAVEHIST=10000000
[ -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"
# Basic auto/tab complete:
@ -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

@ -0,0 +1,530 @@
;;; 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.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
;; 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/>.
;;; Commentary:
;; This package provides notification functions for org-agenda.
;;
;; To perform a one-time check use `org-wild-notifier-check'
;; function.
;; To enable timer-based notifications please use
;;`org-wild-notifier-mode'.
;; Notification times can be customized either globally (for all org
;; entries) through `org-wild-notifier-alert-time' variable or on per
;; org entry basis using `WILD_NOTIFIER_NOTIFY_BEFORE` property, which
;; in turn is customizable via
;; `org-wild-notifier-alert-times-property' variable.
;; By default you get notifications about TODO events only. To
;; customize that behavior please use
;; `org-wild-notifier-keyword-whitelist' variable. In contrary, if
;; you don't want to receive notifications regarding certain events,
;; you can use `org-wild-notifier-keyword-blacklist' variable.
;;; Code:
(require 'dash)
(require 'alert)
(require 'async)
(require 'org-agenda)
(require 'cl-lib)
(require 'org-duration)
(defgroup org-wild-notifier nil
"org-wild-notifier customization options"
:group 'org)
(defcustom org-wild-notifier-alert-time '(10)
"Time in minutes to get a notification about upcoming event.
Cannot be less than 1."
:package-version '(org-wild-notifier . "0.1.0")
:group 'org-wild-notifier
:type '(choice (integer :tag "Notify once")
(repeat integer)))
(defcustom org-wild-notifier-alert-times-property "WILD_NOTIFIER_NOTIFY_BEFORE"
"Use this property in your agenda files to add additional notifications \
to an event."
:package-version '(org-wild-notifier . "0.1.0")
:group 'org-wild-notifier
:type 'string)
(defcustom org-wild-notifier-notification-title "Agenda"
"Notifications title."
:package-version '(org-wild-notifier . "0.1.0")
:group 'org-wild-notifier
:type 'string)
(defcustom org-wild-notifier-notification-icon nil
"Path to notification icon file."
:package-version '(org-wild-notifier . "0.4.1")
:group 'org-wild-notifier
:type 'string)
(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")
:group 'org-wild-notifier
:type '(repeat string))
(defcustom org-wild-notifier-keyword-blacklist nil
"Never receive notifications for these keywords."
:package-version '(org-wild-notifier . "0.2.2")
:group 'org-wild-notifier
:type '(repeat string))
(defcustom org-wild-notifier-tags-whitelist nil
"Receive notifications for these tags only.
Leave this variable blank if you do not want to filter anything."
:package-version '(org-wild-notifier . "0.3.1")
:group 'org-wild-notifier
:type '(repeat string))
(defcustom org-wild-notifier-tags-blacklist nil
"Never receive notifications for these tags."
:package-version '(org-wild-notifier . "0.3.1")
: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"
:package-version '(org-wild-notifier . "0.3.1")
:group 'org-wild-notifier
:type 'symbol
:options '(high medium low))
(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.")
(defvar org-wild-notifier--process nil
"Currently-running async process.")
(defvar org-wild-notifier--agenda-buffer-name "*org wild notifier affairs*"
"A name for temporary 'org-agenda' buffer.")
(defvar org-wild-notifier--last-check-time (seconds-to-time 0)
"Last time checked for events.")
(defun org-wild-notifier--time= (&rest list)
"Compare timestamps.
Comparison is performed by converted each element of LIST onto string
in order to ignore seconds."
(->> list
(--map (format-time-string "%d:%H:%M" it))
(-uniq)
(length)
(= 1)))
(defun org-wild-notifier--today ()
"Get the timestamp for the beginning of current day."
(apply 'encode-time
(append '(0 0 0) (nthcdr 3 (decode-time (current-time))))))
(defun org-wild-notifier--timestamp-within-interval-p (timestamp interval)
"Check whether TIMESTAMP is within notification INTERVAL."
(org-wild-notifier--time=
(time-add (current-time) (seconds-to-time (* 60 interval)))
timestamp))
(defun org-wild-notifier--notifications (event)
"Get notifications for given EVENT.
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)))))
(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."
(-> seconds
(pcase
((pred (>= 0)) "right now")
((pred (>= 3600)) "in %M")
(_ "in %H %M"))
(format-seconds seconds)))
(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."
(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."
(format "%s at %s (%s)"
(cdr (assoc 'title event))
(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)
(--map (org-wild-notifier--notification-text `(,(caar it) . ,(cadr it)) event))))
(defun org-wild-notifier--get-tags (marker)
"Retrieve tags of MARKER."
(-> (org-entry-get marker "TAGS")
(or "")
(org-split-string ":")))
(defun org-wild-notifier--whitelist-predicates ()
(->> `([,org-wild-notifier-keyword-whitelist
(lambda (it)
(-contains-p org-wild-notifier-keyword-whitelist
(org-entry-get it "TODO")))]
[,org-wild-notifier-tags-whitelist
(lambda (it)
(-intersection org-wild-notifier-tags-whitelist
(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))))
(defun org-wild-notifier--blacklist-predicates ()
(->> `([,org-wild-notifier-keyword-blacklist
(lambda (it)
(-contains-p org-wild-notifier-keyword-blacklist
(org-entry-get it "TODO")))]
[,org-wild-notifier-tags-blacklist
(lambda (it)
(-intersection org-wild-notifier-tags-blacklist
(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))
(-> (apply '-orfn whitelist-predicates)
(-filter markers))
markers))
(defun org-wild-notifier--apply-blacklist (markers)
"Apply blacklist to MARKERS."
(-if-let (blacklist-predicates (org-wild-notifier--blacklist-predicates))
(-> (apply '-orfn blacklist-predicates)
(-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."
`(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)
(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))))
(defun org-wild-notifier--notify (event-msg)
"Notify about an event using `alert' library.
EVENT-MSG is a string representation of the event."
(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))
(today (org-format-time-string "<%Y-%m-%d>")))
;; seconds-to-time returns also milliseconds and nanoseconds so we
;; have to "trim" the list
(butlast
(seconds-to-time
(org-time-add
;; we get the cycled absolute day (not hour and minutes)
(org-time-from-absolute (org-closest-date timestamp today 'past))
;; so we have to add the minutes too
(+ (* (decoded-time-hour parsed) 3600)
(* (decoded-time-minute parsed) 60))))
2)))
(defun org-wild-notifier--extract-time (marker)
"Extract timestamps from MARKER.
Timestamps are extracted as cons cells. car holds org-formatted
string, cdr holds time in list-of-integer format."
(-non-nil
(--map
(let ((org-timestamp (org-entry-get marker it)))
(and org-timestamp
(cons org-timestamp
(org-wild-notifier--timestamp-parse org-timestamp))))
'("DEADLINE" "SCHEDULED" "TIMESTAMP"))))
(defun org-wild-notifier--extract-title (marker)
"Extract event title from MARKER.
MARKER acts like the event's identifier."
(org-with-point-at marker
(-let (((_lvl _reduced-lvl _todo _priority title _tags)
(org-heading-components)))
title)))
(defun org-wild-notifier--extract-notication-intervals (marker)
"Extract notification intervals from the event's properties.
MARKER acts like the event's identifier. Resulting list also contains
standard notification interval (`org-wild-notifier-alert-time')."
`(,@(-flatten (list org-wild-notifier-alert-time))
,@(-map 'string-to-number
(org-entry-get-multivalued-property
marker
org-wild-notifier-alert-times-property))))
(defun org-wild-notifier--gather-info (marker)
"Collect information about an event.
MARKER acts like event's identifier."
`((times . (,(org-wild-notifier--extract-time marker)))
(title . ,(org-wild-notifier--extract-title marker))
(intervals . ,(org-wild-notifier--extract-notication-intervals marker))))
(defun org-wild-notifier--stop ()
"Stops the notification timer and cancel any in-progress checks."
(-some-> org-wild-notifier--timer (cancel-timer))
(when org-wild-notifier--process
(interrupt-process org-wild-notifier--process)
(setq org-wild-notifier--process nil)))
(defun org-wild-notifier--start ()
"Start the notification timer. Cancel old one, if any.
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)
(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)
'org-wild-notifier--check-events)))))
;;;###autoload
(define-minor-mode org-wild-notifier-mode
"Toggle org notifications globally.
When enabled parses your agenda once a minute and emits notifications
if needed."
:global
:lighter "Org Wild Notifier"
(if org-wild-notifier-mode
(org-wild-notifier--start)
(org-wild-notifier--stop)))
(provide 'org-wild-notifier)
;;; org-wild-notifier.el ends here

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

@ -7,8 +7,8 @@ bgaloc="${XDG_DATA_HOME:-$HOME/.local/share}/bga"
trueloc="$(readlink -f "$1")" &&
case "$(file --mime-type -b "$trueloc")" in
video/* ) ifinstalled mpvpaper && ln -sf "$trueloc" "$bgaloc" && notify-send -i "$bgaloc" "Changing wallpaper..." ;;
image/gif ) ifinstalled mpvpaper && ln -sf "$trueloc" "$bgaloc" && ln -sf "$trueloc" "$bgloc" && notify-send -i "$bgaloc" "Changing wallpaper..." ;;
video/* ) ln -sf "$trueloc" "$bgaloc" && notify-send -i "$bgaloc" "Changing wallpaper..." ;;
image/gif ) ln -sf "$trueloc" "$bgaloc" && ln -sf "$trueloc" "$bgloc" && notify-send -i "$bgaloc" "Changing wallpaper..." ;;
image/* ) ln -sf "$trueloc" "$bgloc" && notify-send -i "$bgloc" "Changing wallpaper..."
if [[ -f "$bgaloc" ]]; then
rm $bgaloc

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 --create-frame --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,12 +15,14 @@ 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)
curl -sL "$url" > "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" && com.github.johnfactotum.Foliate "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" >/dev/null 2>&1 & ;;
*mp3|*flac|*opus|*mp3?source*)
qndl "$url" 'curl -LO' >/dev/null 2>&1 ;;
*)

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..."

View File

@ -0,0 +1,9 @@
#!/bin/sh
# torrent peertube videos, requires the transadd script
# first argument is the video link, second is the quality (360, 480 or 1080)
# 13/07/20 - Arthur Bais
instance=$(echo "$1" | sed "s|/w.\+||")
vidid=$(echo "$1" | sed "s|.\+/||")
link=$(curl -s "$instance/api/v1/videos/$vidid" | grep -o "$instance/download/torrents/.\{37\}$2.torrent")
transadd "$link"

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

@ -1,18 +1,119 @@
#!/bin/sh
# derived from yt-id (https://codeberg.org/Denshi/Scripts) and rssadd (https://github.com/lukesmithxyz/voidrice)
# requirements: `pup` for parsing html
if echo "$1" | grep -q "https*://\S\+\.[A-Za-z]\+\S*" ; then
url="$1"
## kill early
nothing() {
[ -z "$1" ] && printf "Usage: rssadd [RSSURL | YTURL | @Username | XMLFILE | --file FILE | --scan WEBPAGE ]\n" && exit 0
}
nothing "$1"
say() {
printf "$1 \e[1;34m$2\e[0m\n"
}
add_rss() {
RSSFILE="${XDG_CONFIG_HOME:-$HOME/.config}/newsboat/urls"
if awk '{print $1}' "$RSSFILE" | grep "^$url$" >/dev/null; then
say "You already have this RSS feed." "$url"
else
echo "$url" >> "$RSSFILE" && say "RSS feed added." "$url"
fi
}
get_yt_rss() {
BASEURL="https://www.youtube.com/feeds/videos.xml?channel_id="
# invidious
# BASEURL="https://vid.puffyan.us/feed/channel/"
# BASEURL="https://invidious.snopyta.org/feed/channel/"
# BASEURL="https://invidious.kavin.rocks/feed/channel/"
# BASEURL="https://inv.riverside.rocks/feed/channel/"
URL=$url
curl -Ls "$URL" > /dev/null || URL="https://www.youtube.com/$URL"
# Actually getting the ID
ID="$(curl -Ls "$URL" | grep -o -P '.{0,0}channel_id.{0,25}' | sed '$!d' | cut -c 12-35)"
[ -z "$ID" ] && say "Channel not found." && exit 1
#printf "%s\n" $BASEURL$ID
url="$BASEURL$ID"
}
# WIP
find_rss() {
echo "$url" | grep -Pq "(http|https)://" || url="https://$url"
address="$(echo "$url" | sed 's/\/$//')"
#domain="$(echo "$url" | grep -Po '(http://|https://)(?:[^./]+[.])*[^\./]*\.[^\./]*(?=/)')"
domain="$(echo "$url" | grep -Po '(http://|https://)(?:[^./]+[.])*[^\./]*\.[^\./]*')"
read atom < <(curl -Ls "$url" | pup 'link[href][type*="atom+xml"] attr{href}')
read rss < <(curl -Ls "$url" | pup 'link[href][type*="rss+xml"] attr{href}')
[ -n "$atom" ] && url="$atom"
[ -n "$rss" ] && url="$rss"
[ -z "$atom" ] && [ -z "$rss" ] && say "RSS not found." "$url" && exit 1
if echo "$url" | grep -q '^/' ; then
location="$(echo "$url" | sed 's/^\///')"
url="$domain/$location"
fi
echo "$url" | grep -Pq "(http|https)://" || url="$address/$url"
}
# WIP
find_fedi_rss() {
echo "$handle" | grep "^@.*@*\.*" || say "not a handle" "$url" && exit 1
}
add_yt_rss() {
get_yt_rss
add_rss
}
execute_command() {
if echo "$url" | grep -q "^https://www.youtube.com/feeds/videos.xml?*" ; then
add_rss
elif echo "$url" | grep -q "^https://www.youtube.com/*" ; then
add_yt_rss
elif echo "$url" | grep -q "https*://\S\+\.[A-Za-z]\+\S*" ; then
add_rss
elif echo "$url" | grep -q "^@.*" ; then
add_yt_rss
else
url="$(grep -Eom1 '<[^>]+(rel="self"|application/[a-z]+\+xml)[^>]+>' "$1" |
grep -o "https?://[^\" ]")"
echo "$url" | grep -q "https*://\S\+\.[A-Za-z]\+\S*" ||
notify-send "That doesn't look like a full URL." && exit 1
url="$(grep -sEom1 '<[^>]+(rel="self"|application/[a-z]+\+xml)[^>]+>' "$url" | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*")"
echo "$url" | grep -Eq "(http|https)://[a-zA-Z0-9./?=_%:-]*" && add_rss ||
say "That doesn't look like a full URL." "$url"
#TODO be more verbose
fi
}
RSSFILE="${XDG_CONFIG_HOME:-$HOME/.config}/newsboat/urls"
if awk '{print $1}' "$RSSFILE" | grep "^$url$" >/dev/null; then
notify-send "You already have this RSS feed."
else
echo "$url" >> "$RSSFILE" && notify-send "RSS feed added."
fi
execute_loop() {
url="$1" && execute_command
}
case "$1" in
-h|--help)
printf "Usage: rssadd [RSSURL | YTURL | @Username | XMLFILE | --file FILE | --scan WEBPAGE ]
USAGE
-s, --scan
scan webpages for rss or atom links.
format can be a domain name or http/https links
--file
input from file seperated with lines\n"
exit 0
;;
-s|--scan)
url="$2"
nothing "$url"
find_rss
execute_command
exit 0
;;
--file)
nothing "$2"
while IFS= read -r line; do
execute_loop "$line"
done < "$2"
exit 0
;;
esac
url="$1"
execute_command

View File

@ -0,0 +1,35 @@
#!/bin/sh
[ -z "$1" ] && printf "Usage: screenshot.sh [output|active|window] \n" && exit 0
file=$HOME/Pictures/Screenshots/$(date +'%Y-%m-%d_%H.%M.%S_%Z').png
if [[ -n "$1" ]]; then
case "$1" in
output) grimshot save output $file
break
;;
active) grimshot save active $file
break
;;
window) grimshot save window $file
break
;;
screen) grimshot save screen $file
break
;;
*)
echo $@ is not an argument
break
;;
esac
fi
if [[ -N $file ]]; then
echo "screenshot saved."
notify-send "screenshot saved." -i $file
update-recentf.py $file
exit 0
else
echo "screenshot failed."
exit 1
fi

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,30 +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\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" | dmenu -i -l 15 -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") swaymsg reload ;;
'🐻 hibernate') $ctl hibernate -i ;;
'💤 sleep') $ctl suspend -i ;;
'🔃 reboot') $ctl reboot -i ;;
'🖥️ shutdown') $ctl poweroff -i ;;
'📺 display off') swayidle -w timeout 1 'wlopm --off "*"' resume 'wlopm --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') idle ;;
' kill swayidle') killall swayidle ;;
' 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' ;;
' 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

2
home/default/.local/bin/timer Executable file
View File

@ -0,0 +1,2 @@
#!/bin/bash
termdown $@ && mpv ~/resources/sounds/alerts/codec-mgs-classic-woalert.opus >/dev/null 2>&1

View File

@ -0,0 +1,2 @@
#!/bin/bash
termdown $@ && mpv --loop ~/resources/sounds/alerts/codec-mgs-classic-woalert.opus >/dev/null 2>&1

View File

@ -0,0 +1,8 @@
#!/bin/sh
# Mimeapp script for adding torrent to deluge, but will also start the daemon first if not running.
pgrep deluged >/dev/null || (deluged && notify-send "Starting deluge daemon...")
# BUG will always return 1 if under v2.1.2, see https://dev.deluge-torrent.org/ticket/3582#ticket
if deluge-console add "$@" ; then notify-send "🔽 Torrent added." ; else notify-send "🔽 failed to add, maybe it exists?" ; fi

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

@ -0,0 +1,13 @@
[Desktop Entry]
Name=EPUB Reader
GenericName=eBook Viewer
Comment=View eBooks
Categories=Office;Viewer;
Exec=com.github.johnfactotum.Foliate %U
Icon=com.github.johnfactotum.Foliate
Terminal=false
Type=Application
[Desktop Action new-window]
Name=Library
Exec=com.github.johnfactotum.Foliate --library

View File

@ -0,0 +1,4 @@
[Desktop Entry]
Type=Application
Name=File Manager
Exec=/usr/bin/foot -e lf %u

View File

@ -0,0 +1,4 @@
[Desktop Entry]
Type=Application
Name=Image viewer
Exec=/usr/bin/nsxiv -a %f

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,5 @@
[Desktop Entry]
Type=Application
Name=Mail
#Exec=/usr/bin/foot -e neomutt %u
Exec=thunderbird-wayland --name thunderbird-wayland %u

View File

@ -0,0 +1,4 @@
[Desktop Entry]
Type=Application
Name=PDF reader
Exec=/usr/bin/zathura %u

View File

@ -0,0 +1,4 @@
[Desktop Entry]
Type=Application
Name=RSS feed addition
Exec=/usr/bin/env rssadd %U

View File

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

View File

@ -0,0 +1,4 @@
[Desktop Entry]
Type=Application
Name=Text editor
Exec=/usr/bin/foot -e nvim %u

View File

@ -0,0 +1,5 @@
[Desktop Entry]
Type=Application
Name=Torrent
Exec=/usr/bin/env transadd %U
#Exec=deluge-gtk %U

View File

@ -0,0 +1,4 @@
[Desktop Entry]
Type=Application
Name=Video viewer
Exec=/usr/bin/mpv -quiet %f

View File

@ -0,0 +1,4 @@
[Desktop Entry]
Type=Application
Name=Whatsapp
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

@ -0,0 +1,363 @@
^_^ Overjoyed (2)
(╯°□°)╯︵ ┻━┻ Flipping Table (3)
ლ(ಠ益ಠლ) But At What Cost
(//_^) Emo (5)
ʕ •ᴥ•ʔ Koala (3)
(っ^‿^)っ Kirby (5)
[¬º-°]¬ Zombie (2)
(●∈∋●) Bird (5)
ಠ_ಠ Disapproval
T.T Sad (2)
◤◡ᴥ◡◥  Dog (4)
(∩`-´)⊃━☆゚.*・。゚ Wizard
^-^ Happy (7)
ᕦ(ò_óˇ)ᕤ Flexing (3)
♪┏(・o・)┛♪ Dancing (8)
( ͡° ͜ʖ ͡°) Smiling (2)
/人◕ ‿‿ ◕人\ Kyubey
༼ ༎ຶ ෴ ༎ຶ༽ Distraught
ᒄ₍⁽ˆ⁰ˆ⁾₎ᒃ♪♬ Frosty the Snowman (2)
(╯°□°)╯︵ ┻━┻ Flipping table (2)
<(^oo^)> Pig (3)
¯\_(ツ)_/¯ Shrugging (2)
U=・ x ・=U Rabbit (2)
⊂((・▽・))⊃ Hug me (2)
V●ᴥ●V Doggy (2)
(=^_^=) Bunny (3)
<コ:彡 Squid (2)
-_-; Anime Sweat Drop (2)
(°̥̥̥̥̥̥̥̥ᴗ°̥̥̥̥̥̥̥̥) Happy crying
(=^・ェ・^=) Kitty (2)
(((༼•̫͡•༽))) Ghost (2)
(-‸ლ) Whoops
(=^ェ^=) Cat (4)
( ´-ω・)︻┻┳══━一 Sniper
⊆☉ᴥ☉⊇ Bear (7)
  ◕_◕ ༽つ Take my energy
(  ̄┏_┓ ̄) Mustache (2)
(;´Д`) Giving Up
( ͡° ʖ̯ ͡°) Disgruntled
✌(◕‿-)✌ Peace (3)
ಠ_ರೃ Monocle (2)
T^T Crying (5)
ᘛ⁐̤ᕐᐷ Chameleon
  ◕_◕ ༽つ Gimme
ლ(ಠ益ಠ)ლ Anger
(ง •̀_•́)ง Feisty
(っ⌒‿⌒)っ Hug (3)
ϵ( 'Θ' )϶ Fish (3)
(^▽^) Laughing (5)
¯\(°_o)/¯ Confused (4)
̿’̿’\̵͇̿̿\З=( ͠° ͟ʖ ͡°)=Ε/̵͇̿̿/’̿̿ ̿ ̿ ̿ ̿ ̿ Outlaw
o(^▽^)o Pumped (2)
.∵・(゚Д゚) Scared (2)
(*☉౪ ⊙。)ノ Imbecile (2)
d-(^.^)z Thumbs Up (2)
(>_<) Painful
(¬_¬") Annoyed (4)
(´╹〽╹`) Worried (4)
(o^-^o) Pikachu (2)
(▀̿Ĺ̯▀̿ ̿) Deal with it
(∩`-´)⊃━☆゚.*・。゚ Magic Attack
꒡ᘦ̲꒡ Sleeping (5)
(‾ʖ̫‾) Lethargic
^_^; Guilty
ヽ(`⌒´メ) Angry (8)
^^ Blissful
^_^/ High Five (2)
ʕ•͡ᴥ•ʔ Polar bear
❆❅❉ Snowing
ヽ(★ω★) Excited
UU Puppy
⊂(^(工)^)⊃ Teddy bear
(≧∇≦)/ Joyful (2)
◦°˚\☺/˚°◦ Playing in the snow
(╯°□°)╯︵ ʞooqǝɔɐɟ Flipping Facebook
(;-_-) Giving up
⊙▂⊙ Shocked
|∴め ϖ め∴| SpongeBob SquarePants
◔̯◔ Rolling Eyes
⊂(◜ᴥ◝)つ Teddy Bear
ε=(☉_☉) Accidental farting
(ಥ﹏ಥ) Devastated (2)
(•͡.•͡) Skeptical
ε=┏( >_<)┛ Running (5)
┬─┬︵/(.□.)╯ Table Flips You
〠_〠 Tired (3)
∊ಠ_ಠ∍ Distressed
V=(° °)=V Crab (2)
ᶘ ᵒᴥᵒᶅ Seal (2)
Ƹ̵̡Ӝ̵̨̄Ʒ Butterfly
(- o - ) zzZ ☽ Sleepy
o。(ー。ー)y Smoking (4)
(。々°) Herp Derp
-_-* Frustrated (3)
(+[__]∙:∙) PlayStation Portable
(V) (°,,,,°) (V) Zoidberg
/|\( ;,; )/|\ Bat
◖㈠ ω ㈠◗ Panda
\m/d(^_^)b\m/ Rocking Out
ヽ(゚Д゚)ノ Freak Out (2)
(ノ゚0゚)ノ~ Yoo-Hoo
¤\( `⌂´ )/¤ Lifting weights
(ò_ó) Furious
( ˘ ³˘)♥ Kiss me
(^▽^) Cheerful (3)
(⌒ ͜ʖ⌒)b Attentive
ᕦ❍ᴗ❍ᕤ Muscular Person
(´>_●)メ(●_<) Sword Fighting
:-Þ Teasing
( ^o^)___ Bowling
(#×_×) Dead (2)
(。・_・)ノ”【】 Painting
/。\) Shy (5)
⎰≀.☮-☮≀⎰ John Lennon
─=≡Σ(([ ⊐•̀⌂•́]⊐ Superhero
(¬з¬)σ Pointing (2)
(・д・)} On The Phone (3)
㐈⦁ཽし⦁ཽ㐈  Larry David
⨌⨀_⨀⨌ Benjamin Franklin
(☄ฺ◣д◢)☄ฺ Scaring
ƪ(˘▽˘ƪ) Worshiping
[•.•ิ] Huh
(◐‿◑) Crazy
(-_- ) Thank You
(_ε_) Kiss my butt
(⊃‿⊂) Anticipation
(* ̄m ̄) Dissatisfied
Q('.'Q) Put Em Up
(^o)(^0^)(o^) Caroling
( ̄~ ̄) Unimpressed
༼ঢ_༽ঢ༽ Perplexed
(。♥‿♥。) Smitten
( ̄□ ̄;) Surprised
(^o^) Singing (3)
(:3 っ)っ Walrus
( `_)乂(_' ) Arm wrestle
(ง •̀ゝ•́)ง Fighting (2)
uwu Happy Anime Face
└(^o^ )( ^o^)┘ Best buddies
d^_^b DJ
( --)/ ==卍 Ninja Star
:。ミ Octopus
(´・ω・`) Snubbing (2)
♪(●′▽`)ノ Good Night
(#^.^#) Embarrassed (3)
ಥ_ಥ Bawling (3)
†_(゚ー゚*)β Exorcism
੯ू•́ू ໒꒱⁼³₌₃ Sonic the Hedgehog
(^‿◕) Winking (3)
(″・ิ_・ิ)っ Wait (3)
。◕‿◕。 Gleeful
ヽ( ★ω★) Pumped up
_〆(。。) Writing (2)
(∿°○°)∿  ǝʌol Heartbroken
^;;^ Spider
(⓪益⓪) Staring (2)
( ̄┏∞┓ ̄) Fu Manchu Man
( • ∀•)っθΘʘ Hiding Easter eggs
_φ( °-°)/ Doing Homework
◖ර◞ʖ◟ර◗ Grandma
¬.¬ Whatever (3)
⫷ °⧭° ⫸ Clown
(♥_♥) In Love
>.< Upset (2)
( ◢д◣) Depressed (4)
ᕕ( ᐛ )ᕗ Celebrating
(¬‿¬) Cunning
└(^o^)┐ Grooving (3)
゜・_・゜ Raving
ᕦ◉▿◉ᕤ Owl (2)
(O) Celebrate
(*(OO)*) Piggy (2)
˃ʍ˂ Enraged (2)
(ू˃̣̣̣̣̣̣︿˂̣̣̣̣̣̣ ू) Sobbing (3)
( ^^)人(^^ ) Best Buds
└@(・ェ・)@┐ Beefcake
(☉__☉”) Yikes
(╯˘ -˘ )╯ Praying (2)
ε=┌( ≧▽)┘ Elated
( •_•)O °Q(•_• ) Playing Ping Pong
∋(°O°)∈ Blowfish
(一_一) Ashamed (4)
{♥‿♥} Lovestruck
๏-) Cyclops
(o ̄∇ ̄)=◯)`ν゜)・ Punching (6)
┬─┬ノ( º _ º) Putting Table Back (2)
(~_(]=--Z(◡˘) Pie Fight
((((((^_^;) Evading
(o^)/°⊥\(^o) Volleyball
-{'''|'''|'''|''']=[] Syringe
[^._.^]ノ彡 Nyan Cat
---(o_ _)o Tripping (2)
┬┴┬┴┤(・_├┬┴┬┴ Snooper
(ㆆ_ㆆ) Unamused
(✿◠‿◠)  Hippie
ヾ(* ̄O ̄)ツ Yelling
(ɔ◔‿◔)ɔ ♥ Loving
(ノ-o-)ノ 中 Olympic Hammer Throw
(/ω・\) Peering
(´・ω・)っ由 Gift
[-_-]~ Ninja
(シ_ _)シ Apology (2)
∋∞(●゚v゚)∞∈ Pigtails
(>o<)ρミ┳┷┳゜ Table Tennis
(^̮^) Pleased (2)
♪~( ̄ε ̄;) Whistling
( ̄▼ ̄) Big Grin
⋟^≏^⋞ Kitty Cat
( ̄へ ̄) Discontent
(*・_・)ノ⌒* Throwing Away
(*@_#) Beaten Up
(p_-) Thinking
(。_°)☆ Punched
♥‿♥ Enamored
ε-(´・`) フ Phew
༼ঢ_㇁ঢ༽ Bad hair day
(づ ̄ ³ ̄)づ Smooch (3)
O(<>'<>)O Aang
(_ _)..ooOO Dreaming
┳┻┳° Ping Pong table
^o^ Mog
(゚皿゚)r┏┳-* Shooting (2)
m( ゚皿゚)m★━━ Laser
٩◔̯◔۶ Eye Roll With Hands Up
ヽ(´Д`ヽミノ´Д`) Frantic (2)
(-ε- ) Pucker up (3)
ヽ(⌐■_■)ノ♪♬ Boogie down
「(°ヘ°) Puzzled
d(^_^)b Listening to Music
( -_-)旦~ Drinking
<_< Looking (4)
(( _ _)☆ ≡〇 Header
^)_(^ Chubby
(๑´•.̫ • `๑) Blushing
(。▼皿▼) Darth Vader
(╬☉Д⊙ฺ) Cyborg
(ʘ‿ʘ) Smile
ε=ε=ε=┌(๑ʘ∀ʘ)┘ Sprinting
ƪ(˘⌣˘)ʃ Raise the roof
( ˘︹˘ ) Smug
(▰˘◡˘▰) Satisfied
(¬、¬) Shifty
¯(°_o)/¯ Confused shrug
✖‿✖ Dead person
。_°☆(-  ) Punch
(ɔˆ ³(ˆˆc) Loving couple
(*▿▿* ƪ) Vampire
o(^^o)(o^^)o Hopeful
___ψ(‥ ) Studying
_φ(°-°=) Doing homework
@( o・ω・)@ Monkey
(╭ರ_•́) Inquisitive
੯ू‵ू ໒꒱ Poodle
(*^^)^*) Kiss (5)
Meh
(/。\) Frightened
:þ Playful
(>^_^)><(^o^<) Hugging
(-_ゞ Groggy
(*^o^)人(^o^*) Buddies
(●´ノω`)コ Whispering (2)
o(´^)o Reluctant
( つ Д `) Wiping Tears
(o´Υ・)ノ・ Help (2)
(。・ˇдˇ・。) Pompous
(´`*) Friendly
ヘ(。□°)ヘ Psycho
(人’∀’) Precious
(っ˘ڡ˘ς) Yummy
┗(・ω・;)┛ How Should I Know
(о^ω^о) Giggling
(´ー`)┌フッ Golf Clap
\\(<.<|>.>)// Panicking
^(#`∀´)_Ψ Demon
(╯‵Д′)╯ Scary
:-{  -__-: Stinky
ಠᴗಠ Scheming
<(; ̄ ・ ̄) Scratching
  Glad
(╯_╰) Bummed out
┗( ●-﹏ `。)づ Hurt (2)
(-_-)# Girl
8(>_<)8 Jealous
(*°∀°)=3 Infatuated (3)
( ^_^) Waving
o(^_-)O Boxer
{{|└(>o< )┘|}} Up In Arms
(^^)// Applause (2)
( `_)?(_' ) Dueling
(´~`) Weary
v(^_^)v Victory (3)
(ノ_ _)ノ Surrender
<( ・ェ-)<} Bow and Arrow
( o´)_θ☆ Kicking
(-□-)︵* Blowing a Kiss
|д・) Hiding (4)
(´Д゜)/゜⌒。 Discarding
ʕʔ Bread
(ɔ˘з˘)ɔ Romantic
ʕ •́؈•̀) Winnie the Pooh
 ì_í)=óò=(ì_í ò) Bro Pound
ヾ(`ε´)ノ Booing
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅| Stereo
ʘ‿ʘ Eager
:(¦) Frog
( ^)/占~~~ Banksy
(;´༎ຶД༎ຶ`) Weeping (2)
⊂ •͡˘∠•͡˘ ⊃ Suspicious
( ° ᴗ°)~ð  Proposal
(๑╹ڡ╹๑) Tasty
(¬_¬ ) Neglected
ʕु•̫͡•ʔु Bear cub (2)
┌|°з°|┘ Cutting a rug
(⊙_◎) Crazed
(✖╭╮✖) Deceased
o ´ )oΨ Satan
˙ ͜ʟ˙ Content
( ˇ෴ˇ ) Hipster
♫.(◠౪◠).♫ Jamming to music
∊♡_ᴥ_♡∍ Puppy Love
L(´L) Oh No! (2)
(;´ρ`) Yawning
(╯ნ_㇁ნ)╯ Defeated
(.〜◍`皿′◍〜.) Livid (2)
ᡊ|◔じ◔|ᡊ  Woody Allen
✌(გ_㇁გ)✌ Ringo Starr
╹﹏╹ Cold
☉ϖ☉ Lobster
(๑≖ิิ益≖ิ๑) Evil Laugh
(((☎))) Phone
(○`д´)ノシ Σ(っ゚Д゚)っ Chasing
o(>< )o⌒* Mad (3)
ლ(´ڡ`ლ) Licking
⪿ ↂ ˒̫̮ ↂ ⫀ Elton John
(•ᴥ• )́`́'́`́'́⻍ Porcupine
且_(゚◇゚;)ノ゙ Waiter
◖⎚∠⎚◗ Geek
-ˆ ω ˆ- Kitten
•:_:• Nagato
ε=┌(^-^)┘ Skipping
(+.+)(-.-)(_ _) Falling Asleep
[ ± _ ± ] Sick
〜〜(/ ̄▽)/ 〜ф Chasing A Butterfly
(0´) Fed Up
¥[*.*]¥ Robot
(*・)σσ(*゜O゜) Poking
( ̄ー ̄(_ _( Nodding
▼o・_・o▼ Hello
(`_^) Wink
/( _0_) ̄θ☆≡≡○ Scissor Kick
ヽ(´ー`)┌ Mellow
(^ _ ^)/~~ Goodbye
*・)「」「」 Magic Casting
( `皿´)。ミ/ Hitting
[]゛7(∀゜* Dialing
(((((^_^) Teleporting
( ̄ー ̄)//”” Clapping
(。。;)(-_-) Comforting
(*  ̄)( ̄ *)  Kissing
(^_^)ッ☆( ゜o゜) Slapping
Good Morning
\_(´▽`)♪_/ Bathtub
ඞ sus

612
instructions.org Normal file
View File

@ -0,0 +1,612 @@
#+title: Instructions
** 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)
this sections assumes that you know how to use sway (window manager), neovim (text editor), basic terminal shell commands, burn an iso to disk, as well as using the anaconda installer.
get the os image (Fedora Everything) from here https://alt.fedoraproject.org/en/ and burn it to your usb/other.
*** verifying the iso file
1. Download the checksum file (from https://alt.fedoraproject.org/en/) into the same directory as the image you downloaded.
2. Import Fedora's GPG key(s)
#+BEGIN_SRC sh
curl -O https://fedoraproject.org/fedora.gpg
#+END_SRC
3. Verify the CHECKSUM file is valid
#+BEGIN_SRC sh
gpgv --keyring ./fedora.gpg *-CHECKSUM
#+END_SRC
4. Verify the checksum matches
#+BEGIN_SRC sh
sha256sum -c *-CHECKSUM
#+END_SRC
*** installing fedora and setting up btrfs with snapshots
differences/notes before continuing with the installation:
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
- ~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=
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
#+BEGIN_SRC sh
# make a user and add to the wheel group
useradd -m -g wheel user_name
# set a password
passwd user_name
#+END_SRC
** prerequisites
for building/installing packages, also some dependencies for doomemacs, and zsh.
#+BEGIN_SRC sh
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
** installing dotfiles
#+BEGIN_SRC sh
# getting dotfiles
git clone https://gitea.bubbletea.dev/cho/dotfiles ~/.dots
cp -rv ~/.dots/home/default/.* ~/
# or using stow
# make sure you make directories you don't want as symlinks
mkdir -p ~/.local/share/applications
mkdir -p ~/.local/bin
mkdir -p ~/.config
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
*** how to unstow dotfiles
#+BEGIN_SRC sh
cd ~/.dots/home/ && stow -D default --target=$HOME/
#+END_SRC
** setting up rpmfusion
from https://rpmfusion.org/Configuration and https://rpmfusion.org/Howto/Multimedia
#+BEGIN_SRC sh
# rpmfusion
sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
sudo dnf groupupdate core
# multimedia
sudo dnf swap ffmpeg-free ffmpeg --allowerasing
sudo dnf groupupdate multimedia --setop="install_weak_deps=False" --exclude=PackageKit-gstreamer-plugin
sudo dnf groupupdate sound-and-video
#amd
sudo dnf swap mesa-va-drivers mesa-va-drivers-freeworld
sudo dnf swap mesa-vdpau-drivers mesa-vdpau-drivers-freeworld
#dvd
sudo dnf install rpmfusion-free-release-tainted
sudo dnf install libdvdcss
# non-free firmware
sudo dnf install rpmfusion-nonfree-release-tainted
sudo dnf --repo=rpmfusion-nonfree-tainted install "*-firmware"
#+END_SRC
** installing dnf packages
this will install programs, as well as (99% of) dependencies of shell scripts and configuration included within lf (file manager)
the other dependency not included in packages.txt is `pup` (included in a section below)
#+BEGIN_SRC sh
sudo dnf install -y $(cat ~/.dots/packages.txt)
#+END_SRC
** 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/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
** Make zsh the default shell for the user.
#+BEGIN_SRC shell
name=$USER
chsh -s /bin/zsh "$name" >/dev/null 2>&1
sudo -u "$name" mkdir -p "/home/$name/.cache/zsh/"
sudo -u "$name" mkdir -p "/home/$name/.config/abook/"
sudo -u "$name" mkdir -p "/home/$name/.config/mpd/playlists/"
#+END_SRC
at this point, you should logout and login again to set the variables.
** librewolf (browser)
from https://librewolf.net/installation/fedora/
#+BEGIN_SRC sh
sudo dnf config-manager --add-repo https://rpm.librewolf.net/librewolf-repo.repo
sudo dnf install librewolf
#+END_SRC
*** 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 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
#+END_SRC
** lf (file manager)
this fork of lf allows for sixel graphics, which allows you to see images in terminals that supports sixel
from https://github.com/horriblename/lf#installation
#+BEGIN_SRC sh
env CGO_ENABLED=0 go install -ldflags="-s -w" github.com/horriblename/lf@latest
mkdir -p $HOME/.cache/lf
#+END_SRC
** interception tools (keyboard input mappings)
change caps lock to escape (when pressed) and mod (when held down)
INSTALL FROM SOURCE
#+BEGIN_SRC sh
git clone https://gitlab.com/interception/linux/tools.git interception-tools
cd interception-tools
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
cd build
sudo make install
#+END_SRC
#+BEGIN_SRC sh
git clone https://gitlab.com/interception/linux/plugins/dual-function-keys.git
cd dual-function-keys
make && sudo make install
#+END_SRC
it's a good idea to install these as well, if anything doesn't compile.
#+BEGIN_SRC sh
sudo dnf groupinstall "Development Tools" "Development Libraries"
#+END_SRC
*** installing the configuration
#+BEGIN_SRC sh
sudo cp -rv ~/.dots/etc/interception /etc/
sudo cp ~/.dots/etc/systemd/system/udevmon.service /etc/systemd/system/
# enable
sudo systemctl enable udevmon.service
#+END_SRC
** sway notifications
from https://github.com/ErikReider/SwayNotificationCenter#fedora
#+BEGIN_SRC sh
dnf copr enable erikreider/SwayNotificationCenter
dnf install SwayNotificationCenter
#+END_SRC
** 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)
I'm using this for sc files
from https://github.com/andmarti1424/sc-im/wiki/Installing-on-Fedora-27
#+BEGIN_SRC sh
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)
#+BEGIN_SRC sh
dnf copr enable mamg22/nsxiv
dnf install nsxiv
#+END_SRC
** pip packages
*** keepmenu (dmenu keepassxc client)
https://github.com/firecat53/keepmenu/blob/main/docs/install.md#install-recommended
#+BEGIN_SRC sh
pip install --user keepmenu
#+END_SRC
*** pulsemixer (pulseaudio controller)
#+BEGIN_SRC sh
pip install --user pulsemixer
#+END_SRC
*** termdown (terminal timer/stopwatch)
#+BEGIN_SRC sh
pip install termdown
#+END_SRC
** go packages
*** pup
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`)
#+BEGIN_SRC sh
# install dependencies
sudo dnf install meson ninja-build pkg-config wayland-protocols-devel wayland-devel mpv-devel wlroots-devel
# Clone
git clone --single-branch https://github.com/GhostNaN/mpvpaper
# Build
cd mpvpaper
meson build --prefix=/usr/local
ninja -C build
# Install
sudo ninja -C build install
#+END_SRC
*** 7-zip
get the downloads from https://www.7-zip.org/download.html
if you're using modern hardware, it's usually 64-bit linux x86-x64
#+BEGIN_SRC sh
# downloading and extracting the file
cd ~/Downloads/
curl -O <download-url>
mkdir 7-zip/
cd 7-zip/
tar -xvf ../<filename>.tar.xz
# put it into a PATH directory
sudo cp 7zz /usr/local/bin/
#+END_SRC
** 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
from https://flatpak.org/setup/Fedora
#+BEGIN_SRC sh
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
#+END_SRC
** setting up virtualbox
#+BEGIN_SRC sh
sudo usermod -a -G vboxusers default
#+END_SRC
** flatpak packages
remember to set permissions with Flatseal, especially access to personal files according to what you want the software to have before launching them.
*** flatseal
#+BEGIN_SRC sh
flatpak install -y com.github.tchx84.Flatseal
#+END_SRC
*** Unity
#+BEGIN_SRC sh
flatpak install flathub com.unity.UnityHub
#+END_SRC
*** Foliate (Epub reader)
#+BEGIN_SRC sh
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 org.freedesktop.Platform.VulkanLayer.OBSVkCapture obs-studio-plugin-vkcapture com.obsproject.Studio
#+END_SRC
*** steam
#+BEGIN_SRC sh
flatpak install -y com.valvesoftware.Steam
#+END_SRC
*** rpsc3
#+BEGIN_SRC sh
sudo flatpak install -y net.rpcs3.RPCS3
#+END_SRC
limits.conf settings https://github.com/RPCS3/rpcs3/issues/9328
#+BEGIN_SRC sh
sudo su
printf '* hard memlock unlimited\n* soft memlock unlimited' >> /etc/security/limits.conf
#+END_SRC
*** cemu
#+BEGIN_SRC sh
flatpak install flathub info.cemu.Cemu
#+END_SRC
*** discord
#+BEGIN_SRC sh
flatpak install flathub com.discordapp.Discord
#+END_SRC
*** spotify
#+BEGIN_SRC sh
flatpak install flathub io.github.hrkfdn.ncspot
flatpak install flathub com.spotify.Client
#+END_SRC
* 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
#+BEGIN_SRC sh
sudo cp ~/.dots/usr/local/bin/radcard* /usr/local/bin/
sudo cp ~/.dots/etc/systemd/system/radcard.service /etc/systemd/system/
sudo systemctl enable --now radcard.service
#+END_SRC
you can check the status with `radcard.sh get` , make sure the output is as follows:
#+BEGIN_SRC
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 / 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

164
packages.txt Normal file
View File

@ -0,0 +1,164 @@
pip
curl
ca-certificates
nss
nss-pem
make
automake
gcc
gcc-c++
kernel-devel
git
zsh
ntpsec
dnf-plugins-core
golang
flatpak
cmake
libevdev-devel
systemd-devel
yaml-cpp-devel
boost-devel
ripgrep
fd-find
ShellCheck
tar
pip
npm
polkit
polkit-gnome
fontawesome-fonts
chafa
bc
dosfstools
libnotify
exfatprogs
swaybg
ffmpeg
ffmpegthumbnailer
mcomix3-thumbnailer
gnome-kra-ora-thumbnailer
gnome-epub-thumbnailer
webp-pixbuf-loader
gnome-keyring
wl-clipboard
neovim
mpd
mpc
mpv
man-db
ncmpcpp
newsboat
google-noto-fonts-common
google-noto-emoji-fonts
fcitx5
fcitx5-mozc
ntfs-3g
wireplumber
pipewire-pulseaudio
abook
unzip
lynx
zathura-plugins-all
zathura-pdf-mupdf
krita
poppler
mediainfo
atool
fzf
bat
brightnessctl
task-spooler
htop
waybar
dmenu
swaylock
swaybg
swayidle
socat
moreutils
isync
msmtp
pass
keepassxc
NetworkManager-tui
wtype
fortune-mod
cowsay
perl-File-MimeInfo
syncthing
deluge
obs-studio
grimshot
mumble
dino
gammastep
sqlite
gnome-themes-extra
adwaita-qt5
adwaita-qt6
ImageMagick
alerque-libertinus-fonts
godot
terminus-fonts
terminus-fonts-console
pcmanfm
materia-gtk-theme
papirus-icon-theme
GraphicsMagick
microcode_ctl
wget
neofetch
dnf-utils
steam-devices
thunderbird
thunderbird-wayland
hugo
torbrowser-launcher
stow
dolphin-emu
vulkan-validation-layers
xorg-x11-drv-amdgpu
amd-gpu-firmware
emacs
tmux
gamescope
dotnet
mono-devel
@virtualization
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

Some files were not shown because too many files have changed in this diff Show More