Compare commits

...

14 Commits

18 changed files with 4631 additions and 51 deletions

View File

@ -179,7 +179,8 @@ macro pager sb "<pipe-entry>~/bin/stars $my_blue_star<enter><next-undeleted>" "M
macro pager sd "<pipe-entry>~/bin/stars $my_del_star<enter><pipe-entry>~/bin/del_stars<enter><next-undeleted><sync-mailbox>" "Remove color marking from the current message"
macro index,pager \ci "<pipe-message> less<Enter>" "call less to extract URLs out of a message"
source ~/.mutt/solarized-dark-256-colors.muttrc
source ~/.mutt/mutt-gruvbox/colors-gruvbox-shuber.muttrc
#source ~/.mutt/solarized-dark-256-colors.muttrc
#source ~/.mutt/solarized-light-256-colors.muttrc
#source ~/.mutt/solarized-light-16-colors.muttrc
# Colors for items in the index

View File

@ -3,7 +3,7 @@
# By Nicholas Marriott. Public domain.
#set -g default-terminal "xterm-256color"
set -g default-terminal "alacritty"
set -g default-terminal "tmux-256color"
#set -g default-terminal "screen"
#set -g default-terminal "rxvt-unicode-256color"
#set -g default-terminal "tmux-256color"
@ -113,22 +113,23 @@ bind s choose-tree -sZ -O name
# This tmux statusbar config was created by tmuxline.vim
# # on Sun, 20 Oct 2019
#
set -g status-justify "left"
set -g status "on"
set -g status-left-style "none"
set -g message-command-style "fg=colour231,bg=colour31"
set -g status-right-style "none"
set -g pane-active-border-style "fg=colour254"
set -g status-style "none,bg=colour234"
set -g message-style "fg=colour231,bg=colour31"
set -g pane-border-style "fg=colour240"
set -g status-right-length "100"
set -g status-left-length "100"
setw -g window-status-activity-style "none"
setw -g window-status-separator ""
setw -g window-status-style "none,fg=colour250,bg=colour234"
set -g status-left "#[fg=colour16,bg=colour254,bold] #S #[fg=colour254,bg=colour234,nobold,nounderscore,noitalics]"
set -g status-right "$wg_is_keys_off #[fg=colour236,bg=colour234,nobold,nounderscore,noitalics]#[fg=colour247,bg=colour236] %Y-%m-%d  %H:%M #[fg=colour252,bg=colour236,nobold,nounderscore,noitalics]#[fg=colour235,bg=colour252] #h "
setw -g window-status-format "#[fg=colour244,bg=colour234] #I #[fg=colour250,bg=colour234] #W "
setw -g window-status-current-format "#[fg=colour234,bg=colour31,nobold,nounderscore,noitalics]#[fg=colour117,bg=colour31] #I #[fg=colour231,bg=colour31,bold] #W #[fg=colour31,bg=colour234,nobold,nounderscore,noitalics]"
source-file ~/.tmux_colors.conf
#set -g status-justify "left"
#set -g status "on"
#set -g status-left-style "none"
#set -g message-command-style "fg=colour231,bg=colour31"
#set -g status-right-style "none"
#set -g pane-active-border-style "fg=colour254"
#set -g status-style "none,bg=colour234"
#set -g message-style "fg=colour231,bg=colour31"
#set -g pane-border-style "fg=colour240"
#set -g status-right-length "100"
#set -g status-left-length "100"
#setw -g window-status-activity-style "none"
#setw -g window-status-separator ""
#setw -g window-status-style "none,fg=colour250,bg=colour234"
#set -g status-left "#[fg=colour16,bg=colour254,bold] #S #[fg=colour254,bg=colour234,nobold,nounderscore,noitalics]"
#set -g status-right "$wg_is_keys_off #[fg=colour236,bg=colour234,nobold,nounderscore,noitalics]#[fg=colour247,bg=colour236] %Y-%m-%d  %H:%M #[fg=colour252,bg=colour236,nobold,nounderscore,noitalics]#[fg=colour235,bg=colour252] #h "
#setw -g window-status-format "#[fg=colour244,bg=colour234] #I #[fg=colour250,bg=colour234] #W "
#setw -g window-status-current-format "#[fg=colour234,bg=colour31,nobold,nounderscore,noitalics]#[fg=colour117,bg=colour31] #I #[fg=colour231,bg=colour31,bold] #W #[fg=colour31,bg=colour234,nobold,nounderscore,noitalics]"
#

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 KiB

34
2023-03-25_history.paste Normal file
View File

@ -0,0 +1,34 @@
typeset -p SAVEHIST HISTFILE HISTSIZE:
typeset -i10 SAVEHIST=99999
typeset HISTFILE=/home/trey/.zhistory
export -i10 HISTSIZE=1000000
setopt:
autocd
nobeep
braceccl
correct
extendedglob
extendedhistory
histexpiredupsfirst
histignorealldups
histignorespace
histverify
incappendhistory
interactive
interactivecomments
login
nonomatch
nullglob
promptbang
shinstdin
vi
ls -alh .zhistory:
-rw-r--r-- 1 trey trey 0 Mar 25 10:04 .zhistory
lsattr .zhistory:
---------------------- .zhistory

BIN
2023-04-28_unixporn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 KiB

View File

@ -0,0 +1,61 @@
auto_save.session = true
backend = webengine
bindings.commands = {"normal": {"<Alt+j>": "tab-focus", "gc": "spawn --userscript qute-bitwarden --password-prompt-invocation /home/trey/bin/qutebrowser-bitwarden-prompt.sh --auto-lock 0", "gl": "spawn --userscript qute-bitwarden --password-prompt-invocation /home/trey/bin/qutebrowser-bitwarden-prompt.sh --auto-lock 86400", "gp": "spawn --userscript qute-bitwarden --password-prompt-invocation /home/trey/bin/qutebrowser-bitwarden-prompt.sh -w --auto-lock 86400"}}
colors.statusbar.normal.bg = #282828
colors.statusbar.normal.fg = #ffd7af
colors.statusbar.url.fg = #ffd7af
colors.statusbar.url.success.http.fg = #ffd7af
colors.tabs.bar.bg = #282828
colors.tabs.even.bg = #333333
colors.tabs.even.fg = #ffd7af
colors.tabs.odd.bg = #444444
colors.tabs.odd.fg = #ffd7af
colors.tabs.pinned.even.bg = #333333
colors.tabs.pinned.even.fg = #ffd7af
colors.tabs.pinned.odd.bg = #282828
colors.tabs.pinned.odd.fg = #ffd7af
colors.tabs.pinned.selected.even.bg = #cccccc
colors.tabs.pinned.selected.even.fg = #000000
colors.tabs.pinned.selected.odd.bg = #cccccc
colors.tabs.pinned.selected.odd.fg = #000000
colors.tabs.selected.even.bg = #cccccc
colors.tabs.selected.even.fg = #000000
colors.tabs.selected.odd.bg = #cccccc
colors.tabs.selected.odd.fg = #000000
colors.webpage.darkmode.enabled = true
colors.webpage.darkmode.policy.images = smart
colors.webpage.darkmode.threshold.background = 205
colors.webpage.darkmode.threshold.text = 150
colors.webpage.preferred_color_scheme = dark
completion.cmd_history_max_items = -1
completion.open_categories = ["searchengines", "quickmarks", "bookmarks", "history", "filesystem"]
completion.quick = true
https://*.instacart.com/*: content.blocking.enabled = false
https://*.rocketaccount.com/*: content.blocking.enabled = false
https://*.rocketmortgage.com/*: content.blocking.enabled = false
content.blocking.whitelist = ["https://cdn.eu1.exponea.com/zagg-us-production-2/*"]
content.cookies.accept = all
https://order.firehousesubs.com: content.geolocation = true
https://www.aetna.com: content.geolocation = true
https://www.google.com: content.geolocation = true
https://www.neworleanssaints.com: content.geolocation = false
https://www.tracfone.com: content.geolocation = false
https://forum.ghost.org: content.headers.user_agent = Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36
content.javascript.clipboard = access
https://calendar.google.com: content.notifications.enabled = true
https://messages.google.com: content.notifications.enabled = true
https://www.youtube.com: content.notifications.enabled = false
https://mail.google.com: content.notifications.enabled = false
https://calendar.google.com?cid=%25s: content.register_protocol_handler = true
https://mail.google.com?extsrc=mailto&url=%25s: content.register_protocol_handler = false
editor.command = ["alacritty", "--command", "vim", "{file}", "-c", "normal {line0}G{column0}l"]
fonts.default_family = IntelOne Mono Light
new_instance_open_target = tab
tabs.pinned.shrink = false
tabs.position = left
tabs.title.format = {audio}{aligned_index}: {current_title}
tabs.title.format_pinned = {audio}{aligned_index}: {current_title}
url.auto_search = naive
url.default_page = about:blank
url.searchengines = {"DEFAULT": "https://google.com/search?q={semiquoted}"}
url.start_pages = about:blank

View File

@ -172,39 +172,99 @@ font:
draw_bold_text_with_bright_colors: true
# Colors (Solarized Dark)
#colors:
# # Default colors
# primary:
# background: '0x002b36' # base03
# foreground: '0x839496' # base0
#
# # Cursor colors
# cursor:
# text: '0x002b36' # base03
# cursor: '0x839496' # base0
#
# # Normal colors
# normal:
# black: '0x073642' # base02
# red: '0xdc322f' # red
# green: '0x859900' # green
# yellow: '0xb58900' # yellow
# blue: '0x268bd2' # blue
# magenta: '0xd33682' # magenta
# cyan: '0x2aa198' # cyan
# white: '0xeee8d5' # base2
#
# # Bright colors
# bright:
# black: '0x002b36' # base03
# red: '0xcb4b16' # orange
# green: '0x586e75' # base01
# yellow: '0x657b83' # base00
# blue: '0x839496' # base0
# magenta: '0x6c71c4' # violet
# cyan: '0x93a1a1' # base1
# white: '0xfdf6e3' # base3
# Colors (Gruvbox dark)
colors:
# Default colors
primary:
background: '0x002b36' # base03
foreground: '0x839496' # base0
# Cursor colors
# hard contrast background - '#1d2021'
background: &gruvbox_dark_bg '#282828'
# soft contrast background - '#32302f'
foreground: '#ffd7af'
bright_foreground: '#ebdbb2'
dim_foreground: '#a89984'
cursor:
text: '0x002b36' # base03
cursor: '0x839496' # base0
# Normal colors
normal:
black: '0x073642' # base02
red: '0xdc322f' # red
green: '0x859900' # green
yellow: '0xb58900' # yellow
blue: '0x268bd2' # blue
magenta: '0xd33682' # magenta
cyan: '0x2aa198' # cyan
white: '0xeee8d5' # base2
# Bright colors
text: CellBackground
cursor: CellForeground
vi_mode_cursor:
text: CellBackground
cursor: CellForeground
# search:
# matches:
# foreground: '#000000'
# background: '#ffffff'
# focused_match:
# foreground: CellBackground
# background: CellForeground
# bar:
# background: ''
# foreground: ''
# line_indicator:
# foreground: None
# background: None
selection:
text: CellBackground
background: CellForeground
bright:
black: '0x002b36' # base03
red: '0xcb4b16' # orange
green: '0x586e75' # base01
yellow: '0x657b83' # base00
blue: '0x839496' # base0
magenta: '0x6c71c4' # violet
cyan: '0x93a1a1' # base1
white: '0xfdf6e3' # base3
black: '#928374'
red: '#fb4934'
green: '#b8bb26'
yellow: '#fabd2f'
blue: '#83a598'
magenta: '#d3869b'
cyan: '#8ec07c'
white: '#ebdbb2'
normal:
black: *gruvbox_dark_bg
red: '#cc241d'
green: '#98971a'
yellow: '#d79921'
blue: '#458588'
magenta: '#b16286'
cyan: '#689d6a'
white: '#a89984'
dim:
black: '#32302f'
red: '#9d0006'
green: '#79740e'
yellow: '#b57614'
blue: '#076678'
magenta: '#8f3f71'
cyan: '#427b58'
white: '#928374'
# indexed_colors: []
# Colors (Tomorrow Night Bright)
#colors:
# Default colors
@ -382,7 +442,10 @@ cursor:
# - ▇ Block
# - _ Underline
# - | Beam
style: Block
style:
shape: Block
blinking: Always
blink_interval: 500
# If this is `true`, the cursor will be rendered as a hollow box when the
# window is not focused.

View File

@ -0,0 +1,84 @@
Linux 6.4.7-arch1-1 (deltachunk) 08/01/2023 _x86_64_ (8 CPU)
10:38:25 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
10:38:25 PM 0 1 56.33 22.92 5.56 0 /sbin/init
10:38:25 PM 0 75 0.40 0.00 0.00 0 khugepaged
10:38:25 PM 0 216 0.00 0.94 0.00 0 jbd2/sda6-8
10:38:25 PM 0 252 0.66 16.28 0.00 0 /usr/lib/systemd/systemd-journald
10:38:25 PM 0 279 0.13 0.00 0.00 0 /usr/lib/systemd/systemd-udevd
10:38:25 PM 0 358 0.10 0.00 0.00 0 btrfs-cleaner
10:38:25 PM 0 359 1.07 15.73 0.00 0 btrfs-transaction
10:38:25 PM 0 360 1.34 0.00 0.00 0 btrfs-cleaner
10:38:25 PM 0 361 2.09 101.28 0.00 0 btrfs-transaction
10:38:25 PM 0 374 0.07 0.00 0.00 0 /usr/bin/rngd -f
10:38:25 PM 978 376 0.06 0.00 0.00 0 /usr/lib/systemd/systemd-resolved
10:38:25 PM 977 377 0.02 0.00 0.00 0 /usr/lib/systemd/systemd-timesyncd
10:38:25 PM 81 387 0.03 0.00 0.00 0 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
10:38:25 PM 0 389 0.01 0.00 0.00 0 /usr/lib/systemd/systemd-logind
10:38:25 PM 0 390 0.38 0.00 0.00 0 /usr/bin/python /usr/bin/firewalld --nofork --nopid
10:38:25 PM 980 397 0.02 0.00 0.00 0 /usr/lib/systemd/systemd-networkd
10:38:25 PM 0 413 0.06 0.00 0.00 0 sshd: /usr/bin/sshd -D [listener] 0 of 10-100 startups
10:38:25 PM 0 416 0.76 0.01 0.00 0 /usr/bin/containerd
10:38:25 PM 0 420 0.01 0.00 0.00 0 /sbin/agetty -o -p -- \u --noclear - linux
10:38:25 PM 102 512 0.02 0.00 0.00 0 /usr/lib/polkit-1/polkitd --no-debug
10:38:25 PM 0 541 0.13 0.00 0.00 0 /usr/lib/postfix/bin/master -w
10:38:25 PM 73 543 0.01 0.00 0.00 0 qmgr -l -t unix -u
10:38:25 PM 0 552 1.01 10.06 0.00 0 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
10:38:25 PM 0 740 0.02 0.00 0.00 0 /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 32768 -container-ip 172.23.0.2 -container-port 2368
10:38:25 PM 0 813 0.06 0.00 0.00 0 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 867fd697f8521ace06fdd9662b2cf3b5e874efebc23e9db72030327a2f3026d8 -address /run/containerd/containerd.sock
10:38:25 PM 0 815 0.19 0.00 0.00 0 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 55c52b5be4806af5fed0259c28e8ffe325fa25b4e80d85e25f5ee18c4c79d9d4 -address /run/containerd/containerd.sock
10:38:25 PM 27 901 2.94 0.48 0.00 0 mysqld --user=mysql
10:38:25 PM 1000 903 2.90 0.02 0.00 0 node current/index.js
10:38:25 PM 0 927 0.00 0.00 0.00 0 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 36e2430cadf11232798ffa3a740de793db7273b8e69f8adc873a3ac4b76e7c26 -address /run/containerd/containerd.sock
10:38:25 PM 0 946 0.08 0.00 0.00 0 /usr/bin/containerd-shim-runc-v2 -namespace moby -id aa67bc8d030a30948ccf7932392eb867ea534dea7b551feffaab588525893465 -address /run/containerd/containerd.sock
10:38:25 PM 0 1018 0.64 0.01 0.00 0 /bin/s6-svscan /etc/s6
10:38:25 PM 999 1023 1.88 0.46 0.18 0 mariadbd
10:38:25 PM 0 1036 0.00 0.00 0.00 0 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 9eab470b6b82e94e67b095b25461d7a4e734814b142a2a9c5a93b27cf6c93372 -address /run/containerd/containerd.sock
10:38:25 PM 0 1108 0.36 0.00 0.00 0 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 2dabcb16629a954dec21bfc11d581ff870b50356155fac083ca35fc675441dc6 -address /run/containerd/containerd.sock
10:38:25 PM 0 1138 0.00 0.00 0.00 0 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 63a059875ec719fdce5d64f144bf7cfdf599ce7cdef3207d515f986f17068081 -address /run/containerd/containerd.sock
10:38:25 PM 0 1150 0.15 0.00 0.00 0 nginx: master process nginx -g daemon off;
10:38:25 PM 0 1207 1.95 0.00 0.00 0 node server.js
10:38:25 PM 1000 1214 4.01 0.03 0.00 0 node current/index.js
10:38:25 PM 1000 1228 2.62 0.01 0.00 0 node current/index.js
10:38:25 PM 0 1366 0.00 0.00 0.00 0 s6-supervise gitea
10:38:25 PM 0 1367 0.00 0.00 0.00 0 s6-supervise openssh
10:38:25 PM 1000 1370 2.67 0.31 0.05 0 /usr/local/bin/gitea web
10:38:25 PM 0 1371 0.20 0.00 0.00 0 sshd: /usr/sbin/sshd -D -e [listener] 0 of 10-100 startups
10:38:25 PM 101 1547 0.00 0.06 0.03 0 nginx: worker process
10:38:25 PM 101 1548 0.00 0.13 0.10 0 nginx: worker process
10:38:25 PM 101 1549 0.01 0.08 0.06 0 nginx: worker process
10:38:25 PM 101 1550 0.02 0.13 0.09 0 nginx: worker process
10:38:25 PM 101 1551 0.02 0.06 0.03 0 nginx: worker process
10:38:25 PM 101 1552 0.03 0.08 0.05 0 nginx: worker process
10:38:25 PM 101 1553 0.08 0.10 0.07 0 nginx: worker process
10:38:25 PM 101 1554 0.04 1.21 0.04 0 nginx: worker process
10:38:25 PM 0 1761 0.01 0.00 0.00 0 /usr/lib/systemd/systemd --user
10:38:25 PM 0 1842 0.00 0.00 0.00 0 sshd: trey [priv]
10:38:25 PM 0 1845 0.00 0.00 0.00 0 sshd: trey [priv]
10:38:25 PM 1000 1847 0.00 0.00 0.00 0 /usr/lib/systemd/systemd --user
10:38:25 PM 1000 1858 0.21 0.00 0.00 0 -zsh
10:38:25 PM 1000 1952 0.00 0.00 0.00 0 /usr/bin/gpg-agent --supervised
10:38:25 PM 1000 1985 0.00 0.00 0.00 0 ssh-agent
10:38:25 PM 1000 2056 0.01 0.00 0.00 0 /usr/bin/tmux new-session -P -F#{session_id} -sborg -d -x 800 -y 600
10:38:25 PM 1000 2084 0.17 0.00 0.00 0 -zsh
10:38:25 PM 1000 2114 0.01 0.00 0.00 0 -zsh
10:38:25 PM 1000 2273 0.59 0.00 0.00 0 -zsh
10:38:25 PM 1000 2499 0.00 0.00 0.00 0 -zsh
10:38:25 PM 1000 2893 0.04 0.00 0.00 0 -zsh
10:38:25 PM 1000 3353 1.86 0.00 0.00 0 journalctl -b 0 -fu borg.service
10:38:25 PM 1000 3990 0.45 0.29 0.00 0 weechat-curses
10:38:25 PM 1000 4156 0.00 0.00 0.00 0 -zsh
10:38:25 PM 1000 4506 0.02 0.00 0.00 0 sudo -i
10:38:25 PM 0 4540 0.01 0.00 0.00 0 -zsh
10:38:25 PM 0 4602 0.00 0.00 0.00 0 /usr/bin/gpg-agent --supervised
10:38:25 PM 0 4628 0.00 0.00 0.00 0 ssh-agent
10:38:25 PM 73 40275 0.00 0.00 0.00 0 tlsmgr -l -t unix -u
10:38:25 PM 1000 232794 0.10 0.11 0.00 0 -zsh
10:38:25 PM 0 237182 0.55 0.03 0.00 0 -zsh
10:38:25 PM 0 337881 0.00 0.00 0.00 0 sshd: trey [priv]
10:38:25 PM 1000 337883 0.00 0.00 0.00 0 sshd: trey
10:38:25 PM 0 407920 0.00 0.12 0.00 0 kworker/u16:2-events_unbound
10:38:25 PM 73 424790 0.01 0.00 0.00 0 pickup -l -t unix -u
10:38:25 PM 0 440267 0.00 0.01 0.00 0 kworker/u16:1-flush-btrfs-1
10:38:25 PM 0 440268 0.00 0.01 0.00 0 kworker/u16:3-events_unbound
10:38:25 PM 0 442202 0.00 0.01 0.00 0 kworker/u16:4-events_power_efficient

View File

@ -0,0 +1,84 @@
iodelay Command
0 /sbin/init
0 khugepaged
0 jbd2/sda6-8
0 /usr/lib/systemd/systemd-journald
0 /usr/lib/systemd/systemd-udevd
0 btrfs-cleaner
0 btrfs-transaction
0 btrfs-cleaner
0 btrfs-transaction
0 /usr/bin/rngd
0 /usr/lib/systemd/systemd-resolved
0 /usr/lib/systemd/systemd-timesyncd
0 /usr/bin/dbus-daemon
0 /usr/lib/systemd/systemd-logind
0 /usr/bin/python
0 /usr/lib/systemd/systemd-networkd
0 sshd:
0 /usr/bin/containerd
0 /sbin/agetty
0 /usr/lib/polkit-1/polkitd
0 /usr/lib/postfix/bin/master
0 qmgr
0 /usr/bin/dockerd
0 /usr/bin/docker-proxy
0 /usr/bin/containerd-shim-runc-v2
0 /usr/bin/containerd-shim-runc-v2
0 mysqld
0 node
0 /usr/bin/containerd-shim-runc-v2
0 /usr/bin/containerd-shim-runc-v2
0 /bin/s6-svscan
0 mariadbd
0 /usr/bin/containerd-shim-runc-v2
0 /usr/bin/containerd-shim-runc-v2
0 /usr/bin/containerd-shim-runc-v2
0 nginx:
0 node
0 node
0 node
0 s6-supervise
0 s6-supervise
0 /usr/local/bin/gitea
0 sshd:
0 nginx:
0 nginx:
0 nginx:
0 nginx:
0 nginx:
0 nginx:
0 nginx:
0 nginx:
0 /usr/lib/systemd/systemd
0 sshd:
0 sshd:
0 /usr/lib/systemd/systemd
0 -zsh
0 /usr/bin/gpg-agent
0 ssh-agent
0 /usr/bin/tmux
0 -zsh
0 -zsh
0 -zsh
0 -zsh
0 -zsh
0 journalctl
0 weechat-curses
0 -zsh
0 sudo
0 -zsh
0 /usr/bin/gpg-agent
0 ssh-agent
0 tlsmgr
0 -zsh
0 -zsh
0 sshd:
0 sshd:
0 kworker/u16:2-events_power_efficient
0 pickup
0 kworker/u16:6-events_power_efficient
0 kworker/u16:1-events_unbound
0 kworker/u16:3-events_unbound
0 kworker/u16:0-btrfs-endio-write
0 kworker/u16:4-flush-btrfs-1

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,542 @@
# Autogenerated config.py
#
# NOTE: config.py is intended for advanced users who are comfortable
# with manually migrating the config file on qutebrowser upgrades. If
# you prefer, you can also configure qutebrowser using the
# :set/:bind/:config-* commands without having to write a config.py
# file.
#
# try:
# import qutebrowser.config as config
# from qutebrowser.config import (config as c, configfiles)
# c.load_autoconfig(False)
# except ImportError:
# pass
from qutebrowser.config.configfiles import ConfigAPI
from qutebrowser.config.config import ConfigContainer
config: ConfigAPI = config
c: ConfigContainer = c
config.load_autoconfig(False)
# Documentation:
# qute://help/configuring.html
# qute://help/settings.html
# Change the argument to True to still load settings configured via
# autoconfig.yml
# c.load_autoconfig(False)
# How to open links in an existing instance if a new one is launched.
# This happens when e.g. opening a link from a terminal. See
# `new_instance_open_target_window` to customize in which window the
# link is opened in.
# Type: String
# Valid values:
# - tab: Open a new tab in the existing window and activate the window.
# - tab-bg: Open a new background tab in the existing window and activate the
# window.
# - tab-silent: Open a new tab in the existing window without activating the
# window.
# - tab-bg-silent: Open a new background tab in the existing window without
# activating the window.
# - window: Open in a new window.
# - private-window: Open in a new private window.
c.new_instance_open_target = 'tab'
# Backend to use to display websites. qutebrowser supports two different
# web rendering engines / backends, QtWebEngine and QtWebKit (not
# recommended). QtWebEngine is Qt's official successor to QtWebKit, and
# both the default/recommended backend. It's based on a stripped-down
# Chromium and regularly updated with security fixes and new features by
# the Qt project: https://wiki.qt.io/QtWebEngine QtWebKit was
# qutebrowser's original backend when the project was started. However,
# support for QtWebKit was discontinued by the Qt project with Qt 5.6 in
# 2016. The development of QtWebKit was picked up in an official fork:
# https://github.com/qtwebkit/qtwebkit - however, the project seems to
# have stalled again. The latest release (5.212.0 Alpha 4) from March
# 2020 is based on a WebKit version from 2016, with many known security
# vulnerabilities. Additionally, there is no process isolation and
# sandboxing. Due to all those issues, while support for QtWebKit is
# still available in qutebrowser for now, using it is strongly
# discouraged.
# Type: String
# Valid values:
# - webengine: Use QtWebEngine (based on Chromium - recommended).
# - webkit: Use QtWebKit (based on WebKit, similar to Safari - many known
# security issues!).
c.backend = 'webengine'
# Always restore open sites when qutebrowser is reopened. Without this
# option set, `:wq` (`:quit --save`) needs to be used to save open tabs
# (and restore them), while quitting qutebrowser in any other way will
# not save/restore the session. By default, this will save to the
# session which was last loaded. This behavior can be customized via the
# `session.default_name` setting.
# Type: Bool
c.auto_save.session = True
# Which cookies to accept. With QtWebEngine, this setting also controls
# other features with tracking capabilities similar to those of cookies;
# including IndexedDB, DOM storage, filesystem API, service workers, and
# AppCache. Note that with QtWebKit, only `all` and `never` are
# supported as per-domain values. Setting `no-3rdparty` or `no-
# unknown-3rdparty` per-domain on QtWebKit will have the same effect as
# `all`. If this setting is used with URL patterns, the pattern gets
# applied to the origin/first party URL of the page making the request,
# not the request URL. With QtWebEngine 5.15.0+, paths will be stripped
# from URLs, so URL patterns using paths will not match. With
# QtWebEngine 5.15.2+, subdomains are additionally stripped as well, so
# you will typically need to set this setting for `example.com` when the
# cookie is set on `somesubdomain.example.com` for it to work properly.
# To debug issues with this setting, start qutebrowser with `--debug
# --logfilter network --debug-flag log-cookies` which will show all
# cookies being set.
# Type: String
# Valid values:
# - all: Accept all cookies.
# - no-3rdparty: Accept cookies from the same origin only. This is known to
# break some sites, such as GMail.
# - no-unknown-3rdparty: Accept cookies from the same origin only, unless a
# cookie is already set for the domain. On QtWebEngine, this is the same
# as no-3rdparty.
# - never: Don't accept cookies at all.
config.set('content.cookies.accept', 'all', 'chrome-devtools://*')
# Which cookies to accept. With QtWebEngine, this setting also controls
# other features with tracking capabilities similar to those of cookies;
# including IndexedDB, DOM storage, filesystem API, service workers, and
# AppCache. Note that with QtWebKit, only `all` and `never` are
# supported as per-domain values. Setting `no-3rdparty` or `no-
# unknown-3rdparty` per-domain on QtWebKit will have the same effect as
# `all`. If this setting is used with URL patterns, the pattern gets
# applied to the origin/first party URL of the page making the request,
# not the request URL. With QtWebEngine 5.15.0+, paths will be stripped
# from URLs, so URL patterns using paths will not match. With
# QtWebEngine 5.15.2+, subdomains are additionally stripped as well, so
# you will typically need to set this setting for `example.com` when the
# cookie is set on `somesubdomain.example.com` for it to work properly.
# To debug issues with this setting, start qutebrowser with `--debug
# --logfilter network --debug-flag log-cookies` which will show all
# cookies being set.
# Type: String
# Valid values:
# - all: Accept all cookies.
# - no-3rdparty: Accept cookies from the same origin only. This is known to
# break some sites, such as GMail.
# - no-unknown-3rdparty: Accept cookies from the same origin only, unless a
# cookie is already set for the domain. On QtWebEngine, this is the same
# as no-3rdparty.
# - never: Don't accept cookies at all.
config.set('content.cookies.accept', 'all', 'devtools://*')
# Allow websites to request geolocations.
# Type: BoolAsk
# Valid values:
# - true
# - false
# - ask
config.set('content.geolocation', True, 'https://order.firehousesubs.com')
config.set('content.geolocation', True, 'https://www.aetna.com')
# Allow websites to request geolocations.
# Type: BoolAsk
# Valid values:
# - true
# - false
# - ask
config.set('content.geolocation', True, 'https://www.google.com')
# Allow websites to request geolocations.
# Type: BoolAsk
# Valid values:
# - true
# - false
# - ask
config.set('content.geolocation', False, 'https://www.neworleanssaints.com')
# Allow websites to request geolocations.
# Type: BoolAsk
# Valid values:
# - true
# - false
# - ask
config.set('content.geolocation', False, 'https://www.tracfone.com')
# Value to send in the `Accept-Language` header. Note that the value
# read from JavaScript is always the global value.
# Type: String
config.set('content.headers.accept_language',
'', 'https://matchmaker.krunker.io/*')
# fix for instacart
config.set('content.blocking.enabled', False, 'https://*.instacart.com/*')
# fix for Rocket Mortgage
config.set('content.blocking.enabled', False, 'https://*.rocketaccount.com/*')
config.set('content.blocking.enabled', False, 'https://*.rocketmortgage.com/*')
c.content.blocking.whitelist = [
'https://cdn.eu1.exponea.com/zagg-us-production-2/*',
'https://*.apple.com/*',
'https://network.bazaarvoice.com/*'
]
# User agent to send. The following placeholders are defined: *
# `{os_info}`: Something like "X11; Linux x86_64". * `{webkit_version}`:
# The underlying WebKit version (set to a fixed value with
# QtWebEngine). * `{qt_key}`: "Qt" for QtWebKit, "QtWebEngine" for
# QtWebEngine. * `{qt_version}`: The underlying Qt version. *
# `{upstream_browser_key}`: "Version" for QtWebKit, "Chrome" for
# QtWebEngine. * `{upstream_browser_version}`: The corresponding
# Safari/Chrome version. * `{qutebrowser_version}`: The currently
# running qutebrowser version. The default value is equal to the
# unchanged user agent of QtWebKit/QtWebEngine. Note that the value
# read from JavaScript is always the global value. With QtWebEngine
# between 5.12 and 5.14 (inclusive), changing the value exposed to
# JavaScript requires a restart.
# Type: FormatString
# config.set('content.headers.user_agent',
# 'Mozilla/5.0 ({os_info}) AppleWebKit/{webkit_version}'
# + '(KHTML, like Gecko) {upstream_browser_key}/'
# + '{upstream_browser_version} Safari/{webkit_version}'
# 'https://web.whatsapp.com/')
# User agent to send. The following placeholders are defined: *
# `{os_info}`: Something like "X11; Linux x86_64". * `{webkit_version}`:
# The underlying WebKit version (set to a fixed value with
# QtWebEngine). * `{qt_key}`: "Qt" for QtWebKit, "QtWebEngine" for
# QtWebEngine. * `{qt_version}`: The underlying Qt version. *
# `{upstream_browser_key}`: "Version" for QtWebKit, "Chrome" for
# QtWebEngine. * `{upstream_browser_version}`: The corresponding
# Safari/Chrome version. * `{qutebrowser_version}`: The currently
# running qutebrowser version. The default value is equal to the
# unchanged user agent of QtWebKit/QtWebEngine. Note that the value
# read from JavaScript is always the global value. With QtWebEngine
# between 5.12 and 5.14 (inclusive), changing the value exposed to
# JavaScript requires a restart.
# Type: FormatString
# config.set('content.headers.user_agent',
# 'Mozilla/5.0 ({os_info}; rv:90.0) Gecko/20100101 Firefox/90.0',
# 'https://accounts.google.com/*')
#
# User agent to send. The following placeholders are defined: *
# `{os_info}`: Something like "X11; Linux x86_64". * `{webkit_version}`:
# The underlying WebKit version (set to a fixed value with
# QtWebEngine). * `{qt_key}`: "Qt" for QtWebKit, "QtWebEngine" for
# QtWebEngine. * `{qt_version}`: The underlying Qt version. *
# `{upstream_browser_key}`: "Version" for QtWebKit, "Chrome" for
# QtWebEngine. * `{upstream_browser_version}`: The corresponding
# Safari/Chrome version. * `{qutebrowser_version}`: The currently
# running qutebrowser version. The default value is equal to the
# unchanged user agent of QtWebKit/QtWebEngine. Note that the value
# read from JavaScript is always the global value. With QtWebEngine
# between 5.12 and 5.14 (inclusive), changing the value exposed to
# JavaScript requires a restart.
# Type: FormatString
config.set('content.headers.user_agent',
'Mozilla/5.0 ({os_info}) AppleWebKit/537.36 (KHTML, like Gecko)'
+ 'Chrome/99 Safari/537.36',
'https://*.slack.com/*')
config.set('content.headers.user_agent',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36'
+ '(KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
'https://forum.ghost.org')
# config.set('content.headers.user_agent',
# 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36'
# + '(KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
# 'https://*.instacart.com/*')
config.set('content.headers.user_agent',
'Mozilla/5.0 ({os_info}) AppleWebKit/{webkit_version} '
+ '(KHTML, like Gecko) {qt_key}/{qt_version} '
+ '{upstream_browser_key}/{upstream_browser_version} '
+ 'Safari/{webkit_version}',
'*')
# Load images automatically in web pages.
# Type: Bool
config.set('content.images', True, 'chrome-devtools://*')
# Load images automatically in web pages.
# Type: Bool
config.set('content.images', True, 'devtools://*')
# Enable JavaScript.
# Type: Bool
config.set('content.javascript.enabled', True, 'chrome-devtools://*')
# Enable JavaScript.
# Type: Bool
config.set('content.javascript.enabled', True, 'devtools://*')
# Enable JavaScript.
# Type: Bool
config.set('content.javascript.enabled', True, 'chrome://*/*')
# Enable JavaScript.
# Type: Bool
config.set('content.javascript.enabled', True, 'qute://*/*')
# Allow websites to show notifications.
# Type: BoolAsk
# Valid values:
# - true
# - false
# - ask
config.set('content.notifications.enabled',
True,
'https://calendar.google.com')
# Allow websites to show notifications.
# Type: BoolAsk
# Valid values:
# - true
# - false
# - ask
config.set('content.notifications.enabled',
True,
'https://messages.google.com')
# Allow websites to show notifications.
# Type: BoolAsk
# Valid values:
# - true
# - false
# - ask
config.set('content.notifications.enabled', False, 'https://www.youtube.com')
config.set('content.notifications.enabled', False, 'https://mail.google.com')
# Allow websites to register protocol handlers via
# `navigator.registerProtocolHandler`.
# Type: BoolAsk
# Valid values:
# - true
# - false
# - ask
config.set('content.register_protocol_handler',
True, 'https://calendar.google.com?cid=%25s')
# Allow websites to register protocol handlers via
# `navigator.registerProtocolHandler`.
# Type: BoolAsk
# Valid values:
# - true
# - false
# - ask
config.set('content.register_protocol_handler',
False,
'https://mail.google.com?extsrc=mailto&url=%25s')
# Number of commands to save in the command history. 0: no history / -1:
# unlimited
# Type: Int
c.completion.cmd_history_max_items = -1
# Move on to the next part when there's only one possible completion
# left.
# Type: Bool
c.completion.quick = True
# Which categories to show (in which order) in the :open completion.
# Type: FlagList
# Valid values:
# - searchengines
# - quickmarks
# - bookmarks
# - history
# - filesystem
c.completion.open_categories = [
'searchengines',
'quickmarks',
'bookmarks',
'history',
'filesystem']
# Editor (and arguments) to use for the `edit-*` commands. The following
# placeholders are defined: * `{file}`: Filename of the file to be
# edited. * `{line}`: Line in which the caret is found in the text. *
# `{column}`: Column in which the caret is found in the text. *
# `{line0}`: Same as `{line}`, but starting from index 0. * `{column0}`:
# Same as `{column}`, but starting from index 0.
# Type: ShellCommand
c.editor.command = [
'alacritty',
'--command',
'vim',
'{file}',
'-c',
'normal {line0}G{column0}l']
# What search to start when something else than a URL is entered.
# Type: String
# Valid values:
# - naive: Use simple/naive check.
# - dns: Use DNS requests (might be slow!).
# - never: Never search automatically.
# - schemeless: Always search automatically unless URL explicitly contains a
# scheme.
c.url.auto_search = 'naive'
# Page to open if :open -t/-b/-w is used without URL. Use `about:blank`
# for a blank page.
# Type: FuzzyUrl
c.url.default_page = 'about:blank'
# Search engines which can be used via the address bar. Maps a search
# engine name (such as `DEFAULT`, or `ddg`) to a URL with a `{}`
# placeholder. The placeholder will be replaced by the search term, use
# `{{` and `}}` for literal `{`/`}` braces. The following further
# placeholds are defined to configure how special characters in the
# search terms are replaced by safe characters (called 'quoting'): *
# `{}` and `{semiquoted}` quote everything except slashes; this is the
# most sensible choice for almost all search engines (for the search
# term `slash/and&amp` this placeholder expands to `slash/and%26amp`).
# * `{quoted}` quotes all characters (for `slash/and&amp` this
# placeholder expands to `slash%2Fand%26amp`). * `{unquoted}` quotes
# nothing (for `slash/and&amp` this placeholder expands to
# `slash/and&amp`). * `{0}` means the same as `{}`, but can be used
# multiple times. The search engine named `DEFAULT` is used when
# `url.auto_search` is turned on and something else than a URL was
# entered to be opened. Other search engines can be used by prepending
# the search engine name to the search term, e.g. `:open google
# qutebrowser`.
# Type: Dict
c.url.searchengines = {'DEFAULT': 'https://google.com/search?q={semiquoted}'}
# Page(s) to open at the start.
# Type: List of FuzzyUrl, or FuzzyUrl
c.url.start_pages = 'about:blank'
# tab configs
c.tabs.position = 'left'
c.tabs.new_position.related = 'last'
c.tabs.pinned.shrink = False
c.tabs.title.format = '{audio}{aligned_index}: {current_title}'
c.tabs.title.format_pinned = '{audio}{aligned_index}: {current_title}'
# Foreground color of the statusbar.
# Type: QssColor
c.colors.statusbar.normal.fg = '#ffd7af'
# Background color of the statusbar.
# Type: QssColor
c.colors.statusbar.normal.bg = '#282828'
# Default foreground color of the URL in the statusbar.
# Type: QssColor
c.colors.statusbar.url.fg = '#ffd7af'
# Foreground color of the URL in the statusbar on successful load
# (http).
# Type: QssColor
c.colors.statusbar.url.success.http.fg = '#ffd7af'
# Background color of the tab bar.
# Type: QssColor
c.colors.tabs.bar.bg = '#282828'
# Foreground color of unselected odd tabs.
# Type: QtColor
c.colors.tabs.odd.fg = '#ffd7af'
# Background color of unselected odd tabs.
# Type: QtColor
c.colors.tabs.odd.bg = '#444444'
# Foreground color of unselected even tabs.
# Type: QtColor
c.colors.tabs.even.fg = '#ffd7af'
# Background color of unselected even tabs.
# Type: QtColor
c.colors.tabs.even.bg = '#333333'
# Foreground color of selected odd tabs.
# Type: QtColor
c.colors.tabs.selected.odd.fg = '#000000'
c.colors.tabs.selected.odd.bg = '#cccccc'
# Foreground color of selected even tabs.
# Type: QtColor
c.colors.tabs.selected.even.fg = '#000000'
c.colors.tabs.selected.even.bg = '#cccccc'
# Foreground color of pinned unselected odd tabs.
# Type: QtColor
c.colors.tabs.pinned.odd.fg = '#ffd7af'
# Background color of pinned unselected odd tabs.
# Type: QtColor
c.colors.tabs.pinned.odd.bg = '#282828'
# Foreground color of pinned unselected even tabs.
# Type: QtColor
c.colors.tabs.pinned.even.fg = '#ffd7af'
# Background color of pinned unselected even tabs.
# Type: QtColor
c.colors.tabs.pinned.even.bg = '#333333'
# Foreground color of pinned selected odd tabs.
# Type: QtColor
c.colors.tabs.pinned.selected.odd.fg = '#000000'
c.colors.tabs.pinned.selected.odd.bg = '#cccccc'
# Foreground color of pinned selected even tabs.
# Type: QtColor
c.colors.tabs.pinned.selected.even.fg = '#000000'
c.colors.tabs.pinned.selected.even.bg = '#cccccc'
# Render all web contents using a dark theme. Example configurations
# from Chromium's `chrome://flags`: - "With simple HSL/CIELAB/RGB-based
# inversion": Set `colors.webpage.darkmode.algorithm` accordingly. -
# "With selective image inversion": Set
# `colors.webpage.darkmode.policy.images` to `smart`. - "With selective
# inversion of non-image elements": Set
# `colors.webpage.darkmode.threshold.text` to 150 and
# `colors.webpage.darkmode.threshold.background` to 205. - "With
# selective inversion of everything": Combines the two variants above.
# Type: Bool
c.colors.webpage.darkmode.enabled = True
c.colors.webpage.darkmode.policy.images = 'smart'
c.colors.webpage.darkmode.threshold.foreground = 150
c.colors.webpage.darkmode.threshold.background = 205
c.colors.webpage.preferred_color_scheme = 'dark'
c.colors.webpage.darkmode.algorithm = "lightness-cielab"
# c.qt.workarounds.disable_accelerated_2d_canvas = "always"
# c.colors.webpage.darkmode.algorithm = "lightness-hsl"
# c.colors.webpage.darkmode.algorithm = "brightness-rgb"
# c.fonts.default_family = 'Iosevka Term'
c.fonts.default_family = 'IntelOne Mono Light'
c.fonts.default_size = "10pt"
c.colors.hints.bg = 'qlineargradient(x1:0, y1:0, x2:0, y2:1, ' + \
'stop:0 rgba(0, 0, 133, 0.8),' + \
'stop:1 rgba(0, 0, 66, 0.8))'
c.colors.hints.fg = 'white'
c.content.cookies.accept = 'all'
c.zoom.default = "100%"
# c.content.blocking.whitelist = ['https://www.amazon.com']
# Allow Javascript access to clipboard
config.set('content.javascript.clipboard', 'access')
# BitWarden stuff
bitwarden = """spawn --userscript qute-bitwarden """
invocation = """--password-prompt-invocation """
script = """/home/trey/bin/qutebrowser-bitwarden-prompt.sh """
lock = """--auto-lock """
# Bindings for normal mode
config.unbind('r', mode='normal')
config.unbind('R', mode='normal')
config.bind('<Ctrl-r>', 'reload')
config.bind('<Ctrl-R>', 'reload --force')
config.bind('gl',
bitwarden + invocation + script + lock + "86400")
config.bind('gp',
bitwarden + invocation + script + "-w " + lock + "86400")
config.bind('gP',
bitwarden + invocation + script + "-w " + lock + "0")
config.bind('gc',
bitwarden + invocation + script + lock + "0")
config.bind('<Alt-j>', 'tab-focus')

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

31
deltachunk_history.paste Normal file
View File

@ -0,0 +1,31 @@
ls -alZih ~/.zshistory:
-rw-r--r-- 1 trey trey 59832 Jan 9 21:15 /home/trey/.zhistory
setopt:
autocd
nobeep
braceccl
correct
extendedglob
extendedhistory
histexpiredupsfirst
histignorealldups
histignorespace
histnostore
histverify
incappendhistory
interactive
interactivecomments
login
nonomatch
nullglob
promptbang
shinstdin
vi
env | grep -i hist:
PWD=/home/trey/bugs/2023-03-24_deltachunk_zhistory_snafu
HISTSIZE=99999
CM_HISTLENGTH=100

6
hypr/scripts/createWorkspace Executable file
View File

@ -0,0 +1,6 @@
#!/usr/bin/env zsh
#set -x
source ~/.config/hypr/scripts/functions
create_workspace ${@}
#set +x

6
hypr/scripts/cycleWorkspace Executable file
View File

@ -0,0 +1,6 @@
#!/usr/bin/env zsh
#set -x
source ~/.config/hypr/scripts/functions
cycle_workspace ${@}
#set =x

28
hypr/scripts/focusOrLaunch Executable file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env zsh
export HYPRLAND_INSTANCE_SIGNATURE=$(hyprctl -j instances | jq -r '.[0] | .instance')
app="${1}"
shift
class_name="${1}"
shift
workspace="${1}"
app_id=$(hyprctl -j clients | jq --arg class "${class_name}" \
'.[] | select(.class == $class) | .workspace.id')
if [[ -n "${app_id}" ]]; then
hyprctl dispatch focuswindow "class:${class_name}"
case "${app}" in
"qutebrowser")
hyprctl dispatch sendshortcut ", 0, class:${class_name}"
hyprctl dispatch sendshortcut ", 1, class:${class_name}"
hyprctl dispatch sendshortcut "ALT, J, class:${class_name}"
;;
*)
;;
esac
#hyprctl dispatch fullscreen 1
else
hyprctl dispatch workspace "${workspace}"
${app} &
fi

101
hypr/scripts/functions Normal file
View File

@ -0,0 +1,101 @@
#!/usr/bin/env zsh
export HYPRLAND_INSTANCE_SIGNATURE=$(hyprctl -j instances | jq -r '.[0] | .instance')
cycle_workspace () {
if [[ -n "${@}" ]]; then
direction="${1}"
else
print "Must supply a direction! Exiting..." >&2
exit 1
fi
monitors=$(hyprctl -j monitors)
workspaces=$(hyprctl -j workspaces)
active_mon=$(hyprctl -j monitors | jq '.[] | select(.focused) | .id')
active_ws=$(hyprctl -j monitors | jq --argjson mon ${active_mon} '.[$mon].activeWorkspace.id')
first_ws=$(jq '.[0].id' <<< "${workspaces}")
last_ws=$(jq '.[-1].id' <<< "${workspaces}")
case "${direction}" in
"next")
if [[ ${active_ws} -eq ${last_ws} ]]; then
hyprctl dispatch workspace ${first_ws}
else
hyprctl dispatch workspace +1
fi
;;
"prev")
if [[ ${active_ws} -eq ${first_ws} ]]; then
hyprctl dispatch workspace ${last_ws}
else
hyprctl dispatch workspace -1
fi
;;
*)
print "Invalid direction! Exiting..." >&2
exit 2
;;
esac
}
create_workspace () {
active_mon=$(hyprctl -j monitors | jq '.[] | select(.focused) | .id')
workspaces="$(hyprctl -j workspaces | jq --compact-output .)"
first_ws=$(jq '.[0].id' <<< "${workspaces}")
last_ws=$(jq '.[-1].id' <<< "${workspaces}")
if [[ -n "${@}" ]]; then
new_name="${1}"
shift
else
print "Must suplly at least a new workspace name! Exiting..." >&2
exit 1
fi
if [[ -n "${@}" ]]; then
new_ws="${1}"
else
new_ws=$(( last_ws + 1 ))
fi
old_ws=$(hyprctl -j activeworkspace | jq '.id')
if [[ ${old_ws} -ne ${last_ws} ]]; then
hyprctl dispatch workspace ${last_ws}
fi
# create new workspace
hyprctl dispatch workspace +1
active_ws=$(hyprctl -j activeworkspace | jq '.id')
hyprctl dispatch renameworkspace ${active_ws} ${new_name}
hyprctl keyword workspace "${active_ws},defaultName:${new_name}, monitor:${active_mon}, persistent:true"
if [[ ${new_ws} -lt ${last_ws} ]]; then
for ws in {${new_ws}..${last_ws}}; do
curr_name=$(jq --raw-output --argjson ws ${ws} '.[] | select(.id == $ws) | .name' <<< "${workspaces}")
if [[ ${new_ws} -eq ${ws} ]]; then
next_name=${curr_name}
else
hyprctl dispatch renameworkspace ${ws} ${next_name}
next_name=${curr_name}
fi
done
last_ws=$(hyprctl -j workspaces | jq '.[-1].id')
hyprctl dispatch renameworkspace ${last_ws} ${next_name}
fi
hyprctl dispatch renameworkspace ${new_ws} ${new_name}
active_ws=$(hyprctl -j activeworkspace | jq '.id')
hyprctl keyword workspace "${active_ws},defaultName:${next_name}, monitor:${active_mon}, persistent:true"
#set -x
if [[ ${active_ws} -ne ${new_ws} ]]; then
hyprctl dispatch workspace ${new_ws}
create_workspace ${next_name}
hyprctl dispatch workspace ${old_ws}
fi
#set +x
}

665
xmonad.hs Executable file
View File

@ -0,0 +1,665 @@
{-# LANGUAGE DeriveDataTypeable #-}
{-# OPTIONS_GHC -Wno-deprecations #-}
import XMonad
import XMonad.Config.Desktop
-- Actions
import XMonad.Actions.CycleWS
import XMonad.Actions.DynamicWorkspaces as DW
import XMonad.Actions.GridSelect
import XMonad.Actions.OnScreen
import XMonad.Actions.SpawnOn
import XMonad.Actions.UpdatePointer
import XMonad.Actions.WindowGo
import XMonad.Actions.WorkspaceNames hiding (workspaceNamesPP)
-- Data
import Data.List
import Data.Monoid
import Data.Ratio
import qualified Data.Map as M
-- Hooks
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.EwmhDesktops
import XMonad.Hooks.FadeInactive
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.ManageHelpers
import XMonad.Hooks.SetWMName
-- Layout
import XMonad.Layout
import XMonad.Layout.Gaps
import XMonad.Layout.IM as IM -- GIMP stuff
import qualified XMonad.Layout.IndependentScreens as IS
import XMonad.Layout.LayoutHints (layoutHints)
import XMonad.Layout.NoBorders (smartBorders, noBorders)
import XMonad.Layout.PerScreen
import XMonad.Layout.PerWorkspace
import XMonad.Layout.Reflect -- GIMP stuff
import XMonad.Layout.ResizableTile
import XMonad.Layout.SimpleFloat
import XMonad.Layout.Spacing
import XMonad.Layout.Tabbed
import XMonad.Layout.TrackFloating -- GIMP stuff
-- Util
import XMonad.Util.EZConfig
import XMonad.Util.Font
import XMonad.Util.Loggers
import XMonad.Util.Paste
import XMonad.Util.Run
import XMonad.Util.Ungrab
import XMonad.Util.WorkspaceCompare
import qualified XMonad.Util.ExtensibleState as XS
-- Miscellaneous
import Control.Applicative
import Control.Monad (liftM)
import Graphics.X11.ExtraTypes.XF86
import System.IO
import System.Exit
import XMonad.Operations
import XMonad.Prompt
import XMonad.Prompt.Window
import qualified Codec.Binary.UTF8.String as UTF8
--import qualified DBus as D
--import qualified DBus.Client as D
import qualified XMonad.StackSet as W
-- DynamicWorkspaces Stuff
filterWorkspaces :: [WorkspaceId] -> [WindowSpace] -> [WindowSpace]
filterWorkspaces ws = filter (\(W.Workspace tag _ _) -> tag `elem` ws)
-- xScreen are the type classes which hold the workspace name lists
newtype LeftScreen = LeftScreen {getLeftScreen :: [WorkspaceId]} deriving (Typeable,Read,Show)
instance ExtensionClass LeftScreen where
initialValue = LeftScreen []
extensionType = PersistentExtension
newtype CenterScreen = CenterScreen {getCenterScreen :: [WorkspaceId]} deriving (Typeable,Read,Show)
instance ExtensionClass CenterScreen where
initialValue = CenterScreen []
extensionType = PersistentExtension
newtype RightScreen = RightScreen {getRightScreen :: [WorkspaceId]} deriving (Typeable,Read,Show)
instance ExtensionClass RightScreen where
initialValue = RightScreen []
extensionType = PersistentExtension
genWorkspaces :: ScreenId -> [IS.PhysicalWorkspace]
genWorkspaces sc = if sc == 3
then IS.withScreen 0 ["pindrop"] ++ IS.withScreen 1 ["qb"] ++ IS.withScreen 2 ["shell", "VM"]
else IS.withScreens sc ["shell", "qb", "pindrop", "VM"]
-- End DynamicWorkspaces code (keybindings are below) --
getTopBar :: Int -> String
getTopBar sc = if sc == 1
then "dzen2 -dock -p -x 0 -ta l -w 1024 -e 'onstart:lower;button2=togglehide;sigusr1=togglehide'"
else "dzen2 -dock -p -x 1920 -ta l -w 1024 -e 'onstart:lower;button2=togglehide;sigusr1=togglehide'"
--getBarbicanBar :: Int -> String
--getBarbicanBar sc = if sc == 1
-- then "ssh barbican 'conky' | dzen2 -dock -p -x 0 -h 16 -y -112 -ta l -w 1920 -e 'sigusr1=togglehide'"
-- else "ssh barbican 'conky' | dzen2 -dock -p -x 1920 -h 16 -y -112 -ta l -w 1920 -e 'sigusr1=togglehide'"
--getDeltachunkBar :: Int -> String
--getDeltachunkBar sc = if sc == 1
-- then "ssh deltachunk 'conky' | dzen2 -dock -p -x 0 -h 16 -y -96 -ta l -w 1920 -e 'sigusr1=togglehide'"
-- else "ssh deltachunk 'conky' | dzen2 -dock -p -x 1920 -h 16 -y -96 -ta l -w 1920 -e 'sigusr1=togglehide'"
--getFerrumBar :: Int -> String
--getFerrumBar sc = if sc == 1
-- then "conky | dzen2 -dock -p -x 0 -h 16 -y -80 -ta l -w 1920 -e 'sigusr1=togglehide'"
-- else "conky | dzen2 -dock -p -x 1920 -h 16 -y -80 -ta l -w 1920 -e 'sigusr1=togglehide'"
-- getGammachunkBar :: Int -> String
-- getGammachunkBar sc = if sc == 1
-- then "ssh gammachunk 'conky' | dzen2 -dock -p -x 0 -y -72 -ta l -w 1920 -e 'sigusr1=togglehide'"
-- else "ssh gammachunk 'conky' | dzen2 -dock -p -x 1920 -y -72 -ta l -w 1920 -e 'sigusr1=togglehide'"
--getOsmiumBar :: Int -> String
--getOsmiumBar sc = if sc == 1
-- then "ssh osmium 'conky' | dzen2 -dock -p -x 0 -h 16 -y -64 -ta l -w 1920 -e 'sigusr1=togglehide'"
-- else "ssh osmium 'conky' | dzen2 -dock -p -x 1920 -h 16 -y -64 -ta l -w 1920 -e 'sigusr1=togglehide'"
--
--getSodiumBar :: Int -> String
--getSodiumBar sc = if sc == 1
-- then "ssh sodium 'conky' | dzen2 -dock -p -x 0 -h 16 -y -48 -ta l -w 1920 -e 'sigusr1=togglehide'"
-- else "ssh sodium 'conky' | dzen2 -dock -p -x 1920 -h 16 -y -48 -ta l -w 1920 -e 'sigusr1=togglehide'"
--
--getTennessineBar :: Int -> String
--getTennessineBar sc = if sc == 1
-- then "ssh tennessine 'conky' | dzen2 -dock -p -x 0 -h 16 -y -32 -ta l -w 1920 -e 'sigusr1=togglehide'"
-- else "ssh tennessine 'conky' | dzen2 -dock -p -x 1920 -h 16 -y -32 -ta l -w 1920 -e 'sigusr1=togglehide'"
--
--getBlancherBar :: Int -> String
--getBlancherBar sc = if sc == 1
-- then "ssh blancher 'conky' | dzen2 -dock -p -x 0 -h 16 -y -16 -ta l -w 1920 -e 'sigusr1=togglehide'"
-- else "ssh blancher 'conky' | dzen2 -dock -p -x 1920 -h 16 -y -16 -ta l -w 1920 -e 'sigusr1=togglehide'"
toggleHomeScreens :: X ()
toggleHomeScreens = do
sc <- IS.countScreens
if sc == 1
then do
--spawn "xrandr --output DVI-I-2-1 --off --output DVI-I-3-2 --off"
spawn "while true; do \n\
\~/bin/battery; \n\
\echo -n ' '; \n\
\~/bin/temp.sh; \n\
\echo -n ' '; \n\
\date \"+%a, %b %d %T\"; \n\
\/usr/bin/sed -E \"s/($(date +%_d)\b)/^fg(green)\1^fg()/\" ; \n\
\sleep 1; \n\
\done | dzen2 -dock -p -x 2400 -w 480 -u -h 24 -ta r -sa c -e 'sigusr1=togglehide' &"
else if sc == 3
then do
spawn "xrandr --output eDP-1 --primary --auto --output DVI-I-3-2 --auto --left-of eDP-1 --output DVI-I-2-1 --auto --right-of eDP-1"
-- spawn "xrandr --output eDP-1-1 --primary --auto --output DVI-I-2-1 --auto --left-of eDP-1-1 --output DVI-I-3-2 --auto --right-of eDP-1-1"
-- spawn "while true; do \n\
-- \~/bin/battery; \n\
-- \echo -n ' '; \n\
-- \~/bin/temp.sh; \n\
-- \echo -n ' '; \n\
-- \date '+%a, %b %d %T'; \n\
-- \sleep 1; \n\
-- \done | dzen2 -dock -p -x 1602 -w 325 -h 24 -ta l -fn 'xos4 Terminus:style=Regular:Pixelsize=12' &"
-- spawn "while true; do \n\
-- \~/bin/battery; \n\
-- \echo -n ' '; \n\
-- \~/bin/temp.sh; \n\
-- \echo -n ' '; \n\
-- \date '+%a, %b %d %T'; \n\
-- \sleep 1; \n\
-- \done | dzen2 -dock -p -x 3522 -w 325 -h 24 -ta l -fn 'xos4 Terminus:style=Regular:Pixelsize=12' &"
spawn "while true; do \n\
\~/bin/battery; \n\
\echo -n ' '; \n\
\~/bin/temp.sh; \n\
\echo -n ' '; \n\
\date '+%a, %b %d %T'; \n\
\sleep 1; \n\
\done | dzen2 -dock -p -x 5442 -w 325 -h 24 -ta l -fg #ebdbb2 -bg #000000 -fn 'xos4 Terminus:style=Regular:Pixelsize=12' &"
{- spawn "while true; do echo -n $(cat /tmp/temp); echo -n ' '; date '+%a, %b %d %T'; sleep 1; done | dzen2 -dock -p -x 1710 -w 210 -e 'onstart:lower;button2=togglehide' -h 24 -ta l -fg #aaaaaa -bg #282828 -fn Terminus-10 -xs 1 &"
spawn "while true; do echo -n $(cat /tmp/temp); echo -n ' '; date '+%a, %b %d %T'; sleep 1; done | dzen2 -dock -p -x 3630 -w 210 -e 'onstart:lower;button2=togglehide' -h 24 -ta l -fg #aaaaaa -bg #282828 -fn Terminus-10 -xs 0 &"
spawn "while true; do echo -n $(cat /tmp/temp); echo -n ' '; date '+%a, %b %d %T'; sleep 1; done | dzen2 -dock -p -x 5550 -w 210 -e 'onstart:lower;button2=togglehide' -h 24 -ta r -fg #aaaaaa -bg #282828 -fn Terminus-10 -xs 2 &" -}
else
return ()
-- get these with xprop
myManageHook = composeAll
[ isDialog --> doFloat
, className =? "Org.gnome.Dictionary" --> doFloat
, className =? "Xfce4-dict" --> doFloat
, className =? "Goldendict" --> doFloat
, className =? "Last.fm" --> doFloat
, className =? "Xmessage" --> doFloat
, className =? "Audacious" --> doFloat
--, className =? "Gimp" --> doFloat
, className =? "Skype" --> doFloat
, className =? "Keepassx" --> doFloat
, className =? "Kcalc" --> doFloat
, className =? "Clementine" --> doFloat
, className =? "SpiderOak" --> doFloat
, className =? "Pavucontrol" --> doFloat
, className =? "Gnome-calendar" --> doFloat
{- The following sets doFloat on the Orage window (as above)
But also ensures that it appears only on the left screen
(screen 0). (screenWorkspace 0) returns X (Maybe WorkspaceId),
and the liftX function lifts an X action to a Query (which is
Maybe WorkspaceId) and the next lines return the workspace (if
not empty), or do nothing if (Maybe WorkspaceId) -> Nothing.
idHook maps to mempty, which means do nothing
-}
, className =? "Orage" --> doFloat
<+> do
ws <- liftX (screenWorkspace 0)
case ws of
Just w -> doShift w
Nothing -> idHook
-- end Orage window stuff
-- Weather report stuff
, className =? "Wrapper" --> doFloat
<+> do
ws <- liftX (screenWorkspace 0)
case ws of
Just w -> doShift w
Nothing -> idHook
-- end Weather Report window stuff
-- , className =? "Plasma-desktop" --> doFloat
-- <+> do
-- ws <- liftX (screenWorkspace 0)
-- case ws of
-- Just w -> doShift w
-- Nothing -> idHook
-- end Plasma desktop stuff
, className =? "Xfce4-notifyd" --> doIgnore
, manageDocks
]
--shiftInsert w =
-- let translatedProgs = ["Chromium", "Chrome"]
-- in do
-- c <- runQuery className w;
-- let toTranslate = any (== c) translatedProgs
-- if toTranslate then spawn ("CLIP=$(xclip -out -selection clipboard); xclip -out"
-- ++ " | xclip -in -selection clipboard; xdotool key --clearmodifiers --window "
-- ++ show w ++ " ctrl+v; echo -n $CLIP | xclip -in -selection clipboard")
-- else sendKey shiftMask xK_Insert
layoutH = layoutHints
-- $ onWorkspace "5:" (Mirror tiled2
-- ||| tiled ||| Full)
-- $ onWorkspaces ["1:wkbr","2:wksh"] (Full
-- ||| tiled ||| Mirror tiled)
$ Full
||| Mirror tiled
||| tabbed shrinkText myTheme
||| tiled
where
tiled = Tall 1 (3 % 100) (1/2)
--tiled2 = Tall 1 (3 % 100) (5 % 9)
myTheme :: Theme
--myTheme = defaultTheme {
myTheme = def {
fontName = myFont
}
myFont = "xft:monospace:style=Regular:Pixelsize=18"
fadeHook = fadeInactiveLogHook fadeAmount
where fadeAmount = 0.8
makeLauncher yargs run exec close = concat
["exe=`yegonesh ", yargs, "` && ", run, " ", exec, "$exe", close]
--launcher = makeLauncher "-x -- -nf grey -nb black -fn 'xos4 Terminus:Pixelsize=8'" "eval" "\"exec " "\""
launcher = makeLauncher "-x" "eval" "\"exec " "\""
startTrayer = "trayer --edge top --align right --widthtype request --margin 490 --expand false --SetDockType true --SetPartialStrut false --tint 0x000000 --transparent true --alpha 0 --height 24 --monitor 'primary'"
main = do sc <- IS.countScreens
dzenTopBar <- spawnPipe (getTopBar sc)
--dzenBarbicanBar <- spawnPipe (getBarbicanBar sc)
--dzenDeltachunkBar <- spawnPipe (getDeltachunkBar sc)
--dzenFerrumBar <- spawnPipe (getFerrumBar sc)
--dzenOsmiumBar <- spawnPipe (getOsmiumBar sc)
--dzenSodiumBar <- spawnPipe (getSodiumBar sc)
--dzenTennessineBar <- spawnPipe (getTennessineBar sc)
--dzenBlancherBar <- spawnPipe (getBlancherBar sc)
xmonad $ ewmhFullscreen $ ewmh $ desktopConfig {
workspaces = genWorkspaces (S sc)
, terminal = myTerminal
, focusFollowsMouse = True
, manageHook = manageDocks <+> myManageHook -- <+> manageHook desktopConfig
, handleEventHook = handleEventHook desktopConfig
--, layoutHook = avoidStruts $ gaps [(D,108)] $ layoutH
, layoutHook = avoidStruts $ layoutH
, logHook = myLogHook dzenTopBar >> fadeHook >> updatePointer (0.5, 0.5) (0, 0)
, borderWidth = 1
, normalBorderColor = "#000000"
, focusedBorderColor = "#ebdbb2"
, modMask = winKey
, startupHook = myStartup
}
`additionalKeys` myKeys
`removeKeys` remKeys
myStartup :: X ()
myStartup = do
--setWMName "LG3D"
sc <- IS.countScreens
toggleHomeScreens
--spawn "xset dpms 600"
spawn "xautolock -secure -time 10 -locker 'i3lock -c 000000'"
if sc == 1
then do
spawn startTrayer
-- --spawn "trayer --edge top --align right --widthtype request --margin 318 --expand false --SetDockType true --SetPartialStrut false --tint 0x282828 --transparent true --alpha 0 --height 24 --monitor 'primary'"
-- --spawn "stalonetray"
-- --spawn "gnome-gmail-notifier"
-- --spawn "xautolock -secure -time 10 -locker 'i3lock -c 000000 -i /home/trey/images/black.png'"
--
else if sc == 3
then do
spawn startTrayer
-- --spawn "trayer --edge top --align right --widthtype request --margin 318 --expand false --SetDockType true --SetPartialStrut false --tint 0x282828 --transparent true --alpha 0 --height 24 --monitor 2"
else
return ()
activateMyTerminal :: X ()
activateMyTerminal = do
sc <- IS.countScreens
if sc == 1
then do
windows (viewOnScreen 0 "shell")
else if sc == 3
then do
windows (viewOnScreen 2 "shell")
else
return ()
myBitmapsDir = "/home/trey/.xmonad/dzen2"
--centerBar = fmap getCenterBar IS.countScreens
--bottomBar = fmap getBottomBar IS.countScreens
--leftBar = "dzen2 -w 0 -h 24 -ta l -fg #555753 -bg #000000 -fn Terminus-10 -xs 1"
-- rightBar = "dzen2 -w 3840 -h 24 -ta r -fg #555753 -bg #000000 -fn Terminus-10 -xs 2"
myLogHook :: Handle -> X ()
--myLogHook h = dynamicLogWithPP $ defaultPP
myLogHook h = dynamicLogWithPP $ IS.marshallPP (S 0) $ def
{
ppCurrent = dzenColor "#8AE234" "#000000" . pad
, ppVisible = dzenColor "#555753" "#000000" . pad
, ppHidden = dzenColor "#ebdbb2" "#000000" . pad
, ppHiddenNoWindows = dzenColor "#555753" "#000000" . pad
, ppUrgent = dzenColor "#cc0000" "#000000" . pad
, ppWsSep = "."
, ppSep = " | "
, ppLayout = dzenColor "#666600" "#000000" .
(\x -> case x of
"Tall" -> "^i(" ++ myBitmapsDir ++ "/tall.xbm)"
"Mirror Tall" -> "^i(" ++ myBitmapsDir ++ "/mtall.xbm)"
"Full" -> "^i(" ++ myBitmapsDir ++ "/full.xbm)"
"Simple Float" -> "~"
"IM Grid" -> "IM"
_ -> x
)
, ppTitle = ("" ++) . dzenColor "#ff6600" "#000000" . dzenEscape
, ppOutput = hPutStrLn h
}
winKey :: KeyMask
winKey = mod4Mask
lAlt :: KeyMask
lAlt = mod1Mask
{-Multiline comment for reference
winKey :: KeyMask
winKey :: KeyMask-}
--myTerminal :: String
--myTerminal = "konsole"
--myTerminal = "ssh-agent urxvtc -cd ~"
myTerminal = "alacritty"
--myTerminal = "terminator"
--altTerminal = "urxvtc -cd ~ -name altUrxvt4
--myTerminal = "gnome-terminal"
--myTerminal = "terminator"
{-slotWksp = ["1:main", "2:jobs", "3:is660","4:office","5:sysadmin","6:irc","7:digium", "8:vm","9:dump","0:music","F1:man","F2:jobs","F3:isovr","F4:offovr","F5:sysovr","F6:ircovr","F7:dgmovr","F8:vmovr","F9:dmpovr","F10:musovr"]
leftWksp = ["01:main","02:jobs","03:is660","04:office","05:sysadmin","06:irc","07:digium","08:vm","09:dump","10:music"]
rightWksp = [
"F1:man"
, "F2:jobs"
, "F3:isovr"
, "F4:offovr"
, "F5:sysovr"
, "F6:ircovr"
, "F7:dgmovr"
, "F8:vmovr"
, "F9:dmpovr"
, "F10:musovr"
]-}
{- Many of the key combinations below match or are analogs of key combinations
- in Windows. This is to keep the amount of mental context switching to a
- minimum.
-
-}
myKeys = [
--((winKey , xK_t), withFocused $ windows . W.sink) -- Push window back into tiling (default)
((winKey .|. shiftMask, xK_t), withFocused $ windows . W.sink) -- Push window back into tiling
--, ((winKey , xK_l), spawnHere "xscreensaver-command --lock && sleep 3 && xset dpms force off")
--, ((winKey , xK_l), spawnHere "gnome-screensaver-command --lock && sleep 10 && xset dpms force off")
--, ((winKey , xK_l), spawnHere "dm-tool lock")
, ((winKey , xK_l), spawnHere "i3lock --color 000000 -i /home/trey/images/black.png && sleep 3 && xset dpms force off")
-- , ((winKey , xK_l), spawnHere "light-locker-command --lock && sleep 10 && xset dpms force off")
-- , ((winKey , xK_l), spawnHere "dm-tool lock && sleep 3 && xset dpms force off")
-- ((winKey , xK_l), spawnHere "xscreensaver-command --lock")
-- ((winKey , xK_l), spawnHere "qdbus org.kde.krunner /ScreenSaver Lock")
, ((winKey , xK_Return), do
ifWindows (resource =? "Alacritty") (mapM_ focus) (spawnHere myTerminal)
activateMyTerminal)
, ((winKey , xK_v), do
ifWindows (resource =? "Alacritty") (mapM_ focus) (spawnHere myTerminal)
activateMyTerminal)
--ifWindows (resource =? "main") (mapM_ focus) (spawnHere myTerminal))
, ((controlMask .|. lAlt, xK_BackSpace), (spawnHere "xfdesktop --quit"))
, ((controlMask .|. lAlt, xK_Delete), (spawnHere "pkill -9 chromium"))
, ((controlMask .|. shiftMask, xK_Return), (spawnHere myTerminal))
, ((controlMask .|. shiftMask, xK_3), spawn "scrot --exec 'mkdir -p ~/Desktop && mv $f ~/Desktop' && paplay ~/wav/camera.wav")
, ((controlMask .|. shiftMask, xK_4), unGrab >> spawn "scrot --exec 'mkdir -p ~/Desktop && mv $f ~/Desktop' --select && paplay ~/wav/camera.wav")
, ((controlMask .|. winKey, xK_z), ifWindows (resource =? "Zoom") (mapM_ focus) (spawnHere "zoom"))
-- windows (viewOnScreen 1 "ws")
-- ifWindows (resource =? "altUrxvt") (mapM_ focus) (spawnHere altTerminal))
, ((lAlt, xK_v), spawn "clipmenu && xdotool key Ctrl+v")
--, ((winKey .|. shiftMask, xK_v), do
-- windows (viewOnScreen 1 "virtualbox")
-- ifWindows (className =? "Gvim") (mapM_ focus) (spawnHere "gvim"))
--, ((winKey , xK_v), do
-- windows (viewOnScreen 1 "timetracker")
-- ifWindows (title =? "osmium:timetracker") (mapM_ focus) (spawnHere "urxvtc -cd ~/timetracker -e 'tmux attach -t timetracker || tmux -2 new-session -s timetracker'"))
--, ((lAlt , xK_v), spawnHere "xfce4-popup-clipman")
--, ((winKey , xK_x), windowPromptGoto dXPConfig)
--, ((winKey .|. shiftMask, xK_x), windowPromptBring dXPConfig)
--, ((winKey .|. shiftMask, xK_x), windowPrompt def Bring dXPConfig)
--, ((winKey .|. shiftMask, xK_Return), windows W.swapMaster)
--, ((winKey .|. shiftMask, xK_Return), spawnHere myTerminal)
, ((winKey , xK_b), do
spawnHere "pkill -USR1 dzen2"
spawnHere "pkill trayer"
sendMessage $ ToggleStruts
sendMessage $ ToggleGaps)
--sendMessage $ ToggleStruts)
, ((lAlt , xK_g), spawnHere "~/bin/google_selection.sh")
--, ((winKey , xK_g), ifWindows (className =? "Google-chrome") (mapM_ focus) (spawnHere "google-chrome"))
, ((winKey , xK_g), do
windows (viewOnScreen 0 "pindrop")
ifWindows (className =? "Vivaldi-stable") (mapM_ focus) (spawnHere "vivaldi"))
--, ((winKey , xK_r), do
-- windows (viewOnScreen 1 "wb")
-- ifWindows (className =? "Google-chrome-stable") (mapM_ focus) (spawnHere "google-chrome-stable"))
--ifWindows (className =? "Google-chrome") (mapM_ focus) (spawnHere "chromium --user-data-directory=~/work/avoxi/chromium"))
--, ((winKey , xK_g), spawnHere "google-chrome --purge-memory-button ")
--, ((winKey , xK_i), spawnHere "iceweasel")
--, ((winKey , xK_i), spawnHere "clementine")
-- , ((winKey , xK_i), ifWindows (className =? "Clementine") (mapM_ killWindow) (spawnHere "clementine"))
-- , ((winKey , xK_d ), ifWindows (className =? "Goldendict") (mapM_ killWindow) (spawnHere "goldendict"))
-- , ((winKey , xK_d), ifWindows (className =? "Xfce4-dict") (mapM_ killWindow) (spawnHere "xfce4-dict"))
, ((winKey , xK_d), ifWindows (className =? "Org.gnome.Dictionary") (mapM_ killWindow) (spawnHere "gnome-dictionary"))
--, ((winKey , xK_f), spawnHere (myTerminal ++ " -e vifm . ~"))
--, ((winKey , xK_f), spawnHere ("export SHELL=/bin/bash && " ++ myTerminal ++ " -e mc"))
--, ((winKey , xK_e), spawnHere ("export SHELL=/bin/bash && " ++ myTerminal ++ " -e mc")) -- key stroke matches Win+E (from Win7)
, ((winKey , xK_o), do
--windows (viewOnScreen 0 "of")
ifWindows (fmap("libreoffice" `isPrefixOf`) className) (mapM_ focus) (spawnHere "libreoffice"))
-- , ((winKey , xK_o), do
-- windows (viewOnScreen 1 "rbank")
-- ifWindows (className =? "Opera") (mapM_ focus) (spawnHere "opera"))
-- , ((winKey .|. controlMask , xK_a), spawnHere "/home/trey/launchers/airdroid.desktop")
-- , ((winKey , xK_s), do
-- windows (viewOnScreen 1 "hng")
-- ifWindows (className =? "Skype") (mapM_ focus) (spawnHere "skype"))
, ((winKey , xK_s), ifWindows (className =? "Pavucontrol") (mapM_ killWindow) (spawnHere "pavucontrol"))
, ((winKey , xK_t), do
spawn "pkill trayer"
spawn startTrayer)
, ((winKey , xK_c), kill)
--, ((winKey , xK_m), windows W.focusMaster)
, ((winKey , xK_comma), sendMessage (IncMasterN 1))
, ((winKey , xK_period), sendMessage (IncMasterN (-1)))
, ((winKey , xK_j), windows W.focusDown) -- explicitly setting the default
, ((winKey .|. controlMask, xK_j), windows W.swapDown) -- explicitly setting the default
, ((winKey , xK_k), windows W.focusUp) -- explicitly setting the default
, ((winKey .|. controlMask, xK_k), windows W.swapUp) -- explicitly setting the default
, ((lAlt , xK_Tab), windows W.focusDown) -- replicating MS Windows task switcher behavior
--, ((winKey , xK_Tab), goToSelected defaultGSConfig)
, ((winKey , xK_Tab), goToSelected def)
, ((lAlt .|. shiftMask, xK_Tab), windows W.focusUp) -- replicating MS Windows task switcher behavior
, ((winKey .|. controlMask, xK_Return), windows W.swapMaster)
, ((winKey, xK_space ), sendMessage NextLayout)
--, ((winKey .|. shiftMask, xK_space), setLayout $ XMonad.layoutHook conf) -- the default, commented here for documentation and posterity
, ((winKey , xK_p), spawnHere launcher)
, ((winKey .|. shiftMask, xK_p), spawnHere "gmrun")
--, ((winKey .|. controlMask , xK_d), spawn ("sleep 1 && date +%F | tr -d '\n' | ~/bin/genxmacro | xmacroplay -d 0.1 $DISPLAY"))
--, ((controlMask .|. shiftMask , xK_d), spawn ("sleep 1 && date '+%F %T %p: ' | tr -d '\n' | ~/bin/genxmacro | xmacroplay -d 0.1 $DISPLAY"))
--, ((winKey .|. controlMask , xK_k), spawn ("sleep 1 && cat ~/.macros/code.macro | xmacroplay -d 0.1 $DISPLAY"))
--, ((shiftMask, xK_Insert), withFocused shiftInsert)
--, ((controlMask, xK_n), raiseMaybe (spawnHere myTerminal) (className =? "URxvt"))
-- , ((winKey , xK_Print), spawnHere "xfce4-screenshooter")
, ((winKey , xK_Left), prevWS)
, ((winKey , xK_Right), nextWS)
, ((winKey , xK_Up), spawnHere "skippy-xd")
--, ((0, xF86XK_Calculator), spawnHere "/home/trey/bin/calc")
--, ((0, xF86XK_Calculator), ifWindows (className =? "Gcalctool") (mapM_ killWindow) (spawnHere "gcalctool"))
, ((winKey , xK_y), spawn "dunstctl close-all")
, ((winKey , xK_x), spawn "dunstctl close")
-- , ((0, xF86XK_Calculator), ifWindows (className =? "Gnome-calculator") (mapM_ killWindow) (spawnHere "gnome-calculator"))
, ((0, xF86XK_AudioPlay), spawn "clementine --play-pause")
--, ((0, xF86XK_AudioMute), spawn "amixer -c 0 set Master toggle")
, ((0, xF86XK_AudioMute), spawn "pamixer --toggle-mute")
, ((0, xF86XK_AudioRaiseVolume), spawn "pamixer --increase 5")
, ((0, xF86XK_AudioLowerVolume), spawn "pamixer --decrease 5")
, ((0, xF86XK_MonBrightnessUp), spawn "sudo xbacklight -inc 5")
, ((0, xF86XK_MonBrightnessDown), spawn "sudo xbacklight -dec 5")
-- , ((winKey .|. controlMask, xK_Left), shiftToPrev >> prevWS)
-- , ((winKey .|. controlMask, xK_Right), shiftToNext >> nextWS)
, ((winKey .|. controlMask, xK_h), sendMessage Shrink)
, ((winKey .|. lAlt, xK_h), do
--windows (viewOnScreen 1 "hng")
--windows (viewOnScreen 1 "chromium")
--ifWindows (className =? "Chromium") (mapM_ focus) (spawnHere "chromium"))
--windows (viewOnScreen 1 "vivaldi")
--ifWindows (className =? "Vivaldi-stable") (mapM_ focus) (spawnHere "vivaldi-stable"))
windows (viewOnScreen 0 "qb")
ifWindows (className =? "qutebrowser") (mapM_ focus) (spawnHere "qutebrowser"))
--ifWindows (className =? "Iceweasel") (mapM_ focus) (spawnHere "iceweasel"))
, ((winKey .|. controlMask, xK_l), sendMessage Expand)
--, ((winKey , xK_1), windows (viewOnScreen 0 "shell"))
--, ((winKey , xK_1), ifWindows (className =? "Alacritty") (mapM_ focus) (spawnHere myTerminal))
--, ((winKey , xK_2), windows (viewOnScreen 0 "chromium"))
, ((winKey , xK_a), do
windows (viewOnScreen 0 "pindrop")
--ifWindows (className =? "Pidgin") (mapM_ focus) (spawnHere "pidgin"))
ifWindows (className =? "Slack") (mapM_ focus) (spawnHere "slack"))
, ((winKey , xK_q), spawn "killall dzen2 stalonetray; xmonad --recompile; xmonad --restart")
, ((winKey .|. shiftMask , xK_q), io (exitWith ExitSuccess))
-- win+h shows the selected workspace
, ((winKey, xK_h), DW.withWorkspace myXPConfigSelect $ \wk -> do
--sc <- screenBy 0
--if sc == 0
--then XS.modify $ LeftScreen . (wk :) . getLeftScreen -- prefix to list
-- then XS.modify $ LeftScreen . (++ [wk]) . getLeftScreen -- append to list
--else XS.modify $ RightScreen . (wk :) . getRightScreen -- prefix to list
-- else XS.modify $ RightScreen . (++ [wk]) . getRightScreen -- append to list
windows $ W.view wk)
-- win+z moves the current window to the selected workspace
, ((winKey, xK_z), DW.withWorkspace myXPConfigSelect (\ws -> do
--sc <- screenBy 0
--if sc == 0
-- then XS.modify $ LeftScreen . nub . (ws :) . getLeftScreen -- prefix to list
-- else XS.modify $ RightScreen . nub . (ws :) . getRightScreen -- prefix to list
--then XS.modify $ LeftScreen . nub . (++ [ws]) . getLeftScreen -- append to list
--else XS.modify $ RightScreen . nub . (++ [ws]) . getRightScreen -- append to list
windows $ W.shift ws
-- refresh
))
-- win+BackSpace removes the current workspace
, ((winKey , xK_BackSpace), do
curr <- gets (W.currentTag . windowset)
sc <- screenBy 0
if sc == 0
then do
ws <- XS.gets getLeftScreen
XS.put (LeftScreen (filter (/= curr) ws))
else do
ws <- XS.gets getRightScreen
XS.put (RightScreen (filter (/= curr) ws))
DW.removeWorkspace
)
-- win+ctrl+e renames the current workspace
, ((winKey .|. controlMask , xK_r), do
old <- gets (W.currentTag . windowset)
DW.renameWorkspace myXPConfigNew
created <- gets (W.currentTag . windowset)
sc <- screenBy 0
if sc == 0
then do
ws <- XS.gets getLeftScreen
XS.put (LeftScreen (filter (/= old) ws))
--XS.modify $ LeftScreen . (created :) . getLeftScreen -- prefix to list
XS.modify $ LeftScreen . (++ [created]) . getLeftScreen -- append to list
else do
ws <- XS.gets getRightScreen
XS.put (RightScreen (filter (/= old) ws))
--XS.modify $ RightScreen . (created :) . getRightScreen -- prefix to list
XS.modify $ RightScreen . (++ [created]) . getRightScreen -- append to list
refresh)
-- win+m creates a new workspace
, ((winKey , xK_m) , DW.withWorkspace myXPConfigNew $ \wk -> do
sc <- screenBy 0
if sc == 0
--then XS.modify $ LeftScreen . (wk :) . getLeftScreen -- prefix to list
then XS.modify $ LeftScreen . (++ [wk]) . getLeftScreen -- append to list
--else XS.modify $ RightScreen . (wk :) . getRightScreen -- prefix to list
else XS.modify $ RightScreen . (++ [wk]) . getRightScreen -- append to list
windows $ W.view wk)
--, ((winKey .|. shiftMask, xK_d) -- macro conflict dialog problem needs to be resolved
]
++
-- Set up window -> workspace keys
[((m .|. winKey, key), screenWorkspace sc >>= flip whenJust (windows . f))
-- | (key, sc) <- zip [xK_w, xK_r] [0..]
-- | (key, sc) <- zip [xK_Left, xK_Right] [0..] -- For arrow keys
| (key, sc) <- zip [xK_e, xK_w, xK_r] [0..] -- For w,r keys
-- | (key, sc) <- zip [xK_w, xK_r] [1,0] -- For w,r keys in backwards order
-- | (key, sc) <- zip [xK_w, xK_r] [1,0] -- For w,r keys in backwards order
, (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
remKeys = [(winKey, n) | n <- [xK_0 .. xK_9]]
--dXPConfig = defaultXPConfig {
dXPConfig = def {
bgColor = "yellow"
, fgColor = "blue"
, font = myFont
}
--myXPConfigSelect = defaultXPConfig {
myXPConfigSelect = def {
bgColor = "yellow"
, fgColor = "blue"
, autoComplete = Just 0
, showCompletionOnTab = True
, font = myFont
}
--myXPConfigNew = defaultXPConfig {
myXPConfigNew = def {
bgColor = "yellow"
, fgColor = "blue"
, autoComplete = Nothing
, showCompletionOnTab = True
, font = myFont
}